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

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: Fix include for a moved file. Created 7 years, 9 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
« no previous file with comments | « 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..9b639c7d24ca1a3afb4b054fab56f24cf31288e4 100644
--- a/chrome/browser/ui/webui/flags_ui.cc
+++ b/chrome/browser/ui/webui/flags_ui.cc
@@ -10,6 +10,7 @@
#include "base/bind_helpers.h"
#include "base/memory/ref_counted_memory.h"
#include "base/prefs/pref_registry_simple.h"
+#include "base/prefs/pref_service.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
#include "chrome/browser/about_flags.h"
@@ -33,6 +34,7 @@
#include "base/chromeos/chromeos_version.h"
#include "chrome/browser/chromeos/login/user_manager.h"
#include "chrome/browser/chromeos/settings/cros_settings.h"
+#include "components/user_prefs/pref_registry_syncable.h"
#endif
using content::WebContents;
@@ -58,23 +60,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.
+ std::string owner;
+ chromeos::CrosSettings::Get()->GetString(chromeos::kDeviceOwner, &owner);
+ source->AddString("ownerWarning",
+ l10n_util::GetStringFUTF16(IDS_SYSTEM_FLAGS_OWNER_ONLY,
+ UTF8ToUTF16(owner)));
+ } else {
+ source->AddString("ownerWarning", 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 +88,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 +107,8 @@ class FlagsDOMHandler : public WebUIMessageHandler {
void HandleResetAllFlags(const ListValue* args);
private:
+ PrefService* prefs_;
+
DISALLOW_COPY_AND_ASSIGN(FlagsDOMHandler);
};
@@ -127,8 +130,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 +149,7 @@ void FlagsDOMHandler::HandleEnableFlagsExperimentMessage(
return;
about_flags::SetExperimentEnabled(
- g_browser_process->local_state(),
+ prefs_,
experiment_internal_name,
enable_str == "true");
}
@@ -168,12 +170,25 @@ void FlagsDOMHandler::HandleResetAllFlags(const ListValue* args) {
//
///////////////////////////////////////////////////////////////////////////////
-FlagsUI::FlagsUI(content::WebUI* web_ui) : WebUIController(web_ui) {
- web_ui->AddMessageHandler(new FlagsDOMHandler());
+FlagsUI::FlagsUI(content::WebUI* web_ui)
+ : WebUIController(web_ui),
+ ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) {
+ Profile* profile = Profile::FromWebUI(web_ui);
+
+#ifdef OS_CHROMEOS
+ chromeos::DeviceSettingsService::Get()->GetOwnershipStatusAsync(
+ base::Bind(&FlagsUI::FinishInitialization,
+ weak_factory_.GetWeakPtr(), profile));
+#else
+ web_ui->AddMessageHandler(
+ new FlagsDOMHandler(g_browser_process->local_state()));
// Set up the about:flags source.
- Profile* profile = Profile::FromWebUI(web_ui);
content::WebUIDataSource::Add(profile, CreateFlagsUIHTMLSource());
+#endif
+}
+
+FlagsUI::~FlagsUI() {
}
// static
@@ -187,3 +202,32 @@ base::RefCountedMemory* FlagsUI::GetFaviconResourceBytes(
void FlagsUI::RegisterPrefs(PrefRegistrySimple* registry) {
registry->RegisterListPref(prefs::kEnabledLabsExperiments);
}
+
+#ifdef OS_CHROMEOS
+// static
+void FlagsUI::RegisterUserPrefs(PrefRegistrySyncable* registry) {
+ registry->RegisterListPref(prefs::kEnabledLabsExperiments,
+ PrefRegistrySyncable::UNSYNCABLE_PREF);
+}
+
+void FlagsUI::FinishInitialization(
+ Profile* profile,
+ chromeos::DeviceSettingsService::OwnershipStatus status,
+ bool current_user_is_owner) {
+ // On Chrome OS the owner can set system wide flags and other users can only
+ // set flags for their own session.
+ if (!current_user_is_owner) {
+ web_ui()->AddMessageHandler(new FlagsDOMHandler(profile->GetPrefs()));
+ } else {
+ web_ui()->AddMessageHandler(
+ new FlagsDOMHandler(g_browser_process->local_state()));
+ // If the owner managed to set the flags pref on his own profile clear it
+ // because it will never be accessible anymore.
+ if (profile->GetPrefs()->HasPrefPath(prefs::kEnabledLabsExperiments))
+ profile->GetPrefs()->ClearPref(prefs::kEnabledLabsExperiments);
+ }
+
+ // Set up the about:flags source.
+ content::WebUIDataSource::Add(profile, CreateFlagsUIHTMLSource());
+}
+#endif
« no previous file with comments | « 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