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" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ServiceProcessPrefs::ServiceProcessPrefs( 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& pref_filename, 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::SequencedTaskRunner* task_runner) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : prefs_(new JsonPrefStore(pref_filename, task_runner)) { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ServiceProcessPrefs::~ServiceProcessPrefs() {} 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ServiceProcessPrefs::ReadPrefs() { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_->ReadPrefs(); 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ServiceProcessPrefs::WritePrefs() { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_->CommitPendingWrite(); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ServiceProcessPrefs::GetString( 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& key, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& default_value) const { 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Value* value; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string result; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs_->GetValue(key, &value) || !value->GetAsString(&result)) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return default_value; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ServiceProcessPrefs::SetString(const std::string& key, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& value) { 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs_->SetValue(key, new base::StringValue(value)); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ServiceProcessPrefs::GetBoolean(const std::string& key, 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool default_value) const { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Value* value; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool result = false; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs_->GetValue(key, &value) || !value->GetAsBoolean(&result)) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return default_value; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ServiceProcessPrefs::SetBoolean(const std::string& key, bool value) { 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs_->SetValue(key, new base::FundamentalValue(value)); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int ServiceProcessPrefs::GetInt(const std::string& key, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int default_value) const { 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Value* value; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result = default_value; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs_->GetValue(key, &value) || !value->GetAsInteger(&result)) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return default_value; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ServiceProcessPrefs::SetInt(const std::string& key, int value) { 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs_->SetValue(key, new base::FundamentalValue(value)); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const base::DictionaryValue* ServiceProcessPrefs::GetDictionary( 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& key) const { 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Value* value; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs_->GetValue(key, &value) || 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !value->IsType(base::Value::TYPE_DICTIONARY)) { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return static_cast<const base::DictionaryValue*>(value); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const base::ListValue* ServiceProcessPrefs::GetList( 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& key) const { 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Value* value; 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!prefs_->GetValue(key, &value) || !value->IsType(base::Value::TYPE_LIST)) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return static_cast<const base::ListValue*>(value); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ServiceProcessPrefs::SetValue(const std::string& key, base::Value* value) { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_->SetValue(key, value); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ServiceProcessPrefs::RemovePref(const std::string& key) { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_->RemoveValue(key); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 98