17d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// found in the LICENSE file.
47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/pref_service_flags_storage.h"
67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/prefs/pref_service.h"
81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/prefs/scoped_user_pref_update.h"
97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/values.h"
107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/common/pref_names.h"
117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace about_flags {
137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)PrefServiceFlagsStorage::PrefServiceFlagsStorage(
157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    PrefService *prefs) : prefs_(prefs) {}
167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)PrefServiceFlagsStorage::~PrefServiceFlagsStorage() {}
187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)std::set<std::string> PrefServiceFlagsStorage::GetFlags() {
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const base::ListValue* enabled_experiments = prefs_->GetList(
217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      prefs::kEnabledLabsExperiments);
227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  std::set<std::string> flags;
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  for (base::ListValue::const_iterator it = enabled_experiments->begin();
247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)       it != enabled_experiments->end();
257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)       ++it) {
267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    std::string experiment_name;
277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    if (!(*it)->GetAsString(&experiment_name)) {
287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      LOG(WARNING) << "Invalid entry in " << prefs::kEnabledLabsExperiments;
297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      continue;
307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    }
317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    flags.insert(experiment_name);
327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return flags;
347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)bool PrefServiceFlagsStorage::SetFlags(const std::set<std::string>& flags) {
377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ListPrefUpdate update(prefs_, prefs::kEnabledLabsExperiments);
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::ListValue* experiments_list = update.Get();
397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  experiments_list->Clear();
417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  for (std::set<std::string>::const_iterator it = flags.begin();
427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)       it != flags.end(); ++it) {
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    experiments_list->Append(new base::StringValue(*it));
447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return true;
477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}  // namespace about_flags
50