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 eca957e978ed6d57d038bee20f6e8a92118490fa..51d448743bed1e19295f2a541a57f5501b1125c3 100644 |
--- a/chrome/renderer/print_web_view_helper.cc |
+++ b/chrome/renderer/print_web_view_helper.cc |
@@ -852,7 +852,11 @@ void PrintWebViewHelper::OnPrintPreview(const DictionaryValue& settings) { |
} |
print_preview_context_.set_generate_draft_pages(generate_draft_pages); |
- if (CreatePreviewDocument()) { |
+ int margins_type = 0; |
+ if (!settings.GetInteger(printing::kSettingMarginsType, &margins_type)) |
+ margins_type = printing::DEFAULT_MARGINS; |
+ |
+ if (CreatePreviewDocument(margins_type)) { |
DidFinishPrinting(OK); |
} else { |
if (notify_browser_of_print_failure_) |
@@ -861,7 +865,7 @@ void PrintWebViewHelper::OnPrintPreview(const DictionaryValue& settings) { |
} |
} |
-bool PrintWebViewHelper::CreatePreviewDocument() { |
+bool PrintWebViewHelper::CreatePreviewDocument(int margins_type) { |
PrintMsg_Print_Params print_params = print_pages_params_->params; |
const std::vector<int>& pages = print_pages_params_->pages; |
if (!print_preview_context_.CreatePreviewDocument(&print_params, pages, |
@@ -874,20 +878,47 @@ bool PrintWebViewHelper::CreatePreviewDocument() { |
ComputePageLayoutInPointsForCss(print_preview_context_.frame(), 0, |
print_params, ignore_css_margins_, |
fit_to_page_, NULL, &default_page_layout); |
+ |
+ bool preview_is_modifiable = print_preview_context_.IsModifiable(); |
if (!old_print_pages_params_.get() || |
!PageLayoutIsEqual(*old_print_pages_params_, *print_pages_params_)) { |
bool has_page_size_style = PrintingFrameHasPageSizeStyle( |
print_preview_context_.frame(), |
print_preview_context_.total_page_count()); |
+ |
+ bool header_footer_applies = true; |
vandebo (ex-Chrome)
2012/03/15 21:47:17
It seems like this is solely concerned with the pr
kmadhusu
2012/03/17 00:29:12
Done.
|
+ if (!preview_is_modifiable || margins_type == printing::NO_MARGINS) { |
+ header_footer_applies = false; |
+ } else if (margins_type != printing::PRINTABLE_AREA_MARGINS) { |
+#if defined(OS_LINUX) |
+ header_footer_applies = |
+ (default_page_layout.margin_top > 0) || |
+ (default_page_layout.margin_bottom > 0); |
+#else |
+ int dpi = GetDPI(&print_params); |
+ int non_printable_area_top = ConvertUnit( |
+ print_pages_params_->params.printable_area.y(), |
+ dpi, printing::kPointsPerInch); |
+ int non_printable_area_bottom = ConvertUnit( |
+ print_pages_params_->params.page_size.height() - |
+ print_pages_params_->params.printable_area.y() - |
+ print_pages_params_->params.printable_area.height(), |
+ dpi, printing::kPointsPerInch); |
+ header_footer_applies = |
+ (default_page_layout.margin_top > non_printable_area_top) || |
+ (default_page_layout.margin_bottom > non_printable_area_bottom); |
+#endif |
+ } |
// Margins: Send default page layout to browser process. |
Send(new PrintHostMsg_DidGetDefaultPageLayout(routing_id(), |
default_page_layout, |
- has_page_size_style)); |
+ has_page_size_style, |
+ header_footer_applies)); |
} |
PrintHostMsg_DidGetPreviewPageCount_Params params; |
params.page_count = print_preview_context_.total_page_count(); |
- params.is_modifiable = print_preview_context_.IsModifiable(); |
+ params.is_modifiable = preview_is_modifiable; |
params.document_cookie = print_pages_params_->params.document_cookie; |
params.preview_request_id = print_pages_params_->params.preview_request_id; |
params.clear_preview_data = print_preview_context_.generate_draft_pages(); |