// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CEF_LIBCEF_BROWSER_PRINTING_PRINT_VIEW_MANAGER_H_ #define CEF_LIBCEF_BROWSER_PRINTING_PRINT_VIEW_MANAGER_H_ #include "include/internal/cef_types_wrappers.h" #include "base/macros.h" #include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_contents_user_data.h" namespace content { class RenderFrameHost; class RenderProcessHost; class WebContentsObserver; } // namespace content class CefBrowserInfo; struct PrintHostMsg_DidPreviewDocument_Params; struct PrintHostMsg_PreviewIds; struct PrintHostMsg_RequestPrintPreview_Params; namespace printing { // Manages the print commands for a WebContents. class CefPrintViewManager : public content::WebContentsObserver, public content::WebContentsUserData { public: ~CefPrintViewManager() override; // Callback executed on PDF printing completion. typedef base::Callback PdfPrintCallback; // Print the current document to a PDF file. Execute |callback| on completion. bool PrintToPDF(content::RenderFrameHost* rfh, const base::FilePath& path, const CefPdfPrintSettings& settings, const PdfPrintCallback& callback); // Call to Chrome's PrintViewManager. bool PrintPreviewNow(content::RenderFrameHost* rfh, bool has_selection); // content::WebContentsObserver implementation. void RenderFrameDeleted(content::RenderFrameHost* render_frame_host) override; void NavigationStopped() override; void RenderProcessGone(base::TerminationStatus status) override; bool OnMessageReceived(const IPC::Message& message, content::RenderFrameHost* render_frame_host) override; // Used to track the lifespan of the print preview WebContents. class PrintPreviewHelper : public content::WebContentsObserver, public content::WebContentsUserData { public: void Initialize(int parent_frame_tree_node_id); void WebContentsDestroyed() override; private: friend class content::WebContentsUserData; explicit PrintPreviewHelper(content::WebContents* contents); int parent_frame_tree_node_id_ = -1; WEB_CONTENTS_USER_DATA_KEY_DECL(); DISALLOW_COPY_AND_ASSIGN(PrintPreviewHelper); }; private: explicit CefPrintViewManager(content::WebContents* web_contents); friend class content::WebContentsUserData; // IPC Message handlers. void OnRequestPrintPreview(content::RenderFrameHost* rfh, const PrintHostMsg_RequestPrintPreview_Params&); void OnShowScriptedPrintPreview(content::RenderFrameHost* rfh, bool source_is_modifiable); void OnRequestPrintPreview_PrintToPdf( content::RenderFrameHost* rfh, const PrintHostMsg_RequestPrintPreview_Params&); void OnDidShowPrintDialog_PrintToPdf(content::RenderFrameHost* rfh); void OnMetafileReadyForPrinting_PrintToPdf( content::RenderFrameHost* rfh, const PrintHostMsg_DidPreviewDocument_Params& params, const PrintHostMsg_PreviewIds& ids); void InitializePrintPreview(int frame_tree_node_id); void TerminatePdfPrintJob(); // Used for printing to PDF. Only accessed on the browser process UI thread. int next_pdf_request_id_ = content::RenderFrameHost::kNoFrameTreeNodeId; struct PdfPrintState; std::unique_ptr pdf_print_state_; WEB_CONTENTS_USER_DATA_KEY_DECL(); DISALLOW_COPY_AND_ASSIGN(CefPrintViewManager); }; } // namespace printing #endif // CEF_LIBCEF_BROWSER_PRINTING_PRINT_VIEW_MANAGER_H_