OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 "testing/gtest/include/gtest/gtest.h" | 5 #include "testing/gtest/include/gtest/gtest.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/json/json_reader.h" | 8 #include "base/json/json_reader.h" |
9 #include "base/json/json_writer.h" | 9 #include "base/json/json_writer.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 extension_id << "/" << key << " (out of " << changes_.size() << ")"; | 135 extension_id << "/" << key << " (out of " << changes_.size() << ")"; |
136 } | 136 } |
137 return matching_changes[0]; | 137 return matching_changes[0]; |
138 } | 138 } |
139 | 139 |
140 private: | 140 private: |
141 SettingSyncDataList changes_; | 141 SettingSyncDataList changes_; |
142 bool fail_all_requests_; | 142 bool fail_all_requests_; |
143 }; | 143 }; |
144 | 144 |
| 145 class SyncChangeProcessorDelegate : public SyncChangeProcessor { |
| 146 public: |
| 147 explicit SyncChangeProcessorDelegate(SyncChangeProcessor* recipient) |
| 148 : recipient_(recipient) { |
| 149 DCHECK(recipient_); |
| 150 } |
| 151 virtual ~SyncChangeProcessorDelegate() {} |
| 152 |
| 153 // SyncChangeProcessor implementation. |
| 154 virtual SyncError ProcessSyncChanges( |
| 155 const tracked_objects::Location& from_here, |
| 156 const SyncChangeList& change_list) OVERRIDE { |
| 157 return recipient_->ProcessSyncChanges(from_here, change_list); |
| 158 } |
| 159 |
| 160 private: |
| 161 // The recipient of all sync changes. |
| 162 SyncChangeProcessor* recipient_; |
| 163 |
| 164 DISALLOW_COPY_AND_ASSIGN(SyncChangeProcessorDelegate); |
| 165 }; |
| 166 |
145 // SettingsStorageFactory which always returns TestingSettingsStorage objects, | 167 // SettingsStorageFactory which always returns TestingSettingsStorage objects, |
146 // and allows individually created objects to be returned. | 168 // and allows individually created objects to be returned. |
147 class TestingSettingsStorageFactory : public SettingsStorageFactory { | 169 class TestingSettingsStorageFactory : public SettingsStorageFactory { |
148 public: | 170 public: |
149 TestingSettingsStorage* GetExisting(const std::string& extension_id) { | 171 TestingSettingsStorage* GetExisting(const std::string& extension_id) { |
150 DCHECK(created_.count(extension_id)); | 172 DCHECK(created_.count(extension_id)); |
151 return created_[extension_id]; | 173 return created_[extension_id]; |
152 } | 174 } |
153 | 175 |
154 // SettingsStorageFactory implementation. | 176 // SettingsStorageFactory implementation. |
(...skipping 20 matching lines...) Expand all Loading... |
175 *dst = frontend->GetBackendForSync(type); | 197 *dst = frontend->GetBackendForSync(type); |
176 } | 198 } |
177 | 199 |
178 } // namespace | 200 } // namespace |
179 | 201 |
180 class ExtensionSettingsSyncTest : public testing::Test { | 202 class ExtensionSettingsSyncTest : public testing::Test { |
181 public: | 203 public: |
182 ExtensionSettingsSyncTest() | 204 ExtensionSettingsSyncTest() |
183 : ui_thread_(BrowserThread::UI, MessageLoop::current()), | 205 : ui_thread_(BrowserThread::UI, MessageLoop::current()), |
184 file_thread_(BrowserThread::FILE, MessageLoop::current()), | 206 file_thread_(BrowserThread::FILE, MessageLoop::current()), |
185 storage_factory_(new util::ScopedSettingsStorageFactory()) {} | 207 storage_factory_(new util::ScopedSettingsStorageFactory()), |
| 208 sync_processor_(new MockSyncChangeProcessor), |
| 209 sync_processor_delegate_(new SyncChangeProcessorDelegate( |
| 210 sync_processor_.get())) {} |
186 | 211 |
187 virtual void SetUp() OVERRIDE { | 212 virtual void SetUp() OVERRIDE { |
188 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 213 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
189 profile_.reset(new util::MockProfile(temp_dir_.path())); | 214 profile_.reset(new util::MockProfile(temp_dir_.path())); |
190 storage_factory_->Reset(new SettingsLeveldbStorage::Factory()); | 215 storage_factory_->Reset(new SettingsLeveldbStorage::Factory()); |
191 frontend_.reset( | 216 frontend_.reset( |
192 SettingsFrontend::Create(storage_factory_.get(), profile_.get())); | 217 SettingsFrontend::Create(storage_factory_.get(), profile_.get())); |
193 } | 218 } |
194 | 219 |
195 virtual void TearDown() OVERRIDE { | 220 virtual void TearDown() OVERRIDE { |
(...skipping 30 matching lines...) Expand all Loading... |
226 } | 251 } |
227 return as_map; | 252 return as_map; |
228 } | 253 } |
229 | 254 |
230 // Need these so that the DCHECKs for running on FILE or UI threads pass. | 255 // Need these so that the DCHECKs for running on FILE or UI threads pass. |
231 MessageLoop message_loop_; | 256 MessageLoop message_loop_; |
232 content::TestBrowserThread ui_thread_; | 257 content::TestBrowserThread ui_thread_; |
233 content::TestBrowserThread file_thread_; | 258 content::TestBrowserThread file_thread_; |
234 | 259 |
235 ScopedTempDir temp_dir_; | 260 ScopedTempDir temp_dir_; |
236 MockSyncChangeProcessor sync_; | |
237 scoped_ptr<util::MockProfile> profile_; | 261 scoped_ptr<util::MockProfile> profile_; |
238 scoped_ptr<SettingsFrontend> frontend_; | 262 scoped_ptr<SettingsFrontend> frontend_; |
239 scoped_refptr<util::ScopedSettingsStorageFactory> storage_factory_; | 263 scoped_refptr<util::ScopedSettingsStorageFactory> storage_factory_; |
| 264 scoped_ptr<MockSyncChangeProcessor> sync_processor_; |
| 265 scoped_ptr<SyncChangeProcessorDelegate> sync_processor_delegate_; |
240 }; | 266 }; |
241 | 267 |
242 // Get a semblance of coverage for both EXTENSION_SETTINGS and APP_SETTINGS | 268 // Get a semblance of coverage for both EXTENSION_SETTINGS and APP_SETTINGS |
243 // sync by roughly alternative which one to test. | 269 // sync by roughly alternative which one to test. |
244 | 270 |
245 TEST_F(ExtensionSettingsSyncTest, NoDataDoesNotInvokeSync) { | 271 TEST_F(ExtensionSettingsSyncTest, NoDataDoesNotInvokeSync) { |
246 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; | 272 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; |
247 Extension::Type type = Extension::TYPE_EXTENSION; | 273 Extension::Type type = Extension::TYPE_EXTENSION; |
248 | 274 |
249 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); | 275 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
250 | 276 |
251 // Have one extension created before sync is set up, the other created after. | 277 // Have one extension created before sync is set up, the other created after. |
252 AddExtensionAndGetStorage("s1", type); | 278 AddExtensionAndGetStorage("s1", type); |
253 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); | 279 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
254 | 280 |
255 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 281 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
256 model_type, SyncDataList(), &sync_); | 282 model_type, |
| 283 SyncDataList(), |
| 284 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
257 | 285 |
258 AddExtensionAndGetStorage("s2", type); | 286 AddExtensionAndGetStorage("s2", type); |
259 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); | 287 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
260 | 288 |
261 GetSyncableService(model_type)->StopSyncing(model_type); | 289 GetSyncableService(model_type)->StopSyncing(model_type); |
262 | 290 |
263 EXPECT_EQ(0u, sync_.changes().size()); | 291 EXPECT_EQ(0u, sync_processor_->changes().size()); |
264 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); | 292 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
265 } | 293 } |
266 | 294 |
267 TEST_F(ExtensionSettingsSyncTest, InSyncDataDoesNotInvokeSync) { | 295 TEST_F(ExtensionSettingsSyncTest, InSyncDataDoesNotInvokeSync) { |
268 syncable::ModelType model_type = syncable::APP_SETTINGS; | 296 syncable::ModelType model_type = syncable::APP_SETTINGS; |
269 Extension::Type type = Extension::TYPE_PACKAGED_APP; | 297 Extension::Type type = Extension::TYPE_PACKAGED_APP; |
270 | 298 |
271 StringValue value1("fooValue"); | 299 StringValue value1("fooValue"); |
272 ListValue value2; | 300 ListValue value2; |
273 value2.Append(StringValue::CreateStringValue("barValue")); | 301 value2.Append(StringValue::CreateStringValue("barValue")); |
(...skipping 12 matching lines...) Expand all Loading... |
286 EXPECT_EQ(1u, all_sync_data["s2"].size()); | 314 EXPECT_EQ(1u, all_sync_data["s2"].size()); |
287 EXPECT_PRED_FORMAT2(ValuesEq, &value2, &all_sync_data["s2"][0].value()); | 315 EXPECT_PRED_FORMAT2(ValuesEq, &value2, &all_sync_data["s2"][0].value()); |
288 | 316 |
289 SyncDataList sync_data; | 317 SyncDataList sync_data; |
290 sync_data.push_back(settings_sync_util::CreateData( | 318 sync_data.push_back(settings_sync_util::CreateData( |
291 "s1", "foo", value1, model_type)); | 319 "s1", "foo", value1, model_type)); |
292 sync_data.push_back(settings_sync_util::CreateData( | 320 sync_data.push_back(settings_sync_util::CreateData( |
293 "s2", "bar", value2, model_type)); | 321 "s2", "bar", value2, model_type)); |
294 | 322 |
295 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 323 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
296 model_type, sync_data, &sync_); | 324 model_type, sync_data, |
| 325 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
297 | 326 |
298 // Already in sync, so no changes. | 327 // Already in sync, so no changes. |
299 EXPECT_EQ(0u, sync_.changes().size()); | 328 EXPECT_EQ(0u, sync_processor_->changes().size()); |
300 | 329 |
301 // Regression test: not-changing the synced value shouldn't result in a sync | 330 // Regression test: not-changing the synced value shouldn't result in a sync |
302 // change, and changing the synced value should result in an update. | 331 // change, and changing the synced value should result in an update. |
303 storage1->Set(DEFAULTS, "foo", value1); | 332 storage1->Set(DEFAULTS, "foo", value1); |
304 EXPECT_EQ(0u, sync_.changes().size()); | 333 EXPECT_EQ(0u, sync_processor_->changes().size()); |
305 | 334 |
306 storage1->Set(DEFAULTS, "foo", value2); | 335 storage1->Set(DEFAULTS, "foo", value2); |
307 EXPECT_EQ(1u, sync_.changes().size()); | 336 EXPECT_EQ(1u, sync_processor_->changes().size()); |
308 SettingSyncData change = sync_.GetOnlyChange("s1", "foo"); | 337 SettingSyncData change = sync_processor_->GetOnlyChange("s1", "foo"); |
309 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); | 338 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
310 EXPECT_TRUE(value2.Equals(&change.value())); | 339 EXPECT_TRUE(value2.Equals(&change.value())); |
311 | 340 |
312 GetSyncableService(model_type)->StopSyncing(model_type); | 341 GetSyncableService(model_type)->StopSyncing(model_type); |
313 } | 342 } |
314 | 343 |
315 TEST_F(ExtensionSettingsSyncTest, LocalDataWithNoSyncDataIsPushedToSync) { | 344 TEST_F(ExtensionSettingsSyncTest, LocalDataWithNoSyncDataIsPushedToSync) { |
316 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; | 345 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; |
317 Extension::Type type = Extension::TYPE_EXTENSION; | 346 Extension::Type type = Extension::TYPE_EXTENSION; |
318 | 347 |
319 StringValue value1("fooValue"); | 348 StringValue value1("fooValue"); |
320 ListValue value2; | 349 ListValue value2; |
321 value2.Append(StringValue::CreateStringValue("barValue")); | 350 value2.Append(StringValue::CreateStringValue("barValue")); |
322 | 351 |
323 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); | 352 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); |
324 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); | 353 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
325 | 354 |
326 storage1->Set(DEFAULTS, "foo", value1); | 355 storage1->Set(DEFAULTS, "foo", value1); |
327 storage2->Set(DEFAULTS, "bar", value2); | 356 storage2->Set(DEFAULTS, "bar", value2); |
328 | 357 |
329 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 358 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
330 model_type, SyncDataList(), &sync_); | 359 model_type, |
| 360 SyncDataList(), |
| 361 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
331 | 362 |
332 // All settings should have been pushed to sync. | 363 // All settings should have been pushed to sync. |
333 EXPECT_EQ(2u, sync_.changes().size()); | 364 EXPECT_EQ(2u, sync_processor_->changes().size()); |
334 SettingSyncData change = sync_.GetOnlyChange("s1", "foo"); | 365 SettingSyncData change = sync_processor_->GetOnlyChange("s1", "foo"); |
335 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 366 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
336 EXPECT_TRUE(value1.Equals(&change.value())); | 367 EXPECT_TRUE(value1.Equals(&change.value())); |
337 change = sync_.GetOnlyChange("s2", "bar"); | 368 change = sync_processor_->GetOnlyChange("s2", "bar"); |
338 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 369 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
339 EXPECT_TRUE(value2.Equals(&change.value())); | 370 EXPECT_TRUE(value2.Equals(&change.value())); |
340 | 371 |
341 GetSyncableService(model_type)->StopSyncing(model_type); | 372 GetSyncableService(model_type)->StopSyncing(model_type); |
342 } | 373 } |
343 | 374 |
344 TEST_F(ExtensionSettingsSyncTest, AnySyncDataOverwritesLocalData) { | 375 TEST_F(ExtensionSettingsSyncTest, AnySyncDataOverwritesLocalData) { |
345 syncable::ModelType model_type = syncable::APP_SETTINGS; | 376 syncable::ModelType model_type = syncable::APP_SETTINGS; |
346 Extension::Type type = Extension::TYPE_PACKAGED_APP; | 377 Extension::Type type = Extension::TYPE_PACKAGED_APP; |
347 | 378 |
348 StringValue value1("fooValue"); | 379 StringValue value1("fooValue"); |
349 ListValue value2; | 380 ListValue value2; |
350 value2.Append(StringValue::CreateStringValue("barValue")); | 381 value2.Append(StringValue::CreateStringValue("barValue")); |
351 | 382 |
352 // Maintain dictionaries mirrored to the expected values of the settings in | 383 // Maintain dictionaries mirrored to the expected values of the settings in |
353 // each storage area. | 384 // each storage area. |
354 DictionaryValue expected1, expected2; | 385 DictionaryValue expected1, expected2; |
355 | 386 |
356 // Pre-populate one of the storage areas. | 387 // Pre-populate one of the storage areas. |
357 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); | 388 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); |
358 storage1->Set(DEFAULTS, "overwriteMe", value1); | 389 storage1->Set(DEFAULTS, "overwriteMe", value1); |
359 | 390 |
360 SyncDataList sync_data; | 391 SyncDataList sync_data; |
361 sync_data.push_back(settings_sync_util::CreateData( | 392 sync_data.push_back(settings_sync_util::CreateData( |
362 "s1", "foo", value1, model_type)); | 393 "s1", "foo", value1, model_type)); |
363 sync_data.push_back(settings_sync_util::CreateData( | 394 sync_data.push_back(settings_sync_util::CreateData( |
364 "s2", "bar", value2, model_type)); | 395 "s2", "bar", value2, model_type)); |
365 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 396 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
366 model_type, sync_data, &sync_); | 397 model_type, sync_data, |
| 398 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
367 expected1.Set("foo", value1.DeepCopy()); | 399 expected1.Set("foo", value1.DeepCopy()); |
368 expected2.Set("bar", value2.DeepCopy()); | 400 expected2.Set("bar", value2.DeepCopy()); |
369 | 401 |
370 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); | 402 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
371 | 403 |
372 // All changes should be local, so no sync changes. | 404 // All changes should be local, so no sync changes. |
373 EXPECT_EQ(0u, sync_.changes().size()); | 405 EXPECT_EQ(0u, sync_processor_->changes().size()); |
374 | 406 |
375 // Sync settings should have been pushed to local settings. | 407 // Sync settings should have been pushed to local settings. |
376 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); | 408 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); |
377 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); | 409 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); |
378 | 410 |
379 GetSyncableService(model_type)->StopSyncing(model_type); | 411 GetSyncableService(model_type)->StopSyncing(model_type); |
380 } | 412 } |
381 | 413 |
382 TEST_F(ExtensionSettingsSyncTest, ProcessSyncChanges) { | 414 TEST_F(ExtensionSettingsSyncTest, ProcessSyncChanges) { |
383 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; | 415 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; |
(...skipping 12 matching lines...) Expand all Loading... |
396 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); | 428 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
397 | 429 |
398 storage1->Set(DEFAULTS, "foo", value1); | 430 storage1->Set(DEFAULTS, "foo", value1); |
399 expected1.Set("foo", value1.DeepCopy()); | 431 expected1.Set("foo", value1.DeepCopy()); |
400 | 432 |
401 SyncDataList sync_data; | 433 SyncDataList sync_data; |
402 sync_data.push_back(settings_sync_util::CreateData( | 434 sync_data.push_back(settings_sync_util::CreateData( |
403 "s2", "bar", value2, model_type)); | 435 "s2", "bar", value2, model_type)); |
404 | 436 |
405 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 437 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
406 model_type, sync_data, &sync_); | 438 model_type, sync_data, |
| 439 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
407 expected2.Set("bar", value2.DeepCopy()); | 440 expected2.Set("bar", value2.DeepCopy()); |
408 | 441 |
409 // Make sync add some settings. | 442 // Make sync add some settings. |
410 SyncChangeList change_list; | 443 SyncChangeList change_list; |
411 change_list.push_back(settings_sync_util::CreateAdd( | 444 change_list.push_back(settings_sync_util::CreateAdd( |
412 "s1", "bar", value2, model_type)); | 445 "s1", "bar", value2, model_type)); |
413 change_list.push_back(settings_sync_util::CreateAdd( | 446 change_list.push_back(settings_sync_util::CreateAdd( |
414 "s2", "foo", value1, model_type)); | 447 "s2", "foo", value1, model_type)); |
415 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 448 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
416 expected1.Set("bar", value2.DeepCopy()); | 449 expected1.Set("bar", value2.DeepCopy()); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
468 storage1->Set(DEFAULTS, "foo", value1); | 501 storage1->Set(DEFAULTS, "foo", value1); |
469 storage2->Set(DEFAULTS, "foo", value1); | 502 storage2->Set(DEFAULTS, "foo", value1); |
470 | 503 |
471 SyncDataList sync_data; | 504 SyncDataList sync_data; |
472 sync_data.push_back(settings_sync_util::CreateData( | 505 sync_data.push_back(settings_sync_util::CreateData( |
473 "s3", "bar", value2, model_type)); | 506 "s3", "bar", value2, model_type)); |
474 sync_data.push_back(settings_sync_util::CreateData( | 507 sync_data.push_back(settings_sync_util::CreateData( |
475 "s4", "bar", value2, model_type)); | 508 "s4", "bar", value2, model_type)); |
476 | 509 |
477 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 510 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
478 model_type, sync_data, &sync_); | 511 model_type, sync_data, |
| 512 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
479 | 513 |
480 // Add something locally. | 514 // Add something locally. |
481 storage1->Set(DEFAULTS, "bar", value2); | 515 storage1->Set(DEFAULTS, "bar", value2); |
482 storage2->Set(DEFAULTS, "bar", value2); | 516 storage2->Set(DEFAULTS, "bar", value2); |
483 storage3->Set(DEFAULTS, "foo", value1); | 517 storage3->Set(DEFAULTS, "foo", value1); |
484 storage4->Set(DEFAULTS, "foo", value1); | 518 storage4->Set(DEFAULTS, "foo", value1); |
485 | 519 |
486 SettingSyncData change = sync_.GetOnlyChange("s1", "bar"); | 520 SettingSyncData change = sync_processor_->GetOnlyChange("s1", "bar"); |
487 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 521 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
488 EXPECT_TRUE(value2.Equals(&change.value())); | 522 EXPECT_TRUE(value2.Equals(&change.value())); |
489 sync_.GetOnlyChange("s2", "bar"); | 523 sync_processor_->GetOnlyChange("s2", "bar"); |
490 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 524 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
491 EXPECT_TRUE(value2.Equals(&change.value())); | 525 EXPECT_TRUE(value2.Equals(&change.value())); |
492 change = sync_.GetOnlyChange("s3", "foo"); | 526 change = sync_processor_->GetOnlyChange("s3", "foo"); |
493 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 527 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
494 EXPECT_TRUE(value1.Equals(&change.value())); | 528 EXPECT_TRUE(value1.Equals(&change.value())); |
495 change = sync_.GetOnlyChange("s4", "foo"); | 529 change = sync_processor_->GetOnlyChange("s4", "foo"); |
496 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 530 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
497 EXPECT_TRUE(value1.Equals(&change.value())); | 531 EXPECT_TRUE(value1.Equals(&change.value())); |
498 | 532 |
499 // Change something locally, storage1/3 the new setting and storage2/4 the | 533 // Change something locally, storage1/3 the new setting and storage2/4 the |
500 // initial setting, for all combinations of local vs sync intialisation and | 534 // initial setting, for all combinations of local vs sync intialisation and |
501 // new vs initial. | 535 // new vs initial. |
502 sync_.ClearChanges(); | 536 sync_processor_->ClearChanges(); |
503 storage1->Set(DEFAULTS, "bar", value1); | 537 storage1->Set(DEFAULTS, "bar", value1); |
504 storage2->Set(DEFAULTS, "foo", value2); | 538 storage2->Set(DEFAULTS, "foo", value2); |
505 storage3->Set(DEFAULTS, "bar", value1); | 539 storage3->Set(DEFAULTS, "bar", value1); |
506 storage4->Set(DEFAULTS, "foo", value2); | 540 storage4->Set(DEFAULTS, "foo", value2); |
507 | 541 |
508 change = sync_.GetOnlyChange("s1", "bar"); | 542 change = sync_processor_->GetOnlyChange("s1", "bar"); |
509 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); | 543 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
510 EXPECT_TRUE(value1.Equals(&change.value())); | 544 EXPECT_TRUE(value1.Equals(&change.value())); |
511 change = sync_.GetOnlyChange("s2", "foo"); | 545 change = sync_processor_->GetOnlyChange("s2", "foo"); |
512 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); | 546 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
513 EXPECT_TRUE(value2.Equals(&change.value())); | 547 EXPECT_TRUE(value2.Equals(&change.value())); |
514 change = sync_.GetOnlyChange("s3", "bar"); | 548 change = sync_processor_->GetOnlyChange("s3", "bar"); |
515 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); | 549 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
516 EXPECT_TRUE(value1.Equals(&change.value())); | 550 EXPECT_TRUE(value1.Equals(&change.value())); |
517 change = sync_.GetOnlyChange("s4", "foo"); | 551 change = sync_processor_->GetOnlyChange("s4", "foo"); |
518 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); | 552 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
519 EXPECT_TRUE(value2.Equals(&change.value())); | 553 EXPECT_TRUE(value2.Equals(&change.value())); |
520 | 554 |
521 // Remove something locally, storage1/3 the new setting and storage2/4 the | 555 // Remove something locally, storage1/3 the new setting and storage2/4 the |
522 // initial setting, for all combinations of local vs sync intialisation and | 556 // initial setting, for all combinations of local vs sync intialisation and |
523 // new vs initial. | 557 // new vs initial. |
524 sync_.ClearChanges(); | 558 sync_processor_->ClearChanges(); |
525 storage1->Remove("foo"); | 559 storage1->Remove("foo"); |
526 storage2->Remove("bar"); | 560 storage2->Remove("bar"); |
527 storage3->Remove("foo"); | 561 storage3->Remove("foo"); |
528 storage4->Remove("bar"); | 562 storage4->Remove("bar"); |
529 | 563 |
530 EXPECT_EQ( | 564 EXPECT_EQ( |
531 SyncChange::ACTION_DELETE, | 565 SyncChange::ACTION_DELETE, |
532 sync_.GetOnlyChange("s1", "foo").change_type()); | 566 sync_processor_->GetOnlyChange("s1", "foo").change_type()); |
533 EXPECT_EQ( | 567 EXPECT_EQ( |
534 SyncChange::ACTION_DELETE, | 568 SyncChange::ACTION_DELETE, |
535 sync_.GetOnlyChange("s2", "bar").change_type()); | 569 sync_processor_->GetOnlyChange("s2", "bar").change_type()); |
536 EXPECT_EQ( | 570 EXPECT_EQ( |
537 SyncChange::ACTION_DELETE, | 571 SyncChange::ACTION_DELETE, |
538 sync_.GetOnlyChange("s3", "foo").change_type()); | 572 sync_processor_->GetOnlyChange("s3", "foo").change_type()); |
539 EXPECT_EQ( | 573 EXPECT_EQ( |
540 SyncChange::ACTION_DELETE, | 574 SyncChange::ACTION_DELETE, |
541 sync_.GetOnlyChange("s4", "bar").change_type()); | 575 sync_processor_->GetOnlyChange("s4", "bar").change_type()); |
542 | 576 |
543 // Remove some nonexistent settings. | 577 // Remove some nonexistent settings. |
544 sync_.ClearChanges(); | 578 sync_processor_->ClearChanges(); |
545 storage1->Remove("foo"); | 579 storage1->Remove("foo"); |
546 storage2->Remove("bar"); | 580 storage2->Remove("bar"); |
547 storage3->Remove("foo"); | 581 storage3->Remove("foo"); |
548 storage4->Remove("bar"); | 582 storage4->Remove("bar"); |
549 | 583 |
550 EXPECT_EQ(0u, sync_.changes().size()); | 584 EXPECT_EQ(0u, sync_processor_->changes().size()); |
551 | 585 |
552 // Clear the rest of the settings. Add the removed ones back first so that | 586 // Clear the rest of the settings. Add the removed ones back first so that |
553 // more than one setting is cleared. | 587 // more than one setting is cleared. |
554 storage1->Set(DEFAULTS, "foo", value1); | 588 storage1->Set(DEFAULTS, "foo", value1); |
555 storage2->Set(DEFAULTS, "bar", value2); | 589 storage2->Set(DEFAULTS, "bar", value2); |
556 storage3->Set(DEFAULTS, "foo", value1); | 590 storage3->Set(DEFAULTS, "foo", value1); |
557 storage4->Set(DEFAULTS, "bar", value2); | 591 storage4->Set(DEFAULTS, "bar", value2); |
558 | 592 |
559 sync_.ClearChanges(); | 593 sync_processor_->ClearChanges(); |
560 storage1->Clear(); | 594 storage1->Clear(); |
561 storage2->Clear(); | 595 storage2->Clear(); |
562 storage3->Clear(); | 596 storage3->Clear(); |
563 storage4->Clear(); | 597 storage4->Clear(); |
564 | 598 |
565 EXPECT_EQ( | 599 EXPECT_EQ( |
566 SyncChange::ACTION_DELETE, | 600 SyncChange::ACTION_DELETE, |
567 sync_.GetOnlyChange("s1", "foo").change_type()); | 601 sync_processor_->GetOnlyChange("s1", "foo").change_type()); |
568 EXPECT_EQ( | 602 EXPECT_EQ( |
569 SyncChange::ACTION_DELETE, | 603 SyncChange::ACTION_DELETE, |
570 sync_.GetOnlyChange("s1", "bar").change_type()); | 604 sync_processor_->GetOnlyChange("s1", "bar").change_type()); |
571 EXPECT_EQ( | 605 EXPECT_EQ( |
572 SyncChange::ACTION_DELETE, | 606 SyncChange::ACTION_DELETE, |
573 sync_.GetOnlyChange("s2", "foo").change_type()); | 607 sync_processor_->GetOnlyChange("s2", "foo").change_type()); |
574 EXPECT_EQ( | 608 EXPECT_EQ( |
575 SyncChange::ACTION_DELETE, | 609 SyncChange::ACTION_DELETE, |
576 sync_.GetOnlyChange("s2", "bar").change_type()); | 610 sync_processor_->GetOnlyChange("s2", "bar").change_type()); |
577 EXPECT_EQ( | 611 EXPECT_EQ( |
578 SyncChange::ACTION_DELETE, | 612 SyncChange::ACTION_DELETE, |
579 sync_.GetOnlyChange("s3", "foo").change_type()); | 613 sync_processor_->GetOnlyChange("s3", "foo").change_type()); |
580 EXPECT_EQ( | 614 EXPECT_EQ( |
581 SyncChange::ACTION_DELETE, | 615 SyncChange::ACTION_DELETE, |
582 sync_.GetOnlyChange("s3", "bar").change_type()); | 616 sync_processor_->GetOnlyChange("s3", "bar").change_type()); |
583 EXPECT_EQ( | 617 EXPECT_EQ( |
584 SyncChange::ACTION_DELETE, | 618 SyncChange::ACTION_DELETE, |
585 sync_.GetOnlyChange("s4", "foo").change_type()); | 619 sync_processor_->GetOnlyChange("s4", "foo").change_type()); |
586 EXPECT_EQ( | 620 EXPECT_EQ( |
587 SyncChange::ACTION_DELETE, | 621 SyncChange::ACTION_DELETE, |
588 sync_.GetOnlyChange("s4", "bar").change_type()); | 622 sync_processor_->GetOnlyChange("s4", "bar").change_type()); |
589 | 623 |
590 GetSyncableService(model_type)->StopSyncing(model_type); | 624 GetSyncableService(model_type)->StopSyncing(model_type); |
591 } | 625 } |
592 | 626 |
593 TEST_F(ExtensionSettingsSyncTest, ExtensionAndAppSettingsSyncSeparately) { | 627 TEST_F(ExtensionSettingsSyncTest, ExtensionAndAppSettingsSyncSeparately) { |
594 StringValue value1("fooValue"); | 628 StringValue value1("fooValue"); |
595 ListValue value2; | 629 ListValue value2; |
596 value2.Append(StringValue::CreateStringValue("barValue")); | 630 value2.Append(StringValue::CreateStringValue("barValue")); |
597 | 631 |
598 // storage1 is an extension, storage2 is an app. | 632 // storage1 is an extension, storage2 is an app. |
(...skipping 15 matching lines...) Expand all Loading... |
614 GetAllSyncData(syncable::APP_SETTINGS); | 648 GetAllSyncData(syncable::APP_SETTINGS); |
615 EXPECT_EQ(1u, app_sync_data.size()); | 649 EXPECT_EQ(1u, app_sync_data.size()); |
616 EXPECT_EQ(1u, app_sync_data["s2"].size()); | 650 EXPECT_EQ(1u, app_sync_data["s2"].size()); |
617 EXPECT_PRED_FORMAT2(ValuesEq, &value2, &app_sync_data["s2"][0].value()); | 651 EXPECT_PRED_FORMAT2(ValuesEq, &value2, &app_sync_data["s2"][0].value()); |
618 | 652 |
619 // Stop each separately, there should be no changes either time. | 653 // Stop each separately, there should be no changes either time. |
620 SyncDataList sync_data; | 654 SyncDataList sync_data; |
621 sync_data.push_back(settings_sync_util::CreateData( | 655 sync_data.push_back(settings_sync_util::CreateData( |
622 "s1", "foo", value1, syncable::EXTENSION_SETTINGS)); | 656 "s1", "foo", value1, syncable::EXTENSION_SETTINGS)); |
623 | 657 |
624 GetSyncableService(syncable::EXTENSION_SETTINGS)-> | 658 GetSyncableService(syncable::EXTENSION_SETTINGS)->MergeDataAndStartSyncing( |
625 MergeDataAndStartSyncing(syncable::EXTENSION_SETTINGS, sync_data, &sync_); | 659 syncable::EXTENSION_SETTINGS, |
| 660 sync_data, |
| 661 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
626 GetSyncableService(syncable::EXTENSION_SETTINGS)-> | 662 GetSyncableService(syncable::EXTENSION_SETTINGS)-> |
627 StopSyncing(syncable::EXTENSION_SETTINGS); | 663 StopSyncing(syncable::EXTENSION_SETTINGS); |
628 EXPECT_EQ(0u, sync_.changes().size()); | 664 EXPECT_EQ(0u, sync_processor_->changes().size()); |
629 | 665 |
630 sync_data.clear(); | 666 sync_data.clear(); |
631 sync_data.push_back(settings_sync_util::CreateData( | 667 sync_data.push_back(settings_sync_util::CreateData( |
632 "s2", "bar", value2, syncable::APP_SETTINGS)); | 668 "s2", "bar", value2, syncable::APP_SETTINGS)); |
633 | 669 |
634 GetSyncableService(syncable::APP_SETTINGS)-> | 670 scoped_ptr<SyncChangeProcessorDelegate> app_settings_delegate_( |
635 MergeDataAndStartSyncing(syncable::APP_SETTINGS, sync_data, &sync_); | 671 new SyncChangeProcessorDelegate(sync_processor_.get())); |
| 672 GetSyncableService(syncable::APP_SETTINGS)->MergeDataAndStartSyncing( |
| 673 syncable::APP_SETTINGS, |
| 674 sync_data, |
| 675 app_settings_delegate_.PassAs<SyncChangeProcessor>()); |
636 GetSyncableService(syncable::APP_SETTINGS)-> | 676 GetSyncableService(syncable::APP_SETTINGS)-> |
637 StopSyncing(syncable::APP_SETTINGS); | 677 StopSyncing(syncable::APP_SETTINGS); |
638 EXPECT_EQ(0u, sync_.changes().size()); | 678 EXPECT_EQ(0u, sync_processor_->changes().size()); |
639 } | 679 } |
640 | 680 |
641 TEST_F(ExtensionSettingsSyncTest, FailingStartSyncingDisablesSync) { | 681 TEST_F(ExtensionSettingsSyncTest, FailingStartSyncingDisablesSync) { |
642 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; | 682 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; |
643 Extension::Type type = Extension::TYPE_EXTENSION; | 683 Extension::Type type = Extension::TYPE_EXTENSION; |
644 | 684 |
645 StringValue fooValue("fooValue"); | 685 StringValue fooValue("fooValue"); |
646 StringValue barValue("barValue"); | 686 StringValue barValue("barValue"); |
647 | 687 |
648 // There is a bit of a convoluted method to get storage areas that can fail; | 688 // There is a bit of a convoluted method to get storage areas that can fail; |
649 // hand out TestingSettingsStorage object then toggle them failing/succeeding | 689 // hand out TestingSettingsStorage object then toggle them failing/succeeding |
650 // as necessary. | 690 // as necessary. |
651 TestingSettingsStorageFactory* testing_factory = | 691 TestingSettingsStorageFactory* testing_factory = |
652 new TestingSettingsStorageFactory(); | 692 new TestingSettingsStorageFactory(); |
653 storage_factory_->Reset(testing_factory); | 693 storage_factory_->Reset(testing_factory); |
654 | 694 |
655 SettingsStorage* good = AddExtensionAndGetStorage("good", type); | 695 SettingsStorage* good = AddExtensionAndGetStorage("good", type); |
656 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); | 696 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); |
657 | 697 |
658 // Make bad fail for incoming sync changes. | 698 // Make bad fail for incoming sync changes. |
659 testing_factory->GetExisting("bad")->SetFailAllRequests(true); | 699 testing_factory->GetExisting("bad")->SetFailAllRequests(true); |
660 { | 700 { |
661 SyncDataList sync_data; | 701 SyncDataList sync_data; |
662 sync_data.push_back(settings_sync_util::CreateData( | 702 sync_data.push_back(settings_sync_util::CreateData( |
663 "good", "foo", fooValue, model_type)); | 703 "good", "foo", fooValue, model_type)); |
664 sync_data.push_back(settings_sync_util::CreateData( | 704 sync_data.push_back(settings_sync_util::CreateData( |
665 "bad", "foo", fooValue, model_type)); | 705 "bad", "foo", fooValue, model_type)); |
666 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 706 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
667 model_type, sync_data, &sync_); | 707 model_type, |
| 708 sync_data, |
| 709 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
668 } | 710 } |
669 testing_factory->GetExisting("bad")->SetFailAllRequests(false); | 711 testing_factory->GetExisting("bad")->SetFailAllRequests(false); |
670 | 712 |
671 { | 713 { |
672 DictionaryValue dict; | 714 DictionaryValue dict; |
673 dict.Set("foo", fooValue.DeepCopy()); | 715 dict.Set("foo", fooValue.DeepCopy()); |
674 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 716 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
675 } | 717 } |
676 { | 718 { |
677 DictionaryValue dict; | 719 DictionaryValue dict; |
678 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); | 720 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
679 } | 721 } |
680 | 722 |
681 // Changes made to good should be sent to sync, changes from bad shouldn't. | 723 // Changes made to good should be sent to sync, changes from bad shouldn't. |
682 sync_.ClearChanges(); | 724 sync_processor_->ClearChanges(); |
683 good->Set(DEFAULTS, "bar", barValue); | 725 good->Set(DEFAULTS, "bar", barValue); |
684 bad->Set(DEFAULTS, "bar", barValue); | 726 bad->Set(DEFAULTS, "bar", barValue); |
685 | 727 |
686 EXPECT_EQ( | 728 EXPECT_EQ( |
687 SyncChange::ACTION_ADD, | 729 SyncChange::ACTION_ADD, |
688 sync_.GetOnlyChange("good", "bar").change_type()); | 730 sync_processor_->GetOnlyChange("good", "bar").change_type()); |
689 EXPECT_EQ(1u, sync_.changes().size()); | 731 EXPECT_EQ(1u, sync_processor_->changes().size()); |
690 | 732 |
691 { | 733 { |
692 DictionaryValue dict; | 734 DictionaryValue dict; |
693 dict.Set("foo", fooValue.DeepCopy()); | 735 dict.Set("foo", fooValue.DeepCopy()); |
694 dict.Set("bar", barValue.DeepCopy()); | 736 dict.Set("bar", barValue.DeepCopy()); |
695 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 737 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
696 } | 738 } |
697 { | 739 { |
698 DictionaryValue dict; | 740 DictionaryValue dict; |
699 dict.Set("bar", barValue.DeepCopy()); | 741 dict.Set("bar", barValue.DeepCopy()); |
(...skipping 20 matching lines...) Expand all Loading... |
720 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 762 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
721 } | 763 } |
722 { | 764 { |
723 DictionaryValue dict; | 765 DictionaryValue dict; |
724 dict.Set("bar", barValue.DeepCopy()); | 766 dict.Set("bar", barValue.DeepCopy()); |
725 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); | 767 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
726 } | 768 } |
727 | 769 |
728 // Changes made to bad still shouldn't go to sync, even though it didn't fail | 770 // Changes made to bad still shouldn't go to sync, even though it didn't fail |
729 // last time. | 771 // last time. |
730 sync_.ClearChanges(); | 772 sync_processor_->ClearChanges(); |
731 good->Set(DEFAULTS, "bar", fooValue); | 773 good->Set(DEFAULTS, "bar", fooValue); |
732 bad->Set(DEFAULTS, "bar", fooValue); | 774 bad->Set(DEFAULTS, "bar", fooValue); |
733 | 775 |
734 EXPECT_EQ( | 776 EXPECT_EQ( |
735 SyncChange::ACTION_UPDATE, | 777 SyncChange::ACTION_UPDATE, |
736 sync_.GetOnlyChange("good", "bar").change_type()); | 778 sync_processor_->GetOnlyChange("good", "bar").change_type()); |
737 EXPECT_EQ(1u, sync_.changes().size()); | 779 EXPECT_EQ(1u, sync_processor_->changes().size()); |
738 | 780 |
739 { | 781 { |
740 DictionaryValue dict; | 782 DictionaryValue dict; |
741 dict.Set("foo", barValue.DeepCopy()); | 783 dict.Set("foo", barValue.DeepCopy()); |
742 dict.Set("bar", fooValue.DeepCopy()); | 784 dict.Set("bar", fooValue.DeepCopy()); |
743 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 785 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
744 } | 786 } |
745 { | 787 { |
746 DictionaryValue dict; | 788 DictionaryValue dict; |
747 dict.Set("bar", fooValue.DeepCopy()); | 789 dict.Set("bar", fooValue.DeepCopy()); |
(...skipping 19 matching lines...) Expand all Loading... |
767 dict.Set("bar", fooValue.DeepCopy()); | 809 dict.Set("bar", fooValue.DeepCopy()); |
768 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 810 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
769 } | 811 } |
770 { | 812 { |
771 DictionaryValue dict; | 813 DictionaryValue dict; |
772 dict.Set("bar", fooValue.DeepCopy()); | 814 dict.Set("bar", fooValue.DeepCopy()); |
773 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); | 815 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
774 } | 816 } |
775 | 817 |
776 // Restarting sync should make bad start syncing again. | 818 // Restarting sync should make bad start syncing again. |
777 sync_.ClearChanges(); | 819 sync_processor_->ClearChanges(); |
778 GetSyncableService(model_type)->StopSyncing(model_type); | 820 GetSyncableService(model_type)->StopSyncing(model_type); |
| 821 sync_processor_delegate_.reset(new SyncChangeProcessorDelegate( |
| 822 sync_processor_.get())); |
779 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 823 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
780 model_type, SyncDataList(), &sync_); | 824 model_type, |
| 825 SyncDataList(), |
| 826 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
781 | 827 |
782 // Local settings will have been pushed to sync, since it's empty (in this | 828 // Local settings will have been pushed to sync, since it's empty (in this |
783 // test; presumably it wouldn't be live, since we've been getting changes). | 829 // test; presumably it wouldn't be live, since we've been getting changes). |
784 EXPECT_EQ( | 830 EXPECT_EQ( |
785 SyncChange::ACTION_ADD, | 831 SyncChange::ACTION_ADD, |
786 sync_.GetOnlyChange("good", "foo").change_type()); | 832 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
787 EXPECT_EQ( | 833 EXPECT_EQ( |
788 SyncChange::ACTION_ADD, | 834 SyncChange::ACTION_ADD, |
789 sync_.GetOnlyChange("good", "bar").change_type()); | 835 sync_processor_->GetOnlyChange("good", "bar").change_type()); |
790 EXPECT_EQ( | 836 EXPECT_EQ( |
791 SyncChange::ACTION_ADD, | 837 SyncChange::ACTION_ADD, |
792 sync_.GetOnlyChange("bad", "bar").change_type()); | 838 sync_processor_->GetOnlyChange("bad", "bar").change_type()); |
793 EXPECT_EQ(3u, sync_.changes().size()); | 839 EXPECT_EQ(3u, sync_processor_->changes().size()); |
794 | 840 |
795 // Live local changes now get pushed, too. | 841 // Live local changes now get pushed, too. |
796 sync_.ClearChanges(); | 842 sync_processor_->ClearChanges(); |
797 good->Set(DEFAULTS, "bar", barValue); | 843 good->Set(DEFAULTS, "bar", barValue); |
798 bad->Set(DEFAULTS, "bar", barValue); | 844 bad->Set(DEFAULTS, "bar", barValue); |
799 | 845 |
800 EXPECT_EQ( | 846 EXPECT_EQ( |
801 SyncChange::ACTION_UPDATE, | 847 SyncChange::ACTION_UPDATE, |
802 sync_.GetOnlyChange("good", "bar").change_type()); | 848 sync_processor_->GetOnlyChange("good", "bar").change_type()); |
803 EXPECT_EQ( | 849 EXPECT_EQ( |
804 SyncChange::ACTION_UPDATE, | 850 SyncChange::ACTION_UPDATE, |
805 sync_.GetOnlyChange("bad", "bar").change_type()); | 851 sync_processor_->GetOnlyChange("bad", "bar").change_type()); |
806 EXPECT_EQ(2u, sync_.changes().size()); | 852 EXPECT_EQ(2u, sync_processor_->changes().size()); |
807 | 853 |
808 // And ProcessSyncChanges work, too. | 854 // And ProcessSyncChanges work, too. |
809 { | 855 { |
810 SyncChangeList change_list; | 856 SyncChangeList change_list; |
811 change_list.push_back(settings_sync_util::CreateUpdate( | 857 change_list.push_back(settings_sync_util::CreateUpdate( |
812 "good", "bar", fooValue, model_type)); | 858 "good", "bar", fooValue, model_type)); |
813 change_list.push_back(settings_sync_util::CreateUpdate( | 859 change_list.push_back(settings_sync_util::CreateUpdate( |
814 "bad", "bar", fooValue, model_type)); | 860 "bad", "bar", fooValue, model_type)); |
815 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 861 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
816 } | 862 } |
(...skipping 28 matching lines...) Expand all Loading... |
845 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); | 891 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); |
846 | 892 |
847 // Unlike before, initially succeeding MergeDataAndStartSyncing. | 893 // Unlike before, initially succeeding MergeDataAndStartSyncing. |
848 { | 894 { |
849 SyncDataList sync_data; | 895 SyncDataList sync_data; |
850 sync_data.push_back(settings_sync_util::CreateData( | 896 sync_data.push_back(settings_sync_util::CreateData( |
851 "good", "foo", fooValue, model_type)); | 897 "good", "foo", fooValue, model_type)); |
852 sync_data.push_back(settings_sync_util::CreateData( | 898 sync_data.push_back(settings_sync_util::CreateData( |
853 "bad", "foo", fooValue, model_type)); | 899 "bad", "foo", fooValue, model_type)); |
854 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 900 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
855 model_type, sync_data, &sync_); | 901 model_type, |
| 902 sync_data, |
| 903 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
856 } | 904 } |
857 | 905 |
858 EXPECT_EQ(0u, sync_.changes().size()); | 906 EXPECT_EQ(0u, sync_processor_->changes().size()); |
859 | 907 |
860 { | 908 { |
861 DictionaryValue dict; | 909 DictionaryValue dict; |
862 dict.Set("foo", fooValue.DeepCopy()); | 910 dict.Set("foo", fooValue.DeepCopy()); |
863 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 911 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
864 } | 912 } |
865 { | 913 { |
866 DictionaryValue dict; | 914 DictionaryValue dict; |
867 dict.Set("foo", fooValue.DeepCopy()); | 915 dict.Set("foo", fooValue.DeepCopy()); |
868 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); | 916 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
(...skipping 17 matching lines...) Expand all Loading... |
886 dict.Set("bar", barValue.DeepCopy()); | 934 dict.Set("bar", barValue.DeepCopy()); |
887 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 935 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
888 } | 936 } |
889 { | 937 { |
890 DictionaryValue dict; | 938 DictionaryValue dict; |
891 dict.Set("foo", fooValue.DeepCopy()); | 939 dict.Set("foo", fooValue.DeepCopy()); |
892 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); | 940 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
893 } | 941 } |
894 | 942 |
895 // No more changes sent to sync for bad. | 943 // No more changes sent to sync for bad. |
896 sync_.ClearChanges(); | 944 sync_processor_->ClearChanges(); |
897 good->Set(DEFAULTS, "foo", barValue); | 945 good->Set(DEFAULTS, "foo", barValue); |
898 bad->Set(DEFAULTS, "foo", barValue); | 946 bad->Set(DEFAULTS, "foo", barValue); |
899 | 947 |
900 EXPECT_EQ( | 948 EXPECT_EQ( |
901 SyncChange::ACTION_UPDATE, | 949 SyncChange::ACTION_UPDATE, |
902 sync_.GetOnlyChange("good", "foo").change_type()); | 950 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
903 EXPECT_EQ(1u, sync_.changes().size()); | 951 EXPECT_EQ(1u, sync_processor_->changes().size()); |
904 | 952 |
905 // No more changes received from sync should go to bad. | 953 // No more changes received from sync should go to bad. |
906 { | 954 { |
907 SyncChangeList change_list; | 955 SyncChangeList change_list; |
908 change_list.push_back(settings_sync_util::CreateAdd( | 956 change_list.push_back(settings_sync_util::CreateAdd( |
909 "good", "foo", fooValue, model_type)); | 957 "good", "foo", fooValue, model_type)); |
910 change_list.push_back(settings_sync_util::CreateAdd( | 958 change_list.push_back(settings_sync_util::CreateAdd( |
911 "bad", "foo", fooValue, model_type)); | 959 "bad", "foo", fooValue, model_type)); |
912 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 960 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
913 } | 961 } |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
948 { | 996 { |
949 SyncDataList all_sync_data = | 997 SyncDataList all_sync_data = |
950 GetSyncableService(model_type)->GetAllSyncData(model_type); | 998 GetSyncableService(model_type)->GetAllSyncData(model_type); |
951 EXPECT_EQ(1u, all_sync_data.size()); | 999 EXPECT_EQ(1u, all_sync_data.size()); |
952 EXPECT_EQ("good/foo", all_sync_data[0].GetTag()); | 1000 EXPECT_EQ("good/foo", all_sync_data[0].GetTag()); |
953 } | 1001 } |
954 testing_factory->GetExisting("bad")->SetFailAllRequests(false); | 1002 testing_factory->GetExisting("bad")->SetFailAllRequests(false); |
955 | 1003 |
956 // Sync shouldn't be disabled for good (nor bad -- but this is unimportant). | 1004 // Sync shouldn't be disabled for good (nor bad -- but this is unimportant). |
957 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 1005 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
958 model_type, SyncDataList(), &sync_); | 1006 model_type, |
| 1007 SyncDataList(), |
| 1008 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
959 | 1009 |
960 EXPECT_EQ( | 1010 EXPECT_EQ( |
961 SyncChange::ACTION_ADD, | 1011 SyncChange::ACTION_ADD, |
962 sync_.GetOnlyChange("good", "foo").change_type()); | 1012 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
963 EXPECT_EQ( | 1013 EXPECT_EQ( |
964 SyncChange::ACTION_ADD, | 1014 SyncChange::ACTION_ADD, |
965 sync_.GetOnlyChange("bad", "foo").change_type()); | 1015 sync_processor_->GetOnlyChange("bad", "foo").change_type()); |
966 EXPECT_EQ(2u, sync_.changes().size()); | 1016 EXPECT_EQ(2u, sync_processor_->changes().size()); |
967 | 1017 |
968 sync_.ClearChanges(); | 1018 sync_processor_->ClearChanges(); |
969 good->Set(DEFAULTS, "bar", barValue); | 1019 good->Set(DEFAULTS, "bar", barValue); |
970 bad->Set(DEFAULTS, "bar", barValue); | 1020 bad->Set(DEFAULTS, "bar", barValue); |
971 | 1021 |
972 EXPECT_EQ( | 1022 EXPECT_EQ( |
973 SyncChange::ACTION_ADD, | 1023 SyncChange::ACTION_ADD, |
974 sync_.GetOnlyChange("good", "bar").change_type()); | 1024 sync_processor_->GetOnlyChange("good", "bar").change_type()); |
975 EXPECT_EQ( | 1025 EXPECT_EQ( |
976 SyncChange::ACTION_ADD, | 1026 SyncChange::ACTION_ADD, |
977 sync_.GetOnlyChange("bad", "bar").change_type()); | 1027 sync_processor_->GetOnlyChange("bad", "bar").change_type()); |
978 EXPECT_EQ(2u, sync_.changes().size()); | 1028 EXPECT_EQ(2u, sync_processor_->changes().size()); |
979 } | 1029 } |
980 | 1030 |
981 TEST_F(ExtensionSettingsSyncTest, FailureToReadChangesToPushDisablesSync) { | 1031 TEST_F(ExtensionSettingsSyncTest, FailureToReadChangesToPushDisablesSync) { |
982 syncable::ModelType model_type = syncable::APP_SETTINGS; | 1032 syncable::ModelType model_type = syncable::APP_SETTINGS; |
983 Extension::Type type = Extension::TYPE_PACKAGED_APP; | 1033 Extension::Type type = Extension::TYPE_PACKAGED_APP; |
984 | 1034 |
985 StringValue fooValue("fooValue"); | 1035 StringValue fooValue("fooValue"); |
986 StringValue barValue("barValue"); | 1036 StringValue barValue("barValue"); |
987 | 1037 |
988 TestingSettingsStorageFactory* testing_factory = | 1038 TestingSettingsStorageFactory* testing_factory = |
989 new TestingSettingsStorageFactory(); | 1039 new TestingSettingsStorageFactory(); |
990 storage_factory_->Reset(testing_factory); | 1040 storage_factory_->Reset(testing_factory); |
991 | 1041 |
992 SettingsStorage* good = AddExtensionAndGetStorage("good", type); | 1042 SettingsStorage* good = AddExtensionAndGetStorage("good", type); |
993 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); | 1043 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); |
994 | 1044 |
995 good->Set(DEFAULTS, "foo", fooValue); | 1045 good->Set(DEFAULTS, "foo", fooValue); |
996 bad->Set(DEFAULTS, "foo", fooValue); | 1046 bad->Set(DEFAULTS, "foo", fooValue); |
997 | 1047 |
998 // good will successfully push foo:fooValue to sync, but bad will fail to | 1048 // good will successfully push foo:fooValue to sync, but bad will fail to |
999 // get them so won't. | 1049 // get them so won't. |
1000 testing_factory->GetExisting("bad")->SetFailAllRequests(true); | 1050 testing_factory->GetExisting("bad")->SetFailAllRequests(true); |
1001 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 1051 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
1002 model_type, SyncDataList(), &sync_); | 1052 model_type, |
| 1053 SyncDataList(), |
| 1054 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
1003 testing_factory->GetExisting("bad")->SetFailAllRequests(false); | 1055 testing_factory->GetExisting("bad")->SetFailAllRequests(false); |
1004 | 1056 |
1005 EXPECT_EQ( | 1057 EXPECT_EQ( |
1006 SyncChange::ACTION_ADD, | 1058 SyncChange::ACTION_ADD, |
1007 sync_.GetOnlyChange("good", "foo").change_type()); | 1059 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
1008 EXPECT_EQ(1u, sync_.changes().size()); | 1060 EXPECT_EQ(1u, sync_processor_->changes().size()); |
1009 | 1061 |
1010 // bad should now be disabled for sync. | 1062 // bad should now be disabled for sync. |
1011 sync_.ClearChanges(); | 1063 sync_processor_->ClearChanges(); |
1012 good->Set(DEFAULTS, "bar", barValue); | 1064 good->Set(DEFAULTS, "bar", barValue); |
1013 bad->Set(DEFAULTS, "bar", barValue); | 1065 bad->Set(DEFAULTS, "bar", barValue); |
1014 | 1066 |
1015 EXPECT_EQ( | 1067 EXPECT_EQ( |
1016 SyncChange::ACTION_ADD, | 1068 SyncChange::ACTION_ADD, |
1017 sync_.GetOnlyChange("good", "bar").change_type()); | 1069 sync_processor_->GetOnlyChange("good", "bar").change_type()); |
1018 EXPECT_EQ(1u, sync_.changes().size()); | 1070 EXPECT_EQ(1u, sync_processor_->changes().size()); |
1019 | 1071 |
1020 { | 1072 { |
1021 SyncChangeList change_list; | 1073 SyncChangeList change_list; |
1022 change_list.push_back(settings_sync_util::CreateUpdate( | 1074 change_list.push_back(settings_sync_util::CreateUpdate( |
1023 "good", "foo", barValue, model_type)); | 1075 "good", "foo", barValue, model_type)); |
1024 // (Sending ADD here even though it's updating, since that's what the state | 1076 // (Sending ADD here even though it's updating, since that's what the state |
1025 // of sync is. In any case, it won't work.) | 1077 // of sync is. In any case, it won't work.) |
1026 change_list.push_back(settings_sync_util::CreateAdd( | 1078 change_list.push_back(settings_sync_util::CreateAdd( |
1027 "bad", "foo", barValue, model_type)); | 1079 "bad", "foo", barValue, model_type)); |
1028 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 1080 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
1029 } | 1081 } |
1030 | 1082 |
1031 { | 1083 { |
1032 DictionaryValue dict; | 1084 DictionaryValue dict; |
1033 dict.Set("foo", barValue.DeepCopy()); | 1085 dict.Set("foo", barValue.DeepCopy()); |
1034 dict.Set("bar", barValue.DeepCopy()); | 1086 dict.Set("bar", barValue.DeepCopy()); |
1035 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 1087 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
1036 } | 1088 } |
1037 { | 1089 { |
1038 DictionaryValue dict; | 1090 DictionaryValue dict; |
1039 dict.Set("foo", fooValue.DeepCopy()); | 1091 dict.Set("foo", fooValue.DeepCopy()); |
1040 dict.Set("bar", barValue.DeepCopy()); | 1092 dict.Set("bar", barValue.DeepCopy()); |
1041 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); | 1093 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
1042 } | 1094 } |
1043 | 1095 |
1044 // Re-enabling sync without failing should cause the local changes from bad | 1096 // Re-enabling sync without failing should cause the local changes from bad |
1045 // to be pushed to sync successfully, as should future changes to bad. | 1097 // to be pushed to sync successfully, as should future changes to bad. |
1046 sync_.ClearChanges(); | 1098 sync_processor_->ClearChanges(); |
1047 GetSyncableService(model_type)->StopSyncing(model_type); | 1099 GetSyncableService(model_type)->StopSyncing(model_type); |
| 1100 sync_processor_delegate_.reset(new SyncChangeProcessorDelegate( |
| 1101 sync_processor_.get())); |
1048 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 1102 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
1049 model_type, SyncDataList(), &sync_); | 1103 model_type, |
| 1104 SyncDataList(), |
| 1105 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
1050 | 1106 |
1051 EXPECT_EQ( | 1107 EXPECT_EQ( |
1052 SyncChange::ACTION_ADD, | 1108 SyncChange::ACTION_ADD, |
1053 sync_.GetOnlyChange("good", "foo").change_type()); | 1109 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
1054 EXPECT_EQ( | 1110 EXPECT_EQ( |
1055 SyncChange::ACTION_ADD, | 1111 SyncChange::ACTION_ADD, |
1056 sync_.GetOnlyChange("good", "bar").change_type()); | 1112 sync_processor_->GetOnlyChange("good", "bar").change_type()); |
1057 EXPECT_EQ( | 1113 EXPECT_EQ( |
1058 SyncChange::ACTION_ADD, | 1114 SyncChange::ACTION_ADD, |
1059 sync_.GetOnlyChange("bad", "foo").change_type()); | 1115 sync_processor_->GetOnlyChange("bad", "foo").change_type()); |
1060 EXPECT_EQ( | 1116 EXPECT_EQ( |
1061 SyncChange::ACTION_ADD, | 1117 SyncChange::ACTION_ADD, |
1062 sync_.GetOnlyChange("bad", "bar").change_type()); | 1118 sync_processor_->GetOnlyChange("bad", "bar").change_type()); |
1063 EXPECT_EQ(4u, sync_.changes().size()); | 1119 EXPECT_EQ(4u, sync_processor_->changes().size()); |
1064 | 1120 |
1065 sync_.ClearChanges(); | 1121 sync_processor_->ClearChanges(); |
1066 good->Set(DEFAULTS, "bar", fooValue); | 1122 good->Set(DEFAULTS, "bar", fooValue); |
1067 bad->Set(DEFAULTS, "bar", fooValue); | 1123 bad->Set(DEFAULTS, "bar", fooValue); |
1068 | 1124 |
1069 EXPECT_EQ( | 1125 EXPECT_EQ( |
1070 SyncChange::ACTION_UPDATE, | 1126 SyncChange::ACTION_UPDATE, |
1071 sync_.GetOnlyChange("good", "bar").change_type()); | 1127 sync_processor_->GetOnlyChange("good", "bar").change_type()); |
1072 EXPECT_EQ( | 1128 EXPECT_EQ( |
1073 SyncChange::ACTION_UPDATE, | 1129 SyncChange::ACTION_UPDATE, |
1074 sync_.GetOnlyChange("good", "bar").change_type()); | 1130 sync_processor_->GetOnlyChange("good", "bar").change_type()); |
1075 EXPECT_EQ(2u, sync_.changes().size()); | 1131 EXPECT_EQ(2u, sync_processor_->changes().size()); |
1076 } | 1132 } |
1077 | 1133 |
1078 TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalStateDisablesSync) { | 1134 TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalStateDisablesSync) { |
1079 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; | 1135 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; |
1080 Extension::Type type = Extension::TYPE_EXTENSION; | 1136 Extension::Type type = Extension::TYPE_EXTENSION; |
1081 | 1137 |
1082 StringValue fooValue("fooValue"); | 1138 StringValue fooValue("fooValue"); |
1083 StringValue barValue("barValue"); | 1139 StringValue barValue("barValue"); |
1084 | 1140 |
1085 TestingSettingsStorageFactory* testing_factory = | 1141 TestingSettingsStorageFactory* testing_factory = |
1086 new TestingSettingsStorageFactory(); | 1142 new TestingSettingsStorageFactory(); |
1087 storage_factory_->Reset(testing_factory); | 1143 storage_factory_->Reset(testing_factory); |
1088 | 1144 |
1089 SettingsStorage* good = AddExtensionAndGetStorage("good", type); | 1145 SettingsStorage* good = AddExtensionAndGetStorage("good", type); |
1090 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); | 1146 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); |
1091 | 1147 |
1092 // Only set bad; setting good will cause it to fail below. | 1148 // Only set bad; setting good will cause it to fail below. |
1093 bad->Set(DEFAULTS, "foo", fooValue); | 1149 bad->Set(DEFAULTS, "foo", fooValue); |
1094 | 1150 |
1095 sync_.SetFailAllRequests(true); | 1151 sync_processor_->SetFailAllRequests(true); |
1096 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 1152 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
1097 model_type, SyncDataList(), &sync_); | 1153 model_type, |
1098 sync_.SetFailAllRequests(false); | 1154 SyncDataList(), |
| 1155 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
| 1156 sync_processor_->SetFailAllRequests(false); |
1099 | 1157 |
1100 // Changes from good will be send to sync, changes from bad won't. | 1158 // Changes from good will be send to sync, changes from bad won't. |
1101 sync_.ClearChanges(); | 1159 sync_processor_->ClearChanges(); |
1102 good->Set(DEFAULTS, "foo", barValue); | 1160 good->Set(DEFAULTS, "foo", barValue); |
1103 bad->Set(DEFAULTS, "foo", barValue); | 1161 bad->Set(DEFAULTS, "foo", barValue); |
1104 | 1162 |
1105 EXPECT_EQ( | 1163 EXPECT_EQ( |
1106 SyncChange::ACTION_ADD, | 1164 SyncChange::ACTION_ADD, |
1107 sync_.GetOnlyChange("good", "foo").change_type()); | 1165 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
1108 EXPECT_EQ(1u, sync_.changes().size()); | 1166 EXPECT_EQ(1u, sync_processor_->changes().size()); |
1109 | 1167 |
1110 // Changes from sync will be sent to good, not to bad. | 1168 // Changes from sync will be sent to good, not to bad. |
1111 { | 1169 { |
1112 SyncChangeList change_list; | 1170 SyncChangeList change_list; |
1113 change_list.push_back(settings_sync_util::CreateAdd( | 1171 change_list.push_back(settings_sync_util::CreateAdd( |
1114 "good", "bar", barValue, model_type)); | 1172 "good", "bar", barValue, model_type)); |
1115 change_list.push_back(settings_sync_util::CreateAdd( | 1173 change_list.push_back(settings_sync_util::CreateAdd( |
1116 "bad", "bar", barValue, model_type)); | 1174 "bad", "bar", barValue, model_type)); |
1117 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 1175 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
1118 } | 1176 } |
1119 | 1177 |
1120 { | 1178 { |
1121 DictionaryValue dict; | 1179 DictionaryValue dict; |
1122 dict.Set("foo", barValue.DeepCopy()); | 1180 dict.Set("foo", barValue.DeepCopy()); |
1123 dict.Set("bar", barValue.DeepCopy()); | 1181 dict.Set("bar", barValue.DeepCopy()); |
1124 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 1182 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
1125 } | 1183 } |
1126 { | 1184 { |
1127 DictionaryValue dict; | 1185 DictionaryValue dict; |
1128 dict.Set("foo", barValue.DeepCopy()); | 1186 dict.Set("foo", barValue.DeepCopy()); |
1129 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); | 1187 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
1130 } | 1188 } |
1131 | 1189 |
1132 // Restarting sync makes everything work again. | 1190 // Restarting sync makes everything work again. |
1133 sync_.ClearChanges(); | 1191 sync_processor_->ClearChanges(); |
1134 GetSyncableService(model_type)->StopSyncing(model_type); | 1192 GetSyncableService(model_type)->StopSyncing(model_type); |
| 1193 sync_processor_delegate_.reset(new SyncChangeProcessorDelegate( |
| 1194 sync_processor_.get())); |
1135 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 1195 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
1136 model_type, SyncDataList(), &sync_); | 1196 model_type, |
| 1197 SyncDataList(), |
| 1198 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
1137 | 1199 |
1138 EXPECT_EQ( | 1200 EXPECT_EQ( |
1139 SyncChange::ACTION_ADD, | 1201 SyncChange::ACTION_ADD, |
1140 sync_.GetOnlyChange("good", "foo").change_type()); | 1202 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
1141 EXPECT_EQ( | 1203 EXPECT_EQ( |
1142 SyncChange::ACTION_ADD, | 1204 SyncChange::ACTION_ADD, |
1143 sync_.GetOnlyChange("good", "bar").change_type()); | 1205 sync_processor_->GetOnlyChange("good", "bar").change_type()); |
1144 EXPECT_EQ( | 1206 EXPECT_EQ( |
1145 SyncChange::ACTION_ADD, | 1207 SyncChange::ACTION_ADD, |
1146 sync_.GetOnlyChange("bad", "foo").change_type()); | 1208 sync_processor_->GetOnlyChange("bad", "foo").change_type()); |
1147 EXPECT_EQ(3u, sync_.changes().size()); | 1209 EXPECT_EQ(3u, sync_processor_->changes().size()); |
1148 | 1210 |
1149 sync_.ClearChanges(); | 1211 sync_processor_->ClearChanges(); |
1150 good->Set(DEFAULTS, "foo", fooValue); | 1212 good->Set(DEFAULTS, "foo", fooValue); |
1151 bad->Set(DEFAULTS, "foo", fooValue); | 1213 bad->Set(DEFAULTS, "foo", fooValue); |
1152 | 1214 |
1153 EXPECT_EQ( | 1215 EXPECT_EQ( |
1154 SyncChange::ACTION_UPDATE, | 1216 SyncChange::ACTION_UPDATE, |
1155 sync_.GetOnlyChange("good", "foo").change_type()); | 1217 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
1156 EXPECT_EQ( | 1218 EXPECT_EQ( |
1157 SyncChange::ACTION_UPDATE, | 1219 SyncChange::ACTION_UPDATE, |
1158 sync_.GetOnlyChange("good", "foo").change_type()); | 1220 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
1159 EXPECT_EQ(2u, sync_.changes().size()); | 1221 EXPECT_EQ(2u, sync_processor_->changes().size()); |
1160 } | 1222 } |
1161 | 1223 |
1162 TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalChangeDisablesSync) { | 1224 TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalChangeDisablesSync) { |
1163 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; | 1225 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; |
1164 Extension::Type type = Extension::TYPE_EXTENSION; | 1226 Extension::Type type = Extension::TYPE_EXTENSION; |
1165 | 1227 |
1166 StringValue fooValue("fooValue"); | 1228 StringValue fooValue("fooValue"); |
1167 StringValue barValue("barValue"); | 1229 StringValue barValue("barValue"); |
1168 | 1230 |
1169 TestingSettingsStorageFactory* testing_factory = | 1231 TestingSettingsStorageFactory* testing_factory = |
1170 new TestingSettingsStorageFactory(); | 1232 new TestingSettingsStorageFactory(); |
1171 storage_factory_->Reset(testing_factory); | 1233 storage_factory_->Reset(testing_factory); |
1172 | 1234 |
1173 SettingsStorage* good = AddExtensionAndGetStorage("good", type); | 1235 SettingsStorage* good = AddExtensionAndGetStorage("good", type); |
1174 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); | 1236 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); |
1175 | 1237 |
1176 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 1238 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
1177 model_type, SyncDataList(), &sync_); | 1239 model_type, |
| 1240 SyncDataList(), |
| 1241 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
1178 | 1242 |
1179 // bad will fail to send changes. | 1243 // bad will fail to send changes. |
1180 good->Set(DEFAULTS, "foo", fooValue); | 1244 good->Set(DEFAULTS, "foo", fooValue); |
1181 sync_.SetFailAllRequests(true); | 1245 sync_processor_->SetFailAllRequests(true); |
1182 bad->Set(DEFAULTS, "foo", fooValue); | 1246 bad->Set(DEFAULTS, "foo", fooValue); |
1183 sync_.SetFailAllRequests(false); | 1247 sync_processor_->SetFailAllRequests(false); |
1184 | 1248 |
1185 EXPECT_EQ( | 1249 EXPECT_EQ( |
1186 SyncChange::ACTION_ADD, | 1250 SyncChange::ACTION_ADD, |
1187 sync_.GetOnlyChange("good", "foo").change_type()); | 1251 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
1188 EXPECT_EQ(1u, sync_.changes().size()); | 1252 EXPECT_EQ(1u, sync_processor_->changes().size()); |
1189 | 1253 |
1190 // No further changes should be sent from bad. | 1254 // No further changes should be sent from bad. |
1191 sync_.ClearChanges(); | 1255 sync_processor_->ClearChanges(); |
1192 good->Set(DEFAULTS, "foo", barValue); | 1256 good->Set(DEFAULTS, "foo", barValue); |
1193 bad->Set(DEFAULTS, "foo", barValue); | 1257 bad->Set(DEFAULTS, "foo", barValue); |
1194 | 1258 |
1195 EXPECT_EQ( | 1259 EXPECT_EQ( |
1196 SyncChange::ACTION_UPDATE, | 1260 SyncChange::ACTION_UPDATE, |
1197 sync_.GetOnlyChange("good", "foo").change_type()); | 1261 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
1198 EXPECT_EQ(1u, sync_.changes().size()); | 1262 EXPECT_EQ(1u, sync_processor_->changes().size()); |
1199 | 1263 |
1200 // Changes from sync will be sent to good, not to bad. | 1264 // Changes from sync will be sent to good, not to bad. |
1201 { | 1265 { |
1202 SyncChangeList change_list; | 1266 SyncChangeList change_list; |
1203 change_list.push_back(settings_sync_util::CreateAdd( | 1267 change_list.push_back(settings_sync_util::CreateAdd( |
1204 "good", "bar", barValue, model_type)); | 1268 "good", "bar", barValue, model_type)); |
1205 change_list.push_back(settings_sync_util::CreateAdd( | 1269 change_list.push_back(settings_sync_util::CreateAdd( |
1206 "bad", "bar", barValue, model_type)); | 1270 "bad", "bar", barValue, model_type)); |
1207 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 1271 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
1208 } | 1272 } |
1209 | 1273 |
1210 { | 1274 { |
1211 DictionaryValue dict; | 1275 DictionaryValue dict; |
1212 dict.Set("foo", barValue.DeepCopy()); | 1276 dict.Set("foo", barValue.DeepCopy()); |
1213 dict.Set("bar", barValue.DeepCopy()); | 1277 dict.Set("bar", barValue.DeepCopy()); |
1214 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 1278 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
1215 } | 1279 } |
1216 { | 1280 { |
1217 DictionaryValue dict; | 1281 DictionaryValue dict; |
1218 dict.Set("foo", barValue.DeepCopy()); | 1282 dict.Set("foo", barValue.DeepCopy()); |
1219 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); | 1283 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
1220 } | 1284 } |
1221 | 1285 |
1222 // Restarting sync makes everything work again. | 1286 // Restarting sync makes everything work again. |
1223 sync_.ClearChanges(); | 1287 sync_processor_->ClearChanges(); |
1224 GetSyncableService(model_type)->StopSyncing(model_type); | 1288 GetSyncableService(model_type)->StopSyncing(model_type); |
| 1289 sync_processor_delegate_.reset(new SyncChangeProcessorDelegate( |
| 1290 sync_processor_.get())); |
1225 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 1291 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
1226 model_type, SyncDataList(), &sync_); | 1292 model_type, |
| 1293 SyncDataList(), |
| 1294 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
1227 | 1295 |
1228 EXPECT_EQ( | 1296 EXPECT_EQ( |
1229 SyncChange::ACTION_ADD, | 1297 SyncChange::ACTION_ADD, |
1230 sync_.GetOnlyChange("good", "foo").change_type()); | 1298 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
1231 EXPECT_EQ( | 1299 EXPECT_EQ( |
1232 SyncChange::ACTION_ADD, | 1300 SyncChange::ACTION_ADD, |
1233 sync_.GetOnlyChange("good", "bar").change_type()); | 1301 sync_processor_->GetOnlyChange("good", "bar").change_type()); |
1234 EXPECT_EQ( | 1302 EXPECT_EQ( |
1235 SyncChange::ACTION_ADD, | 1303 SyncChange::ACTION_ADD, |
1236 sync_.GetOnlyChange("bad", "foo").change_type()); | 1304 sync_processor_->GetOnlyChange("bad", "foo").change_type()); |
1237 EXPECT_EQ(3u, sync_.changes().size()); | 1305 EXPECT_EQ(3u, sync_processor_->changes().size()); |
1238 | 1306 |
1239 sync_.ClearChanges(); | 1307 sync_processor_->ClearChanges(); |
1240 good->Set(DEFAULTS, "foo", fooValue); | 1308 good->Set(DEFAULTS, "foo", fooValue); |
1241 bad->Set(DEFAULTS, "foo", fooValue); | 1309 bad->Set(DEFAULTS, "foo", fooValue); |
1242 | 1310 |
1243 EXPECT_EQ( | 1311 EXPECT_EQ( |
1244 SyncChange::ACTION_UPDATE, | 1312 SyncChange::ACTION_UPDATE, |
1245 sync_.GetOnlyChange("good", "foo").change_type()); | 1313 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
1246 EXPECT_EQ( | 1314 EXPECT_EQ( |
1247 SyncChange::ACTION_UPDATE, | 1315 SyncChange::ACTION_UPDATE, |
1248 sync_.GetOnlyChange("good", "foo").change_type()); | 1316 sync_processor_->GetOnlyChange("good", "foo").change_type()); |
1249 EXPECT_EQ(2u, sync_.changes().size()); | 1317 EXPECT_EQ(2u, sync_processor_->changes().size()); |
1250 } | 1318 } |
1251 | 1319 |
1252 TEST_F(ExtensionSettingsSyncTest, | 1320 TEST_F(ExtensionSettingsSyncTest, |
1253 LargeOutgoingChangeRejectedButIncomingAccepted) { | 1321 LargeOutgoingChangeRejectedButIncomingAccepted) { |
1254 syncable::ModelType model_type = syncable::APP_SETTINGS; | 1322 syncable::ModelType model_type = syncable::APP_SETTINGS; |
1255 Extension::Type type = Extension::TYPE_PACKAGED_APP; | 1323 Extension::Type type = Extension::TYPE_PACKAGED_APP; |
1256 | 1324 |
1257 // This value should be larger than the limit in settings_backend.cc. | 1325 // This value should be larger than the limit in settings_backend.cc. |
1258 std::string string_5k; | 1326 std::string string_5k; |
1259 for (size_t i = 0; i < 5000; ++i) { | 1327 for (size_t i = 0; i < 5000; ++i) { |
1260 string_5k.append("a"); | 1328 string_5k.append("a"); |
1261 } | 1329 } |
1262 StringValue large_value(string_5k); | 1330 StringValue large_value(string_5k); |
1263 | 1331 |
1264 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 1332 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
1265 model_type, SyncDataList(), &sync_); | 1333 model_type, |
| 1334 SyncDataList(), |
| 1335 sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
1266 | 1336 |
1267 // Large local change rejected and doesn't get sent out. | 1337 // Large local change rejected and doesn't get sent out. |
1268 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); | 1338 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); |
1269 EXPECT_TRUE(storage1->Set(DEFAULTS, "large_value", large_value).HasError()); | 1339 EXPECT_TRUE(storage1->Set(DEFAULTS, "large_value", large_value).HasError()); |
1270 EXPECT_EQ(0u, sync_.changes().size()); | 1340 EXPECT_EQ(0u, sync_processor_->changes().size()); |
1271 | 1341 |
1272 // Large incoming change should still get accepted. | 1342 // Large incoming change should still get accepted. |
1273 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); | 1343 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
1274 { | 1344 { |
1275 SyncChangeList change_list; | 1345 SyncChangeList change_list; |
1276 change_list.push_back(settings_sync_util::CreateAdd( | 1346 change_list.push_back(settings_sync_util::CreateAdd( |
1277 "s1", "large_value", large_value, model_type)); | 1347 "s1", "large_value", large_value, model_type)); |
1278 change_list.push_back(settings_sync_util::CreateAdd( | 1348 change_list.push_back(settings_sync_util::CreateAdd( |
1279 "s2", "large_value", large_value, model_type)); | 1349 "s2", "large_value", large_value, model_type)); |
1280 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 1350 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
1281 } | 1351 } |
1282 { | 1352 { |
1283 DictionaryValue expected; | 1353 DictionaryValue expected; |
1284 expected.Set("large_value", large_value.DeepCopy()); | 1354 expected.Set("large_value", large_value.DeepCopy()); |
1285 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage1->Get()); | 1355 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage1->Get()); |
1286 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage2->Get()); | 1356 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage2->Get()); |
1287 } | 1357 } |
1288 | 1358 |
1289 GetSyncableService(model_type)->StopSyncing(model_type); | 1359 GetSyncableService(model_type)->StopSyncing(model_type); |
1290 } | 1360 } |
1291 | 1361 |
1292 } // namespace extensions | 1362 } // namespace extensions |
OLD | NEW |