| 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 7114a5dac9d38511fbb993cdef41e084393f8cd4..f278ef85e29cd5cbd427647b4f8c37a29995f5d2 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()
|
|
|