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

Side by Side Diff: chrome/browser/extensions/settings/settings_sync_unittest.cc

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

Powered by Google App Engine
This is Rietveld 408576698