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); |
+} |