diff options
-rw-r--r-- | chrome/renderer/print_web_view_helper.cc | 41 | ||||
-rw-r--r-- | chrome/renderer/print_web_view_helper.h | 2 | ||||
-rw-r--r-- | printing/print_job_constants.cc | 6 | ||||
-rw-r--r-- | printing/print_settings.cc | 5 |
4 files changed, 37 insertions, 17 deletions
diff --git a/chrome/renderer/print_web_view_helper.cc b/chrome/renderer/print_web_view_helper.cc index 7114a5d..f278ef8 100644 --- a/chrome/renderer/print_web_view_helper.cc +++ b/chrome/renderer/print_web_view_helper.cc @@ -143,6 +143,22 @@ void CalculatePrintCanvasSize(const PrintMsg_Print_Params& print_params, print_params.desired_dpi)); } +bool PrintingNodeOrPdfFrame(const WebFrame* frame, const WebNode& node) { + if (!node.isNull()) + return true; + std::string mime(frame->dataSource()->response().mimeType().utf8()); + 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) { @@ -1008,6 +1024,8 @@ void PrintWebViewHelper::UpdatePrintableSizeInPrintParameters( const WebNode& node, PrepareFrameAndViewForPrint* prepare, PrintMsg_Print_Params* params) { + if (PrintingNodeOrPdfFrame(frame, node)) + return; PageSizeMargins page_layout_in_points; PrintWebViewHelper::GetPageSizeAndMarginsInPoints(frame, 0, *params, &page_layout_in_points); @@ -1091,9 +1109,9 @@ bool PrintWebViewHelper::InitPrintSettingsAndPrepareFrame( } bool PrintWebViewHelper::UpdatePrintSettings( - const DictionaryValue& job_settings, bool is_preview) { + const DictionaryValue& job_settings, bool generating_preview) { if (job_settings.empty()) { - if (is_preview) + if (generating_preview) print_preview_context_.set_error(PREVIEW_ERROR_BAD_SETTING); return false; } @@ -1108,7 +1126,7 @@ bool PrintWebViewHelper::UpdatePrintSettings( print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings)); if (PrintMsg_Print_Params_IsEmpty(settings.params)) { - if (is_preview) { + if (generating_preview) { print_preview_context_.set_error(PREVIEW_ERROR_INVALID_PRINTER_SETTINGS); } else { WebKit::WebFrame* frame = print_preview_context_.frame(); @@ -1130,7 +1148,7 @@ bool PrintWebViewHelper::UpdatePrintSettings( return false; } - if (is_preview) { + if (generating_preview) { // Validate expected print preview settings. if (!job_settings.GetString(printing::kPreviewUIAddr, &(settings.params.preview_ui_addr)) || @@ -1171,6 +1189,12 @@ 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)); @@ -1505,13 +1529,8 @@ bool PrintWebViewHelper::PrintPreviewContext::IsReadyToRender() const { } bool PrintWebViewHelper::PrintPreviewContext::IsModifiable() const { - // TODO(vandebo) I think this should only return false if the content is a - // PDF, just because we are printing a particular node does not mean it's - // a PDF (right?), we should check the mime type of the node. - if (!node().isNull()) - return false; - std::string mime(frame()->dataSource()->response().mimeType().utf8()); - return mime != "application/pdf"; + // The only kind of node we can print right now is a PDF node. + return !PrintingNodeOrPdfFrame(frame(), node()); } bool PrintWebViewHelper::PrintPreviewContext::IsLastPageOfPrintReadyMetafile() diff --git a/chrome/renderer/print_web_view_helper.h b/chrome/renderer/print_web_view_helper.h index 3c60a17..04cc5cf 100644 --- a/chrome/renderer/print_web_view_helper.h +++ b/chrome/renderer/print_web_view_helper.h @@ -189,7 +189,7 @@ class PrintWebViewHelper // dictionary contains print job details such as printer name, number of // copies, page range, etc. bool UpdatePrintSettings(const base::DictionaryValue& job_settings, - bool is_preview); + bool generating_preview); // Get final print settings from the user. // Return false if the user cancels or on error. diff --git a/printing/print_job_constants.cc b/printing/print_job_constants.cc index fa99f25..3efb488 100644 --- a/printing/print_job_constants.cc +++ b/printing/print_job_constants.cc @@ -68,9 +68,9 @@ const int kSettingHeaderFooterFontSize = 8; // Number of horizontal regions for headers and footers. const float kSettingHeaderFooterHorizontalRegions = 3; -// Interstice or gap between different header footer components. -// Hardcoded to 0.25cm = 1/10" = 7.2points. -const float kSettingHeaderFooterInterstice = 7.2f; +// Interstice or gap between different header footer components. Hardcoded to +// about 0.5cm, match the value in PrintSettings::SetPrinterPrintableArea. +const float kSettingHeaderFooterInterstice = 14.2f; // Key that specifies the date of the page that will be printed in the headers // and footers. diff --git a/printing/print_settings.cc b/printing/print_settings.cc index 97de679..d08d02f5 100644 --- a/printing/print_settings.cc +++ b/printing/print_settings.cc @@ -5,6 +5,7 @@ #include "printing/print_settings.h" #include "base/atomic_sequence_num.h" +#include "printing/print_job_constants.h" #include "printing/units.h" namespace printing { @@ -54,8 +55,8 @@ void PrintSettings::SetPrinterPrintableArea( int margin_printer_units = 0; if (use_overlays) { // Hard-code text_height = 0.5cm = ~1/5 of inch. - header_footer_text_height = ConvertUnit(500, kHundrethsMMPerInch, - units_per_inch); + header_footer_text_height = ConvertUnit(kSettingHeaderFooterInterstice, + kPointsPerInch, units_per_inch); // Default margins 1.0cm = ~2/5 of an inch. margin_printer_units = ConvertUnit(1000, kHundrethsMMPerInch, units_per_inch); |