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

Unified Diff: chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.cc

Issue 2535043002: Add UMA metrics to measure the dismissal cause of dialogs. (Closed)
Patch Set: Created 4 years, 1 month 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
Index: chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.cc
diff --git a/chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.cc b/chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.cc
index 6f2c3cdc7320017ebd353ca973b3f0ba1c11ff87..ed6e174edf629b05a1f6477324b69c1a69e8fee0 100644
--- a/chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.cc
+++ b/chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.cc
@@ -56,14 +56,27 @@ bool IsWebContentsForemost(content::WebContents* web_contents) {
// JavaScriptDialogTabHelper::OnDialogClosed(), which, after doing the callback,
// again calls ClearDialogInfo() to remove observers.
+enum class JavaScriptDialogTabHelper::DismissalCause {
Ilya Sherman 2016/11/29 03:10:35 Please document that this enum is used to back an
Avi (use Gerrit) 2016/11/29 16:10:59 Done.
+ TAB_HELPER_DESTROYED = 0,
+ SUBSEQUENT_DIALOG_SHOWN = 1,
+ HANDLE_DIALOG_CALLED = 2,
+ CANCEL_DIALOGS_CALLED = 3,
+ TAB_HIDDEN = 4,
+ BROWSER_SWITCHED = 5,
+ DIALOG_BUTTON_CLICKED = 6,
+ MAX,
+};
+
JavaScriptDialogTabHelper::JavaScriptDialogTabHelper(
content::WebContents* web_contents)
: content::WebContentsObserver(web_contents) {
}
JavaScriptDialogTabHelper::~JavaScriptDialogTabHelper() {
- if (dialog_)
- CloseDialog(true /*suppress_callback*/, false, base::string16());
+ if (dialog_) {
+ CloseDialog(true /*suppress_callback*/, false, base::string16(),
+ DismissalCause::TAB_HELPER_DESTROYED);
+ }
}
void JavaScriptDialogTabHelper::SetDialogShownCallbackForTesting(
@@ -131,12 +144,14 @@ void JavaScriptDialogTabHelper::RunJavaScriptDialog(
if (dialog_) {
// There's already a dialog up; clear it out.
- CloseDialog(false, false, base::string16());
+ CloseDialog(false, false, base::string16(),
+ DismissalCause::SUBSEQUENT_DIALOG_SHOWN);
}
base::string16 title =
AppModalDialogManager()->GetTitle(alerting_web_contents, origin_url);
dialog_callback_ = callback;
+ message_type_ = message_type;
dialog_ = JavaScriptDialog::Create(
parent_web_contents, alerting_web_contents, title, message_type,
message_text, default_prompt_text,
@@ -213,7 +228,8 @@ bool JavaScriptDialogTabHelper::HandleJavaScriptDialog(
const base::string16* prompt_override) {
if (dialog_) {
CloseDialog(false /*suppress_callback*/, accept,
- prompt_override ? *prompt_override : base::string16());
+ prompt_override ? *prompt_override : base::string16(),
+ DismissalCause::HANDLE_DIALOG_CALLED);
return true;
}
@@ -227,7 +243,8 @@ void JavaScriptDialogTabHelper::CancelDialogs(
bool suppress_callbacks,
bool reset_state) {
if (dialog_)
- CloseDialog(suppress_callbacks, false, base::string16());
+ CloseDialog(suppress_callbacks, false, base::string16(),
+ DismissalCause::CANCEL_DIALOGS_CALLED);
// Cancel any app-modal dialogs being run by the app-modal dialog system.
return AppModalDialogManager()->CancelDialogs(
@@ -235,19 +252,44 @@ void JavaScriptDialogTabHelper::CancelDialogs(
}
void JavaScriptDialogTabHelper::WasHidden() {
- if (dialog_)
- CloseDialog(false, false, base::string16());
+ if (dialog_) {
+ CloseDialog(false, false, base::string16(), DismissalCause::TAB_HIDDEN);
+ }
}
void JavaScriptDialogTabHelper::OnBrowserSetLastActive(Browser* browser) {
- if (dialog_ && !IsWebContentsForemost(web_contents()))
- CloseDialog(false, false, base::string16());
+ if (dialog_ && !IsWebContentsForemost(web_contents())) {
+ CloseDialog(false, false, base::string16(),
+ DismissalCause::BROWSER_SWITCHED);
+ }
+}
+
+void JavaScriptDialogTabHelper::LogDialogDismissalCause(
+ JavaScriptDialogTabHelper::DismissalCause cause) {
+ switch (message_type_) {
+ case content::JAVASCRIPT_MESSAGE_TYPE_ALERT:
+ UMA_HISTOGRAM_ENUMERATION("JSDialogs.DismissalCause.Alert",
+ static_cast<int>(cause),
+ static_cast<int>(DismissalCause::MAX));
+ break;
+ case content::JAVASCRIPT_MESSAGE_TYPE_CONFIRM:
+ UMA_HISTOGRAM_ENUMERATION("JSDialogs.DismissalCause.Confirm",
+ static_cast<int>(cause),
+ static_cast<int>(DismissalCause::MAX));
+ break;
+ case content::JAVASCRIPT_MESSAGE_TYPE_PROMPT:
+ UMA_HISTOGRAM_ENUMERATION("JSDialogs.DismissalCause.Prompt",
+ static_cast<int>(cause),
+ static_cast<int>(DismissalCause::MAX));
+ break;
+ }
}
void JavaScriptDialogTabHelper::OnDialogClosed(
DialogClosedCallback callback,
bool success,
const base::string16& user_input) {
+ LogDialogDismissalCause(DismissalCause::DIALOG_BUTTON_CLICKED);
callback.Run(success, user_input);
ClearDialogInfo();
@@ -255,8 +297,10 @@ void JavaScriptDialogTabHelper::OnDialogClosed(
void JavaScriptDialogTabHelper::CloseDialog(bool suppress_callback,
bool success,
- const base::string16& user_input) {
+ const base::string16& user_input,
+ DismissalCause cause) {
DCHECK(dialog_);
+ LogDialogDismissalCause(cause);
dialog_->CloseDialogWithoutCallback();
if (!suppress_callback)

Powered by Google App Engine
This is Rietveld 408576698