SkPDF: SkPDFDevice has ptr to SkPDFDocument

This is necessary for pre-serialization of images.

BUG=skia:5087
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1802963002

Review URL: https://codereview.chromium.org/1802963002
diff --git a/src/pdf/SkPDFDevice.h b/src/pdf/SkPDFDevice.h
index b214839..138ec19 100644
--- a/src/pdf/SkPDFDevice.h
+++ b/src/pdf/SkPDFDevice.h
@@ -25,6 +25,7 @@
 class SkPDFArray;
 class SkPDFCanon;
 class SkPDFDevice;
+class SkPDFDocument;
 class SkPDFDict;
 class SkPDFFont;
 class SkPDFFormXObject;
@@ -59,20 +60,23 @@
      *         while rendering, and it would be slower to be processed
      *         or sent online or to printer.  A good choice is
      *         SK_ScalarDefaultRasterDPI(72.0f).
-     *  @param SkPDFCanon.  Should be non-null, and shared by all
-     *         devices in a document.
+     *  @param SkPDFDocument.  A non-null pointer back to the
+     *         document.  The document is repsonsible for
+     *         de-duplicating across pages (via the SkPDFCanon) and
+     *         for early serializing of large immutable objects, such
+     *         as images (via SkPDFDocument::serialize()).
      */
     static SkPDFDevice* Create(SkISize pageSize,
                                SkScalar rasterDpi,
-                               SkPDFCanon* canon) {
-        return new SkPDFDevice(pageSize, rasterDpi, canon, true);
+                               SkPDFDocument* doc) {
+        return new SkPDFDevice(pageSize, rasterDpi, doc, true);
     }
 
     /** Create a PDF drawing context without fipping the y-axis. */
     static SkPDFDevice* CreateUnflipped(SkISize pageSize,
                                         SkScalar rasterDpi,
-                                        SkPDFCanon* canon) {
-        return new SkPDFDevice(pageSize, rasterDpi, canon, false);
+                                        SkPDFDocument* doc) {
+        return new SkPDFDevice(pageSize, rasterDpi, doc, false);
     }
 
     virtual ~SkPDFDevice();
@@ -184,7 +188,7 @@
         return *(fFontGlyphUsage.get());
     }
 
-    SkPDFCanon* getCanon() const { return fCanon; }
+    SkPDFCanon* getCanon() const;
 
 protected:
     const SkBitmap& onAccessBitmap() override {
@@ -261,12 +265,12 @@
 
     SkBitmap fLegacyBitmap;
 
-    SkPDFCanon* fCanon;  // Owned by SkDocument_PDF
+    SkPDFDocument* fDocument;
     ////////////////////////////////////////////////////////////////////////////
 
     SkPDFDevice(SkISize pageSize,
                 SkScalar rasterDpi,
-                SkPDFCanon* canon,
+                SkPDFDocument* doc,
                 bool flip);
 
     ContentEntry* getLastContentEntry();