1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef ANDROID_WEBVIEW_BROWSER_RENDER_HOST_PRINT_MANAGER_H_ 6 #define ANDROID_WEBVIEW_BROWSER_RENDER_HOST_PRINT_MANAGER_H_ 7 8 #include "content/public/browser/web_contents_observer.h" 9 10 #include "base/callback_forward.h" 11 #include "base/threading/non_thread_safe.h" 12 13 class GURL; 14 15 namespace base { 16 class FileDescriptor; 17 } 18 19 namespace printing { 20 class PrintSettings; 21 } 22 23 namespace android_webview { 24 25 class PrintManagerDelegate { 26 public: 27 virtual ~PrintManagerDelegate() { } 28 virtual void DidExportPdf(bool success) = 0; 29 virtual bool IsCancelled() = 0; 30 31 private: 32 // DISALLOW_COPY_AND_ASSIGN(PrintManagerDelegate); 33 }; 34 35 // Provides RenderViewHost wrapper functionality for sending WebView-specific 36 // IPC messages to the renderer and from there to WebKit. 37 // 38 // Note for android_webview: 39 // This class manages the print (an export to PDF file essentially) task for 40 // a webview. There can be at most one active print task per webview. 41 class PrintManager : public content::WebContentsObserver, 42 public base::NonThreadSafe { 43 public: 44 // To send receive messages to a RenderView we take the WebContents instance, 45 // as it internally handles RenderViewHost instances changing underneath us. 46 PrintManager(content::WebContents* contents, 47 printing::PrintSettings* settings, 48 int fd, 49 PrintManagerDelegate* delegate); 50 virtual ~PrintManager(); 51 52 // Prints the current document immediately. Since the rendering is 53 // asynchronous, the actual printing will not be completed on the return of 54 // this function. Returns false if printing is impossible at the moment. 55 // 56 // Note for webview: Returns false immediately if this print manager is already 57 // busy printing. 58 bool PrintNow(); 59 60 private: 61 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 62 void OnDidGetPrintedPagesCount(int cookie, int number_pages); 63 void OnDidGetDocumentCookie(int cookie); 64 void OnPrintingFailed(int cookie); 65 void OnGetDefaultPrintSettingsReply(IPC::Message* reply_msg); 66 void OnGetDefaultPrintSettings(IPC::Message* reply_msg); 67 void OnAllocateTempFileForPrinting(base::FileDescriptor* temp_file_fd, 68 int* sequence_number); 69 void OnTempFileForPrintingWritten(int sequence_number); 70 71 // Print Settings. 72 printing::PrintSettings* settings_; 73 74 // File descriptor to export to. 75 int fd_; 76 // Print manager delegate 77 PrintManagerDelegate* delegate_; 78 // Number of pages to print in the print job. 79 int number_pages_; 80 // The document cookie of the current PrinterQuery. 81 int cookie_; 82 // Whether a print task is pending. 83 int printing_; 84 85 DISALLOW_COPY_AND_ASSIGN(PrintManager); 86 }; 87 88 } // namespace android_webview 89 90 #endif // ANDROID_WEBVIEW_BROWSER_RENDER_HOST_PRINT_MANAGER_H_ 91