Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2994)

Unified Diff: chrome/renderer/print_web_view_helper.cc

Issue 8585017: PrintPreview: Honor the print media page size and margin values. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: '' Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 72c7f10bf7d114458c0e74790085931b5a38f6ff..9127bd53690d683427f9efe80cbc9b22dd85e5ff 100644
--- a/chrome/renderer/print_web_view_helper.cc
+++ b/chrome/renderer/print_web_view_helper.cc
@@ -152,6 +152,12 @@ bool PrintingNodeOrPdfFrame(const WebFrame* frame, const WebNode& node) {
return mime == "application/pdf";
}
+bool PrintingFrameHasPageSizeStyle(WebFrame* frame) {
+ if (!frame)
+ return false;
+ return frame->hasCustomPageSizeStyle(0);
+}
+
printing::MarginType GetMarginsForPdf(WebFrame* frame, const WebNode& node) {
if (frame->isPrintScalingDisabledForPlugin(node))
return printing::NO_MARGINS;
@@ -440,6 +446,7 @@ PrintWebViewHelper::PrintWebViewHelper(content::RenderView* render_view)
print_web_view_(NULL),
is_preview_enabled_(switches::IsPrintPreviewEnabled()),
is_print_ready_metafile_sent_(false),
+ default_margins_requested_(false),
vandebo (ex-Chrome) 2011/11/17 23:05:23 Should this default to true?
kmadhusu 2011/12/01 02:15:42 Done.
user_cancelled_scripted_print_count_(0),
notify_browser_of_print_failure_(true) {
}
@@ -521,7 +528,8 @@ void PrintWebViewHelper::OnPrintForPrintPreview(
prepare.reset(new PrepareFrameAndViewForPrint(print_pages_params_->params,
pdf_frame, pdf_element));
UpdatePrintableSizeInPrintParameters(pdf_frame, pdf_element, prepare.get(),
- &print_pages_params_->params);
+ &print_pages_params_->params,
+ default_margins_requested_);
// Render Pages for printing.
if (!RenderPagesForPrint(pdf_frame, pdf_element, prepare.get())) {
@@ -560,6 +568,14 @@ void PrintWebViewHelper::OnPrintForSystemDialog() {
Print(frame, print_preview_context_.node());
}
+void PrintWebViewHelper::UpdateDefaultMarginsRequested(
+ const DictionaryValue& settings) {
+ int margins_type = 0;
+ if (!settings.GetInteger(printing::kSettingMarginsType, &margins_type))
+ margins_type = printing::DEFAULT_MARGINS;
+ default_margins_requested_ = margins_type == printing::DEFAULT_MARGINS;
+}
+
void PrintWebViewHelper::OnPrintPreview(const DictionaryValue& settings) {
DCHECK(is_preview_enabled_);
print_preview_context_.OnPrintPreview();
@@ -620,11 +636,27 @@ void PrintWebViewHelper::OnPrintPreview(const DictionaryValue& settings) {
bool PrintWebViewHelper::CreatePreviewDocument() {
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))
+ if (!print_preview_context_.CreatePreviewDocument(
+ &print_params, pages, default_margins_requested_)) {
return false;
+ }
+
+ // Margins: Send default page layout to browser process.
+ PageSizeMargins default_page_layout;
+ GetPageSizeAndMarginsInPoints(print_preview_context_.frame(), 0, print_params,
+ &default_page_layout,
+ default_margins_requested_);
+ if (!old_print_pages_params_.get() ||
+ !PageLayoutIsEqual(*old_print_pages_params_, *print_pages_params_)) {
+ Send(new PrintHostMsg_DidGetDefaultPageLayout(routing_id(),
+ default_page_layout));
+ }
+
PrintHostMsg_DidGetPreviewPageCount_Params params;
params.page_count = print_preview_context_.total_page_count();
params.is_modifiable = print_preview_context_.IsModifiable();
+ params.has_page_size_style = PrintingFrameHasPageSizeStyle(
vandebo (ex-Chrome) 2011/11/17 23:05:23 If we ask for the page size and margins in GetPage
kmadhusu 2011/12/01 02:15:42 (repeating our conversation for reference): This i
+ print_preview_context_.frame());
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();
@@ -847,7 +879,8 @@ bool PrintWebViewHelper::PrintPages(const PrintMsg_PrintPages_Params& params,
node));
prepare = prep_frame_view.get();
}
- UpdatePrintableSizeInPrintParameters(frame, node, prepare, &print_params);
+ UpdatePrintableSizeInPrintParameters(frame, node, prepare, &print_params,
+ default_margins_requested_);
int page_count = prepare->GetExpectedPageCount();
if (!page_count)
@@ -887,7 +920,8 @@ void PrintWebViewHelper::GetPageSizeAndMarginsInPoints(
WebFrame* frame,
int page_index,
const PrintMsg_Print_Params& default_params,
- PageSizeMargins* page_layout_in_points) {
+ PageSizeMargins* page_layout_in_points,
+ bool default_margins_requested) {
int dpi = GetDPI(&default_params);
WebSize page_size_in_pixels(
@@ -916,7 +950,8 @@ void PrintWebViewHelper::GetPageSizeAndMarginsInPoints(
margin_top_in_pixels,
margin_right_in_pixels,
margin_bottom_in_pixels,
- margin_left_in_pixels);
+ margin_left_in_pixels,
+ default_margins_requested);
vandebo (ex-Chrome) 2011/11/17 23:05:23 It seems like modifying webkit would be a bit much
kmadhusu 2011/12/01 02:15:42 As we discussed, I am not doing to modify |pageSiz
}
page_layout_in_points->content_width =
@@ -933,7 +968,7 @@ void PrintWebViewHelper::GetPageSizeAndMarginsInPoints(
page_layout_in_points->content_height < 1.0) {
CHECK(frame != NULL);
GetPageSizeAndMarginsInPoints(NULL, page_index, default_params,
- page_layout_in_points);
+ page_layout_in_points, true);
vandebo (ex-Chrome) 2011/11/17 23:05:23 Seems like you could/should change default_margins
kmadhusu 2011/12/01 02:15:42 Done.
return;
}
@@ -952,12 +987,14 @@ void PrintWebViewHelper::UpdatePrintableSizeInPrintParameters(
WebFrame* frame,
const WebNode& node,
PrepareFrameAndViewForPrint* prepare,
- PrintMsg_Print_Params* params) {
+ PrintMsg_Print_Params* params,
+ bool default_margins_requested) {
if (PrintingNodeOrPdfFrame(frame, node))
return;
PageSizeMargins page_layout_in_points;
PrintWebViewHelper::GetPageSizeAndMarginsInPoints(frame, 0, *params,
- &page_layout_in_points);
+ &page_layout_in_points,
+ default_margins_requested);
int dpi = GetDPI(params);
params->printable_size = gfx::Size(
static_cast<int>(ConvertUnitDouble(
@@ -1031,7 +1068,8 @@ bool PrintWebViewHelper::InitPrintSettingsAndPrepareFrame(
prepare->reset(new PrepareFrameAndViewForPrint(print_pages_params_->params,
frame, node));
UpdatePrintableSizeInPrintParameters(frame, node, prepare->get(),
- &print_pages_params_->params);
+ &print_pages_params_->params,
+ default_margins_requested_);
Send(new PrintHostMsg_DidGetDocumentCookie(
routing_id(), print_pages_params_->params.document_cookie));
return true;
@@ -1085,6 +1123,7 @@ bool PrintWebViewHelper::UpdatePrintSettings(
margin_type);
job_settings = &modified_job_settings;
}
+ UpdateDefaultMarginsRequested(*job_settings);
vandebo (ex-Chrome) 2011/11/17 23:05:23 If you move default_margins_requested_ to PrintPre
kmadhusu 2011/12/01 02:15:42 Having the member variable in PrintWebViewHelper,
// Send the cookie so that UpdatePrintSettings can reuse PrinterQuery when
// possible.
@@ -1132,16 +1171,6 @@ bool PrintWebViewHelper::UpdatePrintSettings(
return false;
}
- // Margins: Send default page layout to browser process.
- PageSizeMargins default_page_layout;
- GetPageSizeAndMarginsInPoints(NULL, -1, settings.params,
- &default_page_layout);
- if (!old_print_pages_params_.get() ||
- !PageLayoutIsEqual(*old_print_pages_params_, settings)) {
- Send(new PrintHostMsg_DidGetDefaultPageLayout(routing_id(),
- default_page_layout));
- }
-
// Header/Footer: Set |header_footer_info_|.
if (settings.params.display_header_footer) {
header_footer_info_.reset(new DictionaryValue());
@@ -1379,7 +1408,8 @@ void PrintWebViewHelper::PrintPreviewContext::OnPrintPreview() {
bool PrintWebViewHelper::PrintPreviewContext::CreatePreviewDocument(
PrintMsg_Print_Params* print_params,
- const std::vector<int>& pages) {
+ const std::vector<int>& pages,
+ bool default_margins_requested) {
DCHECK_EQ(INITIALIZED, state_);
state_ = RENDERING;
@@ -1394,7 +1424,8 @@ bool PrintWebViewHelper::PrintPreviewContext::CreatePreviewDocument(
prep_frame_view_.reset(new PrepareFrameAndViewForPrint(*print_params, frame(),
node()));
UpdatePrintableSizeInPrintParameters(frame_, node_,
- prep_frame_view_.get(), print_params);
+ prep_frame_view_.get(), print_params,
+ default_margins_requested);
print_params_.reset(new PrintMsg_Print_Params(*print_params));

Powered by Google App Engine
This is Rietveld 408576698