| // Copyright 2013 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "base/prefs/scoped_user_pref_update.h" | 
 |  | 
 | #include "base/logging.h" | 
 | #include "base/prefs/pref_notifier.h" | 
 | #include "base/prefs/pref_service.h" | 
 |  | 
 | namespace subtle { | 
 |  | 
 | ScopedUserPrefUpdateBase::ScopedUserPrefUpdateBase(PrefService* service, | 
 |                                                    const std::string& path) | 
 |     : service_(service), path_(path), value_(NULL) { | 
 |   DCHECK(service_->CalledOnValidThread()); | 
 | } | 
 |  | 
 | ScopedUserPrefUpdateBase::~ScopedUserPrefUpdateBase() { | 
 |   Notify(); | 
 | } | 
 |  | 
 | base::Value* ScopedUserPrefUpdateBase::GetValueOfType(base::Value::Type type) { | 
 |   DCHECK(CalledOnValidThread()); | 
 |   if (!value_) | 
 |     value_ = service_->GetMutableUserPref(path_, type); | 
 |   return value_; | 
 | } | 
 |  | 
 | void ScopedUserPrefUpdateBase::Notify() { | 
 |   if (value_) { | 
 |     service_->ReportUserPrefChanged(path_); | 
 |     value_ = NULL; | 
 |   } | 
 | } | 
 |  | 
 | }  // namespace subtle |