diff --git a/bench/DeferredSurfaceCopyBench.cpp b/bench/DeferredSurfaceCopyBench.cpp
index fcc19d4..7130780 100644
--- a/bench/DeferredSurfaceCopyBench.cpp
+++ b/bench/DeferredSurfaceCopyBench.cpp
@@ -37,7 +37,7 @@
         SkImageInfo info;
         info.fWidth = kSurfaceWidth;
         info.fHeight = kSurfaceHeight;
-        info.fColorType = kN32_SkColorType;
+        info.fColorType = kPMColor_SkColorType;
         info.fAlphaType = kPremul_SkAlphaType;
         const SkRect fullCanvasRect = SkRect::MakeWH(
             SkIntToScalar(kSurfaceWidth), SkIntToScalar(kSurfaceHeight));
diff --git a/bench/benchmain.cpp b/bench/benchmain.cpp
index cc55bb9..ca760b7 100644
--- a/bench/benchmain.cpp
+++ b/bench/benchmain.cpp
@@ -207,20 +207,20 @@
     GLContextType       contextType;
     bool                runByDefault;
 } gConfigs[] = {
-    { kN32_SkColorType,     "NONRENDERING", 0, SkBenchmark::kNonRendering_Backend, kNative, true},
-    { kN32_SkColorType,     "8888",         0, SkBenchmark::kRaster_Backend,       kNative, true},
+    { kPMColor_SkColorType, "NONRENDERING", 0, SkBenchmark::kNonRendering_Backend, kNative, true},
+    { kPMColor_SkColorType, "8888",         0, SkBenchmark::kRaster_Backend,       kNative, true},
     { kRGB_565_SkColorType, "565",          0, SkBenchmark::kRaster_Backend,       kNative, true},
 #if SK_SUPPORT_GPU
-    { kN32_SkColorType,     "GPU",          0, SkBenchmark::kGPU_Backend,          kNative, true},
-    { kN32_SkColorType,     "MSAA4",        4, SkBenchmark::kGPU_Backend,          kNative, false},
-    { kN32_SkColorType,     "MSAA16",      16, SkBenchmark::kGPU_Backend,          kNative, false},
-    { kN32_SkColorType,     "NVPRMSAA4",    4, SkBenchmark::kGPU_Backend,          kNVPR,   true},
-    { kN32_SkColorType,     "NVPRMSAA16",  16, SkBenchmark::kGPU_Backend,          kNVPR,   false},
+    { kPMColor_SkColorType, "GPU",          0, SkBenchmark::kGPU_Backend,          kNative, true},
+    { kPMColor_SkColorType, "MSAA4",        4, SkBenchmark::kGPU_Backend,          kNative, false},
+    { kPMColor_SkColorType, "MSAA16",      16, SkBenchmark::kGPU_Backend,          kNative, false},
+    { kPMColor_SkColorType, "NVPRMSAA4",    4, SkBenchmark::kGPU_Backend,          kNVPR,   true},
+    { kPMColor_SkColorType, "NVPRMSAA16",  16, SkBenchmark::kGPU_Backend,          kNVPR,   false},
 #if SK_ANGLE
-    { kN32_SkColorType,     "ANGLE",        0, SkBenchmark::kGPU_Backend,          kANGLE,  true},
+    { kPMColor_SkColorType, "ANGLE",        0, SkBenchmark::kGPU_Backend,          kANGLE,  true},
 #endif // SK_ANGLE
-    { kN32_SkColorType,     "Debug",        0, SkBenchmark::kGPU_Backend,          kDebug,  kIsDebug},
-    { kN32_SkColorType,     "NULLGPU",      0, SkBenchmark::kGPU_Backend,          kNull,   true},
+    { kPMColor_SkColorType, "Debug",        0, SkBenchmark::kGPU_Backend,          kDebug,  kIsDebug},
+    { kPMColor_SkColorType, "NULLGPU",      0, SkBenchmark::kGPU_Backend,          kNull,   true},
 #endif // SK_SUPPORT_GPU
 };
 
diff --git a/debugger/QT/SkImageWidget.cpp b/debugger/QT/SkImageWidget.cpp
index 03c7e7e..9e26300 100644
--- a/debugger/QT/SkImageWidget.cpp
+++ b/debugger/QT/SkImageWidget.cpp
@@ -19,7 +19,7 @@
     SkImageInfo info;
     info.fWidth = kImageWidgetWidth;
     info.fHeight = kImageWidgetHeight;
-    info.fColorType = kN32_SkColorType;
+    info.fColorType = kPMColor_SkColorType;
     info.fAlphaType = kPremul_SkAlphaType;
 
     fSurface = SkSurface::NewRasterDirect(info, fPixels, 4 * kImageWidgetWidth);
diff --git a/dm/DM.cpp b/dm/DM.cpp
index ef5c0f6..a8a2b6d 100644
--- a/dm/DM.cpp
+++ b/dm/DM.cpp
@@ -88,7 +88,7 @@
     for (int i = 0; i < gms.count(); i++) {
         for (int j = 0; j < configs.count(); j++) {
             START("565",      CpuGMTask, kRGB_565_SkColorType);
-            START("8888",     CpuGMTask, kN32_SkColorType);
+            START("8888",     CpuGMTask, kPMColor_SkColorType);
             START("gpu",      GpuGMTask, native, 0);
             START("msaa4",    GpuGMTask, native, 4);
             START("msaa16",   GpuGMTask, native, 16);
@@ -115,7 +115,7 @@
         for (int j = 0; j < configs.count(); j++) {
             START("nonrendering", NonRenderingBenchTask);
             START("565",          CpuBenchTask, kRGB_565_SkColorType);
-            START("8888",         CpuBenchTask, kN32_SkColorType);
+            START("8888",         CpuBenchTask, kPMColor_SkColorType);
             START("gpu",          GpuBenchTask, native, 0);
             START("msaa4",        GpuBenchTask, native, 4);
             START("msaa16",       GpuBenchTask, native, 16);
diff --git a/dm/DMBenchTask.cpp b/dm/DMBenchTask.cpp
index bcedb96..c53daf9 100644
--- a/dm/DMBenchTask.cpp
+++ b/dm/DMBenchTask.cpp
@@ -63,7 +63,7 @@
 }
 
 void NonRenderingBenchTask::draw() {
-    draw_raster(fBench.get(), kN32_SkColorType);
+    draw_raster(fBench.get(), kPMColor_SkColorType);
 }
 
 void CpuBenchTask::draw() {
@@ -73,7 +73,7 @@
 void GpuBenchTask::draw(GrContextFactory* grFactory) {
     SkImageInfo info = SkImageInfo::Make(fBench->getSize().x(),
                                          fBench->getSize().y(),
-                                         kN32_SkColorType,
+                                         kPMColor_SkColorType,
                                          kPremul_SkAlphaType);
     SkAutoTUnref<SkSurface> surface(NewGpuSurface(grFactory, fContextType, info, fSampleCount));
 
diff --git a/dm/DMGpuGMTask.cpp b/dm/DMGpuGMTask.cpp
index c72f675..c4867b6 100644
--- a/dm/DMGpuGMTask.cpp
+++ b/dm/DMGpuGMTask.cpp
@@ -27,7 +27,7 @@
 void GpuGMTask::draw(GrContextFactory* grFactory) {
     SkImageInfo info = SkImageInfo::Make(SkScalarCeilToInt(fGM->width()),
                                          SkScalarCeilToInt(fGM->height()),
-                                         kN32_SkColorType,
+                                         kPMColor_SkColorType,
                                          kPremul_SkAlphaType);
     SkAutoTUnref<SkSurface> surface(NewGpuSurface(grFactory, fContextType, info, fSampleCount));
     SkCanvas* canvas = surface->getCanvas();
diff --git a/experimental/iOSSampleApp/Shared/SkUIView.mm b/experimental/iOSSampleApp/Shared/SkUIView.mm
index e2dce54..904cb9c 100644
--- a/experimental/iOSSampleApp/Shared/SkUIView.mm
+++ b/experimental/iOSSampleApp/Shared/SkUIView.mm
@@ -30,7 +30,7 @@
     if (NULL != fWind) {
         fWind->setVisibleP(true);
         fWind->resize(self.frame.size.width, self.frame.size.height,
-                      kN32_SkColorType);
+                      kPMColor_SkColorType);
     }
 }
 
diff --git a/experimental/iOSSampleApp/SkSampleUIView.mm b/experimental/iOSSampleApp/SkSampleUIView.mm
index a9defbe..7b90cb7 100644
--- a/experimental/iOSSampleApp/SkSampleUIView.mm
+++ b/experimental/iOSSampleApp/SkSampleUIView.mm
@@ -337,7 +337,7 @@
         fWind = new SampleWindow(self, 1, &kDummyArgv, fDevManager);
 
         fWind->resize(self.frame.size.width, self.frame.size.height,
-                      kN32_SkColorType);
+                      kPMColor_SkColorType);
     }
     return self;
 }
diff --git a/gm/bitmapcopy.cpp b/gm/bitmapcopy.cpp
index b441e34..36b711e 100644
--- a/gm/bitmapcopy.cpp
+++ b/gm/bitmapcopy.cpp
@@ -22,7 +22,7 @@
 static const SkColorType gColorTypes[] = {
     kRGB_565_SkColorType,
     kARGB_4444_SkColorType,
-    kN32_SkColorType,
+    kPMColor_SkColorType,
 };
 
 #define NUM_CONFIGS SK_ARRAY_COUNT(gColorTypes)
diff --git a/gm/bitmapfilters.cpp b/gm/bitmapfilters.cpp
index 5fa2130..fb3b304 100644
--- a/gm/bitmapfilters.cpp
+++ b/gm/bitmapfilters.cpp
@@ -87,7 +87,7 @@
         make_bm(&fBM8);
         fBM8.copyTo(&fBM4444, kARGB_4444_SkColorType);
         fBM8.copyTo(&fBM16, kRGB_565_SkColorType);
-        fBM8.copyTo(&fBM32, kN32_SkColorType);
+        fBM8.copyTo(&fBM32, kPMColor_SkColorType);
     }
 public:
     SkBitmap    fBM8, fBM4444, fBM16, fBM32;
diff --git a/gm/bitmappremul.cpp b/gm/bitmappremul.cpp
index e315faf..fd563eb 100644
--- a/gm/bitmappremul.cpp
+++ b/gm/bitmappremul.cpp
@@ -30,7 +30,7 @@
 
 static SkBitmap make_argb8888_gradient() {
     SkBitmap bitmap;
-    init_bitmap(kN32_SkColorType, &bitmap);
+    init_bitmap(kPMColor_SkColorType, &bitmap);
     uint8_t rowColor = 0;
     for (int y = 0; y < SLIDE_SIZE; y++) {
         uint32_t* dst = bitmap.getAddr32(0, y);
@@ -64,7 +64,7 @@
 
 static SkBitmap make_argb8888_stripes() {
     SkBitmap bitmap;
-    init_bitmap(kN32_SkColorType, &bitmap);
+    init_bitmap(kPMColor_SkColorType, &bitmap);
     uint8_t rowColor = 0;
     for (int y = 0; y < SLIDE_SIZE; y++) {
         uint32_t* dst = bitmap.getAddr32(0, y);
diff --git a/gm/gammatext.cpp b/gm/gammatext.cpp
index f520754..7ee55db 100644
--- a/gm/gammatext.cpp
+++ b/gm/gammatext.cpp
@@ -40,7 +40,7 @@
 
 static CGContextRef makeCG(const SkImageInfo& info, const void* addr,
                            size_t rowBytes) {
-    if (kN32_SkColorType != info.colorType() || NULL == addr) {
+    if (kPMColor_SkColorType != info.colorType() || NULL == addr) {
         return NULL;
     }
     CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
diff --git a/gm/gmmain.cpp b/gm/gmmain.cpp
index 03556e7..52e7332 100644
--- a/gm/gmmain.cpp
+++ b/gm/gmmain.cpp
@@ -268,7 +268,7 @@
     static void force_all_opaque(const SkBitmap& bitmap) {
         SkColorType colorType = bitmap.colorType();
         switch (colorType) {
-        case kN32_SkColorType:
+        case kPMColor_SkColorType:
             force_all_opaque_8888(bitmap);
             break;
         case kRGB_565_SkColorType:
@@ -294,7 +294,7 @@
         // from this method, we should be able to get rid of the
         // transformation to 8888 format also.
         SkBitmap copy;
-        bitmap.copyTo(&copy, kN32_SkColorType);
+        bitmap.copyTo(&copy, kPMColor_SkColorType);
         if (!SkImageEncoder::EncodeFile(path.c_str(), copy,
                                         SkImageEncoder::kPNG_Type,
                                         100)) {
@@ -740,8 +740,8 @@
             return;
         }
 
-        if ((kN32_SkColorType != expectedBitmap.colorType()) ||
-            (kN32_SkColorType != actualBitmap.colorType())) {
+        if ((kPMColor_SkColorType != expectedBitmap.colorType()) ||
+            (kPMColor_SkColorType != actualBitmap.colorType())) {
             SkDebugf("---- %s: not computing max per-channel pixel mismatch because non-8888\n",
                      testName);
             return;
diff --git a/gm/tilemodes.cpp b/gm/tilemodes.cpp
index abecada..5b97f13 100644
--- a/gm/tilemodes.cpp
+++ b/gm/tilemodes.cpp
@@ -50,7 +50,7 @@
 }
 
 static const SkColorType gColorTypes[] = {
-    kN32_SkColorType,
+    kPMColor_SkColorType,
     kRGB_565_SkColorType,
 };
 
@@ -166,7 +166,7 @@
 
 static SkShader* make_bm(SkShader::TileMode tx, SkShader::TileMode ty) {
     SkBitmap bm;
-    makebm(&bm, kN32_SkColorType, gWidth, gHeight);
+    makebm(&bm, kPMColor_SkColorType, gWidth, gHeight);
     return SkShader::CreateBitmapShader(bm, tx, ty);
 }
 
diff --git a/gm/tilemodes_scaled.cpp b/gm/tilemodes_scaled.cpp
index bbb86a7..932d3f7 100644
--- a/gm/tilemodes_scaled.cpp
+++ b/gm/tilemodes_scaled.cpp
@@ -50,7 +50,7 @@
 }
 
 static const SkColorType gColorTypes[] = {
-    kN32_SkColorType,
+    kPMColor_SkColorType,
     kRGB_565_SkColorType,
 };
 
@@ -177,7 +177,7 @@
 
 static SkShader* make_bm(SkShader::TileMode tx, SkShader::TileMode ty) {
     SkBitmap bm;
-    makebm(&bm, kN32_SkColorType, gWidth, gHeight);
+    makebm(&bm, kPMColor_SkColorType, gWidth, gHeight);
     return SkShader::CreateBitmapShader(bm, tx, ty);
 }
 
diff --git a/gyp/common_conditions.gypi b/gyp/common_conditions.gypi
index 92fb819..3743b60 100644
--- a/gyp/common_conditions.gypi
+++ b/gyp/common_conditions.gypi
@@ -301,8 +301,9 @@
         # Temporary until https:#googleplex-android-review.git.corp.google.com/#/c/442220/
         # lands.
         'SK_SUPPORT_LEGACY_GETTOTALCLIP',
-        # Still need to switch Android to the new name for N32.
-        'kNative_8888_SkColorType kN32_SkColorType',
+        # Use a better name for kPMColor_SkColorType until
+        # https://code.google.com/p/skia/issues/detail?id=2384 is fixed.
+        'kNative_8888_SkColorType kPMColor_SkColorType',
       ],
     }],
 
diff --git a/gyp/skia_for_chromium_defines.gypi b/gyp/skia_for_chromium_defines.gypi
index bd59fd0..a547f73 100644
--- a/gyp/skia_for_chromium_defines.gypi
+++ b/gyp/skia_for_chromium_defines.gypi
@@ -16,7 +16,6 @@
       'SK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1',
       'SK_SUPPORT_LEGACY_GETTOTALCLIP',
       'SK_SUPPORT_LEGACY_GETTOPDEVICE',
-      'SK_SUPPORT_LEGACY_N32_NAME',
     ],
   },
 }
diff --git a/include/core/SkImageInfo.h b/include/core/SkImageInfo.h
index 8391954..1c73d95 100644
--- a/include/core/SkImageInfo.h
+++ b/include/core/SkImageInfo.h
@@ -80,16 +80,12 @@
     kLastEnum_SkColorType = kIndex_8_SkColorType,
 
 #if SK_PMCOLOR_BYTE_ORDER(B,G,R,A)
-    kN32_SkColorType = kBGRA_8888_SkColorType,
+    kPMColor_SkColorType = kBGRA_8888_SkColorType
 #elif SK_PMCOLOR_BYTE_ORDER(R,G,B,A)
-    kN32_SkColorType = kRGBA_8888_SkColorType,
+    kPMColor_SkColorType = kRGBA_8888_SkColorType
 #else
 #error "SK_*32_SHFIT values must correspond to BGRA or RGBA byte order"
 #endif
-
-#ifdef SK_SUPPORT_LEGACY_N32_NAME
-    kPMColor_SkColorType = kN32_SkColorType
-#endif
 };
 
 static int SkColorTypeBytesPerPixel(SkColorType ct) {
@@ -140,7 +136,7 @@
      */
     static SkImageInfo MakeN32(int width, int height, SkAlphaType at) {
         SkImageInfo info = {
-            width, height, kN32_SkColorType, at
+            width, height, kPMColor_SkColorType, at
         };
         return info;
     }
@@ -150,7 +146,7 @@
      */
     static SkImageInfo MakeN32Premul(int width, int height) {
         SkImageInfo info = {
-            width, height, kN32_SkColorType, kPremul_SkAlphaType
+            width, height, kPMColor_SkColorType, kPremul_SkAlphaType
         };
         return info;
     }
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index 050fc4a..c8fbf3d 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -958,7 +958,7 @@
     fSlideMenu = new SkOSMenu;
     this->addMenu(fSlideMenu);
 
-    this->setColorType(kN32_SkColorType);
+    this->setColorType(kPMColor_SkColorType);
     this->setVisibleP(true);
     this->setClipToBounds(false);
 
@@ -1449,7 +1449,7 @@
 
         SkBaseDevice* device = orig->getDevice();
         SkBitmap bmp;
-        if (device->accessBitmap(false).copyTo(&bmp, kN32_SkColorType)) {
+        if (device->accessBitmap(false).copyTo(&bmp, kPMColor_SkColorType)) {
             static int gSampleGrabCounter;
             SkString name;
             name.printf("sample_grab_%d.png", gSampleGrabCounter++);
@@ -1552,7 +1552,7 @@
     kUnknown_SkColorType,           // none -> none
     kUnknown_SkColorType,           // a8 -> none
     kARGB_4444_SkColorType,         // 565 -> 4444
-    kN32_SkColorType,               // 4444 -> 8888
+    kPMColor_SkColorType,           // 4444 -> 8888
     kRGB_565_SkColorType,           // 8888 -> 565
     kRGB_565_SkColorType,           // 8888 -> 565
     kUnknown_SkColorType,           // index8 -> none
diff --git a/samplecode/SampleDitherBitmap.cpp b/samplecode/SampleDitherBitmap.cpp
index e05d074..a3ebafa 100644
--- a/samplecode/SampleDitherBitmap.cpp
+++ b/samplecode/SampleDitherBitmap.cpp
@@ -84,7 +84,7 @@
     DitherBitmapView() {
         fResult = test_pathregion();
         fBM8 = make_bitmap();
-        fBM8.copyTo(&fBM32, kN32_SkColorType);
+        fBM8.copyTo(&fBM32, kPMColor_SkColorType);
 
         this->setBGColor(0xFFDDDDDD);
     }
diff --git a/samplecode/SampleEncode.cpp b/samplecode/SampleEncode.cpp
index 080c05f..4769fbb 100644
--- a/samplecode/SampleEncode.cpp
+++ b/samplecode/SampleEncode.cpp
@@ -43,7 +43,7 @@
                       SkIntToScalar(width)/2, paint);
 
     switch (ct) {
-        case kN32_SkColorType:
+        case kPMColor_SkColorType:
             bm->swap(device);
             break;
         case kRGB_565_SkColorType: {
@@ -81,7 +81,7 @@
 
 // configs to build the original bitmap in. Can be at most these 3
 static const SkColorType gColorTypes[] = {
-    kN32_SkColorType,
+    kPMColor_SkColorType,
     kRGB_565_SkColorType,
     kIndex_8_SkColorType,   // opaque
     kIndex_8_SkColorType    // alpha
diff --git a/samplecode/SampleFilter.cpp b/samplecode/SampleFilter.cpp
index e17a33c..7b2c551 100644
--- a/samplecode/SampleFilter.cpp
+++ b/samplecode/SampleFilter.cpp
@@ -91,7 +91,7 @@
         make_bm(&fBM8);
         fBM8.copyTo(&fBM4444, kARGB_4444_SkColorType);
         fBM8.copyTo(&fBM16, kRGB_565_SkColorType);
-        fBM8.copyTo(&fBM32, kN32_SkColorType);
+        fBM8.copyTo(&fBM32, kPMColor_SkColorType);
 
         this->setBGColor(0xFFDDDDDD);
     }
diff --git a/samplecode/SampleFilterFuzz.cpp b/samplecode/SampleFilterFuzz.cpp
index 8d58b9b..28671d6 100644
--- a/samplecode/SampleFilterFuzz.cpp
+++ b/samplecode/SampleFilterFuzz.cpp
@@ -116,7 +116,7 @@
         case kAlpha_8_SkColorType:
         case kRGB_565_SkColorType:
             return true;
-        case kN32_SkColorType:
+        case kPMColor_SkColorType:
             return kPremul_SkAlphaType == info.alphaType() ||
                    kOpaque_SkAlphaType == info.alphaType();
         default:
diff --git a/samplecode/SampleTiling.cpp b/samplecode/SampleTiling.cpp
index 9ffcceb..735b990 100644
--- a/samplecode/SampleTiling.cpp
+++ b/samplecode/SampleTiling.cpp
@@ -55,7 +55,7 @@
 }
 
 static const SkColorType gColorTypes[] = {
-    kN32_SkColorType,
+    kPMColor_SkColorType,
     kRGB_565_SkColorType,
 };
 static const int gWidth = 32;
diff --git a/src/core/SkBitmap.cpp b/src/core/SkBitmap.cpp
index 7239517..0736e17 100644
--- a/src/core/SkBitmap.cpp
+++ b/src/core/SkBitmap.cpp
@@ -346,7 +346,7 @@
             ct = kARGB_4444_SkColorType;
             break;
         case SkBitmap::kARGB_8888_Config:
-            ct = kN32_SkColorType;
+            ct = kPMColor_SkColorType;
             break;
         case SkBitmap::kNo_Config:
         default:
@@ -997,7 +997,7 @@
     switch (dstColorType) {
         case kAlpha_8_SkColorType:
         case kRGB_565_SkColorType:
-        case kN32_SkColorType:
+        case kPMColor_SkColorType:
             break;
         case kIndex_8_SkColorType:
             if (!sameConfigs) {
@@ -1005,7 +1005,7 @@
             }
             break;
         case kARGB_4444_SkColorType:
-            return sameConfigs || kN32_SkColorType == this->colorType();
+            return sameConfigs || kPMColor_SkColorType == this->colorType();
         default:
             return false;
     }
@@ -1116,7 +1116,7 @@
             }
         }
     } else if (kARGB_4444_SkColorType == dstColorType
-               && kN32_SkColorType == src->colorType()) {
+               && kPMColor_SkColorType == src->colorType()) {
         SkASSERT(src->height() == tmpDst.height());
         SkASSERT(src->width() == tmpDst.width());
         for (int y = 0; y < src->height(); ++y) {
diff --git a/src/core/SkBitmapDevice.cpp b/src/core/SkBitmapDevice.cpp
index c2b633e..ba529a7 100644
--- a/src/core/SkBitmapDevice.cpp
+++ b/src/core/SkBitmapDevice.cpp
@@ -45,7 +45,7 @@
         case kRGB_565_SkColorType:
             canonicalAlphaType = kOpaque_SkAlphaType;
             break;
-        case kN32_SkColorType:
+        case kPMColor_SkColorType:
             break;
         default:
             return false;
diff --git a/src/core/SkBitmapFilter.cpp b/src/core/SkBitmapFilter.cpp
index a9c3223..1653cbb 100644
--- a/src/core/SkBitmapFilter.cpp
+++ b/src/core/SkBitmapFilter.cpp
@@ -124,7 +124,7 @@
     }
 
     // TODO: consider supporting other colortypes (e.g. 565, A8)
-    if (fBitmap->colorType() != kN32_SkColorType) {
+    if (fBitmap->colorType() != kPMColor_SkColorType) {
         return false;
     }
 
diff --git a/src/core/SkBitmapProcShader.cpp b/src/core/SkBitmapProcShader.cpp
index a397b78..9c2c77b 100644
--- a/src/core/SkBitmapProcShader.cpp
+++ b/src/core/SkBitmapProcShader.cpp
@@ -22,7 +22,7 @@
         case kAlpha_8_SkColorType:
         case kRGB_565_SkColorType:
         case kIndex_8_SkColorType:
-        case kN32_SkColorType:
+        case kPMColor_SkColorType:
     //        if (tx == ty && (kClamp_TileMode == tx || kRepeat_TileMode == tx))
                 return true;
         default:
@@ -130,7 +130,7 @@
             flags |= (kHasSpan16_Flag | kIntrinsicly16_Flag);
             break;
         case kIndex_8_SkColorType:
-        case kN32_SkColorType:
+        case kPMColor_SkColorType:
             if (bitmapIsOpaque) {
                 flags |= kHasSpan16_Flag;
             }
@@ -279,7 +279,7 @@
     }
 
     switch (bm.colorType()) {
-        case kN32_SkColorType:
+        case kPMColor_SkColorType:
             *color = SkUnPreMultiply::PMColorToColor(*bm.getAddr32(0, 0));
             return true;
         case kRGB_565_SkColorType:
diff --git a/src/core/SkBitmapScaler.cpp b/src/core/SkBitmapScaler.cpp
index 599e9d8..9e8c5fe 100644
--- a/src/core/SkBitmapScaler.cpp
+++ b/src/core/SkBitmapScaler.cpp
@@ -282,7 +282,7 @@
 
     SkAutoLockPixels locker(source);
     if (!source.readyToDraw() ||
-        source.colorType() != kN32_SkColorType) {
+        source.colorType() != kPMColor_SkColorType) {
         return false;
     }
 
diff --git a/src/core/SkBlitter.cpp b/src/core/SkBlitter.cpp
index 52a05ed..4d70395 100644
--- a/src/core/SkBlitter.cpp
+++ b/src/core/SkBlitter.cpp
@@ -923,7 +923,7 @@
             blitter = SkBlitter_ChooseD565(device, *paint, allocator);
             break;
 
-        case kN32_SkColorType:
+        case kPMColor_SkColorType:
             if (shader) {
                 blitter = allocator->createT<SkARGB32_Shader_Blitter>(device, *paint);
             } else if (paint->getColor() == SK_ColorBLACK) {
diff --git a/src/core/SkBlitter_Sprite.cpp b/src/core/SkBlitter_Sprite.cpp
index 91a3cd1..e15e2fc 100644
--- a/src/core/SkBlitter_Sprite.cpp
+++ b/src/core/SkBlitter_Sprite.cpp
@@ -67,7 +67,7 @@
         case kRGB_565_SkColorType:
             blitter = SkSpriteBlitter::ChooseD16(source, paint, allocator);
             break;
-        case kN32_SkColorType:
+        case kPMColor_SkColorType:
             blitter = SkSpriteBlitter::ChooseD32(source, paint, allocator);
             break;
         default:
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 27b7a4c..c16ac9a 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -2613,7 +2613,7 @@
     switch (info.colorType()) {
         case kAlpha_8_SkColorType:
         case kRGB_565_SkColorType:
-        case kN32_SkColorType:
+        case kPMColor_SkColorType:
             break;
         default:
             return false;
diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp
index 7eb0be6..946bf75 100644
--- a/src/core/SkDraw.cpp
+++ b/src/core/SkDraw.cpp
@@ -188,7 +188,7 @@
             */
             SkPMColor pmc = SkPreMultiplyColor(color);
             switch (bitmap.colorType()) {
-                case kN32_SkColorType:
+                case kPMColor_SkColorType:
                     if (data) {
                         *data = pmc;
                     }
@@ -221,7 +221,7 @@
                                BitmapXferProc proc, uint32_t procData) {
     int shiftPerPixel;
     switch (bitmap.colorType()) {
-        case kN32_SkColorType:
+        case kPMColor_SkColorType:
             shiftPerPixel = 2;
             break;
         case kRGB_565_SkColorType:
@@ -515,7 +515,7 @@
                 const SkBitmap* bm = blitter->justAnOpaqueColor(&value);
                 if (bm && kRGB_565_SkColorType == bm->colorType()) {
                     proc = bw_pt_rect_16_hair_proc;
-                } else if (bm && kN32_SkColorType == bm->colorType()) {
+                } else if (bm && kPMColor_SkColorType == bm->colorType()) {
                     proc = bw_pt_rect_32_hair_proc;
                 } else {
                     proc = bw_pt_rect_hair_proc;
diff --git a/src/core/SkScaledImageCache.cpp b/src/core/SkScaledImageCache.cpp
index 886b143..1e37884 100644
--- a/src/core/SkScaledImageCache.cpp
+++ b/src/core/SkScaledImageCache.cpp
@@ -277,7 +277,7 @@
     }
 
     // can we relax this?
-    if (kN32_SkColorType != bitmap->colorType()) {
+    if (kPMColor_SkColorType != bitmap->colorType()) {
         return false;
     }
 
diff --git a/src/core/SkSpriteBlitter_ARGB32.cpp b/src/core/SkSpriteBlitter_ARGB32.cpp
index a4ae41c..b05e503 100644
--- a/src/core/SkSpriteBlitter_ARGB32.cpp
+++ b/src/core/SkSpriteBlitter_ARGB32.cpp
@@ -20,7 +20,7 @@
 class Sprite_D32_S32 : public SkSpriteBlitter {
 public:
     Sprite_D32_S32(const SkBitmap& src, U8CPU alpha)  : INHERITED(src) {
-        SkASSERT(src.colorType() == kN32_SkColorType);
+        SkASSERT(src.colorType() == kPMColor_SkColorType);
 
         unsigned flags32 = 0;
         if (255 != alpha) {
@@ -289,7 +289,7 @@
                 blitter = allocator->createT<Sprite_D32_S4444>(source);
             }
             break;
-        case kN32_SkColorType:
+        case kPMColor_SkColorType:
             if (xfermode || filter) {
                 if (255 == alpha) {
                     // this can handle xfermode or filter, but not alpha
diff --git a/src/core/SkSpriteBlitter_RGB16.cpp b/src/core/SkSpriteBlitter_RGB16.cpp
index 3f712bb..74c1961 100644
--- a/src/core/SkSpriteBlitter_RGB16.cpp
+++ b/src/core/SkSpriteBlitter_RGB16.cpp
@@ -325,7 +325,7 @@
     unsigned alpha = paint.getAlpha();
 
     switch (source.colorType()) {
-        case kN32_SkColorType: {
+        case kPMColor_SkColorType: {
             blitter = allocator->createT<Sprite_D16_S32_BlitRowProc>(source);
             break;
         }
diff --git a/src/effects/SkAlphaThresholdFilter.cpp b/src/effects/SkAlphaThresholdFilter.cpp
index 205e9a9..f938ba6 100644
--- a/src/effects/SkAlphaThresholdFilter.cpp
+++ b/src/effects/SkAlphaThresholdFilter.cpp
@@ -306,9 +306,9 @@
 bool SkAlphaThresholdFilterImpl::onFilterImage(Proxy*, const SkBitmap& src,
                                                const Context& ctx, SkBitmap* dst,
                                                SkIPoint* offset) const {
-    SkASSERT(src.colorType() == kN32_SkColorType);
+    SkASSERT(src.colorType() == kPMColor_SkColorType);
 
-    if (src.colorType() != kN32_SkColorType) {
+    if (src.colorType() != kPMColor_SkColorType) {
         return false;
     }
 
diff --git a/src/effects/SkBicubicImageFilter.cpp b/src/effects/SkBicubicImageFilter.cpp
index 8f78ff2..eabf066 100644
--- a/src/effects/SkBicubicImageFilter.cpp
+++ b/src/effects/SkBicubicImageFilter.cpp
@@ -91,7 +91,7 @@
         return false;
     }
 
-    if (src.colorType() != kN32_SkColorType) {
+    if (src.colorType() != kPMColor_SkColorType) {
         return false;
     }
 
diff --git a/src/effects/SkBlurImageFilter.cpp b/src/effects/SkBlurImageFilter.cpp
index 63990ab..363691a 100644
--- a/src/effects/SkBlurImageFilter.cpp
+++ b/src/effects/SkBlurImageFilter.cpp
@@ -149,7 +149,7 @@
         return false;
     }
 
-    if (src.colorType() != kN32_SkColorType) {
+    if (src.colorType() != kPMColor_SkColorType) {
         return false;
     }
 
diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp
index 3922244..0200cab 100644
--- a/src/effects/SkDisplacementMapEffect.cpp
+++ b/src/effects/SkDisplacementMapEffect.cpp
@@ -205,8 +205,8 @@
         (displInput && !displInput->filterImage(proxy, src, ctx, &displ, &displOffset))) {
         return false;
     }
-    if ((displ.colorType() != kN32_SkColorType) ||
-        (color.colorType() != kN32_SkColorType)) {
+    if ((displ.colorType() != kPMColor_SkColorType) ||
+        (color.colorType() != kPMColor_SkColorType)) {
         return false;
     }
     SkIRect bounds;
diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp
index b485ae1..09ceef0 100644
--- a/src/effects/SkLightingImageFilter.cpp
+++ b/src/effects/SkLightingImageFilter.cpp
@@ -943,7 +943,7 @@
         return false;
     }
 
-    if (src.colorType() != kN32_SkColorType) {
+    if (src.colorType() != kPMColor_SkColorType) {
         return false;
     }
     SkIRect bounds;
@@ -1034,7 +1034,7 @@
         return false;
     }
 
-    if (src.colorType() != kN32_SkColorType) {
+    if (src.colorType() != kPMColor_SkColorType) {
         return false;
     }
 
diff --git a/src/effects/SkMagnifierImageFilter.cpp b/src/effects/SkMagnifierImageFilter.cpp
index 5096640..51ade99 100644
--- a/src/effects/SkMagnifierImageFilter.cpp
+++ b/src/effects/SkMagnifierImageFilter.cpp
@@ -282,11 +282,11 @@
 bool SkMagnifierImageFilter::onFilterImage(Proxy*, const SkBitmap& src,
                                            const Context&, SkBitmap* dst,
                                            SkIPoint* offset) const {
-    SkASSERT(src.colorType() == kN32_SkColorType);
+    SkASSERT(src.colorType() == kPMColor_SkColorType);
     SkASSERT(fSrcRect.width() < src.width());
     SkASSERT(fSrcRect.height() < src.height());
 
-    if ((src.colorType() != kN32_SkColorType) ||
+    if ((src.colorType() != kPMColor_SkColorType) ||
         (fSrcRect.width() >= src.width()) ||
         (fSrcRect.height() >= src.height())) {
       return false;
diff --git a/src/effects/SkMatrixConvolutionImageFilter.cpp b/src/effects/SkMatrixConvolutionImageFilter.cpp
index 878cbae..7b9812d 100644
--- a/src/effects/SkMatrixConvolutionImageFilter.cpp
+++ b/src/effects/SkMatrixConvolutionImageFilter.cpp
@@ -260,7 +260,7 @@
         return false;
     }
 
-    if (src.colorType() != kN32_SkColorType) {
+    if (src.colorType() != kPMColor_SkColorType) {
         return false;
     }
 
diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp
index 2350e6c..fb69758 100644
--- a/src/effects/SkMorphologyImageFilter.cpp
+++ b/src/effects/SkMorphologyImageFilter.cpp
@@ -149,7 +149,7 @@
         return false;
     }
 
-    if (src.colorType() != kN32_SkColorType) {
+    if (src.colorType() != kPMColor_SkColorType) {
         return false;
     }
 
diff --git a/src/effects/SkTransparentShader.cpp b/src/effects/SkTransparentShader.cpp
index bd8b99a..b6a5e1e 100644
--- a/src/effects/SkTransparentShader.cpp
+++ b/src/effects/SkTransparentShader.cpp
@@ -29,7 +29,7 @@
             if (fAlpha == 255)
                 flags |= kOpaqueAlpha_Flag;
             break;
-        case kN32_SkColorType:
+        case kPMColor_SkColorType:
             if (fAlpha == 255 && fDevice->isOpaque())
                 flags |= kOpaqueAlpha_Flag;
             break;
@@ -43,7 +43,7 @@
     unsigned scale = SkAlpha255To256(fAlpha);
 
     switch (fDevice->colorType()) {
-        case kN32_SkColorType:
+        case kPMColor_SkColorType:
             if (scale == 256) {
                 SkPMColor* src = fDevice->getAddr32(x, y);
                 if (src != span) {
diff --git a/src/effects/gradients/SkGradientShader.cpp b/src/effects/gradients/SkGradientShader.cpp
index 2ebb9c7..b1fa560 100644
--- a/src/effects/gradients/SkGradientShader.cpp
+++ b/src/effects/gradients/SkGradientShader.cpp
@@ -517,7 +517,7 @@
         info.fWidth = kCache32Count;
         info.fHeight = 4;   // for our 4 dither rows
         info.fAlphaType = kPremul_SkAlphaType;
-        info.fColorType = kN32_SkColorType;
+        info.fColorType = kPMColor_SkColorType;
 
         if (NULL == fCache32PixelRef) {
             fCache32PixelRef = SkMallocPixelRef::NewAllocate(info, 0, NULL);
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index 9acc204..d66006e 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -229,7 +229,7 @@
     if (kRGB_565_SkColorType == info.colorType()) {
         info.fAlphaType = kOpaque_SkAlphaType;  // force this setting
     } else {
-        info.fColorType = kN32_SkColorType;
+        info.fColorType = kPMColor_SkColorType;
         if (kOpaque_SkAlphaType != info.alphaType()) {
             info.fAlphaType = kPremul_SkAlphaType;  // force this setting
         }
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp
index 754a7be..db46b86 100644
--- a/src/gpu/SkGr.cpp
+++ b/src/gpu/SkGr.cpp
@@ -43,7 +43,7 @@
     dstPI.fRowBytes = count * sizeof(SkPMColor);
 
     SkSrcPixelInfo srcPI;
-    srcPI.fColorType = kN32_SkColorType;
+    srcPI.fColorType = kPMColor_SkColorType;
     srcPI.fAlphaType = kPremul_SkAlphaType;
     srcPI.fPixels = ctable->lockColors();
     srcPI.fRowBytes = count * sizeof(SkPMColor);
@@ -166,7 +166,7 @@
                 return result;
             }
         } else {
-            origBitmap.copyTo(&tmpBitmap, kN32_SkColorType);
+            origBitmap.copyTo(&tmpBitmap, kPMColor_SkColorType);
             // now bitmap points to our temp, which has been promoted to 32bits
             bitmap = &tmpBitmap;
             desc.fConfig = SkBitmapConfig2GrPixelConfig(bitmap->config());
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp
index 4cbfd81..a567c41 100644
--- a/src/image/SkImage.cpp
+++ b/src/image/SkImage.cpp
@@ -90,7 +90,7 @@
 
 static bool raster_canvas_supports(const SkImageInfo& info) {
     switch (info.fColorType) {
-        case kN32_SkColorType:
+        case kPMColor_SkColorType:
             return kUnpremul_SkAlphaType != info.fAlphaType;
         case kRGB_565_SkColorType:
             return true;
diff --git a/src/image/SkImagePriv.cpp b/src/image/SkImagePriv.cpp
index dada230..a044aad 100644
--- a/src/image/SkImagePriv.cpp
+++ b/src/image/SkImagePriv.cpp
@@ -20,7 +20,7 @@
         case kRGB_565_SkColorType:
             return SkBitmap::kRGB_565_Config;
 
-        case kN32_SkColorType:
+        case kPMColor_SkColorType:
             return SkBitmap::kARGB_8888_Config;
 
         case kIndex_8_SkColorType:
@@ -44,7 +44,7 @@
         kIndex_8_SkColorType,   // kIndex8_Config
         kRGB_565_SkColorType,   // kRGB_565_Config
         kARGB_4444_SkColorType, // kARGB_4444_Config
-        kN32_SkColorType,   // kARGB_8888_Config
+        kPMColor_SkColorType,   // kARGB_8888_Config
     };
     SkASSERT((unsigned)config < SK_ARRAY_COUNT(gCT));
     return gCT[config];
diff --git a/src/image/SkImage_Gpu.cpp b/src/image/SkImage_Gpu.cpp
index aa08f44..475f50e 100644
--- a/src/image/SkImage_Gpu.cpp
+++ b/src/image/SkImage_Gpu.cpp
@@ -59,7 +59,7 @@
 }
 
 bool SkImage_Gpu::getROPixels(SkBitmap* dst) const {
-    return fBitmap.copyTo(dst, kN32_SkColorType);
+    return fBitmap.copyTo(dst, kPMColor_SkColorType);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/src/image/SkSurface_Picture.cpp b/src/image/SkSurface_Picture.cpp
index f7d97ac..8f65b3e 100644
--- a/src/image/SkSurface_Picture.cpp
+++ b/src/image/SkSurface_Picture.cpp
@@ -62,7 +62,7 @@
     } else {
         SkImageInfo info;
         info.fWidth = info.fHeight = 0;
-        info.fColorType = kN32_SkColorType;
+        info.fColorType = kPMColor_SkColorType;
         info.fAlphaType = kOpaque_SkAlphaType;
         return SkImage::NewRasterCopy(info, NULL, 0);
     }
diff --git a/src/image/SkSurface_Raster.cpp b/src/image/SkSurface_Raster.cpp
index 7419737..e24c0e8 100644
--- a/src/image/SkSurface_Raster.cpp
+++ b/src/image/SkSurface_Raster.cpp
@@ -47,7 +47,7 @@
         case kRGB_565_SkColorType:
             shift = 1;
             break;
-        case kN32_SkColorType:
+        case kPMColor_SkColorType:
             shift = 2;
             break;
         default:
diff --git a/src/images/SkDecodingImageGenerator.cpp b/src/images/SkDecodingImageGenerator.cpp
index b3924a7..5b842ab 100644
--- a/src/images/SkDecodingImageGenerator.cpp
+++ b/src/images/SkDecodingImageGenerator.cpp
@@ -242,7 +242,7 @@
         if (kIndex_8_SkColorType == bitmap.colorType()) {
             // We don't support kIndex8 because we don't support
             // colortables in this workflow.
-            info.fColorType = kN32_SkColorType;
+            info.fColorType = kPMColor_SkColorType;
         }
     } else {
         if (!bitmap.canCopyTo(opts.fRequestedColorType)) {
diff --git a/src/ports/SkImageDecoder_CG.cpp b/src/ports/SkImageDecoder_CG.cpp
index c683752..c61ce98 100644
--- a/src/ports/SkImageDecoder_CG.cpp
+++ b/src/ports/SkImageDecoder_CG.cpp
@@ -209,7 +209,7 @@
             // <Error>: CGImageDestinationFinalize image destination does not have enough images
             // So instead we copy to 8888.
             if (bm.colorType() == kARGB_4444_SkColorType) {
-                bm.copyTo(&bitmap8888, kN32_SkColorType);
+                bm.copyTo(&bitmap8888, kPMColor_SkColorType);
                 bmPtr = &bitmap8888;
             }
             type = kUTTypePNG;
diff --git a/src/ports/SkImageDecoder_WIC.cpp b/src/ports/SkImageDecoder_WIC.cpp
index 74b2c39..9d54794 100644
--- a/src/ports/SkImageDecoder_WIC.cpp
+++ b/src/ports/SkImageDecoder_WIC.cpp
@@ -306,10 +306,10 @@
     //Convert to 8888 if needed.
     const SkBitmap* bitmap;
     SkBitmap bitmapCopy;
-    if (kN32_SkColorType == bitmapOrig.colorType() && bitmapOrig.isOpaque()) {
+    if (kPMColor_SkColorType == bitmapOrig.colorType() && bitmapOrig.isOpaque()) {
         bitmap = &bitmapOrig;
     } else {
-        if (!bitmapOrig.copyTo(&bitmapCopy, kN32_SkColorType)) {
+        if (!bitmapOrig.copyTo(&bitmapCopy, kPMColor_SkColorType)) {
             return false;
         }
         bitmap = &bitmapCopy;
diff --git a/src/utils/SkBitmapHasher.cpp b/src/utils/SkBitmapHasher.cpp
index bd038dd..6c861cd 100644
--- a/src/utils/SkBitmapHasher.cpp
+++ b/src/utils/SkBitmapHasher.cpp
@@ -57,7 +57,7 @@
     // Hmm, that didn't work. Maybe if we create a new
     // kARGB_8888_Config version of the bitmap it will work better?
     SkBitmap copyBitmap;
-    if (!bitmap.copyTo(&copyBitmap, kN32_SkColorType)) {
+    if (!bitmap.copyTo(&copyBitmap, kPMColor_SkColorType)) {
         return false;
     }
     return ComputeDigestInternal(copyBitmap, result);
diff --git a/src/utils/SkCanvasStateUtils.cpp b/src/utils/SkCanvasStateUtils.cpp
index 64f62dd..c5b558a 100644
--- a/src/utils/SkCanvasStateUtils.cpp
+++ b/src/utils/SkCanvasStateUtils.cpp
@@ -223,7 +223,7 @@
         layerState->height = bitmap.height();
 
         switch (bitmap.colorType()) {
-            case kN32_SkColorType:
+            case kPMColor_SkColorType:
                 layerState->raster.config = kARGB_8888_RasterConfig;
                 break;
             case kRGB_565_SkColorType:
@@ -281,7 +281,7 @@
 
     SkBitmap bitmap;
     SkColorType colorType =
-        layerState.raster.config == kARGB_8888_RasterConfig ? kN32_SkColorType :
+        layerState.raster.config == kARGB_8888_RasterConfig ? kPMColor_SkColorType :
         layerState.raster.config == kRGB_565_RasterConfig ? kRGB_565_SkColorType :
         kUnknown_SkColorType;
 
diff --git a/src/utils/mac/SkCreateCGImageRef.cpp b/src/utils/mac/SkCreateCGImageRef.cpp
index 00166e9..7687c3c 100644
--- a/src/utils/mac/SkCreateCGImageRef.cpp
+++ b/src/utils/mac/SkCreateCGImageRef.cpp
@@ -34,7 +34,7 @@
                 *upscaleTo32 = true;
             }
             // fall through
-        case kN32_SkColorType:
+        case kPMColor_SkColorType:
             *bitsPerComponent = 8;
 #if SK_PMCOLOR_BYTE_ORDER(R,G,B,A)
             *info = kCGBitmapByteOrder32Big;
@@ -94,7 +94,7 @@
         copy = new SkBitmap;
         // here we make a ceep copy of the pixels, since CG won't take our
         // 565 directly
-        bm.copyTo(copy, kN32_SkColorType);
+        bm.copyTo(copy, kPMColor_SkColorType);
     } else {
         copy = new SkBitmap(bm);
     }
diff --git a/src/views/SkWindow.cpp b/src/views/SkWindow.cpp
index 8f6b96f..cca291a 100644
--- a/src/views/SkWindow.cpp
+++ b/src/views/SkWindow.cpp
@@ -53,7 +53,7 @@
 #ifdef SK_BUILD_FOR_WINCE
     fColorType = kRGB_565_SkColorType;
 #else
-    fColorType = kN32_SkColorType;
+    fColorType = kPMColor_SkColorType;
 #endif
 
     fMatrix.reset();
diff --git a/src/views/mac/SkNSView.mm b/src/views/mac/SkNSView.mm
index 80bfd67..1014ffe 100644
--- a/src/views/mac/SkNSView.mm
+++ b/src/views/mac/SkNSView.mm
@@ -57,7 +57,7 @@
         size = [self convertSizeToBacking:self.frame.size];
 #endif
         fWind->resize((int) size.width, (int) size.height,
-                      kN32_SkColorType);
+                      kPMColor_SkColorType);
     }
 }
 
diff --git a/tests/BitmapCopyTest.cpp b/tests/BitmapCopyTest.cpp
index 74f4ac9..f734ad8 100644
--- a/tests/BitmapCopyTest.cpp
+++ b/tests/BitmapCopyTest.cpp
@@ -188,7 +188,7 @@
     { kIndex_8_SkColorType,     "011101"  },
     { kRGB_565_SkColorType,     "010101"  },
     { kARGB_4444_SkColorType,   "010111"  },
-    { kN32_SkColorType,         "010111"  },
+    { kPMColor_SkColorType,     "010111"  },
 };
 
 static const int W = 20;
@@ -364,7 +364,7 @@
                     }
                     break;
 
-                case kN32_SkColorType:
+                case kPMColor_SkColorType:
                     if (safeSize != 0x8E1BC9BF040000LL) {
                         sizeFail = true;
                     }
diff --git a/tests/BitmapGetColorTest.cpp b/tests/BitmapGetColorTest.cpp
index bf6ebcb..28f3cb3 100644
--- a/tests/BitmapGetColorTest.cpp
+++ b/tests/BitmapGetColorTest.cpp
@@ -22,9 +22,9 @@
         {   kAlpha_8_SkColorType,   0,              0           },
         {   kRGB_565_SkColorType,   0xFF00FF00,     0xFF00FF00  },
         {   kRGB_565_SkColorType,   0xFFFF00FF,     0xFFFF00FF  },
-        {   kN32_SkColorType,       0xFFFFFFFF,     0xFFFFFFFF  },
-        {   kN32_SkColorType,       0,              0           },
-        {   kN32_SkColorType,       0xFF224466,     0xFF224466  },
+        {   kPMColor_SkColorType,   0xFFFFFFFF,     0xFFFFFFFF  },
+        {   kPMColor_SkColorType,   0,              0           },
+        {   kPMColor_SkColorType,   0xFF224466,     0xFF224466  },
     };
 
     // specify an area that doesn't touch (0,0) and may extend beyond the
diff --git a/tests/BitmapTest.cpp b/tests/BitmapTest.cpp
index dce1069..0167d52 100644
--- a/tests/BitmapTest.cpp
+++ b/tests/BitmapTest.cpp
@@ -25,7 +25,7 @@
     // TODO: perhaps skia can relax this, and only require that rowBytes fit
     //       in a uint32_t (or larger), but for now this is the constraint.
 
-    info.fColorType = kN32_SkColorType;
+    info.fColorType = kPMColor_SkColorType;
     REPORTER_ASSERT(reporter, !bm.setConfig(info));
 }
 
diff --git a/tests/BlitRowTest.cpp b/tests/BlitRowTest.cpp
index 911f2a0..b8ac0c0 100644
--- a/tests/BlitRowTest.cpp
+++ b/tests/BlitRowTest.cpp
@@ -63,7 +63,7 @@
 static Proc find_proc(const SkBitmap& bm, SkPMColor expect32, uint16_t expect16,
                       uint8_t expect8, uint32_t* expect) {
     switch (bm.colorType()) {
-        case kN32_SkColorType:
+        case kPMColor_SkColorType:
             *expect = expect32;
             return proc_32;
         case kARGB_4444_SkColorType:
@@ -101,7 +101,7 @@
     static const int W = 256;
 
     static const SkColorType gDstColorType[] = {
-        kN32_SkColorType,
+        kPMColor_SkColorType,
         kRGB_565_SkColorType,
     };
 
@@ -192,7 +192,7 @@
     static const int H = W;
 
     static const SkColorType gDstColorType[] = {
-        kN32_SkColorType,
+        kPMColor_SkColorType,
         kRGB_565_SkColorType,
     };
 
diff --git a/tests/CachedDecodingPixelRefTest.cpp b/tests/CachedDecodingPixelRefTest.cpp
index 705f066..b2ecb0f 100644
--- a/tests/CachedDecodingPixelRefTest.cpp
+++ b/tests/CachedDecodingPixelRefTest.cpp
@@ -189,7 +189,7 @@
         }
         info->fWidth = TestImageGenerator::Width();
         info->fHeight = TestImageGenerator::Height();
-        info->fColorType = kN32_SkColorType;
+        info->fColorType = kPMColor_SkColorType;
         info->fAlphaType = kOpaque_SkAlphaType;
         return true;
     }
@@ -202,7 +202,7 @@
         REPORTER_ASSERT(fReporter, rowBytes >= minRowBytes);
         if ((NULL == pixels)
             || (fType != kSucceedGetPixels_TestType)
-            || (info.fColorType != kN32_SkColorType)) {
+            || (info.fColorType != kPMColor_SkColorType)) {
             return false;
         }
         char* bytePtr = static_cast<char*>(pixels);
diff --git a/tests/CanvasStateTest.cpp b/tests/CanvasStateTest.cpp
index 5c7e473..212b14a 100644
--- a/tests/CanvasStateTest.cpp
+++ b/tests/CanvasStateTest.cpp
@@ -26,7 +26,7 @@
                                    SkIntToScalar((HEIGHT-(2*SPACER)) / 7));
 
     const SkColorType colorTypes[] = {
-        kRGB_565_SkColorType, kN32_SkColorType
+        kRGB_565_SkColorType, kPMColor_SkColorType
     };
     const int configCount = sizeof(colorTypes) / sizeof(SkBitmap::Config);
 
diff --git a/tests/DrawBitmapRectTest.cpp b/tests/DrawBitmapRectTest.cpp
index 9912643..f778480 100644
--- a/tests/DrawBitmapRectTest.cpp
+++ b/tests/DrawBitmapRectTest.cpp
@@ -25,7 +25,7 @@
     virtual bool getInfo(SkImageInfo* info) SK_OVERRIDE {
         info->fWidth = 100;
         info->fHeight = 100;
-        info->fColorType = kN32_SkColorType;
+        info->fColorType = kPMColor_SkColorType;
         info->fAlphaType = kPremul_SkAlphaType;
         return true;
     }
diff --git a/tests/ImageDecodingTest.cpp b/tests/ImageDecodingTest.cpp
index 5d52f90..7b2f988 100644
--- a/tests/ImageDecodingTest.cpp
+++ b/tests/ImageDecodingTest.cpp
@@ -395,7 +395,7 @@
         case kAlpha_8_SkColorType:   return "Alpha_8";
         case kRGB_565_SkColorType:   return "RGB_565";
         case kARGB_4444_SkColorType: return "ARGB_4444";
-        case kN32_SkColorType:       return "N32";
+        case kPMColor_SkColorType:   return "PMColor";
         case kBackwards_SkColorType: return "Backwards";
         case kIndex_8_SkColorType:   return "Index_8";
         default:                     return "ERROR";
@@ -537,7 +537,7 @@
         kAlpha_8_SkColorType,
         kRGB_565_SkColorType,
         kARGB_4444_SkColorType,  // Most decoders will fail on 4444.
-        kN32_SkColorType
+        kPMColor_SkColorType
         // Note that indexed color is left out of the list.  Lazy
         // decoding doesn't do indexed color.
     };
diff --git a/tests/ReadPixelsTest.cpp b/tests/ReadPixelsTest.cpp
index 804a7c4..0ed062e 100644
--- a/tests/ReadPixelsTest.cpp
+++ b/tests/ReadPixelsTest.cpp
@@ -381,7 +381,7 @@
                     SkIRect clippedRect = DEV_RECT;
                     if (clippedRect.intersect(srcRect)) {
                         REPORTER_ASSERT(reporter, success);
-                        REPORTER_ASSERT(reporter, kN32_SkColorType == wkbmp.colorType());
+                        REPORTER_ASSERT(reporter, kPMColor_SkColorType == wkbmp.colorType());
                         REPORTER_ASSERT(reporter, kPremul_SkAlphaType == wkbmp.alphaType());
                         checkRead(reporter, wkbmp, clippedRect.fLeft,
                                   clippedRect.fTop, true, false);
diff --git a/tests/SerializationTest.cpp b/tests/SerializationTest.cpp
index a039e55..dfc7afa 100644
--- a/tests/SerializationTest.cpp
+++ b/tests/SerializationTest.cpp
@@ -233,7 +233,7 @@
 
 static bool setup_bitmap_for_canvas(SkBitmap* bitmap) {
     SkImageInfo info = SkImageInfo::Make(
-        kBitmapSize, kBitmapSize, kN32_SkColorType, kPremul_SkAlphaType);
+        kBitmapSize, kBitmapSize, kPMColor_SkColorType, kPremul_SkAlphaType);
     return bitmap->allocPixels(info);
 }
 
diff --git a/tests/SurfaceTest.cpp b/tests/SurfaceTest.cpp
index a3efd97..705ea14 100644
--- a/tests/SurfaceTest.cpp
+++ b/tests/SurfaceTest.cpp
@@ -151,7 +151,7 @@
         if (success) {
             REPORTER_ASSERT(reporter, 10 == info.fWidth);
             REPORTER_ASSERT(reporter, 10 == info.fHeight);
-            REPORTER_ASSERT(reporter, kN32_SkColorType == info.fColorType);
+            REPORTER_ASSERT(reporter, kPMColor_SkColorType == info.fColorType);
             REPORTER_ASSERT(reporter, kPremul_SkAlphaType == info.fAlphaType ||
                             kOpaque_SkAlphaType == info.fAlphaType);
             REPORTER_ASSERT(reporter, info.minRowBytes() <= rowBytes);
diff --git a/tests/WritePixelsTest.cpp b/tests/WritePixelsTest.cpp
index a0e3051..a1c978d 100644
--- a/tests/WritePixelsTest.cpp
+++ b/tests/WritePixelsTest.cpp
@@ -213,7 +213,7 @@
 
     if (canvasInfo.width() != DEV_W ||
         canvasInfo.height() != DEV_H ||
-        canvasInfo.colorType() != kN32_SkColorType) {
+        canvasInfo.colorType() != kPMColor_SkColorType) {
         return false;
     }
 
diff --git a/tools/skdiff_utils.cpp b/tools/skdiff_utils.cpp
index 5ca3d80..2f05239 100644
--- a/tools/skdiff_utils.cpp
+++ b/tools/skdiff_utils.cpp
@@ -85,7 +85,7 @@
 
 bool write_bitmap(const SkString& path, const SkBitmap& bitmap) {
     SkBitmap copy;
-    bitmap.copyTo(&copy, kN32_SkColorType);
+    bitmap.copyTo(&copy, kPMColor_SkColorType);
     force_all_opaque(copy);
     return SkImageEncoder::EncodeFile(path.c_str(), copy,
                                       SkImageEncoder::kPNG_Type, 100);
diff --git a/tools/skimage_main.cpp b/tools/skimage_main.cpp
index e5610ea..5e5953e 100644
--- a/tools/skimage_main.cpp
+++ b/tools/skimage_main.cpp
@@ -164,7 +164,7 @@
         return true;
     }
 
-    if (bm.colorType() == kN32_SkColorType) {
+    if (bm.colorType() == kPMColor_SkColorType) {
         // First attempt at encoding failed, and the bitmap was already 8888. Making
         // a copy is not going to help.
         return false;
@@ -172,7 +172,7 @@
 
     // Encoding failed. Copy to 8888 and try again.
     SkBitmap bm8888;
-    if (!bm.copyTo(&bm8888, kN32_SkColorType)) {
+    if (!bm.copyTo(&bm8888, kPMColor_SkColorType)) {
         return false;
     }
     return SkImageEncoder::EncodeFile(filename.c_str(), bm8888, SkImageEncoder::kPNG_Type, 100);
diff --git a/tools/skpdiff/SkDiffContext.cpp b/tools/skpdiff/SkDiffContext.cpp
index 6f0b09f..b9c55c1 100644
--- a/tools/skpdiff/SkDiffContext.cpp
+++ b/tools/skpdiff/SkDiffContext.cpp
@@ -122,7 +122,7 @@
 
             // compute the image diff and output it
             SkBitmap copy;
-            diffData.fResult.poiAlphaMask.copyTo(&copy, kN32_SkColorType);
+            diffData.fResult.poiAlphaMask.copyTo(&copy, kPMColor_SkColorType);
             SkImageEncoder::EncodeFile(newRecord->fDifferencePath.c_str(), copy,
                                        SkImageEncoder::kPNG_Type, 100);
 
diff --git a/tools/skpdiff/SkPMetric.cpp b/tools/skpdiff/SkPMetric.cpp
index beba497..ed80763 100644
--- a/tools/skpdiff/SkPMetric.cpp
+++ b/tools/skpdiff/SkPMetric.cpp
@@ -125,8 +125,8 @@
 /// Converts a 8888 bitmap to LAB color space and puts it into the output
 static bool bitmap_to_cielab(const SkBitmap* bitmap, ImageLAB* outImageLAB) {
     SkBitmap bm8888;
-    if (bitmap->colorType() != kN32_SkColorType) {
-        if (!bitmap->copyTo(&bm8888, kN32_SkColorType)) {
+    if (bitmap->colorType() != kPMColor_SkColorType) {
+        if (!bitmap->copyTo(&bm8888, kPMColor_SkColorType)) {
             return false;
         }
         bitmap = &bm8888;
