Add PDF compositor service

Currently, the service converts one or multiple pages encapsulated in a
SkMultiPictureDocument to a PDF file. It runs in a sandboxed utility process.

This allows Chromium to move PDF generation code into a separate
process, and eventually can support compositing content generated from
multiple processes.

BUG=455764

Review-Url: https://codereview.chromium.org/2832633002
Cr-Commit-Position: refs/heads/master@{#473644}
diff --git a/content/renderer/render_thread_impl.h b/content/renderer/render_thread_impl.h
index 0240ef35..deb435fe 100644
--- a/content/renderer/render_thread_impl.h
+++ b/content/renderer/render_thread_impl.h
@@ -193,7 +193,6 @@
   IPC::SyncChannel* GetChannel() override;
   std::string GetLocale() override;
   IPC::SyncMessageFilter* GetSyncMessageFilter() override;
-  scoped_refptr<base::SingleThreadTaskRunner> GetIOTaskRunner() override;
   void AddRoute(int32_t routing_id, IPC::Listener* listener) override;
   void RemoveRoute(int32_t routing_id) override;
   int GenerateRoutingID() override;
@@ -226,6 +225,9 @@
       const std::string& name,
       mojo::ScopedInterfaceEndpointHandle handle) override;
 
+  // ChildThread implementation via ChildThreadImpl:
+  scoped_refptr<base::SingleThreadTaskRunner> GetIOTaskRunner() override;
+
   // CompositorDependencies implementation.
   bool IsGpuRasterizationForced() override;
   bool IsAsyncWorkerContextEnabled() override;