Index: chrome/renderer/print_web_view_helper_linux.cc |
diff --git a/chrome/renderer/print_web_view_helper_linux.cc b/chrome/renderer/print_web_view_helper_linux.cc |
index 4198377b0a6fb7acfff3336986614a5f6a0f5754..6aff3c50a422b019d3c80f8732364022d4e7d604 100644 |
--- a/chrome/renderer/print_web_view_helper_linux.cc |
+++ b/chrome/renderer/print_web_view_helper_linux.cc |
@@ -192,8 +192,11 @@ void PrintWebViewHelper::PrintPageInternal( |
gfx::Rect content_area; |
GetPageSizeAndContentAreaFromPageLayout(page_layout_in_points, &page_size, |
&content_area); |
+ gfx::Rect canvas_area = |
+ params.params.display_header_footer ? gfx::Rect(page_size) : content_area; |
+ |
SkDevice* device = metafile->StartPageForVectorCanvas( |
- page_size, content_area, scale_factor); |
+ page_size, canvas_area, scale_factor); |
if (!device) |
return; |
@@ -203,16 +206,21 @@ void PrintWebViewHelper::PrintPageInternal( |
canvas->unref(); // SkRefPtr and new both took a reference. |
printing::MetafileSkiaWrapper::SetMetafileOnCanvas(*canvas, metafile); |
skia::SetIsDraftMode(*canvas, is_print_ready_metafile_sent_); |
- frame->printPage(params.page_number, canvas.get()); |
if (params.params.display_header_footer) { |
// |page_number| is 0-based, so 1 is added. |
// The scale factor on Linux is 1. |
+ double page_shrink_factor = frame->getPrintPageShrink(params.page_number); |
PrintHeaderAndFooter(canvas.get(), params.page_number + 1, |
print_preview_context_.total_page_count(), |
- scale_factor, page_layout_in_points, |
- *header_footer_info_, params.params); |
+ scale_factor * page_shrink_factor, |
+ page_layout_in_points, *header_footer_info_, |
+ params.params); |
} |
+ canvas->translate((content_area.x() - canvas_area.x()) / scale_factor, |
+ (content_area.y() - canvas_area.y()) / scale_factor); |
+ |
+ frame->printPage(params.page_number, canvas.get()); |
// Done printing. Close the device context to retrieve the compiled metafile. |
if (!metafile->FinishPage()) |