| Index: android_webview/browser/renderer_host/print_manager.h | 
| diff --git a/android_webview/browser/renderer_host/print_manager.h b/android_webview/browser/renderer_host/print_manager.h | 
| index 951f6c87e29065086f5296e7d9530bbe562b1174..fc869cddd7bb5adfd7151c3ee7bd50ada68cc3a8 100644 | 
| --- a/android_webview/browser/renderer_host/print_manager.h | 
| +++ b/android_webview/browser/renderer_host/print_manager.h | 
| @@ -8,6 +8,7 @@ | 
| #include "base/callback_forward.h" | 
| #include "base/threading/non_thread_safe.h" | 
| #include "content/public/browser/web_contents_observer.h" | 
| +#include "content/public/browser/web_contents_user_data.h" | 
|  | 
| class GURL; | 
|  | 
| @@ -26,9 +27,6 @@ class PrintManagerDelegate { | 
| virtual ~PrintManagerDelegate() { } | 
| virtual void DidExportPdf(bool success) = 0; | 
| virtual bool IsCancelled() = 0; | 
| - | 
| - private: | 
| -  //  DISALLOW_COPY_AND_ASSIGN(PrintManagerDelegate); | 
| }; | 
|  | 
| // Provides RenderViewHost wrapper functionality for sending WebView-specific | 
| @@ -38,14 +36,17 @@ class PrintManagerDelegate { | 
| // This class manages the print (an export to PDF file essentially) task for | 
| // a webview. There can be at most one active print task per webview. | 
| class PrintManager : public content::WebContentsObserver, | 
| +                     public content::WebContentsUserData<PrintManager>, | 
| public base::NonThreadSafe { | 
| public: | 
| -  // To send receive messages to a RenderView we take the WebContents instance, | 
| -  // as it internally handles RenderViewHost instances changing underneath us. | 
| -  PrintManager(content::WebContents* contents, | 
| -               printing::PrintSettings* settings, | 
| -               int fd, | 
| -               PrintManagerDelegate* delegate); | 
| +  // Creates a PrintManager for the provided webcontents. If the printmanager | 
| +  // already exists, it is destroyed and a new one is created. | 
| +  static PrintManager* CreateForWebContents( | 
| +      content::WebContents* contents, | 
| +      printing::PrintSettings* settings, | 
| +      int fd, | 
| +      PrintManagerDelegate* delegate); | 
| + | 
| virtual ~PrintManager(); | 
|  | 
| // Prints the current document immediately. Since the rendering is | 
| @@ -56,16 +57,24 @@ class PrintManager : public content::WebContentsObserver, | 
| // already busy printing. | 
| bool PrintNow(); | 
|  | 
| +  void OnAllocateTempFileForPrinting(base::FileDescriptor* temp_file_fd, | 
| +                                     int* sequence_number); | 
| +  void OnTempFileForPrintingWritten(int sequence_number); | 
| private: | 
| +   // To send receive messages to a RenderView we take the WebContents instance, | 
| +   // as it internally handles RenderViewHost instances changing underneath us. | 
| +   PrintManager(content::WebContents* contents, | 
| +                printing::PrintSettings* settings, | 
| +                int fd, | 
| +                PrintManagerDelegate* delegate); | 
| +  friend class content::WebContentsUserData<PrintManager>; | 
| + | 
| virtual bool OnMessageReceived(const IPC::Message& message) override; | 
| void OnDidGetPrintedPagesCount(int cookie, int number_pages); | 
| void OnDidGetDocumentCookie(int cookie); | 
| void OnPrintingFailed(int cookie); | 
| void OnGetDefaultPrintSettingsReply(IPC::Message* reply_msg); | 
| void OnGetDefaultPrintSettings(IPC::Message* reply_msg); | 
| -  void OnAllocateTempFileForPrinting(base::FileDescriptor* temp_file_fd, | 
| -                                     int* sequence_number); | 
| -  void OnTempFileForPrintingWritten(int sequence_number); | 
|  | 
| // Print Settings. | 
| printing::PrintSettings* settings_; | 
|  |