1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/prefs/scoped_user_pref_update.h" 6 7 #include "base/logging.h" 8 #include "base/prefs/pref_notifier.h" 9 #include "base/prefs/pref_service.h" 10 11 namespace subtle { 12 ScopedUserPrefUpdateBase(PrefService * service,const char * path)13ScopedUserPrefUpdateBase::ScopedUserPrefUpdateBase(PrefService* service, 14 const char* path) 15 : service_(service), 16 path_(path), 17 value_(NULL) { 18 DCHECK(service_->CalledOnValidThread()); 19 } 20 ~ScopedUserPrefUpdateBase()21ScopedUserPrefUpdateBase::~ScopedUserPrefUpdateBase() { 22 Notify(); 23 } 24 GetValueOfType(base::Value::Type type)25base::Value* ScopedUserPrefUpdateBase::GetValueOfType(base::Value::Type type) { 26 DCHECK(CalledOnValidThread()); 27 if (!value_) 28 value_ = service_->GetMutableUserPref(path_.c_str(), type); 29 return value_; 30 } 31 Notify()32void ScopedUserPrefUpdateBase::Notify() { 33 if (value_) { 34 service_->ReportUserPrefChanged(path_); 35 value_ = NULL; 36 } 37 } 38 39 } // namespace subtle 40