Commit 2d8fc9aa authored by Andrey Zaytsev's avatar Andrey Zaytsev Committed by Commit Bot

Added Network Prediction toggle to the Cookies subpage

This is part of the Friendly Settings Privacy settings redesign. The network prediction toggle is being moved to the new cookies page. See
http://slides/1utofQR2FyZlTOOsUgYGi0SyPeVA3DxCDjHmaAuu0EIo#slide=id.g64328a826f_0_1 for more context.

Implementation review: http://slides/13mIMXvISMXz_I_rRuDeN_qe4RsW49LYhudbSj23owVw#slide=id.p

Bug: 1032584, 1061479
Change-Id: I7d418242100ec6c3562fa3841caf1ec0e613bcc2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2105313
Commit-Queue: Andrey Zaytsev <andzaytsev@google.com>
Reviewed-by: default avatarMartin Šrámek <msramek@chromium.org>
Reviewed-by: default avatardpapad <dpapad@chromium.org>
Auto-Submit: Andrey Zaytsev <andzaytsev@google.com>
Cr-Commit-Position: refs/heads/master@{#750925}
parent 2803a7ec
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
<link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html"> <link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html">
<link rel="import" href="../controls/settings_toggle_button.html"> <link rel="import" href="../controls/settings_toggle_button.html">
<link rel="import" href="../icons.html"> <link rel="import" href="../icons.html">
<link rel="import" href="../metrics_browser_proxy.html">
<link rel="import" href="../prefs/prefs.html"> <link rel="import" href="../prefs/prefs.html">
<link rel="import" href="../prefs/prefs_behavior.html"> <link rel="import" href="../prefs/prefs_behavior.html">
<link rel="import" href="../settings_shared_css.html"> <link rel="import" href="../settings_shared_css.html">
...@@ -118,6 +119,14 @@ ...@@ -118,6 +119,14 @@
<settings-do-not-track-toggle id="doNotTrack" <settings-do-not-track-toggle id="doNotTrack"
prefs="{{prefs}}"> prefs="{{prefs}}">
</settings-do-not-track-toggle> </settings-do-not-track-toggle>
<settings-toggle-button id="networkPrediction"
hidden="[[!pageVisibility.networkPrediction]]"
pref="{{prefs.net.network_prediction_options}}"
label="$i18n{networkPredictionEnabled}"
sub-label="$i18n{networkPredictionEnabledDesc}"
numeric-unchecked-value="[[networkPredictionUncheckedValue_]]"
on-settings-boolean-control-change="onNetworkPredictionChange_">
</settings-toggle-button>
<div class="settings-box first"> <div class="settings-box first">
<h2>$i18n{cookiesManageSiteSpecificExceptions}</h2> <h2>$i18n{cookiesManageSiteSpecificExceptions}</h2>
</div> </div>
......
...@@ -20,6 +20,18 @@ const CookiesControl = { ...@@ -20,6 +20,18 @@ const CookiesControl = {
BLOCK_ALL: 'block-all', BLOCK_ALL: 'block-all',
}; };
/**
* Must be kept in sync with the C++ enum of the same name (see
* chrome/browser/net/prediction_options.h).
* @enum {number}
*/
const NetworkPredictionOptions = {
ALWAYS: 0,
WIFI_ONLY: 1,
NEVER: 2,
DEFAULT: 1,
};
Polymer({ Polymer({
is: 'settings-cookies-page', is: 'settings-cookies-page',
...@@ -46,6 +58,18 @@ Polymer({ ...@@ -46,6 +58,18 @@ Polymer({
/** @private */ /** @private */
cookiesControlRadioSelected_: String, cookiesControlRadioSelected_: String,
/**
* Used for HTML bindings. This is defined as a property rather than
* within the ready callback, because the value needs to be available
* before local DOM initialization - otherwise, the toggle has unexpected
* behavior.
* @private {!NetworkPredictionOptions}
*/
networkPredictionUncheckedValue_: {
type: Number,
value: NetworkPredictionOptions.NEVER,
},
// A "virtual" preference that is use to control the state of the // A "virtual" preference that is use to control the state of the
// clear on exit toggle. // clear on exit toggle.
/** @private {chrome.settingsPrivate.PrefObject} */ /** @private {chrome.settingsPrivate.PrefObject} */
...@@ -76,6 +100,9 @@ Polymer({ ...@@ -76,6 +100,9 @@ Polymer({
/** @type {?settings.SiteSettingsPrefsBrowserProxy} */ /** @type {?settings.SiteSettingsPrefsBrowserProxy} */
browserProxy_: null, browserProxy_: null,
/** @type {?settings.MetricsBrowserProxy} */
metricsBrowserProxy_: null,
/** @override */ /** @override */
created() { created() {
// Used during property initialisation so must be set in created. // Used during property initialisation so must be set in created.
...@@ -85,6 +112,8 @@ Polymer({ ...@@ -85,6 +112,8 @@ Polymer({
/** @override */ /** @override */
ready() { ready() {
this.metricsBrowserProxy_ = settings.MetricsBrowserProxyImpl.getInstance();
this.addWebUIListener('contentSettingCategoryChanged', category => { this.addWebUIListener('contentSettingCategoryChanged', category => {
if (category === settings.ContentSettingsTypes.COOKIES) { if (category === settings.ContentSettingsTypes.COOKIES) {
this.updateCookiesControls_(); this.updateCookiesControls_();
...@@ -224,5 +253,16 @@ Polymer({ ...@@ -224,5 +253,16 @@ Polymer({
settings.ContentSettingsTypes.COOKIES, settings.ContentSettingsTypes.COOKIES,
this.computeClearOnExitSetting_()); this.computeClearOnExitSetting_());
}, },
/**
* Records changes made to the network prediction setting for logging, the
* logic of actually changing the setting is taken care of by the
* net.network_prediction_options pref.
* @private
*/
onNetworkPredictionChange_() {
this.metricsBrowserProxy_.recordSettingsPageHistogram(
settings.PrivacyElementInteractions.NETWORK_PREDICTION);
},
}); });
})(); })();
...@@ -6,12 +6,18 @@ suite('CrSettingsCookiesPageTest', function() { ...@@ -6,12 +6,18 @@ suite('CrSettingsCookiesPageTest', function() {
/** @type {TestSiteSettingsPrefsBrowserProxy} */ /** @type {TestSiteSettingsPrefsBrowserProxy} */
let siteSettingsBrowserProxy; let siteSettingsBrowserProxy;
/** @type {settings.TestMetricsBrowserProxy} */
let testMetricsBrowserProxy;
/** @type {SettingsSecurityPageElement} */ /** @type {SettingsSecurityPageElement} */
let page; let page;
/** @type {Element} */ /** @type {Element} */
let clearOnExit; let clearOnExit;
/** @type {Element} */
let networkPrediction;
/** @type {Element} */ /** @type {Element} */
let allowAll; let allowAll;
...@@ -25,6 +31,8 @@ suite('CrSettingsCookiesPageTest', function() { ...@@ -25,6 +31,8 @@ suite('CrSettingsCookiesPageTest', function() {
let blockAll; let blockAll;
setup(function() { setup(function() {
testMetricsBrowserProxy = new TestMetricsBrowserProxy();
settings.MetricsBrowserProxyImpl.instance_ = testMetricsBrowserProxy;
siteSettingsBrowserProxy = new TestSiteSettingsPrefsBrowserProxy(); siteSettingsBrowserProxy = new TestSiteSettingsPrefsBrowserProxy();
settings.SiteSettingsPrefsBrowserProxyImpl.instance_ = settings.SiteSettingsPrefsBrowserProxyImpl.instance_ =
siteSettingsBrowserProxy; siteSettingsBrowserProxy;
...@@ -44,6 +52,7 @@ suite('CrSettingsCookiesPageTest', function() { ...@@ -44,6 +52,7 @@ suite('CrSettingsCookiesPageTest', function() {
blockThirdParty = page.$$('#blockThirdParty'); blockThirdParty = page.$$('#blockThirdParty');
blockAll = page.$$('#blockAll'); blockAll = page.$$('#blockAll');
clearOnExit = page.$$('#clearOnExit'); clearOnExit = page.$$('#clearOnExit');
networkPrediction = page.$$('#networkPrediction');
}); });
teardown(function() { teardown(function() {
...@@ -183,4 +192,19 @@ suite('CrSettingsCookiesPageTest', function() { ...@@ -183,4 +192,19 @@ suite('CrSettingsCookiesPageTest', function() {
assertFalse(clearOnExit.checked); assertFalse(clearOnExit.checked);
assertFalse(clearOnExit.disabled); assertFalse(clearOnExit.disabled);
}); });
test('ElementVisibility', async function() {
await test_util.flushTasks();
assertTrue(test_util.isChildVisible(page, '#clearOnExit'));
assertTrue(test_util.isChildVisible(page, '#doNotTrack'));
assertTrue(test_util.isChildVisible(page, '#networkPrediction'));
});
test('NetworkPredictionClickRecorded', async function() {
networkPrediction.click();
const result =
await testMetricsBrowserProxy.whenCalled('recordSettingsPageHistogram');
assertEquals(
settings.PrivacyElementInteractions.NETWORK_PREDICTION, result);
});
}); });
...@@ -84,6 +84,7 @@ CrSettingsCookiesPageTest.prototype = { ...@@ -84,6 +84,7 @@ CrSettingsCookiesPageTest.prototype = {
extraLibraries: CrSettingsBrowserTest.prototype.extraLibraries.concat([ extraLibraries: CrSettingsBrowserTest.prototype.extraLibraries.concat([
'../test_util.js', '../test_util.js',
'../test_browser_proxy.js', '../test_browser_proxy.js',
'test_metrics_browser_proxy.js',
'test_util.js', 'test_util.js',
'test_site_settings_prefs_browser_proxy.js', 'test_site_settings_prefs_browser_proxy.js',
'cookies_page_test.js', 'cookies_page_test.js',
......
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