blob: c04940ec9a1f58f9a7afac96d039ce99bfb4a7f8 [file] [log] [blame]
// Copyright 2017 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 "services/preferences/public/cpp/scoped_pref_update.h"
#include <utility>
#include "base/bind.h"
#include "components/prefs/pref_service.h"
#include "services/preferences/public/cpp/dictionary_value_update.h"
namespace prefs {
ScopedDictionaryPrefUpdate::ScopedDictionaryPrefUpdate(PrefService* service,
base::StringPiece path)
: service_(service), path_(path.as_string()) {}
ScopedDictionaryPrefUpdate::~ScopedDictionaryPrefUpdate() {
if (!updated_paths_.empty())
service_->ReportUserPrefChanged(path_, std::move(updated_paths_));
}
std::unique_ptr<DictionaryValueUpdate> ScopedDictionaryPrefUpdate::Get() {
return std::make_unique<DictionaryValueUpdate>(
base::Bind(&ScopedDictionaryPrefUpdate::RecordPath,
base::Unretained(this)),
static_cast<base::DictionaryValue*>(
service_->GetMutableUserPref(path_, base::Value::Type::DICTIONARY)),
std::vector<std::string>());
}
std::unique_ptr<DictionaryValueUpdate> ScopedDictionaryPrefUpdate::
operator->() {
return Get();
}
void ScopedDictionaryPrefUpdate::RecordPath(
const std::vector<std::string>& path) {
updated_paths_.insert(std::move(path));
}
} // namespace prefs