summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/print_web_view_helper.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/renderer/print_web_view_helper.cc')
-rw-r--r--chrome/renderer/print_web_view_helper.cc23
1 files changed, 19 insertions, 4 deletions
diff --git a/chrome/renderer/print_web_view_helper.cc b/chrome/renderer/print_web_view_helper.cc
index ccf7789..5ba2c80 100644
--- a/chrome/renderer/print_web_view_helper.cc
+++ b/chrome/renderer/print_web_view_helper.cc
@@ -527,6 +527,11 @@ bool IsPrintPreviewEnabled() {
switches::kRendererPrintPreview);
}
+bool IsPrintThrottlingDisabled() {
+ return CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kDisableScriptedPrintThrottling);
+}
+
} // namespace
// static - Not anonymous so that platform implementations can use it.
@@ -717,6 +722,7 @@ PrintWebViewHelper::PrintWebViewHelper(content::RenderView* render_view)
content::RenderViewObserverTracker<PrintWebViewHelper>(render_view),
print_web_view_(NULL),
is_preview_enabled_(IsPrintPreviewEnabled()),
+ is_scripted_print_throttling_disabled_(IsPrintThrottlingDisabled()),
is_print_ready_metafile_sent_(false),
ignore_css_margins_(false),
user_cancelled_scripted_print_count_(0),
@@ -728,14 +734,23 @@ PrintWebViewHelper::PrintWebViewHelper(content::RenderView* render_view)
PrintWebViewHelper::~PrintWebViewHelper() {}
bool PrintWebViewHelper::IsScriptInitiatedPrintAllowed(
- WebKit::WebFrame* frame) {
+ WebKit::WebFrame* frame, bool user_initiated) {
if (is_scripted_printing_blocked_)
return false;
- return !IsScriptInitiatedPrintTooFrequent(frame);
+ // If preview is enabled, then the print dialog is tab modal, and the user
+ // can always close the tab on a mis-behaving page (the system print dialog
+ // is app modal). If the print was initiated through user action, don't
+ // throttle. Or, if the command line flag to skip throttling has been set.
+ if (!is_scripted_print_throttling_disabled_ &&
+ !is_preview_enabled_ &&
+ !user_initiated)
+ return !IsScriptInitiatedPrintTooFrequent(frame);
+ return true;
}
// Prints |frame| which called window.print().
-void PrintWebViewHelper::PrintPage(WebKit::WebFrame* frame) {
+void PrintWebViewHelper::PrintPage(WebKit::WebFrame* frame,
+ bool user_initiated) {
DCHECK(frame);
// Allow Prerendering to cancel this print request if necessary.
@@ -744,7 +759,7 @@ void PrintWebViewHelper::PrintPage(WebKit::WebFrame* frame) {
return;
}
- if (!IsScriptInitiatedPrintAllowed(frame))
+ if (!IsScriptInitiatedPrintAllowed(frame, user_initiated))
return;
IncrementScriptedPrintCount();