diff options
Diffstat (limited to 'src/core/printing/print_view_manager_base_qt.h')
-rw-r--r-- | src/core/printing/print_view_manager_base_qt.h | 105 |
1 files changed, 62 insertions, 43 deletions
diff --git a/src/core/printing/print_view_manager_base_qt.h b/src/core/printing/print_view_manager_base_qt.h index 8d6c3fc7a..3086d5d3a 100644 --- a/src/core/printing/print_view_manager_base_qt.h +++ b/src/core/printing/print_view_manager_base_qt.h @@ -48,6 +48,7 @@ #include "base/strings/string16.h" #include "components/prefs/pref_member.h" #include "components/printing/browser/print_manager.h" +#include "components/printing/common/print.mojom-forward.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" @@ -57,16 +58,12 @@ class RefCountedBytes; namespace content { class RenderFrameHost; -class RenderViewHost; } namespace printing { class JobEventDetails; -class MetafilePlayer; class PrintJob; -class PrintJobWorkerOwner; class PrintQueriesQueue; -class PrintedDocument; class PrinterQuery; } @@ -80,62 +77,70 @@ public: // Whether printing is enabled or not. void UpdatePrintingEnabled(); - virtual base::string16 RenderSourceName(); + base::string16 RenderSourceName(); + + // mojom::PrintManagerHost: + void DidGetPrintedPagesCount(int32_t cookie, uint32_t number_pages) override; + void GetDefaultPrintSettings(GetDefaultPrintSettingsCallback callback) override; + void ShowInvalidPrinterSettingsError() override; + void PrintingFailed(int32_t cookie) override; protected: explicit PrintViewManagerBaseQt(content::WebContents*); void SetPrintingRFH(content::RenderFrameHost* rfh); - // content::WebContentsObserver implementation. // Cancels the print job. void NavigationStopped() override; // content::WebContentsObserver implementation. void RenderFrameDeleted(content::RenderFrameHost* render_frame_host) override; - bool OnMessageReceived(const IPC::Message& message, - content::RenderFrameHost* render_frame_host) override; - // printing::PrintManager implementation: - void OnDidPrintDocument(content::RenderFrameHost *render_frame_host, - const printing::mojom::DidPrintDocumentParams ¶ms, - std::unique_ptr<DelayedFrameDispatchHelper> helper) override; - void OnGetDefaultPrintSettings(content::RenderFrameHost* render_frame_host, - IPC::Message* reply_msg) override; - void OnScriptedPrint(content::RenderFrameHost* render_frame_host, - const PrintHostMsg_ScriptedPrint_Params& params, - IPC::Message* reply_msg) override; + // Creates a new empty print job. It has no settings loaded. If there is + // currently a print job, safely disconnect from it. Returns false if it is + // impossible to safely disconnect from the current print job or it is + // impossible to create a new print job. + virtual bool CreateNewPrintJob(std::unique_ptr<printing::PrinterQuery> query); - void OnShowInvalidPrinterSettingsError(); + // Makes sure the current print_job_ has all its data before continuing, and + // disconnect from it. + void DisconnectFromCurrentPrintJob(); - // Processes a NOTIFY_PRINT_JOB_EVENT notification. - void OnNotifyPrintJobEvent(const printing::JobEventDetails& event_details); + void StopWorker(int documentCookie); +private: // content::NotificationObserver implementation. void Observe(int, const content::NotificationSource&, const content::NotificationDetails&) override; - void StopWorker(int document_cookie); - // In the case of Scripted Printing, where the renderer is controlling the - // control flow, print_job_ is initialized whenever possible. No-op is - // print_job_ is initialized. - bool OpportunisticallyCreatePrintJob(int cookie); + // content::WebContentsObserver implementation. + void DidStartLoading() override; + + // printing::PrintManager: + void OnDidPrintDocument( + content::RenderFrameHost *render_frame_host, + const printing::mojom::DidPrintDocumentParams ¶ms, + std::unique_ptr<DelayedFrameDispatchHelper> helper) override; + void OnScriptedPrint(content::RenderFrameHost *render_frame_host, + const printing::mojom::ScriptedPrintParams ¶ms, + IPC::Message *reply_msg) override; + + // Processes a NOTIFY_PRINT_JOB_EVENT notification. + void OnNotifyPrintJobEvent(const printing::JobEventDetails &event_details); // Requests the RenderView to render all the missing pages for the print job. // No-op if no print job is pending. Returns true if at least one page has // been requested to the renderer. bool RenderAllMissingPagesNow(); - // Checks that synchronization is correct and a print query exists for - // |cookie|. If so, returns the document associated with the cookie. - printing::PrintedDocument* GetDocument(int cookie); + // Checks that synchronization is correct with |print_job_| based on |cookie|. + bool PrintJobHasDocument(int cookie); - // Starts printing a document with data given in |print_data|. |print_data| - // must successfully initialize a metafile. |document| is the printed - // document associated with the print job. Returns true if successful. - void PrintDocument(printing::PrintedDocument *document, - const scoped_refptr<base::RefCountedMemory> &print_data, + // Starts printing the |document| in |print_job_| with the given |print_data|. + // This method assumes PrintJobHasDocument() has been called, and |print_data| + // contains valid data. + void PrintDocument(scoped_refptr<base::RefCountedMemory> print_data, const gfx::Size &page_size, const gfx::Rect &content_area, const gfx::Point &offsets); @@ -147,29 +152,43 @@ protected: // RenderAllMissingPagesNow(). void ShouldQuitFromInnerMessageLoop(); - bool RunInnerMessageLoop(); - + // Terminates the print job. No-op if no print job has been created. If + // |cancel| is true, cancel it instead of waiting for the job to finish. Will + // call ReleasePrintJob(). void TerminatePrintJob(bool cancel); - void DisconnectFromCurrentPrintJob(); - bool CreateNewPrintJob(std::unique_ptr<printing::PrinterQuery> query); + // Releases print_job_. Correctly deregisters from notifications. No-op if + // no print job has been created. void ReleasePrintJob(); + + // Runs an inner message loop. It will set inside_inner_message_loop_ to true + // while the blocking inner message loop is running. This is useful in cases + // where the RenderView is about to be destroyed while a printing job isn't + // finished. + bool RunInnerMessageLoop(); + + // In the case of Scripted Printing, where the renderer is controlling the + // control flow, print_job_ is initialized whenever possible. No-op is + // print_job_ is initialized. + bool OpportunisticallyCreatePrintJob(int cookie); + + // Release the PrinterQuery associated with our |cookie_|. void ReleasePrinterQuery(); -private: // Helper method for UpdatePrintingEnabled(). void SendPrintingEnabled(bool enabled, content::RenderFrameHost* rfh); - // content::WebContentsObserver implementation. - void DidStartLoading() override; private: content::NotificationRegistrar m_registrar; scoped_refptr<printing::PrintJob> m_printJob; - bool m_isInsideInnerMessageLoop; + content::RenderFrameHost *m_printingRFH; bool m_didPrintingSucceed; + // Set while running an inner message loop inside RenderAllMissingPagesNow(). + // This means we are _blocking_ until all the necessary pages have been + // rendered or the print settings are being loaded. + base::OnceClosure m_quitInnerLoop; scoped_refptr<printing::PrintQueriesQueue> m_printerQueriesQueue; - // The current RFH that is printing with a system printing dialog. - content::RenderFrameHost *m_printingRFH; + DISALLOW_COPY_AND_ASSIGN(PrintViewManagerBaseQt); }; |