two_client_bookmarks_sync_test.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
1d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Use of this source code is governed by a BSD-style license that can be 3d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// found in the LICENSE file. 4d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 5d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#include "base/rand_util.h" 6d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#include "base/run_loop.h" 7d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#include "base/values.h" 8d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#include "chrome/browser/policy/profile_policy_connector_factory.h" 9d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#include "chrome/browser/profiles/profile.h" 10d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#include "chrome/browser/sync/test/integration/bookmarks_helper.h" 11d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#include "chrome/browser/sync/test/integration/passwords_helper.h" 12d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#include "chrome/browser/sync/test/integration/profile_sync_service_harness.h" 13d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#include "chrome/browser/sync/test/integration/sync_integration_test_util.h" 14d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#include "chrome/browser/sync/test/integration/sync_test.h" 15d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#include "components/policy/core/common/mock_configuration_policy_provider.h" 16d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#include "components/policy/core/common/policy_map.h" 17d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#include "policy/policy_constants.h" 18d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#include "sync/internal_api/public/sessions/sync_session_snapshot.h" 19d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#include "testing/gmock/include/gmock/gmock.h" 20d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#include "ui/base/layout.h" 21d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 22d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::AddFolder; 23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::AddURL; 24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::AllModelsMatch; 25d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::AllModelsMatchVerifier; 26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::ContainsDuplicateBookmarks; 27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::CountBookmarksWithTitlesMatching; 28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::CreateFavicon; 29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::GetBookmarkBarNode; 30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::GetManagedNode; 31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::GetOtherNode; 32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::GetSyncedBookmarksNode; 33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::GetUniqueNodeByURL; 34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::HasNodeWithURL; 35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::IndexedFolderName; 36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::IndexedSubfolderName; 37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::IndexedSubsubfolderName; 38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::IndexedURL; 39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::IndexedURLTitle; 40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::Move; 41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::Remove; 42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::RemoveAll; 43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::ReverseChildOrder; 44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::SetFavicon; 45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::SetTitle; 46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::SetURL; 47d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing bookmarks_helper::SortChildren; 48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing passwords_helper::SetDecryptionPassphrase; 49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing passwords_helper::SetEncryptionPassphrase; 50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing sync_integration_test_util::AwaitCommitActivityCompletion; 51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing sync_integration_test_util::AwaitPassphraseAccepted; 52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenusing sync_integration_test_util::AwaitPassphraseRequired; 53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chennamespace { 55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenconst char kGenericURL[] = "http://www.host.ext:1234/path/filename"; 57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenconst char kGenericURLTitle[] = "URL Title"; 58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenconst char kGenericFolderName[] = "Folder Name"; 59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenconst char kGenericSubfolderName[] = "Subfolder Name"; 60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenconst char kValidPassphrase[] = "passphrase!"; 61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} // namespace 63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenclass TwoClientBookmarksSyncTest : public SyncTest { 65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public: 66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen TwoClientBookmarksSyncTest() : SyncTest(TWO_CLIENT) {} 67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen virtual ~TwoClientBookmarksSyncTest() {} 68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen virtual void TearDownInProcessBrowserTestFixture() OVERRIDE { 70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SyncTest::TearDownInProcessBrowserTestFixture(); 71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen policy_provider_.Shutdown(); 72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen protected: 75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // Needs to be deleted after all Profiles are deleted. 76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen policy::MockConfigurationPolicyProvider policy_provider_; 77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 78d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private: 79d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen DISALLOW_COPY_AND_ASSIGN(TwoClientBookmarksSyncTest); 80d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}; 81d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 82d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenclass LegacyTwoClientBookmarksSyncTest : public SyncTest { 83d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public: 84d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen LegacyTwoClientBookmarksSyncTest() : SyncTest(TWO_CLIENT_LEGACY) {} 85d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen virtual ~LegacyTwoClientBookmarksSyncTest() {} 86d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 87d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private: 88d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen DISALLOW_COPY_AND_ASSIGN(LegacyTwoClientBookmarksSyncTest); 89d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}; 90d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 91d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, Sanity) { 92d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 93d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 94d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 95d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL google_url("http://www.google.com"); 96d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL(0, "Google", google_url) != NULL); 97d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 98d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL(1, "Yahoo", GURL("http://www.yahoo.com")) != NULL); 99d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0))); 100d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 101d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 102d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const BookmarkNode* new_folder = AddFolder(0, 2, "New Folder"); 103d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen Move(0, GetUniqueNodeByURL(0, google_url), new_folder, 0); 104d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SetTitle(0, GetBookmarkBarNode(0)->GetChild(0), "Yahoo!!"); 105d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL(0, GetBookmarkBarNode(0), 1, "CNN", 106d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL("http://www.cnn.com")) != NULL); 107d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 108d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 109d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 110d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL(1, "Facebook", GURL("http://www.facebook.com")) != NULL); 111d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0))); 112d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 113d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 114d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SortChildren(1, GetBookmarkBarNode(1)); 115d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0))); 116d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 117d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 118d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen DisableVerifier(); 119d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SetTitle(0, GetUniqueNodeByURL(0, google_url), "Google++"); 120d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SetTitle(1, GetUniqueNodeByURL(1, google_url), "Google--"); 121d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AwaitQuiescence()); 122d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatch()); 123d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 124d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 125d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SimultaneousURLChanges) { 126d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 127d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 128d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 129d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL initial_url("http://www.google.com"); 130d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL second_url("http://www.google.com/abc"); 131d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL third_url("http://www.google.com/def"); 132d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title = "Google"; 133d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 134d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL(0, title, initial_url) != NULL); 135d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 136d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 137d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen DisableVerifier(); 138d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetURL( 139d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 0, GetUniqueNodeByURL(0, initial_url), second_url) != NULL); 140d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetURL( 141d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 1, GetUniqueNodeByURL(1, initial_url), third_url) != NULL); 142d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AwaitQuiescence()); 143d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatch()); 144d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 145d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SetTitle(0, GetBookmarkBarNode(0)->GetChild(0), "Google1"); 146d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 147d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatch()); 148d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 149d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 150d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test Scribe ID - 370558. 151d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_AddFirstFolder) { 152d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 153d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 154d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 155d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddFolder(0, kGenericFolderName) != NULL); 156d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 157d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 158d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 159d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 160d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test Scribe ID - 370559. 161d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 162d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SC_AddFirstBMWithoutFavicon) { 163d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 164d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 165d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 166d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL(0, kGenericURLTitle, GURL(kGenericURL)) != NULL); 167d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 168d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 169d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 170d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 171d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test Scribe ID - 370489. 172d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_AddFirstBMWithFavicon) { 173d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 174d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 175d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 176d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const GURL page_url(kGenericURL); 177d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const GURL icon_url("http://www.google.com/favicon.ico"); 178d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 179d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const BookmarkNode* bookmark = AddURL(0, kGenericURLTitle, page_url); 180d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 181d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(bookmark != NULL); 182d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 183d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SetFavicon(0, bookmark, icon_url, CreateFavicon(SK_ColorWHITE), 184d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen bookmarks_helper::FROM_UI); 185d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 186d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 187d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 188d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 189d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test that the history service logic for not losing the hidpi versions of 190d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// favicons as a result of sync does not result in dropping sync updates. 191d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// In particular, the synced 16x16 favicon bitmap should overwrite 16x16 192d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// favicon bitmaps on all clients. (Though non-16x16 favicon bitmaps 193d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// are unchanged). 194d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_SetFaviconHiDPI) { 195d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // Set the supported scale factors to include 2x such that CreateFavicon() 196d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // creates a favicon with hidpi representations and that methods in the 197d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // FaviconService request hidpi favicons. 198d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::vector<ui::ScaleFactor> supported_scale_factors; 199d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen supported_scale_factors.push_back(ui::SCALE_FACTOR_100P); 200d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen supported_scale_factors.push_back(ui::SCALE_FACTOR_200P); 201d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ui::SetSupportedScaleFactors(supported_scale_factors); 202d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 203d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const GURL page_url(kGenericURL); 204d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const GURL icon_url1("http://www.google.com/favicon1.ico"); 205d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const GURL icon_url2("http://www.google.com/favicon2.ico"); 206d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 207d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 208d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 209d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 210d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const BookmarkNode* bookmark0 = AddURL(0, kGenericURLTitle, page_url); 211d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(bookmark0 != NULL); 212d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 213d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SetFavicon(0, bookmark0, icon_url1, CreateFavicon(SK_ColorWHITE), 214d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen bookmarks_helper::FROM_UI); 215d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 216d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 217d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 218d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const BookmarkNode* bookmark1 = GetUniqueNodeByURL(1, page_url); 219d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SetFavicon(1, bookmark1, icon_url1, CreateFavicon(SK_ColorBLUE), 220d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen bookmarks_helper::FROM_UI); 221d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0))); 222d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 223d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 224d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SetFavicon(0, bookmark0, icon_url2, CreateFavicon(SK_ColorGREEN), 225d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen bookmarks_helper::FROM_UI); 226d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 227d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 228d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 229d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 230d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test Scribe ID - 370560. 231d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_AddNonHTTPBMs) { 232d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 233d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 234d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 235d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL( 236d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 0, "FTP UR", GURL("ftp://user:password@host:1234/path")) != NULL); 237d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL(0, "File UR", GURL("file://host/path")) != NULL); 238d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 239d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 240d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 241d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 242d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test Scribe ID - 370561. 243d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 244d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SC_AddFirstBMUnderFolder) { 245d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 246d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 247d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 248d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const BookmarkNode* folder = AddFolder(0, kGenericFolderName); 249d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(folder != NULL); 250d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL( 251d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 0, folder, 0, kGenericURLTitle, GURL(kGenericURL)) != NULL); 252d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 253d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 254d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 255d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 256d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test Scribe ID - 370562. 257d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 258d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SC_AddSeveralBMsUnderBMBarAndOtherBM) { 259d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 260d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 261d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 262d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for (int i = 0; i < 20; ++i) { 263d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title = IndexedURLTitle(i); 264d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL url = GURL(IndexedURL(i)); 265d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL(0, i, title, url) != NULL); 266d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL( 267d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 0, GetOtherNode(0), i, title, url) != NULL); 268d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 269d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 270d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 271d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 272d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 273d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test Scribe ID - 370563. 274d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 275d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SC_AddSeveralBMsAndFolders) { 276d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 277d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 278d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 279d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for (int i = 0; i < 15; ++i) { 280d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (base::RandDouble() > 0.6) { 281d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title = IndexedURLTitle(i); 282d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL url = GURL(IndexedURL(i)); 283d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL(0, i, title, url) != NULL); 284d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } else { 285d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title = IndexedFolderName(i); 286d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const BookmarkNode* folder = AddFolder(0, i, title); 287d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(folder != NULL); 288d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (base::RandDouble() > 0.4) { 289d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for (int i = 0; i < 20; ++i) { 290d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title = IndexedURLTitle(i); 291d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL url = GURL(IndexedURL(i)); 292d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE( 293d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen AddURL(0, folder, i, title, url) != NULL); 294d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 295d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 296d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 297d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 298d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for (int i = 0; i < 10; i++) { 299d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title = IndexedURLTitle(i); 300d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL url = GURL(IndexedURL(i)); 301d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL(0, GetOtherNode(0), i, title, url) != NULL); 302d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 303d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 304d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 305d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 306d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 307d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test Scribe ID - 370641. 308d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 309d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SC_DuplicateBMWithDifferentURLSameName) { 310d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 311d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 312d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 313d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL url0 = GURL(IndexedURL(0)); 314d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL url1 = GURL(IndexedURL(1)); 315d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL(0, kGenericURLTitle, url0) != NULL); 316d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL(0, kGenericURLTitle, url1) != NULL); 317d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 318d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 319d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 320d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 321d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test Scribe ID - 370639 - Add bookmarks with different name and same URL. 322d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 323d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SC_DuplicateBookmarksWithSameURL) { 324d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 325d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 326d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 327d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title0 = IndexedURLTitle(0); 328d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title1 = IndexedURLTitle(1); 329d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL(0, title0, GURL(kGenericURL)) != NULL); 330d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL(0, title1, GURL(kGenericURL)) != NULL); 331d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 332d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 333d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 334d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 335d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test Scribe ID - 371817. 336d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_RenameBMName) { 337d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 338d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 339d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 340d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title = IndexedURLTitle(1); 341d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const BookmarkNode* bookmark = AddURL(0, title, GURL(kGenericURL)); 342d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(bookmark != NULL); 343d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 344d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 345d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 346d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string new_title = IndexedURLTitle(2); 347d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SetTitle(0, bookmark, new_title); 348d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 349d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 350d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 351d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 352d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test Scribe ID - 371822. 353d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_RenameBMURL) { 354d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 355d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 356d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 357d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL url = GURL(IndexedURL(1)); 358d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const BookmarkNode* bookmark = AddURL(0, kGenericURLTitle, url); 359d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(bookmark != NULL); 360d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 361d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 362d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 363d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL new_url = GURL(IndexedURL(2)); 364d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetURL(0, bookmark, new_url) != NULL); 365d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 366d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 367d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 368d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 369d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 370d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test Scribe ID - 371818 - Renaming the same bookmark name twice. 371d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 372d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SC_TwiceRenamingBookmarkName) { 373d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 374d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 375d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 376d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title = IndexedURLTitle(1); 377d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const BookmarkNode* bookmark = AddURL(0, title, GURL(kGenericURL)); 378d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(bookmark != NULL); 379d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 380d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 381d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 382d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string new_title = IndexedURLTitle(2); 383d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SetTitle(0, bookmark, new_title); 384d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 385d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 386d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 387d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SetTitle(0, bookmark, title); 388d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 389d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 390d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 391d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 392d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test Scribe ID - 371823 - Renaming the same bookmark URL twice. 393d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 394d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SC_TwiceRenamingBookmarkURL) { 395d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 396d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 397d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 398d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL url = GURL(IndexedURL(1)); 399d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const BookmarkNode* bookmark = AddURL(0, kGenericURLTitle, url); 400d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(bookmark != NULL); 401d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 402d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 403d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 404d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL new_url = GURL(IndexedURL(2)); 405d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetURL(0, bookmark, new_url) != NULL); 406d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 407d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 408d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 409d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetURL(0, bookmark, url) != NULL); 410d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 411d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 412d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 413d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 414d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test Scribe ID - 371824. 415d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_RenameBMFolder) { 416d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 417d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 418d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 419d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title = IndexedFolderName(1); 420d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const BookmarkNode* folder = AddFolder(0, title); 421d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL( 422d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 0, folder, 0, kGenericURLTitle, GURL(kGenericURL)) != NULL); 423d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 424d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 425d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 426d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string new_title = IndexedFolderName(2); 427d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SetTitle(0, folder, new_title); 428d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 429d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 430d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 431d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 432d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test Scribe ID - 371825. 433d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_RenameEmptyBMFolder) { 434d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 435d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 436d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 437d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title = IndexedFolderName(1); 438d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const BookmarkNode* folder = AddFolder(0, title); 439d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 440d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 441d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 442d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string new_title = IndexedFolderName(2); 443d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SetTitle(0, folder, new_title); 444d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 445d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 446d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 447d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 448d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test Scribe ID - 371826. 449d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 450d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SC_RenameBMFolderWithLongHierarchy) { 451d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 452d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 453d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 454d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title = IndexedFolderName(1); 455d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const BookmarkNode* folder = AddFolder(0, title); 456d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(folder != NULL); 457d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for (int i = 0; i < 120; ++i) { 458d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (base::RandDouble() > 0.15) { 459d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title = IndexedURLTitle(i); 460d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL url = GURL(IndexedURL(i)); 461d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); 462d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } else { 463d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title = IndexedSubfolderName(i); 464d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddFolder(0, folder, i, title) != NULL); 465d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 466d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 467d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 468d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 469d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 470d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string new_title = IndexedFolderName(2); 471d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SetTitle(0, folder, new_title); 472d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 473d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 474d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 475d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 476d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test Scribe ID - 371827. 477d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 478d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SC_RenameBMFolderThatHasParentAndChildren) { 479d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 480d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 481d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 482d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const BookmarkNode* folder = AddFolder(0, kGenericFolderName); 483d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(folder != NULL); 484d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for (int i = 1; i < 15; ++i) { 485d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title = IndexedURLTitle(i); 486d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL url = GURL(IndexedURL(i)); 487d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL(0, i, title, url) != NULL); 488d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 489d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title = IndexedSubfolderName(1); 490d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const BookmarkNode* subfolder = AddFolder(0, folder, 0, title); 491d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for (int i = 0; i < 120; ++i) { 492d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (base::RandDouble() > 0.15) { 493d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title = IndexedURLTitle(i); 494d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL url = GURL(IndexedURL(i)); 495d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL(0, subfolder, i, title, url) != NULL); 496d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } else { 497d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title = IndexedSubsubfolderName(i); 498d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddFolder(0, subfolder, i, title) != NULL); 499d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 500d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 501d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 502d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 503d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 504d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string new_title = IndexedSubfolderName(2); 505d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SetTitle(0, subfolder, new_title); 506d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 507d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 508d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 509d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 510d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test Scribe ID - 371828. 511d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_RenameBMNameAndURL) { 512d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 513d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 514d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 515d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL url = GURL(IndexedURL(1)); 516d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title = IndexedURLTitle(1); 517d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const BookmarkNode* bookmark = AddURL(0, title, url); 518d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(bookmark != NULL); 519d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 520d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 521d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 522d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL new_url = GURL(IndexedURL(2)); 523d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string new_title = IndexedURLTitle(2); 524d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen bookmark = SetURL(0, bookmark, new_url); 525d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(bookmark != NULL); 526d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SetTitle(0, bookmark, new_title); 527d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 528d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 529d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 530d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 531d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test Scribe ID - 371832. 532d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 533d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SC_DeleteBMEmptyAccountAfterwards) { 534d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 535d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 536d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 537d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL( 538d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 0, kGenericURLTitle, GURL(kGenericURL)) != NULL); 539d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 540d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 541d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 542d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen Remove(0, GetBookmarkBarNode(0), 0); 543d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 544d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 545d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 546d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 547d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test Scribe ID - 371833. 548d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 549d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SC_DelBMNonEmptyAccountAfterwards) { 550d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 551d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 552d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 553d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for (int i = 0; i < 20; ++i) { 554d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title = IndexedURLTitle(i); 555d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL url = GURL(IndexedURL(i)); 556d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL(0, i, title, url) != NULL); 557d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 558d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 559d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 560d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 561d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen Remove(0, GetBookmarkBarNode(0), 0); 562d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 563d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 564d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 565d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 566d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test Scribe ID - 371835. 567d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 568d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SC_DelFirstBMUnderBMFoldNonEmptyFoldAfterwards) { 569d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 570d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 571d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 572d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const BookmarkNode* folder = AddFolder(0, kGenericFolderName); 573d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(folder != NULL); 574d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for (int i = 0; i < 10; ++i) { 575d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title = IndexedURLTitle(i); 576d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL url = GURL(IndexedURL(i)); 577d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); 578d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 579d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 580d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 581d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 582d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen Remove(0, folder, 0); 583d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 584d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 585d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 586d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 587d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test Scribe ID - 371836. 588d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 589d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SC_DelLastBMUnderBMFoldNonEmptyFoldAfterwards) { 590d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 591d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 592d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 593d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const BookmarkNode* folder = AddFolder(0, kGenericFolderName); 594d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(folder != NULL); 595d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for (int i = 0; i < 10; ++i) { 596d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title = IndexedURLTitle(i); 597d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL url = GURL(IndexedURL(i)); 598d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); 599d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 600d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 601d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 602d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 603d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen Remove(0, folder, folder->child_count() - 1); 604d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 605d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 606d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 607d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 608d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Test Scribe ID - 371856. 609d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 610d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SC_DelMiddleBMUnderBMFoldNonEmptyFoldAfterwards) { 611d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 612d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 613d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 614d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const BookmarkNode* folder = AddFolder(0, kGenericFolderName); 615d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(folder != NULL); 616d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for (int i = 0; i < 10; ++i) { 617d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen std::string title = IndexedURLTitle(i); 618d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen GURL url = GURL(IndexedURL(i)); 619d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); 620d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 621d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 622d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 623d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 624d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen Remove(0, folder, 4); 625d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 626d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ASSERT_TRUE(AllModelsMatchVerifier()); 627d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 628 629// Test Scribe ID - 371857. 630IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 631 SC_DelBMsUnderBMFoldEmptyFolderAfterwards) { 632 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 633 ASSERT_TRUE(AllModelsMatchVerifier()); 634 635 const BookmarkNode* folder = AddFolder(0, kGenericFolderName); 636 ASSERT_TRUE(folder != NULL); 637 for (int i = 0; i < 10; ++i) { 638 std::string title = IndexedURLTitle(i); 639 GURL url = GURL(IndexedURL(i)); 640 ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); 641 } 642 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 643 ASSERT_TRUE(AllModelsMatchVerifier()); 644 645 int child_count = folder->child_count(); 646 for (int i = 0; i < child_count; ++i) { 647 Remove(0, folder, 0); 648 } 649 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 650 ASSERT_TRUE(AllModelsMatchVerifier()); 651} 652 653// Test Scribe ID - 371858. 654IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 655 SC_DelEmptyBMFoldEmptyAccountAfterwards) { 656 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 657 ASSERT_TRUE(AllModelsMatchVerifier()); 658 659 ASSERT_TRUE(AddFolder(0, kGenericFolderName) != NULL); 660 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 661 ASSERT_TRUE(AllModelsMatchVerifier()); 662 663 Remove(0, GetBookmarkBarNode(0), 0); 664 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 665 ASSERT_TRUE(AllModelsMatchVerifier()); 666} 667 668// Test Scribe ID - 371869. 669IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 670 SC_DelEmptyBMFoldNonEmptyAccountAfterwards) { 671 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 672 ASSERT_TRUE(AllModelsMatchVerifier()); 673 674 ASSERT_TRUE(AddFolder(0, kGenericFolderName) != NULL); 675 for (int i = 1; i < 15; ++i) { 676 if (base::RandDouble() > 0.6) { 677 std::string title = IndexedURLTitle(i); 678 GURL url = GURL(IndexedURL(i)); 679 ASSERT_TRUE(AddURL(0, i, title, url) != NULL); 680 } else { 681 std::string title = IndexedFolderName(i); 682 ASSERT_TRUE(AddFolder(0, i, title) != NULL); 683 } 684 } 685 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 686 ASSERT_TRUE(AllModelsMatchVerifier()); 687 688 Remove(0, GetBookmarkBarNode(0), 0); 689 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 690 ASSERT_TRUE(AllModelsMatchVerifier()); 691} 692 693// Test Scribe ID - 371879. 694IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 695 SC_DelBMFoldWithBMsNonEmptyAccountAfterwards) { 696 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 697 ASSERT_TRUE(AllModelsMatchVerifier()); 698 699 ASSERT_TRUE(AddURL(0, kGenericURLTitle, GURL(kGenericURL)) != NULL); 700 const BookmarkNode* folder = AddFolder(0, 1, kGenericFolderName); 701 ASSERT_TRUE(folder != NULL); 702 for (int i = 2; i < 10; ++i) { 703 if (base::RandDouble() > 0.6) { 704 std::string title = IndexedURLTitle(i); 705 GURL url = GURL(IndexedURL(i)); 706 ASSERT_TRUE(AddURL(0, i, title, url) != NULL); 707 } else { 708 std::string title = IndexedFolderName(i); 709 ASSERT_TRUE(AddFolder(0, i, title) != NULL); 710 } 711 } 712 for (int i = 0; i < 15; ++i) { 713 std::string title = IndexedURLTitle(i); 714 GURL url = GURL(IndexedURL(i)); 715 ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); 716 } 717 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 718 ASSERT_TRUE(AllModelsMatchVerifier()); 719 720 Remove(0, GetBookmarkBarNode(0), 1); 721 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 722 ASSERT_TRUE(AllModelsMatchVerifier()); 723} 724 725// Test Scribe ID - 371880. 726IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 727 SC_DelBMFoldWithBMsAndBMFoldsNonEmptyACAfterwards) { 728 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 729 ASSERT_TRUE(AllModelsMatchVerifier()); 730 731 ASSERT_TRUE(AddURL(0, kGenericURLTitle, GURL(kGenericURL)) != NULL); 732 const BookmarkNode* folder = AddFolder(0, 1, kGenericFolderName); 733 ASSERT_TRUE(folder != NULL); 734 for (int i = 2; i < 10; ++i) { 735 if (base::RandDouble() > 0.6) { 736 std::string title = IndexedURLTitle(i); 737 GURL url = GURL(IndexedURL(i)); 738 ASSERT_TRUE(AddURL(0, i, title, url) != NULL); 739 } else { 740 std::string title = IndexedFolderName(i); 741 ASSERT_TRUE(AddFolder(0, i, title) != NULL); 742 } 743 } 744 for (int i = 0; i < 10; ++i) { 745 if (base::RandDouble() > 0.6) { 746 std::string title = IndexedURLTitle(i); 747 GURL url = GURL(IndexedURL(i)); 748 ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); 749 } else { 750 std::string title = IndexedSubfolderName(i); 751 const BookmarkNode* subfolder = 752 AddFolder(0, folder, i, title); 753 ASSERT_TRUE(subfolder != NULL); 754 if (base::RandDouble() > 0.3) { 755 for (int j = 0; j < 10; ++j) { 756 if (base::RandDouble() > 0.6) { 757 std::string title = IndexedURLTitle(j); 758 GURL url = GURL(IndexedURL(j)); 759 ASSERT_TRUE(AddURL( 760 0, subfolder, j, title, url) != NULL); 761 } else { 762 std::string title = IndexedSubsubfolderName(j); 763 ASSERT_TRUE(AddFolder( 764 0, subfolder, j, title) != NULL); 765 } 766 } 767 } 768 } 769 } 770 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 771 ASSERT_TRUE(AllModelsMatchVerifier()); 772 773 Remove(0, GetBookmarkBarNode(0), 1); 774 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 775 ASSERT_TRUE(AllModelsMatchVerifier()); 776} 777 778// Test Scribe ID - 371882. 779IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 780 SC_DelBMFoldWithParentAndChildrenBMsAndBMFolds) { 781 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 782 ASSERT_TRUE(AllModelsMatchVerifier()); 783 784 const BookmarkNode* folder = AddFolder(0, kGenericFolderName); 785 ASSERT_TRUE(folder != NULL); 786 for (int i = 1; i < 11; ++i) { 787 std::string title = IndexedURLTitle(i); 788 GURL url = GURL(IndexedURL(i)); 789 ASSERT_TRUE(AddURL(0, i, title, url) != NULL); 790 } 791 const BookmarkNode* subfolder = 792 AddFolder(0, folder, 0, kGenericSubfolderName); 793 ASSERT_TRUE(subfolder != NULL); 794 for (int i = 0; i < 30; ++i) { 795 if (base::RandDouble() > 0.2) { 796 std::string title = IndexedURLTitle(i); 797 GURL url = GURL(IndexedURL(i)); 798 ASSERT_TRUE(AddURL(0, subfolder, i, title, url) != NULL); 799 } else { 800 std::string title = IndexedSubsubfolderName(i); 801 ASSERT_TRUE(AddFolder(0, subfolder, i, title) != NULL); 802 } 803 } 804 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 805 ASSERT_TRUE(AllModelsMatchVerifier()); 806 807 Remove(0, folder, 0); 808 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 809 ASSERT_TRUE(AllModelsMatchVerifier()); 810} 811 812// Test Scribe ID - 371931. 813IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 814 SC_ReverseTheOrderOfTwoBMs) { 815 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 816 ASSERT_TRUE(AllModelsMatchVerifier()); 817 818 GURL url0 = GURL(IndexedURL(0)); 819 GURL url1 = GURL(IndexedURL(1)); 820 std::string title0 = IndexedURLTitle(0); 821 std::string title1 = IndexedURLTitle(1); 822 const BookmarkNode* bookmark0 = AddURL(0, 0, title0, url0); 823 const BookmarkNode* bookmark1 = AddURL(0, 1, title1, url1); 824 ASSERT_TRUE(bookmark0 != NULL); 825 ASSERT_TRUE(bookmark1 != NULL); 826 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 827 ASSERT_TRUE(AllModelsMatchVerifier()); 828 829 Move(0, bookmark0, GetBookmarkBarNode(0), 2); 830 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 831 ASSERT_TRUE(AllModelsMatchVerifier()); 832} 833 834// Test Scribe ID - 371933. 835IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_ReverseTheOrderOf10BMs) { 836 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 837 ASSERT_TRUE(AllModelsMatchVerifier()); 838 839 for (int i = 0; i < 10; ++i) { 840 std::string title = IndexedURLTitle(i); 841 GURL url = GURL(IndexedURL(i)); 842 ASSERT_TRUE(AddURL(0, i, title, url) != NULL); 843 } 844 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 845 ASSERT_TRUE(AllModelsMatchVerifier()); 846 847 ReverseChildOrder(0, GetBookmarkBarNode(0)); 848 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 849 ASSERT_TRUE(AllModelsMatchVerifier()); 850} 851 852// Test Scribe ID - 371954. 853// flaky on Windows: http://crbug.com/412169 854#if defined(OS_WIN) 855#define MAYBE_SC_MovingBMsFromBMBarToBMFolder DISABLED_SC_MovingBMsFromBMBarToBMFolder 856#else 857#define MAYBE_SC_MovingBMsFromBMBarToBMFolder SC_MovingBMsFromBMBarToBMFolder 858#endif 859IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 860 MAYBE_SC_MovingBMsFromBMBarToBMFolder) { 861 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 862 ASSERT_TRUE(AllModelsMatchVerifier()); 863 864 ASSERT_TRUE(AddURL(0, kGenericURLTitle, GURL(kGenericURL)) != NULL); 865 const BookmarkNode* folder = AddFolder(0, 1, kGenericFolderName); 866 ASSERT_TRUE(folder != NULL); 867 for (int i = 2; i < 10; ++i) { 868 std::string title = IndexedURLTitle(i); 869 GURL url = GURL(IndexedURL(i)); 870 ASSERT_TRUE(AddURL(0, i, title, url) != NULL); 871 } 872 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 873 ASSERT_TRUE(AllModelsMatchVerifier()); 874 875 int num_bookmarks_to_move = 876 GetBookmarkBarNode(0)->child_count() - 2; 877 for (int i = 0; i < num_bookmarks_to_move; ++i) { 878 Move( 879 0, GetBookmarkBarNode(0)->GetChild(2), folder, i); 880 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 881 ASSERT_TRUE(AllModelsMatchVerifier()); 882 } 883} 884 885// Test Scribe ID - 371957. 886// flaky on Windows: http://crbug.com/412169 887#if defined(OS_WIN) 888#define MAYBE_SC_MovingBMsFromBMFoldToBMBar DISABLED_SC_MovingBMsFromBMFoldToBMBar 889#else 890#define MAYBE_SC_MovingBMsFromBMFoldToBMBar SC_MovingBMsFromBMFoldToBMBar 891#endif 892IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 893 MAYBE_SC_MovingBMsFromBMFoldToBMBar) { 894 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 895 ASSERT_TRUE(AllModelsMatchVerifier()); 896 897 ASSERT_TRUE(AddURL(0, kGenericURLTitle, GURL(kGenericURL)) != NULL); 898 const BookmarkNode* folder = AddFolder(0, 1, kGenericFolderName); 899 ASSERT_TRUE(folder != NULL); 900 for (int i = 0; i < 10; ++i) { 901 std::string title = IndexedURLTitle(i); 902 GURL url = GURL(IndexedURL(i)); 903 ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); 904 } 905 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 906 ASSERT_TRUE(AllModelsMatchVerifier()); 907 908 int num_bookmarks_to_move = folder->child_count() - 2; 909 for (int i = 0; i < num_bookmarks_to_move; ++i) { 910 Move(0, folder->GetChild(0), GetBookmarkBarNode(0), i); 911 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 912 ASSERT_TRUE(AllModelsMatchVerifier()); 913 } 914} 915 916// Test Scribe ID - 371961. 917IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 918 SC_MovingBMsFromParentBMFoldToChildBMFold) { 919 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 920 ASSERT_TRUE(AllModelsMatchVerifier()); 921 922 const BookmarkNode* folder = AddFolder(0, kGenericFolderName); 923 ASSERT_TRUE(folder != NULL); 924 for (int i = 0; i < 3; ++i) { 925 std::string title = IndexedURLTitle(i); 926 GURL url = GURL(IndexedURL(i)); 927 ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); 928 } 929 const BookmarkNode* subfolder = 930 AddFolder(0, folder, 3, kGenericSubfolderName); 931 ASSERT_TRUE(subfolder != NULL); 932 for (int i = 0; i < 10; ++i) { 933 std::string title = IndexedURLTitle(i + 3); 934 GURL url = GURL(IndexedURL(i + 3)); 935 ASSERT_TRUE(AddURL(0, subfolder, i, title, url) != NULL); 936 } 937 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 938 ASSERT_TRUE(AllModelsMatchVerifier()); 939 940 for (int i = 0; i < 3; ++i) { 941 GURL url = GURL(IndexedURL(i)); 942 Move(0, GetUniqueNodeByURL(0, url), subfolder, i + 10); 943 } 944 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 945 ASSERT_TRUE(AllModelsMatchVerifier()); 946} 947 948// Test Scribe ID - 371964. 949IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 950 SC_MovingBMsFromChildBMFoldToParentBMFold) { 951 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 952 ASSERT_TRUE(AllModelsMatchVerifier()); 953 954 const BookmarkNode* folder = AddFolder(0, kGenericFolderName); 955 ASSERT_TRUE(folder != NULL); 956 for (int i = 0; i < 3; ++i) { 957 std::string title = IndexedURLTitle(i); 958 GURL url = GURL(IndexedURL(i)); 959 ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); 960 } 961 const BookmarkNode* subfolder = 962 AddFolder(0, folder, 3, kGenericSubfolderName); 963 ASSERT_TRUE(subfolder != NULL); 964 for (int i = 0; i < 5; ++i) { 965 std::string title = IndexedURLTitle(i + 3); 966 GURL url = GURL(IndexedURL(i + 3)); 967 ASSERT_TRUE(AddURL(0, subfolder, i, title, url) != NULL); 968 } 969 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 970 ASSERT_TRUE(AllModelsMatchVerifier()); 971 972 for (int i = 0; i < 3; ++i) { 973 GURL url = GURL(IndexedURL(i + 3)); 974 Move(0, GetUniqueNodeByURL(0, url), folder, i + 4); 975 } 976 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 977 ASSERT_TRUE(AllModelsMatchVerifier()); 978} 979 980// Test Scribe ID - 371967. 981IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_HoistBMs10LevelUp) { 982 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 983 ASSERT_TRUE(AllModelsMatchVerifier()); 984 985 const BookmarkNode* folder = GetBookmarkBarNode(0); 986 const BookmarkNode* folder_L0 = NULL; 987 const BookmarkNode* folder_L10 = NULL; 988 for (int level = 0; level < 15; ++level) { 989 int num_bookmarks = base::RandInt(0, 9); 990 for (int i = 0; i < num_bookmarks; ++i) { 991 std::string title = IndexedURLTitle(i); 992 GURL url = GURL(IndexedURL(i)); 993 ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); 994 } 995 std::string title = IndexedFolderName(level); 996 folder = AddFolder(0, folder, folder->child_count(), title); 997 ASSERT_TRUE(folder != NULL); 998 if (level == 0) folder_L0 = folder; 999 if (level == 10) folder_L10 = folder; 1000 } 1001 for (int i = 0; i < 3; ++i) { 1002 std::string title = IndexedURLTitle(i + 10); 1003 GURL url = GURL(IndexedURL(i + 10)); 1004 ASSERT_TRUE(AddURL(0, folder_L10, i, title, url) != NULL); 1005 } 1006 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 1007 ASSERT_TRUE(AllModelsMatchVerifier()); 1008 1009 GURL url10 = GURL(IndexedURL(10)); 1010 Move(0, GetUniqueNodeByURL( 1011 0, url10), folder_L0, folder_L0->child_count()); 1012 GURL url11 = GURL(IndexedURL(11)); 1013 Move(0, GetUniqueNodeByURL(0, url11), folder_L0, 0); 1014 GURL url12 = GURL(IndexedURL(12)); 1015 Move(0, GetUniqueNodeByURL(0, url12), folder_L0, 1); 1016 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 1017 ASSERT_TRUE(AllModelsMatchVerifier()); 1018} 1019 1020// Test Scribe ID - 371968. 1021// Flaky. http://crbug.com/107744. 1022IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_SinkBMs10LevelDown) { 1023 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1024 ASSERT_TRUE(AllModelsMatchVerifier()); 1025 1026 const BookmarkNode* folder = GetBookmarkBarNode(0); 1027 const BookmarkNode* folder_L0 = NULL; 1028 const BookmarkNode* folder_L10 = NULL; 1029 for (int level = 0; level < 15; ++level) { 1030 int num_bookmarks = base::RandInt(0, 9); 1031 for (int i = 0; i < num_bookmarks; ++i) { 1032 std::string title = IndexedURLTitle(i); 1033 GURL url = GURL(IndexedURL(i)); 1034 ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); 1035 } 1036 std::string title = IndexedFolderName(level); 1037 folder = AddFolder(0, folder, folder->child_count(), title); 1038 ASSERT_TRUE(folder != NULL); 1039 if (level == 0) folder_L0 = folder; 1040 if (level == 10) folder_L10 = folder; 1041 } 1042 for (int i = 0; i < 3; ++i) { 1043 std::string title = IndexedURLTitle(i + 10); 1044 GURL url = GURL(IndexedURL(i + 10)); 1045 ASSERT_TRUE(AddURL(0, folder_L0, 0, title, url) != NULL); 1046 } 1047 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 1048 ASSERT_TRUE(AllModelsMatchVerifier()); 1049 1050 GURL url10 = GURL(IndexedURL(10)); 1051 Move(0, GetUniqueNodeByURL(0, url10), folder_L10, folder_L10->child_count()); 1052 GURL url11 = GURL(IndexedURL(11)); 1053 Move(0, GetUniqueNodeByURL(0, url11), folder_L10, 0); 1054 GURL url12 = GURL(IndexedURL(12)); 1055 Move(0, GetUniqueNodeByURL(0, url12), folder_L10, 1); 1056 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 1057 ASSERT_TRUE(AllModelsMatchVerifier()); 1058} 1059 1060// Test Scribe ID - 371980. 1061IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1062 SC_SinkEmptyBMFold5LevelsDown) { 1063 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1064 ASSERT_TRUE(AllModelsMatchVerifier()); 1065 1066 const BookmarkNode* folder = GetBookmarkBarNode(0); 1067 const BookmarkNode* folder_L5 = NULL; 1068 for (int level = 0; level < 15; ++level) { 1069 int num_bookmarks = base::RandInt(0, 9); 1070 for (int i = 0; i < num_bookmarks; ++i) { 1071 std::string title = IndexedURLTitle(i); 1072 GURL url = GURL(IndexedURL(i)); 1073 ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); 1074 } 1075 std::string title = IndexedFolderName(level); 1076 folder = AddFolder( 1077 0, folder, folder->child_count(), title); 1078 ASSERT_TRUE(folder != NULL); 1079 if (level == 5) folder_L5 = folder; 1080 } 1081 folder = AddFolder( 1082 0, GetBookmarkBarNode(0)->child_count(), kGenericFolderName); 1083 ASSERT_TRUE(folder != NULL); 1084 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 1085 ASSERT_TRUE(AllModelsMatchVerifier()); 1086 1087 Move(0, folder, folder_L5, folder_L5->child_count()); 1088 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 1089 ASSERT_TRUE(AllModelsMatchVerifier()); 1090} 1091 1092// Test Scribe ID - 371997. 1093IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1094 SC_SinkNonEmptyBMFold5LevelsDown) { 1095 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1096 ASSERT_TRUE(AllModelsMatchVerifier()); 1097 1098 const BookmarkNode* folder = GetBookmarkBarNode(0); 1099 const BookmarkNode* folder_L5 = NULL; 1100 for (int level = 0; level < 6; ++level) { 1101 int num_bookmarks = base::RandInt(0, 9); 1102 for (int i = 0; i < num_bookmarks; ++i) { 1103 std::string title = IndexedURLTitle(i); 1104 GURL url = GURL(IndexedURL(i)); 1105 ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); 1106 } 1107 std::string title = IndexedFolderName(level); 1108 folder = AddFolder(0, folder, folder->child_count(), title); 1109 ASSERT_TRUE(folder != NULL); 1110 if (level == 5) folder_L5 = folder; 1111 } 1112 folder = AddFolder( 1113 0, GetBookmarkBarNode(0)->child_count(), kGenericFolderName); 1114 ASSERT_TRUE(folder != NULL); 1115 for (int i = 0; i < 10; ++i) { 1116 std::string title = IndexedURLTitle(i); 1117 GURL url = GURL(IndexedURL(i)); 1118 ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); 1119 } 1120 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 1121 ASSERT_TRUE(AllModelsMatchVerifier()); 1122 1123 Move(0, folder, folder_L5, folder_L5->child_count()); 1124 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 1125 ASSERT_TRUE(AllModelsMatchVerifier()); 1126} 1127 1128// Test Scribe ID - 372006. 1129IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1130 SC_HoistFolder5LevelsUp) { 1131 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1132 ASSERT_TRUE(AllModelsMatchVerifier()); 1133 1134 const BookmarkNode* folder = GetBookmarkBarNode(0); 1135 const BookmarkNode* folder_L5 = NULL; 1136 for (int level = 0; level < 6; ++level) { 1137 int num_bookmarks = base::RandInt(0, 9); 1138 for (int i = 0; i < num_bookmarks; ++i) { 1139 std::string title = IndexedURLTitle(i); 1140 GURL url = GURL(IndexedURL(i)); 1141 ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); 1142 } 1143 std::string title = IndexedFolderName(level); 1144 folder = AddFolder( 1145 0, folder, folder->child_count(), title); 1146 ASSERT_TRUE(folder != NULL); 1147 if (level == 5) folder_L5 = folder; 1148 } 1149 folder = AddFolder( 1150 0, folder_L5, folder_L5->child_count(), kGenericFolderName); 1151 ASSERT_TRUE(folder != NULL); 1152 for (int i = 0; i < 10; ++i) { 1153 std::string title = IndexedURLTitle(i); 1154 GURL url = GURL(IndexedURL(i)); 1155 ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL); 1156 } 1157 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 1158 ASSERT_TRUE(AllModelsMatchVerifier()); 1159 1160 Move(0, folder, GetBookmarkBarNode(0), GetBookmarkBarNode(0)->child_count()); 1161 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 1162 ASSERT_TRUE(AllModelsMatchVerifier()); 1163} 1164 1165// Test Scribe ID - 372026. 1166IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1167 SC_ReverseTheOrderOfTwoBMFolders) { 1168 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1169 ASSERT_TRUE(AllModelsMatchVerifier()); 1170 1171 for (int i = 0; i < 2; ++i) { 1172 std::string title = IndexedFolderName(i); 1173 const BookmarkNode* folder = AddFolder(0, i, title); 1174 ASSERT_TRUE(folder != NULL); 1175 for (int j = 0; j < 10; ++j) { 1176 std::string title = IndexedURLTitle(j); 1177 GURL url = GURL(IndexedURL(j)); 1178 ASSERT_TRUE(AddURL(0, folder, j, title, url) != NULL); 1179 } 1180 } 1181 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 1182 ASSERT_TRUE(AllModelsMatchVerifier()); 1183 1184 ReverseChildOrder(0, GetBookmarkBarNode(0)); 1185 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 1186 ASSERT_TRUE(AllModelsMatchVerifier()); 1187} 1188 1189// Test Scribe ID - 372028. 1190IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1191 SC_ReverseTheOrderOfTenBMFolders) { 1192 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1193 ASSERT_TRUE(AllModelsMatchVerifier()); 1194 1195 for (int i = 0; i < 10; ++i) { 1196 std::string title = IndexedFolderName(i); 1197 const BookmarkNode* folder = AddFolder(0, i, title); 1198 ASSERT_TRUE(folder != NULL); 1199 for (int j = 0; j < 10; ++j) { 1200 std::string title = IndexedURLTitle(1000 * i + j); 1201 GURL url = GURL(IndexedURL(j)); 1202 ASSERT_TRUE(AddURL(0, folder, j, title, url) != NULL); 1203 } 1204 } 1205 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 1206 ASSERT_TRUE(AllModelsMatchVerifier()); 1207 1208 ReverseChildOrder(0, GetBookmarkBarNode(0)); 1209 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 1210 ASSERT_TRUE(AllModelsMatchVerifier()); 1211} 1212 1213// Test Scribe ID - 373379. 1214IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1215 MC_BiDirectionalPushAddingBM) { 1216 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1217 ASSERT_TRUE(AllModelsMatchVerifier()); 1218 1219 DisableVerifier(); 1220 for (int i = 0; i < 2; ++i) { 1221 std::string title0 = IndexedURLTitle(2*i); 1222 GURL url0 = GURL(IndexedURL(2*i)); 1223 ASSERT_TRUE(AddURL(0, title0, url0) != NULL); 1224 std::string title1 = IndexedURLTitle(2*i+1); 1225 GURL url1 = GURL(IndexedURL(2*i+1)); 1226 ASSERT_TRUE(AddURL(1, title1, url1) != NULL); 1227 } 1228 ASSERT_TRUE(AwaitQuiescence()); 1229 ASSERT_TRUE(AllModelsMatch()); 1230 ASSERT_FALSE(ContainsDuplicateBookmarks(0)); 1231} 1232 1233// Test Scribe ID - 373503. 1234IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1235 MC_BiDirectionalPush_AddingSameBMs) { 1236 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1237 ASSERT_TRUE(AllModelsMatchVerifier()); 1238 1239 // Note: When a racy commit is done with identical bookmarks, it is possible 1240 // for duplicates to exist after sync completes. See http://crbug.com/19769. 1241 DisableVerifier(); 1242 for (int i = 0; i < 2; ++i) { 1243 std::string title = IndexedURLTitle(i); 1244 GURL url = GURL(IndexedURL(i)); 1245 ASSERT_TRUE(AddURL(0, title, url) != NULL); 1246 ASSERT_TRUE(AddURL(1, title, url) != NULL); 1247 } 1248 ASSERT_TRUE(AwaitQuiescence()); 1249 ASSERT_TRUE(AllModelsMatch()); 1250} 1251 1252// Test Scribe ID - 373506. 1253IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1254 MC_BootStrapEmptyStateEverywhere) { 1255 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1256 ASSERT_TRUE(AwaitQuiescence()); 1257 ASSERT_TRUE(AllModelsMatchVerifier()); 1258} 1259 1260// Test Scribe ID - 373505. 1261IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1262 MC_Merge_CaseInsensitivity_InNames) { 1263 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; 1264 DisableVerifier(); 1265 1266 const BookmarkNode* folder0 = AddFolder(0, "Folder"); 1267 ASSERT_TRUE(folder0 != NULL); 1268 ASSERT_TRUE(AddURL(0, folder0, 0, "Bookmark 0", GURL(kGenericURL)) != NULL); 1269 ASSERT_TRUE(AddURL(0, folder0, 1, "Bookmark 1", GURL(kGenericURL)) != NULL); 1270 ASSERT_TRUE(AddURL(0, folder0, 2, "Bookmark 2", GURL(kGenericURL)) != NULL); 1271 1272 const BookmarkNode* folder1 = AddFolder(1, "fOlDeR"); 1273 ASSERT_TRUE(folder1 != NULL); 1274 ASSERT_TRUE(AddURL(1, folder1, 0, "bOoKmArK 0", GURL(kGenericURL)) != NULL); 1275 ASSERT_TRUE(AddURL(1, folder1, 1, "BooKMarK 1", GURL(kGenericURL)) != NULL); 1276 ASSERT_TRUE(AddURL(1, folder1, 2, "bOOKMARK 2", GURL(kGenericURL)) != NULL); 1277 1278 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1279 ASSERT_TRUE(AwaitQuiescence()); 1280 ASSERT_TRUE(AllModelsMatch()); 1281 ASSERT_FALSE(ContainsDuplicateBookmarks(0)); 1282} 1283 1284// Test Scribe ID - 373508. 1285IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1286 MC_SimpleMergeOfDifferentBMModels) { 1287 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; 1288 DisableVerifier(); 1289 1290 for (int i = 0; i < 3; ++i) { 1291 std::string title = IndexedURLTitle(i); 1292 GURL url = GURL(IndexedURL(i)); 1293 ASSERT_TRUE(AddURL(0, i, title, url) != NULL); 1294 ASSERT_TRUE(AddURL(1, i, title, url) != NULL); 1295 } 1296 1297 for (int i = 3; i < 10; ++i) { 1298 std::string title0 = IndexedURLTitle(i); 1299 GURL url0 = GURL(IndexedURL(i)); 1300 ASSERT_TRUE(AddURL(0, i, title0, url0) != NULL); 1301 std::string title1 = IndexedURLTitle(i+7); 1302 GURL url1 = GURL(IndexedURL(i+7)); 1303 ASSERT_TRUE(AddURL(1, i, title1, url1) != NULL); 1304 } 1305 1306 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1307 ASSERT_TRUE(AwaitQuiescence()); 1308 ASSERT_TRUE(AllModelsMatch()); 1309 ASSERT_FALSE(ContainsDuplicateBookmarks(0)); 1310} 1311 1312// Test Scribe ID - 386586. 1313IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1314 MC_MergeSimpleBMHierarchyUnderBMBar) { 1315 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; 1316 DisableVerifier(); 1317 1318 for (int i = 0; i < 3; ++i) { 1319 std::string title = IndexedURLTitle(i); 1320 GURL url = GURL(IndexedURL(i)); 1321 ASSERT_TRUE(AddURL(0, i, title, url) != NULL); 1322 ASSERT_TRUE(AddURL(1, i, title, url) != NULL); 1323 } 1324 1325 for (int i = 3; i < 10; ++i) { 1326 std::string title = IndexedURLTitle(i); 1327 GURL url = GURL(IndexedURL(i)); 1328 ASSERT_TRUE(AddURL(1, i, title, url) != NULL); 1329 } 1330 1331 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1332 ASSERT_TRUE(AwaitQuiescence()); 1333 ASSERT_TRUE(AllModelsMatch()); 1334 ASSERT_FALSE(ContainsDuplicateBookmarks(0)); 1335} 1336 1337// Test Scribe ID - 386589. 1338IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1339 MC_MergeSimpleBMHierarchyEqualSetsUnderBMBar) { 1340 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; 1341 DisableVerifier(); 1342 1343 for (int i = 0; i < 3; ++i) { 1344 std::string title = IndexedURLTitle(i); 1345 GURL url = GURL(IndexedURL(i)); 1346 ASSERT_TRUE(AddURL(0, i, title, url) != NULL); 1347 ASSERT_TRUE(AddURL(1, i, title, url) != NULL); 1348 } 1349 1350 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1351 ASSERT_TRUE(AwaitQuiescence()); 1352 ASSERT_TRUE(AllModelsMatch()); 1353 ASSERT_FALSE(ContainsDuplicateBookmarks(0)); 1354} 1355 1356// Test Scribe ID - 373504 - Merge bookmark folders with different bookmarks. 1357IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1358 MC_MergeBMFoldersWithDifferentBMs) { 1359 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; 1360 DisableVerifier(); 1361 1362 const BookmarkNode* folder0 = AddFolder(0, kGenericFolderName); 1363 ASSERT_TRUE(folder0 != NULL); 1364 const BookmarkNode* folder1 = AddFolder(1, kGenericFolderName); 1365 ASSERT_TRUE(folder1 != NULL); 1366 for (int i = 0; i < 2; ++i) { 1367 std::string title0 = IndexedURLTitle(2*i); 1368 GURL url0 = GURL(IndexedURL(2*i)); 1369 ASSERT_TRUE(AddURL(0, folder0, i, title0, url0) != NULL); 1370 std::string title1 = IndexedURLTitle(2*i+1); 1371 GURL url1 = GURL(IndexedURL(2*i+1)); 1372 ASSERT_TRUE(AddURL(1, folder1, i, title1, url1) != NULL); 1373 } 1374 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1375 ASSERT_TRUE(AwaitQuiescence()); 1376 ASSERT_TRUE(AllModelsMatch()); 1377 ASSERT_FALSE(ContainsDuplicateBookmarks(0)); 1378} 1379 1380// Test Scribe ID - 373509 - Merge moderately complex bookmark models. 1381IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1382 MC_MergeDifferentBMModelsModeratelyComplex) { 1383 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; 1384 DisableVerifier(); 1385 1386 for (int i = 0; i < 25; ++i) { 1387 std::string title0 = IndexedURLTitle(i); 1388 GURL url0 = GURL(IndexedURL(i)); 1389 ASSERT_TRUE(AddURL(0, i, title0, url0) != NULL); 1390 std::string title1 = IndexedURLTitle(i+50); 1391 GURL url1 = GURL(IndexedURL(i+50)); 1392 ASSERT_TRUE(AddURL(1, i, title1, url1) != NULL); 1393 } 1394 for (int i = 25; i < 30; ++i) { 1395 std::string title0 = IndexedFolderName(i); 1396 const BookmarkNode* folder0 = AddFolder(0, i, title0); 1397 ASSERT_TRUE(folder0 != NULL); 1398 std::string title1 = IndexedFolderName(i+50); 1399 const BookmarkNode* folder1 = AddFolder(1, i, title1); 1400 ASSERT_TRUE(folder1 != NULL); 1401 for (int j = 0; j < 5; ++j) { 1402 std::string title0 = IndexedURLTitle(i+5*j); 1403 GURL url0 = GURL(IndexedURL(i+5*j)); 1404 ASSERT_TRUE(AddURL(0, folder0, j, title0, url0) != NULL); 1405 std::string title1 = IndexedURLTitle(i+5*j+50); 1406 GURL url1 = GURL(IndexedURL(i+5*j+50)); 1407 ASSERT_TRUE(AddURL(1, folder1, j, title1, url1) != NULL); 1408 } 1409 } 1410 for (int i = 100; i < 125; ++i) { 1411 std::string title = IndexedURLTitle(i); 1412 GURL url = GURL(IndexedURL(i)); 1413 ASSERT_TRUE(AddURL(0, title, url) != NULL); 1414 ASSERT_TRUE(AddURL(1, title, url) != NULL); 1415 } 1416 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1417 ASSERT_TRUE(AwaitQuiescence()); 1418 ASSERT_TRUE(AllModelsMatch()); 1419 ASSERT_FALSE(ContainsDuplicateBookmarks(0)); 1420} 1421 1422// TCM ID - 3675271 - Merge simple bookmark subset under bookmark folder. 1423IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1424 MC_MergeSimpleBMHierarchySubsetUnderBMFolder) { 1425 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; 1426 DisableVerifier(); 1427 1428 for (int i = 0; i < 2; ++i) { 1429 const BookmarkNode* folder = AddFolder(i, kGenericFolderName); 1430 ASSERT_TRUE(folder != NULL); 1431 for (int j = 0; j < 4; ++j) { 1432 if (base::RandDouble() < 0.5) { 1433 std::string title = IndexedURLTitle(j); 1434 GURL url = GURL(IndexedURL(j)); 1435 ASSERT_TRUE(AddURL(i, folder, j, title, url) != NULL); 1436 } else { 1437 std::string title = IndexedFolderName(j); 1438 ASSERT_TRUE(AddFolder(i, folder, j, title) != NULL); 1439 } 1440 } 1441 } 1442 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1443 ASSERT_TRUE(AwaitQuiescence()); 1444 ASSERT_TRUE(AllModelsMatch()); 1445 ASSERT_FALSE(ContainsDuplicateBookmarks(0)); 1446} 1447 1448// TCM ID - 3727284 - Merge subsets of bookmark under bookmark bar. 1449IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1450 MC_MergeSimpleBMHierarchySubsetUnderBookmarkBar) { 1451 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; 1452 DisableVerifier(); 1453 1454 for (int i = 0; i < 4; ++i) { 1455 std::string title = IndexedURLTitle(i); 1456 GURL url = GURL(IndexedURL(i)); 1457 ASSERT_TRUE(AddURL(0, i, title, url) != NULL); 1458 } 1459 1460 for (int j = 0; j < 2; ++j) { 1461 std::string title = IndexedURLTitle(j); 1462 GURL url = GURL(IndexedURL(j)); 1463 ASSERT_TRUE(AddURL(1, j, title, url) != NULL); 1464 } 1465 1466 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1467 ASSERT_TRUE(AwaitQuiescence()); 1468 ASSERT_TRUE(AllModelsMatch()); 1469 ASSERT_FALSE(ContainsDuplicateBookmarks(0)); 1470 ASSERT_FALSE(ContainsDuplicateBookmarks(1)); 1471} 1472 1473// TCM ID - 3659294 - Merge simple bookmark hierarchy under bookmark folder. 1474IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1475 MC_Merge_SimpleBMHierarchy_Under_BMFolder) { 1476 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; 1477 DisableVerifier(); 1478 1479 const BookmarkNode* folder0 = AddFolder(0, 0, kGenericFolderName); 1480 ASSERT_TRUE(folder0 != NULL); 1481 ASSERT_TRUE(AddURL( 1482 0, folder0, 0, IndexedURLTitle(1), GURL(IndexedURL(1))) != NULL); 1483 ASSERT_TRUE(AddFolder(0, folder0, 1, IndexedSubfolderName(2)) != NULL); 1484 ASSERT_TRUE(AddURL( 1485 0, folder0, 2, IndexedURLTitle(3), GURL(IndexedURL(3))) != NULL); 1486 ASSERT_TRUE(AddFolder(0, folder0, 3, IndexedSubfolderName(4)) != NULL); 1487 1488 const BookmarkNode* folder1 = AddFolder(1, 0, kGenericFolderName); 1489 ASSERT_TRUE(folder1 != NULL); 1490 ASSERT_TRUE(AddFolder(1, folder1, 0, IndexedSubfolderName(0)) != NULL); 1491 ASSERT_TRUE(AddFolder(1, folder1, 1, IndexedSubfolderName(2)) != NULL); 1492 ASSERT_TRUE(AddURL( 1493 1, folder1, 2, IndexedURLTitle(3), GURL(IndexedURL(3))) != NULL); 1494 ASSERT_TRUE(AddFolder(1, folder1, 3, IndexedSubfolderName(5)) != NULL); 1495 ASSERT_TRUE(AddURL( 1496 1, folder1, 4, IndexedURLTitle(1), GURL(IndexedURL(1))) != NULL); 1497 1498 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1499 ASSERT_TRUE(AwaitQuiescence()); 1500 ASSERT_TRUE(AllModelsMatch()); 1501 ASSERT_FALSE(ContainsDuplicateBookmarks(0)); 1502} 1503 1504// TCM ID - 3711273 - Merge disjoint sets of bookmark hierarchy under bookmark 1505// folder. 1506IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1507 MC_Merge_SimpleBMHierarchy_DisjointSets_Under_BMFolder) { 1508 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; 1509 DisableVerifier(); 1510 1511 const BookmarkNode* folder0 = 1512 AddFolder(0, 0, kGenericFolderName); 1513 ASSERT_TRUE(folder0 != NULL); 1514 ASSERT_TRUE(AddURL( 1515 0, folder0, 0, IndexedURLTitle(1), GURL(IndexedURL(1))) != NULL); 1516 ASSERT_TRUE(AddFolder(0, folder0, 1, IndexedSubfolderName(2)) != NULL); 1517 ASSERT_TRUE(AddURL( 1518 0, folder0, 2, IndexedURLTitle(3), GURL(IndexedURL(3))) != NULL); 1519 ASSERT_TRUE(AddFolder(0, folder0, 3, IndexedSubfolderName(4)) != NULL); 1520 1521 const BookmarkNode* folder1 = AddFolder(1, 0, kGenericFolderName); 1522 ASSERT_TRUE(folder1 != NULL); 1523 ASSERT_TRUE(AddFolder(1, folder1, 0, IndexedSubfolderName(5)) != NULL); 1524 ASSERT_TRUE(AddFolder(1, folder1, 1, IndexedSubfolderName(6)) != NULL); 1525 ASSERT_TRUE(AddURL( 1526 1, folder1, 2, IndexedURLTitle(7), GURL(IndexedURL(7))) != NULL); 1527 ASSERT_TRUE(AddURL( 1528 1, folder1, 3, IndexedURLTitle(8), GURL(IndexedURL(8))) != NULL); 1529 1530 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1531 ASSERT_TRUE(AwaitQuiescence()); 1532 ASSERT_TRUE(AllModelsMatch()); 1533 ASSERT_FALSE(ContainsDuplicateBookmarks(0)); 1534} 1535 1536// TCM ID - 3639296 - Merge disjoint sets of bookmark hierarchy under bookmark 1537// bar. 1538IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1539 MC_Merge_SimpleBMHierarchy_DisjointSets_Under_BookmarkBar) { 1540 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; 1541 DisableVerifier(); 1542 1543 for (int i = 0; i < 3; ++i) { 1544 std::string title = IndexedURLTitle(i+1); 1545 GURL url = GURL(IndexedURL(i+1)); 1546 ASSERT_TRUE(AddURL(0, i, title, url) != NULL); 1547 } 1548 1549 for (int j = 0; j < 3; ++j) { 1550 std::string title = IndexedURLTitle(j+4); 1551 GURL url = GURL(IndexedURL(j+4)); 1552 ASSERT_TRUE(AddURL(0, j, title, url) != NULL); 1553 } 1554 1555 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1556 ASSERT_TRUE(AwaitQuiescence()); 1557 ASSERT_TRUE(AllModelsMatch()); 1558 ASSERT_FALSE(ContainsDuplicateBookmarks(0)); 1559} 1560 1561// TCM ID - 3616282 - Merge sets of duplicate bookmarks under bookmark bar. 1562IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1563 MC_Merge_SimpleBMHierarchy_DuplicateBMs_Under_BMBar) { 1564 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; 1565 DisableVerifier(); 1566 1567 // Let's add duplicate set of bookmark {1,2,2,3,3,3,4,4,4,4} to client0. 1568 int node_index = 0; 1569 for (int i = 1; i < 5 ; ++i) { 1570 for (int j = 0; j < i; ++j) { 1571 std::string title = IndexedURLTitle(i); 1572 GURL url = GURL(IndexedURL(i)); 1573 ASSERT_TRUE(AddURL(0, node_index, title, url) != NULL); 1574 ++node_index; 1575 } 1576 } 1577 // Let's add a set of bookmarks {1,2,3,4} to client1. 1578 for (int i = 0; i < 4; ++i) { 1579 std::string title = IndexedURLTitle(i+1); 1580 GURL url = GURL(IndexedURL(i+1)); 1581 ASSERT_TRUE(AddURL(1, i, title, url) != NULL); 1582 } 1583 1584 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1585 ASSERT_TRUE(AwaitQuiescence()); 1586 ASSERT_TRUE(AllModelsMatch()); 1587 1588 for (int i = 1; i < 5 ; ++i) { 1589 ASSERT_TRUE(CountBookmarksWithTitlesMatching(1, IndexedURLTitle(i)) == i); 1590 } 1591} 1592 1593// TCM ID - 6593872. 1594IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, DisableBookmarks) { 1595 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1596 ASSERT_TRUE(AllModelsMatchVerifier()); 1597 1598 ASSERT_TRUE(GetClient(1)->DisableSyncForDatatype(syncer::BOOKMARKS)); 1599 ASSERT_TRUE(AddFolder(1, kGenericFolderName) != NULL); 1600 ASSERT_TRUE(AwaitQuiescence()); 1601 ASSERT_FALSE(AllModelsMatch()); 1602 1603 ASSERT_TRUE(GetClient(1)->EnableSyncForDatatype(syncer::BOOKMARKS)); 1604 ASSERT_TRUE(AwaitQuiescence()); 1605 ASSERT_TRUE(AllModelsMatch()); 1606} 1607 1608// TCM ID - 7343544. 1609IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, DisableSync) { 1610 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1611 ASSERT_TRUE(AllModelsMatchVerifier()); 1612 1613 ASSERT_TRUE(GetClient(1)->DisableSyncForAllDatatypes()); 1614 ASSERT_TRUE(AddFolder(0, IndexedFolderName(0)) != NULL); 1615 ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService((0)))); 1616 ASSERT_FALSE(AllModelsMatch()); 1617 1618 ASSERT_TRUE(AddFolder(1, IndexedFolderName(1)) != NULL); 1619 ASSERT_FALSE(AllModelsMatch()); 1620 1621 ASSERT_TRUE(GetClient(1)->EnableSyncForAllDatatypes()); 1622 ASSERT_TRUE(AwaitQuiescence()); 1623 ASSERT_TRUE(AllModelsMatch()); 1624} 1625 1626// TCM ID - 3662298 - Test adding duplicate folder - Both with different BMs 1627// underneath. 1628IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, MC_DuplicateFolders) { 1629 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; 1630 DisableVerifier(); 1631 1632 const BookmarkNode* folder0 = AddFolder(0, kGenericFolderName); 1633 ASSERT_TRUE(folder0 != NULL); 1634 const BookmarkNode* folder1 = AddFolder(1, kGenericFolderName); 1635 ASSERT_TRUE(folder1 != NULL); 1636 for (int i = 0; i < 5; ++i) { 1637 std::string title0 = IndexedURLTitle(i); 1638 GURL url0 = GURL(IndexedURL(i)); 1639 ASSERT_TRUE(AddURL(0, folder0, i, title0, url0) != NULL); 1640 std::string title1 = IndexedURLTitle(i+5); 1641 GURL url1 = GURL(IndexedURL(i+5)); 1642 ASSERT_TRUE(AddURL(1, folder1, i, title1, url1) != NULL); 1643 } 1644 1645 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1646 ASSERT_TRUE(AwaitQuiescence()); 1647 ASSERT_TRUE(AllModelsMatch()); 1648 ASSERT_FALSE(ContainsDuplicateBookmarks(0)); 1649} 1650 1651// This test fails when run with FakeServer and FakeServerInvalidationService. 1652IN_PROC_BROWSER_TEST_F(LegacyTwoClientBookmarksSyncTest, MC_DeleteBookmark) { 1653 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1654 ASSERT_TRUE(GetClient(1)->DisableSyncForDatatype(syncer::BOOKMARKS)); 1655 1656 const GURL bar_url("http://example.com/bar"); 1657 const GURL other_url("http://example.com/other"); 1658 1659 ASSERT_TRUE(AddURL(0, GetBookmarkBarNode(0), 0, "bar", bar_url) != NULL); 1660 ASSERT_TRUE(AddURL(0, GetOtherNode(0), 0, "other", other_url) != NULL); 1661 1662 ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService((0)))); 1663 1664 ASSERT_TRUE(HasNodeWithURL(0, bar_url)); 1665 ASSERT_TRUE(HasNodeWithURL(0, other_url)); 1666 ASSERT_FALSE(HasNodeWithURL(1, bar_url)); 1667 ASSERT_FALSE(HasNodeWithURL(1, other_url)); 1668 1669 Remove(0, GetBookmarkBarNode(0), 0); 1670 ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService((0)))); 1671 1672 ASSERT_FALSE(HasNodeWithURL(0, bar_url)); 1673 ASSERT_TRUE(HasNodeWithURL(0, other_url)); 1674 1675 ASSERT_TRUE(GetClient(1)->EnableSyncForDatatype(syncer::BOOKMARKS)); 1676 ASSERT_TRUE(AwaitQuiescence()); 1677 1678 ASSERT_FALSE(HasNodeWithURL(0, bar_url)); 1679 ASSERT_TRUE(HasNodeWithURL(0, other_url)); 1680 ASSERT_FALSE(HasNodeWithURL(1, bar_url)); 1681 ASSERT_TRUE(HasNodeWithURL(1, other_url)); 1682} 1683 1684// TCM ID - 3719307 - Test a scenario of updating the name of the same bookmark 1685// from two clients at the same time. 1686IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1687 MC_BookmarkNameChangeConflict) { 1688 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1689 1690 const BookmarkNode* folder0 = AddFolder(0, kGenericFolderName); 1691 ASSERT_TRUE(folder0 != NULL); 1692 for (int i = 0; i < 3; ++i) { 1693 std::string title = IndexedURLTitle(i); 1694 GURL url = GURL(IndexedURL(i)); 1695 ASSERT_TRUE(AddURL(0, folder0, i, title, url) != NULL); 1696 } 1697 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 1698 ASSERT_TRUE(AllModelsMatchVerifier()); 1699 ASSERT_FALSE(ContainsDuplicateBookmarks(0)); 1700 1701 DisableVerifier(); 1702 GURL url(IndexedURL(0)); 1703 SetTitle(0, GetUniqueNodeByURL(0, url), "Title++"); 1704 SetTitle(1, GetUniqueNodeByURL(1, url), "Title--"); 1705 1706 ASSERT_TRUE(AwaitQuiescence()); 1707 ASSERT_TRUE(AllModelsMatch()); 1708 ASSERT_FALSE(ContainsDuplicateBookmarks(0)); 1709} 1710 1711// TCM ID - 3672299 - Test a scenario of updating the URL of the same bookmark 1712// from two clients at the same time. 1713IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1714 MC_BookmarkURLChangeConflict) { 1715 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1716 1717 const BookmarkNode* folder0 = AddFolder(0, kGenericFolderName); 1718 ASSERT_TRUE(folder0 != NULL); 1719 for (int i = 0; i < 3; ++i) { 1720 std::string title = IndexedURLTitle(i); 1721 GURL url = GURL(IndexedURL(i)); 1722 ASSERT_TRUE(AddURL(0, folder0, i, title, url) != NULL); 1723 } 1724 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 1725 ASSERT_TRUE(AllModelsMatchVerifier()); 1726 ASSERT_FALSE(ContainsDuplicateBookmarks(0)); 1727 1728 DisableVerifier(); 1729 GURL url(IndexedURL(0)); 1730 ASSERT_TRUE(SetURL( 1731 0, GetUniqueNodeByURL(0, url), GURL("http://www.google.com/00"))); 1732 ASSERT_TRUE(SetURL( 1733 1, GetUniqueNodeByURL(1, url), GURL("http://www.google.com/11"))); 1734 1735 ASSERT_TRUE(AwaitQuiescence()); 1736 ASSERT_TRUE(AllModelsMatch()); 1737 ASSERT_FALSE(ContainsDuplicateBookmarks(0)); 1738} 1739 1740// TCM ID - 3699290 - Test a scenario of updating the BM Folder name from two 1741// clients at the same time. 1742IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1743 MC_FolderNameChangeConflict) { 1744 ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; 1745 DisableVerifier(); 1746 1747 const BookmarkNode* folderA[2]; 1748 const BookmarkNode* folderB[2]; 1749 const BookmarkNode* folderC[2]; 1750 1751 // Create empty folder A on both clients. 1752 folderA[0] = AddFolder(0, IndexedFolderName(0)); 1753 ASSERT_TRUE(folderA[0] != NULL); 1754 folderA[1] = AddFolder(1, IndexedFolderName(0)); 1755 ASSERT_TRUE(folderA[1] != NULL); 1756 1757 // Create folder B with bookmarks on both clients. 1758 folderB[0] = AddFolder(0, IndexedFolderName(1)); 1759 ASSERT_TRUE(folderB[0] != NULL); 1760 folderB[1] = AddFolder(1, IndexedFolderName(1)); 1761 ASSERT_TRUE(folderB[1] != NULL); 1762 for (int i = 0; i < 3; ++i) { 1763 std::string title = IndexedURLTitle(i); 1764 GURL url = GURL(IndexedURL(i)); 1765 ASSERT_TRUE(AddURL(0, folderB[0], i, title, url) != NULL); 1766 } 1767 1768 // Create folder C with bookmarks and subfolders on both clients. 1769 folderC[0] = AddFolder(0, IndexedFolderName(2)); 1770 ASSERT_TRUE(folderC[0] != NULL); 1771 folderC[1] = AddFolder(1, IndexedFolderName(2)); 1772 ASSERT_TRUE(folderC[1] != NULL); 1773 for (int i = 0; i < 3; ++i) { 1774 std::string folder_name = IndexedSubfolderName(i); 1775 const BookmarkNode* subfolder = AddFolder(0, folderC[0], i, folder_name); 1776 ASSERT_TRUE(subfolder != NULL); 1777 for (int j = 0; j < 3; ++j) { 1778 std::string title = IndexedURLTitle(j); 1779 GURL url = GURL(IndexedURL(j)); 1780 ASSERT_TRUE(AddURL(0, subfolder, j, title, url) != NULL); 1781 } 1782 } 1783 1784 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1785 ASSERT_TRUE(AwaitQuiescence()); 1786 ASSERT_TRUE(AllModelsMatch()); 1787 ASSERT_FALSE(ContainsDuplicateBookmarks(0)); 1788 1789 // Simultaneously rename folder A on both clients. 1790 SetTitle(0, folderA[0], "Folder A++"); 1791 SetTitle(1, folderA[1], "Folder A--"); 1792 ASSERT_TRUE(AwaitQuiescence()); 1793 ASSERT_TRUE(AllModelsMatch()); 1794 ASSERT_FALSE(ContainsDuplicateBookmarks(0)); 1795 1796 // Simultaneously rename folder B on both clients. 1797 SetTitle(0, folderB[0], "Folder B++"); 1798 SetTitle(1, folderB[1], "Folder B--"); 1799 ASSERT_TRUE(AwaitQuiescence()); 1800 ASSERT_TRUE(AllModelsMatch()); 1801 ASSERT_FALSE(ContainsDuplicateBookmarks(0)); 1802 1803 // Simultaneously rename folder C on both clients. 1804 SetTitle(0, folderC[0], "Folder C++"); 1805 SetTitle(1, folderC[1], "Folder C--"); 1806 ASSERT_TRUE(AwaitQuiescence()); 1807 ASSERT_TRUE(AllModelsMatch()); 1808 ASSERT_FALSE(ContainsDuplicateBookmarks(0)); 1809} 1810 1811IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1812 SingleClientEnabledEncryption) { 1813 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1814 ASSERT_TRUE(AllModelsMatchVerifier()); 1815 1816 ASSERT_TRUE(EnableEncryption(0)); 1817 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 1818 ASSERT_TRUE(IsEncryptionComplete(0)); 1819 ASSERT_TRUE(IsEncryptionComplete(1)); 1820 ASSERT_TRUE(AllModelsMatchVerifier()); 1821} 1822 1823IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1824 SingleClientEnabledEncryptionAndChanged) { 1825 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1826 ASSERT_TRUE(AllModelsMatchVerifier()); 1827 1828 ASSERT_TRUE(EnableEncryption(0)); 1829 ASSERT_TRUE(AddURL(0, IndexedURLTitle(0), GURL(IndexedURL(0))) != NULL); 1830 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 1831 ASSERT_TRUE(IsEncryptionComplete(0)); 1832 ASSERT_TRUE(IsEncryptionComplete(1)); 1833 ASSERT_TRUE(AllModelsMatchVerifier()); 1834} 1835 1836IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1837 BothClientsEnabledEncryption) { 1838 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1839 ASSERT_TRUE(AllModelsMatchVerifier()); 1840 1841 ASSERT_TRUE(EnableEncryption(0)); 1842 ASSERT_TRUE(EnableEncryption(1)); 1843 ASSERT_TRUE(AwaitQuiescence()); 1844 ASSERT_TRUE(IsEncryptionComplete(0)); 1845 ASSERT_TRUE(IsEncryptionComplete(1)); 1846 ASSERT_TRUE(AllModelsMatchVerifier()); 1847} 1848 1849IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1850 SingleClientEnabledEncryptionBothChanged) { 1851 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1852 ASSERT_TRUE(AllModelsMatchVerifier()); 1853 1854 ASSERT_TRUE(EnableEncryption(0)); 1855 ASSERT_TRUE(AwaitQuiescence()); 1856 ASSERT_TRUE(IsEncryptionComplete(0)); 1857 ASSERT_TRUE(IsEncryptionComplete(1)); 1858 ASSERT_TRUE(AddURL(0, IndexedURLTitle(0), GURL(IndexedURL(0))) != NULL); 1859 ASSERT_TRUE(AddURL(0, IndexedURLTitle(1), GURL(IndexedURL(1))) != NULL); 1860 ASSERT_TRUE(AwaitQuiescence()); 1861 ASSERT_TRUE(AllModelsMatchVerifier()); 1862 ASSERT_TRUE(IsEncryptionComplete(0)); 1863 ASSERT_TRUE(IsEncryptionComplete(1)); 1864} 1865 1866IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1867 SingleClientEnabledEncryptionAndChangedMultipleTimes) { 1868 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1869 ASSERT_TRUE(AllModelsMatchVerifier()); 1870 1871 ASSERT_TRUE(AddURL(0, IndexedURLTitle(0), GURL(IndexedURL(0))) != NULL); 1872 ASSERT_TRUE(EnableEncryption(0)); 1873 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 1874 ASSERT_TRUE(IsEncryptionComplete(0)); 1875 ASSERT_TRUE(IsEncryptionComplete(1)); 1876 ASSERT_TRUE(AllModelsMatchVerifier()); 1877 1878 ASSERT_TRUE(AddURL(0, IndexedURLTitle(1), GURL(IndexedURL(1))) != NULL); 1879 ASSERT_TRUE(AddFolder(0, IndexedFolderName(0)) != NULL); 1880 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 1881 ASSERT_TRUE(AllModelsMatchVerifier()); 1882} 1883 1884IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 1885 FirstClientEnablesEncryptionWithPassSecondChanges) { 1886 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1887 ASSERT_TRUE(AllModelsMatchVerifier()); 1888 1889 // Add initial bookmarks. 1890 ASSERT_TRUE(AddURL(0, 0, IndexedURLTitle(0), GURL(IndexedURL(0))) != NULL); 1891 ASSERT_TRUE(AddURL(0, 1, IndexedURLTitle(1), GURL(IndexedURL(1))) != NULL); 1892 ASSERT_TRUE(AddURL(0, 2, IndexedURLTitle(2), GURL(IndexedURL(2))) != NULL); 1893 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 1894 ASSERT_TRUE(AllModelsMatchVerifier()); 1895 1896 // Set a passphrase and enable encryption on Client 0. Client 1 will not 1897 // understand the bookmark updates. 1898 SetEncryptionPassphrase(0, kValidPassphrase, ProfileSyncService::EXPLICIT); 1899 ASSERT_TRUE(AwaitPassphraseAccepted(GetSyncService((0)))); 1900 ASSERT_TRUE(EnableEncryption(0)); 1901 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 1902 ASSERT_TRUE(IsEncryptionComplete(0)); 1903 ASSERT_TRUE(IsEncryptionComplete(1)); 1904 ASSERT_TRUE(GetSyncService((1))->IsPassphraseRequired()); 1905 1906 // Client 1 adds bookmarks between the first two and between the second two. 1907 ASSERT_TRUE(AddURL(0, 1, IndexedURLTitle(3), GURL(IndexedURL(3))) != NULL); 1908 ASSERT_TRUE(AddURL(0, 3, IndexedURLTitle(4), GURL(IndexedURL(4))) != NULL); 1909 EXPECT_FALSE(AllModelsMatchVerifier()); 1910 EXPECT_FALSE(AllModelsMatch()); 1911 1912 // Set the passphrase. Everything should resolve. 1913 ASSERT_TRUE(AwaitPassphraseRequired(GetSyncService((1)))); 1914 ASSERT_TRUE(SetDecryptionPassphrase(1, kValidPassphrase)); 1915 ASSERT_TRUE(AwaitPassphraseAccepted(GetSyncService((1)))); 1916 ASSERT_TRUE(AwaitQuiescence()); 1917 EXPECT_TRUE(AllModelsMatch()); 1918 ASSERT_EQ(0, 1919 GetClient(1)->GetLastSessionSnapshot().num_encryption_conflicts()); 1920 1921 // Ensure everything is syncing normally by appending a final bookmark. 1922 ASSERT_TRUE(AddURL(1, 5, IndexedURLTitle(5), GURL(IndexedURL(5))) != NULL); 1923 ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0))); 1924 EXPECT_TRUE(AllModelsMatch()); 1925 ASSERT_EQ(0, 1926 GetClient(1)->GetLastSessionSnapshot().num_encryption_conflicts()); 1927} 1928 1929// Deliberately racy rearranging of bookmarks to test that our conflict resolver 1930// code results in a consistent view across machines (no matter what the final 1931// order is). 1932IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, RacyPositionChanges) { 1933 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1934 ASSERT_TRUE(AllModelsMatchVerifier()); 1935 1936 // Add initial bookmarks. 1937 size_t num_bookmarks = 5; 1938 for (size_t i = 0; i < num_bookmarks; ++i) { 1939 ASSERT_TRUE(AddURL(0, i, IndexedURLTitle(i), GURL(IndexedURL(i))) != NULL); 1940 } 1941 1942 // Once we make diverging changes the verifer is helpless. 1943 ASSERT_TRUE(AwaitQuiescence()); 1944 ASSERT_TRUE(AllModelsMatchVerifier()); 1945 DisableVerifier(); 1946 1947 // Make changes on client 0. 1948 for (size_t i = 0; i < num_bookmarks; ++i) { 1949 const BookmarkNode* node = GetUniqueNodeByURL(0, GURL(IndexedURL(i))); 1950 int rand_pos = base::RandInt(0, num_bookmarks-1); 1951 DVLOG(1) << "Moving client 0's bookmark " << i << " to position " 1952 << rand_pos; 1953 Move(0, node, node->parent(), rand_pos); 1954 } 1955 1956 // Make changes on client 1. 1957 for (size_t i = 0; i < num_bookmarks; ++i) { 1958 const BookmarkNode* node = GetUniqueNodeByURL(1, GURL(IndexedURL(i))); 1959 int rand_pos = base::RandInt(0, num_bookmarks-1); 1960 DVLOG(1) << "Moving client 1's bookmark " << i << " to position " 1961 << rand_pos; 1962 Move(1, node, node->parent(), rand_pos); 1963 } 1964 1965 ASSERT_TRUE(AwaitQuiescence()); 1966 ASSERT_TRUE(AllModelsMatch()); 1967 1968 // Now make changes to client 1 first. 1969 for (size_t i = 0; i < num_bookmarks; ++i) { 1970 const BookmarkNode* node = GetUniqueNodeByURL(1, GURL(IndexedURL(i))); 1971 int rand_pos = base::RandInt(0, num_bookmarks-1); 1972 DVLOG(1) << "Moving client 1's bookmark " << i << " to position " 1973 << rand_pos; 1974 Move(1, node, node->parent(), rand_pos); 1975 } 1976 1977 // Make changes on client 0. 1978 for (size_t i = 0; i < num_bookmarks; ++i) { 1979 const BookmarkNode* node = GetUniqueNodeByURL(0, GURL(IndexedURL(i))); 1980 int rand_pos = base::RandInt(0, num_bookmarks-1); 1981 DVLOG(1) << "Moving client 0's bookmark " << i << " to position " 1982 << rand_pos; 1983 Move(0, node, node->parent(), rand_pos); 1984 } 1985 1986 ASSERT_TRUE(AwaitQuiescence()); 1987 ASSERT_TRUE(AllModelsMatch()); 1988} 1989 1990// Trigger the server side creation of Synced Bookmarks. Ensure both clients 1991// remain syncing afterwards. Add bookmarks to the synced bookmarks folder 1992// and ensure both clients receive the boomkmark. 1993IN_PROC_BROWSER_TEST_F(LegacyTwoClientBookmarksSyncTest, 1994 CreateSyncedBookmarks) { 1995 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 1996 ASSERT_TRUE(AllModelsMatchVerifier()); 1997 1998 TriggerCreateSyncedBookmarks(); 1999 2000 // Add a bookmark on Client 0 and ensure it syncs over. This will also trigger 2001 // both clients downloading the new Synced Bookmarks folder. 2002 ASSERT_TRUE(AddURL(0, "Google", GURL("http://www.google.com"))); 2003 ASSERT_TRUE(AwaitQuiescence()); 2004 ASSERT_TRUE(AllModelsMatch()); 2005 2006 // Now add a bookmark within the Synced Bookmarks folder and ensure it syncs 2007 // over. 2008 const BookmarkNode* synced_bookmarks = GetSyncedBookmarksNode(0); 2009 ASSERT_TRUE(synced_bookmarks); 2010 ASSERT_TRUE(AddURL(0, synced_bookmarks, 0, "Google2", 2011 GURL("http://www.google2.com"))); 2012 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 2013 ASSERT_TRUE(AllModelsMatch()); 2014} 2015 2016IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, 2017 BookmarkAllNodesRemovedEvent) { 2018 2019 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 2020 ASSERT_TRUE(AllModelsMatchVerifier()); 2021 2022 // Starting state: 2023 // other_node 2024 // -> folder0 2025 // -> tier1_a 2026 // -> http://mail.google.com 2027 // -> http://www.google.com 2028 // -> http://news.google.com 2029 // -> http://yahoo.com 2030 // -> http://www.cnn.com 2031 // bookmark_bar 2032 // -> empty_folder 2033 // -> folder1 2034 // -> http://yahoo.com 2035 // -> http://gmail.com 2036 2037 const BookmarkNode* folder0 = AddFolder(0, GetOtherNode(0), 0, "folder0"); 2038 const BookmarkNode* tier1_a = AddFolder(0, folder0, 0, "tier1_a"); 2039 ASSERT_TRUE(AddURL(0, folder0, 1, "News", GURL("http://news.google.com"))); 2040 ASSERT_TRUE(AddURL(0, folder0, 2, "Yahoo", GURL("http://www.yahoo.com"))); 2041 ASSERT_TRUE(AddURL(0, tier1_a, 0, "Gmai", GURL("http://mail.google.com"))); 2042 ASSERT_TRUE(AddURL(0, tier1_a, 1, "Google", GURL("http://www.google.com"))); 2043 ASSERT_TRUE( 2044 AddURL(0, GetOtherNode(0), 1, "CNN", GURL("http://www.cnn.com"))); 2045 2046 ASSERT_TRUE(AddFolder(0, GetBookmarkBarNode(0), 0, "empty_folder")); 2047 const BookmarkNode* folder1 = 2048 AddFolder(0, GetBookmarkBarNode(0), 1, "folder1"); 2049 ASSERT_TRUE(AddURL(0, folder1, 0, "Yahoo", GURL("http://www.yahoo.com"))); 2050 ASSERT_TRUE( 2051 AddURL(0, GetBookmarkBarNode(0), 2, "Gmai", GURL("http://gmail.com"))); 2052 2053 ASSERT_TRUE(AwaitQuiescence()); 2054 ASSERT_TRUE(AllModelsMatch()); 2055 2056 // Remove all 2057 RemoveAll(0); 2058 2059 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 2060 // Verify other node has no children now. 2061 EXPECT_EQ(0, GetOtherNode(0)->child_count()); 2062 EXPECT_EQ(0, GetBookmarkBarNode(0)->child_count()); 2063 ASSERT_TRUE(AllModelsMatch()); 2064} 2065 2066// Verifies that managed bookmarks (installed by policy) don't get synced. 2067IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, ManagedBookmarks) { 2068 // Make sure the first Profile has an overridden policy provider. 2069 EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_)) 2070 .WillRepeatedly(testing::Return(true)); 2071 policy::ProfilePolicyConnectorFactory::GetInstance()->PushProviderForTesting( 2072 &policy_provider_); 2073 2074 // Set up sync. 2075 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; 2076 ASSERT_TRUE(AllModelsMatchVerifier()); 2077 2078 // Verify that there are no managed bookmarks at startup in either profile. 2079 // The Managed Bookmarks folder should not be visible at this stage. 2080 const BookmarkNode* managed_node0 = GetManagedNode(0); 2081 ASSERT_TRUE(managed_node0->empty()); 2082 ASSERT_FALSE(managed_node0->IsVisible()); 2083 const BookmarkNode* managed_node1 = GetManagedNode(1); 2084 ASSERT_TRUE(managed_node1->empty()); 2085 ASSERT_FALSE(managed_node1->IsVisible()); 2086 2087 // Verify that the bookmark bar node is empty on both profiles too. 2088 const BookmarkNode* bar_node0 = GetBookmarkBarNode(0); 2089 ASSERT_TRUE(bar_node0->empty()); 2090 ASSERT_TRUE(bar_node0->IsVisible()); 2091 const BookmarkNode* bar_node1 = GetBookmarkBarNode(1); 2092 ASSERT_TRUE(bar_node1->empty()); 2093 ASSERT_TRUE(bar_node1->IsVisible()); 2094 2095 // Verify that adding a bookmark is observed by the second Profile. 2096 GURL google_url("http://www.google.com"); 2097 ASSERT_TRUE(AddURL(0, "Google", google_url) != NULL); 2098 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 2099 ASSERT_TRUE(AllModelsMatchVerifier()); 2100 ASSERT_EQ(1, bar_node0->child_count()); 2101 ASSERT_EQ(1, bar_node1->child_count()); 2102 2103 // Set the ManagedBookmarks policy for the first Profile, 2104 // which will add one new managed bookmark. 2105 base::DictionaryValue* bookmark = new base::DictionaryValue(); 2106 bookmark->SetString("name", "Managed bookmark"); 2107 bookmark->SetString("url", "youtube.com"); 2108 base::ListValue* list = new base::ListValue(); 2109 list->Append(bookmark); 2110 policy::PolicyMap policy; 2111 policy.Set(policy::key::kManagedBookmarks, 2112 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER, 2113 list, NULL); 2114 policy_provider_.UpdateChromePolicy(policy); 2115 base::RunLoop().RunUntilIdle(); 2116 2117 // Now add another user bookmark and wait for it to sync. 2118 ASSERT_TRUE(AddURL(0, "Google 2", google_url) != NULL); 2119 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); 2120 ASSERT_TRUE(AllModelsMatchVerifier()); 2121 2122 EXPECT_FALSE(GetSyncService(0)->HasUnrecoverableError()); 2123 EXPECT_FALSE(GetSyncService(1)->HasUnrecoverableError()); 2124 2125 // Verify that the managed bookmark exists in the local model of the first 2126 // Profile, and has a child node. 2127 ASSERT_EQ(1, managed_node0->child_count()); 2128 ASSERT_TRUE(managed_node0->IsVisible()); 2129 EXPECT_EQ(GURL("http://youtube.com/"), managed_node0->GetChild(0)->url()); 2130 2131 // Verify that the second Profile didn't get this node. 2132 ASSERT_EQ(0, managed_node1->child_count()); 2133} 2134