| Index: components/printing/renderer/print_web_view_helper.cc
|
| diff --git a/components/printing/renderer/print_web_view_helper.cc b/components/printing/renderer/print_web_view_helper.cc
|
| index c09ad6ab1d79257e660ae9b34d6051c638d5740a..bf41e29facb06058051592841c1bc8dd06dfd6eb 100644
|
| --- a/components/printing/renderer/print_web_view_helper.cc
|
| +++ b/components/printing/renderer/print_web_view_helper.cc
|
| @@ -305,6 +305,15 @@ bool PrintingNodeOrPdfFrame(const blink::WebLocalFrame* frame,
|
| return plugin && plugin->supportsPaginatedPrint();
|
| }
|
|
|
| +#if defined(ENABLE_PRINT_PREVIEW)
|
| +// Returns true if the current destination printer is PRINT_TO_PDF.
|
| +bool IsPrintToPdfRequested(const base::DictionaryValue& job_settings) {
|
| + bool print_to_pdf = false;
|
| + if (!job_settings.GetBoolean(kSettingPrintToPDF, &print_to_pdf))
|
| + NOTREACHED();
|
| + return print_to_pdf;
|
| +}
|
| +
|
| bool PrintingFrameHasPageSizeStyle(blink::WebFrame* frame,
|
| int total_page_count) {
|
| if (!frame)
|
| @@ -318,6 +327,7 @@ bool PrintingFrameHasPageSizeStyle(blink::WebFrame* frame,
|
| }
|
| return frame_has_custom_page_size_style;
|
| }
|
| +#endif // defined(ENABLE_PRINT_PREVIEW)
|
|
|
| // Disable scaling when either:
|
| // - The PDF specifies disabling scaling.
|
| @@ -355,13 +365,16 @@ bool PDFShouldDisableScaling(blink::WebLocalFrame* frame,
|
| return PDFShouldDisableScalingBasedOnPreset(preset_options, params);
|
| }
|
|
|
| +#if defined(ENABLE_BASIC_PRINTING)
|
| MarginType GetMarginsForPdf(blink::WebLocalFrame* frame,
|
| const blink::WebNode& node,
|
| const PrintMsg_Print_Params& params) {
|
| return PDFShouldDisableScaling(frame, node, params) ?
|
| NO_MARGINS : PRINTABLE_AREA_MARGINS;
|
| }
|
| +#endif
|
|
|
| +#if defined(ENABLE_PRINT_PREVIEW)
|
| bool FitToPageEnabled(const base::DictionaryValue& job_settings) {
|
| bool fit_to_paper_size = false;
|
| if (!job_settings.GetBoolean(kSettingFitToPageEnabled, &fit_to_paper_size)) {
|
| @@ -403,6 +416,7 @@ blink::WebPrintScalingOption GetPrintScalingOption(
|
| }
|
| return blink::WebPrintScalingOptionFitToPrintableArea;
|
| }
|
| +#endif // defined(ENABLE_PRINT_PREVIEW)
|
|
|
| PrintMsg_Print_Params CalculatePrintParamsForCss(
|
| blink::WebFrame* frame,
|
| @@ -872,11 +886,15 @@ void PrintWebViewHelper::PrintPage(blink::WebLocalFrame* frame,
|
| if (delegate_->OverridePrint(frame))
|
| return;
|
|
|
| - if (!g_is_preview_enabled) {
|
| - Print(frame, blink::WebNode(), true);
|
| - } else {
|
| + if (g_is_preview_enabled) {
|
| +#if defined(ENABLE_PRINT_PREVIEW)
|
| print_preview_context_.InitWithFrame(frame);
|
| RequestPrintPreview(PRINT_PREVIEW_SCRIPTED);
|
| +#endif
|
| + } else {
|
| +#if defined(ENABLE_BASIC_PRINTING)
|
| + Print(frame, blink::WebNode(), true);
|
| +#endif
|
| }
|
| }
|
|
|
| @@ -895,11 +913,15 @@ bool PrintWebViewHelper::OnMessageReceived(const IPC::Message& message) {
|
| #if defined(ENABLE_BASIC_PRINTING)
|
| IPC_MESSAGE_HANDLER(PrintMsg_PrintPages, OnPrintPages)
|
| IPC_MESSAGE_HANDLER(PrintMsg_PrintForSystemDialog, OnPrintForSystemDialog)
|
| -#endif // ENABLE_BASIC_PRINTING
|
| +#endif // defined(ENABLE_BASIC_PRINTING)
|
| +#if defined(ENABLE_BASIC_PRINTING) && defined(ENABLE_PRINT_PREVIEW)
|
| + IPC_MESSAGE_HANDLER(PrintMsg_PrintForPrintPreview, OnPrintForPrintPreview)
|
| +#endif
|
| +#if defined(ENABLE_PRINT_PREVIEW)
|
| IPC_MESSAGE_HANDLER(PrintMsg_InitiatePrintPreview, OnInitiatePrintPreview)
|
| IPC_MESSAGE_HANDLER(PrintMsg_PrintPreview, OnPrintPreview)
|
| - IPC_MESSAGE_HANDLER(PrintMsg_PrintForPrintPreview, OnPrintForPrintPreview)
|
| IPC_MESSAGE_HANDLER(PrintMsg_PrintingDone, OnPrintingDone)
|
| +#endif // defined(ENABLE_PRINT_PREVIEW)
|
| IPC_MESSAGE_HANDLER(PrintMsg_SetScriptedPrintingBlocked,
|
| SetScriptedPrintBlocked)
|
| IPC_MESSAGE_UNHANDLED(handled = false)
|
| @@ -909,6 +931,47 @@ bool PrintWebViewHelper::OnMessageReceived(const IPC::Message& message) {
|
| return handled;
|
| }
|
|
|
| +bool PrintWebViewHelper::GetPrintFrame(blink::WebLocalFrame** frame) {
|
| + DCHECK(frame);
|
| + blink::WebView* webView = render_view()->GetWebView();
|
| + DCHECK(webView);
|
| + if (!webView)
|
| + return false;
|
| +
|
| + // If the user has selected text in the currently focused frame we print
|
| + // only that frame (this makes print selection work for multiple frames).
|
| + blink::WebLocalFrame* focusedFrame =
|
| + webView->focusedFrame()->toWebLocalFrame();
|
| + *frame = focusedFrame->hasSelection()
|
| + ? focusedFrame
|
| + : webView->mainFrame()->toWebLocalFrame();
|
| + return true;
|
| +}
|
| +
|
| +#if defined(ENABLE_BASIC_PRINTING)
|
| +void PrintWebViewHelper::OnPrintPages() {
|
| + CHECK_LE(ipc_nesting_level_, 1);
|
| + blink::WebLocalFrame* frame;
|
| + if (!GetPrintFrame(&frame))
|
| + return;
|
| + // If we are printing a PDF extension frame, find the plugin node and print
|
| + // that instead.
|
| + auto plugin = delegate_->GetPdfElement(frame);
|
| + Print(frame, plugin, false);
|
| +}
|
| +
|
| +void PrintWebViewHelper::OnPrintForSystemDialog() {
|
| + CHECK_LE(ipc_nesting_level_, 1);
|
| + blink::WebLocalFrame* frame = print_preview_context_.source_frame();
|
| + if (!frame) {
|
| + NOTREACHED();
|
| + return;
|
| + }
|
| + Print(frame, print_preview_context_.source_node(), false);
|
| +}
|
| +#endif // defined(ENABLE_BASIC_PRINTING)
|
| +
|
| +#if defined(ENABLE_BASIC_PRINTING) && defined(ENABLE_PRINT_PREVIEW)
|
| void PrintWebViewHelper::OnPrintForPrintPreview(
|
| const base::DictionaryValue& job_settings) {
|
| CHECK_LE(ipc_nesting_level_, 1);
|
| @@ -973,46 +1036,7 @@ void PrintWebViewHelper::OnPrintForPrintPreview(
|
| DidFinishPrinting(FAIL_PRINT);
|
| }
|
| }
|
| -
|
| -bool PrintWebViewHelper::GetPrintFrame(blink::WebLocalFrame** frame) {
|
| - DCHECK(frame);
|
| - blink::WebView* webView = render_view()->GetWebView();
|
| - DCHECK(webView);
|
| - if (!webView)
|
| - return false;
|
| -
|
| - // If the user has selected text in the currently focused frame we print
|
| - // only that frame (this makes print selection work for multiple frames).
|
| - blink::WebLocalFrame* focusedFrame =
|
| - webView->focusedFrame()->toWebLocalFrame();
|
| - *frame = focusedFrame->hasSelection()
|
| - ? focusedFrame
|
| - : webView->mainFrame()->toWebLocalFrame();
|
| - return true;
|
| -}
|
| -
|
| -#if defined(ENABLE_BASIC_PRINTING)
|
| -void PrintWebViewHelper::OnPrintPages() {
|
| - CHECK_LE(ipc_nesting_level_, 1);
|
| - blink::WebLocalFrame* frame;
|
| - if (!GetPrintFrame(&frame))
|
| - return;
|
| - // If we are printing a PDF extension frame, find the plugin node and print
|
| - // that instead.
|
| - auto plugin = delegate_->GetPdfElement(frame);
|
| - Print(frame, plugin, false);
|
| -}
|
| -
|
| -void PrintWebViewHelper::OnPrintForSystemDialog() {
|
| - CHECK_LE(ipc_nesting_level_, 1);
|
| - blink::WebLocalFrame* frame = print_preview_context_.source_frame();
|
| - if (!frame) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - Print(frame, print_preview_context_.source_node(), false);
|
| -}
|
| -#endif // ENABLE_BASIC_PRINTING
|
| +#endif // defined(ENABLE_BASIC_PRINTING) && defined(ENABLE_PRINT_PREVIEW)
|
|
|
| void PrintWebViewHelper::GetPageSizeAndContentAreaFromPageLayout(
|
| const PageSizeMargins& page_layout_in_points,
|
| @@ -1037,14 +1061,7 @@ void PrintWebViewHelper::UpdateFrameMarginsCssInfo(
|
| ignore_css_margins_ = (margins_type != DEFAULT_MARGINS);
|
| }
|
|
|
| -bool PrintWebViewHelper::IsPrintToPdfRequested(
|
| - const base::DictionaryValue& job_settings) {
|
| - bool print_to_pdf = false;
|
| - if (!job_settings.GetBoolean(kSettingPrintToPDF, &print_to_pdf))
|
| - NOTREACHED();
|
| - return print_to_pdf;
|
| -}
|
| -
|
| +#if defined(ENABLE_PRINT_PREVIEW)
|
| void PrintWebViewHelper::OnPrintPreview(const base::DictionaryValue& settings) {
|
| CHECK_LE(ipc_nesting_level_, 1);
|
|
|
| @@ -1232,6 +1249,7 @@ bool PrintWebViewHelper::FinalizePrintReadyDocument() {
|
| Send(new PrintHostMsg_MetafileReadyForPrinting(routing_id(), preview_params));
|
| return true;
|
| }
|
| +#endif // defined(ENABLE_PRINT_PREVIEW)
|
|
|
| void PrintWebViewHelper::OnPrintingDone(bool success) {
|
| CHECK_LE(ipc_nesting_level_, 1);
|
| @@ -1245,6 +1263,7 @@ void PrintWebViewHelper::SetScriptedPrintBlocked(bool blocked) {
|
| is_scripted_printing_blocked_ = blocked;
|
| }
|
|
|
| +#if defined(ENABLE_PRINT_PREVIEW)
|
| void PrintWebViewHelper::OnInitiatePrintPreview(bool selection_only) {
|
| CHECK_LE(ipc_nesting_level_, 1);
|
| blink::WebLocalFrame* frame = NULL;
|
| @@ -1262,6 +1281,7 @@ void PrintWebViewHelper::OnInitiatePrintPreview(bool selection_only) {
|
| ? PRINT_PREVIEW_USER_INITIATED_SELECTION
|
| : PRINT_PREVIEW_USER_INITIATED_ENTIRE_FRAME);
|
| }
|
| +#endif
|
|
|
| bool PrintWebViewHelper::IsPrintingEnabled() {
|
| bool result = false;
|
| @@ -1287,17 +1307,22 @@ void PrintWebViewHelper::PrintNode(const blink::WebNode& node) {
|
|
|
| // Make a copy of the node, in case RenderView::OnContextMenuClosed resets
|
| // its |context_menu_node_|.
|
| - if (!g_is_preview_enabled) {
|
| - blink::WebNode duplicate_node(node);
|
| - Print(duplicate_node.document().frame(), duplicate_node, false);
|
| - } else {
|
| + if (g_is_preview_enabled) {
|
| +#if defined(ENABLE_PRINT_PREVIEW)
|
| print_preview_context_.InitWithNode(node);
|
| RequestPrintPreview(PRINT_PREVIEW_USER_INITIATED_CONTEXT_NODE);
|
| +#endif
|
| + } else {
|
| +#if defined(ENABLE_BASIC_PRINTING)
|
| + blink::WebNode duplicate_node(node);
|
| + Print(duplicate_node.document().frame(), duplicate_node, false);
|
| +#endif
|
| }
|
|
|
| print_node_in_progress_ = false;
|
| }
|
|
|
| +#if defined(ENABLE_BASIC_PRINTING)
|
| void PrintWebViewHelper::Print(blink::WebLocalFrame* frame,
|
| const blink::WebNode& node,
|
| bool is_scripted) {
|
| @@ -1334,6 +1359,7 @@ void PrintWebViewHelper::Print(blink::WebLocalFrame* frame,
|
| }
|
| scripting_throttler_.Reset();
|
| }
|
| +#endif // defined(ENABLE_BASIC_PRINTING)
|
|
|
| void PrintWebViewHelper::DidFinishPrinting(PrintingResult result) {
|
| switch (result) {
|
| @@ -1351,6 +1377,7 @@ void PrintWebViewHelper::DidFinishPrinting(PrintingResult result) {
|
| }
|
| break;
|
|
|
| +#if defined(ENABLE_PRINT_PREVIEW)
|
| case FAIL_PREVIEW:
|
| int cookie =
|
| print_pages_params_ ? print_pages_params_->params.document_cookie : 0;
|
| @@ -1362,12 +1389,14 @@ void PrintWebViewHelper::DidFinishPrinting(PrintingResult result) {
|
| }
|
| print_preview_context_.Failed(notify_browser_of_print_failure_);
|
| break;
|
| +#endif // defined(ENABLE_PRINT_PREVIEW)
|
| }
|
| prep_frame_view_.reset();
|
| print_pages_params_.reset();
|
| notify_browser_of_print_failure_ = true;
|
| }
|
|
|
| +#if defined(ENABLE_BASIC_PRINTING)
|
| void PrintWebViewHelper::OnFramePreparedForPrintPages() {
|
| PrintPages();
|
| FinishFramePrinting();
|
| @@ -1376,6 +1405,7 @@ void PrintWebViewHelper::OnFramePreparedForPrintPages() {
|
| void PrintWebViewHelper::PrintPages() {
|
| if (!prep_frame_view_) // Printing is already canceled or failed.
|
| return;
|
| +
|
| prep_frame_view_->StartPrinting();
|
|
|
| int page_count = prep_frame_view_->GetExpectedPageCount();
|
| @@ -1387,23 +1417,18 @@ void PrintWebViewHelper::PrintPages() {
|
| const PrintMsg_PrintPages_Params& params = *print_pages_params_;
|
| const PrintMsg_Print_Params& print_params = params.params;
|
|
|
| -#if !defined(OS_CHROMEOS) && !defined(OS_ANDROID)
|
| +#if !defined(OS_ANDROID)
|
| // TODO(vitalybuka): should be page_count or valid pages from params.pages.
|
| // See http://crbug.com/161576
|
| Send(new PrintHostMsg_DidGetPrintedPagesCount(routing_id(),
|
| print_params.document_cookie,
|
| page_count));
|
| -#endif // !defined(OS_CHROMEOS) && !defined(OS_ANDROID)
|
| +#endif // !defined(OS_ANDROID)
|
|
|
| if (print_params.preview_ui_id < 0) {
|
| // Printing for system dialog.
|
| int printed_count = params.pages.empty() ? page_count : params.pages.size();
|
| -#if defined(OS_CHROMEOS)
|
| - UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToCloudPrintWebDialog",
|
| - printed_count);
|
| -#else
|
| UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.SystemDialog", printed_count);
|
| -#endif // defined(OS_CHROMEOS)
|
| }
|
|
|
| if (!PrintPagesNative(prep_frame_view_->frame(), page_count)) {
|
| @@ -1415,6 +1440,7 @@ void PrintWebViewHelper::PrintPages() {
|
| void PrintWebViewHelper::FinishFramePrinting() {
|
| prep_frame_view_.reset();
|
| }
|
| +#endif // defined(ENABLE_BASIC_PRINTING)
|
|
|
| // static - Not anonymous so that platform implementations can use it.
|
| void PrintWebViewHelper::ComputePageLayoutInPointsForCss(
|
| @@ -1495,6 +1521,7 @@ bool PrintWebViewHelper::CalculateNumberOfPages(blink::WebLocalFrame* frame,
|
| return true;
|
| }
|
|
|
| +#if defined(ENABLE_PRINT_PREVIEW)
|
| bool PrintWebViewHelper::SetOptionsFromPdfDocument(
|
| PrintHostMsg_SetOptionsFromDocument_Params* options) {
|
| blink::WebLocalFrame* source_frame = print_preview_context_.source_frame();
|
| @@ -1603,7 +1630,9 @@ bool PrintWebViewHelper::UpdatePrintSettings(
|
|
|
| return true;
|
| }
|
| +#endif // defined(ENABLE_PRINT_PREVIEW)
|
|
|
| +#if defined(ENABLE_BASIC_PRINTING)
|
| bool PrintWebViewHelper::GetPrintSettingsFromUser(blink::WebLocalFrame* frame,
|
| const blink::WebNode& node,
|
| int expected_pages_count,
|
| @@ -1643,6 +1672,7 @@ bool PrintWebViewHelper::RenderPagesForPrint(blink::WebLocalFrame* frame,
|
| const blink::WebNode& node) {
|
| if (!frame || prep_frame_view_)
|
| return false;
|
| +
|
| const PrintMsg_PrintPages_Params& params = *print_pages_params_;
|
| const PrintMsg_Print_Params& print_params = params.params;
|
| prep_frame_view_.reset(new PrepareFrameAndViewForPrint(
|
| @@ -1655,6 +1685,7 @@ bool PrintWebViewHelper::RenderPagesForPrint(blink::WebLocalFrame* frame,
|
| base::Unretained(this)));
|
| return true;
|
| }
|
| +#endif // defined(ENABLE_BASIC_PRINTING)
|
|
|
| #if defined(OS_POSIX)
|
| bool PrintWebViewHelper::CopyMetafileDataToSharedMem(
|
| @@ -1680,6 +1711,7 @@ bool PrintWebViewHelper::CopyMetafileDataToSharedMem(
|
| }
|
| #endif // defined(OS_POSIX)
|
|
|
| +#if defined(ENABLE_PRINT_PREVIEW)
|
| void PrintWebViewHelper::ShowScriptedPrintPreview() {
|
| if (is_scripted_preview_delayed_) {
|
| is_scripted_preview_delayed_ = false;
|
| @@ -1807,6 +1839,7 @@ bool PrintWebViewHelper::PreviewPageRendered(int page_number,
|
| Send(new PrintHostMsg_DidPreviewPage(routing_id(), preview_page_params));
|
| return true;
|
| }
|
| +#endif // defined(ENABLE_PRINT_PREVIEW)
|
|
|
| PrintWebViewHelper::PrintPreviewContext::PrintPreviewContext()
|
| : total_page_count_(0),
|
|
|