OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 "components/sync/driver/glue/sync_backend_registrar.h" | 5 #include "components/sync/driver/glue/sync_backend_registrar.h" |
6 | 6 |
7 #include "base/location.h" | 7 #include "base/location.h" |
8 #include "base/run_loop.h" | 8 #include "base/run_loop.h" |
9 #include "base/single_thread_task_runner.h" | 9 #include "base/single_thread_task_runner.h" |
10 #include "components/sync/base/model_type.h" | 10 #include "components/sync/base/model_type.h" |
11 #include "components/sync/core/test/test_user_share.h" | 11 #include "components/sync/core/test/test_user_share.h" |
12 #include "components/sync/driver/change_processor_mock.h" | 12 #include "components/sync/driver/change_processor_mock.h" |
13 #include "components/sync/driver/fake_sync_client.h" | 13 #include "components/sync/driver/fake_sync_client.h" |
14 #include "components/sync/driver/glue/browser_thread_model_worker.h" | 14 #include "components/sync/driver/glue/browser_thread_model_worker.h" |
15 #include "components/sync/driver/sync_api_component_factory_mock.h" | 15 #include "components/sync/driver/sync_api_component_factory_mock.h" |
16 #include "components/sync/engine/passive_model_worker.h" | 16 #include "components/sync/engine/passive_model_worker.h" |
17 #include "testing/gmock/include/gmock/gmock.h" | 17 #include "testing/gmock/include/gmock/gmock.h" |
18 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
19 | 19 |
20 namespace browser_sync { | 20 namespace syncer { |
21 | 21 |
22 namespace { | 22 namespace { |
23 | 23 |
24 using ::testing::_; | 24 using ::testing::_; |
25 using ::testing::InSequence; | 25 using ::testing::InSequence; |
26 using ::testing::Return; | 26 using ::testing::Return; |
27 using ::testing::StrictMock; | 27 using ::testing::StrictMock; |
28 using syncer::FIRST_REAL_MODEL_TYPE; | |
29 using syncer::AUTOFILL; | |
30 using syncer::BOOKMARKS; | |
31 using syncer::PREFERENCES; | |
32 using syncer::THEMES; | |
33 using syncer::NIGORI; | |
34 using syncer::PASSWORDS; | |
35 using syncer::MODEL_TYPE_COUNT; | |
36 using syncer::ModelSafeGroup; | |
37 using syncer::ModelSafeRoutingInfo; | |
38 using syncer::ModelTypeSet; | |
39 using syncer::ModelType; | |
40 using syncer::ModelTypeFromInt; | |
41 | 28 |
42 void TriggerChanges(SyncBackendRegistrar* registrar, ModelType type) { | 29 void TriggerChanges(SyncBackendRegistrar* registrar, ModelType type) { |
43 registrar->OnChangesApplied(type, 0, NULL, | 30 registrar->OnChangesApplied(type, 0, NULL, ImmutableChangeRecordList()); |
44 syncer::ImmutableChangeRecordList()); | |
45 registrar->OnChangesComplete(type); | 31 registrar->OnChangesComplete(type); |
46 } | 32 } |
47 | 33 |
48 class RegistrarSyncClient : public sync_driver::FakeSyncClient { | 34 class RegistrarSyncClient : public FakeSyncClient { |
49 public: | 35 public: |
50 RegistrarSyncClient( | 36 RegistrarSyncClient( |
51 const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner, | 37 const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner, |
52 const scoped_refptr<base::SingleThreadTaskRunner>& db_task_runner, | 38 const scoped_refptr<base::SingleThreadTaskRunner>& db_task_runner, |
53 const scoped_refptr<base::SingleThreadTaskRunner>& file_task_runner) | 39 const scoped_refptr<base::SingleThreadTaskRunner>& file_task_runner) |
54 : ui_task_runner_(ui_task_runner), | 40 : ui_task_runner_(ui_task_runner), |
55 db_task_runner_(db_task_runner), | 41 db_task_runner_(db_task_runner), |
56 file_task_runner_(file_task_runner) {} | 42 file_task_runner_(file_task_runner) {} |
57 | 43 |
58 scoped_refptr<syncer::ModelSafeWorker> CreateModelWorkerForGroup( | 44 scoped_refptr<ModelSafeWorker> CreateModelWorkerForGroup( |
59 ModelSafeGroup group, | 45 ModelSafeGroup group, |
60 syncer::WorkerLoopDestructionObserver* observer) override { | 46 WorkerLoopDestructionObserver* observer) override { |
61 switch (group) { | 47 switch (group) { |
62 case syncer::GROUP_UI: | 48 case GROUP_UI: |
63 return new BrowserThreadModelWorker(ui_task_runner_, group, observer); | 49 return new BrowserThreadModelWorker(ui_task_runner_, group, observer); |
64 case syncer::GROUP_DB: | 50 case GROUP_DB: |
65 return new BrowserThreadModelWorker(db_task_runner_, group, observer); | 51 return new BrowserThreadModelWorker(db_task_runner_, group, observer); |
66 case syncer::GROUP_FILE: | 52 case GROUP_FILE: |
67 return new BrowserThreadModelWorker(file_task_runner_, group, observer); | 53 return new BrowserThreadModelWorker(file_task_runner_, group, observer); |
68 case syncer::GROUP_PASSIVE: | 54 case GROUP_PASSIVE: |
69 return new syncer::PassiveModelWorker(observer); | 55 return new PassiveModelWorker(observer); |
70 default: | 56 default: |
71 return nullptr; | 57 return nullptr; |
72 } | 58 } |
73 } | 59 } |
74 | 60 |
75 private: | 61 private: |
76 const scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_; | 62 const scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_; |
77 const scoped_refptr<base::SingleThreadTaskRunner> db_task_runner_; | 63 const scoped_refptr<base::SingleThreadTaskRunner> db_task_runner_; |
78 const scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_; | 64 const scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_; |
79 }; | 65 }; |
80 | 66 |
81 // Flaky: https://crbug.com/498238 | 67 // Flaky: https://crbug.com/498238 |
82 class SyncBackendRegistrarTest : public testing::Test { | 68 class SyncBackendRegistrarTest : public testing::Test { |
83 public: | 69 public: |
84 void TestNonUIDataTypeActivationAsync(sync_driver::ChangeProcessor* processor, | 70 void TestNonUIDataTypeActivationAsync(ChangeProcessor* processor, |
85 base::WaitableEvent* done) { | 71 base::WaitableEvent* done) { |
86 registrar_->ActivateDataType(AUTOFILL, syncer::GROUP_DB, processor, | 72 registrar_->ActivateDataType(AUTOFILL, GROUP_DB, processor, |
87 test_user_share_.user_share()); | 73 test_user_share_.user_share()); |
88 ExpectRoutingInfo(registrar_.get(), {{AUTOFILL, syncer::GROUP_DB}}); | 74 ExpectRoutingInfo(registrar_.get(), {{AUTOFILL, GROUP_DB}}); |
89 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet(AUTOFILL)); | 75 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet(AUTOFILL)); |
90 TriggerChanges(registrar_.get(), AUTOFILL); | 76 TriggerChanges(registrar_.get(), AUTOFILL); |
91 done->Signal(); | 77 done->Signal(); |
92 } | 78 } |
93 | 79 |
94 protected: | 80 protected: |
95 SyncBackendRegistrarTest() | 81 SyncBackendRegistrarTest() |
96 : db_thread_("DBThreadForTest"), | 82 : db_thread_("DBThreadForTest"), |
97 file_thread_("FileThreadForTest"), | 83 file_thread_("FileThreadForTest"), |
98 sync_thread_(NULL) {} | 84 sync_thread_(NULL) {} |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 void ExpectHasProcessorsForTypes(const SyncBackendRegistrar& registrar, | 117 void ExpectHasProcessorsForTypes(const SyncBackendRegistrar& registrar, |
132 ModelTypeSet types) { | 118 ModelTypeSet types) { |
133 for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) { | 119 for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) { |
134 ModelType model_type = ModelTypeFromInt(i); | 120 ModelType model_type = ModelTypeFromInt(i); |
135 EXPECT_EQ(types.Has(model_type), | 121 EXPECT_EQ(types.Has(model_type), |
136 registrar_->IsTypeActivatedForTest(model_type)); | 122 registrar_->IsTypeActivatedForTest(model_type)); |
137 } | 123 } |
138 } | 124 } |
139 | 125 |
140 size_t GetWorkersSize() { | 126 size_t GetWorkersSize() { |
141 std::vector<scoped_refptr<syncer::ModelSafeWorker>> workers; | 127 std::vector<scoped_refptr<ModelSafeWorker>> workers; |
142 registrar_->GetWorkers(&workers); | 128 registrar_->GetWorkers(&workers); |
143 return workers.size(); | 129 return workers.size(); |
144 } | 130 } |
145 | 131 |
146 const scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner() { | 132 const scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner() { |
147 return message_loop_.task_runner(); | 133 return message_loop_.task_runner(); |
148 } | 134 } |
149 | 135 |
150 const scoped_refptr<base::SingleThreadTaskRunner> db_task_runner() { | 136 const scoped_refptr<base::SingleThreadTaskRunner> db_task_runner() { |
151 return db_thread_.task_runner(); | 137 return db_thread_.task_runner(); |
152 } | 138 } |
153 | 139 |
154 const scoped_refptr<base::SingleThreadTaskRunner> file_task_runner() { | 140 const scoped_refptr<base::SingleThreadTaskRunner> file_task_runner() { |
155 return db_thread_.task_runner(); | 141 return db_thread_.task_runner(); |
156 } | 142 } |
157 | 143 |
158 base::MessageLoop message_loop_; | 144 base::MessageLoop message_loop_; |
159 base::Thread db_thread_; | 145 base::Thread db_thread_; |
160 base::Thread file_thread_; | 146 base::Thread file_thread_; |
161 | 147 |
162 syncer::TestUserShare test_user_share_; | 148 TestUserShare test_user_share_; |
163 std::unique_ptr<RegistrarSyncClient> sync_client_; | 149 std::unique_ptr<RegistrarSyncClient> sync_client_; |
164 std::unique_ptr<SyncBackendRegistrar> registrar_; | 150 std::unique_ptr<SyncBackendRegistrar> registrar_; |
165 | 151 |
166 base::Thread* sync_thread_; | 152 base::Thread* sync_thread_; |
167 }; | 153 }; |
168 | 154 |
169 TEST_F(SyncBackendRegistrarTest, ConstructorEmpty) { | 155 TEST_F(SyncBackendRegistrarTest, ConstructorEmpty) { |
170 registrar_->SetInitialTypes(ModelTypeSet()); | 156 registrar_->SetInitialTypes(ModelTypeSet()); |
171 EXPECT_FALSE(registrar_->IsNigoriEnabled()); | 157 EXPECT_FALSE(registrar_->IsNigoriEnabled()); |
172 EXPECT_EQ(4u, GetWorkersSize()); | 158 EXPECT_EQ(4u, GetWorkersSize()); |
173 ExpectRoutingInfo(registrar_.get(), ModelSafeRoutingInfo()); | 159 ExpectRoutingInfo(registrar_.get(), ModelSafeRoutingInfo()); |
174 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); | 160 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); |
175 } | 161 } |
176 | 162 |
177 TEST_F(SyncBackendRegistrarTest, ConstructorNonEmpty) { | 163 TEST_F(SyncBackendRegistrarTest, ConstructorNonEmpty) { |
178 registrar_->RegisterNonBlockingType(BOOKMARKS); | 164 registrar_->RegisterNonBlockingType(BOOKMARKS); |
179 registrar_->SetInitialTypes(ModelTypeSet(BOOKMARKS, NIGORI, PASSWORDS)); | 165 registrar_->SetInitialTypes(ModelTypeSet(BOOKMARKS, NIGORI, PASSWORDS)); |
180 EXPECT_TRUE(registrar_->IsNigoriEnabled()); | 166 EXPECT_TRUE(registrar_->IsNigoriEnabled()); |
181 EXPECT_EQ(4u, GetWorkersSize()); | 167 EXPECT_EQ(4u, GetWorkersSize()); |
182 EXPECT_EQ(ModelTypeSet(NIGORI), registrar_->GetLastConfiguredTypes()); | 168 EXPECT_EQ(ModelTypeSet(NIGORI), registrar_->GetLastConfiguredTypes()); |
183 // Bookmarks dropped because it is nonblocking. | 169 // Bookmarks dropped because it is nonblocking. |
184 // Passwords dropped because of no password store. | 170 // Passwords dropped because of no password store. |
185 ExpectRoutingInfo(registrar_.get(), {{NIGORI, syncer::GROUP_PASSIVE}}); | 171 ExpectRoutingInfo(registrar_.get(), {{NIGORI, GROUP_PASSIVE}}); |
186 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); | 172 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); |
187 } | 173 } |
188 | 174 |
189 TEST_F(SyncBackendRegistrarTest, ConstructorNonEmptyReversedInitialization) { | 175 TEST_F(SyncBackendRegistrarTest, ConstructorNonEmptyReversedInitialization) { |
190 // The blocking types get to set initial types before NonBlocking types here. | 176 // The blocking types get to set initial types before NonBlocking types here. |
191 registrar_->SetInitialTypes(ModelTypeSet(BOOKMARKS, NIGORI, PASSWORDS)); | 177 registrar_->SetInitialTypes(ModelTypeSet(BOOKMARKS, NIGORI, PASSWORDS)); |
192 registrar_->RegisterNonBlockingType(BOOKMARKS); | 178 registrar_->RegisterNonBlockingType(BOOKMARKS); |
193 EXPECT_TRUE(registrar_->IsNigoriEnabled()); | 179 EXPECT_TRUE(registrar_->IsNigoriEnabled()); |
194 EXPECT_EQ(4u, GetWorkersSize()); | 180 EXPECT_EQ(4u, GetWorkersSize()); |
195 EXPECT_EQ(ModelTypeSet(NIGORI), registrar_->GetLastConfiguredTypes()); | 181 EXPECT_EQ(ModelTypeSet(NIGORI), registrar_->GetLastConfiguredTypes()); |
196 // Bookmarks dropped because it is nonblocking. | 182 // Bookmarks dropped because it is nonblocking. |
197 // Passwords dropped because of no password store. | 183 // Passwords dropped because of no password store. |
198 ExpectRoutingInfo(registrar_.get(), {{NIGORI, syncer::GROUP_PASSIVE}}); | 184 ExpectRoutingInfo(registrar_.get(), {{NIGORI, GROUP_PASSIVE}}); |
199 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); | 185 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); |
200 } | 186 } |
201 | 187 |
202 TEST_F(SyncBackendRegistrarTest, ConfigureDataTypes) { | 188 TEST_F(SyncBackendRegistrarTest, ConfigureDataTypes) { |
203 registrar_->RegisterNonBlockingType(BOOKMARKS); | 189 registrar_->RegisterNonBlockingType(BOOKMARKS); |
204 registrar_->SetInitialTypes(ModelTypeSet()); | 190 registrar_->SetInitialTypes(ModelTypeSet()); |
205 | 191 |
206 // Add. | 192 // Add. |
207 const ModelTypeSet types1(BOOKMARKS, NIGORI, AUTOFILL); | 193 const ModelTypeSet types1(BOOKMARKS, NIGORI, AUTOFILL); |
208 EXPECT_EQ(types1, registrar_->ConfigureDataTypes(types1, ModelTypeSet())); | 194 EXPECT_EQ(types1, registrar_->ConfigureDataTypes(types1, ModelTypeSet())); |
209 ExpectRoutingInfo(registrar_.get(), {{BOOKMARKS, syncer::GROUP_NON_BLOCKING}, | 195 ExpectRoutingInfo(registrar_.get(), {{BOOKMARKS, GROUP_NON_BLOCKING}, |
210 {NIGORI, syncer::GROUP_PASSIVE}, | 196 {NIGORI, GROUP_PASSIVE}, |
211 {AUTOFILL, syncer::GROUP_PASSIVE}}); | 197 {AUTOFILL, GROUP_PASSIVE}}); |
212 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); | 198 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); |
213 EXPECT_EQ(types1, registrar_->GetLastConfiguredTypes()); | 199 EXPECT_EQ(types1, registrar_->GetLastConfiguredTypes()); |
214 | 200 |
215 // Add and remove. | 201 // Add and remove. |
216 const ModelTypeSet types2(PREFERENCES, THEMES); | 202 const ModelTypeSet types2(PREFERENCES, THEMES); |
217 EXPECT_EQ(types2, registrar_->ConfigureDataTypes(types2, types1)); | 203 EXPECT_EQ(types2, registrar_->ConfigureDataTypes(types2, types1)); |
218 | 204 |
219 ExpectRoutingInfo(registrar_.get(), {{PREFERENCES, syncer::GROUP_PASSIVE}, | 205 ExpectRoutingInfo(registrar_.get(), |
220 {THEMES, syncer::GROUP_PASSIVE}}); | 206 {{PREFERENCES, GROUP_PASSIVE}, {THEMES, GROUP_PASSIVE}}); |
221 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); | 207 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); |
222 EXPECT_EQ(types2, registrar_->GetLastConfiguredTypes()); | 208 EXPECT_EQ(types2, registrar_->GetLastConfiguredTypes()); |
223 | 209 |
224 // Remove. | 210 // Remove. |
225 EXPECT_TRUE(registrar_->ConfigureDataTypes(ModelTypeSet(), types2).Empty()); | 211 EXPECT_TRUE(registrar_->ConfigureDataTypes(ModelTypeSet(), types2).Empty()); |
226 ExpectRoutingInfo(registrar_.get(), ModelSafeRoutingInfo()); | 212 ExpectRoutingInfo(registrar_.get(), ModelSafeRoutingInfo()); |
227 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); | 213 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); |
228 EXPECT_EQ(ModelTypeSet(), registrar_->GetLastConfiguredTypes()); | 214 EXPECT_EQ(ModelTypeSet(), registrar_->GetLastConfiguredTypes()); |
229 } | 215 } |
230 | 216 |
231 TEST_F(SyncBackendRegistrarTest, ActivateDeactivateUIDataType) { | 217 TEST_F(SyncBackendRegistrarTest, ActivateDeactivateUIDataType) { |
232 InSequence in_sequence; | 218 InSequence in_sequence; |
233 registrar_->SetInitialTypes(ModelTypeSet()); | 219 registrar_->SetInitialTypes(ModelTypeSet()); |
234 | 220 |
235 // Should do nothing. | 221 // Should do nothing. |
236 TriggerChanges(registrar_.get(), BOOKMARKS); | 222 TriggerChanges(registrar_.get(), BOOKMARKS); |
237 | 223 |
238 StrictMock<sync_driver::ChangeProcessorMock> change_processor_mock; | 224 StrictMock<ChangeProcessorMock> change_processor_mock; |
239 EXPECT_CALL(change_processor_mock, StartImpl()); | 225 EXPECT_CALL(change_processor_mock, StartImpl()); |
240 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true)); | 226 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true)); |
241 EXPECT_CALL(change_processor_mock, ApplyChangesFromSyncModel(NULL, _, _)); | 227 EXPECT_CALL(change_processor_mock, ApplyChangesFromSyncModel(NULL, _, _)); |
242 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true)); | 228 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true)); |
243 EXPECT_CALL(change_processor_mock, CommitChangesFromSyncModel()); | 229 EXPECT_CALL(change_processor_mock, CommitChangesFromSyncModel()); |
244 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(false)); | 230 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(false)); |
245 | 231 |
246 const ModelTypeSet types(BOOKMARKS); | 232 const ModelTypeSet types(BOOKMARKS); |
247 EXPECT_EQ(types, registrar_->ConfigureDataTypes(types, ModelTypeSet())); | 233 EXPECT_EQ(types, registrar_->ConfigureDataTypes(types, ModelTypeSet())); |
248 registrar_->ActivateDataType(BOOKMARKS, syncer::GROUP_UI, | 234 registrar_->ActivateDataType(BOOKMARKS, GROUP_UI, &change_processor_mock, |
249 &change_processor_mock, | |
250 test_user_share_.user_share()); | 235 test_user_share_.user_share()); |
251 ExpectRoutingInfo(registrar_.get(), {{BOOKMARKS, syncer::GROUP_UI}}); | 236 ExpectRoutingInfo(registrar_.get(), {{BOOKMARKS, GROUP_UI}}); |
252 ExpectHasProcessorsForTypes(*registrar_, types); | 237 ExpectHasProcessorsForTypes(*registrar_, types); |
253 | 238 |
254 TriggerChanges(registrar_.get(), BOOKMARKS); | 239 TriggerChanges(registrar_.get(), BOOKMARKS); |
255 | 240 |
256 registrar_->DeactivateDataType(BOOKMARKS); | 241 registrar_->DeactivateDataType(BOOKMARKS); |
257 ExpectRoutingInfo(registrar_.get(), ModelSafeRoutingInfo()); | 242 ExpectRoutingInfo(registrar_.get(), ModelSafeRoutingInfo()); |
258 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); | 243 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); |
259 | 244 |
260 // Should do nothing. | 245 // Should do nothing. |
261 TriggerChanges(registrar_.get(), BOOKMARKS); | 246 TriggerChanges(registrar_.get(), BOOKMARKS); |
262 } | 247 } |
263 | 248 |
264 TEST_F(SyncBackendRegistrarTest, ActivateDeactivateNonUIDataType) { | 249 TEST_F(SyncBackendRegistrarTest, ActivateDeactivateNonUIDataType) { |
265 InSequence in_sequence; | 250 InSequence in_sequence; |
266 registrar_->SetInitialTypes(ModelTypeSet()); | 251 registrar_->SetInitialTypes(ModelTypeSet()); |
267 | 252 |
268 // Should do nothing. | 253 // Should do nothing. |
269 TriggerChanges(registrar_.get(), AUTOFILL); | 254 TriggerChanges(registrar_.get(), AUTOFILL); |
270 | 255 |
271 StrictMock<sync_driver::ChangeProcessorMock> change_processor_mock; | 256 StrictMock<ChangeProcessorMock> change_processor_mock; |
272 EXPECT_CALL(change_processor_mock, StartImpl()); | 257 EXPECT_CALL(change_processor_mock, StartImpl()); |
273 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true)); | 258 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true)); |
274 EXPECT_CALL(change_processor_mock, ApplyChangesFromSyncModel(NULL, _, _)); | 259 EXPECT_CALL(change_processor_mock, ApplyChangesFromSyncModel(NULL, _, _)); |
275 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true)); | 260 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true)); |
276 EXPECT_CALL(change_processor_mock, CommitChangesFromSyncModel()); | 261 EXPECT_CALL(change_processor_mock, CommitChangesFromSyncModel()); |
277 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(false)); | 262 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(false)); |
278 | 263 |
279 const ModelTypeSet types(AUTOFILL); | 264 const ModelTypeSet types(AUTOFILL); |
280 EXPECT_EQ(types, registrar_->ConfigureDataTypes(types, ModelTypeSet())); | 265 EXPECT_EQ(types, registrar_->ConfigureDataTypes(types, ModelTypeSet())); |
281 | 266 |
(...skipping 17 matching lines...) Expand all Loading... |
299 // handled correctly in SyncBackendRegistrar. | 284 // handled correctly in SyncBackendRegistrar. |
300 TEST_F(SyncBackendRegistrarTest, ConfigureNonBlockingDataType) { | 285 TEST_F(SyncBackendRegistrarTest, ConfigureNonBlockingDataType) { |
301 registrar_->RegisterNonBlockingType(AUTOFILL); | 286 registrar_->RegisterNonBlockingType(AUTOFILL); |
302 registrar_->RegisterNonBlockingType(BOOKMARKS); | 287 registrar_->RegisterNonBlockingType(BOOKMARKS); |
303 | 288 |
304 ExpectRoutingInfo(registrar_.get(), ModelSafeRoutingInfo()); | 289 ExpectRoutingInfo(registrar_.get(), ModelSafeRoutingInfo()); |
305 // Simulate that initial sync was already done for AUTOFILL. | 290 // Simulate that initial sync was already done for AUTOFILL. |
306 registrar_->AddRestoredNonBlockingType(AUTOFILL); | 291 registrar_->AddRestoredNonBlockingType(AUTOFILL); |
307 // It should be added to routing info and set of configured types. | 292 // It should be added to routing info and set of configured types. |
308 EXPECT_EQ(ModelTypeSet(AUTOFILL), registrar_->GetLastConfiguredTypes()); | 293 EXPECT_EQ(ModelTypeSet(AUTOFILL), registrar_->GetLastConfiguredTypes()); |
309 ExpectRoutingInfo(registrar_.get(), {{AUTOFILL, syncer::GROUP_NON_BLOCKING}}); | 294 ExpectRoutingInfo(registrar_.get(), {{AUTOFILL, GROUP_NON_BLOCKING}}); |
310 | 295 |
311 // Configure two non-blocking types. Initial sync wasn't done for BOOKMARKS so | 296 // Configure two non-blocking types. Initial sync wasn't done for BOOKMARKS so |
312 // it should be included in types to be downloaded. | 297 // it should be included in types to be downloaded. |
313 ModelTypeSet types_to_add(AUTOFILL, BOOKMARKS); | 298 ModelTypeSet types_to_add(AUTOFILL, BOOKMARKS); |
314 ModelTypeSet newly_added_types = | 299 ModelTypeSet newly_added_types = |
315 registrar_->ConfigureDataTypes(types_to_add, ModelTypeSet()); | 300 registrar_->ConfigureDataTypes(types_to_add, ModelTypeSet()); |
316 EXPECT_EQ(ModelTypeSet(BOOKMARKS), newly_added_types); | 301 EXPECT_EQ(ModelTypeSet(BOOKMARKS), newly_added_types); |
317 EXPECT_EQ(types_to_add, registrar_->GetLastConfiguredTypes()); | 302 EXPECT_EQ(types_to_add, registrar_->GetLastConfiguredTypes()); |
318 ExpectRoutingInfo(registrar_.get(), | 303 ExpectRoutingInfo(registrar_.get(), {{AUTOFILL, GROUP_NON_BLOCKING}, |
319 {{AUTOFILL, syncer::GROUP_NON_BLOCKING}, | 304 {BOOKMARKS, GROUP_NON_BLOCKING}}); |
320 {BOOKMARKS, syncer::GROUP_NON_BLOCKING}}); | |
321 } | 305 } |
322 | 306 |
323 class SyncBackendRegistrarShutdownTest : public testing::Test { | 307 class SyncBackendRegistrarShutdownTest : public testing::Test { |
324 public: | 308 public: |
325 void BlockDBThread() { | 309 void BlockDBThread() { |
326 EXPECT_FALSE(db_thread_lock_.Try()); | 310 EXPECT_FALSE(db_thread_lock_.Try()); |
327 | 311 |
328 db_thread_blocked_.Signal(); | 312 db_thread_blocked_.Signal(); |
329 base::AutoLock l(db_thread_lock_); | 313 base::AutoLock l(db_thread_lock_); |
330 } | 314 } |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
374 | 358 |
375 base::Lock db_thread_lock_; | 359 base::Lock db_thread_lock_; |
376 base::RunLoop run_loop_; | 360 base::RunLoop run_loop_; |
377 base::Closure quit_closure_; | 361 base::Closure quit_closure_; |
378 }; | 362 }; |
379 | 363 |
380 // Wrap SyncBackendRegistrar so that we can monitor its lifetime. | 364 // Wrap SyncBackendRegistrar so that we can monitor its lifetime. |
381 class TestRegistrar : public SyncBackendRegistrar { | 365 class TestRegistrar : public SyncBackendRegistrar { |
382 public: | 366 public: |
383 explicit TestRegistrar( | 367 explicit TestRegistrar( |
384 sync_driver::SyncClient* sync_client, | 368 SyncClient* sync_client, |
385 const scoped_refptr<base::SingleThreadTaskRunner>& ui_thread, | 369 const scoped_refptr<base::SingleThreadTaskRunner>& ui_thread, |
386 const scoped_refptr<base::SingleThreadTaskRunner>& db_thread, | 370 const scoped_refptr<base::SingleThreadTaskRunner>& db_thread, |
387 const scoped_refptr<base::SingleThreadTaskRunner>& file_thread, | 371 const scoped_refptr<base::SingleThreadTaskRunner>& file_thread, |
388 SyncBackendRegistrarShutdownTest* test) | 372 SyncBackendRegistrarShutdownTest* test) |
389 : SyncBackendRegistrar("test", | 373 : SyncBackendRegistrar("test", |
390 sync_client, | 374 sync_client, |
391 std::unique_ptr<base::Thread>(), | 375 std::unique_ptr<base::Thread>(), |
392 ui_thread, | 376 ui_thread, |
393 db_thread, | 377 db_thread, |
394 file_thread), | 378 file_thread), |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
439 | 423 |
440 db_thread_lock_.Release(); | 424 db_thread_lock_.Release(); |
441 | 425 |
442 // Run the main thread loop until all workers have been removed and the | 426 // Run the main thread loop until all workers have been removed and the |
443 // registrar destroyed. | 427 // registrar destroyed. |
444 run_loop_.Run(); | 428 run_loop_.Run(); |
445 } | 429 } |
446 | 430 |
447 } // namespace | 431 } // namespace |
448 | 432 |
449 } // namespace browser_sync | 433 } // namespace syncer |
OLD | NEW |