Commit 45edf801 authored by Xinghui Lu's avatar Xinghui Lu Committed by Commit Bot

Log user action sequence on Safe Browsing settings page.

Log SafeBrowsing.Settings.* user action sequence on both desktop and
Android. Break "Showed" into different entry points so we can analyze
users's behavior based on different entry points.

Bug: 1124491
Change-Id: I6a30765ae8754b88eb8cb4a6f9fcd89be0d7d78e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2416564
Commit-Queue: Xinghui Lu <xinghuilu@chromium.org>
Reviewed-by: default avatarVarun Khaneja <vakh@chromium.org>
Reviewed-by: default avatarAlexei Svitkine <asvitkine@chromium.org>
Reviewed-by: default avatarRebekah Potter <rbpotter@chromium.org>
Cr-Commit-Position: refs/heads/master@{#810035}
parent 6191b211
......@@ -336,7 +336,8 @@ Polymer({
/** @private */
onSecurityPageClick_() {
this.tryShowHatsSurvey_();
this.metricsBrowserProxy_.recordAction(
'SafeBrowsing.Settings.ShowedFromParentSettings');
Router.getInstance().navigateTo(routes.SECURITY);
},
......
......@@ -189,6 +189,8 @@ Polymer({
if (prefValue !== selected) {
this.recordInteractionHistogramOnRadioChange_(
/** @type {!SafeBrowsingSetting} */ (selected));
this.recordActionOnRadioChange_(
/** @type {!SafeBrowsingSetting} */ (selected));
}
if (selected === SafeBrowsingSetting.DISABLED) {
this.showDisableSafebrowsingDialog_ = true;
......@@ -263,6 +265,7 @@ Polymer({
this.$$('settings-disable-safebrowsing-dialog'))
.wasConfirmed();
this.recordInteractionHistogramOnSafeBrowsingDialogClose_(confirmed);
this.recordActionOnSafeBrowsingDialogClose_(confirmed);
// Check if the dialog was confirmed before closing it.
if (confirmed) {
this.$.safeBrowsingRadioGroup.sendPrefChange();
......@@ -282,12 +285,14 @@ Polymer({
onEnhancedProtectionExpandButtonClicked_() {
this.recordInteractionHistogramOnExpandButtonClicked_(
SafeBrowsingSetting.ENHANCED);
this.recordActionOnExpandButtonClicked_(SafeBrowsingSetting.ENHANCED);
},
/** @private */
onStandardProtectionExpandButtonClicked_() {
this.recordInteractionHistogramOnExpandButtonClicked_(
SafeBrowsingSetting.STANDARD);
this.recordActionOnExpandButtonClicked_(SafeBrowsingSetting.STANDARD);
},
/**
......@@ -323,7 +328,7 @@ Polymer({
},
/**
* @param {!boolean} confirmed
* @param {boolean} confirmed
* @private
*/
recordInteractionHistogramOnSafeBrowsingDialogClose_(confirmed) {
......@@ -333,4 +338,41 @@ Polymer({
SafeBrowsingInteractions
.SAFE_BROWSING_DISABLE_SAFE_BROWSING_DIALOG_DENIED);
},
/**
* @param {!SafeBrowsingSetting} safeBrowsingSetting
* @private
*/
recordActionOnRadioChange_(safeBrowsingSetting) {
let actionName;
if (safeBrowsingSetting === SafeBrowsingSetting.ENHANCED) {
actionName = 'SafeBrowsing.Settings.EnhancedProtectionClicked';
} else if (safeBrowsingSetting === SafeBrowsingSetting.STANDARD) {
actionName = 'SafeBrowsing.Settings.StandardProtectionClicked';
} else {
actionName = 'SafeBrowsing.Settings.DisableSafeBrowsingClicked';
}
this.metricsBrowserProxy_.recordAction(actionName);
},
/**
* @param {!SafeBrowsingSetting} safeBrowsingSetting
* @private
*/
recordActionOnExpandButtonClicked_(safeBrowsingSetting) {
this.metricsBrowserProxy_.recordAction(
safeBrowsingSetting === SafeBrowsingSetting.ENHANCED ?
'SafeBrowsing.Settings.EnhancedProtectionExpandArrowClicked' :
'SafeBrowsing.Settings.StandardProtectionExpandArrowClicked');
},
/**
* @param {boolean} confirmed
* @private
*/
recordActionOnSafeBrowsingDialogClose_(confirmed) {
this.metricsBrowserProxy_.recordAction(
confirmed ? 'SafeBrowsing.Settings.DisableSafeBrowsingDialogConfirmed' :
'SafeBrowsing.Settings.DisableSafeBrowsingDialogDenied');
},
});
......@@ -176,6 +176,8 @@ Polymer({
/** @private */
openSecurityPage_: function() {
this.metricsBrowserProxy_.recordAction(
'SafeBrowsing.Settings.ShowedFromSafetyCheck');
Router.getInstance().navigateTo(
routes.SECURITY, /* dynamicParams= */ null,
/* removeSearch= */ true);
......
......@@ -12,6 +12,7 @@ import androidx.preference.Preference;
import org.chromium.base.IntentUtils;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.safe_browsing.SafeBrowsingBridge;
import org.chromium.chrome.browser.safe_browsing.SafeBrowsingState;
......@@ -226,5 +227,37 @@ public class SecuritySettingsFragment extends SafeBrowsingSettingsFragmentBase
RecordHistogram.recordEnumeratedHistogram(
"SafeBrowsing.Settings.UserAction." + metricsSuffix, userAction,
UserAction.MAX_VALUE + 1);
String userActionSuffix;
switch (userAction) {
case UserAction.SHOWED:
userActionSuffix = "ShowedFrom" + metricsSuffix;
break;
case UserAction.ENHANCED_PROTECTION_CLICKED:
userActionSuffix = "EnhancedProtectionClicked";
break;
case UserAction.STANDARD_PROTECTION_CLICKED:
userActionSuffix = "StandardProtectionClicked";
break;
case UserAction.DISABLE_SAFE_BROWSING_CLICKED:
userActionSuffix = "DisableSafeBrowsingClicked";
break;
case UserAction.ENHANCED_PROTECTION_EXPAND_ARROW_CLICKED:
userActionSuffix = "EnhancedProtectionExpandArrowClicked";
break;
case UserAction.STANDARD_PROTECTION_EXPAND_ARROW_CLICKED:
userActionSuffix = "StandardProtectionExpandArrowClicked";
break;
case UserAction.DISABLE_SAFE_BROWSING_DIALOG_CONFIRMED:
userActionSuffix = "DisableSafeBrowsingDialogConfirmed";
break;
case UserAction.DISABLE_SAFE_BROWSING_DIALOG_DENIED:
userActionSuffix = "DisableSafeBrowsingDialogDenied";
break;
default:
assert false : "Should not be reached.";
userActionSuffix = "";
}
RecordUserAction.record("SafeBrowsing.Settings." + userActionSuffix);
}
}
......@@ -422,58 +422,93 @@ suite('CrSettingsSecurityPageTest', function() {
testMetricsBrowserProxy.resetResolver(
'recordSafeBrowsingInteractionHistogram');
testMetricsBrowserProxy.resetResolver('recordAction');
page.$$('#safeBrowsingEnhanced').click();
flush();
const enhancedClickedResult = await testMetricsBrowserProxy.whenCalled(
'recordSafeBrowsingInteractionHistogram');
const [enhancedClickedResult, enhancedClickedAction] = await Promise.all([
testMetricsBrowserProxy.whenCalled(
'recordSafeBrowsingInteractionHistogram'),
testMetricsBrowserProxy.whenCalled('recordAction')
]);
assertEquals(
SafeBrowsingInteractions.SAFE_BROWSING_ENHANCED_PROTECTION_CLICKED,
enhancedClickedResult);
assertEquals(
'SafeBrowsing.Settings.EnhancedProtectionClicked',
enhancedClickedAction);
testMetricsBrowserProxy.resetResolver(
'recordSafeBrowsingInteractionHistogram');
testMetricsBrowserProxy.resetResolver('recordAction');
page.$$('#safeBrowsingEnhanced').$$('cr-expand-button').click();
flush();
const enhancedExpandedResult = await testMetricsBrowserProxy.whenCalled(
'recordSafeBrowsingInteractionHistogram');
const [enhancedExpandedResult, enhancedExpandedAction] = await Promise.all([
testMetricsBrowserProxy.whenCalled(
'recordSafeBrowsingInteractionHistogram'),
testMetricsBrowserProxy.whenCalled('recordAction')
]);
assertEquals(
SafeBrowsingInteractions
.SAFE_BROWSING_ENHANCED_PROTECTION_EXPAND_ARROW_CLICKED,
enhancedExpandedResult);
assertEquals(
'SafeBrowsing.Settings.EnhancedProtectionExpandArrowClicked',
enhancedExpandedAction);
testMetricsBrowserProxy.resetResolver(
'recordSafeBrowsingInteractionHistogram');
testMetricsBrowserProxy.resetResolver('recordAction');
page.$$('#safeBrowsingStandard').$$('cr-expand-button').click();
flush();
const standardExpandedResult = await testMetricsBrowserProxy.whenCalled(
'recordSafeBrowsingInteractionHistogram');
const [standardExpandedResult, standardExpandedAction] = await Promise.all([
testMetricsBrowserProxy.whenCalled(
'recordSafeBrowsingInteractionHistogram'),
testMetricsBrowserProxy.whenCalled('recordAction')
]);
assertEquals(
SafeBrowsingInteractions
.SAFE_BROWSING_STANDARD_PROTECTION_EXPAND_ARROW_CLICKED,
standardExpandedResult);
assertEquals(
'SafeBrowsing.Settings.StandardProtectionExpandArrowClicked',
standardExpandedAction);
testMetricsBrowserProxy.resetResolver(
'recordSafeBrowsingInteractionHistogram');
testMetricsBrowserProxy.resetResolver('recordAction');
page.$$('#safeBrowsingDisabled').click();
flush();
const disableClickedResult = await testMetricsBrowserProxy.whenCalled(
'recordSafeBrowsingInteractionHistogram');
const [disableClickedResult, disableClickedAction] = await Promise.all([
testMetricsBrowserProxy.whenCalled(
'recordSafeBrowsingInteractionHistogram'),
testMetricsBrowserProxy.whenCalled('recordAction')
]);
assertEquals(
SafeBrowsingInteractions.SAFE_BROWSING_DISABLE_SAFE_BROWSING_CLICKED,
disableClickedResult);
assertEquals(
'SafeBrowsing.Settings.DisableSafeBrowsingClicked',
disableClickedAction);
testMetricsBrowserProxy.resetResolver(
'recordSafeBrowsingInteractionHistogram');
testMetricsBrowserProxy.resetResolver('recordAction');
page.$$('settings-disable-safebrowsing-dialog')
.$$('.cancel-button')
.click();
flush();
const disableDeniedResult = await testMetricsBrowserProxy.whenCalled(
'recordSafeBrowsingInteractionHistogram');
const [disableDeniedResult, disableDeniedAction] = await Promise.all([
testMetricsBrowserProxy.whenCalled(
'recordSafeBrowsingInteractionHistogram'),
testMetricsBrowserProxy.whenCalled('recordAction')
]);
assertEquals(
SafeBrowsingInteractions
.SAFE_BROWSING_DISABLE_SAFE_BROWSING_DIALOG_DENIED,
disableDeniedResult);
assertEquals(
'SafeBrowsing.Settings.DisableSafeBrowsingDialogDenied',
disableDeniedAction);
await flushTasks();
......@@ -481,16 +516,23 @@ suite('CrSettingsSecurityPageTest', function() {
flush();
testMetricsBrowserProxy.resetResolver(
'recordSafeBrowsingInteractionHistogram');
testMetricsBrowserProxy.resetResolver('recordAction');
page.$$('settings-disable-safebrowsing-dialog')
.$$('.action-button')
.click();
flush();
const disableConfirmedResult = await testMetricsBrowserProxy.whenCalled(
'recordSafeBrowsingInteractionHistogram');
const [disableConfirmedResult, disableConfirmedAction] = await Promise.all([
testMetricsBrowserProxy.whenCalled(
'recordSafeBrowsingInteractionHistogram'),
testMetricsBrowserProxy.whenCalled('recordAction')
]);
assertEquals(
SafeBrowsingInteractions
.SAFE_BROWSING_DISABLE_SAFE_BROWSING_DIALOG_CONFIRMED,
disableConfirmedResult);
assertEquals(
'SafeBrowsing.Settings.DisableSafeBrowsingDialogConfirmed',
disableConfirmedAction);
});
test('securityPageShowedRecorded', async function() {
......
......@@ -20043,6 +20043,96 @@ should be able to be added at any place in this file.
</description>
</action>
<action name="SafeBrowsing.Settings.DisableSafeBrowsingClicked">
<owner>xinghuilu@chromium.org</owner>
<owner>chrome-safebrowsing-alerts@google.com</owner>
<description>
User clicks the disable Safe Browsing button in the Safe Browsing setting
page.
</description>
</action>
<action name="SafeBrowsing.Settings.DisableSafeBrowsingDialogConfirmed">
<owner>xinghuilu@chromium.org</owner>
<owner>chrome-safebrowsing-alerts@google.com</owner>
<description>
User clicks the confirmed button on the disable Safe Browsing dialog in the
Safe Browsing setting page.
</description>
</action>
<action name="SafeBrowsing.Settings.DisableSafeBrowsingDialogDenied">
<owner>xinghuilu@chromium.org</owner>
<owner>chrome-safebrowsing-alerts@google.com</owner>
<description>
User clicks the denied button on the disable Safe Browsing dialog in the
Safe Browsing setting page.
</description>
</action>
<action name="SafeBrowsing.Settings.EnhancedProtectionClicked">
<owner>xinghuilu@chromium.org</owner>
<owner>chrome-safebrowsing-alerts@google.com</owner>
<description>
User clicks the exhanced protection button in the Safe Browsing setting
page.
</description>
</action>
<action name="SafeBrowsing.Settings.EnhancedProtectionExpandArrowClicked">
<owner>xinghuilu@chromium.org</owner>
<owner>chrome-safebrowsing-alerts@google.com</owner>
<description>
User clicks the enhanced protection expand arrow in the Safe Browsing
setting page.
</description>
</action>
<action name="SafeBrowsing.Settings.ShowedFromDefault">
<owner>xinghuilu@chromium.org</owner>
<owner>chrome-safebrowsing-alerts@google.com</owner>
<description>
The Safe Browsing setting page is shown to the user. The user reaches the
page from the default route.
</description>
</action>
<action name="SafeBrowsing.Settings.ShowedFromParentSettings">
<owner>xinghuilu@chromium.org</owner>
<owner>chrome-safebrowsing-alerts@google.com</owner>
<description>
The Safe Browsing setting page is shown to the user. The user reaches the
page from the parent settings.
</description>
</action>
<action name="SafeBrowsing.Settings.ShowedFromSafetyCheck">
<owner>xinghuilu@chromium.org</owner>
<owner>chrome-safebrowsing-alerts@google.com</owner>
<description>
The Safe Browsing setting page is shown to the user. The user reaches the
page from SafetyCheck.
</description>
</action>
<action name="SafeBrowsing.Settings.StandardProtectionClicked">
<owner>xinghuilu@chromium.org</owner>
<owner>chrome-safebrowsing-alerts@google.com</owner>
<description>
User clicks the standard protection button in the Safe Browsing setting
page.
</description>
</action>
<action name="SafeBrowsing.Settings.StandardProtectionExpandArrowClicked">
<owner>xinghuilu@chromium.org</owner>
<owner>chrome-safebrowsing-alerts@google.com</owner>
<description>
User clicks the standard protection expand arrow in the Safe Browsing
setting page.
</description>
</action>
<action name="Save">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<description>Please enter the description of this user action.</description>
......
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