Commit aa45d8ae authored by bnc@chromium.org's avatar bnc@chromium.org

Update "Predict network actions" UI setting.

* Update chrome://settings Privacy section to change int kNetworkPredictionOptions
instead of bool kNetworkPredictionEnabled.
* Introduce code to migrate user setting (and only user setting).
* Per UI review, keep UI unchanged.
* Note that policy handler for these two preferences has already landed, see https://crrev.com/431493003.

BUG=334602

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

Cr-Commit-Position: refs/heads/master@{#288352}
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@288352 0039d316-1c4b-4281-b951-d872f2087c98
parent ddb5625c
......@@ -76,6 +76,8 @@ PrefMappingEntry kPrefMapping[] = {
APIPermission::kPrivacy, APIPermission::kPrivacy},
{"networkPredictionEnabled", prefs::kNetworkPredictionEnabled,
APIPermission::kPrivacy, APIPermission::kPrivacy},
{"networkPredictionOptions", prefs::kNetworkPredictionOptions,
APIPermission::kPrivacy, APIPermission::kPrivacy},
{"passwordSavingEnabled",
password_manager::prefs::kPasswordManagerSavingEnabled,
APIPermission::kPrivacy, APIPermission::kPrivacy},
......
......@@ -46,6 +46,27 @@ void RegisterPredictionOptionsProfilePrefs(
user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
}
void MigrateNetworkPredictionUserPrefs(PrefService* pref_service) {
// Nothing to do if the user or this migration code has already set the new
// preference.
if (pref_service->GetUserPrefValue(prefs::kNetworkPredictionOptions))
return;
// Nothing to do if the user has not set the old preference.
const base::Value* network_prediction_enabled =
pref_service->GetUserPrefValue(prefs::kNetworkPredictionEnabled);
if (!network_prediction_enabled)
return;
bool value = false;
if (network_prediction_enabled->GetAsBoolean(&value)) {
pref_service->SetInteger(
prefs::kNetworkPredictionOptions,
value ? chrome_browser_net::NETWORK_PREDICTION_WIFI_ONLY
: chrome_browser_net::NETWORK_PREDICTION_NEVER);
}
}
bool CanPredictNetworkActionsIO(ProfileIOData* profile_io_data) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
DCHECK(profile_io_data);
......
......@@ -30,6 +30,10 @@ enum NetworkPredictionOptions {
void RegisterPredictionOptionsProfilePrefs(
user_prefs::PrefRegistrySyncable* registry);
// Migrate prefs::kNetworkPredictionEnabled user setting (if exists) to
// prefs::kNetworkPredictionOptions (if does not have user setting).
void MigrateNetworkPredictionUserPrefs(PrefService* pref_service);
// The following two global functions determine whether predictive network
// actions are enabled, based on preferences and network type.
......
......@@ -532,6 +532,7 @@ void MigrateUserPrefs(Profile* profile) {
PromoResourceService::MigrateUserPrefs(prefs);
translate::TranslatePrefs::MigrateUserPrefs(prefs, prefs::kAcceptLanguages);
chrome_browser_net::MigrateNetworkPredictionUserPrefs(prefs);
#if defined(OS_MACOSX) && !defined(OS_IOS)
autofill::AutofillManager::MigrateUserPrefs(prefs);
......
......@@ -311,14 +311,14 @@
</div>
<div class="checkbox" guest-visibility="disabled">
<span class="controlled-setting-with-label">
<input id="dnsPrefetchingEnabled" pref="dns_prefetching.enabled"
<input id="networkPredictionOptions"
metric="Options_DnsPrefetchCheckbox" type="checkbox">
<span>
<label for="dnsPrefetchingEnabled"
<label for="networkPredictionOptions"
i18n-content="networkPredictionEnabledDescription">
</label>
<span class="controlled-setting-indicator"
pref="dns_prefetching.enabled">
pref="net.network_prediction_options">
</span>
</span>
</span>
......
......@@ -9,6 +9,13 @@ cr.define('options', function() {
var ArrayDataModel = cr.ui.ArrayDataModel;
var RepeatingButton = cr.ui.RepeatingButton;
var HotwordSearchSettingIndicator = options.HotwordSearchSettingIndicator;
var NetworkPredictionOptions = {
ALWAYS: 0,
WIFI_ONLY: 1,
NEVER: 2,
UNSET: 3,
DEFAULT: 1
};
//
// BrowserOptions class
......@@ -383,6 +390,17 @@ cr.define('options', function() {
updateMetricsRestartButton);
updateMetricsRestartButton();
}
$('networkPredictionOptions').onchange = function(event) {
var value = (event.target.checked ?
NetworkPredictionOptions.WIFI_ONLY :
NetworkPredictionOptions.NEVER);
var metric = event.target.metric;
Preferences.setIntegerPref(
'net.network_prediction_options',
value,
true,
metric);
};
// Bluetooth (CrOS only).
if (cr.isChromeOS) {
......@@ -1492,6 +1510,25 @@ cr.define('options', function() {
$('metricsReportingSetting').style.display = 'none';
},
/**
* Set network prediction checkbox value.
*
* @param {Object} pref Information about network prediction options.
* @param {number} pref.value The value of network prediction options.
* @param {boolean} pref.disabled If the pref is not user modifiable.
* @private
*/
setNetworkPredictionValue_: function(pref) {
var checkbox = $('networkPredictionOptions');
checkbox.disabled = pref.disabled;
if (pref.value == NetworkPredictionOptions.UNSET) {
checkbox.checked = (NetworkPredictionOptions.DEFAULT !=
NetworkPredictionOptions.NEVER);
} else {
checkbox.checked = (pref.value != NetworkPredictionOptions.NEVER);
}
},
/**
* Set the font size selected item. This item actually reflects two
* preferences: the default font size and the default fixed font size.
......@@ -1875,6 +1912,7 @@ cr.define('options', function() {
'setCanSetTime',
'setFontSize',
'setNativeThemeButtonEnabled',
'setNetworkPredictionValue',
'setHighContrastCheckboxState',
'setMetricsReportingCheckboxState',
'setMetricsReportingSettingVisibility',
......
......@@ -32,6 +32,7 @@
#include "chrome/browser/download/download_prefs.h"
#include "chrome/browser/gpu/gpu_mode_manager.h"
#include "chrome/browser/lifetime/application_lifetime.h"
#include "chrome/browser/net/prediction_options.h"
#include "chrome/browser/prefs/session_startup_pref.h"
#include "chrome/browser/printing/cloud_print/cloud_print_proxy_service.h"
#include "chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory.h"
......@@ -843,6 +844,10 @@ void BrowserOptionsHandler::InitializeHandler() {
base::Bind(&BrowserOptionsHandler::SetupPageZoomSelector,
base::Unretained(this)));
profile_pref_registrar_.Init(prefs);
profile_pref_registrar_.Add(
prefs::kNetworkPredictionOptions,
base::Bind(&BrowserOptionsHandler::SetupNetworkPredictionControl,
base::Unretained(this)));
profile_pref_registrar_.Add(
prefs::kWebKitDefaultFontSize,
base::Bind(&BrowserOptionsHandler::SetupFontSizeSelector,
......@@ -908,6 +913,7 @@ void BrowserOptionsHandler::InitializePage() {
UpdateDefaultBrowserState();
SetupMetricsReportingSettingVisibility();
SetupNetworkPredictionControl();
SetupFontSizeSelector();
SetupPageZoomSelector();
SetupAutoOpenFileTypes();
......@@ -1664,6 +1670,20 @@ void BrowserOptionsHandler::SetupMetricsReportingSettingVisibility() {
#endif
}
void BrowserOptionsHandler::SetupNetworkPredictionControl() {
PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
base::DictionaryValue dict;
dict.SetInteger("value",
pref_service->GetInteger(prefs::kNetworkPredictionOptions));
dict.SetBoolean("disabled",
!pref_service->IsUserModifiablePreference(
prefs::kNetworkPredictionOptions));
web_ui()->CallJavascriptFunction("BrowserOptions.setNetworkPredictionValue",
dict);
}
void BrowserOptionsHandler::SetupFontSizeSelector() {
PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
const PrefService::Preference* default_font_size =
......
......@@ -298,6 +298,9 @@ class BrowserOptionsHandler
// Setup the visibility for the metrics reporting setting.
void SetupMetricsReportingSettingVisibility();
// Update value of predictive network actions UI element.
void SetupNetworkPredictionControl();
// Setup the font size selector control.
void SetupFontSizeSelector();
......
......@@ -113,7 +113,8 @@
"can_be_recommended": true,
"test_policy": { "DnsPrefetchingEnabled": false },
"pref_mappings": [
{ "pref": "dns_prefetching.enabled",
{ "pref": "dns_prefetching.enabled" },
{ "pref": "net.network_prediction_options",
"indicator_tests": [
{ "policy": { "DnsPrefetchingEnabled": false } }
]
......@@ -126,7 +127,8 @@
"can_be_recommended": true,
"test_policy": { "NetworkPredictionOptions": 2 },
"pref_mappings": [
{ "pref": "dns_prefetching.enabled",
{ "pref": "dns_prefetching.enabled" },
{ "pref": "net.network_prediction_options",
"indicator_tests": [
{ "policy": { "NetworkPredictionOptions": 2 } }
]
......
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