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

Unified Diff: chrome/renderer/print_web_view_helper.cc

Issue 10083060: [Print Preview]: Added code to support pdf fit to page functionality. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Changed UpdateFitToPageInfo function signature and updated comments Created 8 years, 8 months 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
« no previous file with comments | « chrome/renderer/print_web_view_helper.h ('k') | chrome/test/data/webui/print_preview.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 b31cd851cfe5213c2219515b3dde4681cd01e5f7..508980ad74b9d8886a9c0b808b427adce02d2b22 100644
--- a/chrome/renderer/print_web_view_helper.cc
+++ b/chrome/renderer/print_web_view_helper.cc
@@ -341,6 +341,15 @@ printing::MarginType GetMarginsForPdf(WebFrame* frame, const WebNode& node) {
return printing::PRINTABLE_AREA_MARGINS;
}
+bool FitToPageEnabled(const DictionaryValue& job_settings) {
+ bool fit_to_paper_size = false;
+ if (!job_settings.GetBoolean(printing::kSettingFitToPageEnabled,
+ &fit_to_paper_size)) {
+ NOTREACHED();
+ }
+ return fit_to_paper_size;
+}
+
// Get the (x, y) coordinate from where printing of the current text should
// start depending on the horizontal alignment (LEFT, RIGHT, CENTER) and
// vertical alignment (TOP, BOTTOM).
@@ -833,6 +842,53 @@ bool PrintWebViewHelper::IsPrintToPdfRequested(
return print_to_pdf;
}
+bool PrintWebViewHelper::IsFitToPaperSizeRequested(
+ const DictionaryValue& job_settings, const PrintMsg_Print_Params& params) {
+ if (print_for_preview_ || params.print_to_pdf) {
Lei Zhang 2012/04/27 04:32:47 Do you need to check |print_for_preview_|? Right n
kmadhusu 2012/05/01 16:43:15 Changed the default value of |fit_to_paper_size| t
+ // Do not fit to paper size when the user is printing the preview data or
+ // saving the print contents as pdf.
+ return false;
+ }
+
+ bool source_is_html = IsSourceHTML(print_preview_context_.frame(),
+ print_preview_context_.node(),
+ job_settings);
+
+ if (!source_is_html) {
+ // Get the print scaling option for the initiator renderer pdf.
+ bool print_scaling_disabled_for_plugin =
+ print_preview_context_.frame()->isPrintScalingDisabledForPlugin(
+ print_preview_context_.node());
+
+ // If this is the first preview request, UI doesn't know about the print
+ // scaling option of the plugin. Therefore, check the print scaling option
+ // and update the print params accordingly.
+ //
+ // If this is not the first preview request, update print params based on
+ // preview job settings.
+ if ((params.is_first_request && print_scaling_disabled_for_plugin) ||
+ !FitToPageEnabled(job_settings)) {
Lei Zhang 2012/04/27 04:32:47 You can check the result of FitToPageEnabled() fir
kmadhusu 2012/05/01 16:43:15 Done.
+ return false;
+ }
+ }
+ return true;
+}
+
+bool PrintWebViewHelper::IsSourceHTML(const WebFrame* frame,
+ const WebNode& node,
+ const DictionaryValue& job_settings) {
+ bool source_is_html = true;
+ if (print_for_preview_) {
+ if (!job_settings.GetBoolean(printing::kSettingPreviewModifiable,
+ &source_is_html)) {
+ NOTREACHED();
+ }
+ } else {
+ source_is_html = !PrintingNodeOrPdfFrame(frame, node);
+ }
+ return source_is_html;
+}
+
void PrintWebViewHelper::OnPrintPreview(const DictionaryValue& settings) {
DCHECK(is_preview_enabled_);
print_preview_context_.OnPrintPreview();
@@ -867,6 +923,16 @@ void PrintWebViewHelper::OnPrintPreview(const DictionaryValue& settings) {
preview_params));
return;
}
+
+ // If we are previewing a pdf and the print scaling is disabled, send a
+ // message to browser.
+ if (!print_preview_context_.IsModifiable() &&
+ print_pages_params_->params.is_first_request &&
+ print_preview_context_.frame()->isPrintScalingDisabledForPlugin(
+ print_preview_context_.node())) {
+ Send(new PrintHostMsg_PrintPreviewScalingDisabled(routing_id()));
+ }
+
// Always clear |old_print_pages_params_| before rendering the pages.
old_print_pages_params_.reset();
is_print_ready_metafile_sent_ = false;
@@ -1295,38 +1361,13 @@ bool PrintWebViewHelper::UpdatePrintSettings(
return false;
}
- bool source_is_html = true;
- if (print_for_preview_) {
- if (!job_settings->GetBoolean(printing::kSettingPreviewModifiable,
- &source_is_html)) {
- NOTREACHED();
- }
- } else {
- source_is_html = !PrintingNodeOrPdfFrame(frame, node);
- }
-
+ bool source_is_html = IsSourceHTML(frame, node, *job_settings);
Lei Zhang 2012/04/27 04:32:47 It occurred to me that you can pass this to IsFitT
kmadhusu 2012/05/01 16:43:15 Done.
if (print_for_preview_ || !source_is_html) {
modified_job_settings.MergeDictionary(job_settings);
modified_job_settings.SetBoolean(printing::kSettingHeaderFooterEnabled,
false);
- // - On Windows, we don't add a margin until we turn it into an EMF when
- // printing for print preview (We could add it in the plugin).
- // - On Mac with Skia, we don't add a margin until we send it to the printer
- // using the CG PDF class (We could add it in the plugin).
- // - On Mac with CG, we can add a margin when generating the preview.
- // - On Linux, we never add a margin (We Could add it in the plugin).
-#if defined(OS_MACOSX) && !defined(USE_SKIA)
- bool get_margins_from_pdf = !source_is_html && !print_for_preview_;
-#elif defined(OS_WIN) || defined(OS_MACOSX)
- bool get_margins_from_pdf = !source_is_html && print_for_preview_;
-#else
- bool get_margins_from_pdf = false;
-#endif
-
printing::MarginType margin_type = printing::NO_MARGINS;
- if (get_margins_from_pdf)
- margin_type = GetMarginsForPdf(frame, node);
modified_job_settings.SetInteger(printing::kSettingMarginsType,
margin_type);
job_settings = &modified_job_settings;
@@ -1380,10 +1421,8 @@ bool PrintWebViewHelper::UpdatePrintSettings(
settings.params.print_to_pdf = IsPrintToPdfRequested(*job_settings);
UpdateFrameMarginsCssInfo(*job_settings);
-
- // Fit to paper size.
- settings.params.fit_to_paper_size = source_is_html &&
- !IsPrintToPdfRequested(*job_settings);
+ settings.params.fit_to_paper_size =
+ IsFitToPaperSizeRequested(*job_settings, settings.params);
// Header/Footer: Set |header_footer_info_|.
if (settings.params.display_header_footer) {
« no previous file with comments | « chrome/renderer/print_web_view_helper.h ('k') | chrome/test/data/webui/print_preview.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698