15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 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 "chrome/service/service_process_prefs.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "base/message_loop/message_loop_proxy.h" 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/prefs/pref_filter.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ServiceProcessPrefs::ServiceProcessPrefs( 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& pref_filename, 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::SequencedTaskRunner* task_runner) 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : prefs_(new JsonPrefStore(pref_filename, 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) task_runner, 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<PrefFilter>())) { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ServiceProcessPrefs::~ServiceProcessPrefs() {} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ServiceProcessPrefs::ReadPrefs() { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_->ReadPrefs(); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ServiceProcessPrefs::WritePrefs() { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_->CommitPendingWrite(); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ServiceProcessPrefs::GetString( 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& key, 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& default_value) const { 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Value* value; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string result; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs_->GetValue(key, &value) || !value->GetAsString(&result)) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return default_value; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ServiceProcessPrefs::SetString(const std::string& key, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& value) { 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs_->SetValue(key, new base::StringValue(value)); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ServiceProcessPrefs::GetBoolean(const std::string& key, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool default_value) const { 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Value* value; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool result = false; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs_->GetValue(key, &value) || !value->GetAsBoolean(&result)) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return default_value; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ServiceProcessPrefs::SetBoolean(const std::string& key, bool value) { 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs_->SetValue(key, new base::FundamentalValue(value)); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int ServiceProcessPrefs::GetInt(const std::string& key, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int default_value) const { 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Value* value; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result = default_value; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs_->GetValue(key, &value) || !value->GetAsInteger(&result)) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return default_value; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ServiceProcessPrefs::SetInt(const std::string& key, int value) { 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs_->SetValue(key, new base::FundamentalValue(value)); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const base::DictionaryValue* ServiceProcessPrefs::GetDictionary( 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& key) const { 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Value* value; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs_->GetValue(key, &value) || 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !value->IsType(base::Value::TYPE_DICTIONARY)) { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return static_cast<const base::DictionaryValue*>(value); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const base::ListValue* ServiceProcessPrefs::GetList( 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& key) const { 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Value* value; 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!prefs_->GetValue(key, &value) || !value->IsType(base::Value::TYPE_LIST)) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return static_cast<const base::ListValue*>(value); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ServiceProcessPrefs::SetValue(const std::string& key, base::Value* value) { 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_->SetValue(key, value); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ServiceProcessPrefs::RemovePref(const std::string& key) { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_->RemoveValue(key); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 101