Commit f4575bd1 authored by afakhry's avatar afakhry Committed by Commit bot

Add UMA histogram to track the various sources that request the feedback app

Basically, it is desired to see how many feedbacks are filed from the sad
tab page relative to other sources.

BUG=715682

Review-Url: https://codereview.chromium.org/2844193002
Cr-Commit-Position: refs/heads/master@{#467850}
parent e47fb498
...@@ -1004,7 +1004,7 @@ void ArcSessionManager::OnRetryClicked() { ...@@ -1004,7 +1004,7 @@ void ArcSessionManager::OnRetryClicked() {
void ArcSessionManager::OnSendFeedbackClicked() { void ArcSessionManager::OnSendFeedbackClicked() {
DCHECK(support_host_); DCHECK(support_host_);
chrome::OpenFeedbackDialog(nullptr); chrome::OpenFeedbackDialog(nullptr, chrome::kFeedbackSourceArcApp);
} }
void ArcSessionManager::SetArcSessionRunnerForTesting( void ArcSessionManager::SetArcSessionRunnerForTesting(
......
...@@ -4,10 +4,12 @@ ...@@ -4,10 +4,12 @@
#include <string> #include <string>
#include "base/metrics/histogram_macros.h"
#include "chrome/browser/extensions/api/feedback_private/feedback_private_api.h" #include "chrome/browser/extensions/api/feedback_private/feedback_private_api.h"
#include "chrome/browser/feedback/feedback_dialog_utils.h" #include "chrome/browser/feedback/feedback_dialog_utils.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/chrome_pages.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/ui/webui/md_feedback/md_feedback_dialog_controller.h" #include "chrome/browser/ui/webui/md_feedback/md_feedback_dialog_controller.h"
#include "chrome/common/chrome_switches.h" #include "chrome/common/chrome_switches.h"
...@@ -15,6 +17,7 @@ ...@@ -15,6 +17,7 @@
namespace chrome { namespace chrome {
void ShowFeedbackPage(Browser* browser, void ShowFeedbackPage(Browser* browser,
FeedbackSource source,
const std::string& description_template, const std::string& description_template,
const std::string& category_tag) { const std::string& category_tag) {
GURL page_url; GURL page_url;
...@@ -29,6 +32,10 @@ void ShowFeedbackPage(Browser* browser, ...@@ -29,6 +32,10 @@ void ShowFeedbackPage(Browser* browser,
return; return;
} }
// Record an UMA histogram to know the most frequent feedback request source.
UMA_HISTOGRAM_ENUMERATION("Feedback.RequestSource", source,
kFeedbackSourceCount);
if (::switches::MdFeedbackEnabled()) { if (::switches::MdFeedbackEnabled()) {
MdFeedbackDialogController::GetInstance()->Show(profile); MdFeedbackDialogController::GetInstance()->Show(profile);
return; return;
......
...@@ -271,7 +271,8 @@ void SupervisedUserInterstitial::CommandReceived(const std::string& command) { ...@@ -271,7 +271,8 @@ void SupervisedUserInterstitial::CommandReceived(const std::string& command) {
ReportChildAccountFeedback(web_contents_, message, url_); ReportChildAccountFeedback(web_contents_, message, url_);
#else #else
chrome::ShowFeedbackPage(chrome::FindBrowserWithWebContents(web_contents_), chrome::ShowFeedbackPage(chrome::FindBrowserWithWebContents(web_contents_),
message, std::string()); chrome::kFeedbackSourceSupervisedUserInterstitial,
message, std::string() /* category_tag */);
#endif #endif
return; return;
} }
......
...@@ -218,5 +218,5 @@ void ChromeNewWindowClient::ShowTaskManager() { ...@@ -218,5 +218,5 @@ void ChromeNewWindowClient::ShowTaskManager() {
} }
void ChromeNewWindowClient::OpenFeedbackPage() { void ChromeNewWindowClient::OpenFeedbackPage() {
chrome::OpenFeedbackDialog(GetActiveBrowser()); chrome::OpenFeedbackDialog(GetActiveBrowser(), chrome::kFeedbackSourceAsh);
} }
...@@ -559,7 +559,7 @@ void BrowserCommandController::ExecuteCommandWithDisposition( ...@@ -559,7 +559,7 @@ void BrowserCommandController::ExecuteCommandWithDisposition(
#endif #endif
#if defined(GOOGLE_CHROME_BUILD) #if defined(GOOGLE_CHROME_BUILD)
case IDC_FEEDBACK: case IDC_FEEDBACK:
OpenFeedbackDialog(browser_); OpenFeedbackDialog(browser_, kFeedbackSourceBrowserCommand);
break; break;
#endif #endif
case IDC_SHOW_BOOKMARK_BAR: case IDC_SHOW_BOOKMARK_BAR:
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
#include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/bookmarks/bookmark_model_factory.h"
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/browsing_data/browsing_data_helper.h" #include "chrome/browser/browsing_data/browsing_data_helper.h"
#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h"
#include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/devtools/devtools_window.h" #include "chrome/browser/devtools/devtools_window.h"
...@@ -1103,9 +1102,11 @@ void OpenTaskManager(Browser* browser) { ...@@ -1103,9 +1102,11 @@ void OpenTaskManager(Browser* browser) {
#endif #endif
} }
void OpenFeedbackDialog(Browser* browser) { void OpenFeedbackDialog(Browser* browser, FeedbackSource source) {
base::RecordAction(UserMetricsAction("Feedback")); base::RecordAction(UserMetricsAction("Feedback"));
chrome::ShowFeedbackPage(browser, std::string(), std::string()); chrome::ShowFeedbackPage(browser, source,
std::string() /* description_template */,
std::string() /* category_tag */);
} }
void ToggleBookmarkBar(Browser* browser) { void ToggleBookmarkBar(Browser* browser) {
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "build/build_config.h" #include "build/build_config.h"
#include "chrome/browser/devtools/devtools_toggle_action.h" #include "chrome/browser/devtools/devtools_toggle_action.h"
#include "chrome/browser/ui/chrome_pages.h"
#include "chrome/browser/ui/tabs/tab_strip_model_delegate.h" #include "chrome/browser/ui/tabs/tab_strip_model_delegate.h"
#include "content/public/common/page_zoom.h" #include "content/public/common/page_zoom.h"
#include "printing/features/features.h" #include "printing/features/features.h"
...@@ -130,7 +131,7 @@ void FocusPreviousPane(Browser* browser); ...@@ -130,7 +131,7 @@ void FocusPreviousPane(Browser* browser);
void ToggleDevToolsWindow(Browser* browser, DevToolsToggleAction action); void ToggleDevToolsWindow(Browser* browser, DevToolsToggleAction action);
bool CanOpenTaskManager(); bool CanOpenTaskManager();
void OpenTaskManager(Browser* browser); void OpenTaskManager(Browser* browser);
void OpenFeedbackDialog(Browser* browser); void OpenFeedbackDialog(Browser* browser, FeedbackSource source);
void ToggleBookmarkBar(Browser* browser); void ToggleBookmarkBar(Browser* browser);
void ShowAppMenu(Browser* browser); void ShowAppMenu(Browser* browser);
void ShowAvatarMenu(Browser* browser); void ShowAvatarMenu(Browser* browser);
......
...@@ -34,6 +34,24 @@ enum HelpSource { ...@@ -34,6 +34,24 @@ enum HelpSource {
HELP_SOURCE_WEBUI, HELP_SOURCE_WEBUI,
}; };
// Sources of feedback requests.
//
// WARNING: The below enum MUST never be renamed, modified or reordered, as
// they're written to logs. You can only insert a new element immediately
// before the last.
enum FeedbackSource {
kFeedbackSourceArcApp = 0,
kFeedbackSourceAsh,
kFeedbackSourceBrowserCommand,
kFeedbackSourceMdSettingsAboutPage,
kFeedbackSourceOldSettingsAboutPage,
kFeedbackSourceProfileErrorDialog,
kFeedbackSourceSadTabPage,
kFeedbackSourceSupervisedUserInterstitial,
// Must be last.
kFeedbackSourceCount,
};
void ShowBookmarkManager(Browser* browser); void ShowBookmarkManager(Browser* browser);
void ShowBookmarkManagerForNode(Browser* browser, int64_t node_id); void ShowBookmarkManagerForNode(Browser* browser, int64_t node_id);
...@@ -46,6 +64,7 @@ void ShowConflicts(Browser* browser); ...@@ -46,6 +64,7 @@ void ShowConflicts(Browser* browser);
// ShowFeedbackPage() uses |browser| to determine the URL of the current tab. // ShowFeedbackPage() uses |browser| to determine the URL of the current tab.
// |browser| should be NULL if there are no currently open browser windows. // |browser| should be NULL if there are no currently open browser windows.
void ShowFeedbackPage(Browser* browser, void ShowFeedbackPage(Browser* browser,
FeedbackSource source,
const std::string& description_template, const std::string& description_template,
const std::string& category_tag); const std::string& category_tag);
......
...@@ -48,7 +48,8 @@ void ShowProfileErrorDialog(ProfileErrorType type, ...@@ -48,7 +48,8 @@ void ShowProfileErrorDialog(ProfileErrorType type,
l10n_util::GetStringUTF8(IDS_PROFILE_ERROR_FEEDBACK_DESCRIPTION); l10n_util::GetStringUTF8(IDS_PROFILE_ERROR_FEEDBACK_DESCRIPTION);
feedback_description += "\n" + diagnostics; feedback_description += "\n" + diagnostics;
chrome::ShowFeedbackPage(nullptr, feedback_description, chrome::ShowFeedbackPage(nullptr, chrome::kFeedbackSourceProfileErrorDialog,
feedback_description,
kProfileErrorFeedbackCategory); kProfileErrorFeedbackCategory);
} }
#endif #endif
......
...@@ -53,7 +53,7 @@ void RecordEvent(bool feedback, SadTabEvent event) { ...@@ -53,7 +53,7 @@ void RecordEvent(bool feedback, SadTabEvent event) {
} }
} }
const char kCategoryTagCrash[] = "Crash"; constexpr char kCategoryTagCrash[] = "Crash";
bool ShouldShowFeedbackButton() { bool ShouldShowFeedbackButton() {
#if defined(GOOGLE_CHROME_BUILD) #if defined(GOOGLE_CHROME_BUILD)
...@@ -158,9 +158,10 @@ void SadTab::PerformAction(SadTab::Action action) { ...@@ -158,9 +158,10 @@ void SadTab::PerformAction(SadTab::Action action) {
case Action::BUTTON: case Action::BUTTON:
RecordEvent(show_feedback_button_, SadTabEvent::BUTTON_CLICKED); RecordEvent(show_feedback_button_, SadTabEvent::BUTTON_CLICKED);
if (show_feedback_button_) { if (show_feedback_button_) {
chrome::ShowFeedbackPage( ShowFeedbackPage(
chrome::FindBrowserWithWebContents(web_contents_), FindBrowserWithWebContents(web_contents_),
l10n_util::GetStringUTF8(kind_ == chrome::SAD_TAB_KIND_CRASHED kFeedbackSourceSadTabPage,
l10n_util::GetStringUTF8(kind_ == SAD_TAB_KIND_CRASHED
? IDS_CRASHED_TAB_FEEDBACK_MESSAGE ? IDS_CRASHED_TAB_FEEDBACK_MESSAGE
: IDS_KILLED_TAB_FEEDBACK_MESSAGE), : IDS_KILLED_TAB_FEEDBACK_MESSAGE),
std::string(kCategoryTagCrash)); std::string(kCategoryTagCrash));
......
...@@ -538,7 +538,8 @@ void HelpHandler::OpenFeedbackDialog(const base::ListValue* args) { ...@@ -538,7 +538,8 @@ void HelpHandler::OpenFeedbackDialog(const base::ListValue* args) {
DCHECK(args->empty()); DCHECK(args->empty());
Browser* browser = chrome::FindBrowserWithWebContents( Browser* browser = chrome::FindBrowserWithWebContents(
web_ui()->GetWebContents()); web_ui()->GetWebContents());
chrome::OpenFeedbackDialog(browser); chrome::OpenFeedbackDialog(browser,
chrome::kFeedbackSourceOldSettingsAboutPage);
} }
void HelpHandler::OpenHelpPage(const base::ListValue* args) { void HelpHandler::OpenHelpPage(const base::ListValue* args) {
......
...@@ -440,7 +440,8 @@ void AboutHandler::HandleOpenFeedbackDialog(const base::ListValue* args) { ...@@ -440,7 +440,8 @@ void AboutHandler::HandleOpenFeedbackDialog(const base::ListValue* args) {
DCHECK(args->empty()); DCHECK(args->empty());
Browser* browser = Browser* browser =
chrome::FindBrowserWithWebContents(web_ui()->GetWebContents()); chrome::FindBrowserWithWebContents(web_ui()->GetWebContents());
chrome::OpenFeedbackDialog(browser); chrome::OpenFeedbackDialog(browser,
chrome::kFeedbackSourceMdSettingsAboutPage);
} }
void AboutHandler::HandleOpenHelpPage(const base::ListValue* args) { void AboutHandler::HandleOpenHelpPage(const base::ListValue* args) {
......
...@@ -20821,6 +20821,11 @@ http://cs/file:chrome/histograms.xml - but prefer this file for new entries. ...@@ -20821,6 +20821,11 @@ http://cs/file:chrome/histograms.xml - but prefer this file for new entries.
</summary> </summary>
</histogram> </histogram>
<histogram name="Feedback.RequestSource" enum="FeedbackSource">
<owner>afakhry@chromium.org</owner>
<summary>Records the source that requested showing the feedback app.</summary>
</histogram>
<histogram name="FileBrowser.CloudImport.UserAction" <histogram name="FileBrowser.CloudImport.UserAction"
enum="CloudImportUserAction"> enum="CloudImportUserAction">
<owner>smckay@google.com</owner> <owner>smckay@google.com</owner>
...@@ -97389,6 +97394,17 @@ http://cs/file:chrome/histograms.xml - but prefer this file for new entries. ...@@ -97389,6 +97394,17 @@ http://cs/file:chrome/histograms.xml - but prefer this file for new entries.
<int value="1970" label="GATTServerDisconnectedEvent"/> <int value="1970" label="GATTServerDisconnectedEvent"/>
</enum> </enum>
<enum name="FeedbackSource" type="int">
<int value="0" label="Arc App"/>
<int value="1" label="Ash"/>
<int value="2" label="Browser Command"/>
<int value="3" label="MD Settings About Page"/>
<int value="4" label="Old Settings About Page"/>
<int value="5" label="Profile Error Dialog"/>
<int value="6" label="SadTab Page"/>
<int value="7" label="Supervised User Interstitial"/>
</enum>
<enum name="FetchRequestMode" type="int"> <enum name="FetchRequestMode" type="int">
<int value="0" label="SameOrigin"/> <int value="0" label="SameOrigin"/>
<int value="1" label="NoCORS"/> <int value="1" label="NoCORS"/>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment