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

Side by Side Diff: services/preferences/persistent_pref_store_impl_unittest.cc

Issue 2777483002: Pref service: Add initial support for pref registration. (Closed)
Patch Set: rebase Created 3 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "services/preferences/persistent_pref_store_impl.h" 5 #include "services/preferences/persistent_pref_store_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 ~InitializationMockPersistentPrefStore() override = default; 84 ~InitializationMockPersistentPrefStore() override = default;
85 85
86 bool initialized_ = false; 86 bool initialized_ = false;
87 bool success_; 87 bool success_;
88 PersistentPrefStore::PrefReadError read_error_; 88 PersistentPrefStore::PrefReadError read_error_;
89 bool read_only_; 89 bool read_only_;
90 base::ObserverList<PrefStore::Observer, true> observers_; 90 base::ObserverList<PrefStore::Observer, true> observers_;
91 }; 91 };
92 92
93 constexpr char kKey[] = "path.to.key"; 93 constexpr char kKey[] = "path.to.key";
94 constexpr char kOtherKey[] = "path.to.other_key";
94 95
95 class PersistentPrefStoreImplTest : public testing::Test { 96 class PersistentPrefStoreImplTest : public testing::Test {
96 public: 97 public:
97 PersistentPrefStoreImplTest() = default; 98 PersistentPrefStoreImplTest() = default;
98 99
99 // testing::Test: 100 // testing::Test:
100 void TearDown() override { 101 void TearDown() override {
101 pref_store_ = nullptr; 102 pref_store_ = nullptr;
102 base::RunLoop().RunUntilIdle(); 103 base::RunLoop().RunUntilIdle();
103 impl_.reset(); 104 impl_.reset();
104 base::RunLoop().RunUntilIdle(); 105 base::RunLoop().RunUntilIdle();
105 } 106 }
106 107
107 void CreateImpl(scoped_refptr<PersistentPrefStore> backing_pref_store) { 108 void CreateImpl(scoped_refptr<PersistentPrefStore> backing_pref_store) {
108 base::RunLoop run_loop; 109 base::RunLoop run_loop;
109 bool initialized = backing_pref_store->IsInitializationComplete(); 110 bool initialized = backing_pref_store->IsInitializationComplete();
110 impl_ = base::MakeUnique<PersistentPrefStoreImpl>( 111 impl_ = base::MakeUnique<PersistentPrefStoreImpl>(
111 std::move(backing_pref_store), nullptr, run_loop.QuitClosure()); 112 std::move(backing_pref_store), nullptr, run_loop.QuitClosure());
112 if (!initialized) 113 if (!initialized)
113 run_loop.Run(); 114 run_loop.Run();
114 pref_store_ = CreateConnection(); 115 pref_store_ = CreateConnection();
115 } 116 }
116 117
117 scoped_refptr<PersistentPrefStore> CreateConnection() { 118 scoped_refptr<PersistentPrefStore> CreateConnection(
118 return make_scoped_refptr( 119 PersistentPrefStoreImpl::ObservedPrefs observed_prefs =
119 new PersistentPrefStoreClient(impl_->CreateConnection())); 120 PersistentPrefStoreImpl::ObservedPrefs()) {
121 if (observed_prefs.empty())
122 observed_prefs.insert({kKey, kOtherKey});
123 return make_scoped_refptr(new PersistentPrefStoreClient(
124 impl_->CreateConnection(std::move(observed_prefs))));
120 } 125 }
121 126
122 PersistentPrefStore* pref_store() { return pref_store_.get(); } 127 PersistentPrefStore* pref_store() { return pref_store_.get(); }
123 128
124 private: 129 private:
125 base::MessageLoop message_loop_; 130 base::MessageLoop message_loop_;
126 131
127 std::unique_ptr<PersistentPrefStoreImpl> impl_; 132 std::unique_ptr<PersistentPrefStoreImpl> impl_;
128 133
129 scoped_refptr<PersistentPrefStore> pref_store_; 134 scoped_refptr<PersistentPrefStore> pref_store_;
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 .Times(1) 218 .Times(1)
214 .WillOnce(WithoutArgs(Invoke([&run_loop]() { run_loop.Quit(); }))); 219 .WillOnce(WithoutArgs(Invoke([&run_loop]() { run_loop.Quit(); })));
215 run_loop.Run(); 220 run_loop.Run();
216 other_pref_store->RemoveObserver(&observer); 221 other_pref_store->RemoveObserver(&observer);
217 222
218 const base::Value* output = nullptr; 223 const base::Value* output = nullptr;
219 ASSERT_TRUE(other_pref_store->GetValue(kKey, &output)); 224 ASSERT_TRUE(other_pref_store->GetValue(kKey, &output));
220 EXPECT_TRUE(value.Equals(output)); 225 EXPECT_TRUE(value.Equals(output));
221 } 226 }
222 227
228 TEST_F(PersistentPrefStoreImplTest, UnregisteredPrefNotObservedByOtherClient) {
229 auto backing_pref_store = make_scoped_refptr(new InMemoryPrefStore());
230 CreateImpl(backing_pref_store);
231 EXPECT_TRUE(pref_store()->IsInitializationComplete());
232
233 PersistentPrefStoreImpl::ObservedPrefs observed_prefs;
234 observed_prefs.insert(kKey);
235
236 auto other_pref_store = CreateConnection(std::move(observed_prefs));
237 EXPECT_TRUE(other_pref_store->IsInitializationComplete());
238
239 pref_store()->SetValue(kOtherKey, base::MakeUnique<base::Value>(123), 0);
240 pref_store()->SetValue(kKey, base::MakeUnique<base::Value>("value"), 0);
241
242 PrefStoreObserverMock observer;
243 other_pref_store->AddObserver(&observer);
244 base::RunLoop run_loop;
245 EXPECT_CALL(observer, OnPrefValueChanged(kOtherKey)).Times(0);
246 EXPECT_CALL(observer, OnPrefValueChanged(kKey))
247 .Times(1)
248 .WillOnce(WithoutArgs(Invoke([&run_loop]() { run_loop.Quit(); })));
249 run_loop.Run();
250 other_pref_store->RemoveObserver(&observer);
251
252 EXPECT_FALSE(other_pref_store->GetValue(kOtherKey, nullptr));
253 }
254
223 TEST_F(PersistentPrefStoreImplTest, 255 TEST_F(PersistentPrefStoreImplTest,
224 WriteWithoutPathExpansionObservedByOtherClient) { 256 WriteWithoutPathExpansionObservedByOtherClient) {
225 auto backing_pref_store = make_scoped_refptr(new InMemoryPrefStore()); 257 auto backing_pref_store = make_scoped_refptr(new InMemoryPrefStore());
226 CreateImpl(backing_pref_store); 258 CreateImpl(backing_pref_store);
227 EXPECT_TRUE(pref_store()->IsInitializationComplete()); 259 EXPECT_TRUE(pref_store()->IsInitializationComplete());
228 260
229 auto other_pref_store = CreateConnection(); 261 auto other_pref_store = CreateConnection();
230 EXPECT_TRUE(other_pref_store->IsInitializationComplete()); 262 EXPECT_TRUE(other_pref_store->IsInitializationComplete());
231 263
232 base::DictionaryValue dict; 264 base::DictionaryValue dict;
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 EXPECT_CALL(*backing_store, ClearMutableValues()) 380 EXPECT_CALL(*backing_store, ClearMutableValues())
349 .Times(1) 381 .Times(1)
350 .WillOnce(WithoutArgs(Invoke([&run_loop]() { run_loop.Quit(); }))); 382 .WillOnce(WithoutArgs(Invoke([&run_loop]() { run_loop.Quit(); })));
351 EXPECT_CALL(*backing_store, CommitPendingWrite()).Times(1); 383 EXPECT_CALL(*backing_store, CommitPendingWrite()).Times(1);
352 pref_store()->ClearMutableValues(); 384 pref_store()->ClearMutableValues();
353 run_loop.Run(); 385 run_loop.Run();
354 } 386 }
355 387
356 } // namespace 388 } // namespace
357 } // namespace prefs 389 } // namespace prefs
OLDNEW
« no previous file with comments | « services/preferences/persistent_pref_store_impl.cc ('k') | services/preferences/pref_service_factory_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698