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/pref_service_flags_storage.cc b/chrome/browser/pref_service_flags_storage.cc
new file mode 100644
index 0000000..7cc1f5b
--- /dev/null
+++ b/chrome/browser/pref_service_flags_storage.cc
@@ -0,0 +1,49 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/pref_service_flags_storage.h"
+
+#include "base/prefs/pref_service.h"
+#include "base/values.h"
+#include "chrome/browser/prefs/scoped_user_pref_update.h"
+#include "chrome/common/pref_names.h"
+
+namespace about_flags {
+
+PrefServiceFlagsStorage::PrefServiceFlagsStorage(
+ PrefService *prefs) : prefs_(prefs) {}
+
+PrefServiceFlagsStorage::~PrefServiceFlagsStorage() {}
+
+std::set<std::string> PrefServiceFlagsStorage::GetFlags() {
+ const ListValue* enabled_experiments = prefs_->GetList(
+ prefs::kEnabledLabsExperiments);
+ std::set<std::string> flags;
+ 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;
+ }
+ flags.insert(experiment_name);
+ }
+ return flags;
+}
+
+bool PrefServiceFlagsStorage::SetFlags(std::set<std::string> flags) {
+ ListPrefUpdate update(prefs_, prefs::kEnabledLabsExperiments);
+ ListValue* experiments_list = update.Get();
+
+ experiments_list->Clear();
+ for (std::set<std::string>::const_iterator it = flags.begin();
+ it != flags.end(); ++it) {
+ experiments_list->Append(new StringValue(*it));
+ }
+
+ return true;
+}
+
+} // namespace about_flags