Chromium Code Reviews| Index: chrome/renderer/printing/print_web_view_helper.cc |
| diff --git a/chrome/renderer/printing/print_web_view_helper.cc b/chrome/renderer/printing/print_web_view_helper.cc |
| index 5e1328f2ab0bb6fc846b9c6fc9333530c264119b..1b12b03d37754080b4b34139ccb8997f3a0744e9 100644 |
| --- a/chrome/renderer/printing/print_web_view_helper.cc |
| +++ b/chrome/renderer/printing/print_web_view_helper.cc |
| @@ -1,5 +1,5 @@ |
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
|
Noam Samuel
2014/08/20 00:04:17
??? Pretty sure this line doesn't need to be moved
Vitaly Buka (NO REVIEWS)
2014/08/20 02:42:55
Done.
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // found in the LICENSE file. |
| #include "chrome/renderer/printing/print_web_view_helper.h" |
| @@ -91,7 +91,8 @@ bool PrintMsg_Print_Params_IsValid(const PrintMsg_Print_Params& params) { |
| return !params.content_size.IsEmpty() && !params.page_size.IsEmpty() && |
| !params.printable_area.IsEmpty() && params.document_cookie && |
| params.desired_dpi && params.max_shrink && params.min_shrink && |
| - params.dpi && (params.margin_top >= 0) && (params.margin_left >= 0); |
| + params.dpi && (params.margin_top >= 0) && (params.margin_left >= 0) && |
| + params.dpi > kMinDpi && params.document_cookie != 0; |
| } |
| PrintMsg_Print_Params GetCssPrintParams( |
| @@ -1020,8 +1021,8 @@ void PrintWebViewHelper::OnPrintPreview(const base::DictionaryValue& settings) { |
| if (print_preview_context_.last_error() != PREVIEW_ERROR_BAD_SETTING) { |
| Send(new PrintHostMsg_PrintPreviewInvalidPrinterSettings( |
| routing_id(), |
| - print_pages_params_ ? |
| - print_pages_params_->params.document_cookie : 0)); |
| + print_pages_params() ? print_pages_params()->params.document_cookie |
| + : 0)); |
| notify_browser_of_print_failure_ = false; // Already sent. |
| } |
| DidFinishPrinting(FAIL_PREVIEW); |
| @@ -1030,7 +1031,7 @@ void PrintWebViewHelper::OnPrintPreview(const base::DictionaryValue& settings) { |
| // Set the options from document if we are previewing a pdf and send a |
| // message to browser. |
| - if (print_pages_params_->params.is_first_request && |
| + if (print_pages_params()->params.is_first_request && |
| !print_preview_context_.IsModifiable()) { |
| PrintHostMsg_SetOptionsFromDocument_Params params; |
| SetOptionsFromDocument(params); |
| @@ -1055,7 +1056,7 @@ void PrintWebViewHelper::OnPrintPreview(const base::DictionaryValue& settings) { |
| void PrintWebViewHelper::PrepareFrameForPreviewDocument() { |
| reset_prep_frame_view_ = false; |
| - if (!print_pages_params_ || CheckForCancel()) { |
| + if (!print_pages_params() || CheckForCancel()) { |
| DidFinishPrinting(FAIL_PREVIEW); |
| return; |
| } |
| @@ -1067,7 +1068,7 @@ void PrintWebViewHelper::PrepareFrameForPreviewDocument() { |
| return; |
| } |
| - const PrintMsg_Print_Params& print_params = print_pages_params_->params; |
| + const PrintMsg_Print_Params& print_params = print_pages_params()->params; |
| prep_frame_view_.reset( |
| new PrepareFrameAndViewForPrint(print_params, |
| print_preview_context_.source_frame(), |
| @@ -1088,14 +1089,14 @@ void PrintWebViewHelper::OnFramePreparedForPreviewDocument() { |
| } |
| bool PrintWebViewHelper::CreatePreviewDocument() { |
| - if (!print_pages_params_ || CheckForCancel()) |
| + if (!print_pages_params() || CheckForCancel()) |
| return false; |
| UMA_HISTOGRAM_ENUMERATION("PrintPreview.PreviewEvent", |
| PREVIEW_EVENT_CREATE_DOCUMENT, PREVIEW_EVENT_MAX); |
| - const PrintMsg_Print_Params& print_params = print_pages_params_->params; |
| - const std::vector<int>& pages = print_pages_params_->pages; |
| + const PrintMsg_Print_Params& print_params = print_pages_params()->params; |
| + const std::vector<int>& pages = print_pages_params()->pages; |
| if (!print_preview_context_.CreatePreviewDocument(prep_frame_view_.release(), |
| pages)) { |
| @@ -1175,12 +1176,12 @@ bool PrintWebViewHelper::FinalizePrintReadyDocument() { |
| PrintHostMsg_DidPreviewDocument_Params preview_params; |
| preview_params.data_size = buf_size; |
| - preview_params.document_cookie = print_pages_params_->params.document_cookie; |
| + preview_params.document_cookie = print_pages_params()->params.document_cookie; |
| preview_params.expected_pages_count = |
| print_preview_context_.total_page_count(); |
| preview_params.modifiable = print_preview_context_.IsModifiable(); |
| preview_params.preview_request_id = |
| - print_pages_params_->params.preview_request_id; |
| + print_pages_params()->params.preview_request_id; |
| // Ask the browser to create the shared memory for us. |
| if (!CopyMetafileDataToSharedMem(metafile, |
| @@ -1297,16 +1298,17 @@ void PrintWebViewHelper::DidFinishPrinting(PrintingResult result) { |
| break; |
| case FAIL_PRINT: |
| - if (notify_browser_of_print_failure_ && print_pages_params_) { |
| - int cookie = print_pages_params_->params.document_cookie; |
| + if (notify_browser_of_print_failure_ && print_pages_params()) { |
| + int cookie = print_pages_params()->params.document_cookie; |
| Send(new PrintHostMsg_PrintingFailed(routing_id(), cookie)); |
| } |
| break; |
| case FAIL_PREVIEW: |
| DCHECK(is_preview_enabled_); |
| - int cookie = print_pages_params_ ? |
| - print_pages_params_->params.document_cookie : 0; |
| + int cookie = print_pages_params() |
| + ? print_pages_params()->params.document_cookie |
| + : 0; |
| if (notify_browser_of_print_failure_) { |
| LOG(ERROR) << "CreatePreviewDocument failed"; |
| Send(new PrintHostMsg_PrintPreviewFailed(routing_id(), cookie)); |
| @@ -1337,7 +1339,7 @@ void PrintWebViewHelper::PrintPages() { |
| return DidFinishPrinting(FAIL_PRINT); |
| } |
| - const PrintMsg_PrintPages_Params& params = *print_pages_params_; |
| + const PrintMsg_PrintPages_Params& params = *print_pages_params(); |
| const PrintMsg_Print_Params& print_params = params.params; |
| #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) |
| @@ -1376,7 +1378,7 @@ void PrintWebViewHelper::FinishFramePrinting() { |
| bool PrintWebViewHelper::PrintPagesNative(blink::WebFrame* frame, |
| int page_count, |
| const gfx::Size& canvas_size) { |
| - const PrintMsg_PrintPages_Params& params = *print_pages_params_; |
| + const PrintMsg_PrintPages_Params& params = *print_pages_params(); |
| const PrintMsg_Print_Params& print_params = params.params; |
| PrintMsg_PrintPage_Params page_params; |
| @@ -1426,13 +1428,6 @@ bool PrintWebViewHelper::InitPrintSettings(bool fit_to_paper_size) { |
| if (!PrintMsg_Print_Params_IsValid(settings.params)) |
| result = false; |
| - if (result && |
| - (settings.params.dpi < kMinDpi || settings.params.document_cookie == 0)) { |
| - // Invalid print page settings. |
| - NOTREACHED(); |
| - result = false; |
| - } |
| - |
| // Reset to default values. |
| ignore_css_margins_ = false; |
| settings.pages.clear(); |
| @@ -1444,7 +1439,7 @@ bool PrintWebViewHelper::InitPrintSettings(bool fit_to_paper_size) { |
| blink::WebPrintScalingOptionFitToPrintableArea; |
| } |
| - print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings)); |
| + SetPrintPagesParams(settings); |
| return result; |
| } |
| @@ -1459,12 +1454,10 @@ bool PrintWebViewHelper::CalculateNumberOfPages(blink::WebLocalFrame* frame, |
| return false; |
| } |
| - const PrintMsg_Print_Params& params = print_pages_params_->params; |
| + const PrintMsg_Print_Params& params = print_pages_params()->params; |
| PrepareFrameAndViewForPrint prepare(params, frame, node, ignore_css_margins_); |
| prepare.StartPrinting(); |
| - Send(new PrintHostMsg_DidGetDocumentCookie(routing_id(), |
| - params.document_cookie)); |
| *number_of_pages = prepare.GetExpectedPageCount(); |
| return true; |
| } |
| @@ -1509,24 +1502,14 @@ bool PrintWebViewHelper::UpdatePrintSettings( |
| // Send the cookie so that UpdatePrintSettings can reuse PrinterQuery when |
| // possible. |
| - int cookie = print_pages_params_ ? |
| - print_pages_params_->params.document_cookie : 0; |
| + int cookie = |
| + print_pages_params() ? print_pages_params()->params.document_cookie : 0; |
| PrintMsg_PrintPages_Params settings; |
| - Send(new PrintHostMsg_UpdatePrintSettings(routing_id(), cookie, *job_settings, |
| - &settings)); |
| - print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings)); |
| - |
| - if (!PrintMsg_Print_Params_IsValid(settings.params)) { |
| - if (!print_for_preview_) |
| - print_preview_context_.set_error(PREVIEW_ERROR_INVALID_PRINTER_SETTINGS); |
| - else |
| - Send(new PrintHostMsg_ShowInvalidPrinterSettingsError(routing_id())); |
| - |
| - return false; |
| - } |
| - |
| - if (settings.params.dpi < kMinDpi || !settings.params.document_cookie) { |
| - print_preview_context_.set_error(PREVIEW_ERROR_UPDATING_PRINT_SETTINGS); |
| + bool canceled = false; |
| + Send(new PrintHostMsg_UpdatePrintSettings( |
| + routing_id(), cookie, *job_settings, &settings, &canceled)); |
| + if (canceled) { |
| + notify_browser_of_print_failure_ = false; |
| return false; |
| } |
| @@ -1546,7 +1529,9 @@ bool PrintWebViewHelper::UpdatePrintSettings( |
| print_preview_context_.set_error(PREVIEW_ERROR_BAD_SETTING); |
| return false; |
| } |
| + } |
| + if (!print_for_preview_) { |
|
Noam Samuel
2014/08/20 00:04:17
Why separate two of the same if?
Vitaly Buka (NO REVIEWS)
2014/08/20 02:42:55
Done.
|
| settings.params.print_to_pdf = IsPrintToPdfRequested(*job_settings); |
| UpdateFrameMarginsCssInfo(*job_settings); |
| settings.params.print_scaling_option = GetPrintScalingOption( |
| @@ -1564,9 +1549,19 @@ bool PrintWebViewHelper::UpdatePrintSettings( |
| } |
| } |
| - print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings)); |
| - Send(new PrintHostMsg_DidGetDocumentCookie(routing_id(), |
| - settings.params.document_cookie)); |
| + SetPrintPagesParams(settings); |
| + |
| + if (CheckForCancel()) |
| + return false; |
| + |
| + if (!PrintMsg_Print_Params_IsValid(settings.params)) { |
| + if (!print_for_preview_) |
| + print_preview_context_.set_error(PREVIEW_ERROR_INVALID_PRINTER_SETTINGS); |
| + else |
| + Send(new PrintHostMsg_ShowInvalidPrinterSettingsError(routing_id())); |
| + |
| + return false; |
| + } |
| return true; |
| } |
| @@ -1577,7 +1572,7 @@ bool PrintWebViewHelper::GetPrintSettingsFromUser(blink::WebFrame* frame, |
| PrintHostMsg_ScriptedPrint_Params params; |
| PrintMsg_PrintPages_Params print_settings; |
| - params.cookie = print_pages_params_->params.document_cookie; |
| + params.cookie = print_pages_params()->params.document_cookie; |
| params.has_selection = frame->hasSelection(); |
| params.expected_pages_count = expected_pages_count; |
| MarginType margin_type = DEFAULT_MARGINS; |
| @@ -1590,16 +1585,15 @@ bool PrintWebViewHelper::GetPrintSettingsFromUser(blink::WebFrame* frame, |
| // PrintHostMsg_ScriptedPrint will reset print_scaling_option, so we save the |
| // value before and restore it afterwards. |
| blink::WebPrintScalingOption scaling_option = |
| - print_pages_params_->params.print_scaling_option; |
| + print_pages_params()->params.print_scaling_option; |
| print_pages_params_.reset(); |
| IPC::SyncMessage* msg = |
| new PrintHostMsg_ScriptedPrint(routing_id(), params, &print_settings); |
| msg->EnableMessagePumping(); |
| Send(msg); |
| - print_pages_params_.reset(new PrintMsg_PrintPages_Params(print_settings)); |
| - |
| - print_pages_params_->params.print_scaling_option = scaling_option; |
| + print_settings.params.print_scaling_option = scaling_option; |
| + SetPrintPagesParams(print_settings); |
| return (print_settings.params.dpi && print_settings.params.document_cookie); |
| } |
| @@ -1607,12 +1601,12 @@ 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_PrintPages_Params& params = *print_pages_params(); |
| const PrintMsg_Print_Params& print_params = params.params; |
| prep_frame_view_.reset(new PrepareFrameAndViewForPrint( |
| print_params, frame, node, ignore_css_margins_)); |
| - DCHECK(!print_pages_params_->params.selection_only || |
| - print_pages_params_->pages.empty()); |
| + DCHECK(!print_pages_params()->params.selection_only || |
| + print_pages_params()->pages.empty()); |
| prep_frame_view_->CopySelectionIfNeeded( |
| render_view()->GetWebkitPreferences(), |
| base::Bind(&PrintWebViewHelper::OnFramePreparedForPrintPages, |
| @@ -1771,7 +1765,7 @@ void PrintWebViewHelper::RequestPrintPreview(PrintPreviewRequestType type) { |
| } |
| bool PrintWebViewHelper::CheckForCancel() { |
| - const PrintMsg_Print_Params& print_params = print_pages_params_->params; |
| + const PrintMsg_Print_Params& print_params = print_pages_params()->params; |
| bool cancel = false; |
| Send(new PrintHostMsg_CheckForCancel(routing_id(), |
| print_params.preview_ui_id, |
| @@ -1815,7 +1809,7 @@ bool PrintWebViewHelper::PreviewPageRendered(int page_number, |
| preview_page_params.data_size = buf_size; |
| preview_page_params.page_number = page_number; |
| preview_page_params.preview_request_id = |
| - print_pages_params_->params.preview_request_id; |
| + print_pages_params()->params.preview_request_id; |
| Send(new PrintHostMsg_DidPreviewPage(routing_id(), preview_page_params)); |
| return true; |
| @@ -2063,4 +2057,11 @@ void PrintWebViewHelper::PrintPreviewContext::ClearContext() { |
| error_ = PREVIEW_ERROR_NONE; |
| } |
| +void PrintWebViewHelper::SetPrintPagesParams( |
| + const PrintMsg_PrintPages_Params& settings) { |
| + print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings)); |
| + Send(new PrintHostMsg_DidGetDocumentCookie(routing_id(), |
| + settings.params.document_cookie)); |
| +} |
| + |
| } // namespace printing |