Chromium Code Reviews| Index: chrome/browser/about_flags.cc |
| diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc |
| index b69cc82694d5fdf2a522c7f6cbf6e0404c843975..7357b1f0af0c0adcf484bc31986480fc6a19be9c 100644 |
| --- a/chrome/browser/about_flags.cc |
| +++ b/chrome/browser/about_flags.cc |
| @@ -42,6 +42,8 @@ |
| #endif |
| #if defined(OS_CHROMEOS) |
| +#include "chrome/browser/chromeos/settings/cros_settings.h" |
| +#include "chrome/browser/chromeos/settings/cros_settings_names.h" |
| #include "chromeos/chromeos_switches.h" |
| #endif |
| @@ -1284,9 +1286,59 @@ class FlagsState { |
| DISALLOW_COPY_AND_ASSIGN(FlagsState); |
| }; |
| +#if defined(OS_CHROMEOS) |
| +// Extracts the list of enabled lab experiments from device settings and stores |
| +// them in a set. |
| +void GetEnabledFlagsFromDeviceSettings(std::set<std::string>* result) { |
| + const ListValue* enabled_experiments; |
| + if (!chromeos::CrosSettings::Get()->GetList(chromeos::kStartUpFlags, |
| + &enabled_experiments)) { |
| + return; |
| + } |
| + |
| + for (ListValue::const_iterator it = enabled_experiments->begin(); |
| + it != enabled_experiments->end(); |
| + ++it) { |
| + std::string experiment_name; |
| + if (!(*it)->GetAsString(&experiment_name)) { |
| + LOG(WARNING) << "Invalid entry in " << chromeos::kStartUpFlags; |
| + continue; |
| + } |
| + result->insert(experiment_name); |
| + } |
| +} |
| + |
| +// Takes a set of enabled lab experiments and saves it into the device settings |
| +// storage on ChormeOS. |
|
Joao da Silva
2013/03/05 17:46:30
*ChromeOS
pastarmovj
2013/03/06 17:28:31
Done.
|
| +void SetEnabledFlagsToDeviceSettings( |
| + const std::set<std::string>& enabled_experiments) { |
| + scoped_ptr<base::ListValue> experiments_list(new base::ListValue()); |
| + |
| + experiments_list->Clear(); |
|
Joao da Silva
2013/03/05 17:46:30
This is unnecessary.
pastarmovj
2013/03/06 17:28:31
Good catch of typical copy/paste error ;)
|
| + for (std::set<std::string>::const_iterator it = enabled_experiments.begin(); |
| + it != enabled_experiments.end(); |
| + ++it) { |
| + experiments_list->Append(new StringValue(*it)); |
| + } |
| + chromeos::CrosSettings::Get()->Set(chromeos::kStartUpFlags, |
| + *experiments_list); |
| +} |
| +#endif |
| + |
| // Extracts the list of enabled lab experiments from preferences and stores them |
| -// in a set. |
| +// in a set. On ChormeOS |prefs| can be NULL when settings machine level flags. |
|
Joao da Silva
2013/03/05 17:46:30
*ChromeOS, *setting
This function gets flags, doe
pastarmovj
2013/03/06 17:28:31
Done.
|
| void GetEnabledFlags(const PrefService* prefs, std::set<std::string>* result) { |
| +#if defined(OS_CHROMEOS) |
| + // On ChromeOS flags are stored in the device settings blob. |
| + if (!prefs) { |
| + GetEnabledFlagsFromDeviceSettings(result); |
| + return; |
| + } |
| +#else |
| + // Never allow |prefs| to be NULL on other platforms. |
| + CHECK(prefs); |
| +#endif |
| + |
| const ListValue* enabled_experiments = prefs->GetList( |
| prefs::kEnabledLabsExperiments); |
| if (!enabled_experiments) |
| @@ -1304,9 +1356,21 @@ void GetEnabledFlags(const PrefService* prefs, std::set<std::string>* result) { |
| } |
| } |
| -// Takes a set of enabled lab experiments |
| +// Takes a set of enabled lab experiments. On ChormeOS |prefs| can be NULL when |
|
Joao da Silva
2013/03/05 17:46:30
*ChromeOS
pastarmovj
2013/03/06 17:28:31
Done.
|
| +// settings machine level flags. |
|
Joao da Silva
2013/03/05 17:46:30
*setting
pastarmovj
2013/03/06 17:28:31
Done.
|
| void SetEnabledFlags( |
| PrefService* prefs, const std::set<std::string>& enabled_experiments) { |
| +#if defined(OS_CHROMEOS) |
| + // On ChromeOS flags are stored in the device settings blob. |
| + if (!prefs) { |
| + SetEnabledFlagsToDeviceSettings(enabled_experiments); |
| + return; |
| + } |
| +#else |
| + // Never allow |prefs| to be NULL on other platforms. |
| + CHECK(prefs); |
| +#endif |
| + |
| ListPrefUpdate update(prefs, prefs::kEnabledLabsExperiments); |
| ListValue* experiments_list = update.Get(); |