Chromium Code Reviews| Index: chrome/browser/ui/webui/flags_ui.cc |
| diff --git a/chrome/browser/ui/webui/flags_ui.cc b/chrome/browser/ui/webui/flags_ui.cc |
| index 4cc5dd8903b04136d0f0b9986d6702f43a838e9f..e91776eb0d424685be3177515d3affa966a5149d 100644 |
| --- a/chrome/browser/ui/webui/flags_ui.cc |
| +++ b/chrome/browser/ui/webui/flags_ui.cc |
| @@ -15,6 +15,7 @@ |
| #include "chrome/browser/about_flags.h" |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/browser/lifetime/application_lifetime.h" |
| +#include "chrome/browser/prefs/pref_registry_syncable.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/common/pref_names.h" |
| #include "chrome/common/url_constants.h" |
| @@ -58,23 +59,22 @@ content::WebUIDataSource* CreateFlagsUIHTMLSource() { |
| source->AddLocalizedString("disable", IDS_FLAGS_DISABLE); |
| source->AddLocalizedString("enable", IDS_FLAGS_ENABLE); |
| #if defined(OS_CHROMEOS) |
| - // Set the strings to show which user can actually change the flags |
| - source->AddLocalizedString("ownerOnly", IDS_OPTIONS_ACCOUNTS_OWNER_ONLY); |
| - std::string owner; |
| - chromeos::CrosSettings::Get()->GetString(chromeos::kDeviceOwner, &owner); |
| - source->AddString("ownerUserId", UTF8ToUTF16(owner)); |
| + if (!chromeos::UserManager::Get()->IsCurrentUserOwner() && |
| + base::chromeos::IsRunningOnChromeOS()) { |
| + // Set the strings to show which user can actually change the flags |
| + source->AddLocalizedString("ownerWarning", IDS_SYSTEM_FLAGS_OWNER_ONLY); |
| + std::string owner; |
| + chromeos::CrosSettings::Get()->GetString(chromeos::kDeviceOwner, &owner); |
| + source->AddString("ownerUserId", UTF8ToUTF16(owner)); |
| + } else { |
| + source->AddString("ownerWarning", string16()); |
| + source->AddString("ownerUserId", string16()); |
| + } |
| #endif |
| source->SetJsonPath("strings.js"); |
| source->AddResourcePath("flags.js", IDR_FLAGS_JS); |
| - |
| - int idr = IDR_FLAGS_HTML; |
| -#if defined (OS_CHROMEOS) |
| - if (!chromeos::UserManager::Get()->IsCurrentUserOwner() && |
| - base::chromeos::IsRunningOnChromeOS()) |
| - idr = IDR_FLAGS_HTML_WARNING; |
| -#endif |
| - source->SetDefaultResource(idr); |
| + source->SetDefaultResource(IDR_FLAGS_HTML); |
| return source; |
| } |
| @@ -87,7 +87,7 @@ content::WebUIDataSource* CreateFlagsUIHTMLSource() { |
| // The handler for Javascript messages for the about:flags page. |
| class FlagsDOMHandler : public WebUIMessageHandler { |
| public: |
| - FlagsDOMHandler() {} |
| + explicit FlagsDOMHandler(PrefService* prefs) : prefs_(prefs) {} |
| virtual ~FlagsDOMHandler() {} |
| // WebUIMessageHandler implementation. |
| @@ -106,6 +106,8 @@ class FlagsDOMHandler : public WebUIMessageHandler { |
| void HandleResetAllFlags(const ListValue* args); |
| private: |
| + PrefService* prefs_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(FlagsDOMHandler); |
| }; |
| @@ -127,8 +129,7 @@ void FlagsDOMHandler::RegisterMessages() { |
| void FlagsDOMHandler::HandleRequestFlagsExperiments(const ListValue* args) { |
| DictionaryValue results; |
| results.Set("flagsExperiments", |
| - about_flags::GetFlagsExperimentsData( |
| - g_browser_process->local_state())); |
| + about_flags::GetFlagsExperimentsData(prefs_)); |
| results.SetBoolean("needsRestart", |
| about_flags::IsRestartNeededToCommitChanges()); |
| web_ui()->CallJavascriptFunction("returnFlagsExperiments", results); |
| @@ -147,7 +148,7 @@ void FlagsDOMHandler::HandleEnableFlagsExperimentMessage( |
| return; |
| about_flags::SetExperimentEnabled( |
| - g_browser_process->local_state(), |
| + prefs_, |
| experiment_internal_name, |
| enable_str == "true"); |
| } |
| @@ -169,10 +170,23 @@ void FlagsDOMHandler::HandleResetAllFlags(const ListValue* args) { |
| /////////////////////////////////////////////////////////////////////////////// |
| FlagsUI::FlagsUI(content::WebUI* web_ui) : WebUIController(web_ui) { |
| - web_ui->AddMessageHandler(new FlagsDOMHandler()); |
| + Profile* profile = Profile::FromWebUI(web_ui); |
| + |
| +#ifdef OS_CHROMEOS |
| + // On Chrome OS the owner can set system wide flags and other users can only |
| + // set flags for their own session. |
| + if (!chromeos::UserManager::Get()->IsCurrentUserOwner()) { |
|
Mattias Nissler (ping if slow)
2013/02/26 16:27:35
Do we run into issues here with racing against the
pastarmovj
2013/02/26 17:23:47
On first owner sign-in maybe but for the rest of t
|
| + web_ui->AddMessageHandler(new FlagsDOMHandler(profile->GetPrefs())); |
| + } else { |
| + web_ui->AddMessageHandler( |
| + new FlagsDOMHandler(g_browser_process->local_state())); |
| + } |
| +#else |
| + web_ui->AddMessageHandler( |
| + new FlagsDOMHandler(g_browser_process->local_state())); |
| +#endif |
| // Set up the about:flags source. |
| - Profile* profile = Profile::FromWebUI(web_ui); |
| content::WebUIDataSource::Add(profile, CreateFlagsUIHTMLSource()); |
| } |
| @@ -187,3 +201,9 @@ base::RefCountedMemory* FlagsUI::GetFaviconResourceBytes( |
| void FlagsUI::RegisterPrefs(PrefRegistrySimple* registry) { |
| registry->RegisterListPref(prefs::kEnabledLabsExperiments); |
| } |
| + |
| +// static |
| +void FlagsUI::RegisterUserPrefs(PrefRegistrySyncable* registry) { |
| + registry->RegisterListPref(prefs::kEnabledLabsExperiments, |
| + PrefRegistrySyncable::UNSYNCABLE_PREF); |
| +} |