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