| 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 afbb26233462518a91df5ae53561993c90bca1e4..df2270ff943ec7bfa3c088a4ff15261a83f0dbd1 100644
|
| --- a/chrome/renderer/print_web_view_helper.cc
|
| +++ b/chrome/renderer/print_web_view_helper.cc
|
| @@ -152,83 +152,17 @@ bool PrintingNodeOrPdfFrame(const WebFrame* frame, const WebNode& node) {
|
| return mime == "application/pdf";
|
| }
|
|
|
| -void SetMarginsForPDF(PrintMsg_Print_Params* settings) {
|
| - // This is the wrong way to do this. But the pipeline for the right way is
|
| - // too long. This will be removed soon. http://crbug.com/92000
|
| - settings->margin_top = 0;
|
| - settings->margin_left = 0;
|
| - settings->printable_size.set_width(settings->page_size.width());
|
| - settings->printable_size.set_height(settings->page_size.height());
|
| -}
|
| -
|
| -// Get the margins option selected and set custom margins appropriately.
|
| -void SetCustomMarginsIfSelected(const DictionaryValue& job_settings,
|
| - PrintMsg_PrintPages_Params* settings) {
|
| - int margin_type = printing::DEFAULT_MARGINS;
|
| - if (!job_settings.GetInteger(printing::kSettingMarginsType, &margin_type)) {
|
| - NOTREACHED();
|
| - }
|
| -
|
| - if (margin_type == printing::DEFAULT_MARGINS)
|
| - return;
|
| -
|
| - double custom_margin_top_in_points = 0;
|
| - double custom_margin_left_in_points = 0;
|
| - double custom_margin_right_in_points = 0;
|
| - double custom_margin_bottom_in_points = 0;
|
| - if (margin_type == printing::CUSTOM_MARGINS) {
|
| - DictionaryValue* custom_margins;
|
| - if (!job_settings.GetDictionary(printing::kSettingMarginsCustom,
|
| - &custom_margins)) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - if (!custom_margins->GetDouble(printing::kSettingMarginTop,
|
| - &custom_margin_top_in_points) ||
|
| - !custom_margins->GetDouble(printing::kSettingMarginLeft,
|
| - &custom_margin_left_in_points) ||
|
| - !custom_margins->GetDouble(printing::kSettingMarginRight,
|
| - &custom_margin_right_in_points) ||
|
| - !custom_margins->GetDouble(printing::kSettingMarginBottom,
|
| - &custom_margin_bottom_in_points)) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - }
|
| -
|
| - int dpi = GetDPI(&settings->params);
|
| - double custom_margin_top_in_dots = ConvertUnitDouble(
|
| - custom_margin_top_in_points, printing::kPointsPerInch, dpi);
|
| - double custom_margin_left_in_dots = ConvertUnitDouble(
|
| - custom_margin_left_in_points, printing::kPointsPerInch, dpi);
|
| - double custom_margin_right_in_dots = ConvertUnitDouble(
|
| - custom_margin_right_in_points, printing::kPointsPerInch, dpi);
|
| - double custom_margin_bottom_in_dots = ConvertUnitDouble(
|
| - custom_margin_bottom_in_points, printing::kPointsPerInch, dpi);
|
| -
|
| -
|
| - if (custom_margin_left_in_dots < 0 || custom_margin_right_in_dots < 0 ||
|
| - custom_margin_top_in_dots < 0 || custom_margin_bottom_in_dots < 0) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| -
|
| - if (settings->params.page_size.width() < custom_margin_left_in_dots +
|
| - custom_margin_right_in_dots ||
|
| - settings->params.page_size.height() < custom_margin_top_in_dots +
|
| - custom_margin_bottom_in_dots) {
|
| - NOTREACHED();
|
| - return;
|
| +void SetMarginsForPdf(DictionaryValue* job_settings, bool force_no_margins) {
|
| + // TODO(vandebo) When it's plumbed through, check if the plugin wants us to
|
| + // scale or not. For now, assume the answer is yes.
|
| + if (force_no_margins) {
|
| + job_settings->SetInteger(printing::kSettingMarginsType,
|
| + printing::NO_MARGINS);
|
| + } else {
|
| + job_settings->SetInteger(printing::kSettingMarginsType,
|
| + printing::PRINTABLE_AREA_MARGINS);
|
| }
|
|
|
| - settings->params.margin_top = custom_margin_top_in_dots;
|
| - settings->params.margin_left = custom_margin_left_in_dots;
|
| - settings->params.printable_size.set_width(
|
| - settings->params.page_size.width() - custom_margin_right_in_dots -
|
| - custom_margin_left_in_dots);
|
| - settings->params.printable_size.set_height(
|
| - settings->params.page_size.height() - custom_margin_bottom_in_dots -
|
| - custom_margin_top_in_dots);
|
| }
|
|
|
| // Get the (x, y) coordinate from where printing of the current text should
|
| @@ -582,13 +516,13 @@ void PrintWebViewHelper::OnPrintForPrintPreview(
|
| return;
|
| }
|
|
|
| - if (!UpdatePrintSettings(job_settings, false)) {
|
| + WebFrame* pdf_frame = pdf_element.document().frame();
|
| + if (!UpdatePrintSettings(pdf_frame, pdf_element, job_settings, false)) {
|
| LOG(ERROR) << "UpdatePrintSettings failed";
|
| DidFinishPrinting(FAIL_PRINT);
|
| return;
|
| }
|
|
|
| - WebFrame* pdf_frame = pdf_element.document().frame();
|
| scoped_ptr<PrepareFrameAndViewForPrint> prepare;
|
| prepare.reset(new PrepareFrameAndViewForPrint(print_pages_params_->params,
|
| pdf_frame, pdf_element));
|
| @@ -636,7 +570,8 @@ void PrintWebViewHelper::OnPrintPreview(const DictionaryValue& settings) {
|
| DCHECK(is_preview_);
|
| print_preview_context_.OnPrintPreview();
|
|
|
| - if (!UpdatePrintSettings(settings, true)) {
|
| + if (!UpdatePrintSettings(print_preview_context_.frame(),
|
| + print_preview_context_.node(), settings, true)) {
|
| if (print_preview_context_.last_error() != PREVIEW_ERROR_BAD_SETTING) {
|
| Send(new PrintHostMsg_PrintPreviewInvalidPrinterSettings(
|
| routing_id(), print_pages_params_->params.document_cookie));
|
| @@ -1109,20 +1044,35 @@ bool PrintWebViewHelper::InitPrintSettingsAndPrepareFrame(
|
| }
|
|
|
| bool PrintWebViewHelper::UpdatePrintSettings(
|
| - const DictionaryValue& job_settings, bool generating_preview) {
|
| - if (job_settings.empty()) {
|
| + WebKit::WebFrame* frame, const WebKit::WebNode& node,
|
| + const DictionaryValue& passed_job_settings, bool generating_preview) {
|
| + DCHECK(is_preview_);
|
| + const DictionaryValue* job_settings = &passed_job_settings;
|
| + DictionaryValue modified_job_settings;
|
| + if (job_settings->empty()) {
|
| if (generating_preview)
|
| print_preview_context_.set_error(PREVIEW_ERROR_BAD_SETTING);
|
| return false;
|
| }
|
|
|
| + bool is_pdf = PrintingNodeOrPdfFrame(frame, node);
|
| + if (is_pdf || !generating_preview) {
|
| + modified_job_settings.MergeDictionary(job_settings);
|
| + SetMarginsForPdf(&modified_job_settings, !generating_preview);
|
| + if (is_pdf) {
|
| + modified_job_settings.SetBoolean(printing::kSettingHeaderFooterEnabled,
|
| + false);
|
| + }
|
| + job_settings = &modified_job_settings;
|
| + }
|
| +
|
| // Send the cookie so that UpdatePrintSettings can reuse PrinterQuery when
|
| // possible.
|
| int cookie = print_pages_params_.get() ?
|
| print_pages_params_->params.document_cookie : 0;
|
| PrintMsg_PrintPages_Params settings;
|
| Send(new PrintHostMsg_UpdatePrintSettings(routing_id(),
|
| - cookie, job_settings, &settings));
|
| + cookie, *job_settings, &settings));
|
| print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings));
|
|
|
| if (PrintMsg_Print_Params_IsEmpty(settings.params)) {
|
| @@ -1150,22 +1100,17 @@ bool PrintWebViewHelper::UpdatePrintSettings(
|
|
|
| if (generating_preview) {
|
| // Validate expected print preview settings.
|
| - if (!job_settings.GetString(printing::kPreviewUIAddr,
|
| - &(settings.params.preview_ui_addr)) ||
|
| - !job_settings.GetInteger(printing::kPreviewRequestID,
|
| - &(settings.params.preview_request_id)) ||
|
| - !job_settings.GetBoolean(printing::kIsFirstRequest,
|
| - &(settings.params.is_first_request))) {
|
| + if (!job_settings->GetString(printing::kPreviewUIAddr,
|
| + &(settings.params.preview_ui_addr)) ||
|
| + !job_settings->GetInteger(printing::kPreviewRequestID,
|
| + &(settings.params.preview_request_id)) ||
|
| + !job_settings->GetBoolean(printing::kIsFirstRequest,
|
| + &(settings.params.is_first_request))) {
|
| NOTREACHED();
|
| print_preview_context_.set_error(PREVIEW_ERROR_BAD_SETTING);
|
| return false;
|
| }
|
|
|
| - if (settings.params.is_first_request &&
|
| - !print_preview_context_.IsModifiable()) {
|
| - settings.params.display_header_footer = false;
|
| - }
|
| -
|
| // Margins: Send default page layout to browser process.
|
| PageSizeMargins default_page_layout;
|
| GetPageSizeAndMarginsInPoints(NULL, -1, settings.params,
|
| @@ -1175,7 +1120,6 @@ bool PrintWebViewHelper::UpdatePrintSettings(
|
| Send(new PrintHostMsg_DidGetDefaultPageLayout(routing_id(),
|
| default_page_layout));
|
| }
|
| - SetCustomMarginsIfSelected(job_settings, &settings);
|
|
|
| // Header/Footer: Set |header_footer_info_|.
|
| if (settings.params.display_header_footer) {
|
| @@ -1189,12 +1133,6 @@ bool PrintWebViewHelper::UpdatePrintSettings(
|
| }
|
| }
|
|
|
| - if ((is_preview_ && !generating_preview) ||
|
| - PrintingNodeOrPdfFrame(print_preview_context_.frame(),
|
| - print_preview_context_.node())) {
|
| - SetMarginsForPDF(&settings.params);
|
| - }
|
| -
|
| print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings));
|
| Send(new PrintHostMsg_DidGetDocumentCookie(routing_id(),
|
| settings.params.document_cookie));
|
| @@ -1218,7 +1156,7 @@ bool PrintWebViewHelper::GetPrintSettingsFromUser(WebKit::WebFrame* frame,
|
| params.cookie = print_pages_params_->params.document_cookie;
|
| params.has_selection = frame->hasSelection();
|
| params.expected_pages_count = expected_pages_count;
|
| - params.use_overlays = use_browser_overlays;
|
| + params.margin_type = printing::DEFAULT_MARGINS;
|
|
|
| Send(new PrintHostMsg_DidShowPrintDialog(routing_id()));
|
|
|
|
|