testing_pref_store.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
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, 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const 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, 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 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) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)size_t TestingPrefStore::NumberOfObservers() const { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return observers_.size(); 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) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::SetValue(const std::string& key, Value* value) { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (prefs_.SetValue(key, value)) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyPrefValueChanged(key); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::SetValueSilently(const std::string& key, Value* value) { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_.SetValue(key, value); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::RemoveValue(const std::string& key) { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (prefs_.RemoveValue(key)) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyPrefValueChanged(key); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::MarkNeedsEmptyValue(const std::string& key) { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestingPrefStore::ReadOnly() const { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return read_only_; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PersistentPrefStore::PrefReadError TestingPrefStore::GetReadError() const { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PersistentPrefStore::PREF_READ_ERROR_NONE; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PersistentPrefStore::PrefReadError TestingPrefStore::ReadPrefs() { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyInitializationCompleted(); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PersistentPrefStore::PREF_READ_ERROR_NONE; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::ReadPrefsAsync(ReadErrorDelegate* error_delegate_raw) { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ReadErrorDelegate> error_delegate(error_delegate_raw); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyInitializationCompleted(); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::SetInitializationCompleted() { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) init_complete_ = true; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyInitializationCompleted(); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::NotifyPrefValueChanged(const std::string& key) { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER(Observer, observers_, OnPrefValueChanged(key)); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::NotifyInitializationCompleted() { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER(Observer, observers_, OnInitializationCompleted(true)); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::ReportValueChanged(const std::string& key) { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER(Observer, observers_, OnPrefValueChanged(key)); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::SetString(const std::string& key, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& value) { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetValue(key, Value::CreateStringValue(value)); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::SetInteger(const std::string& key, int value) { 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetValue(key, Value::CreateIntegerValue(value)); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::SetBoolean(const std::string& key, bool value) { 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetValue(key, Value::CreateBooleanValue(value)); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestingPrefStore::GetString(const std::string& key, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* value) const { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Value* stored_value; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs_.GetValue(key, &stored_value) || !stored_value) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return stored_value->GetAsString(value); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestingPrefStore::GetInteger(const std::string& key, int* value) const { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Value* stored_value; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs_.GetValue(key, &stored_value) || !stored_value) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return stored_value->GetAsInteger(value); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestingPrefStore::GetBoolean(const std::string& key, bool* value) const { 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Value* stored_value; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs_.GetValue(key, &stored_value) || !stored_value) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return stored_value->GetAsBoolean(value); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestingPrefStore::set_read_only(bool read_only) { 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) read_only_ = read_only; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestingPrefStore::~TestingPrefStore() {} 136