| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <stddef.h> |
| |
| #include <utility> |
| |
| #include "base/macros.h" |
| #include "base/rand_util.h" |
| #include "base/run_loop.h" |
| #include "base/strings/stringprintf.h" |
| #include "base/values.h" |
| #include "build/build_config.h" |
| #include "chrome/browser/policy/profile_policy_connector_factory.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/sync/test/integration/bookmarks_helper.h" |
| #include "chrome/browser/sync/test/integration/passwords_helper.h" |
| #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h" |
| #include "chrome/browser/sync/test/integration/sync_integration_test_util.h" |
| #include "chrome/browser/sync/test/integration/sync_test.h" |
| #include "components/bookmarks/browser/bookmark_node.h" |
| #include "components/policy/core/common/mock_configuration_policy_provider.h" |
| #include "components/policy/core/common/policy_map.h" |
| #include "components/policy/core/common/policy_types.h" |
| #include "policy/policy_constants.h" |
| #include "sync/internal_api/public/sessions/sync_session_snapshot.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| #include "ui/base/layout.h" |
| |
| using bookmarks::BookmarkNode; |
| using bookmarks_helper::AddFolder; |
| using bookmarks_helper::AddURL; |
| using bookmarks_helper::AllModelsMatch; |
| using bookmarks_helper::AllModelsMatchVerifier; |
| using bookmarks_helper::AwaitAllModelsMatch; |
| using bookmarks_helper::CheckFaviconExpired; |
| using bookmarks_helper::ContainsDuplicateBookmarks; |
| using bookmarks_helper::CountAllBookmarks; |
| using bookmarks_helper::CountBookmarksWithTitlesMatching; |
| using bookmarks_helper::CountBookmarksWithUrlsMatching; |
| using bookmarks_helper::CountFoldersWithTitlesMatching; |
| using bookmarks_helper::CreateFavicon; |
| using bookmarks_helper::ExpireFavicon; |
| using bookmarks_helper::GetBookmarkBarNode; |
| using bookmarks_helper::GetManagedNode; |
| using bookmarks_helper::GetOtherNode; |
| using bookmarks_helper::GetSyncedBookmarksNode; |
| using bookmarks_helper::GetUniqueNodeByURL; |
| using bookmarks_helper::HasNodeWithURL; |
| using bookmarks_helper::IndexedFolderName; |
| using bookmarks_helper::IndexedSubfolderName; |
| using bookmarks_helper::IndexedSubsubfolderName; |
| using bookmarks_helper::IndexedURL; |
| using bookmarks_helper::IndexedURLTitle; |
| using bookmarks_helper::Move; |
| using bookmarks_helper::Remove; |
| using bookmarks_helper::RemoveAll; |
| using bookmarks_helper::ReverseChildOrder; |
| using bookmarks_helper::SetFavicon; |
| using bookmarks_helper::SetTitle; |
| using bookmarks_helper::SetURL; |
| using bookmarks_helper::SortChildren; |
| using passwords_helper::SetDecryptionPassphrase; |
| using passwords_helper::SetEncryptionPassphrase; |
| using sync_integration_test_util::AwaitCommitActivityCompletion; |
| using sync_integration_test_util::AwaitPassphraseAccepted; |
| using sync_integration_test_util::AwaitPassphraseRequired; |
| |
| namespace { |
| |
| const char kGenericURL[] = "http://www.host.ext:1234/path/filename"; |
| const char kGenericURLTitle[] = "URL Title"; |
| const char kGenericFolderName[] = "Folder Name"; |
| const char kGenericSubfolderName[] = "Subfolder Name"; |
| const char kValidPassphrase[] = "passphrase!"; |
| |
| } // namespace |
| |
| class TwoClientBookmarksSyncTest : public SyncTest { |
| public: |
| TwoClientBookmarksSyncTest() : SyncTest(TWO_CLIENT) {} |
| ~TwoClientBookmarksSyncTest() override {} |
| |
| void TearDownInProcessBrowserTestFixture() override { |
| SyncTest::TearDownInProcessBrowserTestFixture(); |
| policy_provider_.Shutdown(); |
| } |
| |
| protected: |
| // Needs to be deleted after all Profiles are deleted. |
| policy::MockConfigurationPolicyProvider policy_provider_; |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(TwoClientBookmarksSyncTest); |
| }; |
| |
| class LegacyTwoClientBookmarksSyncTest : public SyncTest { |
| public: |
| LegacyTwoClientBookmarksSyncTest() : SyncTest(TWO_CLIENT_LEGACY) {} |
| ~LegacyTwoClientBookmarksSyncTest() override {} |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(LegacyTwoClientBookmarksSyncTest); |
| }; |
| |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, Sanity) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| GURL google_url("http://www.google.com"); |
| ASSERT_TRUE(AddURL(0, "Google", google_url) != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AddURL(1, "Yahoo", GURL("http://www.yahoo.com")) != NULL); |
| ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| const BookmarkNode* new_folder = AddFolder(0, 2, "New Folder"); |
| Move(0, GetUniqueNodeByURL(0, google_url), new_folder, 0); |
| SetTitle(0, GetBookmarkBarNode(0)->GetChild(0), "Yahoo!!"); |
| ASSERT_TRUE(AddURL(0, GetBookmarkBarNode(0), 1, "CNN", |
| GURL("http://www.cnn.com")) != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| ASSERT_TRUE(AddURL(1, "Facebook", GURL("http://www.facebook.com")) != NULL); |
| ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| SortChildren(1, GetBookmarkBarNode(1)); |
| ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| DisableVerifier(); |
| SetTitle(0, GetUniqueNodeByURL(0, google_url), "Google++"); |
| SetTitle(1, GetUniqueNodeByURL(1, google_url), "Google--"); |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| } |
| |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SimultaneousURLChanges) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| GURL initial_url("http://www.google.com"); |
| GURL second_url("http://www.google.com/abc"); |
| GURL third_url("http://www.google.com/def"); |
| std::string title = "Google"; |
| |
| ASSERT_TRUE(AddURL(0, title, initial_url) != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| |
| DisableVerifier(); |
| ASSERT_TRUE(SetURL( |
| 0, GetUniqueNodeByURL(0, initial_url), second_url) != NULL); |
| ASSERT_TRUE(SetURL( |
| 1, GetUniqueNodeByURL(1, initial_url), third_url) != NULL); |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| |
| SetTitle(0, GetBookmarkBarNode(0)->GetChild(0), "Google1"); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatch()); |
| } |
| |
| // Test Scribe ID - 370558. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_AddFirstFolder) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| ASSERT_TRUE(AddFolder(0, kGenericFolderName) != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 370559. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_AddFirstBMWithoutFavicon) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| ASSERT_TRUE(AddURL(0, kGenericURLTitle, GURL(kGenericURL)) != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 370489. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_AddFirstBMWithFavicon) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| const GURL page_url(kGenericURL); |
| const GURL icon_url("http://www.google.com/favicon.ico"); |
| |
| const BookmarkNode* bookmark = AddURL(0, kGenericURLTitle, page_url); |
| |
| ASSERT_TRUE(bookmark != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| SetFavicon(0, bookmark, icon_url, CreateFavicon(SK_ColorWHITE), |
| bookmarks_helper::FROM_UI); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test that the history service logic for not losing the hidpi versions of |
| // favicons as a result of sync does not result in dropping sync updates. |
| // In particular, the synced 16x16 favicon bitmap should overwrite 16x16 |
| // favicon bitmaps on all clients. (Though non-16x16 favicon bitmaps |
| // are unchanged). |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_SetFaviconHiDPI) { |
| // Set the supported scale factors to include 2x such that CreateFavicon() |
| // creates a favicon with hidpi representations and that methods in the |
| // FaviconService request hidpi favicons. |
| std::vector<ui::ScaleFactor> supported_scale_factors; |
| supported_scale_factors.push_back(ui::SCALE_FACTOR_100P); |
| supported_scale_factors.push_back(ui::SCALE_FACTOR_200P); |
| ui::SetSupportedScaleFactors(supported_scale_factors); |
| |
| const GURL page_url(kGenericURL); |
| const GURL icon_url1("http://www.google.com/favicon1.ico"); |
| const GURL icon_url2("http://www.google.com/favicon2.ico"); |
| |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| const BookmarkNode* bookmark0 = AddURL(0, kGenericURLTitle, page_url); |
| ASSERT_TRUE(bookmark0 != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| SetFavicon(0, bookmark0, icon_url1, CreateFavicon(SK_ColorWHITE), |
| bookmarks_helper::FROM_UI); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| const BookmarkNode* bookmark1 = GetUniqueNodeByURL(1, page_url); |
| SetFavicon(1, bookmark1, icon_url1, CreateFavicon(SK_ColorBLUE), |
| bookmarks_helper::FROM_UI); |
| ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| SetFavicon(0, bookmark0, icon_url2, CreateFavicon(SK_ColorGREEN), |
| bookmarks_helper::FROM_UI); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test that if sync does not modify a favicon bitmap's data that it does not |
| // modify the favicon bitmap's "last updated time" either. This is important |
| // because the last updated time is used to determine whether a bookmark's |
| // favicon should be redownloaded when the web when the bookmark is visited. |
| // If sync prevents the "last updated time" from expiring, the favicon is |
| // never redownloaded from the web. (http://crbug.com/481414) |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_UpdatingTitleDoesNotUpdateFaviconLastUpdatedTime) { |
| ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; |
| |
| std::vector<ui::ScaleFactor> supported_scale_factors; |
| supported_scale_factors.push_back(ui::SCALE_FACTOR_100P); |
| ui::SetSupportedScaleFactors(supported_scale_factors); |
| |
| const GURL page_url(kGenericURL); |
| const GURL icon_url("http://www.google.com/favicon.ico"); |
| |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| const BookmarkNode* bookmark0 = AddURL(0, kGenericURLTitle, page_url); |
| ASSERT_NE(bookmark0, nullptr); |
| gfx::Image favicon0 = CreateFavicon(SK_ColorBLUE); |
| ASSERT_FALSE(favicon0.IsEmpty()); |
| SetFavicon(0, bookmark0, icon_url, favicon0, bookmarks_helper::FROM_UI); |
| |
| // Expire the favicon (e.g. as a result of the user "clearing browsing |
| // history from the beginning of time") |
| ExpireFavicon(0, bookmark0); |
| CheckFaviconExpired(0, icon_url); |
| |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| // Change the bookmark's title for profile 1. Changing the title will cause |
| // the bookmark's favicon data to be synced from profile 1 to profile 0 even |
| // though the favicon data did not change. |
| const std::string kNewTitle = "New Title"; |
| ASSERT_NE(kNewTitle, kGenericURLTitle); |
| const BookmarkNode* bookmark1 = GetUniqueNodeByURL(1, page_url); |
| SetTitle(1, bookmark1, kNewTitle); |
| ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| // The favicon for profile 0 should still be expired. |
| CheckFaviconExpired(0, icon_url); |
| } |
| |
| // When two bookmarks use the same icon URL, both bookmarks use the same row |
| // in the favicons table in the Favicons database. Test that when the favicon |
| // is updated for one bookmark it is also updated for the other bookmark. This |
| // ensures that sync has the most up to date data and prevents sync from |
| // reverting the newly updated bookmark favicon back to the old favicon. |
| // crbug.com/485657 |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_SetFaviconTwoBookmarksSameIconURL) { |
| const GURL page_url1("http://www.google.com/a"); |
| const GURL page_url2("http://www.google.com/b"); |
| const GURL icon_url("http://www.google.com/favicon.ico"); |
| |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| const BookmarkNode* bookmark01 = AddURL(0, kGenericURLTitle, page_url1); |
| ASSERT_TRUE(bookmark01 != nullptr); |
| const BookmarkNode* bookmark02 = AddURL(0, kGenericURLTitle, page_url2); |
| ASSERT_TRUE(bookmark02 != nullptr); |
| |
| SetFavicon(0, bookmark01, icon_url, CreateFavicon(SK_ColorWHITE), |
| bookmarks_helper::FROM_UI); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| // Set |page_url2| with the new (blue) favicon at |icon_url|. The sync favicon |
| // for both |page_url1| and |page_url2| should be updated to the blue one. |
| SetFavicon(0, bookmark02, icon_url, CreateFavicon(SK_ColorBLUE), |
| bookmarks_helper::FROM_UI); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| // Set the title for |page_url1|. This should not revert either of the |
| // bookmark favicons back to white. |
| const char kNewTitle[] = "New Title"; |
| ASSERT_STRNE(kGenericURLTitle, kNewTitle); |
| const BookmarkNode* bookmark11 = GetUniqueNodeByURL(1, page_url1); |
| SetTitle(1, bookmark11, std::string(kNewTitle)); |
| ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 370560. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_AddNonHTTPBMs) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| ASSERT_TRUE(AddURL( |
| 0, "FTP UR", GURL("ftp://user:password@host:1234/path")) != NULL); |
| ASSERT_TRUE(AddURL(0, "File UR", GURL("file://host/path")) != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 370561. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_AddFirstBMUnderFolder) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| const BookmarkNode* folder = AddFolder(0, kGenericFolderName); |
| ASSERT_TRUE(folder != NULL); |
| ASSERT_TRUE(AddURL( |
| 0, folder, 0, kGenericURLTitle, GURL(kGenericURL)) != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 370562. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_AddSeveralBMsUnderBMBarAndOtherBM) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| for (int i = 0; i < 20; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, i, title, url) != NULL); |
| ASSERT_TRUE(AddURL( |
| 0, GetOtherNode(0), i, title, url) != NULL); |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 370563. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_AddSeveralBMsAndFolders) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| for (int i = 0; i < 15; ++i) { |
| if (base::RandDouble() > 0.6) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, i, title, url) != NULL); |
| } else { |
| std::string title = IndexedFolderName(i); |
| const BookmarkNode* folder = AddFolder(0, i, title); |
| ASSERT_TRUE(folder != NULL); |
| if (base::RandDouble() > 0.4) { |
| for (int i = 0; i < 20; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE( |
| AddURL(0, folder, i, title, url) != NULL); |
| } |
| } |
| } |
| } |
| for (int i = 0; i < 10; i++) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, GetOtherNode(0), i, title, url) != NULL); |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 370641. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_DuplicateBMWithDifferentURLSameName) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| GURL url0 = GURL(IndexedURL(0)); |
| GURL url1 = GURL(IndexedURL(1)); |
| ASSERT_TRUE(AddURL(0, kGenericURLTitle, url0) != NULL); |
| ASSERT_TRUE(AddURL(0, kGenericURLTitle, url1) != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 370639 - Add bookmarks with different name and same URL. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_DuplicateBookmarksWithSameURL) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| std::string title0 = IndexedURLTitle(0); |
| std::string title1 = IndexedURLTitle(1); |
| ASSERT_TRUE(AddURL(0, title0, GURL(kGenericURL)) != NULL); |
| ASSERT_TRUE(AddURL(0, title1, GURL(kGenericURL)) != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371817. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_RenameBMName) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| std::string title = IndexedURLTitle(1); |
| const BookmarkNode* bookmark = AddURL(0, title, GURL(kGenericURL)); |
| ASSERT_TRUE(bookmark != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| std::string new_title = IndexedURLTitle(2); |
| SetTitle(0, bookmark, new_title); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371822. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_RenameBMURL) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| GURL url = GURL(IndexedURL(1)); |
| const BookmarkNode* bookmark = AddURL(0, kGenericURLTitle, url); |
| ASSERT_TRUE(bookmark != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| GURL new_url = GURL(IndexedURL(2)); |
| ASSERT_TRUE(SetURL(0, bookmark, new_url) != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| |
| // Test Scribe ID - 371818 - Renaming the same bookmark name twice. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_TwiceRenamingBookmarkName) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| std::string title = IndexedURLTitle(1); |
| const BookmarkNode* bookmark = AddURL(0, title, GURL(kGenericURL)); |
| ASSERT_TRUE(bookmark != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| std::string new_title = IndexedURLTitle(2); |
| SetTitle(0, bookmark, new_title); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| SetTitle(0, bookmark, title); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371823 - Renaming the same bookmark URL twice. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_TwiceRenamingBookmarkURL) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| GURL url = GURL(IndexedURL(1)); |
| const BookmarkNode* bookmark = AddURL(0, kGenericURLTitle, url); |
| ASSERT_TRUE(bookmark != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| GURL new_url = GURL(IndexedURL(2)); |
| ASSERT_TRUE(SetURL(0, bookmark, new_url) != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| ASSERT_TRUE(SetURL(0, bookmark, url) != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371824. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_RenameBMFolder) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| std::string title = IndexedFolderName(1); |
| const BookmarkNode* folder = AddFolder(0, title); |
| ASSERT_TRUE(AddURL( |
| 0, folder, 0, kGenericURLTitle, GURL(kGenericURL)) != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| std::string new_title = IndexedFolderName(2); |
| SetTitle(0, folder, new_title); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371825. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_RenameEmptyBMFolder) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| std::string title = IndexedFolderName(1); |
| const BookmarkNode* folder = AddFolder(0, title); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| std::string new_title = IndexedFolderName(2); |
| SetTitle(0, folder, new_title); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371826. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_RenameBMFolderWithLongHierarchy) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| std::string title = IndexedFolderName(1); |
| const BookmarkNode* folder = AddFolder(0, title); |
| ASSERT_TRUE(folder != NULL); |
| for (int i = 0; i < 120; ++i) { |
| if (base::RandDouble() > 0.15) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); |
| } else { |
| std::string title = IndexedSubfolderName(i); |
| ASSERT_TRUE(AddFolder(0, folder, i, title) != NULL); |
| } |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| std::string new_title = IndexedFolderName(2); |
| SetTitle(0, folder, new_title); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371827. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_RenameBMFolderThatHasParentAndChildren) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| const BookmarkNode* folder = AddFolder(0, kGenericFolderName); |
| ASSERT_TRUE(folder != NULL); |
| for (int i = 1; i < 15; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, i, title, url) != NULL); |
| } |
| std::string title = IndexedSubfolderName(1); |
| const BookmarkNode* subfolder = AddFolder(0, folder, 0, title); |
| for (int i = 0; i < 120; ++i) { |
| if (base::RandDouble() > 0.15) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, subfolder, i, title, url) != NULL); |
| } else { |
| std::string title = IndexedSubsubfolderName(i); |
| ASSERT_TRUE(AddFolder(0, subfolder, i, title) != NULL); |
| } |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| std::string new_title = IndexedSubfolderName(2); |
| SetTitle(0, subfolder, new_title); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371828. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_RenameBMNameAndURL) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| GURL url = GURL(IndexedURL(1)); |
| std::string title = IndexedURLTitle(1); |
| const BookmarkNode* bookmark = AddURL(0, title, url); |
| ASSERT_TRUE(bookmark != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| GURL new_url = GURL(IndexedURL(2)); |
| std::string new_title = IndexedURLTitle(2); |
| bookmark = SetURL(0, bookmark, new_url); |
| ASSERT_TRUE(bookmark != NULL); |
| SetTitle(0, bookmark, new_title); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371832. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_DeleteBMEmptyAccountAfterwards) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| ASSERT_TRUE(AddURL( |
| 0, kGenericURLTitle, GURL(kGenericURL)) != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| Remove(0, GetBookmarkBarNode(0), 0); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371833. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_DelBMNonEmptyAccountAfterwards) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| for (int i = 0; i < 20; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, i, title, url) != NULL); |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| Remove(0, GetBookmarkBarNode(0), 0); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371835. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_DelFirstBMUnderBMFoldNonEmptyFoldAfterwards) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| const BookmarkNode* folder = AddFolder(0, kGenericFolderName); |
| ASSERT_TRUE(folder != NULL); |
| for (int i = 0; i < 10; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| Remove(0, folder, 0); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371836. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_DelLastBMUnderBMFoldNonEmptyFoldAfterwards) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| const BookmarkNode* folder = AddFolder(0, kGenericFolderName); |
| ASSERT_TRUE(folder != NULL); |
| for (int i = 0; i < 10; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| Remove(0, folder, folder->child_count() - 1); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371856. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_DelMiddleBMUnderBMFoldNonEmptyFoldAfterwards) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| const BookmarkNode* folder = AddFolder(0, kGenericFolderName); |
| ASSERT_TRUE(folder != NULL); |
| for (int i = 0; i < 10; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| Remove(0, folder, 4); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371857. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_DelBMsUnderBMFoldEmptyFolderAfterwards) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| const BookmarkNode* folder = AddFolder(0, kGenericFolderName); |
| ASSERT_TRUE(folder != NULL); |
| for (int i = 0; i < 10; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| int child_count = folder->child_count(); |
| for (int i = 0; i < child_count; ++i) { |
| Remove(0, folder, 0); |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371858. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_DelEmptyBMFoldEmptyAccountAfterwards) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| ASSERT_TRUE(AddFolder(0, kGenericFolderName) != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| Remove(0, GetBookmarkBarNode(0), 0); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371869. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_DelEmptyBMFoldNonEmptyAccountAfterwards) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| ASSERT_TRUE(AddFolder(0, kGenericFolderName) != NULL); |
| for (int i = 1; i < 15; ++i) { |
| if (base::RandDouble() > 0.6) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, i, title, url) != NULL); |
| } else { |
| std::string title = IndexedFolderName(i); |
| ASSERT_TRUE(AddFolder(0, i, title) != NULL); |
| } |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| Remove(0, GetBookmarkBarNode(0), 0); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371879. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_DelBMFoldWithBMsNonEmptyAccountAfterwards) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| ASSERT_TRUE(AddURL(0, kGenericURLTitle, GURL(kGenericURL)) != NULL); |
| const BookmarkNode* folder = AddFolder(0, 1, kGenericFolderName); |
| ASSERT_TRUE(folder != NULL); |
| for (int i = 2; i < 10; ++i) { |
| if (base::RandDouble() > 0.6) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, i, title, url) != NULL); |
| } else { |
| std::string title = IndexedFolderName(i); |
| ASSERT_TRUE(AddFolder(0, i, title) != NULL); |
| } |
| } |
| for (int i = 0; i < 15; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| Remove(0, GetBookmarkBarNode(0), 1); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371880. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_DelBMFoldWithBMsAndBMFoldsNonEmptyACAfterwards) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| ASSERT_TRUE(AddURL(0, kGenericURLTitle, GURL(kGenericURL)) != NULL); |
| const BookmarkNode* folder = AddFolder(0, 1, kGenericFolderName); |
| ASSERT_TRUE(folder != NULL); |
| for (int i = 2; i < 10; ++i) { |
| if (base::RandDouble() > 0.6) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, i, title, url) != NULL); |
| } else { |
| std::string title = IndexedFolderName(i); |
| ASSERT_TRUE(AddFolder(0, i, title) != NULL); |
| } |
| } |
| for (int i = 0; i < 10; ++i) { |
| if (base::RandDouble() > 0.6) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); |
| } else { |
| std::string title = IndexedSubfolderName(i); |
| const BookmarkNode* subfolder = |
| AddFolder(0, folder, i, title); |
| ASSERT_TRUE(subfolder != NULL); |
| if (base::RandDouble() > 0.3) { |
| for (int j = 0; j < 10; ++j) { |
| if (base::RandDouble() > 0.6) { |
| std::string title = IndexedURLTitle(j); |
| GURL url = GURL(IndexedURL(j)); |
| ASSERT_TRUE(AddURL( |
| 0, subfolder, j, title, url) != NULL); |
| } else { |
| std::string title = IndexedSubsubfolderName(j); |
| ASSERT_TRUE(AddFolder( |
| 0, subfolder, j, title) != NULL); |
| } |
| } |
| } |
| } |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| Remove(0, GetBookmarkBarNode(0), 1); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371882. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_DelBMFoldWithParentAndChildrenBMsAndBMFolds) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| const BookmarkNode* folder = AddFolder(0, kGenericFolderName); |
| ASSERT_TRUE(folder != NULL); |
| for (int i = 1; i < 11; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, i, title, url) != NULL); |
| } |
| const BookmarkNode* subfolder = |
| AddFolder(0, folder, 0, kGenericSubfolderName); |
| ASSERT_TRUE(subfolder != NULL); |
| for (int i = 0; i < 30; ++i) { |
| if (base::RandDouble() > 0.2) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, subfolder, i, title, url) != NULL); |
| } else { |
| std::string title = IndexedSubsubfolderName(i); |
| ASSERT_TRUE(AddFolder(0, subfolder, i, title) != NULL); |
| } |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| Remove(0, folder, 0); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371931. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_ReverseTheOrderOfTwoBMs) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| GURL url0 = GURL(IndexedURL(0)); |
| GURL url1 = GURL(IndexedURL(1)); |
| std::string title0 = IndexedURLTitle(0); |
| std::string title1 = IndexedURLTitle(1); |
| const BookmarkNode* bookmark0 = AddURL(0, 0, title0, url0); |
| const BookmarkNode* bookmark1 = AddURL(0, 1, title1, url1); |
| ASSERT_TRUE(bookmark0 != NULL); |
| ASSERT_TRUE(bookmark1 != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| Move(0, bookmark0, GetBookmarkBarNode(0), 2); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371933. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_ReverseTheOrderOf10BMs) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| for (int i = 0; i < 10; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, i, title, url) != NULL); |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| ReverseChildOrder(0, GetBookmarkBarNode(0)); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371954. |
| // flaky on Windows: http://crbug.com/412169 |
| #if defined(OS_WIN) || defined(OS_MACOSX) |
| #define MAYBE_SC_MovingBMsFromBMBarToBMFolder DISABLED_SC_MovingBMsFromBMBarToBMFolder |
| #else |
| #define MAYBE_SC_MovingBMsFromBMBarToBMFolder SC_MovingBMsFromBMBarToBMFolder |
| #endif |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| MAYBE_SC_MovingBMsFromBMBarToBMFolder) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| ASSERT_TRUE(AddURL(0, kGenericURLTitle, GURL(kGenericURL)) != NULL); |
| const BookmarkNode* folder = AddFolder(0, 1, kGenericFolderName); |
| ASSERT_TRUE(folder != NULL); |
| for (int i = 2; i < 10; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, i, title, url) != NULL); |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| int num_bookmarks_to_move = |
| GetBookmarkBarNode(0)->child_count() - 2; |
| for (int i = 0; i < num_bookmarks_to_move; ++i) { |
| Move( |
| 0, GetBookmarkBarNode(0)->GetChild(2), folder, i); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| } |
| |
| // Test Scribe ID - 371957. |
| // flaky on Windows and Mac: http://crbug.com/412169 |
| #if defined(OS_WIN) || defined(OS_MACOSX) |
| #define MAYBE_SC_MovingBMsFromBMFoldToBMBar DISABLED_SC_MovingBMsFromBMFoldToBMBar |
| #else |
| #define MAYBE_SC_MovingBMsFromBMFoldToBMBar SC_MovingBMsFromBMFoldToBMBar |
| #endif |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| MAYBE_SC_MovingBMsFromBMFoldToBMBar) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| ASSERT_TRUE(AddURL(0, kGenericURLTitle, GURL(kGenericURL)) != NULL); |
| const BookmarkNode* folder = AddFolder(0, 1, kGenericFolderName); |
| ASSERT_TRUE(folder != NULL); |
| for (int i = 0; i < 10; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| int num_bookmarks_to_move = folder->child_count() - 2; |
| for (int i = 0; i < num_bookmarks_to_move; ++i) { |
| Move(0, folder->GetChild(0), GetBookmarkBarNode(0), i); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| } |
| |
| // Test Scribe ID - 371961. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_MovingBMsFromParentBMFoldToChildBMFold) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| const BookmarkNode* folder = AddFolder(0, kGenericFolderName); |
| ASSERT_TRUE(folder != NULL); |
| for (int i = 0; i < 3; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); |
| } |
| const BookmarkNode* subfolder = |
| AddFolder(0, folder, 3, kGenericSubfolderName); |
| ASSERT_TRUE(subfolder != NULL); |
| for (int i = 0; i < 10; ++i) { |
| std::string title = IndexedURLTitle(i + 3); |
| GURL url = GURL(IndexedURL(i + 3)); |
| ASSERT_TRUE(AddURL(0, subfolder, i, title, url) != NULL); |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| for (int i = 0; i < 3; ++i) { |
| GURL url = GURL(IndexedURL(i)); |
| Move(0, GetUniqueNodeByURL(0, url), subfolder, i + 10); |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371964. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_MovingBMsFromChildBMFoldToParentBMFold) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| const BookmarkNode* folder = AddFolder(0, kGenericFolderName); |
| ASSERT_TRUE(folder != NULL); |
| for (int i = 0; i < 3; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); |
| } |
| const BookmarkNode* subfolder = |
| AddFolder(0, folder, 3, kGenericSubfolderName); |
| ASSERT_TRUE(subfolder != NULL); |
| for (int i = 0; i < 5; ++i) { |
| std::string title = IndexedURLTitle(i + 3); |
| GURL url = GURL(IndexedURL(i + 3)); |
| ASSERT_TRUE(AddURL(0, subfolder, i, title, url) != NULL); |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| for (int i = 0; i < 3; ++i) { |
| GURL url = GURL(IndexedURL(i + 3)); |
| Move(0, GetUniqueNodeByURL(0, url), folder, i + 4); |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371967. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_HoistBMs10LevelUp) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| const BookmarkNode* folder = GetBookmarkBarNode(0); |
| const BookmarkNode* folder_L0 = NULL; |
| const BookmarkNode* folder_L10 = NULL; |
| for (int level = 0; level < 15; ++level) { |
| int num_bookmarks = base::RandInt(0, 9); |
| for (int i = 0; i < num_bookmarks; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); |
| } |
| std::string title = IndexedFolderName(level); |
| folder = AddFolder(0, folder, folder->child_count(), title); |
| ASSERT_TRUE(folder != NULL); |
| if (level == 0) folder_L0 = folder; |
| if (level == 10) folder_L10 = folder; |
| } |
| for (int i = 0; i < 3; ++i) { |
| std::string title = IndexedURLTitle(i + 10); |
| GURL url = GURL(IndexedURL(i + 10)); |
| ASSERT_TRUE(AddURL(0, folder_L10, i, title, url) != NULL); |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| GURL url10 = GURL(IndexedURL(10)); |
| Move(0, GetUniqueNodeByURL( |
| 0, url10), folder_L0, folder_L0->child_count()); |
| GURL url11 = GURL(IndexedURL(11)); |
| Move(0, GetUniqueNodeByURL(0, url11), folder_L0, 0); |
| GURL url12 = GURL(IndexedURL(12)); |
| Move(0, GetUniqueNodeByURL(0, url12), folder_L0, 1); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371968. |
| // Flaky. http://crbug.com/107744. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_SinkBMs10LevelDown) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| const BookmarkNode* folder = GetBookmarkBarNode(0); |
| const BookmarkNode* folder_L0 = NULL; |
| const BookmarkNode* folder_L10 = NULL; |
| for (int level = 0; level < 15; ++level) { |
| int num_bookmarks = base::RandInt(0, 9); |
| for (int i = 0; i < num_bookmarks; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); |
| } |
| std::string title = IndexedFolderName(level); |
| folder = AddFolder(0, folder, folder->child_count(), title); |
| ASSERT_TRUE(folder != NULL); |
| if (level == 0) folder_L0 = folder; |
| if (level == 10) folder_L10 = folder; |
| } |
| for (int i = 0; i < 3; ++i) { |
| std::string title = IndexedURLTitle(i + 10); |
| GURL url = GURL(IndexedURL(i + 10)); |
| ASSERT_TRUE(AddURL(0, folder_L0, 0, title, url) != NULL); |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| GURL url10 = GURL(IndexedURL(10)); |
| Move(0, GetUniqueNodeByURL(0, url10), folder_L10, folder_L10->child_count()); |
| GURL url11 = GURL(IndexedURL(11)); |
| Move(0, GetUniqueNodeByURL(0, url11), folder_L10, 0); |
| GURL url12 = GURL(IndexedURL(12)); |
| Move(0, GetUniqueNodeByURL(0, url12), folder_L10, 1); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371980. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_SinkEmptyBMFold5LevelsDown) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| const BookmarkNode* folder = GetBookmarkBarNode(0); |
| const BookmarkNode* folder_L5 = NULL; |
| for (int level = 0; level < 15; ++level) { |
| int num_bookmarks = base::RandInt(0, 9); |
| for (int i = 0; i < num_bookmarks; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); |
| } |
| std::string title = IndexedFolderName(level); |
| folder = AddFolder( |
| 0, folder, folder->child_count(), title); |
| ASSERT_TRUE(folder != NULL); |
| if (level == 5) folder_L5 = folder; |
| } |
| folder = AddFolder( |
| 0, GetBookmarkBarNode(0)->child_count(), kGenericFolderName); |
| ASSERT_TRUE(folder != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| Move(0, folder, folder_L5, folder_L5->child_count()); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 371997. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_SinkNonEmptyBMFold5LevelsDown) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| const BookmarkNode* folder = GetBookmarkBarNode(0); |
| const BookmarkNode* folder_L5 = NULL; |
| for (int level = 0; level < 6; ++level) { |
| int num_bookmarks = base::RandInt(0, 9); |
| for (int i = 0; i < num_bookmarks; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); |
| } |
| std::string title = IndexedFolderName(level); |
| folder = AddFolder(0, folder, folder->child_count(), title); |
| ASSERT_TRUE(folder != NULL); |
| if (level == 5) folder_L5 = folder; |
| } |
| folder = AddFolder( |
| 0, GetBookmarkBarNode(0)->child_count(), kGenericFolderName); |
| ASSERT_TRUE(folder != NULL); |
| for (int i = 0; i < 10; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| Move(0, folder, folder_L5, folder_L5->child_count()); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 372006. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_HoistFolder5LevelsUp) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| const BookmarkNode* folder = GetBookmarkBarNode(0); |
| const BookmarkNode* folder_L5 = NULL; |
| for (int level = 0; level < 6; ++level) { |
| int num_bookmarks = base::RandInt(0, 9); |
| for (int i = 0; i < num_bookmarks; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); |
| } |
| std::string title = IndexedFolderName(level); |
| folder = AddFolder(0, folder, folder->child_count(), title); |
| ASSERT_TRUE(folder != NULL); |
| if (level == 5) folder_L5 = folder; |
| } |
| folder = AddFolder( |
| 0, folder_L5, folder_L5->child_count(), kGenericFolderName); |
| ASSERT_TRUE(folder != NULL); |
| for (int i = 0; i < 10; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| Move(0, folder, GetBookmarkBarNode(0), GetBookmarkBarNode(0)->child_count()); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 372026. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_ReverseTheOrderOfTwoBMFolders) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| for (int i = 0; i < 2; ++i) { |
| std::string title = IndexedFolderName(i); |
| const BookmarkNode* folder = AddFolder(0, i, title); |
| ASSERT_TRUE(folder != NULL); |
| for (int j = 0; j < 10; ++j) { |
| std::string title = IndexedURLTitle(j); |
| GURL url = GURL(IndexedURL(j)); |
| ASSERT_TRUE(AddURL(0, folder, j, title, url) != NULL); |
| } |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| ReverseChildOrder(0, GetBookmarkBarNode(0)); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 372028. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SC_ReverseTheOrderOfTenBMFolders) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| for (int i = 0; i < 10; ++i) { |
| std::string title = IndexedFolderName(i); |
| const BookmarkNode* folder = AddFolder(0, i, title); |
| ASSERT_TRUE(folder != NULL); |
| for (int j = 0; j < 10; ++j) { |
| std::string title = IndexedURLTitle(1000 * i + j); |
| GURL url = GURL(IndexedURL(j)); |
| ASSERT_TRUE(AddURL(0, folder, j, title, url) != NULL); |
| } |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| ReverseChildOrder(0, GetBookmarkBarNode(0)); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 373379. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| MC_BiDirectionalPushAddingBM) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| DisableVerifier(); |
| for (int i = 0; i < 2; ++i) { |
| std::string title0 = IndexedURLTitle(2*i); |
| GURL url0 = GURL(IndexedURL(2*i)); |
| ASSERT_TRUE(AddURL(0, title0, url0) != NULL); |
| std::string title1 = IndexedURLTitle(2*i+1); |
| GURL url1 = GURL(IndexedURL(2*i+1)); |
| ASSERT_TRUE(AddURL(1, title1, url1) != NULL); |
| } |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| ASSERT_FALSE(ContainsDuplicateBookmarks(0)); |
| } |
| |
| // Test Scribe ID - 373503. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| MC_BiDirectionalPush_AddingSameBMs) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| // Note: When a racy commit is done with identical bookmarks, it is possible |
| // for duplicates to exist after sync completes. See http://crbug.com/19769. |
| DisableVerifier(); |
| for (int i = 0; i < 2; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, title, url) != NULL); |
| ASSERT_TRUE(AddURL(1, title, url) != NULL); |
| } |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| } |
| |
| // Test Scribe ID - 373506. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| MC_BootStrapEmptyStateEverywhere) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| // Test Scribe ID - 373505. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| MC_Merge_CaseInsensitivity_InNames) { |
| ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; |
| DisableVerifier(); |
| |
| const BookmarkNode* folder0 = AddFolder(0, "Folder"); |
| ASSERT_TRUE(folder0 != NULL); |
| ASSERT_TRUE(AddURL(0, folder0, 0, "Bookmark 0", GURL(kGenericURL)) != NULL); |
| ASSERT_TRUE(AddURL(0, folder0, 1, "Bookmark 1", GURL(kGenericURL)) != NULL); |
| ASSERT_TRUE(AddURL(0, folder0, 2, "Bookmark 2", GURL(kGenericURL)) != NULL); |
| |
| const BookmarkNode* folder1 = AddFolder(1, "fOlDeR"); |
| ASSERT_TRUE(folder1 != NULL); |
| ASSERT_TRUE(AddURL(1, folder1, 0, "bOoKmArK 0", GURL(kGenericURL)) != NULL); |
| ASSERT_TRUE(AddURL(1, folder1, 1, "BooKMarK 1", GURL(kGenericURL)) != NULL); |
| ASSERT_TRUE(AddURL(1, folder1, 2, "bOOKMARK 2", GURL(kGenericURL)) != NULL); |
| |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| ASSERT_FALSE(ContainsDuplicateBookmarks(0)); |
| } |
| |
| // Test Scribe ID - 373508. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| MC_SimpleMergeOfDifferentBMModels) { |
| ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; |
| DisableVerifier(); |
| |
| for (int i = 0; i < 3; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, i, title, url) != NULL); |
| ASSERT_TRUE(AddURL(1, i, title, url) != NULL); |
| } |
| |
| for (int i = 3; i < 10; ++i) { |
| std::string title0 = IndexedURLTitle(i); |
| GURL url0 = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, i, title0, url0) != NULL); |
| std::string title1 = IndexedURLTitle(i+7); |
| GURL url1 = GURL(IndexedURL(i+7)); |
| ASSERT_TRUE(AddURL(1, i, title1, url1) != NULL); |
| } |
| |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| ASSERT_FALSE(ContainsDuplicateBookmarks(0)); |
| } |
| |
| // Test Scribe ID - 386586. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| MC_MergeSimpleBMHierarchyUnderBMBar) { |
| ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; |
| DisableVerifier(); |
| |
| for (int i = 0; i < 3; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, i, title, url) != NULL); |
| ASSERT_TRUE(AddURL(1, i, title, url) != NULL); |
| } |
| |
| for (int i = 3; i < 10; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(1, i, title, url) != NULL); |
| } |
| |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| ASSERT_FALSE(ContainsDuplicateBookmarks(0)); |
| } |
| |
| // Test Scribe ID - 386589. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| MC_MergeSimpleBMHierarchyEqualSetsUnderBMBar) { |
| ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; |
| DisableVerifier(); |
| |
| for (int i = 0; i < 3; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, i, title, url) != NULL); |
| ASSERT_TRUE(AddURL(1, i, title, url) != NULL); |
| } |
| |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| ASSERT_FALSE(ContainsDuplicateBookmarks(0)); |
| } |
| |
| // Test Scribe ID - 373504 - Merge bookmark folders with different bookmarks. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| MC_MergeBMFoldersWithDifferentBMs) { |
| ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; |
| DisableVerifier(); |
| |
| const BookmarkNode* folder0 = AddFolder(0, kGenericFolderName); |
| ASSERT_TRUE(folder0 != NULL); |
| const BookmarkNode* folder1 = AddFolder(1, kGenericFolderName); |
| ASSERT_TRUE(folder1 != NULL); |
| for (int i = 0; i < 2; ++i) { |
| std::string title0 = IndexedURLTitle(2*i); |
| GURL url0 = GURL(IndexedURL(2*i)); |
| ASSERT_TRUE(AddURL(0, folder0, i, title0, url0) != NULL); |
| std::string title1 = IndexedURLTitle(2*i+1); |
| GURL url1 = GURL(IndexedURL(2*i+1)); |
| ASSERT_TRUE(AddURL(1, folder1, i, title1, url1) != NULL); |
| } |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| ASSERT_FALSE(ContainsDuplicateBookmarks(0)); |
| } |
| |
| // Test Scribe ID - 373509 - Merge moderately complex bookmark models. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| MC_MergeDifferentBMModelsModeratelyComplex) { |
| ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; |
| DisableVerifier(); |
| |
| for (int i = 0; i < 25; ++i) { |
| std::string title0 = IndexedURLTitle(i); |
| GURL url0 = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, i, title0, url0) != NULL); |
| std::string title1 = IndexedURLTitle(i+50); |
| GURL url1 = GURL(IndexedURL(i+50)); |
| ASSERT_TRUE(AddURL(1, i, title1, url1) != NULL); |
| } |
| for (int i = 25; i < 30; ++i) { |
| std::string title0 = IndexedFolderName(i); |
| const BookmarkNode* folder0 = AddFolder(0, i, title0); |
| ASSERT_TRUE(folder0 != NULL); |
| std::string title1 = IndexedFolderName(i+50); |
| const BookmarkNode* folder1 = AddFolder(1, i, title1); |
| ASSERT_TRUE(folder1 != NULL); |
| for (int j = 0; j < 5; ++j) { |
| std::string title0 = IndexedURLTitle(i+5*j); |
| GURL url0 = GURL(IndexedURL(i+5*j)); |
| ASSERT_TRUE(AddURL(0, folder0, j, title0, url0) != NULL); |
| std::string title1 = IndexedURLTitle(i+5*j+50); |
| GURL url1 = GURL(IndexedURL(i+5*j+50)); |
| ASSERT_TRUE(AddURL(1, folder1, j, title1, url1) != NULL); |
| } |
| } |
| for (int i = 100; i < 125; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, title, url) != NULL); |
| ASSERT_TRUE(AddURL(1, title, url) != NULL); |
| } |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| ASSERT_FALSE(ContainsDuplicateBookmarks(0)); |
| } |
| |
| // TCM ID - 3675271 - Merge simple bookmark subset under bookmark folder. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| MC_MergeSimpleBMHierarchySubsetUnderBMFolder) { |
| ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; |
| DisableVerifier(); |
| |
| for (int i = 0; i < 2; ++i) { |
| const BookmarkNode* folder = AddFolder(i, kGenericFolderName); |
| ASSERT_TRUE(folder != NULL); |
| for (int j = 0; j < 4; ++j) { |
| if (base::RandDouble() < 0.5) { |
| std::string title = IndexedURLTitle(j); |
| GURL url = GURL(IndexedURL(j)); |
| ASSERT_TRUE(AddURL(i, folder, j, title, url) != NULL); |
| } else { |
| std::string title = IndexedFolderName(j); |
| ASSERT_TRUE(AddFolder(i, folder, j, title) != NULL); |
| } |
| } |
| } |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| ASSERT_FALSE(ContainsDuplicateBookmarks(0)); |
| } |
| |
| // TCM ID - 3727284 - Merge subsets of bookmark under bookmark bar. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| MC_MergeSimpleBMHierarchySubsetUnderBookmarkBar) { |
| ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; |
| DisableVerifier(); |
| |
| for (int i = 0; i < 4; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, i, title, url) != NULL); |
| } |
| |
| for (int j = 0; j < 2; ++j) { |
| std::string title = IndexedURLTitle(j); |
| GURL url = GURL(IndexedURL(j)); |
| ASSERT_TRUE(AddURL(1, j, title, url) != NULL); |
| } |
| |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| ASSERT_FALSE(ContainsDuplicateBookmarks(0)); |
| ASSERT_FALSE(ContainsDuplicateBookmarks(1)); |
| } |
| |
| // TCM ID - 3659294 - Merge simple bookmark hierarchy under bookmark folder. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| MC_Merge_SimpleBMHierarchy_Under_BMFolder) { |
| ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; |
| DisableVerifier(); |
| |
| const BookmarkNode* folder0 = AddFolder(0, 0, kGenericFolderName); |
| ASSERT_TRUE(folder0 != NULL); |
| ASSERT_TRUE(AddURL( |
| 0, folder0, 0, IndexedURLTitle(1), GURL(IndexedURL(1))) != NULL); |
| ASSERT_TRUE(AddFolder(0, folder0, 1, IndexedSubfolderName(2)) != NULL); |
| ASSERT_TRUE(AddURL( |
| 0, folder0, 2, IndexedURLTitle(3), GURL(IndexedURL(3))) != NULL); |
| ASSERT_TRUE(AddFolder(0, folder0, 3, IndexedSubfolderName(4)) != NULL); |
| |
| const BookmarkNode* folder1 = AddFolder(1, 0, kGenericFolderName); |
| ASSERT_TRUE(folder1 != NULL); |
| ASSERT_TRUE(AddFolder(1, folder1, 0, IndexedSubfolderName(0)) != NULL); |
| ASSERT_TRUE(AddFolder(1, folder1, 1, IndexedSubfolderName(2)) != NULL); |
| ASSERT_TRUE(AddURL( |
| 1, folder1, 2, IndexedURLTitle(3), GURL(IndexedURL(3))) != NULL); |
| ASSERT_TRUE(AddFolder(1, folder1, 3, IndexedSubfolderName(5)) != NULL); |
| ASSERT_TRUE(AddURL( |
| 1, folder1, 4, IndexedURLTitle(1), GURL(IndexedURL(1))) != NULL); |
| |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| ASSERT_FALSE(ContainsDuplicateBookmarks(0)); |
| } |
| |
| // TCM ID - 3711273 - Merge disjoint sets of bookmark hierarchy under bookmark |
| // folder. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| MC_Merge_SimpleBMHierarchy_DisjointSets_Under_BMFolder) { |
| ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; |
| DisableVerifier(); |
| |
| const BookmarkNode* folder0 = |
| AddFolder(0, 0, kGenericFolderName); |
| ASSERT_TRUE(folder0 != NULL); |
| ASSERT_TRUE(AddURL( |
| 0, folder0, 0, IndexedURLTitle(1), GURL(IndexedURL(1))) != NULL); |
| ASSERT_TRUE(AddFolder(0, folder0, 1, IndexedSubfolderName(2)) != NULL); |
| ASSERT_TRUE(AddURL( |
| 0, folder0, 2, IndexedURLTitle(3), GURL(IndexedURL(3))) != NULL); |
| ASSERT_TRUE(AddFolder(0, folder0, 3, IndexedSubfolderName(4)) != NULL); |
| |
| const BookmarkNode* folder1 = AddFolder(1, 0, kGenericFolderName); |
| ASSERT_TRUE(folder1 != NULL); |
| ASSERT_TRUE(AddFolder(1, folder1, 0, IndexedSubfolderName(5)) != NULL); |
| ASSERT_TRUE(AddFolder(1, folder1, 1, IndexedSubfolderName(6)) != NULL); |
| ASSERT_TRUE(AddURL( |
| 1, folder1, 2, IndexedURLTitle(7), GURL(IndexedURL(7))) != NULL); |
| ASSERT_TRUE(AddURL( |
| 1, folder1, 3, IndexedURLTitle(8), GURL(IndexedURL(8))) != NULL); |
| |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| ASSERT_FALSE(ContainsDuplicateBookmarks(0)); |
| } |
| |
| // TCM ID - 3639296 - Merge disjoint sets of bookmark hierarchy under bookmark |
| // bar. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| MC_Merge_SimpleBMHierarchy_DisjointSets_Under_BookmarkBar) { |
| ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; |
| DisableVerifier(); |
| |
| for (int i = 0; i < 3; ++i) { |
| std::string title = IndexedURLTitle(i+1); |
| GURL url = GURL(IndexedURL(i+1)); |
| ASSERT_TRUE(AddURL(0, i, title, url) != NULL); |
| } |
| |
| for (int j = 0; j < 3; ++j) { |
| std::string title = IndexedURLTitle(j+4); |
| GURL url = GURL(IndexedURL(j+4)); |
| ASSERT_TRUE(AddURL(0, j, title, url) != NULL); |
| } |
| |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| ASSERT_FALSE(ContainsDuplicateBookmarks(0)); |
| } |
| |
| // TCM ID - 3616282 - Merge sets of duplicate bookmarks under bookmark bar. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| MC_Merge_SimpleBMHierarchy_DuplicateBMs_Under_BMBar) { |
| ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; |
| DisableVerifier(); |
| |
| // Let's add duplicate set of bookmark {1,2,2,3,3,3,4,4,4,4} to client0. |
| int node_index = 0; |
| for (int i = 1; i < 5 ; ++i) { |
| for (int j = 0; j < i; ++j) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, node_index, title, url) != NULL); |
| ++node_index; |
| } |
| } |
| // Let's add a set of bookmarks {1,2,3,4} to client1. |
| for (int i = 0; i < 4; ++i) { |
| std::string title = IndexedURLTitle(i+1); |
| GURL url = GURL(IndexedURL(i+1)); |
| ASSERT_TRUE(AddURL(1, i, title, url) != NULL); |
| } |
| |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| |
| for (int i = 1; i < 5 ; ++i) { |
| ASSERT_TRUE(CountBookmarksWithTitlesMatching(1, IndexedURLTitle(i)) == i); |
| } |
| } |
| |
| // TCM ID - 6593872. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, DisableBookmarks) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| ASSERT_TRUE(GetClient(1)->DisableSyncForDatatype(syncer::BOOKMARKS)); |
| ASSERT_TRUE(AddFolder(1, kGenericFolderName) != NULL); |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_FALSE(AllModelsMatch()); |
| |
| ASSERT_TRUE(GetClient(1)->EnableSyncForDatatype(syncer::BOOKMARKS)); |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| } |
| |
| // TCM ID - 7343544. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, DisableSync) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| ASSERT_TRUE(GetClient(1)->DisableSyncForAllDatatypes()); |
| ASSERT_TRUE(AddFolder(0, IndexedFolderName(0)) != NULL); |
| ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService((0)))); |
| ASSERT_FALSE(AllModelsMatch()); |
| |
| ASSERT_TRUE(AddFolder(1, IndexedFolderName(1)) != NULL); |
| ASSERT_FALSE(AllModelsMatch()); |
| |
| ASSERT_TRUE(GetClient(1)->EnableSyncForAllDatatypes()); |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| } |
| |
| // TCM ID - 3662298 - Test adding duplicate folder - Both with different BMs |
| // underneath. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, MC_DuplicateFolders) { |
| ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; |
| DisableVerifier(); |
| |
| const BookmarkNode* folder0 = AddFolder(0, kGenericFolderName); |
| ASSERT_TRUE(folder0 != NULL); |
| const BookmarkNode* folder1 = AddFolder(1, kGenericFolderName); |
| ASSERT_TRUE(folder1 != NULL); |
| for (int i = 0; i < 5; ++i) { |
| std::string title0 = IndexedURLTitle(i); |
| GURL url0 = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, folder0, i, title0, url0) != NULL); |
| std::string title1 = IndexedURLTitle(i+5); |
| GURL url1 = GURL(IndexedURL(i+5)); |
| ASSERT_TRUE(AddURL(1, folder1, i, title1, url1) != NULL); |
| } |
| |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| ASSERT_FALSE(ContainsDuplicateBookmarks(0)); |
| } |
| |
| // This test fails when run with FakeServer and FakeServerInvalidationService. |
| IN_PROC_BROWSER_TEST_F(LegacyTwoClientBookmarksSyncTest, MC_DeleteBookmark) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(GetClient(1)->DisableSyncForDatatype(syncer::BOOKMARKS)); |
| |
| const GURL bar_url("http://example.com/bar"); |
| const GURL other_url("http://example.com/other"); |
| |
| ASSERT_TRUE(AddURL(0, GetBookmarkBarNode(0), 0, "bar", bar_url) != NULL); |
| ASSERT_TRUE(AddURL(0, GetOtherNode(0), 0, "other", other_url) != NULL); |
| |
| ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService((0)))); |
| |
| ASSERT_TRUE(HasNodeWithURL(0, bar_url)); |
| ASSERT_TRUE(HasNodeWithURL(0, other_url)); |
| ASSERT_FALSE(HasNodeWithURL(1, bar_url)); |
| ASSERT_FALSE(HasNodeWithURL(1, other_url)); |
| |
| Remove(0, GetBookmarkBarNode(0), 0); |
| ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService((0)))); |
| |
| ASSERT_FALSE(HasNodeWithURL(0, bar_url)); |
| ASSERT_TRUE(HasNodeWithURL(0, other_url)); |
| |
| ASSERT_TRUE(GetClient(1)->EnableSyncForDatatype(syncer::BOOKMARKS)); |
| ASSERT_TRUE(AwaitQuiescence()); |
| |
| ASSERT_FALSE(HasNodeWithURL(0, bar_url)); |
| ASSERT_TRUE(HasNodeWithURL(0, other_url)); |
| ASSERT_FALSE(HasNodeWithURL(1, bar_url)); |
| ASSERT_TRUE(HasNodeWithURL(1, other_url)); |
| } |
| |
| // TCM ID - 3719307 - Test a scenario of updating the name of the same bookmark |
| // from two clients at the same time. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| MC_BookmarkNameChangeConflict) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| |
| const BookmarkNode* folder0 = AddFolder(0, kGenericFolderName); |
| ASSERT_TRUE(folder0 != NULL); |
| for (int i = 0; i < 3; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, folder0, i, title, url) != NULL); |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| ASSERT_FALSE(ContainsDuplicateBookmarks(0)); |
| |
| DisableVerifier(); |
| GURL url(IndexedURL(0)); |
| SetTitle(0, GetUniqueNodeByURL(0, url), "Title++"); |
| SetTitle(1, GetUniqueNodeByURL(1, url), "Title--"); |
| |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| ASSERT_FALSE(ContainsDuplicateBookmarks(0)); |
| } |
| |
| // TCM ID - 3672299 - Test a scenario of updating the URL of the same bookmark |
| // from two clients at the same time. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| MC_BookmarkURLChangeConflict) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| |
| const BookmarkNode* folder0 = AddFolder(0, kGenericFolderName); |
| ASSERT_TRUE(folder0 != NULL); |
| for (int i = 0; i < 3; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, folder0, i, title, url) != NULL); |
| } |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| ASSERT_FALSE(ContainsDuplicateBookmarks(0)); |
| |
| DisableVerifier(); |
| GURL url(IndexedURL(0)); |
| ASSERT_TRUE(SetURL( |
| 0, GetUniqueNodeByURL(0, url), GURL("http://www.google.com/00"))); |
| ASSERT_TRUE(SetURL( |
| 1, GetUniqueNodeByURL(1, url), GURL("http://www.google.com/11"))); |
| |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| ASSERT_FALSE(ContainsDuplicateBookmarks(0)); |
| } |
| |
| // TCM ID - 3699290 - Test a scenario of updating the BM Folder name from two |
| // clients at the same time. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| MC_FolderNameChangeConflict) { |
| ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; |
| DisableVerifier(); |
| |
| const BookmarkNode* folderA[2]; |
| const BookmarkNode* folderB[2]; |
| const BookmarkNode* folderC[2]; |
| |
| // Create empty folder A on both clients. |
| folderA[0] = AddFolder(0, IndexedFolderName(0)); |
| ASSERT_TRUE(folderA[0] != NULL); |
| folderA[1] = AddFolder(1, IndexedFolderName(0)); |
| ASSERT_TRUE(folderA[1] != NULL); |
| |
| // Create folder B with bookmarks on both clients. |
| folderB[0] = AddFolder(0, IndexedFolderName(1)); |
| ASSERT_TRUE(folderB[0] != NULL); |
| folderB[1] = AddFolder(1, IndexedFolderName(1)); |
| ASSERT_TRUE(folderB[1] != NULL); |
| for (int i = 0; i < 3; ++i) { |
| std::string title = IndexedURLTitle(i); |
| GURL url = GURL(IndexedURL(i)); |
| ASSERT_TRUE(AddURL(0, folderB[0], i, title, url) != NULL); |
| } |
| |
| // Create folder C with bookmarks and subfolders on both clients. |
| folderC[0] = AddFolder(0, IndexedFolderName(2)); |
| ASSERT_TRUE(folderC[0] != NULL); |
| folderC[1] = AddFolder(1, IndexedFolderName(2)); |
| ASSERT_TRUE(folderC[1] != NULL); |
| for (int i = 0; i < 3; ++i) { |
| std::string folder_name = IndexedSubfolderName(i); |
| const BookmarkNode* subfolder = AddFolder(0, folderC[0], i, folder_name); |
| ASSERT_TRUE(subfolder != NULL); |
| for (int j = 0; j < 3; ++j) { |
| std::string title = IndexedURLTitle(j); |
| GURL url = GURL(IndexedURL(j)); |
| ASSERT_TRUE(AddURL(0, subfolder, j, title, url) != NULL); |
| } |
| } |
| |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| ASSERT_FALSE(ContainsDuplicateBookmarks(0)); |
| |
| // Simultaneously rename folder A on both clients. |
| SetTitle(0, folderA[0], "Folder A++"); |
| SetTitle(1, folderA[1], "Folder A--"); |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| ASSERT_FALSE(ContainsDuplicateBookmarks(0)); |
| |
| // Simultaneously rename folder B on both clients. |
| SetTitle(0, folderB[0], "Folder B++"); |
| SetTitle(1, folderB[1], "Folder B--"); |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| ASSERT_FALSE(ContainsDuplicateBookmarks(0)); |
| |
| // Simultaneously rename folder C on both clients. |
| SetTitle(0, folderC[0], "Folder C++"); |
| SetTitle(1, folderC[1], "Folder C--"); |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| ASSERT_FALSE(ContainsDuplicateBookmarks(0)); |
| } |
| |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SingleClientEnabledEncryption) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| ASSERT_TRUE(EnableEncryption(0)); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(IsEncryptionComplete(0)); |
| ASSERT_TRUE(IsEncryptionComplete(1)); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SingleClientEnabledEncryptionAndChanged) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| ASSERT_TRUE(EnableEncryption(0)); |
| ASSERT_TRUE(AddURL(0, IndexedURLTitle(0), GURL(IndexedURL(0))) != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(IsEncryptionComplete(0)); |
| ASSERT_TRUE(IsEncryptionComplete(1)); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| BothClientsEnabledEncryption) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| ASSERT_TRUE(EnableEncryption(0)); |
| ASSERT_TRUE(EnableEncryption(1)); |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(IsEncryptionComplete(0)); |
| ASSERT_TRUE(IsEncryptionComplete(1)); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SingleClientEnabledEncryptionBothChanged) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| ASSERT_TRUE(EnableEncryption(0)); |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(IsEncryptionComplete(0)); |
| ASSERT_TRUE(IsEncryptionComplete(1)); |
| ASSERT_TRUE(AddURL(0, IndexedURLTitle(0), GURL(IndexedURL(0))) != NULL); |
| ASSERT_TRUE(AddURL(0, IndexedURLTitle(1), GURL(IndexedURL(1))) != NULL); |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| ASSERT_TRUE(IsEncryptionComplete(0)); |
| ASSERT_TRUE(IsEncryptionComplete(1)); |
| } |
| |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| SingleClientEnabledEncryptionAndChangedMultipleTimes) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| ASSERT_TRUE(AddURL(0, IndexedURLTitle(0), GURL(IndexedURL(0))) != NULL); |
| ASSERT_TRUE(EnableEncryption(0)); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(IsEncryptionComplete(0)); |
| ASSERT_TRUE(IsEncryptionComplete(1)); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| ASSERT_TRUE(AddURL(0, IndexedURLTitle(1), GURL(IndexedURL(1))) != NULL); |
| ASSERT_TRUE(AddFolder(0, IndexedFolderName(0)) != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| } |
| |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| FirstClientEnablesEncryptionWithPassSecondChanges) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| // Add initial bookmarks. |
| ASSERT_TRUE(AddURL(0, 0, IndexedURLTitle(0), GURL(IndexedURL(0))) != NULL); |
| ASSERT_TRUE(AddURL(0, 1, IndexedURLTitle(1), GURL(IndexedURL(1))) != NULL); |
| ASSERT_TRUE(AddURL(0, 2, IndexedURLTitle(2), GURL(IndexedURL(2))) != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| // Set a passphrase and enable encryption on Client 0. Client 1 will not |
| // understand the bookmark updates. |
| SetEncryptionPassphrase(0, kValidPassphrase, ProfileSyncService::EXPLICIT); |
| ASSERT_TRUE(AwaitPassphraseAccepted(GetSyncService((0)))); |
| ASSERT_TRUE(EnableEncryption(0)); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(IsEncryptionComplete(0)); |
| ASSERT_TRUE(IsEncryptionComplete(1)); |
| ASSERT_TRUE(GetSyncService((1))->IsPassphraseRequired()); |
| |
| // Client 1 adds bookmarks between the first two and between the second two. |
| ASSERT_TRUE(AddURL(0, 1, IndexedURLTitle(3), GURL(IndexedURL(3))) != NULL); |
| ASSERT_TRUE(AddURL(0, 3, IndexedURLTitle(4), GURL(IndexedURL(4))) != NULL); |
| EXPECT_FALSE(AllModelsMatchVerifier()); |
| EXPECT_FALSE(AllModelsMatch()); |
| |
| // Set the passphrase. Everything should resolve. |
| ASSERT_TRUE(AwaitPassphraseRequired(GetSyncService((1)))); |
| ASSERT_TRUE(SetDecryptionPassphrase(1, kValidPassphrase)); |
| ASSERT_TRUE(AwaitPassphraseAccepted(GetSyncService((1)))); |
| ASSERT_TRUE(AwaitQuiescence()); |
| EXPECT_TRUE(AllModelsMatch()); |
| ASSERT_EQ(0, |
| GetClient(1)->GetLastSessionSnapshot().num_encryption_conflicts()); |
| |
| // Ensure everything is syncing normally by appending a final bookmark. |
| ASSERT_TRUE(AddURL(1, 5, IndexedURLTitle(5), GURL(IndexedURL(5))) != NULL); |
| ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0))); |
| EXPECT_TRUE(AllModelsMatch()); |
| ASSERT_EQ(0, |
| GetClient(1)->GetLastSessionSnapshot().num_encryption_conflicts()); |
| } |
| |
| // Deliberately racy rearranging of bookmarks to test that our conflict resolver |
| // code results in a consistent view across machines (no matter what the final |
| // order is). |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, RacyPositionChanges) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| // Add initial bookmarks. |
| size_t num_bookmarks = 5; |
| for (size_t i = 0; i < num_bookmarks; ++i) { |
| ASSERT_TRUE(AddURL(0, i, IndexedURLTitle(i), GURL(IndexedURL(i))) != NULL); |
| } |
| |
| // Once we make diverging changes the verifer is helpless. |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| DisableVerifier(); |
| |
| // Make changes on client 0. |
| for (size_t i = 0; i < num_bookmarks; ++i) { |
| const BookmarkNode* node = GetUniqueNodeByURL(0, GURL(IndexedURL(i))); |
| int rand_pos = base::RandInt(0, num_bookmarks-1); |
| DVLOG(1) << "Moving client 0's bookmark " << i << " to position " |
| << rand_pos; |
| Move(0, node, node->parent(), rand_pos); |
| } |
| |
| // Make changes on client 1. |
| for (size_t i = 0; i < num_bookmarks; ++i) { |
| const BookmarkNode* node = GetUniqueNodeByURL(1, GURL(IndexedURL(i))); |
| int rand_pos = base::RandInt(0, num_bookmarks-1); |
| DVLOG(1) << "Moving client 1's bookmark " << i << " to position " |
| << rand_pos; |
| Move(1, node, node->parent(), rand_pos); |
| } |
| |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| |
| // Now make changes to client 1 first. |
| for (size_t i = 0; i < num_bookmarks; ++i) { |
| const BookmarkNode* node = GetUniqueNodeByURL(1, GURL(IndexedURL(i))); |
| int rand_pos = base::RandInt(0, num_bookmarks-1); |
| DVLOG(1) << "Moving client 1's bookmark " << i << " to position " |
| << rand_pos; |
| Move(1, node, node->parent(), rand_pos); |
| } |
| |
| // Make changes on client 0. |
| for (size_t i = 0; i < num_bookmarks; ++i) { |
| const BookmarkNode* node = GetUniqueNodeByURL(0, GURL(IndexedURL(i))); |
| int rand_pos = base::RandInt(0, num_bookmarks-1); |
| DVLOG(1) << "Moving client 0's bookmark " << i << " to position " |
| << rand_pos; |
| Move(0, node, node->parent(), rand_pos); |
| } |
| |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| } |
| |
| // Trigger the server side creation of Synced Bookmarks. Ensure both clients |
| // remain syncing afterwards. Add bookmarks to the synced bookmarks folder |
| // and ensure both clients receive the boomkmark. |
| IN_PROC_BROWSER_TEST_F(LegacyTwoClientBookmarksSyncTest, |
| CreateSyncedBookmarks) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| TriggerCreateSyncedBookmarks(); |
| |
| // Add a bookmark on Client 0 and ensure it syncs over. This will also trigger |
| // both clients downloading the new Synced Bookmarks folder. |
| ASSERT_TRUE(AddURL(0, "Google", GURL("http://www.google.com"))); |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| |
| // Now add a bookmark within the Synced Bookmarks folder and ensure it syncs |
| // over. |
| const BookmarkNode* synced_bookmarks = GetSyncedBookmarksNode(0); |
| ASSERT_TRUE(synced_bookmarks); |
| ASSERT_TRUE(AddURL(0, synced_bookmarks, 0, "Google2", |
| GURL("http://www.google2.com"))); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatch()); |
| } |
| |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| BookmarkAllNodesRemovedEvent) { |
| |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| // Starting state: |
| // other_node |
| // -> folder0 |
| // -> tier1_a |
| // -> http://mail.google.com |
| // -> http://www.google.com |
| // -> http://news.google.com |
| // -> http://yahoo.com |
| // -> http://www.cnn.com |
| // bookmark_bar |
| // -> empty_folder |
| // -> folder1 |
| // -> http://yahoo.com |
| // -> http://gmail.com |
| |
| const BookmarkNode* folder0 = AddFolder(0, GetOtherNode(0), 0, "folder0"); |
| const BookmarkNode* tier1_a = AddFolder(0, folder0, 0, "tier1_a"); |
| ASSERT_TRUE(AddURL(0, folder0, 1, "News", GURL("http://news.google.com"))); |
| ASSERT_TRUE(AddURL(0, folder0, 2, "Yahoo", GURL("http://www.yahoo.com"))); |
| ASSERT_TRUE(AddURL(0, tier1_a, 0, "Gmai", GURL("http://mail.google.com"))); |
| ASSERT_TRUE(AddURL(0, tier1_a, 1, "Google", GURL("http://www.google.com"))); |
| ASSERT_TRUE( |
| AddURL(0, GetOtherNode(0), 1, "CNN", GURL("http://www.cnn.com"))); |
| |
| ASSERT_TRUE(AddFolder(0, GetBookmarkBarNode(0), 0, "empty_folder")); |
| const BookmarkNode* folder1 = |
| AddFolder(0, GetBookmarkBarNode(0), 1, "folder1"); |
| ASSERT_TRUE(AddURL(0, folder1, 0, "Yahoo", GURL("http://www.yahoo.com"))); |
| ASSERT_TRUE( |
| AddURL(0, GetBookmarkBarNode(0), 2, "Gmai", GURL("http://gmail.com"))); |
| |
| ASSERT_TRUE(AwaitQuiescence()); |
| ASSERT_TRUE(AllModelsMatch()); |
| |
| // Remove all |
| RemoveAll(0); |
| |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| // Verify other node has no children now. |
| EXPECT_EQ(0, GetOtherNode(0)->child_count()); |
| EXPECT_EQ(0, GetBookmarkBarNode(0)->child_count()); |
| ASSERT_TRUE(AllModelsMatch()); |
| } |
| |
| // Verifies that managed bookmarks (installed by policy) don't get synced. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, ManagedBookmarks) { |
| // Make sure the first Profile has an overridden policy provider. |
| EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_)) |
| .WillRepeatedly(testing::Return(true)); |
| policy::ProfilePolicyConnectorFactory::GetInstance()->PushProviderForTesting( |
| &policy_provider_); |
| |
| // Set up sync. |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| // Verify that there are no managed bookmarks at startup in either profile. |
| // The Managed Bookmarks folder should not be visible at this stage. |
| const BookmarkNode* managed_node0 = GetManagedNode(0); |
| ASSERT_TRUE(managed_node0->empty()); |
| ASSERT_FALSE(managed_node0->IsVisible()); |
| const BookmarkNode* managed_node1 = GetManagedNode(1); |
| ASSERT_TRUE(managed_node1->empty()); |
| ASSERT_FALSE(managed_node1->IsVisible()); |
| |
| // Verify that the bookmark bar node is empty on both profiles too. |
| const BookmarkNode* bar_node0 = GetBookmarkBarNode(0); |
| ASSERT_TRUE(bar_node0->empty()); |
| ASSERT_TRUE(bar_node0->IsVisible()); |
| const BookmarkNode* bar_node1 = GetBookmarkBarNode(1); |
| ASSERT_TRUE(bar_node1->empty()); |
| ASSERT_TRUE(bar_node1->IsVisible()); |
| |
| // Verify that adding a bookmark is observed by the second Profile. |
| GURL google_url("http://www.google.com"); |
| ASSERT_TRUE(AddURL(0, "Google", google_url) != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| ASSERT_EQ(1, bar_node0->child_count()); |
| ASSERT_EQ(1, bar_node1->child_count()); |
| |
| // Set the ManagedBookmarks policy for the first Profile, |
| // which will add one new managed bookmark. |
| base::DictionaryValue* bookmark = new base::DictionaryValue(); |
| bookmark->SetString("name", "Managed bookmark"); |
| bookmark->SetString("url", "youtube.com"); |
| std::unique_ptr<base::ListValue> list(new base::ListValue()); |
| list->Append(bookmark); |
| policy::PolicyMap policy; |
| policy.Set(policy::key::kManagedBookmarks, policy::POLICY_LEVEL_MANDATORY, |
| policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD, |
| std::move(list), nullptr); |
| policy_provider_.UpdateChromePolicy(policy); |
| base::RunLoop().RunUntilIdle(); |
| |
| // Now add another user bookmark and wait for it to sync. |
| ASSERT_TRUE(AddURL(0, "Google 2", google_url) != NULL); |
| ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); |
| ASSERT_TRUE(AllModelsMatchVerifier()); |
| |
| EXPECT_FALSE(GetSyncService(0)->HasUnrecoverableError()); |
| EXPECT_FALSE(GetSyncService(1)->HasUnrecoverableError()); |
| |
| // Verify that the managed bookmark exists in the local model of the first |
| // Profile, and has a child node. |
| ASSERT_EQ(1, managed_node0->child_count()); |
| ASSERT_TRUE(managed_node0->IsVisible()); |
| EXPECT_EQ(GURL("http://youtube.com/"), managed_node0->GetChild(0)->url()); |
| |
| // Verify that the second Profile didn't get this node. |
| ASSERT_EQ(0, managed_node1->child_count()); |
| } |
| |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, E2E_ONLY(SanitySetup)) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| } |
| |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| E2E_ONLY(OneClientAddsBookmark)) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| // All profiles should sync same bookmarks. |
| ASSERT_TRUE(AwaitAllModelsMatch()) << |
| "Initial bookmark models did not match for all profiles"; |
| // For clean profiles, the bookmarks count should be zero. We are not |
| // enforcing this, we only check that the final count is equal to initial |
| // count plus new bookmarks count. |
| int init_bookmarks_count = CountAllBookmarks(0); |
| |
| // Add one new bookmark to the first profile. |
| ASSERT_TRUE( |
| AddURL(0, "Google URL 0", GURL("http://www.google.com/0")) != NULL); |
| |
| // Blocks and waits for bookmarks models in all profiles to match. |
| ASSERT_TRUE(AwaitAllModelsMatch()); |
| // Check that total number of bookmarks is as expected. |
| for (int i = 0; i < num_clients(); ++i) { |
| ASSERT_EQ(CountAllBookmarks(i), init_bookmarks_count + 1) << |
| "Total bookmark count is wrong."; |
| } |
| } |
| |
| // TODO(shadi): crbug.com/569213: Enable this as E2E test. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| OneClientAddsFolderAndBookmark) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| // All profiles should sync same bookmarks. |
| ASSERT_TRUE(AwaitAllModelsMatch()) |
| << "Initial bookmark models did not match for all profiles"; |
| |
| // Add one new bookmark to the first profile. |
| const BookmarkNode* new_folder = AddFolder(0, 0, "Folder 0"); |
| ASSERT_TRUE(new_folder != NULL); |
| ASSERT_TRUE(AddURL(0, new_folder, 0, "Google URL 0", |
| GURL("http://www.google.com/0")) != NULL); |
| |
| // Blocks and waits for bookmarks models in all profiles to match. |
| ASSERT_TRUE(AwaitAllModelsMatch()); |
| // Check that both profiles have the folder and the bookmark created above. |
| for (int i = 0; i < num_clients(); ++i) { |
| ASSERT_EQ(1, CountFoldersWithTitlesMatching(i, "Folder 0")) |
| << "Failed to match the folder"; |
| ASSERT_EQ( |
| 1, CountBookmarksWithUrlsMatching(i, GURL("http://www.google.com/0"))) |
| << "Failed to match the bookmark"; |
| } |
| } |
| |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| E2E_ONLY(TwoClientsAddBookmarks)) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| // ALl profiles should sync same bookmarks. |
| ASSERT_TRUE(AwaitAllModelsMatch()) << |
| "Initial bookmark models did not match for all profiles"; |
| // For clean profiles, the bookmarks count should be zero. We are not |
| // enforcing this, we only check that the final count is equal to initial |
| // count plus new bookmarks count. |
| int init_bookmarks_count = CountAllBookmarks(0); |
| |
| // Add one new bookmark per profile. |
| for (int i = 0; i < num_clients(); ++i) { |
| ASSERT_TRUE(AddURL(i, base::StringPrintf("Google URL %d", i), |
| GURL(base::StringPrintf("http://www.google.com/%d", i))) != NULL); |
| } |
| |
| // Blocks and waits for bookmarks models in all profiles to match. |
| ASSERT_TRUE(AwaitAllModelsMatch()); |
| |
| // Check that total number of bookmarks is as expected. |
| for (int i = 0; i < num_clients(); ++i) { |
| ASSERT_EQ(CountAllBookmarks(i), init_bookmarks_count + num_clients()) << |
| "Total bookmark count is wrong."; |
| } |
| } |
| |
| // Verify that a bookmark added on a client with bookmark syncing disabled gets |
| // synced to a second client once bookmark syncing is re-enabled. |
| IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, |
| E2E_ENABLED(AddBookmarkWhileDisabled)) { |
| ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
| ASSERT_TRUE(AwaitAllModelsMatch()) |
| << "Initial bookmark models did not match for all profiles"; |
| const int initial_count = CountAllBookmarks(0); |
| |
| // Verify that we can sync. Add a bookmark on the first client and verify it's |
| // synced to the second client. |
| const std::string url_title = "a happy little url"; |
| const GURL url("https://example.com"); |
| ASSERT_TRUE(AddURL(0, GetBookmarkBarNode(0), 0, url_title, url) != NULL); |
| ASSERT_TRUE(AwaitAllModelsMatch()); |
| ASSERT_EQ(initial_count + 1, CountAllBookmarks(0)); |
| ASSERT_EQ(initial_count + 1, CountAllBookmarks(1)); |
| |
| // Disable bookmark syncing on the first client, add another bookmark, |
| // re-enable bookmark syncing and see that the second bookmark reaches the |
| // second client. |
| ASSERT_TRUE(GetClient(0)->DisableSyncForDatatype(syncer::BOOKMARKS)); |
| const std::string url_title_2 = "another happy little url"; |
| const GURL url_2("https://example.com/second"); |
| ASSERT_TRUE(AddURL(0, GetBookmarkBarNode(0), 0, url_title_2, url_2) != NULL); |
| ASSERT_TRUE(GetClient(0)->EnableSyncForDatatype(syncer::BOOKMARKS)); |
| ASSERT_TRUE(AwaitAllModelsMatch()); |
| ASSERT_EQ(initial_count + 2, CountAllBookmarks(0)); |
| ASSERT_EQ(initial_count + 2, CountAllBookmarks(1)); |
| } |