1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- // 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 "components/prefs/scoped_user_pref_update.h"
- #include "base/check_op.h"
- #include "components/prefs/pref_notifier.h"
- #include "components/prefs/pref_service.h"
- namespace subtle {
- ScopedUserPrefUpdateBase::ScopedUserPrefUpdateBase(PrefService* service,
- const std::string& path)
- : service_(service), path_(path), value_(nullptr) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(service_->sequence_checker_);
- }
- ScopedUserPrefUpdateBase::~ScopedUserPrefUpdateBase() {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- Notify();
- }
- base::Value* ScopedUserPrefUpdateBase::GetValueOfType(base::Value::Type type) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- if (!value_)
- value_ = service_->GetMutableUserPref(path_, type);
- // |value_| might be downcast to base::DictionaryValue or base::ListValue,
- // side-stepping CHECKs built into base::Value. Thus we need to be certain
- // that the type matches.
- if (value_)
- CHECK_EQ(value_->type(), type);
- return value_;
- }
- void ScopedUserPrefUpdateBase::Notify() {
- if (value_) {
- service_->ReportUserPrefChanged(path_);
- value_ = nullptr;
- }
- }
- } // namespace subtle
|