Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(656)

Unified Diff: services/preferences/public/cpp/pref_store_impl.cc

Issue 2778643002: Pref service: Filter updates from read-only pref stores. (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « services/preferences/public/cpp/pref_store_impl.h ('k') | services/preferences/public/cpp/tests/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: services/preferences/public/cpp/pref_store_impl.cc
diff --git a/services/preferences/public/cpp/pref_store_impl.cc b/services/preferences/public/cpp/pref_store_impl.cc
index 680b264799ad739aa03d876b9d172a007c2f2420..b88e99e3aeba86ba4cb5a465b2672c2782bb3188 100644
--- a/services/preferences/public/cpp/pref_store_impl.cc
+++ b/services/preferences/public/cpp/pref_store_impl.cc
@@ -5,11 +5,44 @@
#include "services/preferences/public/cpp/pref_store_impl.h"
#include <memory>
+#include <unordered_set>
+#include "base/stl_util.h"
#include "base/values.h"
namespace prefs {
+class PrefStoreImpl::Observer {
+ public:
+ Observer(mojom::PrefStoreObserverPtr observer,
+ std::unordered_set<std::string> prefs)
+ : observer_(std::move(observer)), prefs_(std::move(prefs)) {}
+
+ void OnInitializationCompleted(bool succeeded) {
+ observer_->OnInitializationCompleted(succeeded);
+ }
+
+ void OnPrefChanged(const std::string& key, const base::Value& value) const {
+ if (!base::ContainsKey(prefs_, key))
+ return;
+
+ observer_->OnPrefChanged(key, value.CreateDeepCopy());
+ }
+
+ void OnPrefRemoved(const std::string& key) const {
+ if (!base::ContainsKey(prefs_, key))
+ return;
+
+ observer_->OnPrefChanged(key, nullptr);
+ }
+
+ private:
+ mojom::PrefStoreObserverPtr observer_;
+ const std::unordered_set<std::string> prefs_;
+
+ DISALLOW_COPY_AND_ASSIGN(Observer);
+};
+
PrefStoreImpl::PrefStoreImpl(scoped_refptr<::PrefStore> pref_store,
mojom::PrefStoreRequest request)
: backing_pref_store_(std::move(pref_store)),
@@ -27,7 +60,7 @@ PrefStoreImpl::~PrefStoreImpl() {
// static
std::unique_ptr<PrefStoreImpl> PrefStoreImpl::Create(
- mojom::PrefStoreRegistryPtr registry_ptr,
+ mojom::PrefStoreRegistry* registry_ptr,
scoped_refptr<::PrefStore> pref_store,
PrefValueStore::PrefStoreType type) {
mojom::PrefStorePtr ptr;
@@ -42,10 +75,10 @@ void PrefStoreImpl::OnPrefValueChanged(const std::string& key) {
const base::Value* value = nullptr;
if (backing_pref_store_->GetValue(key, &value)) {
for (const auto& observer : observers_)
- observer->OnPrefChanged(key, value->CreateDeepCopy());
+ observer->OnPrefChanged(key, *value);
} else {
for (const auto& observer : observers_)
- observer->OnPrefChanged(key, nullptr);
+ observer->OnPrefRemoved(key);
}
}
@@ -59,10 +92,15 @@ void PrefStoreImpl::OnInitializationCompleted(bool succeeded) {
observer->OnInitializationCompleted(succeeded);
}
-void PrefStoreImpl::AddObserver(const AddObserverCallback& callback) {
+void PrefStoreImpl::AddObserver(
+ const std::vector<std::string>& prefs_to_observe,
+ const AddObserverCallback& callback) {
mojom::PrefStoreObserverPtr observer_ptr;
auto request = mojo::MakeRequest(&observer_ptr);
- observers_.push_back(std::move(observer_ptr));
+ observers_.push_back(base::MakeUnique<Observer>(
+ std::move(observer_ptr),
+ std::unordered_set<std::string>(prefs_to_observe.begin(),
+ prefs_to_observe.end())));
callback.Run(mojom::PrefStoreConnection::New(
std::move(request), backing_pref_store_->GetValues(),
backing_pref_store_->IsInitializationComplete()));
« no previous file with comments | « services/preferences/public/cpp/pref_store_impl.h ('k') | services/preferences/public/cpp/tests/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698