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