Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(319)

Unified Diff: chrome/browser/ui/webui/flags_ui.cc

Issue 12330137: Allow normal users to change per session flags. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased to ToT. Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« chrome/browser/resources/flags.html ('K') | « chrome/browser/ui/webui/flags_ui.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
+}
« chrome/browser/resources/flags.html ('K') | « chrome/browser/ui/webui/flags_ui.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698