| Index: chrome/browser/ui/webui/options/chromeos/core_chromeos_options_handler.cc
|
| diff --git a/chrome/browser/ui/webui/options/chromeos/core_chromeos_options_handler.cc b/chrome/browser/ui/webui/options/chromeos/core_chromeos_options_handler.cc
|
| index b21df5fcf9db1b6d07d9a6f31eee268b06bc5be3..63203cbc2b5e676c59619a0411ade3e8d2081c27 100644
|
| --- a/chrome/browser/ui/webui/options/chromeos/core_chromeos_options_handler.cc
|
| +++ b/chrome/browser/ui/webui/options/chromeos/core_chromeos_options_handler.cc
|
| @@ -48,19 +48,21 @@ namespace options {
|
| namespace {
|
|
|
| // List of settings that should be changeable by all users.
|
| -const char* kNonPrivilegedSettings[] = {
|
| +const char* kReadOnlySettings[] = {
|
| kSystemTimezone
|
| };
|
|
|
| // List of settings that should only be changeable by the primary user.
|
| const char* kPrimaryUserSettings[] = {
|
| prefs::kWakeOnWifiDarkConnect,
|
| + prefs::kUserTimezone,
|
| + prefs::kResolveTimezoneByGeolocation
|
| };
|
|
|
| // Returns true if |pref| can be controlled (e.g. by policy or owner).
|
| -bool IsSettingPrivileged(const std::string& pref) {
|
| - const char** end = kNonPrivilegedSettings + arraysize(kNonPrivilegedSettings);
|
| - return std::find(kNonPrivilegedSettings, end, pref) == end;
|
| +bool IsSettingWritable(const std::string& pref) {
|
| + const char** end = kReadOnlySettings + arraysize(kReadOnlySettings);
|
| + return std::find(kReadOnlySettings, end, pref) == end;
|
| }
|
|
|
| // Returns true if |pref| is shared (controlled by the primary user).
|
| @@ -200,8 +202,9 @@ std::unique_ptr<base::Value> CoreChromeOSOptionsHandler::FetchPref(
|
| return value;
|
| dict->SetString("controlledBy", "shared");
|
| dict->SetBoolean("disabled", true);
|
| - dict->SetBoolean("value", primary_profile->GetPrefs()->GetBoolean(
|
| - pref_name));
|
| + const PrefService::Preference* pref =
|
| + primary_profile->GetPrefs()->FindPreference(pref_name);
|
| + dict->Set("value", base::MakeUnique<base::Value>(*pref->GetValue()));
|
| return value;
|
| }
|
|
|
| @@ -218,17 +221,18 @@ std::unique_ptr<base::Value> CoreChromeOSOptionsHandler::FetchPref(
|
| dict->Set("value", base::MakeUnique<base::Value>(*pref_value));
|
|
|
| std::string controlled_by;
|
| - if (IsSettingPrivileged(pref_name)) {
|
| - policy::BrowserPolicyConnectorChromeOS* connector =
|
| - g_browser_process->platform_part()->browser_policy_connector_chromeos();
|
| - if (connector->IsEnterpriseManaged())
|
| - controlled_by = "policy";
|
| - else if (!ProfileHelper::IsOwnerProfile(profile))
|
| - controlled_by = "owner";
|
| - }
|
| - dict->SetBoolean("disabled", !controlled_by.empty());
|
| + policy::BrowserPolicyConnectorChromeOS* connector =
|
| + g_browser_process->platform_part()->browser_policy_connector_chromeos();
|
| + if (connector->IsEnterpriseManaged())
|
| + controlled_by = "policy";
|
| + else if (!ProfileHelper::IsOwnerProfile(profile))
|
| + controlled_by = "owner";
|
| if (!controlled_by.empty())
|
| dict->SetString("controlledBy", controlled_by);
|
| +
|
| + // Read-only setting is always disabled.
|
| + dict->SetBoolean("disabled",
|
| + !controlled_by.empty() || !IsSettingWritable(pref_name));
|
| return std::move(dict);
|
| }
|
|
|
| @@ -263,6 +267,10 @@ void CoreChromeOSOptionsHandler::SetPref(const std::string& pref_name,
|
| }
|
| if (!CrosSettings::IsCrosSettings(pref_name))
|
| return ::options::CoreOptionsHandler::SetPref(pref_name, value, metric);
|
| + if (!IsSettingWritable(pref_name)) {
|
| + NOTREACHED() << pref_name;
|
| + return;
|
| + }
|
| OwnerSettingsServiceChromeOS* service =
|
| OwnerSettingsServiceChromeOS::FromWebUI(web_ui());
|
| if (service && service->HandlesSetting(pref_name))
|
|
|