remove references to deprecated porterduff
diff --git a/WebCore/platform/graphics/android/GraphicsContextAndroid.cpp b/WebCore/platform/graphics/android/GraphicsContextAndroid.cpp
index 3b4d9a9..0358a54 100644
--- a/WebCore/platform/graphics/android/GraphicsContextAndroid.cpp
+++ b/WebCore/platform/graphics/android/GraphicsContextAndroid.cpp
@@ -38,7 +38,6 @@
 #include "SkDashPathEffect.h"
 #include "SkDevice.h"
 #include "SkPaint.h"
-#include "SkPorterDuff.h"
 #include "PlatformGraphicsContext.h"
 #include "TransformationMatrix.h"
 
@@ -66,7 +65,7 @@
 /*  TODO / questions
 
     mAlpha: how does this interact with the alpha in Color? multiply them together?
-    mPorterDuffMode: do I always respect this? If so, then
+    mMode: do I always respect this? If so, then
                      the rgb() & 0xFF000000 check will abort drawing too often
     Is Color premultiplied or not? If it is, then I can't blindly pass it to paint.setColor()
 */
@@ -91,7 +90,7 @@
         float               mStrokeThickness;
         SkPaint::Cap        mLineCap;
         SkPaint::Join       mLineJoin;
-        SkPorterDuff::Mode  mPorterDuffMode;
+        SkXfermode::Mode    mMode;
         int                 mDashRatio; //ratio of the length of a dash to its width
         ShadowRec           mShadow;
         SkColor             mFillColor;
@@ -106,7 +105,7 @@
             mStrokeThickness = 0.0f;  // Same as default in GraphicsContextPrivate.h
             mLineCap         = SkPaint::kDefault_Cap;
             mLineJoin        = SkPaint::kDefault_Join;
-            mPorterDuffMode  = SkPorterDuff::kSrcOver_Mode;
+            mMode            = SkXfermode::kSrcOver_Mode;
             mDashRatio       = 3;
             mUseAA           = true;
             mShadow.mBlur    = 0;
@@ -138,7 +137,7 @@
             if (mShadow.mBlur > 0) {
                 paint->setAntiAlias(true);
                 paint->setDither(true);
-                paint->setPorterDuffXfermode(mPorterDuffMode);
+                paint->setXfermode(mMode);
                 paint->setColor(mShadow.mColor);
                 paint->setMaskFilter(SkBlurMaskFilter::Create(mShadow.mBlur,
                                 SkBlurMaskFilter::kNormal_BlurStyle))->unref();
@@ -226,7 +225,7 @@
     void setup_paint_common(SkPaint* paint) const {
         paint->setAntiAlias(mState->mUseAA);
         paint->setDither(true);
-        paint->setPorterDuffXfermode(mState->mPorterDuffMode);
+        paint->setXfermode(mState->mMode);
         if (mState->mShadow.mBlur > 0) {
             SkDrawLooper* looper = new SkBlurDrawLooper(mState->mShadow.mBlur,
                                                         mState->mShadow.mDx,
@@ -899,7 +898,7 @@
 
 void GraphicsContext::setCompositeOperation(CompositeOperator op)
 {
-    m_data->mState->mPorterDuffMode = WebCoreCompositeToSkiaComposite(op);
+    m_data->mState->mMode = WebCoreCompositeToSkiaMode(op);
 }
 
 void GraphicsContext::clearRect(const FloatRect& rect)
@@ -910,7 +909,7 @@
     SkPaint paint;
     
     m_data->setup_paint_fill(&paint);
-    paint.setPorterDuffXfermode(SkPorterDuff::kClear_Mode);
+    paint.setXfermode(SkXfermode::kClear_Mode);
     GC2Canvas(this)->drawRect(rect, paint);
 }
 
diff --git a/WebCore/platform/graphics/android/ImageAndroid.cpp b/WebCore/platform/graphics/android/ImageAndroid.cpp
index 5d81b56..f0b36fb 100644
--- a/WebCore/platform/graphics/android/ImageAndroid.cpp
+++ b/WebCore/platform/graphics/android/ImageAndroid.cpp
@@ -213,7 +213,7 @@
 
     ctxt->setupFillPaint(&paint);   // need global alpha among other things
     paint.setFilterBitmap(true);
-    paint.setPorterDuffXfermode(WebCoreCompositeToSkiaComposite(compositeOp));
+    paint.setXfermode(WebCoreCompositeToSkiaMode(compositeOp));
     canvas->drawBitmapRect(bitmap, &srcR, dstR, &paint);
 
 #ifdef TRACE_SUBSAMPLED_BITMAPS
@@ -285,7 +285,7 @@
                                                     SkShader::kRepeat_TileMode);
     paint.setShader(shader)->unref();
     // now paint is the only owner of shader
-    paint.setPorterDuffXfermode(WebCoreCompositeToSkiaComposite(compositeOp));
+    paint.setXfermode(WebCoreCompositeToSkiaMode(compositeOp));
     paint.setFilterBitmap(true);
 
     SkMatrix matrix(patternTransform);
diff --git a/WebCore/platform/graphics/skia/SkiaUtils.cpp b/WebCore/platform/graphics/skia/SkiaUtils.cpp
index 4242e7d..a7a266d 100644
--- a/WebCore/platform/graphics/skia/SkiaUtils.cpp
+++ b/WebCore/platform/graphics/skia/SkiaUtils.cpp
@@ -42,6 +42,40 @@
 
 namespace WebCore {
 
+static const struct CompositOpToSkiaMode {
+    uint8_t mCompositOp;
+    uint8_t mMode;
+} gMapCompositOpsToSkiaModes[] = {
+    { CompositeClear,           SkXfermode::kClear_Mode },
+    { CompositeCopy,            SkXfermode::kSrc_Mode },
+    { CompositeSourceOver,      SkXfermode::kSrcOver_Mode },
+    { CompositeSourceIn,        SkXfermode::kSrcIn_Mode },
+    { CompositeSourceOut,       SkXfermode::kSrcOut_Mode },
+    { CompositeSourceAtop,      SkXfermode::kSrcATop_Mode },
+    { CompositeDestinationOver, SkXfermode::kDstOver_Mode },
+    { CompositeDestinationIn,   SkXfermode::kDstIn_Mode },
+    { CompositeDestinationOut,  SkXfermode::kDstOut_Mode },
+    { CompositeDestinationAtop, SkXfermode::kDstATop_Mode },
+    { CompositeXOR,             SkXfermode::kXor_Mode },
+    // need more details on the composite modes to be sure these are right
+    { CompositePlusDarker,      SkXfermode::kDarken_Mode },
+    { CompositeHighlight,       SkXfermode::kSrcOver_Mode },  // TODO
+    { CompositePlusLighter,     SkXfermode::kPlus_Mode }
+};
+
+SkXfermode::Mode WebCoreCompositeToSkiaMode(CompositeOperator op)
+{
+    const CompositOpToSkiaMode* table = gMapCompositOpsToSkiaModes;
+    
+    for (unsigned i = 0; i < SK_ARRAY_COUNT(gMapCompositOpsToSkiaModes); i++) {
+        if (table[i].mCompositOp == op)
+            return (SkXfermode::Mode)table[i].mMode;
+    }
+    
+    SkDEBUGF(("GraphicsContext::setCompositeOperation uknown CompositeOperator %d\n", op));
+    return SkXfermode::kSrcOver_Mode; // fall-back
+}
+    
 static const struct CompositOpToPorterDuffMode {
     uint8_t mCompositOp;
     uint8_t mPorterDuffMode;
diff --git a/WebCore/platform/graphics/skia/SkiaUtils.h b/WebCore/platform/graphics/skia/SkiaUtils.h
index 0e68574..aa4cd4d 100644
--- a/WebCore/platform/graphics/skia/SkiaUtils.h
+++ b/WebCore/platform/graphics/skia/SkiaUtils.h
@@ -37,12 +37,14 @@
 #include "GraphicsContext.h"
 #include "SkPath.h"
 #include "SkPorterDuff.h"
+#include "SkXfermode.h"
 
 class SkCanvas;
 class SkRegion;
 
 namespace WebCore {
 
+SkXfermode::Mode WebCoreCompositeToSkiaMode(CompositeOperator);
 SkPorterDuff::Mode WebCoreCompositeToSkiaComposite(CompositeOperator);
 
 // move this guy into SkColor.h