testing_pref_store.cc revision 424c4d7b64af9d0d8fd9624f381f469654d5e3d2
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/prefs/testing_pref_store.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestingPrefStore::TestingPrefStore() 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : read_only_(true), 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) init_complete_(false) { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestingPrefStore::GetValue(const std::string& key, 167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const base::Value** value) const { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs_.GetValue(key, value); 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestingPrefStore::GetMutableValue(const std::string& key, 217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::Value** value) { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs_.GetValue(key, value); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::AddObserver(PrefStore::Observer* observer) { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observers_.AddObserver(observer); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::RemoveObserver(PrefStore::Observer* observer) { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observers_.RemoveObserver(observer); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 33424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)bool TestingPrefStore::HasObservers() const { 34424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return observers_.might_have_observers(); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestingPrefStore::IsInitializationComplete() const { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return init_complete_; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void TestingPrefStore::SetValue(const std::string& key, base::Value* value) { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (prefs_.SetValue(key, value)) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyPrefValueChanged(key); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void TestingPrefStore::SetValueSilently(const std::string& key, 477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::Value* value) { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_.SetValue(key, value); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::RemoveValue(const std::string& key) { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (prefs_.RemoveValue(key)) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyPrefValueChanged(key); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::MarkNeedsEmptyValue(const std::string& key) { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestingPrefStore::ReadOnly() const { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return read_only_; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PersistentPrefStore::PrefReadError TestingPrefStore::GetReadError() const { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PersistentPrefStore::PREF_READ_ERROR_NONE; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PersistentPrefStore::PrefReadError TestingPrefStore::ReadPrefs() { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyInitializationCompleted(); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PersistentPrefStore::PREF_READ_ERROR_NONE; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::ReadPrefsAsync(ReadErrorDelegate* error_delegate_raw) { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ReadErrorDelegate> error_delegate(error_delegate_raw); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyInitializationCompleted(); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::SetInitializationCompleted() { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) init_complete_ = true; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyInitializationCompleted(); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::NotifyPrefValueChanged(const std::string& key) { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER(Observer, observers_, OnPrefValueChanged(key)); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::NotifyInitializationCompleted() { 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER(Observer, observers_, OnInitializationCompleted(true)); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::ReportValueChanged(const std::string& key) { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER(Observer, observers_, OnPrefValueChanged(key)); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::SetString(const std::string& key, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& value) { 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetValue(key, new base::StringValue(value)); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::SetInteger(const std::string& key, int value) { 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetValue(key, new base::FundamentalValue(value)); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::SetBoolean(const std::string& key, bool value) { 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetValue(key, new base::FundamentalValue(value)); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestingPrefStore::GetString(const std::string& key, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* value) const { 1097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const base::Value* stored_value; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs_.GetValue(key, &stored_value) || !stored_value) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return stored_value->GetAsString(value); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestingPrefStore::GetInteger(const std::string& key, int* value) const { 1177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const base::Value* stored_value; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs_.GetValue(key, &stored_value) || !stored_value) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return stored_value->GetAsInteger(value); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestingPrefStore::GetBoolean(const std::string& key, bool* value) const { 1257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const base::Value* stored_value; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs_.GetValue(key, &stored_value) || !stored_value) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return stored_value->GetAsBoolean(value); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::set_read_only(bool read_only) { 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) read_only_ = read_only; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestingPrefStore::~TestingPrefStore() {} 137