| Index: services/preferences/public/cpp/pref_store_client_mixin.cc
|
| diff --git a/services/preferences/public/cpp/pref_store_client_mixin.cc b/services/preferences/public/cpp/pref_store_client_mixin.cc
|
| index 0387883265f206a0a0e34b1c0f981b34f923f239..c4bb88b41cc78408a3d6218caa10d1026868a8a8 100644
|
| --- a/services/preferences/public/cpp/pref_store_client_mixin.cc
|
| +++ b/services/preferences/public/cpp/pref_store_client_mixin.cc
|
| @@ -59,10 +59,11 @@ PrefStoreClientMixin<BasePrefStore>::~PrefStoreClientMixin() = default;
|
|
|
| template <typename BasePrefStore>
|
| void PrefStoreClientMixin<BasePrefStore>::Init(
|
| - std::unique_ptr<base::DictionaryValue> initial_prefs,
|
| + const base::DictionaryValue* initial_prefs,
|
| bool initialized,
|
| mojom::PrefStoreObserverRequest observer_request) {
|
| - cached_prefs_ = std::move(initial_prefs);
|
| + if (initial_prefs)
|
| + cached_prefs_ = initial_prefs->CreateDeepCopy();
|
| observer_binding_.Bind(std::move(observer_request));
|
| if (initialized)
|
| OnInitializationCompleted(static_cast<bool>(cached_prefs_));
|
| @@ -101,7 +102,7 @@ void PrefStoreClientMixin<BasePrefStore>::OnInitializationCompleted(
|
| template <typename BasePrefStore>
|
| void PrefStoreClientMixin<BasePrefStore>::OnPrefChanged(
|
| const std::string& key,
|
| - std::unique_ptr<base::Value> value) {
|
| + base::Optional<base::Value> value) {
|
| DCHECK(cached_prefs_);
|
| bool changed = false;
|
| if (!value) { // Delete
|
| @@ -110,12 +111,12 @@ void PrefStoreClientMixin<BasePrefStore>::OnPrefChanged(
|
| } else {
|
| const base::Value* prev;
|
| if (cached_prefs_->Get(key, &prev)) {
|
| - if (!prev->Equals(value.get())) {
|
| - cached_prefs_->Set(key, std::move(value));
|
| + if (*prev != *value) {
|
| + cached_prefs_->Set(key, value->CreateDeepCopy());
|
| changed = true;
|
| }
|
| } else {
|
| - cached_prefs_->Set(key, std::move(value));
|
| + cached_prefs_->Set(key, value->CreateDeepCopy());
|
| changed = true;
|
| }
|
| }
|
|
|