diff --git a/include/gpu/GrTypes.h b/include/gpu/GrTypes.h
index f6809d6..0ab7773 100644
--- a/include/gpu/GrTypes.h
+++ b/include/gpu/GrTypes.h
@@ -321,11 +321,6 @@
     #error "SK_*32_SHIFT values must correspond to GL_BGRA or GL_RGBA format."
 #endif
 
-// WebKit is relying on this old name for the native skia PM config. This will
-// be deleted ASAP because it is so similar to kRGBA_PM_8888_GrPixelConfig but
-// has a different interpretation when skia is compiled BGRA.
-static const GrPixelConfig kRGBA_8888_GrPixelConfig = kSkia8888_PM_GrPixelConfig;
-
 // Returns true if the pixel config has 8bit r,g,b,a components in that byte
 // order
 static inline bool GrPixelConfigIsRGBA8888(GrPixelConfig config) {
@@ -431,12 +426,6 @@
 }
 
 /**
- * DEPRECATED: This will be removed as soon as WebKit no longer references
- * this (former) enum value.
- */
-static const int kNone_GrAALevel = 0;
-
-/**
  * Optional bitfield flags that can be passed to createTexture.
  */
 enum GrTextureFlags {
@@ -481,7 +470,7 @@
      * internal format used by 3D API.
      */
     GrPixelConfig          fConfig;
-    
+
     /**
      * The number of samples per pixel or 0 to disable full scene AA. This only
      * applies if the kRenderTarget_GrTextureFlagBit is set. The actual number
@@ -489,15 +478,7 @@
      * up to the next supported sample count, or down if it is larger than the
      * max supportex count.
      */
-    union {
-        /**
-         * This field has two names for legacy reasons. Use the fSampleCnt name.
-         * fAALevel is deprecated and will be removed as soon as WebKit no
-         * longer uses it.
-         */
-        int fSampleCnt;
-        int fAALevel;
-    };
+    int fSampleCnt;
 };
 
 /**
diff --git a/src/gpu/GrAtlas.cpp b/src/gpu/GrAtlas.cpp
index 9553cf2..f8586fa 100644
--- a/src/gpu/GrAtlas.cpp
+++ b/src/gpu/GrAtlas.cpp
@@ -182,7 +182,7 @@
             GR_ATLAS_TEXTURE_WIDTH,
             GR_ATLAS_TEXTURE_HEIGHT,
             maskformat2pixelconfig(format),
-            {0} // samples
+            0 // samples
         };
         fTexture[format] = fGpu->createTexture(desc, NULL, 0);
         if (NULL == fTexture[format]) {
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
index 64ae1a5..2cc460a 100644
--- a/src/gpu/GrContext.cpp
+++ b/src/gpu/GrContext.cpp
@@ -1394,7 +1394,7 @@
         bounds.fRight,
         bounds.fBottom,
         kAlpha_8_GrPixelConfig,
-        {0} // samples
+        0 // samples
     };
 
     tex->set(context, desc);
@@ -1705,7 +1705,7 @@
             kRenderTarget_GrTextureFlagBit,
             width, height,
             config,
-            {0}, // samples
+            0 // samples
         };
 
         // When a full readback is faster than a partial we could always make
@@ -1855,7 +1855,7 @@
     }
 
     const GrTextureDesc desc = {
-        kNone_GrTextureFlags, width, height, config, {0}
+        kNone_GrTextureFlags, width, height, config, 0
     };
     GrAutoScratchTexture ast(this, desc);
     GrTexture* texture = ast.texture();
@@ -2133,8 +2133,8 @@
         kRenderTarget_GrTextureFlagBit | kNoStencil_GrTextureFlagBit,
         SkScalarFloorToInt(srcRect.width()),
         SkScalarFloorToInt(srcRect.height()),
-        kRGBA_8888_GrPixelConfig,
-        {0} // samples 
+        kRGBA_8888_PM_GrPixelConfig,
+        0 // samples 
     };
 
     temp1->set(this, desc);
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index 5f9879e..e13a0ea 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -230,7 +230,7 @@
         width,
         height,
         SkGr::Bitmap2PixelConfig(bm),
-        {0} // samples
+        0 // samples
     };
 
     fTexture = fContext->createUncachedTexture(desc, NULL, 0);
@@ -801,7 +801,7 @@
         // We actually only need A8, but it often isn't supported as a
         // render target
         kRGBA_8888_PM_GrPixelConfig,
-        {0} // samples
+        0 // samples
     };
 
     GrAutoScratchTexture pathEntry(context, desc);
@@ -932,7 +932,7 @@
         dstM.fBounds.width(),
         dstM.fBounds.height(),
         kAlpha_8_GrPixelConfig,
-        {0}, // samples
+        0, // samples
     };
 
     GrAutoScratchTexture ast(context, desc);
@@ -1436,7 +1436,7 @@
         rect.width(),
         rect.height(),
         kRGBA_8888_PM_GrPixelConfig,
-        {0} // samples
+        0 // samples
     };
 
     if (filter->asABlur(&blurSize)) {
@@ -1826,7 +1826,7 @@
             bitmap.width(),
             bitmap.height(),
             SkGr::Bitmap2PixelConfig(bitmap),
-            {0} // samples
+            0 // samples
         };
         GrContext::ScratchTexMatch match;
         if (kSaveLayerDeviceRenderTarget_TexType == type) {
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp
index 519475c..ba98e06 100644
--- a/src/gpu/SkGr.cpp
+++ b/src/gpu/SkGr.cpp
@@ -76,7 +76,7 @@
         bitmap->width(),
         bitmap->height(),
         SkGr::Bitmap2PixelConfig(*bitmap),
-        {0} // samples
+        0 // samples
     };
 
     if (SkBitmap::kIndex8_Config == bitmap->config()) {
diff --git a/src/gpu/gl/GrGpuGL.cpp b/src/gpu/gl/GrGpuGL.cpp
index 8754ac3..8214b6e 100644
--- a/src/gpu/gl/GrGpuGL.cpp
+++ b/src/gpu/gl/GrGpuGL.cpp
@@ -319,7 +319,7 @@
                          kNoStencil_GrTextureFlagBit;
         dstDesc.fWidth = 256;
         dstDesc.fHeight = 256;
-        dstDesc.fConfig = kRGBA_8888_GrPixelConfig;
+        dstDesc.fConfig = kRGBA_8888_PM_GrPixelConfig;
         dstDesc.fSampleCnt = 0;
 
         SkAutoTUnref<GrTexture> dstTex(this->createTexture(dstDesc, NULL, 0));
