OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 <stack> | 5 #include <stack> |
6 #include <vector> | 6 #include <vector> |
7 | 7 |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 using browser_sync::DataTypeController; | 45 using browser_sync::DataTypeController; |
46 using browser_sync::ModelAssociator; | 46 using browser_sync::ModelAssociator; |
47 using browser_sync::SyncBackendHost; | 47 using browser_sync::SyncBackendHost; |
48 using browser_sync::SyncBackendHostMock; | 48 using browser_sync::SyncBackendHostMock; |
49 using browser_sync::UnrecoverableErrorHandler; | 49 using browser_sync::UnrecoverableErrorHandler; |
50 using testing::_; | 50 using testing::_; |
51 using testing::Return; | 51 using testing::Return; |
52 using testing::WithArg; | 52 using testing::WithArg; |
53 using testing::Invoke; | 53 using testing::Invoke; |
54 | 54 |
| 55 // TODO(akalin): Bookmark-specific tests should be moved into their |
| 56 // own file. |
55 class TestBookmarkModelAssociator : public BookmarkModelAssociator { | 57 class TestBookmarkModelAssociator : public BookmarkModelAssociator { |
56 public: | 58 public: |
57 TestBookmarkModelAssociator(TestProfileSyncService* service, | 59 TestBookmarkModelAssociator( |
| 60 TestProfileSyncService* service, |
58 UnrecoverableErrorHandler* persist_ids_error_handler) | 61 UnrecoverableErrorHandler* persist_ids_error_handler) |
59 : BookmarkModelAssociator(service, persist_ids_error_handler), | 62 : BookmarkModelAssociator(service, persist_ids_error_handler), |
60 helper_(new TestModelAssociatorHelper(service->id_factory())) { | 63 id_factory_(service->id_factory()) {} |
| 64 |
| 65 // TODO(akalin): This logic lazily creates any tagged node that is |
| 66 // requested. A better way would be to have utility functions to |
| 67 // create sync nodes from some bookmark structure and to use that. |
| 68 virtual bool GetSyncIdForTaggedNode(const std::string& tag, int64* sync_id) { |
| 69 std::wstring tag_wide; |
| 70 if (!UTF8ToWide(tag.c_str(), tag.length(), &tag_wide)) { |
| 71 NOTREACHED() << "Unable to convert UTF8 to wide for string: " << tag; |
| 72 return false; |
| 73 } |
| 74 |
| 75 bool root_exists = false; |
| 76 syncable::ModelType type = model_type(); |
| 77 { |
| 78 sync_api::WriteTransaction trans(sync_service()->GetUserShare()); |
| 79 sync_api::ReadNode uber_root(&trans); |
| 80 uber_root.InitByRootLookup(); |
| 81 |
| 82 sync_api::ReadNode root(&trans); |
| 83 root_exists = root.InitByTagLookup( |
| 84 ProfileSyncServiceTestHelper::GetTagForType(type)); |
| 85 } |
| 86 |
| 87 if (!root_exists) { |
| 88 bool created = ProfileSyncServiceTestHelper::CreateRoot( |
| 89 type, |
| 90 sync_service()->GetUserShare(), |
| 91 id_factory_); |
| 92 if (!created) |
| 93 return false; |
| 94 } |
| 95 |
| 96 sync_api::WriteTransaction trans(sync_service()->GetUserShare()); |
| 97 sync_api::ReadNode root(&trans); |
| 98 EXPECT_TRUE(root.InitByTagLookup( |
| 99 ProfileSyncServiceTestHelper::GetTagForType(type))); |
| 100 |
| 101 // First, try to find a node with the title among the root's children. |
| 102 // This will be the case if we are testing model persistence, and |
| 103 // are reloading a sync repository created earlier in the test. |
| 104 int64 last_child_id = sync_api::kInvalidId; |
| 105 for (int64 id = root.GetFirstChildId(); id != sync_api::kInvalidId; /***/) { |
| 106 sync_api::ReadNode child(&trans); |
| 107 child.InitByIdLookup(id); |
| 108 last_child_id = id; |
| 109 if (tag_wide == child.GetTitle()) { |
| 110 *sync_id = id; |
| 111 return true; |
| 112 } |
| 113 id = child.GetSuccessorId(); |
| 114 } |
| 115 |
| 116 sync_api::ReadNode predecessor_node(&trans); |
| 117 sync_api::ReadNode* predecessor = NULL; |
| 118 if (last_child_id != sync_api::kInvalidId) { |
| 119 predecessor_node.InitByIdLookup(last_child_id); |
| 120 predecessor = &predecessor_node; |
| 121 } |
| 122 sync_api::WriteNode node(&trans); |
| 123 // Create new fake tagged nodes at the end of the ordering. |
| 124 node.InitByCreation(type, root, predecessor); |
| 125 node.SetIsFolder(true); |
| 126 node.SetTitle(tag_wide); |
| 127 node.SetExternalId(0); |
| 128 *sync_id = node.GetId(); |
| 129 return true; |
61 } | 130 } |
62 virtual bool GetSyncIdForTaggedNode(const std::string& tag, int64* sync_id) { | 131 |
63 return helper_->GetSyncIdForTaggedNode(this, tag, sync_id); | |
64 } | |
65 private: | 132 private: |
66 scoped_ptr<TestModelAssociatorHelper> helper_; | 133 browser_sync::TestIdFactory* id_factory_; |
67 }; | 134 }; |
68 | 135 |
69 // FakeServerChange constructs a list of sync_api::ChangeRecords while modifying | 136 // FakeServerChange constructs a list of sync_api::ChangeRecords while modifying |
70 // the sync model, and can pass the ChangeRecord list to a | 137 // the sync model, and can pass the ChangeRecord list to a |
71 // sync_api::SyncObserver (i.e., the ProfileSyncService) to test the client | 138 // sync_api::SyncObserver (i.e., the ProfileSyncService) to test the client |
72 // change-application behavior. | 139 // change-application behavior. |
73 // Tests using FakeServerChange should be careful to avoid back-references, | 140 // Tests using FakeServerChange should be careful to avoid back-references, |
74 // since FakeServerChange will send the edits in the order specified. | 141 // since FakeServerChange will send the edits in the order specified. |
75 class FakeServerChange { | 142 class FakeServerChange { |
76 public: | 143 public: |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
335 &gnext)); | 402 &gnext)); |
336 EXPECT_EQ(gnode.GetSuccessorId(), gnext.GetId()); | 403 EXPECT_EQ(gnode.GetSuccessorId(), gnext.GetId()); |
337 EXPECT_EQ(gnode.GetParentId(), gnext.GetParentId()); | 404 EXPECT_EQ(gnode.GetParentId(), gnext.GetParentId()); |
338 } | 405 } |
339 if (bnode->GetChildCount()) { | 406 if (bnode->GetChildCount()) { |
340 EXPECT_TRUE(gnode.GetFirstChildId()); | 407 EXPECT_TRUE(gnode.GetFirstChildId()); |
341 } | 408 } |
342 } | 409 } |
343 | 410 |
344 void ExpectSyncerNodeMatching(const BookmarkNode* bnode) { | 411 void ExpectSyncerNodeMatching(const BookmarkNode* bnode) { |
345 sync_api::ReadTransaction trans(service_->backend_->GetUserShareHandle()); | 412 sync_api::ReadTransaction trans(service_->GetUserShare()); |
346 ExpectSyncerNodeMatching(&trans, bnode); | 413 ExpectSyncerNodeMatching(&trans, bnode); |
347 } | 414 } |
348 | 415 |
349 void ExpectBrowserNodeMatching(sync_api::BaseTransaction* trans, | 416 void ExpectBrowserNodeMatching(sync_api::BaseTransaction* trans, |
350 int64 sync_id) { | 417 int64 sync_id) { |
351 EXPECT_TRUE(sync_id); | 418 EXPECT_TRUE(sync_id); |
352 const BookmarkNode* bnode = | 419 const BookmarkNode* bnode = |
353 associator()->GetChromeNodeFromSyncId(sync_id); | 420 associator()->GetChromeNodeFromSyncId(sync_id); |
354 ASSERT_TRUE(bnode); | 421 ASSERT_TRUE(bnode); |
355 int64 id = associator()->GetSyncIdFromChromeId(bnode->id()); | 422 int64 id = associator()->GetSyncIdFromChromeId(bnode->id()); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
413 ExpectBrowserNodeMatching(trans, id); | 480 ExpectBrowserNodeMatching(trans, id); |
414 | 481 |
415 sync_api::ReadNode gnode(trans); | 482 sync_api::ReadNode gnode(trans); |
416 ASSERT_TRUE(gnode.InitByIdLookup(id)); | 483 ASSERT_TRUE(gnode.InitByIdLookup(id)); |
417 stack.push(gnode.GetFirstChildId()); | 484 stack.push(gnode.GetFirstChildId()); |
418 stack.push(gnode.GetSuccessorId()); | 485 stack.push(gnode.GetSuccessorId()); |
419 } | 486 } |
420 } | 487 } |
421 | 488 |
422 void ExpectModelMatch() { | 489 void ExpectModelMatch() { |
423 sync_api::ReadTransaction trans(service_->backend_->GetUserShareHandle()); | 490 sync_api::ReadTransaction trans(service_->GetUserShare()); |
424 ExpectModelMatch(&trans); | 491 ExpectModelMatch(&trans); |
425 } | 492 } |
426 | 493 |
427 int64 other_bookmarks_id() { | 494 int64 other_bookmarks_id() { |
428 return associator()->GetSyncIdFromChromeId(model_->other_node()->id()); | 495 return associator()->GetSyncIdFromChromeId(model_->other_node()->id()); |
429 } | 496 } |
430 | 497 |
431 int64 bookmark_bar_id() { | 498 int64 bookmark_bar_id() { |
432 return associator()->GetSyncIdFromChromeId( | 499 return associator()->GetSyncIdFromChromeId( |
433 model_->GetBookmarkBarNode()->id()); | 500 model_->GetBookmarkBarNode()->id()); |
434 } | 501 } |
435 | 502 |
436 SyncBackendHost* backend() { return service_->backend_.get(); } | |
437 | |
438 // This serves as the "UI loop" on which the ProfileSyncService lives and | 503 // This serves as the "UI loop" on which the ProfileSyncService lives and |
439 // operates. It is needed because the SyncBackend can post tasks back to | 504 // operates. It is needed because the SyncBackend can post tasks back to |
440 // the service, meaning it can't be null. It doesn't have to be running, | 505 // the service, meaning it can't be null. It doesn't have to be running, |
441 // though -- OnInitializationCompleted is the only example (so far) in this | 506 // though -- OnInitializationCompleted is the only example (so far) in this |
442 // test where we need to Run the loop to swallow a task and then quit, to | 507 // test where we need to Run the loop to swallow a task and then quit, to |
443 // avoid leaking the ProfileSyncService (the PostTask will retain the callee | 508 // avoid leaking the ProfileSyncService (the PostTask will retain the callee |
444 // and caller until the task is run). | 509 // and caller until the task is run). |
445 MessageLoop message_loop_; | 510 MessageLoop message_loop_; |
446 BrowserThread ui_thread_; | 511 BrowserThread ui_thread_; |
447 BrowserThread file_thread_; | 512 BrowserThread file_thread_; |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
541 // Delete an item with several children. | 606 // Delete an item with several children. |
542 model_->Remove(folder2->GetParent(), | 607 model_->Remove(folder2->GetParent(), |
543 folder2->GetParent()->IndexOfChild(folder2)); | 608 folder2->GetParent()->IndexOfChild(folder2)); |
544 ExpectModelMatch(); | 609 ExpectModelMatch(); |
545 } | 610 } |
546 | 611 |
547 TEST_F(ProfileSyncServiceTest, ServerChangeProcessing) { | 612 TEST_F(ProfileSyncServiceTest, ServerChangeProcessing) { |
548 LoadBookmarkModel(DELETE_EXISTING_STORAGE, DONT_SAVE_TO_STORAGE); | 613 LoadBookmarkModel(DELETE_EXISTING_STORAGE, DONT_SAVE_TO_STORAGE); |
549 StartSyncService(); | 614 StartSyncService(); |
550 | 615 |
551 sync_api::WriteTransaction trans(backend()->GetUserShareHandle()); | 616 sync_api::WriteTransaction trans(service_->GetUserShare()); |
552 | 617 |
553 FakeServerChange adds(&trans); | 618 FakeServerChange adds(&trans); |
554 int64 f1 = adds.AddFolder(L"Server Folder B", bookmark_bar_id(), 0); | 619 int64 f1 = adds.AddFolder(L"Server Folder B", bookmark_bar_id(), 0); |
555 int64 f2 = adds.AddFolder(L"Server Folder A", bookmark_bar_id(), f1); | 620 int64 f2 = adds.AddFolder(L"Server Folder A", bookmark_bar_id(), f1); |
556 int64 u1 = adds.AddURL(L"Some old site", "ftp://nifty.andrew.cmu.edu/", | 621 int64 u1 = adds.AddURL(L"Some old site", "ftp://nifty.andrew.cmu.edu/", |
557 bookmark_bar_id(), f2); | 622 bookmark_bar_id(), f2); |
558 int64 u2 = adds.AddURL(L"Nifty", "ftp://nifty.andrew.cmu.edu/", f1, 0); | 623 int64 u2 = adds.AddURL(L"Nifty", "ftp://nifty.andrew.cmu.edu/", f1, 0); |
559 // u3 is a duplicate URL | 624 // u3 is a duplicate URL |
560 int64 u3 = adds.AddURL(L"Nifty2", "ftp://nifty.andrew.cmu.edu/", f1, u2); | 625 int64 u3 = adds.AddURL(L"Nifty2", "ftp://nifty.andrew.cmu.edu/", f1, u2); |
561 // u4 is a duplicate title, different URL. | 626 // u4 is a duplicate title, different URL. |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
630 } | 695 } |
631 | 696 |
632 // Tests a specific case in ApplyModelChanges where we move the | 697 // Tests a specific case in ApplyModelChanges where we move the |
633 // children out from under a parent, and then delete the parent | 698 // children out from under a parent, and then delete the parent |
634 // in the same changelist. The delete shows up first in the changelist, | 699 // in the same changelist. The delete shows up first in the changelist, |
635 // requiring the children to be moved to a temporary location. | 700 // requiring the children to be moved to a temporary location. |
636 TEST_F(ProfileSyncServiceTest, ServerChangeRequiringFosterParent) { | 701 TEST_F(ProfileSyncServiceTest, ServerChangeRequiringFosterParent) { |
637 LoadBookmarkModel(DELETE_EXISTING_STORAGE, DONT_SAVE_TO_STORAGE); | 702 LoadBookmarkModel(DELETE_EXISTING_STORAGE, DONT_SAVE_TO_STORAGE); |
638 StartSyncService(); | 703 StartSyncService(); |
639 | 704 |
640 sync_api::WriteTransaction trans(backend()->GetUserShareHandle()); | 705 sync_api::WriteTransaction trans(service_->GetUserShare()); |
641 | 706 |
642 // Stress the immediate children of other_node because that's where | 707 // Stress the immediate children of other_node because that's where |
643 // ApplyModelChanges puts a temporary foster parent node. | 708 // ApplyModelChanges puts a temporary foster parent node. |
644 std::string url("http://dev.chromium.org/"); | 709 std::string url("http://dev.chromium.org/"); |
645 FakeServerChange adds(&trans); | 710 FakeServerChange adds(&trans); |
646 int64 f0 = other_bookmarks_id(); // + other_node | 711 int64 f0 = other_bookmarks_id(); // + other_node |
647 int64 f1 = adds.AddFolder(L"f1", f0, 0); // + f1 | 712 int64 f1 = adds.AddFolder(L"f1", f0, 0); // + f1 |
648 int64 f2 = adds.AddFolder(L"f2", f1, 0); // + f2 | 713 int64 f2 = adds.AddFolder(L"f2", f1, 0); // + f2 |
649 int64 u3 = adds.AddURL( L"u3", url, f2, 0); // + u3 NOLINT | 714 int64 u3 = adds.AddURL( L"u3", url, f2, 0); // + u3 NOLINT |
650 int64 u4 = adds.AddURL( L"u4", url, f2, u3); // + u4 NOLINT | 715 int64 u4 = adds.AddURL( L"u4", url, f2, u3); // + u4 NOLINT |
(...skipping 28 matching lines...) Expand all Loading... |
679 | 744 |
680 ExpectModelMatch(&trans); | 745 ExpectModelMatch(&trans); |
681 } | 746 } |
682 | 747 |
683 // Simulate a server change record containing a valid but non-canonical URL. | 748 // Simulate a server change record containing a valid but non-canonical URL. |
684 TEST_F(ProfileSyncServiceTest, ServerChangeWithNonCanonicalURL) { | 749 TEST_F(ProfileSyncServiceTest, ServerChangeWithNonCanonicalURL) { |
685 LoadBookmarkModel(DELETE_EXISTING_STORAGE, SAVE_TO_STORAGE); | 750 LoadBookmarkModel(DELETE_EXISTING_STORAGE, SAVE_TO_STORAGE); |
686 StartSyncService(); | 751 StartSyncService(); |
687 | 752 |
688 { | 753 { |
689 sync_api::WriteTransaction trans(backend()->GetUserShareHandle()); | 754 sync_api::WriteTransaction trans(service_->GetUserShare()); |
690 | 755 |
691 FakeServerChange adds(&trans); | 756 FakeServerChange adds(&trans); |
692 std::string url("http://dev.chromium.org"); | 757 std::string url("http://dev.chromium.org"); |
693 EXPECT_NE(GURL(url).spec(), url); | 758 EXPECT_NE(GURL(url).spec(), url); |
694 adds.AddURL(L"u1", url, other_bookmarks_id(), 0); | 759 adds.AddURL(L"u1", url, other_bookmarks_id(), 0); |
695 | 760 |
696 adds.ApplyPendingChanges(change_processor()); | 761 adds.ApplyPendingChanges(change_processor()); |
697 | 762 |
698 EXPECT_TRUE(model_->other_node()->GetChildCount() == 1); | 763 EXPECT_TRUE(model_->other_node()->GetChildCount() == 1); |
699 ExpectModelMatch(&trans); | 764 ExpectModelMatch(&trans); |
(...skipping 10 matching lines...) Expand all Loading... |
710 } | 775 } |
711 | 776 |
712 // Simulate a server change record containing an invalid URL (per GURL). | 777 // Simulate a server change record containing an invalid URL (per GURL). |
713 // TODO(ncarter): Disabled due to crashes. Fix bug 1677563. | 778 // TODO(ncarter): Disabled due to crashes. Fix bug 1677563. |
714 TEST_F(ProfileSyncServiceTest, DISABLED_ServerChangeWithInvalidURL) { | 779 TEST_F(ProfileSyncServiceTest, DISABLED_ServerChangeWithInvalidURL) { |
715 LoadBookmarkModel(DELETE_EXISTING_STORAGE, SAVE_TO_STORAGE); | 780 LoadBookmarkModel(DELETE_EXISTING_STORAGE, SAVE_TO_STORAGE); |
716 StartSyncService(); | 781 StartSyncService(); |
717 | 782 |
718 int child_count = 0; | 783 int child_count = 0; |
719 { | 784 { |
720 sync_api::WriteTransaction trans(backend()->GetUserShareHandle()); | 785 sync_api::WriteTransaction trans(service_->GetUserShare()); |
721 | 786 |
722 FakeServerChange adds(&trans); | 787 FakeServerChange adds(&trans); |
723 std::string url("x"); | 788 std::string url("x"); |
724 EXPECT_FALSE(GURL(url).is_valid()); | 789 EXPECT_FALSE(GURL(url).is_valid()); |
725 adds.AddURL(L"u1", url, other_bookmarks_id(), 0); | 790 adds.AddURL(L"u1", url, other_bookmarks_id(), 0); |
726 | 791 |
727 adds.ApplyPendingChanges(change_processor()); | 792 adds.ApplyPendingChanges(change_processor()); |
728 | 793 |
729 // We're lenient about what should happen -- the model could wind up with | 794 // We're lenient about what should happen -- the model could wind up with |
730 // the node or without it; but things should be consistent, and we | 795 // the node or without it; but things should be consistent, and we |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
827 | 892 |
828 // Add a node which will be the target of the consistency violation. | 893 // Add a node which will be the target of the consistency violation. |
829 const BookmarkNode* node = | 894 const BookmarkNode* node = |
830 model_->AddGroup(model_->other_node(), 0, ASCIIToUTF16("node")); | 895 model_->AddGroup(model_->other_node(), 0, ASCIIToUTF16("node")); |
831 ExpectSyncerNodeMatching(node); | 896 ExpectSyncerNodeMatching(node); |
832 | 897 |
833 // Now destroy the syncer node as if we were the ProfileSyncService without | 898 // Now destroy the syncer node as if we were the ProfileSyncService without |
834 // updating the ProfileSyncService state. This should introduce | 899 // updating the ProfileSyncService state. This should introduce |
835 // inconsistency between the two models. | 900 // inconsistency between the two models. |
836 { | 901 { |
837 sync_api::WriteTransaction trans(service_->backend_->GetUserShareHandle()); | 902 sync_api::WriteTransaction trans(service_->GetUserShare()); |
838 sync_api::WriteNode sync_node(&trans); | 903 sync_api::WriteNode sync_node(&trans); |
839 EXPECT_TRUE(associator()->InitSyncNodeFromChromeId(node->id(), | 904 EXPECT_TRUE(associator()->InitSyncNodeFromChromeId(node->id(), |
840 &sync_node)); | 905 &sync_node)); |
841 sync_node.Remove(); | 906 sync_node.Remove(); |
842 } | 907 } |
843 // The models don't match at this point, but the ProfileSyncService | 908 // The models don't match at this point, but the ProfileSyncService |
844 // doesn't know it yet. | 909 // doesn't know it yet. |
845 ExpectSyncerNodeKnown(node); | 910 ExpectSyncerNodeKnown(node); |
846 EXPECT_TRUE(service_->ShouldPushChanges()); | 911 EXPECT_TRUE(service_->ShouldPushChanges()); |
847 | 912 |
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1316 | 1381 |
1317 // See what happens if we enable sync but then delete the "Sync Data" | 1382 // See what happens if we enable sync but then delete the "Sync Data" |
1318 // folder. | 1383 // folder. |
1319 TEST_F(ProfileSyncServiceTestWithData, RecoverAfterDeletingSyncDataDirectory) { | 1384 TEST_F(ProfileSyncServiceTestWithData, RecoverAfterDeletingSyncDataDirectory) { |
1320 LoadBookmarkModel(DELETE_EXISTING_STORAGE, SAVE_TO_STORAGE); | 1385 LoadBookmarkModel(DELETE_EXISTING_STORAGE, SAVE_TO_STORAGE); |
1321 StartSyncService(); | 1386 StartSyncService(); |
1322 | 1387 |
1323 WriteTestDataToBookmarkModel(); | 1388 WriteTestDataToBookmarkModel(); |
1324 | 1389 |
1325 // While the service is running. | 1390 // While the service is running. |
1326 FilePath sync_data_directory = backend()->sync_data_folder_path(); | 1391 FilePath sync_data_directory = |
| 1392 service_->GetBackendForTest()->sync_data_folder_path(); |
1327 | 1393 |
1328 // Simulate a normal shutdown for the sync service (don't disable it for | 1394 // Simulate a normal shutdown for the sync service (don't disable it for |
1329 // the user, which would reset the preferences and delete the sync data | 1395 // the user, which would reset the preferences and delete the sync data |
1330 // directory). | 1396 // directory). |
1331 StopSyncService(SAVE_TO_STORAGE); | 1397 StopSyncService(SAVE_TO_STORAGE); |
1332 | 1398 |
1333 // Now pretend that the user has deleted this directory from the disk. | 1399 // Now pretend that the user has deleted this directory from the disk. |
1334 file_util::Delete(sync_data_directory, true); | 1400 file_util::Delete(sync_data_directory, true); |
1335 | 1401 |
1336 // Restart the sync service. Don't fake out setting initial sync ended; lets | 1402 // Restart the sync service. Don't fake out setting initial sync ended; lets |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1381 | 1447 |
1382 service_->RegisterDataTypeController( | 1448 service_->RegisterDataTypeController( |
1383 new browser_sync::BookmarkDataTypeController(&factory_, | 1449 new browser_sync::BookmarkDataTypeController(&factory_, |
1384 profile_.get(), | 1450 profile_.get(), |
1385 service_.get())); | 1451 service_.get())); |
1386 | 1452 |
1387 service_->Initialize(); // will call disableForUser because sync setup | 1453 service_->Initialize(); // will call disableForUser because sync setup |
1388 // hasn't been completed. | 1454 // hasn't been completed. |
1389 } | 1455 } |
1390 | 1456 |
1391 ASSERT_FALSE(service_->backend()); | |
1392 ASSERT_FALSE(service_->HasSyncSetupCompleted()); | 1457 ASSERT_FALSE(service_->HasSyncSetupCompleted()); |
1393 | 1458 |
1394 // Create some tokens in the token service; the service will startup when | 1459 // Create some tokens in the token service; the service will startup when |
1395 // it is notified that tokens are available. | 1460 // it is notified that tokens are available. |
1396 profile_->GetTokenService()->IssueAuthTokenForTest( | 1461 profile_->GetTokenService()->IssueAuthTokenForTest( |
1397 GaiaConstants::kSyncService, "sync_token"); | 1462 GaiaConstants::kSyncService, "sync_token"); |
1398 | 1463 |
1399 syncable::ModelTypeSet set; | 1464 syncable::ModelTypeSet set; |
1400 set.insert(syncable::BOOKMARKS); | 1465 set.insert(syncable::BOOKMARKS); |
1401 service_->OnUserChoseDatatypes(false, set); | 1466 service_->OnUserChoseDatatypes(false, set); |
1402 | 1467 |
1403 MessageLoop::current()->RunAllPending(); | 1468 MessageLoop::current()->RunAllPending(); |
1404 | 1469 |
1405 // Stop the service so we can read the new Sync Data files that were created. | 1470 // Stop the service so we can read the new Sync Data files that were created. |
1406 service_.reset(); | 1471 service_.reset(); |
1407 | 1472 |
1408 // This file should have been deleted when the whole directory was nuked. | 1473 // This file should have been deleted when the whole directory was nuked. |
1409 ASSERT_FALSE(file_util::PathExists(sync_file3)); | 1474 ASSERT_FALSE(file_util::PathExists(sync_file3)); |
1410 ASSERT_FALSE(file_util::PathExists(sync_file1)); | 1475 ASSERT_FALSE(file_util::PathExists(sync_file1)); |
1411 | 1476 |
1412 // This will still exist, but the text should have changed. | 1477 // This will still exist, but the text should have changed. |
1413 ASSERT_TRUE(file_util::PathExists(sync_file2)); | 1478 ASSERT_TRUE(file_util::PathExists(sync_file2)); |
1414 std::string file2text; | 1479 std::string file2text; |
1415 file_util::ReadFileToString(sync_file2, &file2text); | 1480 file_util::ReadFileToString(sync_file2, &file2text); |
1416 ASSERT_FALSE(file2text.compare(nonsense2) == 0); | 1481 ASSERT_FALSE(file2text.compare(nonsense2) == 0); |
1417 } | 1482 } |
OLD | NEW |