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

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

Issue 2501743005: [Sync] Remove SyncClient dep from SyncBackendRegistrar. (Closed)
Patch Set: Self-review. Created 4 years, 1 month 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
« no previous file with comments | « components/sync/driver/glue/sync_backend_registrar.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <memory> 7 #include <memory>
8 8
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
11 #include "base/run_loop.h" 11 #include "base/run_loop.h"
12 #include "base/single_thread_task_runner.h" 12 #include "base/single_thread_task_runner.h"
13 #include "base/threading/thread.h" 13 #include "base/threading/thread.h"
14 #include "components/sync/driver/change_processor_mock.h" 14 #include "components/sync/driver/change_processor_mock.h"
15 #include "components/sync/driver/fake_sync_client.h"
16 #include "components/sync/driver/glue/browser_thread_model_worker.h" 15 #include "components/sync/driver/glue/browser_thread_model_worker.h"
17 #include "components/sync/driver/sync_api_component_factory_mock.h"
18 #include "components/sync/engine/passive_model_worker.h" 16 #include "components/sync/engine/passive_model_worker.h"
19 #include "components/sync/syncable/test_user_share.h" 17 #include "components/sync/syncable/test_user_share.h"
20 #include "testing/gmock/include/gmock/gmock.h" 18 #include "testing/gmock/include/gmock/gmock.h"
21 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
22 20
23 namespace syncer { 21 namespace syncer {
24 22
25 namespace { 23 namespace {
26 24
27 using ::testing::_; 25 using ::testing::_;
28 using ::testing::InSequence; 26 using ::testing::InSequence;
29 using ::testing::Return; 27 using ::testing::Return;
30 using ::testing::StrictMock; 28 using ::testing::StrictMock;
31 29
32 void TriggerChanges(SyncBackendRegistrar* registrar, ModelType type) {
33 registrar->OnChangesApplied(type, 0, nullptr, ImmutableChangeRecordList());
34 registrar->OnChangesComplete(type);
35 }
36
37 class RegistrarSyncClient : public FakeSyncClient {
38 public:
39 RegistrarSyncClient(
40 const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner,
41 const scoped_refptr<base::SingleThreadTaskRunner>& db_task_runner,
42 const scoped_refptr<base::SingleThreadTaskRunner>& file_task_runner)
43 : ui_task_runner_(ui_task_runner),
44 db_task_runner_(db_task_runner),
45 file_task_runner_(file_task_runner) {}
46
47 scoped_refptr<ModelSafeWorker> CreateModelWorkerForGroup(
48 ModelSafeGroup group) override {
49 switch (group) {
50 case GROUP_UI:
51 return new BrowserThreadModelWorker(ui_task_runner_, group);
52 case GROUP_DB:
53 return new BrowserThreadModelWorker(db_task_runner_, group);
54 case GROUP_FILE:
55 return new BrowserThreadModelWorker(file_task_runner_, group);
56 case GROUP_PASSIVE:
57 return new PassiveModelWorker();
58 default:
59 return nullptr;
60 }
61 }
62
63 private:
64 const scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
65 const scoped_refptr<base::SingleThreadTaskRunner> db_task_runner_;
66 const scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_;
67 };
68
69 // Flaky: https://crbug.com/498238
70 class SyncBackendRegistrarTest : public testing::Test { 30 class SyncBackendRegistrarTest : public testing::Test {
71 public: 31 public:
72 void TestNonUIDataTypeActivationAsync(ChangeProcessor* processor,
73 base::WaitableEvent* done) {
74 registrar_->ActivateDataType(AUTOFILL, GROUP_DB, processor,
75 test_user_share_.user_share());
76 ExpectRoutingInfo(registrar_.get(), {{AUTOFILL, GROUP_DB}});
77 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet(AUTOFILL));
78 TriggerChanges(registrar_.get(), AUTOFILL);
79 done->Signal();
80 }
81
82 protected:
83 SyncBackendRegistrarTest() 32 SyncBackendRegistrarTest()
84 : db_thread_("DBThreadForTest"), 33 : db_thread_("DBThreadForTest"),
85 file_thread_("FileThreadForTest"), 34 file_thread_("FileThreadForTest"),
86 sync_thread_("SyncThreadForTest") {} 35 sync_thread_("SyncThreadForTest") {}
87 36
88 ~SyncBackendRegistrarTest() override {}
89
90 void SetUp() override { 37 void SetUp() override {
91 db_thread_.StartAndWaitForTesting(); 38 db_thread_.StartAndWaitForTesting();
92 file_thread_.StartAndWaitForTesting(); 39 file_thread_.StartAndWaitForTesting();
93 sync_thread_.StartAndWaitForTesting(); 40 sync_thread_.StartAndWaitForTesting();
94 test_user_share_.SetUp(); 41 test_user_share_.SetUp();
95 sync_client_ = base::MakeUnique<RegistrarSyncClient>( 42 registrar_ = base::MakeUnique<SyncBackendRegistrar>(
96 ui_task_runner(), db_task_runner(), file_task_runner()); 43 "test", base::Bind(&SyncBackendRegistrarTest::CreateModelWorkerForGroup,
97 registrar_ = 44 base::Unretained(this)));
98 base::MakeUnique<SyncBackendRegistrar>("test", sync_client_.get());
99 } 45 }
100 46
101 void TearDown() override { 47 void TearDown() override {
102 registrar_->RequestWorkerStopOnUIThread(); 48 registrar_->RequestWorkerStopOnUIThread();
103 test_user_share_.TearDown(); 49 test_user_share_.TearDown();
104 sync_thread_.task_runner()->DeleteSoon(FROM_HERE, registrar_.release()); 50 sync_thread_.task_runner()->DeleteSoon(FROM_HERE, registrar_.release());
105 sync_thread_.FlushForTesting(); 51 sync_thread_.FlushForTesting();
106 } 52 }
107 53
108 void ExpectRoutingInfo(SyncBackendRegistrar* registrar, 54 void TriggerChanges(ModelType type) {
109 const ModelSafeRoutingInfo& expected_routing_info) { 55 registrar_->OnChangesApplied(type, 0, nullptr, ImmutableChangeRecordList());
56 registrar_->OnChangesComplete(type);
57 }
58
59 void ExpectRoutingInfo(const ModelSafeRoutingInfo& expected_routing_info) {
110 ModelSafeRoutingInfo actual_routing_info; 60 ModelSafeRoutingInfo actual_routing_info;
111 registrar->GetModelSafeRoutingInfo(&actual_routing_info); 61 registrar_->GetModelSafeRoutingInfo(&actual_routing_info);
112 EXPECT_EQ(expected_routing_info, actual_routing_info); 62 EXPECT_EQ(expected_routing_info, actual_routing_info);
113 } 63 }
114 64
115 void ExpectHasProcessorsForTypes(const SyncBackendRegistrar& registrar, 65 void ExpectHasProcessorsForTypes(ModelTypeSet types) {
116 ModelTypeSet types) {
117 for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) { 66 for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) {
118 ModelType model_type = ModelTypeFromInt(i); 67 ModelType model_type = ModelTypeFromInt(i);
119 EXPECT_EQ(types.Has(model_type), 68 EXPECT_EQ(types.Has(model_type),
120 registrar_->IsTypeActivatedForTest(model_type)); 69 registrar_->IsTypeActivatedForTest(model_type));
121 } 70 }
122 } 71 }
123 72
124 size_t GetWorkersSize() { 73 size_t GetWorkersSize() {
125 std::vector<scoped_refptr<ModelSafeWorker>> workers; 74 std::vector<scoped_refptr<ModelSafeWorker>> workers;
126 registrar_->GetWorkers(&workers); 75 registrar_->GetWorkers(&workers);
127 return workers.size(); 76 return workers.size();
128 } 77 }
129 78
130 const scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner() { 79 // Part of the ActivateDeactivateNonUIDataType test below.
131 return message_loop_.task_runner(); 80 void TestNonUIDataTypeActivationAsync(ChangeProcessor* processor,
81 base::WaitableEvent* done) {
82 registrar_->ActivateDataType(AUTOFILL, GROUP_DB, processor, user_share());
83 ExpectRoutingInfo({{AUTOFILL, GROUP_DB}});
84 ExpectHasProcessorsForTypes(ModelTypeSet(AUTOFILL));
85 TriggerChanges(AUTOFILL);
86 done->Signal();
132 } 87 }
133 88
134 const scoped_refptr<base::SingleThreadTaskRunner> db_task_runner() { 89 SyncBackendRegistrar* registrar() { return registrar_.get(); }
90 UserShare* user_share() { return test_user_share_.user_share(); }
91 scoped_refptr<base::SingleThreadTaskRunner> db_task_runner() {
135 return db_thread_.task_runner(); 92 return db_thread_.task_runner();
136 } 93 }
137 94
138 const scoped_refptr<base::SingleThreadTaskRunner> file_task_runner() { 95 private:
139 return db_thread_.task_runner(); 96 scoped_refptr<ModelSafeWorker> CreateModelWorkerForGroup(
97 ModelSafeGroup group) {
98 switch (group) {
99 case GROUP_UI:
100 return new BrowserThreadModelWorker(message_loop_.task_runner(), group);
101 case GROUP_DB:
102 return new BrowserThreadModelWorker(db_thread_.task_runner(), group);
103 case GROUP_FILE:
104 return new BrowserThreadModelWorker(file_thread_.task_runner(), group);
105 case GROUP_PASSIVE:
106 return new PassiveModelWorker();
107 default:
108 return nullptr;
109 }
140 } 110 }
141 111
142 base::MessageLoop message_loop_; 112 base::MessageLoop message_loop_;
143 base::Thread db_thread_; 113 base::Thread db_thread_;
144 base::Thread file_thread_; 114 base::Thread file_thread_;
145 base::Thread sync_thread_; 115 base::Thread sync_thread_;
146 116
147 TestUserShare test_user_share_; 117 TestUserShare test_user_share_;
148 std::unique_ptr<RegistrarSyncClient> sync_client_;
149 std::unique_ptr<SyncBackendRegistrar> registrar_; 118 std::unique_ptr<SyncBackendRegistrar> registrar_;
150 }; 119 };
151 120
152 TEST_F(SyncBackendRegistrarTest, ConstructorEmpty) { 121 TEST_F(SyncBackendRegistrarTest, ConstructorEmpty) {
153 registrar_->SetInitialTypes(ModelTypeSet()); 122 registrar()->SetInitialTypes(ModelTypeSet());
154 EXPECT_FALSE(registrar_->IsNigoriEnabled()); 123 EXPECT_FALSE(registrar()->IsNigoriEnabled());
155 EXPECT_EQ(4u, GetWorkersSize()); 124 EXPECT_EQ(4u, GetWorkersSize());
156 ExpectRoutingInfo(registrar_.get(), ModelSafeRoutingInfo()); 125 ExpectRoutingInfo(ModelSafeRoutingInfo());
157 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); 126 ExpectHasProcessorsForTypes(ModelTypeSet());
158 } 127 }
159 128
160 TEST_F(SyncBackendRegistrarTest, ConstructorNonEmpty) { 129 TEST_F(SyncBackendRegistrarTest, ConstructorNonEmpty) {
161 registrar_->RegisterNonBlockingType(BOOKMARKS); 130 registrar()->RegisterNonBlockingType(BOOKMARKS);
162 registrar_->SetInitialTypes(ModelTypeSet(BOOKMARKS, NIGORI, PASSWORDS)); 131 registrar()->SetInitialTypes(ModelTypeSet(BOOKMARKS, NIGORI, PASSWORDS));
163 EXPECT_TRUE(registrar_->IsNigoriEnabled()); 132 EXPECT_TRUE(registrar()->IsNigoriEnabled());
164 EXPECT_EQ(4u, GetWorkersSize()); 133 EXPECT_EQ(4u, GetWorkersSize());
165 EXPECT_EQ(ModelTypeSet(NIGORI), registrar_->GetLastConfiguredTypes()); 134 EXPECT_EQ(ModelTypeSet(NIGORI), registrar()->GetLastConfiguredTypes());
166 // Bookmarks dropped because it is nonblocking. 135 // Bookmarks dropped because it is nonblocking.
167 // Passwords dropped because of no password store. 136 // Passwords dropped because of no password store.
168 ExpectRoutingInfo(registrar_.get(), {{NIGORI, GROUP_PASSIVE}}); 137 ExpectRoutingInfo({{NIGORI, GROUP_PASSIVE}});
169 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); 138 ExpectHasProcessorsForTypes(ModelTypeSet());
170 } 139 }
171 140
172 TEST_F(SyncBackendRegistrarTest, ConstructorNonEmptyReversedInitialization) { 141 TEST_F(SyncBackendRegistrarTest, ConstructorNonEmptyReversedInitialization) {
173 // The blocking types get to set initial types before NonBlocking types here. 142 // The blocking types get to set initial types before NonBlocking types here.
174 registrar_->SetInitialTypes(ModelTypeSet(BOOKMARKS, NIGORI, PASSWORDS)); 143 registrar()->SetInitialTypes(ModelTypeSet(BOOKMARKS, NIGORI, PASSWORDS));
175 registrar_->RegisterNonBlockingType(BOOKMARKS); 144 registrar()->RegisterNonBlockingType(BOOKMARKS);
176 EXPECT_TRUE(registrar_->IsNigoriEnabled()); 145 EXPECT_TRUE(registrar()->IsNigoriEnabled());
177 EXPECT_EQ(4u, GetWorkersSize()); 146 EXPECT_EQ(4u, GetWorkersSize());
178 EXPECT_EQ(ModelTypeSet(NIGORI), registrar_->GetLastConfiguredTypes()); 147 EXPECT_EQ(ModelTypeSet(NIGORI), registrar()->GetLastConfiguredTypes());
179 // Bookmarks dropped because it is nonblocking. 148 // Bookmarks dropped because it is nonblocking.
180 // Passwords dropped because of no password store. 149 // Passwords dropped because of no password store.
181 ExpectRoutingInfo(registrar_.get(), {{NIGORI, GROUP_PASSIVE}}); 150 ExpectRoutingInfo({{NIGORI, GROUP_PASSIVE}});
182 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); 151 ExpectHasProcessorsForTypes(ModelTypeSet());
183 } 152 }
184 153
185 TEST_F(SyncBackendRegistrarTest, ConfigureDataTypes) { 154 TEST_F(SyncBackendRegistrarTest, ConfigureDataTypes) {
186 registrar_->RegisterNonBlockingType(BOOKMARKS); 155 registrar()->RegisterNonBlockingType(BOOKMARKS);
187 registrar_->SetInitialTypes(ModelTypeSet()); 156 registrar()->SetInitialTypes(ModelTypeSet());
188 157
189 // Add. 158 // Add.
190 const ModelTypeSet types1(BOOKMARKS, NIGORI, AUTOFILL); 159 const ModelTypeSet types1(BOOKMARKS, NIGORI, AUTOFILL);
191 EXPECT_EQ(types1, registrar_->ConfigureDataTypes(types1, ModelTypeSet())); 160 EXPECT_EQ(types1, registrar()->ConfigureDataTypes(types1, ModelTypeSet()));
192 ExpectRoutingInfo(registrar_.get(), {{BOOKMARKS, GROUP_NON_BLOCKING}, 161 ExpectRoutingInfo({{BOOKMARKS, GROUP_NON_BLOCKING},
193 {NIGORI, GROUP_PASSIVE}, 162 {NIGORI, GROUP_PASSIVE},
194 {AUTOFILL, GROUP_PASSIVE}}); 163 {AUTOFILL, GROUP_PASSIVE}});
195 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); 164 ExpectHasProcessorsForTypes(ModelTypeSet());
196 EXPECT_EQ(types1, registrar_->GetLastConfiguredTypes()); 165 EXPECT_EQ(types1, registrar()->GetLastConfiguredTypes());
197 166
198 // Add and remove. 167 // Add and remove.
199 const ModelTypeSet types2(PREFERENCES, THEMES); 168 const ModelTypeSet types2(PREFERENCES, THEMES);
200 EXPECT_EQ(types2, registrar_->ConfigureDataTypes(types2, types1)); 169 EXPECT_EQ(types2, registrar()->ConfigureDataTypes(types2, types1));
201 170
202 ExpectRoutingInfo(registrar_.get(), 171 ExpectRoutingInfo({{PREFERENCES, GROUP_PASSIVE}, {THEMES, GROUP_PASSIVE}});
203 {{PREFERENCES, GROUP_PASSIVE}, {THEMES, GROUP_PASSIVE}}); 172 ExpectHasProcessorsForTypes(ModelTypeSet());
204 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); 173 EXPECT_EQ(types2, registrar()->GetLastConfiguredTypes());
205 EXPECT_EQ(types2, registrar_->GetLastConfiguredTypes());
206 174
207 // Remove. 175 // Remove.
208 EXPECT_TRUE(registrar_->ConfigureDataTypes(ModelTypeSet(), types2).Empty()); 176 EXPECT_TRUE(registrar()->ConfigureDataTypes(ModelTypeSet(), types2).Empty());
209 ExpectRoutingInfo(registrar_.get(), ModelSafeRoutingInfo()); 177 ExpectRoutingInfo(ModelSafeRoutingInfo());
210 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); 178 ExpectHasProcessorsForTypes(ModelTypeSet());
211 EXPECT_EQ(ModelTypeSet(), registrar_->GetLastConfiguredTypes()); 179 EXPECT_EQ(ModelTypeSet(), registrar()->GetLastConfiguredTypes());
212 } 180 }
213 181
214 TEST_F(SyncBackendRegistrarTest, ActivateDeactivateUIDataType) { 182 TEST_F(SyncBackendRegistrarTest, ActivateDeactivateUIDataType) {
215 InSequence in_sequence; 183 InSequence in_sequence;
216 registrar_->SetInitialTypes(ModelTypeSet()); 184 registrar()->SetInitialTypes(ModelTypeSet());
217 185
218 // Should do nothing. 186 // Should do nothing.
219 TriggerChanges(registrar_.get(), BOOKMARKS); 187 TriggerChanges(BOOKMARKS);
220 188
221 StrictMock<ChangeProcessorMock> change_processor_mock; 189 StrictMock<ChangeProcessorMock> change_processor_mock;
222 EXPECT_CALL(change_processor_mock, StartImpl()); 190 EXPECT_CALL(change_processor_mock, StartImpl());
223 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true)); 191 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true));
224 EXPECT_CALL(change_processor_mock, ApplyChangesFromSyncModel(nullptr, _, _)); 192 EXPECT_CALL(change_processor_mock, ApplyChangesFromSyncModel(nullptr, _, _));
225 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true)); 193 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true));
226 EXPECT_CALL(change_processor_mock, CommitChangesFromSyncModel()); 194 EXPECT_CALL(change_processor_mock, CommitChangesFromSyncModel());
227 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(false)); 195 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(false));
228 196
229 const ModelTypeSet types(BOOKMARKS); 197 const ModelTypeSet types(BOOKMARKS);
230 EXPECT_EQ(types, registrar_->ConfigureDataTypes(types, ModelTypeSet())); 198 EXPECT_EQ(types, registrar()->ConfigureDataTypes(types, ModelTypeSet()));
231 registrar_->ActivateDataType(BOOKMARKS, GROUP_UI, &change_processor_mock, 199 registrar()->ActivateDataType(BOOKMARKS, GROUP_UI, &change_processor_mock,
232 test_user_share_.user_share()); 200 user_share());
233 ExpectRoutingInfo(registrar_.get(), {{BOOKMARKS, GROUP_UI}}); 201 ExpectRoutingInfo({{BOOKMARKS, GROUP_UI}});
234 ExpectHasProcessorsForTypes(*registrar_, types); 202 ExpectHasProcessorsForTypes(types);
235 203
236 TriggerChanges(registrar_.get(), BOOKMARKS); 204 TriggerChanges(BOOKMARKS);
237 205
238 registrar_->DeactivateDataType(BOOKMARKS); 206 registrar()->DeactivateDataType(BOOKMARKS);
239 ExpectRoutingInfo(registrar_.get(), ModelSafeRoutingInfo()); 207 ExpectRoutingInfo(ModelSafeRoutingInfo());
240 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); 208 ExpectHasProcessorsForTypes(ModelTypeSet());
241 209
242 // Should do nothing. 210 // Should do nothing.
243 TriggerChanges(registrar_.get(), BOOKMARKS); 211 TriggerChanges(BOOKMARKS);
244 } 212 }
245 213
246 TEST_F(SyncBackendRegistrarTest, ActivateDeactivateNonUIDataType) { 214 TEST_F(SyncBackendRegistrarTest, ActivateDeactivateNonUIDataType) {
247 InSequence in_sequence; 215 InSequence in_sequence;
248 registrar_->SetInitialTypes(ModelTypeSet()); 216 registrar()->SetInitialTypes(ModelTypeSet());
249 217
250 // Should do nothing. 218 // Should do nothing.
251 TriggerChanges(registrar_.get(), AUTOFILL); 219 TriggerChanges(AUTOFILL);
252 220
253 StrictMock<ChangeProcessorMock> change_processor_mock; 221 StrictMock<ChangeProcessorMock> change_processor_mock;
254 EXPECT_CALL(change_processor_mock, StartImpl()); 222 EXPECT_CALL(change_processor_mock, StartImpl());
255 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true)); 223 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true));
256 EXPECT_CALL(change_processor_mock, ApplyChangesFromSyncModel(nullptr, _, _)); 224 EXPECT_CALL(change_processor_mock, ApplyChangesFromSyncModel(nullptr, _, _));
257 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true)); 225 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(true));
258 EXPECT_CALL(change_processor_mock, CommitChangesFromSyncModel()); 226 EXPECT_CALL(change_processor_mock, CommitChangesFromSyncModel());
259 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(false)); 227 EXPECT_CALL(change_processor_mock, IsRunning()).WillRepeatedly(Return(false));
260 228
261 const ModelTypeSet types(AUTOFILL); 229 const ModelTypeSet types(AUTOFILL);
262 EXPECT_EQ(types, registrar_->ConfigureDataTypes(types, ModelTypeSet())); 230 EXPECT_EQ(types, registrar()->ConfigureDataTypes(types, ModelTypeSet()));
263 231
264 base::WaitableEvent done(base::WaitableEvent::ResetPolicy::AUTOMATIC, 232 base::WaitableEvent done(base::WaitableEvent::ResetPolicy::AUTOMATIC,
265 base::WaitableEvent::InitialState::NOT_SIGNALED); 233 base::WaitableEvent::InitialState::NOT_SIGNALED);
266 db_task_runner()->PostTask( 234 db_task_runner()->PostTask(
267 FROM_HERE, 235 FROM_HERE,
268 base::Bind(&SyncBackendRegistrarTest::TestNonUIDataTypeActivationAsync, 236 base::Bind(&SyncBackendRegistrarTest::TestNonUIDataTypeActivationAsync,
269 base::Unretained(this), &change_processor_mock, &done)); 237 base::Unretained(this), &change_processor_mock, &done));
270 done.Wait(); 238 done.Wait();
271 239
272 registrar_->DeactivateDataType(AUTOFILL); 240 registrar()->DeactivateDataType(AUTOFILL);
273 ExpectRoutingInfo(registrar_.get(), ModelSafeRoutingInfo()); 241 ExpectRoutingInfo(ModelSafeRoutingInfo());
274 ExpectHasProcessorsForTypes(*registrar_, ModelTypeSet()); 242 ExpectHasProcessorsForTypes(ModelTypeSet());
275 243
276 // Should do nothing. 244 // Should do nothing.
277 TriggerChanges(registrar_.get(), AUTOFILL); 245 TriggerChanges(AUTOFILL);
278 } 246 }
279 247
280 // Tests that registration and configuration of non-blocking data types is 248 // Tests that registration and configuration of non-blocking data types is
281 // handled correctly in SyncBackendRegistrar. 249 // handled correctly in SyncBackendRegistrar.
282 TEST_F(SyncBackendRegistrarTest, ConfigureNonBlockingDataType) { 250 TEST_F(SyncBackendRegistrarTest, ConfigureNonBlockingDataType) {
283 registrar_->RegisterNonBlockingType(AUTOFILL); 251 registrar()->RegisterNonBlockingType(AUTOFILL);
284 registrar_->RegisterNonBlockingType(BOOKMARKS); 252 registrar()->RegisterNonBlockingType(BOOKMARKS);
285 253
286 ExpectRoutingInfo(registrar_.get(), ModelSafeRoutingInfo()); 254 ExpectRoutingInfo(ModelSafeRoutingInfo());
287 // Simulate that initial sync was already done for AUTOFILL. 255 // Simulate that initial sync was already done for AUTOFILL.
288 registrar_->AddRestoredNonBlockingType(AUTOFILL); 256 registrar()->AddRestoredNonBlockingType(AUTOFILL);
289 // It should be added to routing info and set of configured types. 257 // It should be added to routing info and set of configured types.
290 EXPECT_EQ(ModelTypeSet(AUTOFILL), registrar_->GetLastConfiguredTypes()); 258 EXPECT_EQ(ModelTypeSet(AUTOFILL), registrar()->GetLastConfiguredTypes());
291 ExpectRoutingInfo(registrar_.get(), {{AUTOFILL, GROUP_NON_BLOCKING}}); 259 ExpectRoutingInfo({{AUTOFILL, GROUP_NON_BLOCKING}});
292 260
293 // Configure two non-blocking types. Initial sync wasn't done for BOOKMARKS so 261 // Configure two non-blocking types. Initial sync wasn't done for BOOKMARKS so
294 // it should be included in types to be downloaded. 262 // it should be included in types to be downloaded.
295 ModelTypeSet types_to_add(AUTOFILL, BOOKMARKS); 263 ModelTypeSet types_to_add(AUTOFILL, BOOKMARKS);
296 ModelTypeSet newly_added_types = 264 ModelTypeSet newly_added_types =
297 registrar_->ConfigureDataTypes(types_to_add, ModelTypeSet()); 265 registrar()->ConfigureDataTypes(types_to_add, ModelTypeSet());
298 EXPECT_EQ(ModelTypeSet(BOOKMARKS), newly_added_types); 266 EXPECT_EQ(ModelTypeSet(BOOKMARKS), newly_added_types);
299 EXPECT_EQ(types_to_add, registrar_->GetLastConfiguredTypes()); 267 EXPECT_EQ(types_to_add, registrar()->GetLastConfiguredTypes());
300 ExpectRoutingInfo(registrar_.get(), {{AUTOFILL, GROUP_NON_BLOCKING}, 268 ExpectRoutingInfo(
301 {BOOKMARKS, GROUP_NON_BLOCKING}}); 269 {{AUTOFILL, GROUP_NON_BLOCKING}, {BOOKMARKS, GROUP_NON_BLOCKING}});
302 } 270 }
303 271
304 } // namespace 272 } // namespace
305 273
306 } // namespace syncer 274 } // namespace syncer
OLDNEW
« no previous file with comments | « components/sync/driver/glue/sync_backend_registrar.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698