Skip to content

Commit

Permalink
Patch up excessive margins until we can get the real fix plumbed thro…
Browse files Browse the repository at this point in the history
…ugh.

BUG=92000
TEST=NONE

Review URL: http://codereview.chromium.org/8173016

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@104442 0039d316-1c4b-4281-b951-d872f2087c98
  • Loading branch information
vandebo@chromium.org committed Oct 7, 2011
1 parent 83deae2 commit 06bd186
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 17 deletions.
41 changes: 30 additions & 11 deletions chrome/renderer/print_web_view_helper.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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;
}
Expand All @@ -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();
Expand All @@ -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)) ||
Expand Down Expand Up @@ -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));
Expand Down Expand Up @@ -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()
Expand Down
2 changes: 1 addition & 1 deletion chrome/renderer/print_web_view_helper.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
6 changes: 3 additions & 3 deletions printing/print_job_constants.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
5 changes: 3 additions & 2 deletions printing/print_settings.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 06bd186

Please sign in to comment.