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 CEF_LIBCEF_BROWSER_PRINTING_PRINT_VIEW_MANAGER_H_ 6 #define CEF_LIBCEF_BROWSER_PRINTING_PRINT_VIEW_MANAGER_H_ 7 8 #include "include/internal/cef_types_wrappers.h" 9 10 #include "base/macros.h" 11 #include "chrome/browser/printing/print_view_manager.h" 12 #include "components/printing/common/print.mojom-forward.h" 13 #include "content/public/browser/web_contents_observer.h" 14 #include "content/public/browser/web_contents_user_data.h" 15 16 namespace content { 17 class RenderFrameHost; 18 class RenderProcessHost; 19 class WebContentsObserver; 20 } // namespace content 21 22 class CefBrowserInfo; 23 24 struct PrintHostMsg_RequestPrintPreview_Params; 25 26 namespace printing { 27 28 // CEF handler for print commands. 29 class CefPrintViewManager : public PrintViewManager, 30 public mojom::PrintPreviewUI { 31 public: 32 ~CefPrintViewManager() override; 33 34 // Callback executed on PDF printing completion. 35 typedef base::Callback<void(bool /*ok*/)> PdfPrintCallback; 36 37 // Print the current document to a PDF file. Execute |callback| on completion. 38 bool PrintToPDF(content::RenderFrameHost* rfh, 39 const base::FilePath& path, 40 const CefPdfPrintSettings& settings, 41 const PdfPrintCallback& callback); 42 43 // mojom::PrintManagerHost methods: 44 void GetDefaultPrintSettings( 45 GetDefaultPrintSettingsCallback callback) override; 46 void DidShowPrintDialog() override; 47 void RequestPrintPreview(mojom::RequestPrintPreviewParamsPtr params) override; 48 void CheckForCancel(int32_t preview_ui_id, 49 int32_t request_id, 50 CheckForCancelCallback callback) override; 51 52 // printing::mojo::PrintPreviewUI methods: SetOptionsFromDocument(const mojom::OptionsFromDocumentParamsPtr params,int32_t request_id)53 void SetOptionsFromDocument(const mojom::OptionsFromDocumentParamsPtr params, 54 int32_t request_id) override {} DidPrepareDocumentForPreview(int32_t document_cookie,int32_t request_id)55 void DidPrepareDocumentForPreview(int32_t document_cookie, 56 int32_t request_id) override {} DidPreviewPage(mojom::DidPreviewPageParamsPtr params,int32_t request_id)57 void DidPreviewPage(mojom::DidPreviewPageParamsPtr params, 58 int32_t request_id) override {} 59 void MetafileReadyForPrinting(mojom::DidPreviewDocumentParamsPtr params, 60 int32_t request_id) override; 61 void PrintPreviewFailed(int32_t document_cookie, int32_t request_id) override; 62 void PrintPreviewCancelled(int32_t document_cookie, 63 int32_t request_id) override; PrinterSettingsInvalid(int32_t document_cookie,int32_t request_id)64 void PrinterSettingsInvalid(int32_t document_cookie, 65 int32_t request_id) override {} DidGetDefaultPageLayout(mojom::PageSizeMarginsPtr page_layout_in_points,const gfx::Rect & printable_area_in_points,bool has_custom_page_size_style,int32_t request_id)66 void DidGetDefaultPageLayout(mojom::PageSizeMarginsPtr page_layout_in_points, 67 const gfx::Rect& printable_area_in_points, 68 bool has_custom_page_size_style, 69 int32_t request_id) override {} DidStartPreview(mojom::DidStartPreviewParamsPtr params,int32_t request_id)70 void DidStartPreview(mojom::DidStartPreviewParamsPtr params, 71 int32_t request_id) override {} 72 73 // content::WebContentsObserver methods: 74 void RenderFrameDeleted(content::RenderFrameHost* render_frame_host) override; 75 void NavigationStopped() override; 76 void RenderProcessGone(base::TerminationStatus status) override; 77 78 // Inline versions of the content::WebContentsUserData methods to avoid 79 // ambiguous warnings due to the PrintViewManager base class also extending 80 // WebContentsUserData. 81 static void CreateForWebContents(content::WebContents* contents); 82 static CefPrintViewManager* FromWebContents(content::WebContents* contents); 83 static const CefPrintViewManager* FromWebContents( 84 const content::WebContents* contents); 85 86 private: 87 explicit CefPrintViewManager(content::WebContents* web_contents); 88 89 void TerminatePdfPrintJob(); 90 91 // Used for printing to PDF. Only accessed on the browser process UI thread. 92 int next_pdf_request_id_ = content::RenderFrameHost::kNoFrameTreeNodeId; 93 struct PdfPrintState; 94 std::unique_ptr<PdfPrintState> pdf_print_state_; 95 mojo::AssociatedReceiver<mojom::PrintPreviewUI> pdf_print_receiver_{this}; 96 97 DISALLOW_COPY_AND_ASSIGN(CefPrintViewManager); 98 }; 99 100 } // namespace printing 101 102 #endif // CEF_LIBCEF_BROWSER_PRINTING_PRINT_VIEW_MANAGER_H_