Commit 6bda7c88 authored by edwardjung's avatar edwardjung Committed by Commit bot

Add UMA histograms for Google cached copy experiment on network error interstitial

Tracks usage:
+ of promoted 'Google cached copy' link doctor button.
+ on each of the two button label variants.

BUG=474848

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

Cr-Commit-Position: refs/heads/master@{#339714}
parent 87aa5316
......@@ -898,15 +898,18 @@ void LocalizedError::EnableGoogleCachedCopyButtonExperiment(
scoped_ptr<base::DictionaryValue> cache_button(new base::DictionaryValue);
// Google cache copy button label experiment.
if (field_trial_exp_type_ == kCachedCopyButtonExpTypeCopy) {
cache_button->SetString(
"msg",
l10n_util::GetStringUTF16(IDS_ERRORPAGES_BUTTON_SHOW_CACHED_COPY));
cache_button->SetBoolean("defaultLabel", false);
} else {
// Default to "Show cached page" button label.
cache_button->SetString(
"msg",
l10n_util::GetStringUTF16(IDS_ERRORPAGES_BUTTON_SHOW_CACHED_PAGE));
cache_button->SetBoolean("defaultLabel", true);
}
cache_button->SetString("cacheUrl", cache_url);
cache_button->SetInteger("trackingId", cache_tracking_id);
......
......@@ -51,7 +51,8 @@ class LocalizedError {
private:
// Sets up the Google Cached Copy button experiment if part of the
// field trial. This promotes the Google cached copy suggestion from under
// the details section to a blue button.
// the details section to a blue button. Also experiments with the
// button label.
static void EnableGoogleCachedCopyButtonExperiment(
base::ListValue* suggestions,
base::DictionaryValue* error_strings);
......
......@@ -167,6 +167,8 @@ void NetErrorHelper::GenerateLocalizedErrorPage(
scoped_ptr<ErrorPageParams> params,
bool* reload_button_shown,
bool* show_saved_copy_button_shown,
bool* show_cached_copy_button_shown,
bool* show_cached_page_button_shown,
std::string* error_html) const {
error_html->clear();
......@@ -188,6 +190,19 @@ void NetErrorHelper::GenerateLocalizedErrorPage(
*show_saved_copy_button_shown =
error_strings.Get("showSavedCopyButton", NULL);
bool show_cache_copy_button_default_label;
bool showing_cache_copy_experiment =
error_strings.GetBoolean("cacheButton.defaultLabel",
&show_cache_copy_button_default_label);
if (showing_cache_copy_experiment) {
if (show_cache_copy_button_default_label) {
*show_cached_copy_button_shown = false;
*show_cached_page_button_shown = true;
} else {
*show_cached_page_button_shown = false;
*show_cached_copy_button_shown = true;
}
}
// "t" is the id of the template's root node.
*error_html = webui::GetTemplatesHtml(template_html, &error_strings, "t");
}
......
......@@ -89,6 +89,8 @@ class NetErrorHelper
scoped_ptr<error_page::ErrorPageParams> params,
bool* reload_button_shown,
bool* show_saved_copy_button_shown,
bool* show_cached_copy_button_shown,
bool* show_cached_page_button_shown,
std::string* html) const override;
void LoadErrorPageInMainFrame(const std::string& html,
const GURL& failed_url) override;
......
......@@ -52,6 +52,12 @@ bool NetErrorPageController::TrackEasterEgg() {
return ButtonClick(error_page::NetErrorHelperCore::EASTER_EGG);
}
bool NetErrorPageController::TrackCachedCopyButtonClick(bool is_default_label) {
return is_default_label ?
ButtonClick(error_page::NetErrorHelperCore::SHOW_CACHED_PAGE_BUTTON) :
ButtonClick(error_page::NetErrorHelperCore::SHOW_CACHED_COPY_BUTTON);
}
bool NetErrorPageController::TrackClick(const gin::Arguments& args) {
if (!render_frame())
return false;
......@@ -98,7 +104,9 @@ gin::ObjectTemplateBuilder NetErrorPageController::GetObjectTemplateBuilder(
.SetMethod("trackClick",
&NetErrorPageController::TrackClick)
.SetMethod("trackEasterEgg",
&NetErrorPageController::TrackEasterEgg);
&NetErrorPageController::TrackEasterEgg)
.SetMethod("trackCachedCopyButtonClick",
&NetErrorPageController::TrackCachedCopyButtonClick);
}
void NetErrorPageController::OnDestruct() {}
......@@ -43,6 +43,9 @@ class NetErrorPageController
// Track easter egg plays.
bool TrackEasterEgg();
// Track "Show cached copy/page" button clicks.
bool TrackCachedCopyButtonClick(bool is_default_label);
// Track a click when the page has suggestions from the navigation correction
// service.
bool TrackClick(const gin::Arguments& args);
......
......@@ -125,6 +125,10 @@ function setUpCachedButton(buttonStrings) {
reloadButton.onclick = function(e) {
e.preventDefault();
trackClick(trackingId);
if (window.errorPageController) {
errorPageController.trackCachedCopyButtonClick(
buttonStrings.defaultLabel);
}
location = url;
};
reloadButton.style.display = '';
......
......@@ -10,30 +10,36 @@ namespace chrome_common_net {
// Network error page events. Used for UMA statistics.
enum NetworkErrorPageEvent {
NETWORK_ERROR_PAGE_SHOWN, // Error pages shown.
NETWORK_ERROR_PAGE_SHOWN = 0, // Error pages shown.
NETWORK_ERROR_PAGE_RELOAD_BUTTON_SHOWN, // Reload buttons shown.
NETWORK_ERROR_PAGE_RELOAD_BUTTON_CLICKED, // Reload button clicked.
NETWORK_ERROR_PAGE_RELOAD_BUTTON_ERROR, // Reload button clicked
// -> error.
NETWORK_ERROR_PAGE_RELOAD_BUTTON_SHOWN = 1, // Reload buttons shown.
NETWORK_ERROR_PAGE_RELOAD_BUTTON_CLICKED = 2, // Reload button clicked.
NETWORK_ERROR_PAGE_RELOAD_BUTTON_ERROR = 3, // Reload button clicked
// -> error.
// Same for the "Show saved copy" button.
NETWORK_ERROR_PAGE_SHOW_SAVED_COPY_BUTTON_SHOWN,
NETWORK_ERROR_PAGE_SHOW_SAVED_COPY_BUTTON_CLICKED,
NETWORK_ERROR_PAGE_SHOW_SAVED_COPY_BUTTON_ERROR,
NETWORK_ERROR_PAGE_SHOW_SAVED_COPY_BUTTON_SHOWN = 4,
NETWORK_ERROR_PAGE_SHOW_SAVED_COPY_BUTTON_CLICKED = 5,
NETWORK_ERROR_PAGE_SHOW_SAVED_COPY_BUTTON_ERROR = 6,
NETWORK_ERROR_PAGE_MORE_BUTTON_CLICKED, // More button clicked.
NETWORK_ERROR_PAGE_MORE_BUTTON_CLICKED = 7, // More button clicked.
NETWORK_ERROR_PAGE_BROWSER_INITIATED_RELOAD, // Reload from browser.
NETWORK_ERROR_PAGE_BROWSER_INITIATED_RELOAD = 8, // Reload from browser.
// Keep track of which button the user chooses when both are shown.
NETWORK_ERROR_PAGE_BOTH_BUTTONS_SHOWN,
NETWORK_ERROR_PAGE_BOTH_BUTTONS_RELOAD_CLICKED,
NETWORK_ERROR_PAGE_BOTH_BUTTONS_SHOWN_SAVED_COPY_CLICKED,
NETWORK_ERROR_PAGE_BOTH_BUTTONS_SHOWN = 9,
NETWORK_ERROR_PAGE_BOTH_BUTTONS_RELOAD_CLICKED = 10,
NETWORK_ERROR_PAGE_BOTH_BUTTONS_SHOWN_SAVED_COPY_CLICKED = 11,
NETWORK_ERROR_EASTER_EGG_ACTIVATED, // Easter egg activated.
NETWORK_ERROR_EASTER_EGG_ACTIVATED = 12, // Easter egg activated.
NETWORK_ERROR_PAGE_EVENT_MAX,
// For "Google cached copy" label experiment button.
NETWORK_ERROR_PAGE_CACHED_COPY_BUTTON_SHOWN = 13,
NETWORK_ERROR_PAGE_CACHED_COPY_BUTTON_CLICKED = 14,
NETWORK_ERROR_PAGE_CACHED_PAGE_BUTTON_SHOWN = 15,
NETWORK_ERROR_PAGE_CACHED_PAGE_BUTTON_CLICKED = 16,
NETWORK_ERROR_PAGE_EVENT_MAX = 17,
};
// The status of a DNS probe.
......
......@@ -391,6 +391,8 @@ struct NetErrorHelperCore::ErrorPageInfo {
needs_load_navigation_corrections(false),
reload_button_in_page(false),
show_saved_copy_button_in_page(false),
show_cached_page_button_in_page(false),
show_cached_copy_button_in_page(false),
is_finished_loading(false),
auto_reload_triggered(false) {
}
......@@ -424,6 +426,8 @@ struct NetErrorHelperCore::ErrorPageInfo {
// Track if specific buttons are included in an error page, for statistics.
bool reload_button_in_page;
bool show_saved_copy_button_in_page;
bool show_cached_page_button_in_page;
bool show_cached_copy_button_in_page;
// True if a page has completed loading, at which point it can receive
// updates.
......@@ -610,6 +614,13 @@ void NetErrorHelperCore::OnFinishLoad(FrameType frame_type) {
chrome_common_net::RecordEvent(
chrome_common_net::NETWORK_ERROR_PAGE_BOTH_BUTTONS_SHOWN);
}
if (committed_error_page_info_->show_cached_copy_button_in_page) {
chrome_common_net::RecordEvent(
chrome_common_net::NETWORK_ERROR_PAGE_CACHED_COPY_BUTTON_SHOWN);
} else if (committed_error_page_info_->show_cached_page_button_in_page) {
chrome_common_net::RecordEvent(
chrome_common_net::NETWORK_ERROR_PAGE_CACHED_PAGE_BUTTON_SHOWN);
}
delegate_->EnablePageHelperFunctions();
......@@ -655,10 +666,13 @@ void NetErrorHelperCore::GetErrorHTML(
// These values do not matter, as error pages in iframes hide the buttons.
bool reload_button_in_page;
bool show_saved_copy_button_in_page;
bool show_cached_copy_button_in_page;
bool show_cached_page_button_in_page;
delegate_->GenerateLocalizedErrorPage(
error, is_failed_post, scoped_ptr<ErrorPageParams>(),
&reload_button_in_page, &show_saved_copy_button_in_page,
&show_cached_copy_button_in_page, &show_cached_page_button_in_page,
error_html);
}
}
......@@ -720,6 +734,8 @@ void NetErrorHelperCore::GetErrorHtmlForMainFrame(
scoped_ptr<ErrorPageParams>(),
&pending_error_page_info->reload_button_in_page,
&pending_error_page_info->show_saved_copy_button_in_page,
&pending_error_page_info->show_cached_copy_button_in_page,
&pending_error_page_info->show_cached_page_button_in_page,
error_html);
}
......@@ -781,6 +797,8 @@ void NetErrorHelperCore::OnNavigationCorrectionsFetched(
params.Pass(),
&pending_error_page_info_->reload_button_in_page,
&pending_error_page_info_->show_saved_copy_button_in_page,
&pending_error_page_info_->show_cached_copy_button_in_page,
&pending_error_page_info_->show_cached_page_button_in_page,
&error_html);
} else {
// Since |navigation_correction_params| in |pending_error_page_info_| is
......@@ -964,6 +982,14 @@ void NetErrorHelperCore::ExecuteButtonPress(bool is_error_page, Button button) {
chrome_common_net::RecordEvent(
chrome_common_net::NETWORK_ERROR_EASTER_EGG_ACTIVATED);
return;
case SHOW_CACHED_COPY_BUTTON:
chrome_common_net::RecordEvent(
chrome_common_net::NETWORK_ERROR_PAGE_CACHED_COPY_BUTTON_CLICKED);
return;
case SHOW_CACHED_PAGE_BUTTON:
chrome_common_net::RecordEvent(
chrome_common_net::NETWORK_ERROR_PAGE_CACHED_PAGE_BUTTON_CLICKED);
return;
case BUTTON_MAX:
case NO_BUTTON:
NOTREACHED();
......
......@@ -48,6 +48,8 @@ class NetErrorHelperCore {
SHOW_SAVED_COPY_BUTTON,
MORE_BUTTON,
EASTER_EGG,
SHOW_CACHED_COPY_BUTTON, // "Google cached copy" button label experiment.
SHOW_CACHED_PAGE_BUTTON, // "Google cached page" button label experiment.
BUTTON_MAX,
};
......@@ -62,6 +64,8 @@ class NetErrorHelperCore {
scoped_ptr<error_page::ErrorPageParams> params,
bool* reload_button_shown,
bool* show_saved_copy_button_shown,
bool* show_cached_copy_button_shown,
bool* show_cached_page_button_shown,
std::string* html) const = 0;
// Loads the given HTML in the main frame for use as an error page.
......
......@@ -311,10 +311,14 @@ class NetErrorHelperCoreTest : public testing::Test,
scoped_ptr<ErrorPageParams> params,
bool* reload_button_shown,
bool* show_saved_copy_button_shown,
bool* show_cached_copy_button_shown,
bool* show_cached_page_button_shown,
std::string* html) const override {
last_error_page_params_.reset(params.release());
*reload_button_shown = false;
*show_saved_copy_button_shown = false;
*show_cached_copy_button_shown = false;
*show_cached_page_button_shown = false;
*html = ErrorToString(error, is_failed_post);
}
......
......@@ -54870,6 +54870,8 @@ http://cs/file:chrome/histograms.xml - but prefer this file for new entries.
<int value="2" label="SHOW_SAVED_COPY_BUTTON"/>
<int value="3" label="MORE_BUTTON"/>
<int value="4" label="EASTER_EGG"/>
<int value="5" label="SHOW_CACHED_COPY_BUTTON"/>
<int value="6" label="SHOW_CACHED_PAGE_BUTTON"/>
</enum>
<enum name="ErrorPageUnexpectedStates" type="int">
......@@ -63016,6 +63018,10 @@ To add a new entry, add it with any value and run test to compute valid value.
<int value="10" label="Both Buttons Shown, Reload Clicked"/>
<int value="11" label="Both Buttons Shown, Show Saved Copy Clicked"/>
<int value="12" label="Easter egg activated"/>
<int value="13" label="Show Cached Copy button shown"/>
<int value="14" label="Show Cached Copy button clicked"/>
<int value="15" label="Show Cached Page button shown"/>
<int value="16" label="Show Cached Page button clicked"/>
</enum>
<enum name="NetInternalsUiFeature" type="int">
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