summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authorkmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-24 01:45:44 +0000
committerkmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-24 01:45:44 +0000
commitff9a836dc0cb87a39349d3444ef2f5515ec85f16 (patch)
treed646918ac49f502d13725ffc3b57a94726bc1f20 /chrome/renderer
parent81ce2c47705894ebdba4344f483bc4cb8f072155 (diff)
downloadchromium_src-ff9a836dc0cb87a39349d3444ef2f5515ec85f16.zip
chromium_src-ff9a836dc0cb87a39349d3444ef2f5515ec85f16.tar.gz
chromium_src-ff9a836dc0cb87a39349d3444ef2f5515ec85f16.tar.bz2
PrintPreview: Fix extra margins issue.
BUG=110256,104080 TEST= On Linux, print preview http://en.wikipedia.org/wiki/Main_Page. Compare the preview margins with a printer as the destination vs. Save to PDF. They should be the same. Review URL: http://codereview.chromium.org/9808069 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@128651 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/print_web_view_helper.cc25
-rw-r--r--chrome/renderer/print_web_view_helper_browsertest.cc2
2 files changed, 17 insertions, 10 deletions
diff --git a/chrome/renderer/print_web_view_helper.cc b/chrome/renderer/print_web_view_helper.cc
index d9aa325..3f84f71 100644
--- a/chrome/renderer/print_web_view_helper.cc
+++ b/chrome/renderer/print_web_view_helper.cc
@@ -163,6 +163,8 @@ PrintMsg_Print_Params GetCssPrintParams(
page_params.margin_left,
dpi, printing::kPixelsPerInch);
+ WebSize original_page_size_in_pixels = page_size_in_pixels;
+
if (frame) {
frame->pageSizeAndMarginsInPixels(page_index,
page_size_in_pixels,
@@ -190,11 +192,18 @@ PrintMsg_Print_Params GetCssPrintParams(
static_cast<int>(ConvertUnit(new_content_height,
printing::kPixelsPerInch, dpi)));
- page_css_params.page_size = gfx::Size(
- static_cast<int>(ConvertUnit(page_size_in_pixels.width,
- printing::kPixelsPerInch, dpi)),
- static_cast<int>(ConvertUnit(page_size_in_pixels.height,
- printing::kPixelsPerInch, dpi)));
+ if (original_page_size_in_pixels != page_size_in_pixels) {
+ page_css_params.page_size = gfx::Size(
+ static_cast<int>(ConvertUnit(page_size_in_pixels.width,
+ printing::kPixelsPerInch, dpi)),
+ static_cast<int>(ConvertUnit(page_size_in_pixels.height,
+ printing::kPixelsPerInch, dpi)));
+ } else {
+ // Printing frame doesn't have any page size css. Pixels to dpi conversion
+ // causes rounding off errors. Therefore use the default page size values
+ // directly.
+ page_css_params.page_size = page_params.page_size;
+ }
page_css_params.margin_top =
static_cast<int>(ConvertUnit(margin_top_in_pixels,
@@ -224,11 +233,9 @@ double FitPrintParamsToPage(const PrintMsg_Print_Params& page_params,
if (default_page_size_width < css_page_size_width ||
default_page_size_height < css_page_size_height) {
double ratio_width =
- static_cast<double>(page_params.printable_area.width()) /
- css_page_size_width;
+ static_cast<double>(default_page_size_width) / css_page_size_width;
double ratio_height =
- static_cast<double>(page_params.printable_area.height()) /
- css_page_size_height;
+ static_cast<double>(default_page_size_height) / css_page_size_height;
scale_factor = ratio_width < ratio_height ? ratio_width : ratio_height;
content_width *= scale_factor;
content_height *= scale_factor;
diff --git a/chrome/renderer/print_web_view_helper_browsertest.cc b/chrome/renderer/print_web_view_helper_browsertest.cc
index 69a969c..b06418f 100644
--- a/chrome/renderer/print_web_view_helper_browsertest.cc
+++ b/chrome/renderer/print_web_view_helper_browsertest.cc
@@ -613,7 +613,7 @@ TEST_F(PrintWebViewHelperPreviewTest, PrintPreviewShrinkToFitPage) {
OnPrintPreview(dict);
EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining());
- VerifyDefaultPageLayout(576, 652, 69, 71, 18, 18, true);
+ VerifyDefaultPageLayout(612, 693, 49, 50, 0, 0, true);
VerifyPrintPreviewCancelled(false);
VerifyPrintPreviewFailed(false);
}