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

Side by Side Diff: components/sync/driver/glue/sync_backend_registrar_unittest.cc

Issue 2342353004: [Sync] NonBlocking type registration clear instead of crashes when also registered as pssive. (Closed)
Patch Set: Created 4 years, 3 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 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 <tuple>
8
7 #include "base/location.h" 9 #include "base/location.h"
8 #include "base/run_loop.h" 10 #include "base/run_loop.h"
9 #include "base/single_thread_task_runner.h" 11 #include "base/single_thread_task_runner.h"
10 #include "components/sync/base/model_type.h" 12 #include "components/sync/base/model_type.h"
11 #include "components/sync/core/test/test_user_share.h" 13 #include "components/sync/core/test/test_user_share.h"
12 #include "components/sync/driver/change_processor_mock.h" 14 #include "components/sync/driver/change_processor_mock.h"
13 #include "components/sync/driver/fake_sync_client.h" 15 #include "components/sync/driver/fake_sync_client.h"
14 #include "components/sync/driver/glue/browser_thread_model_worker.h" 16 #include "components/sync/driver/glue/browser_thread_model_worker.h"
15 #include "components/sync/driver/sync_api_component_factory_mock.h" 17 #include "components/sync/driver/sync_api_component_factory_mock.h"
16 #include "components/sync/engine/passive_model_worker.h" 18 #include "components/sync/engine/passive_model_worker.h"
17 #include "testing/gmock/include/gmock/gmock.h" 19 #include "testing/gmock/include/gmock/gmock.h"
18 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
19 21
20 namespace browser_sync { 22 namespace browser_sync {
21 23
22 namespace { 24 namespace {
23 25
24 using ::testing::_; 26 using ::testing::_;
25 using ::testing::InSequence; 27 using ::testing::InSequence;
26 using ::testing::Return; 28 using ::testing::Return;
27 using ::testing::StrictMock; 29 using ::testing::StrictMock;
28 using syncer::FIRST_REAL_MODEL_TYPE; 30 using syncer::FIRST_REAL_MODEL_TYPE;
29 using syncer::AUTOFILL; 31 using syncer::AUTOFILL;
30 using syncer::BOOKMARKS; 32 using syncer::BOOKMARKS;
31 using syncer::PREFERENCES; 33 using syncer::PREFERENCES;
32 using syncer::THEMES; 34 using syncer::THEMES;
33 using syncer::NIGORI; 35 using syncer::NIGORI;
34 using syncer::PASSWORDS; 36 using syncer::PASSWORDS;
35 using syncer::MODEL_TYPE_COUNT; 37 using syncer::MODEL_TYPE_COUNT;
38 using syncer::ModelSafeGroup;
36 using syncer::ModelTypeSet; 39 using syncer::ModelTypeSet;
37 using syncer::ModelType; 40 using syncer::ModelType;
38 using syncer::ModelTypeFromInt; 41 using syncer::ModelTypeFromInt;
39 42
40 void TriggerChanges(SyncBackendRegistrar* registrar, ModelType type) { 43 void TriggerChanges(SyncBackendRegistrar* registrar, ModelType type) {
41 registrar->OnChangesApplied(type, 0, NULL, 44 registrar->OnChangesApplied(type, 0, NULL,
42 syncer::ImmutableChangeRecordList()); 45 syncer::ImmutableChangeRecordList());
43 registrar->OnChangesComplete(type); 46 registrar->OnChangesComplete(type);
44 } 47 }
45 48
46 class RegistrarSyncClient : public sync_driver::FakeSyncClient { 49 class RegistrarSyncClient : public sync_driver::FakeSyncClient {
47 public: 50 public:
48 RegistrarSyncClient( 51 RegistrarSyncClient(
49 const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner, 52 const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner,
50 const scoped_refptr<base::SingleThreadTaskRunner>& db_task_runner, 53 const scoped_refptr<base::SingleThreadTaskRunner>& db_task_runner,
51 const scoped_refptr<base::SingleThreadTaskRunner>& file_task_runner) 54 const scoped_refptr<base::SingleThreadTaskRunner>& file_task_runner)
52 : ui_task_runner_(ui_task_runner), 55 : ui_task_runner_(ui_task_runner),
53 db_task_runner_(db_task_runner), 56 db_task_runner_(db_task_runner),
54 file_task_runner_(file_task_runner) {} 57 file_task_runner_(file_task_runner) {}
55 58
56 scoped_refptr<syncer::ModelSafeWorker> CreateModelWorkerForGroup( 59 scoped_refptr<syncer::ModelSafeWorker> CreateModelWorkerForGroup(
57 syncer::ModelSafeGroup group, 60 ModelSafeGroup group,
58 syncer::WorkerLoopDestructionObserver* observer) override { 61 syncer::WorkerLoopDestructionObserver* observer) override {
59 switch (group) { 62 switch (group) {
60 case syncer::GROUP_UI: 63 case syncer::GROUP_UI:
61 return new BrowserThreadModelWorker(ui_task_runner_, group, observer); 64 return new BrowserThreadModelWorker(ui_task_runner_, group, observer);
62 case syncer::GROUP_DB: 65 case syncer::GROUP_DB:
63 return new BrowserThreadModelWorker(db_task_runner_, group, observer); 66 return new BrowserThreadModelWorker(db_task_runner_, group, observer);
64 case syncer::GROUP_FILE: 67 case syncer::GROUP_FILE:
65 return new BrowserThreadModelWorker(file_task_runner_, group, observer); 68 return new BrowserThreadModelWorker(file_task_runner_, group, observer);
66 case syncer::GROUP_PASSIVE: 69 case syncer::GROUP_PASSIVE:
67 return new syncer::PassiveModelWorker(observer); 70 return new syncer::PassiveModelWorker(observer);
68 default: 71 default:
69 return nullptr; 72 return nullptr;
70 } 73 }
71 } 74 }
72 75
73 private: 76 private:
74 const scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_; 77 const scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
75 const scoped_refptr<base::SingleThreadTaskRunner> db_task_runner_; 78 const scoped_refptr<base::SingleThreadTaskRunner> db_task_runner_;
76 const scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_; 79 const scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_;
77 }; 80 };
78 81
79 // Flaky: https://crbug.com/498238 82 // Flaky: https://crbug.com/498238
80 class SyncBackendRegistrarTest : public testing::Test { 83 class SyncBackendRegistrarTest : public testing::Test {
81 public: 84 public:
82 void TestNonUIDataTypeActivationAsync(sync_driver::ChangeProcessor* processor, 85 void TestNonUIDataTypeActivationAsync(sync_driver::ChangeProcessor* processor,
83 base::WaitableEvent* done) { 86 base::WaitableEvent* done) {
84 registrar_->ActivateDataType(AUTOFILL, syncer::GROUP_DB, processor, 87 registrar_->ActivateDataType(AUTOFILL, syncer::GROUP_DB, processor,
85 test_user_share_.user_share()); 88 test_user_share_.user_share());
86 syncer::ModelSafeRoutingInfo expected_routing_info; 89 ExpectRoutingInfo(registrar_.get(), {{AUTOFILL, syncer::GROUP_DB}});
87 expected_routing_info[AUTOFILL] = syncer::GROUP_DB;
88 ExpectRoutingInfo(registrar_.get(), expected_routing_info);
89 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet(AUTOFILL)); 90 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet(AUTOFILL));
90 TriggerChanges(registrar_.get(), AUTOFILL); 91 TriggerChanges(registrar_.get(), AUTOFILL);
91 done->Signal(); 92 done->Signal();
92 } 93 }
93 94
94 protected: 95 protected:
95 SyncBackendRegistrarTest() 96 SyncBackendRegistrarTest()
96 : db_thread_("DBThreadForTest"), 97 : db_thread_("DBThreadForTest"),
97 file_thread_("FileThreadForTest"), 98 file_thread_("FileThreadForTest"),
98 sync_thread_(NULL) {} 99 sync_thread_(NULL) {}
(...skipping 18 matching lines...) Expand all
117 sync_thread_->task_runner()->PostTask( 118 sync_thread_->task_runner()->PostTask(
118 FROM_HERE, base::Bind(&SyncBackendRegistrar::Shutdown, 119 FROM_HERE, base::Bind(&SyncBackendRegistrar::Shutdown,
119 base::Unretained(registrar_.release()))); 120 base::Unretained(registrar_.release())));
120 sync_thread_->WaitUntilThreadStarted(); 121 sync_thread_->WaitUntilThreadStarted();
121 base::RunLoop().RunUntilIdle(); 122 base::RunLoop().RunUntilIdle();
122 } 123 }
123 124
124 void ExpectRoutingInfo( 125 void ExpectRoutingInfo(
125 SyncBackendRegistrar* registrar, 126 SyncBackendRegistrar* registrar,
126 const syncer::ModelSafeRoutingInfo& expected_routing_info) { 127 const syncer::ModelSafeRoutingInfo& expected_routing_info) {
127 syncer::ModelSafeRoutingInfo routing_info; 128 syncer::ModelSafeRoutingInfo actual_routing_info;
128 registrar->GetModelSafeRoutingInfo(&routing_info); 129 registrar->GetModelSafeRoutingInfo(&actual_routing_info);
129 EXPECT_EQ(expected_routing_info, routing_info); 130 EXPECT_EQ(expected_routing_info, actual_routing_info);
131 }
132
133 void ExpectRoutingInfo(
134 SyncBackendRegistrar* registrar,
135 std::vector<std::tuple<ModelType, ModelSafeGroup>> expectations) {
136 syncer::ModelSafeRoutingInfo expected_routing_info;
137 for (auto tuple : expectations) {
138 expected_routing_info[std::get<0>(tuple)] = std::get<1>(tuple);
139 }
140 ExpectRoutingInfo(registrar, expected_routing_info);
130 } 141 }
131 142
132 void ExpectHasProcessorsForTypes(const SyncBackendRegistrar& registrar, 143 void ExpectHasProcessorsForTypes(const SyncBackendRegistrar& registrar,
133 ModelTypeSet types) { 144 ModelTypeSet types) {
134 for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) { 145 for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) {
135 ModelType model_type = ModelTypeFromInt(i); 146 ModelType model_type = ModelTypeFromInt(i);
136 EXPECT_EQ(types.Has(model_type), 147 EXPECT_EQ(types.Has(model_type),
137 registrar_->IsTypeActivatedForTest(model_type)); 148 registrar_->IsTypeActivatedForTest(model_type));
138 } 149 }
139 } 150 }
140 151
152 size_t GetWorkersSize() {
153 std::vector<scoped_refptr<syncer::ModelSafeWorker>> workers;
154 registrar_->GetWorkers(&workers);
155 return workers.size();
156 }
157
141 const scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner() { 158 const scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner() {
142 return message_loop_.task_runner(); 159 return message_loop_.task_runner();
143 } 160 }
144 161
145 const scoped_refptr<base::SingleThreadTaskRunner> db_task_runner() { 162 const scoped_refptr<base::SingleThreadTaskRunner> db_task_runner() {
146 return db_thread_.task_runner(); 163 return db_thread_.task_runner();
147 } 164 }
148 165
149 const scoped_refptr<base::SingleThreadTaskRunner> file_task_runner() { 166 const scoped_refptr<base::SingleThreadTaskRunner> file_task_runner() {
150 return db_thread_.task_runner(); 167 return db_thread_.task_runner();
151 } 168 }
152 169
153 base::MessageLoop message_loop_; 170 base::MessageLoop message_loop_;
154 base::Thread db_thread_; 171 base::Thread db_thread_;
155 base::Thread file_thread_; 172 base::Thread file_thread_;
156 173
157 syncer::TestUserShare test_user_share_; 174 syncer::TestUserShare test_user_share_;
158 std::unique_ptr<RegistrarSyncClient> sync_client_; 175 std::unique_ptr<RegistrarSyncClient> sync_client_;
159 std::unique_ptr<SyncBackendRegistrar> registrar_; 176 std::unique_ptr<SyncBackendRegistrar> registrar_;
160 177
161 base::Thread* sync_thread_; 178 base::Thread* sync_thread_;
162 }; 179 };
163 180
164 TEST_F(SyncBackendRegistrarTest, ConstructorEmpty) { 181 TEST_F(SyncBackendRegistrarTest, ConstructorEmpty) {
165 registrar_->SetInitialTypes(ModelTypeSet()); 182 registrar_->SetInitialTypes(ModelTypeSet());
166 EXPECT_FALSE(registrar_->IsNigoriEnabled()); 183 EXPECT_FALSE(registrar_->IsNigoriEnabled());
167 { 184 EXPECT_EQ(4u, GetWorkersSize());
168 std::vector<scoped_refptr<syncer::ModelSafeWorker>> workers;
169 registrar_->GetWorkers(&workers);
170 EXPECT_EQ(4u, workers.size());
171 }
172 ExpectRoutingInfo(registrar_.get(), syncer::ModelSafeRoutingInfo()); 185 ExpectRoutingInfo(registrar_.get(), syncer::ModelSafeRoutingInfo());
173 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); 186 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet());
174 } 187 }
175 188
176 TEST_F(SyncBackendRegistrarTest, ConstructorNonEmpty) { 189 TEST_F(SyncBackendRegistrarTest, ConstructorNonEmpty) {
177 const ModelTypeSet initial_types(BOOKMARKS, NIGORI, PASSWORDS);
178 registrar_->RegisterNonBlockingType(BOOKMARKS); 190 registrar_->RegisterNonBlockingType(BOOKMARKS);
179 registrar_->SetInitialTypes(initial_types); 191 registrar_->SetInitialTypes(ModelTypeSet(BOOKMARKS, NIGORI, PASSWORDS));
180 EXPECT_TRUE(registrar_->IsNigoriEnabled()); 192 EXPECT_TRUE(registrar_->IsNigoriEnabled());
181 { 193 EXPECT_EQ(4u, GetWorkersSize());
182 std::vector<scoped_refptr<syncer::ModelSafeWorker>> workers; 194 EXPECT_EQ(ModelTypeSet(NIGORI), registrar_->GetLastConfiguredTypes());
183 registrar_->GetWorkers(&workers); 195 // Bookmarks dropped because it is nonblocking.
184 EXPECT_EQ(4u, workers.size()); 196 // Passwords dropped because of no password store.
185 } 197 ExpectRoutingInfo(registrar_.get(), {{NIGORI, syncer::GROUP_PASSIVE}});
186 {
187 syncer::ModelSafeRoutingInfo expected_routing_info;
188 expected_routing_info[BOOKMARKS] = syncer::GROUP_NON_BLOCKING;
189 expected_routing_info[NIGORI] = syncer::GROUP_PASSIVE;
190 // Passwords dropped because of no password store.
191 ExpectRoutingInfo(registrar_.get(), expected_routing_info);
192 }
193 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); 198 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet());
194 } 199 }
195 200
201 TEST_F(SyncBackendRegistrarTest, ConstructorNonEmptyReversedInitialization) {
202 // The blocking types get to set initial types before NonBlocking types here.
203 registrar_->SetInitialTypes(ModelTypeSet(BOOKMARKS, NIGORI, PASSWORDS));
204 registrar_->RegisterNonBlockingType(BOOKMARKS);
205 EXPECT_TRUE(registrar_->IsNigoriEnabled());
206 EXPECT_EQ(4u, GetWorkersSize());
207 EXPECT_EQ(ModelTypeSet(NIGORI), registrar_->GetLastConfiguredTypes());
208 // Bookmarks dropped because it is nonblocking.
209 // Passwords dropped because of no password store.
210 ExpectRoutingInfo(registrar_.get(), {{NIGORI, syncer::GROUP_PASSIVE}});
211 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet());
212 }
213
196 TEST_F(SyncBackendRegistrarTest, ConfigureDataTypes) { 214 TEST_F(SyncBackendRegistrarTest, ConfigureDataTypes) {
197 registrar_->RegisterNonBlockingType(BOOKMARKS); 215 registrar_->RegisterNonBlockingType(BOOKMARKS);
198 registrar_->SetInitialTypes(ModelTypeSet()); 216 registrar_->SetInitialTypes(ModelTypeSet());
199 217
200 // Add. 218 // Add.
201 const ModelTypeSet types1(BOOKMARKS, NIGORI, AUTOFILL); 219 const ModelTypeSet types1(BOOKMARKS, NIGORI, AUTOFILL);
202 EXPECT_EQ(types1, registrar_->ConfigureDataTypes(types1, ModelTypeSet())); 220 EXPECT_EQ(types1, registrar_->ConfigureDataTypes(types1, ModelTypeSet()));
203 { 221 ExpectRoutingInfo(registrar_.get(), {{BOOKMARKS, syncer::GROUP_NON_BLOCKING},
204 syncer::ModelSafeRoutingInfo expected_routing_info; 222 {NIGORI, syncer::GROUP_PASSIVE},
205 expected_routing_info[BOOKMARKS] = syncer::GROUP_NON_BLOCKING; 223 {AUTOFILL, syncer::GROUP_PASSIVE}});
206 expected_routing_info[NIGORI] = syncer::GROUP_PASSIVE;
207 expected_routing_info[AUTOFILL] = syncer::GROUP_PASSIVE;
208 ExpectRoutingInfo(registrar_.get(), expected_routing_info);
209 }
210 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); 224 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet());
211 EXPECT_EQ(types1, registrar_->GetLastConfiguredTypes()); 225 EXPECT_EQ(types1, registrar_->GetLastConfiguredTypes());
212 226
213 // Add and remove. 227 // Add and remove.
214 const ModelTypeSet types2(PREFERENCES, THEMES); 228 const ModelTypeSet types2(PREFERENCES, THEMES);
215 EXPECT_EQ(types2, registrar_->ConfigureDataTypes(types2, types1)); 229 EXPECT_EQ(types2, registrar_->ConfigureDataTypes(types2, types1));
216 { 230
217 syncer::ModelSafeRoutingInfo expected_routing_info; 231 ExpectRoutingInfo(registrar_.get(), {{PREFERENCES, syncer::GROUP_PASSIVE},
218 expected_routing_info[PREFERENCES] = syncer::GROUP_PASSIVE; 232 {THEMES, syncer::GROUP_PASSIVE}});
219 expected_routing_info[THEMES] = syncer::GROUP_PASSIVE;
220 ExpectRoutingInfo(registrar_.get(), expected_routing_info);
221 }
222 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); 233 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet());
223 EXPECT_EQ(types2, registrar_->GetLastConfiguredTypes()); 234 EXPECT_EQ(types2, registrar_->GetLastConfiguredTypes());
224 235
225 // Remove. 236 // Remove.
226 EXPECT_TRUE(registrar_->ConfigureDataTypes(ModelTypeSet(), types2).Empty()); 237 EXPECT_TRUE(registrar_->ConfigureDataTypes(ModelTypeSet(), types2).Empty());
227 ExpectRoutingInfo(registrar_.get(), syncer::ModelSafeRoutingInfo()); 238 ExpectRoutingInfo(registrar_.get(), syncer::ModelSafeRoutingInfo());
228 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); 239 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet());
229 EXPECT_EQ(ModelTypeSet(), registrar_->GetLastConfiguredTypes()); 240 EXPECT_EQ(ModelTypeSet(), registrar_->GetLastConfiguredTypes());
230 } 241 }
231 242
(...skipping 10 matching lines...) Expand all
242 EXPECT_CALL(change_processor_mock, ApplyChangesFromSyncModel(NULL, _, _)); 253 EXPECT_CALL(change_processor_mock, ApplyChangesFromSyncModel(NULL, _, _));
243 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true)); 254 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true));
244 EXPECT_CALL(change_processor_mock, CommitChangesFromSyncModel()); 255 EXPECT_CALL(change_processor_mock, CommitChangesFromSyncModel());
245 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(false)); 256 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(false));
246 257
247 const ModelTypeSet types(BOOKMARKS); 258 const ModelTypeSet types(BOOKMARKS);
248 EXPECT_EQ(types, registrar_->ConfigureDataTypes(types, ModelTypeSet())); 259 EXPECT_EQ(types, registrar_->ConfigureDataTypes(types, ModelTypeSet()));
249 registrar_->ActivateDataType(BOOKMARKS, syncer::GROUP_UI, 260 registrar_->ActivateDataType(BOOKMARKS, syncer::GROUP_UI,
250 &change_processor_mock, 261 &change_processor_mock,
251 test_user_share_.user_share()); 262 test_user_share_.user_share());
252 { 263 ExpectRoutingInfo(registrar_.get(), {{BOOKMARKS, syncer::GROUP_UI}});
253 syncer::ModelSafeRoutingInfo expected_routing_info;
254 expected_routing_info[BOOKMARKS] = syncer::GROUP_UI;
255 ExpectRoutingInfo(registrar_.get(), expected_routing_info);
256 }
257 ExpectHasProcessorsForTypes(*registrar_, types); 264 ExpectHasProcessorsForTypes(*registrar_, types);
258 265
259 TriggerChanges(registrar_.get(), BOOKMARKS); 266 TriggerChanges(registrar_.get(), BOOKMARKS);
260 267
261 registrar_->DeactivateDataType(BOOKMARKS); 268 registrar_->DeactivateDataType(BOOKMARKS);
262 ExpectRoutingInfo(registrar_.get(), syncer::ModelSafeRoutingInfo()); 269 ExpectRoutingInfo(registrar_.get(), syncer::ModelSafeRoutingInfo());
263 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); 270 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet());
264 271
265 // Should do nothing. 272 // Should do nothing.
266 TriggerChanges(registrar_.get(), BOOKMARKS); 273 TriggerChanges(registrar_.get(), BOOKMARKS);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 // handled correctly in SyncBackendRegistrar. 311 // handled correctly in SyncBackendRegistrar.
305 TEST_F(SyncBackendRegistrarTest, ConfigureNonBlockingDataType) { 312 TEST_F(SyncBackendRegistrarTest, ConfigureNonBlockingDataType) {
306 registrar_->RegisterNonBlockingType(AUTOFILL); 313 registrar_->RegisterNonBlockingType(AUTOFILL);
307 registrar_->RegisterNonBlockingType(BOOKMARKS); 314 registrar_->RegisterNonBlockingType(BOOKMARKS);
308 315
309 ExpectRoutingInfo(registrar_.get(), syncer::ModelSafeRoutingInfo()); 316 ExpectRoutingInfo(registrar_.get(), syncer::ModelSafeRoutingInfo());
310 // Simulate that initial sync was already done for AUTOFILL. 317 // Simulate that initial sync was already done for AUTOFILL.
311 registrar_->AddRestoredNonBlockingType(AUTOFILL); 318 registrar_->AddRestoredNonBlockingType(AUTOFILL);
312 // It should be added to routing info and set of configured types. 319 // It should be added to routing info and set of configured types.
313 EXPECT_EQ(ModelTypeSet(AUTOFILL), registrar_->GetLastConfiguredTypes()); 320 EXPECT_EQ(ModelTypeSet(AUTOFILL), registrar_->GetLastConfiguredTypes());
314 { 321 ExpectRoutingInfo(registrar_.get(), {{AUTOFILL, syncer::GROUP_NON_BLOCKING}});
315 syncer::ModelSafeRoutingInfo expected_routing_info;
316 expected_routing_info[AUTOFILL] = syncer::GROUP_NON_BLOCKING;
317 ExpectRoutingInfo(registrar_.get(), expected_routing_info);
318 }
319 322
320 // Configure two non-blocking types. Initial sync wasn't done for BOOKMARKS so 323 // Configure two non-blocking types. Initial sync wasn't done for BOOKMARKS so
321 // it should be included in types to be downloaded. 324 // it should be included in types to be downloaded.
322 ModelTypeSet types_to_add(AUTOFILL, BOOKMARKS); 325 ModelTypeSet types_to_add(AUTOFILL, BOOKMARKS);
323 ModelTypeSet newly_added_types = 326 ModelTypeSet newly_added_types =
324 registrar_->ConfigureDataTypes(types_to_add, ModelTypeSet()); 327 registrar_->ConfigureDataTypes(types_to_add, ModelTypeSet());
325 EXPECT_EQ(ModelTypeSet(BOOKMARKS), newly_added_types); 328 EXPECT_EQ(ModelTypeSet(BOOKMARKS), newly_added_types);
326 EXPECT_EQ(types_to_add, registrar_->GetLastConfiguredTypes()); 329 EXPECT_EQ(types_to_add, registrar_->GetLastConfiguredTypes());
327 { 330 ExpectRoutingInfo(registrar_.get(),
328 syncer::ModelSafeRoutingInfo expected_routing_info; 331 {{AUTOFILL, syncer::GROUP_NON_BLOCKING},
329 expected_routing_info[AUTOFILL] = syncer::GROUP_NON_BLOCKING; 332 {BOOKMARKS, syncer::GROUP_NON_BLOCKING}});
330 expected_routing_info[BOOKMARKS] = syncer::GROUP_NON_BLOCKING;
331 ExpectRoutingInfo(registrar_.get(), expected_routing_info);
332 }
333 } 333 }
334 334
335 class SyncBackendRegistrarShutdownTest : public testing::Test { 335 class SyncBackendRegistrarShutdownTest : public testing::Test {
336 public: 336 public:
337 void BlockDBThread() { 337 void BlockDBThread() {
338 EXPECT_FALSE(db_thread_lock_.Try()); 338 EXPECT_FALSE(db_thread_lock_.Try());
339 339
340 db_thread_blocked_.Signal(); 340 db_thread_blocked_.Signal();
341 base::AutoLock l(db_thread_lock_); 341 base::AutoLock l(db_thread_lock_);
342 } 342 }
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 db_thread_lock_.Release(); 452 db_thread_lock_.Release();
453 453
454 // Run the main thread loop until all workers have been removed and the 454 // Run the main thread loop until all workers have been removed and the
455 // registrar destroyed. 455 // registrar destroyed.
456 run_loop_.Run(); 456 run_loop_.Run();
457 } 457 }
458 458
459 } // namespace 459 } // namespace
460 460
461 } // namespace browser_sync 461 } // namespace browser_sync
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698