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 CHROME_BROWSER_PRINTING_PRINT_VIEW_MANAGER_H_ 6 #define CHROME_BROWSER_PRINTING_PRINT_VIEW_MANAGER_H_ 7 8 #include "chrome/browser/printing/print_view_manager_base.h" 9 #include "content/public/browser/web_contents_user_data.h" 10 11 namespace content { 12 class RenderProcessHost; 13 } 14 15 namespace printing { 16 17 class PrintViewManagerObserver; 18 19 // Manages the print commands for a WebContents. 20 class PrintViewManager : public PrintViewManagerBase, 21 public content::WebContentsUserData<PrintViewManager> { 22 public: 23 virtual ~PrintViewManager(); 24 25 #if !defined(DISABLE_BASIC_PRINTING) 26 // Same as PrintNow(), but for the case where a user prints with the system 27 // dialog from print preview. 28 bool PrintForSystemDialogNow(); 29 30 // Same as PrintNow(), but for the case where a user press "ctrl+shift+p" to 31 // show the native system dialog. This can happen from both initiator and 32 // preview dialog. 33 bool BasicPrint(); 34 #endif // !DISABLE_BASIC_PRINTING 35 36 // Initiate print preview of the current document by first notifying the 37 // renderer. Since this happens asynchronous, the print preview dialog 38 // creation will not be completed on the return of this function. Returns 39 // false if print preview is impossible at the moment. 40 bool PrintPreviewNow(bool selection_only); 41 42 // Notify PrintViewManager that print preview is starting in the renderer for 43 // a particular WebNode. 44 void PrintPreviewForWebNode(); 45 46 // Notify PrintViewManager that print preview has finished. Unfreeze the 47 // renderer in the case of scripted print preview. 48 void PrintPreviewDone(); 49 50 // Sets |observer| as the current PrintViewManagerObserver. Pass in NULL to 51 // remove the current observer. |observer| may always be NULL, but |observer_| 52 // must be NULL if |observer| is non-NULL. 53 void set_observer(PrintViewManagerObserver* observer); 54 55 // content::WebContentsObserver implementation. 56 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 57 58 // content::WebContentsObserver implementation. 59 // Terminates or cancels the print job if one was pending. 60 virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE; 61 62 private: 63 explicit PrintViewManager(content::WebContents* web_contents); 64 friend class content::WebContentsUserData<PrintViewManager>; 65 66 enum PrintPreviewState { 67 NOT_PREVIEWING, 68 USER_INITIATED_PREVIEW, 69 SCRIPTED_PREVIEW, 70 }; 71 72 // IPC Message handlers. 73 void OnDidShowPrintDialog(); 74 void OnSetupScriptedPrintPreview(IPC::Message* reply_msg); 75 void OnShowScriptedPrintPreview(bool source_is_modifiable); 76 void OnScriptedPrintPreviewReply(IPC::Message* reply_msg); 77 78 // Weak pointer to an observer that is notified when the print dialog is 79 // shown. 80 PrintViewManagerObserver* observer_; 81 82 // Current state of print preview for this view. 83 PrintPreviewState print_preview_state_; 84 85 // Keeps track of the pending callback during scripted print preview. 86 content::RenderProcessHost* scripted_print_preview_rph_; 87 88 DISALLOW_COPY_AND_ASSIGN(PrintViewManager); 89 }; 90 91 } // namespace printing 92 93 #endif // CHROME_BROWSER_PRINTING_PRINT_VIEW_MANAGER_H_ 94