summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpastarmovj@chromium.org <pastarmovj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-18 11:53:58 +0000
committerpastarmovj@chromium.org <pastarmovj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-18 11:53:58 +0000
commit37736bd0d541a6fcf6511a41148dc31890d878de (patch)
treecf164258bec32be06ff5dfd480f02c2c6e472782
parent48bbbef75740c42b8d960b59f29cafcf190dc5f8 (diff)
downloadchromium_src-37736bd0d541a6fcf6511a41148dc31890d878de.zip
chromium_src-37736bd0d541a6fcf6511a41148dc31890d878de.tar.gz
chromium_src-37736bd0d541a6fcf6511a41148dc31890d878de.tar.bz2
Add differentiation between owner only and common flags on ChromeOS.
Some flags require to be active on the login screen and those can only be activated from the owner account. BUG=chromium-os:39248 TEST=Open about:flags from non-owner account and check that "ChromeOS (owner only)" flags are grayed out. Review URL: https://chromiumcodereview.appspot.com/13467023 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@194890 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/about_flags.cc28
-rw-r--r--chrome/browser/about_flags.h10
-rw-r--r--chrome/browser/about_flags_unittest.cc6
-rw-r--r--chrome/browser/ui/webui/flags_ui.cc16
4 files changed, 42 insertions, 18 deletions
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 7cdcac7..dd51c91 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -86,6 +86,7 @@ void AddOsStrings(unsigned bitmask, ListValue* list) {
{kOsLinux, "Linux"},
{kOsCrOS, "Chrome OS"},
{kOsAndroid, "Android"},
+ {kOsCrOSOwnerOnly, "Chrome OS (owner only)"},
};
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kBitsToOs); ++i)
if (bitmask & kBitsToOs[i].bit)
@@ -326,7 +327,7 @@ const Experiment kExperiments[] = {
"threaded-compositing-mode",
IDS_FLAGS_THREADED_COMPOSITING_MODE_NAME,
IDS_FLAGS_THREADED_COMPOSITING_MODE_DESCRIPTION,
- kOsDesktop & ~kOsCrOS,
+ kOsMac | kOsWin | kOsLinux,
ENABLE_DISABLE_VALUE_TYPE(switches::kEnableThreadedCompositing,
switches::kDisableThreadedCompositing)
},
@@ -709,7 +710,7 @@ const Experiment kExperiments[] = {
"enable-managed-users",
IDS_FLAGS_ENABLE_LOCALLY_MANAGED_USERS_NAME,
IDS_FLAGS_ENABLE_LOCALLY_MANAGED_USERS_DESCRIPTION,
- kOsAll,
+ kOsMac | kOsWin | kOsLinux | kOsAndroid | kOsCrOSOwnerOnly,
SINGLE_VALUE_TYPE(switches::kEnableManagedUsers)
},
#if defined(USE_ASH)
@@ -992,28 +993,28 @@ const Experiment kExperiments[] = {
"disable-boot-animation",
IDS_FLAGS_DISABLE_BOOT_ANIMATION,
IDS_FLAGS_DISABLE_BOOT_ANIMATION_DESCRIPTION,
- kOsCrOS,
+ kOsCrOSOwnerOnly,
SINGLE_VALUE_TYPE(switches::kDisableBootAnimation),
},
{
"disable-boot-animation2",
IDS_FLAGS_DISABLE_BOOT_ANIMATION2,
IDS_FLAGS_DISABLE_BOOT_ANIMATION2_DESCRIPTION,
- kOsCrOS,
+ kOsCrOSOwnerOnly,
SINGLE_VALUE_TYPE(ash::switches::kAshDisableBootAnimation2),
},
{
"boot-animation-fucntion",
IDS_FLAGS_ASH_BOOT_ANIMATION_FUNCTION,
IDS_FLAGS_ASH_BOOT_ANIMATION_FUNCTION_DESCRIPTION,
- kOsCrOS,
+ kOsCrOSOwnerOnly,
MULTI_VALUE_TYPE(kAshBootAnimationFunction),
},
{
"captive-portal-detector",
IDS_FLAGS_CAPTIVE_PORTAL_DETECTOR_NAME,
IDS_FLAGS_CAPTIVE_PORTAL_DETECTOR_DESCRIPTION,
- kOsCrOS,
+ kOsCrOSOwnerOnly,
MULTI_VALUE_TYPE(kChromeCaptivePortalDetectionChoices),
},
{
@@ -1041,7 +1042,7 @@ const Experiment kExperiments[] = {
"disable-app-mode",
IDS_FLAGS_DISABLE_KIOSK_APPS_NAME,
IDS_FLAGS_DISABLE_KIOSK_APPS_DESCRIPTION,
- kOsCrOS,
+ kOsCrOSOwnerOnly,
SINGLE_VALUE_TYPE(switches::kDisableAppMode),
},
{
@@ -1496,6 +1497,10 @@ void GetSanitizedEnabledFlagsForCurrentPlatform(
for (size_t i = 0; i < num_experiments; ++i) {
if (experiments[i].supported_platforms & current_platform)
AddInternalName(experiments[i], &platform_experiments);
+#if defined(OS_CHROMEOS)
+ if (experiments[i].supported_platforms & kOsCrOSOwnerOnly)
+ AddInternalName(experiments[i], &platform_experiments);
+#endif
}
std::set<std::string> new_enabled_experiments;
@@ -1556,7 +1561,7 @@ void ConvertFlagsToSwitches(PrefService* prefs, CommandLine* command_line) {
FlagsState::GetInstance()->ConvertFlagsToSwitches(prefs, command_line);
}
-ListValue* GetFlagsExperimentsData(PrefService* prefs) {
+ListValue* GetFlagsExperimentsData(PrefService* prefs, FlagAccess access) {
std::set<std::string> enabled_experiments;
GetSanitizedEnabledFlags(prefs, &enabled_experiments);
@@ -1582,7 +1587,12 @@ ListValue* GetFlagsExperimentsData(PrefService* prefs) {
data->SetString("description",
l10n_util::GetStringUTF16(
experiment.visible_description_id));
- bool supported = !!(experiment.supported_platforms & current_platform);
+ bool supported = (experiment.supported_platforms & current_platform) != 0;
+#if defined(OS_CHROMEOS)
+ if (access == kOwnerAccessToFlags &&
+ (experiment.supported_platforms & kOsCrOSOwnerOnly) != 0)
+ supported = true;
+#endif
data->SetBoolean("supported", supported);
ListValue* supported_platforms = new ListValue();
diff --git a/chrome/browser/about_flags.h b/chrome/browser/about_flags.h
index 2225d3d..3834d1c 100644
--- a/chrome/browser/about_flags.h
+++ b/chrome/browser/about_flags.h
@@ -22,7 +22,7 @@ namespace about_flags {
// Enumeration of OSs.
// This is exposed only for testing.
enum { kOsMac = 1 << 0, kOsWin = 1 << 1, kOsLinux = 1 << 2 , kOsCrOS = 1 << 3,
- kOsAndroid = 1 << 4 };
+ kOsAndroid = 1 << 4, kOsCrOSOwnerOnly = 1 << 5 };
// Experiment is used internally by about_flags to describe an experiment (and
// for testing).
@@ -107,8 +107,14 @@ struct Experiment {
// commandline flags belonging to the active experiments to |command_line|.
void ConvertFlagsToSwitches(PrefService* prefs, CommandLine* command_line);
+// Differentiate between generic flags available on a per session base and flags
+// that influence the whole machine and can be said by the admin only. This flag
+// is relevant for ChromeOS for now only and dictates whether entries marked
+// with the |kOsCrOSOwnerOnly| label should be enabled in the UI or not.
+enum FlagAccess { kGeneralAccessFlagsOnly, kOwnerAccessToFlags };
+
// Get a list of all available experiments. The caller owns the result.
-base::ListValue* GetFlagsExperimentsData(PrefService* prefs);
+base::ListValue* GetFlagsExperimentsData(PrefService* prefs, FlagAccess access);
// Returns true if one of the experiment flags has been flipped since startup.
bool IsRestartNeededToCommitChanges();
diff --git a/chrome/browser/about_flags_unittest.cc b/chrome/browser/about_flags_unittest.cc
index 1f6ef04..036c707 100644
--- a/chrome/browser/about_flags_unittest.cc
+++ b/chrome/browser/about_flags_unittest.cc
@@ -267,7 +267,8 @@ TEST_F(AboutFlagsTest, PersistAndPrune) {
EXPECT_FALSE(command_line.HasSwitch(kSwitch3));
// Experiment 3 should show still be persisted in preferences though.
- scoped_ptr<ListValue> switch_prefs(GetFlagsExperimentsData(&prefs_));
+ scoped_ptr<ListValue> switch_prefs(
+ GetFlagsExperimentsData(&prefs_, kOwnerAccessToFlags));
ASSERT_TRUE(switch_prefs.get());
EXPECT_EQ(arraysize(kExperiments), switch_prefs->GetSize());
}
@@ -317,7 +318,8 @@ TEST_F(AboutFlagsTest, CheckValues) {
#endif
// And it should persist
- scoped_ptr<ListValue> switch_prefs(GetFlagsExperimentsData(&prefs_));
+ scoped_ptr<ListValue> switch_prefs(
+ GetFlagsExperimentsData(&prefs_, kOwnerAccessToFlags));
ASSERT_TRUE(switch_prefs.get());
EXPECT_EQ(arraysize(kExperiments), switch_prefs->GetSize());
}
diff --git a/chrome/browser/ui/webui/flags_ui.cc b/chrome/browser/ui/webui/flags_ui.cc
index e8d53e1..9f3b65a 100644
--- a/chrome/browser/ui/webui/flags_ui.cc
+++ b/chrome/browser/ui/webui/flags_ui.cc
@@ -88,7 +88,8 @@ content::WebUIDataSource* CreateFlagsUIHTMLSource() {
// The handler for Javascript messages for the about:flags page.
class FlagsDOMHandler : public WebUIMessageHandler {
public:
- explicit FlagsDOMHandler(PrefService* prefs) : prefs_(prefs) {}
+ explicit FlagsDOMHandler(PrefService* prefs, about_flags::FlagAccess access)
+ : prefs_(prefs), access_(access) {}
virtual ~FlagsDOMHandler() {}
// WebUIMessageHandler implementation.
@@ -108,6 +109,7 @@ class FlagsDOMHandler : public WebUIMessageHandler {
private:
PrefService* prefs_;
+ about_flags::FlagAccess access_;
DISALLOW_COPY_AND_ASSIGN(FlagsDOMHandler);
};
@@ -130,7 +132,7 @@ void FlagsDOMHandler::RegisterMessages() {
void FlagsDOMHandler::HandleRequestFlagsExperiments(const ListValue* args) {
DictionaryValue results;
results.Set("flagsExperiments",
- about_flags::GetFlagsExperimentsData(prefs_));
+ about_flags::GetFlagsExperimentsData(prefs_, access_));
results.SetBoolean("needsRestart",
about_flags::IsRestartNeededToCommitChanges());
web_ui()->CallJavascriptFunction("returnFlagsExperiments", results);
@@ -181,7 +183,8 @@ FlagsUI::FlagsUI(content::WebUI* web_ui)
weak_factory_.GetWeakPtr(), profile));
#else
web_ui->AddMessageHandler(
- new FlagsDOMHandler(g_browser_process->local_state()));
+ new FlagsDOMHandler(g_browser_process->local_state(),
+ about_flags::kOwnerAccessToFlags));
// Set up the about:flags source.
content::WebUIDataSource::Add(profile, CreateFlagsUIHTMLSource());
@@ -217,10 +220,13 @@ void FlagsUI::FinishInitialization(
// 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()));
+ web_ui()->AddMessageHandler(
+ new FlagsDOMHandler(profile->GetPrefs(),
+ about_flags::kGeneralAccessFlagsOnly));
} else {
web_ui()->AddMessageHandler(
- new FlagsDOMHandler(g_browser_process->local_state()));
+ new FlagsDOMHandler(g_browser_process->local_state(),
+ about_flags::kOwnerAccessToFlags));
// 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))