SkDocument/PDF: new API

has a pdf/a switch.
sets metadata in factory.

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

Review URL: https://codereview.chromium.org/1916093002
diff --git a/tests/AnnotationTest.cpp b/tests/AnnotationTest.cpp
index d9d971a..400d488 100644
--- a/tests/AnnotationTest.cpp
+++ b/tests/AnnotationTest.cpp
@@ -41,7 +41,7 @@
 DEF_TEST(Annotation_PdfLink, reporter) {
     REQUIRE_PDF_DOCUMENT(Annotation_PdfLink, reporter);
     SkDynamicMemoryWStream outStream;
-    SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(&outStream));
+    sk_sp<SkDocument> doc(SkDocument::MakePDF(&outStream));
     SkCanvas* canvas = doc->beginPage(612.0f, 792.0f);
     REPORTER_ASSERT(reporter, canvas);
 
@@ -60,7 +60,7 @@
 DEF_TEST(Annotation_NamedDestination, reporter) {
     REQUIRE_PDF_DOCUMENT(Annotation_NamedDestination, reporter);
     SkDynamicMemoryWStream outStream;
-    SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(&outStream));
+    sk_sp<SkDocument> doc(SkDocument::MakePDF(&outStream));
     SkCanvas* canvas = doc->beginPage(612.0f, 792.0f);
     REPORTER_ASSERT(reporter, canvas);
 
diff --git a/tests/CanvasTest.cpp b/tests/CanvasTest.cpp
index 284e3cd..f22b7d0 100644
--- a/tests/CanvasTest.cpp
+++ b/tests/CanvasTest.cpp
@@ -570,7 +570,7 @@
                           const TestData& d,
                           CanvasTestStep* testStep) {
     SkDynamicMemoryWStream outStream;
-    SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(&outStream));
+    sk_sp<SkDocument> doc(SkDocument::MakePDF(&outStream));
 #if SK_SUPPORT_PDF
     REPORTER_ASSERT(reporter, doc);
 #else
diff --git a/tests/PDFDocumentTest.cpp b/tests/PDFDocumentTest.cpp
index 98d1864..b763742 100644
--- a/tests/PDFDocumentTest.cpp
+++ b/tests/PDFDocumentTest.cpp
@@ -16,7 +16,7 @@
 static void test_empty(skiatest::Reporter* reporter) {
     SkDynamicMemoryWStream stream;
 
-    SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(&stream));
+    sk_sp<SkDocument> doc(SkDocument::MakePDF(&stream));
 
     doc->close();
 
@@ -25,7 +25,7 @@
 
 static void test_abort(skiatest::Reporter* reporter) {
     SkDynamicMemoryWStream stream;
-    SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(&stream));
+    sk_sp<SkDocument> doc(SkDocument::MakePDF(&stream));
 
     SkCanvas* canvas = doc->beginPage(100, 100);
     canvas->drawColor(SK_ColorRED);
@@ -50,7 +50,7 @@
 
     // Make sure doc's destructor is called to flush.
     {
-        SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(path.c_str()));
+        sk_sp<SkDocument> doc(SkDocument::MakePDF(path.c_str()));
 
         SkCanvas* canvas = doc->beginPage(100, 100);
         canvas->drawColor(SK_ColorRED);
@@ -76,7 +76,7 @@
 
     SkString path = SkOSPath::Join(tmpDir.c_str(), "file.pdf");
 
-    SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(path.c_str()));
+    sk_sp<SkDocument> doc(SkDocument::MakePDF(path.c_str()));
 
     SkCanvas* canvas = doc->beginPage(100, 100);
 
@@ -94,7 +94,7 @@
 
 static void test_close(skiatest::Reporter* reporter) {
     SkDynamicMemoryWStream stream;
-    SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(&stream));
+    sk_sp<SkDocument> doc(SkDocument::MakePDF(&stream));
 
     SkCanvas* canvas = doc->beginPage(100, 100);
     canvas->drawColor(SK_ColorRED);
@@ -132,13 +132,13 @@
 
 size_t count_bytes(const SkBitmap& bm, bool useDCT) {
     SkDynamicMemoryWStream stream;
-    SkAutoTUnref<SkDocument> doc;
+    sk_sp<SkDocument> doc;
     if (useDCT) {
-        SkAutoTUnref<SkPixelSerializer> serializer(new JPEGSerializer);
-        doc.reset(SkDocument::CreatePDF(
-                          &stream, SK_ScalarDefaultRasterDPI, serializer));
+        doc = SkDocument::MakePDF(&stream, SK_ScalarDefaultRasterDPI,
+                                  SkDocument::PDFMetadata(),
+                                  sk_make_sp<JPEGSerializer>(), false);
     } else {
-        doc.reset(SkDocument::CreatePDF(&stream));
+        doc = SkDocument::MakePDF(&stream);
     }
     SkCanvas* canvas = doc->beginPage(64, 64);
     canvas->drawBitmap(bm, 0, 0);
@@ -159,7 +159,7 @@
 DEF_TEST(document_skbug_4734, r) {
     REQUIRE_PDF_DOCUMENT(document_skbug_4734, r);
     SkDynamicMemoryWStream stream;
-    SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(&stream));
+    sk_sp<SkDocument> doc(SkDocument::MakePDF(&stream));
     SkCanvas* canvas = doc->beginPage(64, 64);
     canvas->scale(10000.0f, 10000.0f);
     canvas->translate(20.0f, 10.0f);
diff --git a/tests/PDFInvalidBitmapTest.cpp b/tests/PDFInvalidBitmapTest.cpp
index 57e51f0..c9685f7 100644
--- a/tests/PDFInvalidBitmapTest.cpp
+++ b/tests/PDFInvalidBitmapTest.cpp
@@ -45,7 +45,7 @@
 
 DEF_TEST(PDFInvalidBitmap, reporter) {
     SkDynamicMemoryWStream stream;
-    SkAutoTUnref<SkDocument> document(SkDocument::CreatePDF(&stream));
+    sk_sp<SkDocument> document(SkDocument::MakePDF(&stream));
     SkCanvas* canvas = document->beginPage(100, 100);
 
     canvas->drawBitmap(SkBitmap(), 0, 0);
diff --git a/tests/PDFJpegEmbedTest.cpp b/tests/PDFJpegEmbedTest.cpp
index 2dcbdd0..5ef4a2d 100644
--- a/tests/PDFJpegEmbedTest.cpp
+++ b/tests/PDFJpegEmbedTest.cpp
@@ -63,7 +63,7 @@
     }
     ////////////////////////////////////////////////////////////////////////////
     SkDynamicMemoryWStream pdf;
-    SkAutoTUnref<SkDocument> document(SkDocument::CreatePDF(&pdf));
+    sk_sp<SkDocument> document(SkDocument::MakePDF(&pdf));
     SkCanvas* canvas = document->beginPage(642, 1028);
 
     canvas->clear(SK_ColorLTGRAY);
@@ -87,7 +87,7 @@
     REPORTER_ASSERT(r, !is_subset_of(cmykData.get(), pdfData.get()));
     ////////////////////////////////////////////////////////////////////////////
     pdf.reset();
-    document.reset(SkDocument::CreatePDF(&pdf));
+    document = SkDocument::MakePDF(&pdf);
     canvas = document->beginPage(642, 1028);
 
     canvas->clear(SK_ColorLTGRAY);
diff --git a/tests/PDFMetadataAttributeTest.cpp b/tests/PDFMetadataAttributeTest.cpp
index 6a5aca7..2d43d30 100644
--- a/tests/PDFMetadataAttributeTest.cpp
+++ b/tests/PDFMetadataAttributeTest.cpp
@@ -9,22 +9,24 @@
 #include "SkData.h"
 #include "Test.h"
 
-DEF_TEST(SkPDF_MetadataAttribute, r) {
-    REQUIRE_PDF_DOCUMENT(SkPDF_MetadataAttribute, r);
-    SkDynamicMemoryWStream pdf;
-    SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(&pdf));
-    typedef SkDocument::Attribute Attr;
-    Attr info[] = {
-        Attr(SkString("Title"),    SkString("A1")),
-        Attr(SkString("Author"),   SkString("A2")),
-        Attr(SkString("Subject"),  SkString("A3")),
-        Attr(SkString("Keywords"), SkString("A4")),
-        Attr(SkString("Creator"),  SkString("A5")),
-    };
-    int infoCount = sizeof(info) / sizeof(info[0]);
+DEF_TEST(SkPDF_Metadata, r) {
+    REQUIRE_PDF_DOCUMENT(SkPDF_Metadata, r);
     SkTime::DateTime now;
     SkTime::GetDateTime(&now);
-    doc->setMetadata(&info[0], infoCount, &now, &now);
+    SkDocument::PDFMetadata metadata;
+    metadata.fTitle = "A1";
+    metadata.fAuthor = "A2";
+    metadata.fSubject = "A3";
+    metadata.fKeywords = "A4";
+    metadata.fCreator = "A5";
+    metadata.fCreation.fEnabled = true;
+    metadata.fCreation.fDateTime = now;
+    metadata.fModified.fEnabled = true;
+    metadata.fModified.fDateTime = now;
+
+    SkDynamicMemoryWStream pdf;
+    sk_sp<SkDocument> doc = SkDocument::MakePDF(&pdf, SK_ScalarDefaultRasterDPI,
+                                                metadata, nullptr, false);
     doc->beginPage(612.0f, 792.0f);
     doc->close();
     SkAutoTUnref<SkData> data(pdf.copyToData());
@@ -38,12 +40,13 @@
         "/CreationDate (D:",
         "/ModDate (D:"
     };
+    const uint8_t* bytes = data->bytes();
     for (const char* expectation : expectations) {
+        size_t len = strlen(expectation);
         bool found = false;
-        size_t N = 1 + data->size() - strlen(expectation);
+        size_t N = 1 + data->size() - len;
         for (size_t i = 0; i < N; ++i) {
-            if (0 == memcmp(data->bytes() + i,
-                             expectation, strlen(expectation))) {
+            if (0 == memcmp(bytes + i, expectation, len)) {
                 found = true;
                 break;
             }
diff --git a/tests/PDFOpaqueSrcModeToSrcOverTest.cpp b/tests/PDFOpaqueSrcModeToSrcOverTest.cpp
index 156856c..76796f5 100644
--- a/tests/PDFOpaqueSrcModeToSrcOverTest.cpp
+++ b/tests/PDFOpaqueSrcModeToSrcOverTest.cpp
@@ -10,7 +10,7 @@
 #include "Test.h"
 
 static void run_test(SkWStream* out, SkXfermode::Mode mode, U8CPU alpha) {
-    SkAutoTUnref<SkDocument> pdfDoc(SkDocument::CreatePDF(out));
+    sk_sp<SkDocument> pdfDoc(SkDocument::MakePDF(out));
     SkCanvas* c = pdfDoc->beginPage(612.0f, 792.0f);
     SkPaint black;
     SkPaint background;
diff --git a/tests/PDFPrimitivesTest.cpp b/tests/PDFPrimitivesTest.cpp
index 299fcf0..58dd773 100644
--- a/tests/PDFPrimitivesTest.cpp
+++ b/tests/PDFPrimitivesTest.cpp
@@ -179,7 +179,7 @@
 // and there is no assert on input data in Debug mode.
 static void test_issue1083() {
     SkDynamicMemoryWStream outStream;
-    sk_sp<SkDocument> doc(SkDocument::CreatePDF(&outStream));
+    sk_sp<SkDocument> doc(SkDocument::MakePDF(&outStream));
     SkCanvas* canvas = doc->beginPage(100.0f, 100.0f);
     SkPaint paint;
     paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
@@ -408,7 +408,7 @@
 // CPU rasterization.
 DEF_TEST(PDFImageFilter, reporter) {
     SkDynamicMemoryWStream stream;
-    sk_sp<SkDocument> doc(SkDocument::CreatePDF(&stream));
+    sk_sp<SkDocument> doc(SkDocument::MakePDF(&stream));
     SkCanvas* canvas = doc->beginPage(100.0f, 100.0f);
 
     sk_sp<DummyImageFilter> filter(DummyImageFilter::Make());
diff --git a/tests/Test.h b/tests/Test.h
index 90a0139..2a1e20f 100644
--- a/tests/Test.h
+++ b/tests/Test.h
@@ -182,14 +182,14 @@
 #define DEF_GPUTEST_FOR_VULKAN_CONTEXT(name, reporter, context_info)                        \
         DEF_GPUTEST_FOR_CONTEXTS(name, &skiatest::IsVulkanContextType, reporter, context_info)
 
-#define REQUIRE_PDF_DOCUMENT(TEST_NAME, REPORTER)                             \
-    do {                                                                      \
-        SkDynamicMemoryWStream testStream;                                    \
-        SkAutoTUnref<SkDocument> testDoc(SkDocument::CreatePDF(&testStream)); \
-        if (!testDoc) {                                                       \
-            INFOF(REPORTER, "PDF disabled; %s test skipped.", #TEST_NAME);    \
-            return;                                                           \
-        }                                                                     \
+#define REQUIRE_PDF_DOCUMENT(TEST_NAME, REPORTER)                          \
+    do {                                                                   \
+        SkDynamicMemoryWStream testStream;                                 \
+        sk_sp<SkDocument> testDoc(SkDocument::MakePDF(&testStream));       \
+        if (!testDoc) {                                                    \
+            INFOF(REPORTER, "PDF disabled; %s test skipped.", #TEST_NAME); \
+            return;                                                        \
+        }                                                                  \
     } while (false)
 
 #endif