Refactor the storage layer out of about_flags.
This step is a preparation for moving owner flags storage from local state to
signed settings.
BUG=221353
TEST=existing about_flags tests still pass.
Review URL: https://chromiumcodereview.appspot.com/16542004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@205854 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 10c2540..834073d 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -12,15 +12,13 @@
#include "base/command_line.h"
#include "base/memory/singleton.h"
-#include "base/prefs/pref_service.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
#include "cc/base/switches.h"
-#include "chrome/browser/prefs/scoped_user_pref_update.h"
+#include "chrome/browser/flags_storage.h"
#include "chrome/common/chrome_content_client.h"
#include "chrome/common/chrome_switches.h"
-#include "chrome/common/pref_names.h"
#include "content/public/browser/user_metrics.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
@@ -1556,13 +1554,16 @@
class FlagsState {
public:
FlagsState() : needs_restart_(false) {}
- void ConvertFlagsToSwitches(PrefService* prefs, CommandLine* command_line);
+ void ConvertFlagsToSwitches(FlagsStorage* flags_storage,
+ CommandLine* command_line);
bool IsRestartNeededToCommitChanges();
void SetExperimentEnabled(
- PrefService* prefs, const std::string& internal_name, bool enable);
+ FlagsStorage* flags_storage,
+ const std::string& internal_name,
+ bool enable);
void RemoveFlagsSwitches(
std::map<std::string, CommandLine::StringType>* switch_list);
- void ResetAllFlags(PrefService* prefs);
+ void ResetAllFlags(FlagsStorage* flags_storage);
void reset();
// Returns the singleton instance of this class
@@ -1577,40 +1578,6 @@
DISALLOW_COPY_AND_ASSIGN(FlagsState);
};
-// 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) {
- const ListValue* enabled_experiments = prefs->GetList(
- prefs::kEnabledLabsExperiments);
- if (!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 " << prefs::kEnabledLabsExperiments;
- continue;
- }
- result->insert(experiment_name);
- }
-}
-
-// Takes a set of enabled lab experiments
-void SetEnabledFlags(
- PrefService* prefs, const std::set<std::string>& enabled_experiments) {
- ListPrefUpdate update(prefs, prefs::kEnabledLabsExperiments);
- ListValue* experiments_list = update.Get();
-
- experiments_list->Clear();
- for (std::set<std::string>::const_iterator it = enabled_experiments.begin();
- it != enabled_experiments.end();
- ++it) {
- experiments_list->Append(new StringValue(*it));
- }
-}
-
// Adds the internal names for the specified experiment to |names|.
void AddInternalName(const Experiment& e, std::set<std::string>* names) {
if (e.type == Experiment::SINGLE_VALUE) {
@@ -1654,15 +1621,14 @@
// Removes all experiments from prefs::kEnabledLabsExperiments that are
// unknown, to prevent this list to become very long as experiments are added
// and removed.
-void SanitizeList(PrefService* prefs) {
+void SanitizeList(FlagsStorage* flags_storage) {
std::set<std::string> known_experiments;
for (size_t i = 0; i < num_experiments; ++i) {
DCHECK(ValidateExperiment(experiments[i]));
AddInternalName(experiments[i], &known_experiments);
}
- std::set<std::string> enabled_experiments;
- GetEnabledFlags(prefs, &enabled_experiments);
+ std::set<std::string> enabled_experiments = flags_storage->GetFlags();
std::set<std::string> new_enabled_experiments;
std::set_intersection(
@@ -1671,20 +1637,20 @@
std::inserter(new_enabled_experiments, new_enabled_experiments.begin()));
if (new_enabled_experiments != enabled_experiments)
- SetEnabledFlags(prefs, new_enabled_experiments);
+ flags_storage->SetFlags(new_enabled_experiments);
}
void GetSanitizedEnabledFlags(
- PrefService* prefs, std::set<std::string>* result) {
- SanitizeList(prefs);
- GetEnabledFlags(prefs, result);
+ FlagsStorage* flags_storage, std::set<std::string>* result) {
+ SanitizeList(flags_storage);
+ *result = flags_storage->GetFlags();
}
// Variant of GetSanitizedEnabledFlags that also removes any flags that aren't
// enabled on the current platform.
void GetSanitizedEnabledFlagsForCurrentPlatform(
- PrefService* prefs, std::set<std::string>* result) {
- GetSanitizedEnabledFlags(prefs, result);
+ FlagsStorage* flags_storage, std::set<std::string>* result) {
+ GetSanitizedEnabledFlags(flags_storage, result);
// Filter out any experiments that aren't enabled on the current platform. We
// don't remove these from prefs else syncing to a platform with a different
@@ -1754,16 +1720,18 @@
return l10n_util::GetStringUTF16(description_id);
}
-void ConvertFlagsToSwitches(PrefService* prefs, CommandLine* command_line) {
- FlagsState::GetInstance()->ConvertFlagsToSwitches(prefs, command_line);
+void ConvertFlagsToSwitches(FlagsStorage* flags_storage,
+ CommandLine* command_line) {
+ FlagsState::GetInstance()->ConvertFlagsToSwitches(flags_storage,
+ command_line);
}
-void GetFlagsExperimentsData(PrefService* prefs,
+void GetFlagsExperimentsData(FlagsStorage* flags_storage,
FlagAccess access,
base::ListValue* supported_experiments,
base::ListValue* unsupported_experiments) {
std::set<std::string> enabled_experiments;
- GetSanitizedEnabledFlags(prefs, &enabled_experiments);
+ GetSanitizedEnabledFlags(flags_storage, &enabled_experiments);
int current_platform = GetCurrentPlatform();
@@ -1814,9 +1782,11 @@
return FlagsState::GetInstance()->IsRestartNeededToCommitChanges();
}
-void SetExperimentEnabled(
- PrefService* prefs, const std::string& internal_name, bool enable) {
- FlagsState::GetInstance()->SetExperimentEnabled(prefs, internal_name, enable);
+void SetExperimentEnabled(FlagsStorage* flags_storage,
+ const std::string& internal_name,
+ bool enable) {
+ FlagsState::GetInstance()->SetExperimentEnabled(flags_storage,
+ internal_name, enable);
}
void RemoveFlagsSwitches(
@@ -1824,8 +1794,8 @@
FlagsState::GetInstance()->RemoveFlagsSwitches(switch_list);
}
-void ResetAllFlags(PrefService* prefs) {
- FlagsState::GetInstance()->ResetAllFlags(prefs);
+void ResetAllFlags(FlagsStorage* flags_storage) {
+ FlagsState::GetInstance()->ResetAllFlags(flags_storage);
}
int GetCurrentPlatform() {
@@ -1844,9 +1814,8 @@
#endif
}
-void RecordUMAStatistics(const PrefService* prefs) {
- std::set<std::string> flags;
- GetEnabledFlags(prefs, &flags);
+void RecordUMAStatistics(FlagsStorage* flags_storage) {
+ std::set<std::string> flags = flags_storage->GetFlags();
for (std::set<std::string>::iterator it = flags.begin(); it != flags.end();
++it) {
std::string action("AboutFlags_");
@@ -1877,13 +1846,14 @@
}
void FlagsState::ConvertFlagsToSwitches(
- PrefService* prefs, CommandLine* command_line) {
+ FlagsStorage* flags_storage, CommandLine* command_line) {
if (command_line->HasSwitch(switches::kNoExperiments))
return;
std::set<std::string> enabled_experiments;
- GetSanitizedEnabledFlagsForCurrentPlatform(prefs, &enabled_experiments);
+ GetSanitizedEnabledFlagsForCurrentPlatform(flags_storage,
+ &enabled_experiments);
NameToSwitchAndValueMap name_to_switch_map;
for (size_t i = 0; i < num_experiments; ++i) {
@@ -1941,8 +1911,9 @@
return needs_restart_;
}
-void FlagsState::SetExperimentEnabled(
- PrefService* prefs, const std::string& internal_name, bool enable) {
+void FlagsState::SetExperimentEnabled(FlagsStorage* flags_storage,
+ const std::string& internal_name,
+ bool enable) {
size_t at_index = internal_name.find(testing::kMultiSeparator);
if (at_index != std::string::npos) {
DCHECK(enable);
@@ -1950,20 +1921,20 @@
// currently selected choice.
DCHECK_NE(at_index, 0u);
const std::string experiment_name = internal_name.substr(0, at_index);
- SetExperimentEnabled(prefs, experiment_name, false);
+ SetExperimentEnabled(flags_storage, experiment_name, false);
// And enable the new choice, if it is not the default first choice.
if (internal_name != experiment_name + "@0") {
std::set<std::string> enabled_experiments;
- GetSanitizedEnabledFlags(prefs, &enabled_experiments);
+ GetSanitizedEnabledFlags(flags_storage, &enabled_experiments);
needs_restart_ |= enabled_experiments.insert(internal_name).second;
- SetEnabledFlags(prefs, enabled_experiments);
+ flags_storage->SetFlags(enabled_experiments);
}
return;
}
std::set<std::string> enabled_experiments;
- GetSanitizedEnabledFlags(prefs, &enabled_experiments);
+ GetSanitizedEnabledFlags(flags_storage, &enabled_experiments);
const Experiment* e = NULL;
for (size_t i = 0; i < num_experiments; ++i) {
@@ -1998,7 +1969,7 @@
}
}
- SetEnabledFlags(prefs, enabled_experiments);
+ flags_storage->SetFlags(enabled_experiments);
}
void FlagsState::RemoveFlagsSwitches(
@@ -2009,11 +1980,11 @@
}
}
-void FlagsState::ResetAllFlags(PrefService* prefs) {
+void FlagsState::ResetAllFlags(FlagsStorage* flags_storage) {
needs_restart_ = true;
std::set<std::string> no_experiments;
- SetEnabledFlags(prefs, no_experiments);
+ flags_storage->SetFlags(no_experiments);
}
void FlagsState::reset() {