| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. |  | 
| 2 // Use of this source code is governed by a BSD-style license that can be |  | 
| 3 // found in the LICENSE file. |  | 
| 4 |  | 
| 5 #include "services/preferences/public/cpp/pref_client_store.h" |  | 
| 6 |  | 
| 7 #include "base/memory/ptr_util.h" |  | 
| 8 #include "base/values.h" |  | 
| 9 #include "services/service_manager/public/cpp/connector.h" |  | 
| 10 |  | 
| 11 namespace preferences { |  | 
| 12 |  | 
| 13 PrefClientStore::PrefClientStore( |  | 
| 14     prefs::mojom::PreferencesServiceFactoryPtr pref_factory_ptr) |  | 
| 15     : prefs_binding_(this), |  | 
| 16       pref_factory_ptr_(std::move(pref_factory_ptr)), |  | 
| 17       initialized_(false) { |  | 
| 18   pref_factory_ptr_->Create(prefs_binding_.CreateInterfacePtrAndBind(), |  | 
| 19                             mojo::MakeRequest(&prefs_service_ptr_)); |  | 
| 20 } |  | 
| 21 |  | 
| 22 void PrefClientStore::Subscribe(const std::set<std::string>& keys) { |  | 
| 23   keys_.insert(keys.begin(), keys.end()); |  | 
| 24 |  | 
| 25   std::vector<std::string> pref_array; |  | 
| 26   std::copy(keys_.begin(), keys_.end(), std::back_inserter(pref_array)); |  | 
| 27   prefs_service_ptr_->Subscribe(pref_array); |  | 
| 28 } |  | 
| 29 |  | 
| 30 bool PrefClientStore::GetValue(const std::string& key, |  | 
| 31                                const base::Value** value) const { |  | 
| 32   DCHECK(initialized_); |  | 
| 33   DCHECK(keys_.find(key) != keys_.end()); |  | 
| 34 |  | 
| 35   return ValueMapPrefStore::GetValue(key, value); |  | 
| 36 } |  | 
| 37 |  | 
| 38 void PrefClientStore::SetValue(const std::string& key, |  | 
| 39                                std::unique_ptr<base::Value> value, |  | 
| 40                                uint32_t flags) { |  | 
| 41   DCHECK(keys_.find(key) != keys_.end()); |  | 
| 42 |  | 
| 43   // TODO(jonross): only notify the server if the value changed. |  | 
| 44   SetValueOnPreferenceManager(key, *value); |  | 
| 45   ValueMapPrefStore::SetValue(key, std::move(value), flags); |  | 
| 46 } |  | 
| 47 |  | 
| 48 void PrefClientStore::RemoveValue(const std::string& key, uint32_t flags) { |  | 
| 49   // TODO(jonross): add preference removal to preferences.mojom |  | 
| 50   NOTIMPLEMENTED(); |  | 
| 51 } |  | 
| 52 |  | 
| 53 bool PrefClientStore::GetMutableValue(const std::string& key, |  | 
| 54                                       base::Value** value) { |  | 
| 55   DCHECK(initialized_); |  | 
| 56   DCHECK(keys_.find(key) != keys_.end()); |  | 
| 57 |  | 
| 58   return ValueMapPrefStore::GetMutableValue(key, value); |  | 
| 59 } |  | 
| 60 |  | 
| 61 void PrefClientStore::ReportValueChanged(const std::string& key, |  | 
| 62                                          uint32_t flags) { |  | 
| 63   DCHECK(keys_.find(key) != keys_.end()); |  | 
| 64   const base::Value* value = nullptr; |  | 
| 65   ValueMapPrefStore::GetValue(key, &value); |  | 
| 66   SetValueOnPreferenceManager(key, *value); |  | 
| 67   ValueMapPrefStore::ReportValueChanged(key, flags); |  | 
| 68 } |  | 
| 69 |  | 
| 70 void PrefClientStore::SetValueSilently(const std::string& key, |  | 
| 71                                        std::unique_ptr<base::Value> value, |  | 
| 72                                        uint32_t flags) { |  | 
| 73   SetValueOnPreferenceManager(key, *value); |  | 
| 74   ValueMapPrefStore::SetValueSilently(key, std::move(value), flags); |  | 
| 75 } |  | 
| 76 |  | 
| 77 PrefClientStore::~PrefClientStore() {} |  | 
| 78 |  | 
| 79 void PrefClientStore::SetValueOnPreferenceManager(const std::string& key, |  | 
| 80                                                   const base::Value& value) { |  | 
| 81   if (keys_.find(key) == keys_.end()) |  | 
| 82     return; |  | 
| 83 |  | 
| 84   auto prefs = base::MakeUnique<base::DictionaryValue>(); |  | 
| 85   prefs->SetWithoutPathExpansion(key, value.CreateDeepCopy()); |  | 
| 86   prefs_service_ptr_->SetPreferences(std::move(prefs)); |  | 
| 87 } |  | 
| 88 |  | 
| 89 void PrefClientStore::OnPreferencesChanged( |  | 
| 90     std::unique_ptr<base::DictionaryValue> preferences) { |  | 
| 91   if (!initialized_) { |  | 
| 92     initialized_ = true; |  | 
| 93     NotifyInitializationCompleted(); |  | 
| 94   } |  | 
| 95 |  | 
| 96   for (base::DictionaryValue::Iterator it(*preferences); !it.IsAtEnd(); |  | 
| 97        it.Advance()) { |  | 
| 98     if (keys_.find(it.key()) == keys_.end()) |  | 
| 99       continue; |  | 
| 100     ValueMapPrefStore::SetValue(it.key(), it.value().CreateDeepCopy(), 0); |  | 
| 101   } |  | 
| 102 } |  | 
| 103 |  | 
| 104 }  // namespace preferences |  | 
| OLD | NEW | 
|---|