diff options
Diffstat (limited to 'chrome/renderer/print_web_view_helper.cc')
-rw-r--r-- | chrome/renderer/print_web_view_helper.cc | 23 |
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(); |