Index: chrome/browser/about_flags.cc |
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc |
index 366e173ce396597b250610bfe640e6b5d5799012..814ced82be70bbccb7f30fe455ff46bff2a551c6 100644 |
--- a/chrome/browser/about_flags.cc |
+++ b/chrome/browser/about_flags.cc |
@@ -24,6 +24,12 @@ namespace { |
const unsigned kOsAll = kOsMac | kOsWin | kOsLinux | kOsCrOS; |
+// Names for former Chrome OS Labs experiments, shared with prefs migration |
+// code. |
+const char kMediaPlayerExperimentName[] = "media-player"; |
+const char kAdvancedFileSystemExperimentName[] = "advanced-file-system"; |
+const char kVerticalTabsExperimentName[] = "vertical-tabs"; |
+ |
const Experiment kExperiments[] = { |
{ |
"expose-for-tabs", // Do not change; see above. |
@@ -38,12 +44,34 @@ const Experiment kExperiments[] = { |
#endif |
}, |
{ |
- "vertical-tabs", // Do not change; see above. |
+ kMediaPlayerExperimentName, |
+ IDS_FLAGS_MEDIA_PLAYER_NAME, |
+ IDS_FLAGS_MEDIA_PLAYER_DESCRIPTION, |
+ kOsCrOS, |
+#if defined(OS_CHROMEOS) |
+ // The switch exists only on Chrome OS. |
+ switches::kEnableMediaPlayer |
+#else |
+ "" |
+#endif |
+ }, |
+ { |
+ kAdvancedFileSystemExperimentName, |
+ IDS_FLAGS_ADVANCED_FS_NAME, |
+ IDS_FLAGS_ADVANCED_FS_DESCRIPTION, |
+ kOsCrOS, |
+#if defined(OS_CHROMEOS) |
+ // The switch exists only on Chrome OS. |
+ switches::kEnableAdvancedFileSystem |
+#else |
+ "" |
+#endif |
+ }, |
+ { |
+ kVerticalTabsExperimentName, |
IDS_FLAGS_SIDE_TABS_NAME, |
IDS_FLAGS_SIDE_TABS_DESCRIPTION, |
- // TODO(thakis): Move sidetabs to about:flags on ChromeOS |
- // http://crbug.com/57634 |
- kOsWin, |
+ kOsWin | kOsCrOS, |
switches::kEnableVerticalTabs |
}, |
{ |
@@ -228,6 +256,25 @@ class FlagsState { |
DISALLOW_COPY_AND_ASSIGN(FlagsState); |
}; |
+#if defined(OS_CHROMEOS) |
+// Migrates Chrome OS Labs settings to experiments adding flags to enabled |
+// experiment list if the corresponding pref is on. |
+void MigrateChromeOSLabsPrefs(PrefService* prefs, |
+ std::set<std::string>* result) { |
+ DCHECK(prefs); |
+ DCHECK(result); |
+ if (prefs->GetBoolean(prefs::kLabsMediaplayerEnabled)) |
+ result->insert(kMediaPlayerExperimentName); |
+ if (prefs->GetBoolean(prefs::kLabsAdvancedFilesystemEnabled)) |
+ result->insert(kAdvancedFileSystemExperimentName); |
+ if (prefs->GetBoolean(prefs::kUseVerticalTabs)) |
+ result->insert(kVerticalTabsExperimentName); |
+ prefs->SetBoolean(prefs::kLabsMediaplayerEnabled, false); |
+ prefs->SetBoolean(prefs::kLabsAdvancedFilesystemEnabled, false); |
+ prefs->SetBoolean(prefs::kUseVerticalTabs, false); |
+} |
+#endif |
+ |
// Extracts the list of enabled lab experiments from preferences and stores them |
// in a set. |
void GetEnabledFlags(const PrefService* prefs, std::set<std::string>* result) { |
@@ -387,6 +434,13 @@ void FlagsState::ConvertFlagsToSwitches( |
return; |
std::set<std::string> enabled_experiments; |
+ |
+#if defined(OS_CHROMEOS) |
+ // Some experiments were implemented via prefs on Chrome OS and we want to |
+ // seamlessly migrate these prefs to about:flags for updated users. |
+ MigrateChromeOSLabsPrefs(prefs, &enabled_experiments); |
+#endif |
+ |
GetSanitizedEnabledFlagsForCurrentPlatform(prefs, &enabled_experiments); |
std::map<std::string, const Experiment*> experiment_map; |