Home | History | Annotate | Download | only in printing
      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