summaryrefslogtreecommitdiffstats
path: root/components/app_modal
diff options
context:
space:
mode:
authorCait Phillips <caitkp@chromium.org>2016-02-23 19:05:12 -0500
committerCait Phillips <caitkp@chromium.org>2016-02-24 00:07:19 +0000
commit7c2861286c40e3cdca7ce260a5bba1ee7ecb349d (patch)
tree575a145e3d64c0f6dc1050f7c98e4aaea45beb04 /components/app_modal
parent6f845317f943190dff1bb4cf0db814e1882da834 (diff)
downloadchromium_src-7c2861286c40e3cdca7ce260a5bba1ee7ecb349d.zip
chromium_src-7c2861286c40e3cdca7ce260a5bba1ee7ecb349d.tar.gz
chromium_src-7c2861286c40e3cdca7ce260a5bba1ee7ecb349d.tar.bz2
Include suppressed dialogs in the FineTiming histogram
Review URL: https://codereview.chromium.org/1688183002 Cr-Commit-Position: refs/heads/master@{#374920} (cherry picked from commit 505f421d0a73adae4f74924b3022996c731de40e) BUG=588833 Review URL: https://codereview.chromium.org/1732563002 . Cr-Commit-Position: refs/branch-heads/2623@{#488} Cr-Branched-From: 92d77538a86529ca35f9220bd3cd512cbea1f086-refs/heads/master@{#369907}
Diffstat (limited to 'components/app_modal')
-rw-r--r--components/app_modal/javascript_app_modal_dialog.cc3
-rw-r--r--components/app_modal/javascript_app_modal_dialog.h3
-rw-r--r--components/app_modal/javascript_dialog_manager.cc15
3 files changed, 20 insertions, 1 deletions
diff --git a/components/app_modal/javascript_app_modal_dialog.cc b/components/app_modal/javascript_app_modal_dialog.cc
index d494081..92ee660 100644
--- a/components/app_modal/javascript_app_modal_dialog.cc
+++ b/components/app_modal/javascript_app_modal_dialog.cc
@@ -52,7 +52,8 @@ void EnforceMaxPromptSize(const base::string16& in_string,
ChromeJavaScriptDialogExtraData::ChromeJavaScriptDialogExtraData()
: has_already_shown_a_dialog_(false),
- suppress_javascript_messages_(false) {}
+ suppress_javascript_messages_(false),
+ suppressed_dialog_count_(0) {}
JavaScriptAppModalDialog::JavaScriptAppModalDialog(
content::WebContents* web_contents,
diff --git a/components/app_modal/javascript_app_modal_dialog.h b/components/app_modal/javascript_app_modal_dialog.h
index fca11c2..0fb4d89 100644
--- a/components/app_modal/javascript_app_modal_dialog.h
+++ b/components/app_modal/javascript_app_modal_dialog.h
@@ -25,6 +25,9 @@ class ChromeJavaScriptDialogExtraData {
// True if the user has decided to block future JavaScript dialogs.
bool suppress_javascript_messages_;
+
+ // Number of dialogs from the origin that were suppressed.
+ int suppressed_dialog_count_;
};
// A controller + model class for JavaScript alert, confirm, prompt, and
diff --git a/components/app_modal/javascript_dialog_manager.cc b/components/app_modal/javascript_dialog_manager.cc
index 0fcfb92..3dc5516 100644
--- a/components/app_modal/javascript_dialog_manager.cc
+++ b/components/app_modal/javascript_dialog_manager.cc
@@ -94,6 +94,21 @@ void JavaScriptDialogManager::RunJavaScriptDialog(
&javascript_dialog_extra_data_[web_contents];
if (extra_data->suppress_javascript_messages_) {
+ // If a page tries to open dialogs in a tight loop, the number of
+ // suppressions logged can grow out of control. Arbitrarily cap the number
+ // logged at 100. That many suppressed dialogs is enough to indicate the
+ // page is doing something very hinky.
+ if (extra_data->suppressed_dialog_count_ < 100) {
+ // Log a suppressed dialog as one that opens and then closes immediately.
+ UMA_HISTOGRAM_MEDIUM_TIMES(
+ "JSDialogs.FineTiming.TimeBetweenDialogCreatedAndSameDialogClosed",
+ base::TimeDelta());
+
+ // Only increment the count if it's not already at the limit, to prevent
+ // overflow.
+ extra_data->suppressed_dialog_count_++;
+ }
+
*did_suppress_message = true;
return;
}