• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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   // Same as PrintNow(), but for the case where a user prints with the system
26   // dialog from print preview.
27   bool PrintForSystemDialogNow();
28 
29   // Same as PrintNow(), but for the case where a user press "ctrl+shift+p" to
30   // show the native system dialog. This can happen from both initiator and
31   // preview dialog.
32   bool AdvancedPrintNow();
33 
34   // Same as PrintNow(), but for the case where we want to send the result to
35   // another destination.
36   // TODO(mad) Add an argument so we can pass the destination interface.
37   bool PrintToDestination();
38 
39   // Initiate print preview of the current document by first notifying the
40   // renderer. Since this happens asynchronous, the print preview dialog
41   // creation will not be completed on the return of this function. Returns
42   // false if print preview is impossible at the moment.
43   bool PrintPreviewNow(bool selection_only);
44 
45   // Notify PrintViewManager that print preview is starting in the renderer for
46   // a particular WebNode.
47   void PrintPreviewForWebNode();
48 
49   // Notify PrintViewManager that print preview has finished. Unfreeze the
50   // renderer in the case of scripted print preview.
51   void PrintPreviewDone();
52 
53   // Sets |observer| as the current PrintViewManagerObserver. Pass in NULL to
54   // remove the current observer. |observer| may always be NULL, but |observer_|
55   // must be NULL if |observer| is non-NULL.
56   void set_observer(PrintViewManagerObserver* observer);
57 
58   // content::WebContentsObserver implementation.
59   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
60 
61   // content::WebContentsObserver implementation.
62   // Terminates or cancels the print job if one was pending.
63   virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE;
64 
65  private:
66   explicit PrintViewManager(content::WebContents* web_contents);
67   friend class content::WebContentsUserData<PrintViewManager>;
68 
69   enum PrintPreviewState {
70     NOT_PREVIEWING,
71     USER_INITIATED_PREVIEW,
72     SCRIPTED_PREVIEW,
73   };
74 
75   // IPC Message handlers.
76   void OnDidShowPrintDialog();
77   void OnSetupScriptedPrintPreview(IPC::Message* reply_msg);
78   void OnShowScriptedPrintPreview(bool source_is_modifiable);
79   void OnScriptedPrintPreviewReply(IPC::Message* reply_msg);
80 
81   // Weak pointer to an observer that is notified when the print dialog is
82   // shown.
83   PrintViewManagerObserver* observer_;
84 
85   // Current state of print preview for this view.
86   PrintPreviewState print_preview_state_;
87 
88   // Keeps track of the pending callback during scripted print preview.
89   content::RenderProcessHost* scripted_print_preview_rph_;
90 
91   DISALLOW_COPY_AND_ASSIGN(PrintViewManager);
92 };
93 
94 }  // namespace printing
95 
96 #endif  // CHROME_BROWSER_PRINTING_PRINT_VIEW_MANAGER_H_
97