Chromium Code Reviews| Index: chrome/renderer/print_web_view_helper.cc |
| diff --git a/chrome/renderer/print_web_view_helper.cc b/chrome/renderer/print_web_view_helper.cc |
| index 72c7f10bf7d114458c0e74790085931b5a38f6ff..9127bd53690d683427f9efe80cbc9b22dd85e5ff 100644 |
| --- a/chrome/renderer/print_web_view_helper.cc |
| +++ b/chrome/renderer/print_web_view_helper.cc |
| @@ -152,6 +152,12 @@ bool PrintingNodeOrPdfFrame(const WebFrame* frame, const WebNode& node) { |
| return mime == "application/pdf"; |
| } |
| +bool PrintingFrameHasPageSizeStyle(WebFrame* frame) { |
| + if (!frame) |
| + return false; |
| + return frame->hasCustomPageSizeStyle(0); |
| +} |
| + |
| printing::MarginType GetMarginsForPdf(WebFrame* frame, const WebNode& node) { |
| if (frame->isPrintScalingDisabledForPlugin(node)) |
| return printing::NO_MARGINS; |
| @@ -440,6 +446,7 @@ PrintWebViewHelper::PrintWebViewHelper(content::RenderView* render_view) |
| print_web_view_(NULL), |
| is_preview_enabled_(switches::IsPrintPreviewEnabled()), |
| is_print_ready_metafile_sent_(false), |
| + default_margins_requested_(false), |
|
vandebo (ex-Chrome)
2011/11/17 23:05:23
Should this default to true?
kmadhusu
2011/12/01 02:15:42
Done.
|
| user_cancelled_scripted_print_count_(0), |
| notify_browser_of_print_failure_(true) { |
| } |
| @@ -521,7 +528,8 @@ void PrintWebViewHelper::OnPrintForPrintPreview( |
| prepare.reset(new PrepareFrameAndViewForPrint(print_pages_params_->params, |
| pdf_frame, pdf_element)); |
| UpdatePrintableSizeInPrintParameters(pdf_frame, pdf_element, prepare.get(), |
| - &print_pages_params_->params); |
| + &print_pages_params_->params, |
| + default_margins_requested_); |
| // Render Pages for printing. |
| if (!RenderPagesForPrint(pdf_frame, pdf_element, prepare.get())) { |
| @@ -560,6 +568,14 @@ void PrintWebViewHelper::OnPrintForSystemDialog() { |
| Print(frame, print_preview_context_.node()); |
| } |
| +void PrintWebViewHelper::UpdateDefaultMarginsRequested( |
| + const DictionaryValue& settings) { |
| + int margins_type = 0; |
| + if (!settings.GetInteger(printing::kSettingMarginsType, &margins_type)) |
| + margins_type = printing::DEFAULT_MARGINS; |
| + default_margins_requested_ = margins_type == printing::DEFAULT_MARGINS; |
| +} |
| + |
| void PrintWebViewHelper::OnPrintPreview(const DictionaryValue& settings) { |
| DCHECK(is_preview_enabled_); |
| print_preview_context_.OnPrintPreview(); |
| @@ -620,11 +636,27 @@ void PrintWebViewHelper::OnPrintPreview(const DictionaryValue& settings) { |
| bool PrintWebViewHelper::CreatePreviewDocument() { |
| PrintMsg_Print_Params print_params = print_pages_params_->params; |
| const std::vector<int>& pages = print_pages_params_->pages; |
| - if (!print_preview_context_.CreatePreviewDocument(&print_params, pages)) |
| + if (!print_preview_context_.CreatePreviewDocument( |
| + &print_params, pages, default_margins_requested_)) { |
| return false; |
| + } |
| + |
| + // Margins: Send default page layout to browser process. |
| + PageSizeMargins default_page_layout; |
| + GetPageSizeAndMarginsInPoints(print_preview_context_.frame(), 0, print_params, |
| + &default_page_layout, |
| + default_margins_requested_); |
| + if (!old_print_pages_params_.get() || |
| + !PageLayoutIsEqual(*old_print_pages_params_, *print_pages_params_)) { |
| + Send(new PrintHostMsg_DidGetDefaultPageLayout(routing_id(), |
| + default_page_layout)); |
| + } |
| + |
| PrintHostMsg_DidGetPreviewPageCount_Params params; |
| params.page_count = print_preview_context_.total_page_count(); |
| params.is_modifiable = print_preview_context_.IsModifiable(); |
| + params.has_page_size_style = PrintingFrameHasPageSizeStyle( |
|
vandebo (ex-Chrome)
2011/11/17 23:05:23
If we ask for the page size and margins in GetPage
kmadhusu
2011/12/01 02:15:42
(repeating our conversation for reference): This i
|
| + print_preview_context_.frame()); |
| params.document_cookie = print_pages_params_->params.document_cookie; |
| params.preview_request_id = print_pages_params_->params.preview_request_id; |
| params.clear_preview_data = print_preview_context_.generate_draft_pages(); |
| @@ -847,7 +879,8 @@ bool PrintWebViewHelper::PrintPages(const PrintMsg_PrintPages_Params& params, |
| node)); |
| prepare = prep_frame_view.get(); |
| } |
| - UpdatePrintableSizeInPrintParameters(frame, node, prepare, &print_params); |
| + UpdatePrintableSizeInPrintParameters(frame, node, prepare, &print_params, |
| + default_margins_requested_); |
| int page_count = prepare->GetExpectedPageCount(); |
| if (!page_count) |
| @@ -887,7 +920,8 @@ void PrintWebViewHelper::GetPageSizeAndMarginsInPoints( |
| WebFrame* frame, |
| int page_index, |
| const PrintMsg_Print_Params& default_params, |
| - PageSizeMargins* page_layout_in_points) { |
| + PageSizeMargins* page_layout_in_points, |
| + bool default_margins_requested) { |
| int dpi = GetDPI(&default_params); |
| WebSize page_size_in_pixels( |
| @@ -916,7 +950,8 @@ void PrintWebViewHelper::GetPageSizeAndMarginsInPoints( |
| margin_top_in_pixels, |
| margin_right_in_pixels, |
| margin_bottom_in_pixels, |
| - margin_left_in_pixels); |
| + margin_left_in_pixels, |
| + default_margins_requested); |
|
vandebo (ex-Chrome)
2011/11/17 23:05:23
It seems like modifying webkit would be a bit much
kmadhusu
2011/12/01 02:15:42
As we discussed, I am not doing to modify |pageSiz
|
| } |
| page_layout_in_points->content_width = |
| @@ -933,7 +968,7 @@ void PrintWebViewHelper::GetPageSizeAndMarginsInPoints( |
| page_layout_in_points->content_height < 1.0) { |
| CHECK(frame != NULL); |
| GetPageSizeAndMarginsInPoints(NULL, page_index, default_params, |
| - page_layout_in_points); |
| + page_layout_in_points, true); |
|
vandebo (ex-Chrome)
2011/11/17 23:05:23
Seems like you could/should change default_margins
kmadhusu
2011/12/01 02:15:42
Done.
|
| return; |
| } |
| @@ -952,12 +987,14 @@ void PrintWebViewHelper::UpdatePrintableSizeInPrintParameters( |
| WebFrame* frame, |
| const WebNode& node, |
| PrepareFrameAndViewForPrint* prepare, |
| - PrintMsg_Print_Params* params) { |
| + PrintMsg_Print_Params* params, |
| + bool default_margins_requested) { |
| if (PrintingNodeOrPdfFrame(frame, node)) |
| return; |
| PageSizeMargins page_layout_in_points; |
| PrintWebViewHelper::GetPageSizeAndMarginsInPoints(frame, 0, *params, |
| - &page_layout_in_points); |
| + &page_layout_in_points, |
| + default_margins_requested); |
| int dpi = GetDPI(params); |
| params->printable_size = gfx::Size( |
| static_cast<int>(ConvertUnitDouble( |
| @@ -1031,7 +1068,8 @@ bool PrintWebViewHelper::InitPrintSettingsAndPrepareFrame( |
| prepare->reset(new PrepareFrameAndViewForPrint(print_pages_params_->params, |
| frame, node)); |
| UpdatePrintableSizeInPrintParameters(frame, node, prepare->get(), |
| - &print_pages_params_->params); |
| + &print_pages_params_->params, |
| + default_margins_requested_); |
| Send(new PrintHostMsg_DidGetDocumentCookie( |
| routing_id(), print_pages_params_->params.document_cookie)); |
| return true; |
| @@ -1085,6 +1123,7 @@ bool PrintWebViewHelper::UpdatePrintSettings( |
| margin_type); |
| job_settings = &modified_job_settings; |
| } |
| + UpdateDefaultMarginsRequested(*job_settings); |
|
vandebo (ex-Chrome)
2011/11/17 23:05:23
If you move default_margins_requested_ to PrintPre
kmadhusu
2011/12/01 02:15:42
Having the member variable in PrintWebViewHelper,
|
| // Send the cookie so that UpdatePrintSettings can reuse PrinterQuery when |
| // possible. |
| @@ -1132,16 +1171,6 @@ bool PrintWebViewHelper::UpdatePrintSettings( |
| return false; |
| } |
| - // Margins: Send default page layout to browser process. |
| - PageSizeMargins default_page_layout; |
| - GetPageSizeAndMarginsInPoints(NULL, -1, settings.params, |
| - &default_page_layout); |
| - if (!old_print_pages_params_.get() || |
| - !PageLayoutIsEqual(*old_print_pages_params_, settings)) { |
| - Send(new PrintHostMsg_DidGetDefaultPageLayout(routing_id(), |
| - default_page_layout)); |
| - } |
| - |
| // Header/Footer: Set |header_footer_info_|. |
| if (settings.params.display_header_footer) { |
| header_footer_info_.reset(new DictionaryValue()); |
| @@ -1379,7 +1408,8 @@ void PrintWebViewHelper::PrintPreviewContext::OnPrintPreview() { |
| bool PrintWebViewHelper::PrintPreviewContext::CreatePreviewDocument( |
| PrintMsg_Print_Params* print_params, |
| - const std::vector<int>& pages) { |
| + const std::vector<int>& pages, |
| + bool default_margins_requested) { |
| DCHECK_EQ(INITIALIZED, state_); |
| state_ = RENDERING; |
| @@ -1394,7 +1424,8 @@ bool PrintWebViewHelper::PrintPreviewContext::CreatePreviewDocument( |
| prep_frame_view_.reset(new PrepareFrameAndViewForPrint(*print_params, frame(), |
| node())); |
| UpdatePrintableSizeInPrintParameters(frame_, node_, |
| - prep_frame_view_.get(), print_params); |
| + prep_frame_view_.get(), print_params, |
| + default_margins_requested); |
| print_params_.reset(new PrintMsg_Print_Params(*print_params)); |