Commit bd064957 authored by Luke Zielinski's avatar Luke Zielinski Committed by Commit Bot

Bind privacy settings page to real SBER pref.

The logic allowing us to switch the active pref at runtime is no longer
necessary since there is now only a single Extended Reporting pref in the
system.

Bug: 662944
Change-Id: I8ae0efa90ad488d7a93652268fad24f86ded70c2
Reviewed-on: https://chromium-review.googlesource.com/c/1286988
Commit-Queue: Luke Z <lpz@chromium.org>
Reviewed-by: default avatarDemetrios Papadopoulos <dpapad@chromium.org>
Cr-Commit-Position: refs/heads/master@{#601626}
parent 24cc670a
......@@ -45,12 +45,10 @@
sub-label="$i18n{safeBrowsingEnableProtectionDesc}"
disabled="[[unifiedConsentGiven]]">
</settings-toggle-button>
<settings-toggle-button id="safeBrowsingExtendedReportingControl"
pref="[[safeBrowsingExtendedReportingPref_]]"
<settings-toggle-button
pref="{{prefs.safebrowsing.scout_reporting_enabled}}"
label="$i18n{safeBrowsingEnableExtendedReporting}"
sub-label="$i18n{safeBrowsingEnableExtendedReportingDesc}"
on-settings-boolean-control-change="onSberChange_"
no-set-pref
disabled="[[unifiedConsentGiven]]">
</settings-toggle-button>
<if expr="_google_chrome">
......
......@@ -39,14 +39,6 @@ Polymer({
*/
pageVisibility: Object,
/** @private {chrome.settingsPrivate.PrefObject} */
safeBrowsingExtendedReportingPref_: {
type: Object,
value: function() {
return /** @type {chrome.settingsPrivate.PrefObject} */ ({});
},
},
/**
* Used for HTML bindings. This is defined as a property rather than within
* the ready callback, because the value needs to be available before
......@@ -84,10 +76,6 @@ Polymer({
ready: function() {
this.browserProxy_ = settings.PrivacyPageBrowserProxyImpl.getInstance();
const setSber = this.setSafeBrowsingExtendedReporting_.bind(this);
this.addWebUIListener('safe-browsing-extended-reporting-change', setSber);
this.browserProxy_.getSafeBrowsingExtendedReporting().then(setSber);
// <if expr="_google_chrome and not chromeos">
const setMetricsReportingPref = this.setMetricsReportingPref_.bind(this);
this.addWebUIListener('metrics-reporting-change', setMetricsReportingPref);
......@@ -95,12 +83,6 @@ Polymer({
// </if>
},
/** @private */
onSberChange_: function() {
const enabled = this.$.safeBrowsingExtendedReportingControl.checked;
this.browserProxy_.setSafeBrowsingExtendedReportingEnabled(enabled);
},
/**
* TODO(crbug.com/855945): Use this function for the spell check error hint
* @param {!Event} e
......@@ -113,24 +95,6 @@ Polymer({
}
},
/**
* @param {!SberPrefState} sberPrefState SBER enabled and managed state.
* @private
*/
setSafeBrowsingExtendedReporting_: function(sberPrefState) {
// Ignore the next change because it will happen when we set the pref.
const pref = {
key: '',
type: chrome.settingsPrivate.PrefType.BOOLEAN,
value: sberPrefState.enabled,
};
if (sberPrefState.managed) {
pref.enforcement = chrome.settingsPrivate.Enforcement.ENFORCED;
pref.controlledBy = chrome.settingsPrivate.ControlledBy.USER_POLICY;
}
this.safeBrowsingExtendedReportingPref_ = pref;
},
// <if expr="_google_chrome and not chromeos">
/** @private */
onMetricsReportingChange_: function() {
......
......@@ -7,9 +7,6 @@
/** @typedef {{enabled: boolean, managed: boolean}} */
let MetricsReporting;
/** @typedef {{enabled: boolean, managed: boolean}} */
let SberPrefState;
cr.define('settings', function() {
/** @interface */
class PrivacyPageBrowserProxy {
......@@ -28,12 +25,6 @@ cr.define('settings', function() {
// </if>
/** @return {!Promise<!SberPrefState>} */
getSafeBrowsingExtendedReporting() {}
/** @param {boolean} enabled */
setSafeBrowsingExtendedReportingEnabled(enabled) {}
/** @param {boolean} enabled */
setBlockAutoplayEnabled(enabled) {}
}
......@@ -55,16 +46,6 @@ cr.define('settings', function() {
// </if>
/** @override */
getSafeBrowsingExtendedReporting() {
return cr.sendWithPromise('getSafeBrowsingExtendedReporting');
}
/** @override */
setSafeBrowsingExtendedReportingEnabled(enabled) {
chrome.send('setSafeBrowsingExtendedReportingEnabled', [enabled]);
}
/** @override */
setBlockAutoplayEnabled(enabled) {
chrome.send('setBlockAutoplayEnabled', [enabled]);
......
......@@ -1170,8 +1170,6 @@ jumbo_split_static_library("ui") {
"webui/settings/protocol_handlers_handler.h",
"webui/settings/reset_settings_handler.cc",
"webui/settings/reset_settings_handler.h",
"webui/settings/safe_browsing_handler.cc",
"webui/settings/safe_browsing_handler.h",
"webui/settings/search_engines_handler.cc",
"webui/settings/search_engines_handler.h",
"webui/settings/settings_clear_browsing_data_handler.cc",
......
......@@ -30,7 +30,6 @@
#include "chrome/browser/ui/webui/settings/profile_info_handler.h"
#include "chrome/browser/ui/webui/settings/protocol_handlers_handler.h"
#include "chrome/browser/ui/webui/settings/reset_settings_handler.h"
#include "chrome/browser/ui/webui/settings/safe_browsing_handler.h"
#include "chrome/browser/ui/webui/settings/search_engines_handler.h"
#include "chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.h"
#include "chrome/browser/ui/webui/settings/settings_cookies_view_handler.h"
......@@ -177,8 +176,6 @@ MdSettingsUI::MdSettingsUI(content::WebUI* web_ui)
AddSettingsPageUIHandler(std::make_unique<PeopleHandler>(profile));
AddSettingsPageUIHandler(std::make_unique<ProfileInfoHandler>(profile));
AddSettingsPageUIHandler(std::make_unique<ProtocolHandlersHandler>());
AddSettingsPageUIHandler(
std::make_unique<SafeBrowsingHandler>(profile->GetPrefs()));
AddSettingsPageUIHandler(std::make_unique<SearchEnginesHandler>(profile));
AddSettingsPageUIHandler(std::make_unique<SiteSettingsHandler>(profile));
AddSettingsPageUIHandler(std::make_unique<StartupPagesHandler>(web_ui));
......
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/webui/settings/safe_browsing_handler.h"
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/values.h"
#include "components/prefs/pref_service.h"
#include "components/safe_browsing/common/safe_browsing_prefs.h"
#include "content/public/browser/web_ui.h"
namespace settings {
namespace {
base::DictionaryValue GetSberStateDictionaryValue(const PrefService& prefs) {
base::DictionaryValue dict;
dict.SetBoolean("enabled", safe_browsing::IsExtendedReportingEnabled(prefs));
// TODO(crbug.com/813107): SBEROIA policy is being deprecated, revisit this
// after it is removed.
dict.SetBoolean("managed",
!safe_browsing::IsExtendedReportingOptInAllowed(prefs) ||
safe_browsing::IsExtendedReportingPolicyManaged(prefs));
return dict;
}
} // namespace
SafeBrowsingHandler::SafeBrowsingHandler(PrefService* prefs) : prefs_(prefs) {}
SafeBrowsingHandler::~SafeBrowsingHandler() {}
void SafeBrowsingHandler::RegisterMessages() {
web_ui()->RegisterMessageCallback(
"getSafeBrowsingExtendedReporting",
base::BindRepeating(
&SafeBrowsingHandler::HandleGetSafeBrowsingExtendedReporting,
base::Unretained(this)));
web_ui()->RegisterMessageCallback(
"setSafeBrowsingExtendedReportingEnabled",
base::BindRepeating(
&SafeBrowsingHandler::HandleSetSafeBrowsingExtendedReportingEnabled,
base::Unretained(this)));
}
void SafeBrowsingHandler::OnJavascriptAllowed() {
profile_pref_registrar_.Init(prefs_);
profile_pref_registrar_.Add(
prefs::kSafeBrowsingScoutReportingEnabled,
base::Bind(&SafeBrowsingHandler::OnPrefChanged, base::Unretained(this)));
}
void SafeBrowsingHandler::OnJavascriptDisallowed() {
profile_pref_registrar_.RemoveAll();
}
void SafeBrowsingHandler::HandleGetSafeBrowsingExtendedReporting(
const base::ListValue* args) {
AllowJavascript();
const base::Value* callback_id;
CHECK(args->Get(0, &callback_id));
ResolveJavascriptCallback(*callback_id, GetSberStateDictionaryValue(*prefs_));
}
void SafeBrowsingHandler::HandleSetSafeBrowsingExtendedReportingEnabled(
const base::ListValue* args) {
bool enabled;
CHECK(args->GetBoolean(0, &enabled));
safe_browsing::SetExtendedReportingPrefAndMetric(
prefs_, enabled, safe_browsing::SBER_OPTIN_SITE_CHROME_SETTINGS);
}
void SafeBrowsingHandler::OnPrefChanged(const std::string& pref_name) {
DCHECK(pref_name == prefs::kSafeBrowsingScoutReportingEnabled);
FireWebUIListener("safe-browsing-extended-reporting-change",
GetSberStateDictionaryValue(*prefs_));
}
} // namespace settings
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_WEBUI_SETTINGS_SAFE_BROWSING_HANDLER_H_
#define CHROME_BROWSER_UI_WEBUI_SETTINGS_SAFE_BROWSING_HANDLER_H_
#include <string>
#include "base/macros.h"
#include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h"
#include "components/prefs/pref_change_registrar.h"
namespace settings {
class SafeBrowsingHandler : public SettingsPageUIHandler {
public:
explicit SafeBrowsingHandler(PrefService* prefs);
~SafeBrowsingHandler() override;
// SettingsPageUIHandler:
void RegisterMessages() override;
void OnJavascriptAllowed() override;
void OnJavascriptDisallowed() override;
private:
// Handler for "getSafeBrowsingExtendedReporting" message. Passed a single
// callback ID argument.
void HandleGetSafeBrowsingExtendedReporting(const base::ListValue* args);
// Handler for "setSafeBrowsingExtendedReportingEnabled" message. Passed a
// single |enabled| boolean argument.
void HandleSetSafeBrowsingExtendedReportingEnabled(
const base::ListValue* args);
// Called when the local state pref controlling Safe Browsing extended
// reporting changes.
void OnPrefChanged(const std::string& pref_name);
// Used to track pref changes that affect whether Safe Browsing extended
// reporting is enabled.
PrefChangeRegistrar profile_pref_registrar_;
// Weak pointer.
PrefService* prefs_;
DISALLOW_COPY_AND_ASSIGN(SafeBrowsingHandler);
};
} // namespace settings
#endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_SAFE_BROWSING_HANDLER_H_
......@@ -881,6 +881,7 @@ TEST_F('CrSettingsCertificateManagerTest', 'All', function() {
GEN('#endif // defined(USE_NSS_CERTS)');
GEN('#if defined(GOOGLE_CHROME_BUILD)');
/**
* Test fixture for chrome/browser/resources/settings/privacy_page/.
* @constructor
......@@ -904,14 +905,8 @@ CrSettingsPersonalizationOptionsTest.prototype = {
]),
};
TEST_F('CrSettingsPersonalizationOptionsTest', 'NonOfficialBuild', function() {
settings_personalization_options.registerTests();
mocha.run();
});
GEN('#if defined(GOOGLE_CHROME_BUILD)');
TEST_F('CrSettingsPersonalizationOptionsTest', 'OfficialBuild', function() {
settings_personalization_options.registerOfficialBuildTests();
mocha.run();
});
GEN('#endif');
......
......@@ -3,105 +3,36 @@
// found in the LICENSE file.
cr.define('settings_personalization_options', function() {
function registerTests() {
suite('SafeBrowsingExtendedReporting', function() {
/** @type {settings.TestPrivacyPageBrowserProxy} */
let testBrowserProxy;
/** @type {SettingsPersonalizationOptionsElement} */
let testElement;
setup(function() {
testBrowserProxy = new TestPrivacyPageBrowserProxy();
settings.PrivacyPageBrowserProxyImpl.instance_ = testBrowserProxy;
PolymerTest.clearBody();
testElement =
document.createElement('settings-personalization-options');
document.body.appendChild(testElement);
});
teardown(function() {
testElement.remove();
});
test('test whether extended reporting is enabled/managed', function() {
return testBrowserProxy.whenCalled('getSafeBrowsingExtendedReporting')
.then(function() {
Polymer.dom.flush();
// Control starts checked and managed by default.
assertTrue(testBrowserProxy.sberPrefState.enabled);
assertTrue(testBrowserProxy.sberPrefState.managed);
const control =
testElement.$$('#safeBrowsingExtendedReportingControl');
assertEquals(true, control.checked);
assertEquals(true, !!control.pref.controlledBy);
// Change the managed and checked states
const changedPrefState = {
enabled: false,
managed: false,
};
// Notification from browser can uncheck the box and make it not
// managed.
cr.webUIListenerCallback(
'safe-browsing-extended-reporting-change', changedPrefState);
Polymer.dom.flush();
assertEquals(false, control.checked);
assertEquals(false, !!control.pref.controlledBy);
// Tapping on the box will check it again.
control.click();
return testBrowserProxy.whenCalled(
'setSafeBrowsingExtendedReportingEnabled');
})
.then(function(enabled) {
assertTrue(enabled);
});
});
suite('SafeBrowsingExtendedReportingOfficialBuild', function() {
/** @type {settings.TestPrivacyPageBrowserProxy} */
let testBrowserProxy;
/** @type {SettingsPersonalizationOptionsElement} */
let testElement;
setup(function() {
testBrowserProxy = new TestPrivacyPageBrowserProxy();
settings.PrivacyPageBrowserProxyImpl.instance_ = testBrowserProxy;
PolymerTest.clearBody();
testElement = document.createElement('settings-personalization-options');
document.body.appendChild(testElement);
});
}
function registerOfficialBuildTests() {
suite('SafeBrowsingExtendedReportingOfficialBuild', function() {
/** @type {settings.TestPrivacyPageBrowserProxy} */
let testBrowserProxy;
/** @type {SettingsPersonalizationOptionsElement} */
let testElement;
setup(function() {
testBrowserProxy = new TestPrivacyPageBrowserProxy();
settings.PrivacyPageBrowserProxyImpl.instance_ = testBrowserProxy;
PolymerTest.clearBody();
testElement =
document.createElement('settings-personalization-options');
document.body.appendChild(testElement);
});
teardown(function() {
testElement.remove();
});
test('displaying toggles depending on unified consent', function() {
testElement.unifiedConsentEnabled = false;
Polymer.dom.flush();
assertEquals(
7,
testElement.root.querySelectorAll('settings-toggle-button').length);
testElement.unifiedConsentEnabled = true;
Polymer.dom.flush();
assertEquals(
8,
testElement.root.querySelectorAll('settings-toggle-button').length);
});
teardown(function() {
testElement.remove();
});
}
return {
registerTests: registerTests,
registerOfficialBuildTests: registerOfficialBuildTests,
};
test('displaying toggles depending on unified consent', function() {
testElement.unifiedConsentEnabled = false;
Polymer.dom.flush();
assertEquals(
7,
testElement.root.querySelectorAll('settings-toggle-button').length);
testElement.unifiedConsentEnabled = true;
Polymer.dom.flush();
assertEquals(
8,
testElement.root.querySelectorAll('settings-toggle-button').length);
});
});
});
......@@ -7,9 +7,7 @@ class TestPrivacyPageBrowserProxy extends TestBrowserProxy {
constructor() {
super([
'getMetricsReporting',
'getSafeBrowsingExtendedReporting',
'setMetricsReportingEnabled',
'setSafeBrowsingExtendedReportingEnabled',
'showManageSSLCertificates',
'setBlockAutoplayEnabled',
]);
......@@ -19,12 +17,6 @@ class TestPrivacyPageBrowserProxy extends TestBrowserProxy {
enabled: true,
managed: true,
};
/** @type {!SberPrefState} */
this.sberPrefState = {
enabled: true,
managed: true,
};
}
/** @override */
......@@ -43,17 +35,6 @@ class TestPrivacyPageBrowserProxy extends TestBrowserProxy {
this.methodCalled('showManageSSLCertificates');
}
/** @override */
getSafeBrowsingExtendedReporting() {
this.methodCalled('getSafeBrowsingExtendedReporting');
return Promise.resolve(this.sberPrefState);
}
/** @override */
setSafeBrowsingExtendedReportingEnabled(enabled) {
this.methodCalled('setSafeBrowsingExtendedReportingEnabled', enabled);
}
/** @override */
setBlockAutoplayEnabled(enabled) {
this.methodCalled('setBlockAutoplayEnabled', enabled);
......
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