Changing SkDeferredCanvas to use factories for creation

The objective of this change is to remove all calls to 
SkCanvas::setDevice. The factory API is hidden behind
a build flag in order to ease the roll into chromium.

A side-effect of the factory pattern is that it will
no longer be possible to allocate a SkDeferredCanvas on
the stack.  This changes nothing for chrome, but it
impacts skia test programs.

Review URL: https://codereview.chromium.org/16040002

git-svn-id: http://skia.googlecode.com/svn/trunk@9298 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/tests/CanvasTest.cpp b/tests/CanvasTest.cpp
index 006c855..e692de1 100644
--- a/tests/CanvasTest.cpp
+++ b/tests/CanvasTest.cpp
@@ -777,24 +777,29 @@
         SkBitmap deferredStore;
         createBitmap(&deferredStore, SkBitmap::kARGB_8888_Config, 0xFFFFFFFF);
         SkDevice deferredDevice(deferredStore);
-        SkDeferredCanvas deferredCanvas(&deferredDevice);
+        SkAutoTUnref<SkDeferredCanvas> deferredCanvas(
+#if SK_DEFERRED_CANVAS_USES_FACTORIES
+            SkDeferredCanvas::Create(&deferredDevice));
+#else
+            SkNEW_ARGS(SkDeferredCanvas, (&deferredDevice)));
+#endif
         testStep->setAssertMessageFormat(kDeferredDrawAssertMessageFormat);
-        testStep->draw(&deferredCanvas, reporter);
+        testStep->draw(deferredCanvas, reporter);
         testStep->setAssertMessageFormat(kDeferredPreFlushAssertMessageFormat);
-        AssertCanvasStatesEqual(reporter, &deferredCanvas, &referenceCanvas,
+        AssertCanvasStatesEqual(reporter, deferredCanvas, &referenceCanvas,
             testStep);
 
         if (silent) {
-            deferredCanvas.silentFlush();
+            deferredCanvas->silentFlush();
         } else {
-            deferredCanvas.flush();
+            deferredCanvas->flush();
         }
 
         testStep->setAssertMessageFormat(
             silent ? kDeferredPostSilentFlushPlaybackAssertMessageFormat :
             kDeferredPostFlushPlaybackAssertMessageFormat);
         AssertCanvasStatesEqual(reporter,
-            deferredCanvas.immediateCanvas(),
+            deferredCanvas->immediateCanvas(),
             &referenceCanvas, testStep);
 
         // Verified that deferred canvas state is not affected by flushing