Skip to content

Commit

Permalink
Make JavaScript dialog suppression even more aggressive.
Browse files Browse the repository at this point in the history
Allow the "prevent additional dialogs" checkbox button to appear on beforeunload dialogs.

BUG=473903
TEST=Repeated beforeunload dialogs show a suppression checkbox

Review URL: https://codereview.chromium.org/1092123002

Cr-Commit-Position: refs/heads/master@{#325726}
  • Loading branch information
avi authored and Commit bot committed Apr 17, 2015
1 parent 16e69da commit 86578a8
Showing 1 changed file with 17 additions and 18 deletions.
35 changes: 17 additions & 18 deletions components/app_modal/javascript_dialog_manager.cc
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,21 @@ class DefaultExtensionsClient : public JavaScriptDialogExtensionsClient {
DISALLOW_COPY_AND_ASSIGN(DefaultExtensionsClient);
};

bool ShouldDisplaySuppressCheckbox(
ChromeJavaScriptDialogExtraData* extra_data) {
base::TimeDelta time_since_last_message = base::TimeTicks::Now() -
extra_data->last_javascript_message_dismissal_;

// If a WebContents is impolite and displays a second JavaScript
// alert within kJavaScriptMessageExpectedDelay of a previous
// JavaScript alert being dismissed, show a checkbox offering to
// suppress future alerts from this WebContents.
const int kJavaScriptMessageExpectedDelay = 1000;

return time_since_last_message <
base::TimeDelta::FromMilliseconds(kJavaScriptMessageExpectedDelay);
}

} // namespace

////////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -87,22 +102,6 @@ void JavaScriptDialogManager::RunJavaScriptDialog(
return;
}

base::TimeDelta time_since_last_message = base::TimeTicks::Now() -
extra_data->last_javascript_message_dismissal_;
bool display_suppress_checkbox = false;
// If a WebContents is impolite and displays a second JavaScript
// alert within kJavaScriptMessageExpectedDelay of a previous
// JavaScript alert being dismissed, show a checkbox offering to
// suppress future alerts from this WebContents.
const int kJavaScriptMessageExpectedDelay = 1000;

if (time_since_last_message <
base::TimeDelta::FromMilliseconds(kJavaScriptMessageExpectedDelay)) {
display_suppress_checkbox = true;
} else {
display_suppress_checkbox = false;
}

bool is_alert = message_type == content::JAVASCRIPT_MESSAGE_TYPE_ALERT;
base::string16 dialog_title =
GetTitle(web_contents, origin_url, accept_lang, is_alert);
Expand All @@ -116,7 +115,7 @@ void JavaScriptDialogManager::RunJavaScriptDialog(
message_type,
message_text,
default_prompt_text,
display_suppress_checkbox,
ShouldDisplaySuppressCheckbox(extra_data),
false, // is_before_unload_dialog
false, // is_reload
base::Bind(&JavaScriptDialogManager::OnDialogClosed,
Expand Down Expand Up @@ -155,7 +154,7 @@ void JavaScriptDialogManager::RunBeforeUnloadDialog(
content::JAVASCRIPT_MESSAGE_TYPE_CONFIRM,
full_message,
base::string16(), // default_prompt_text
false, // display_suppress_checkbox
ShouldDisplaySuppressCheckbox(extra_data),
true, // is_before_unload_dialog
is_reload,
base::Bind(&JavaScriptDialogManager::OnDialogClosed,
Expand Down

0 comments on commit 86578a8

Please sign in to comment.