15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/rand_util.h"
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/run_loop.h"
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/values.h"
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/policy/profile_policy_connector_factory.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/test/integration/bookmarks_helper.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/test/integration/passwords_helper.h"
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/sync/test/integration/sync_integration_test_util.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/test/integration/sync_test.h"
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/policy/core/common/mock_configuration_policy_provider.h"
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/policy/core/common/policy_map.h"
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "policy/policy_constants.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/internal_api/public/sessions/sync_session_snapshot.h"
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "testing/gmock/include/gmock/gmock.h"
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/layout.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::AddFolder;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::AddURL;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::AllModelsMatch;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::AllModelsMatchVerifier;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::ContainsDuplicateBookmarks;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::CountBookmarksWithTitlesMatching;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::CreateFavicon;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::GetBookmarkBarNode;
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing bookmarks_helper::GetManagedNode;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::GetOtherNode;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::GetSyncedBookmarksNode;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::GetUniqueNodeByURL;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::HasNodeWithURL;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::IndexedFolderName;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::IndexedSubfolderName;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::IndexedSubsubfolderName;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::IndexedURL;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::IndexedURLTitle;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::Move;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::Remove;
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using bookmarks_helper::RemoveAll;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::ReverseChildOrder;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::SetFavicon;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::SetTitle;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::SetURL;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using bookmarks_helper::SortChildren;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using passwords_helper::SetDecryptionPassphrase;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using passwords_helper::SetEncryptionPassphrase;
50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochusing sync_integration_test_util::AwaitCommitActivityCompletion;
51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochusing sync_integration_test_util::AwaitPassphraseAccepted;
52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochusing sync_integration_test_util::AwaitPassphraseRequired;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace {
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kGenericURL[] = "http://www.host.ext:1234/path/filename";
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kGenericURLTitle[] = "URL Title";
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kGenericFolderName[] = "Folder Name";
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kGenericSubfolderName[] = "Subfolder Name";
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kValidPassphrase[] = "passphrase!";
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TwoClientBookmarksSyncTest : public SyncTest {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TwoClientBookmarksSyncTest() : SyncTest(TWO_CLIENT) {}
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~TwoClientBookmarksSyncTest() {}
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void TearDownInProcessBrowserTestFixture() OVERRIDE {
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    SyncTest::TearDownInProcessBrowserTestFixture();
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    policy_provider_.Shutdown();
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected:
751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Needs to be deleted after all Profiles are deleted.
761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  policy::MockConfigurationPolicyProvider policy_provider_;
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TwoClientBookmarksSyncTest);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
82c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass LegacyTwoClientBookmarksSyncTest : public SyncTest {
83c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public:
84c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  LegacyTwoClientBookmarksSyncTest() : SyncTest(TWO_CLIENT_LEGACY) {}
85c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual ~LegacyTwoClientBookmarksSyncTest() {}
86c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
87c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch private:
88c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  DISALLOW_COPY_AND_ASSIGN(LegacyTwoClientBookmarksSyncTest);
89c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch};
90c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, Sanity) {
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL google_url("http://www.google.com");
96f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, "Google", google_url) != NULL);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
98f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(AddURL(1, "Yahoo", GURL("http://www.yahoo.com")) != NULL);
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0)));
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
102f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  const BookmarkNode* new_folder = AddFolder(0, 2, "New Folder");
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Move(0, GetUniqueNodeByURL(0, google_url), new_folder, 0);
104f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SetTitle(0, GetBookmarkBarNode(0)->GetChild(0), "Yahoo!!");
105f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, GetBookmarkBarNode(0), 1, "CNN",
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL("http://www.cnn.com")) != NULL);
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
110f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(AddURL(1, "Facebook", GURL("http://www.facebook.com")) != NULL);
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0)));
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SortChildren(1, GetBookmarkBarNode(1));
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0)));
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DisableVerifier();
119f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SetTitle(0, GetUniqueNodeByURL(0, google_url), "Google++");
120f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SetTitle(1, GetUniqueNodeByURL(1, google_url), "Google--");
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SimultaneousURLChanges) {
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL initial_url("http://www.google.com");
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL second_url("http://www.google.com/abc");
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL third_url("http://www.google.com/def");
132f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::string title = "Google";
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, title, initial_url) != NULL);
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DisableVerifier();
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetURL(
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      0, GetUniqueNodeByURL(0, initial_url), second_url) != NULL);
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetURL(
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      1, GetUniqueNodeByURL(1, initial_url), third_url) != NULL);
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SetTitle(0, GetBookmarkBarNode(0)->GetChild(0), "Google1");
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 370558.
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_AddFirstFolder) {
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddFolder(0, kGenericFolderName) != NULL);
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 370559.
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_AddFirstBMWithoutFavicon) {
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, kGenericURLTitle, GURL(kGenericURL)) != NULL);
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 370489.
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_AddFirstBMWithFavicon) {
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const GURL page_url(kGenericURL);
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const GURL icon_url("http://www.google.com/favicon.ico");
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const BookmarkNode* bookmark = AddURL(0, kGenericURLTitle, page_url);
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(bookmark != NULL);
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetFavicon(0, bookmark, icon_url, CreateFavicon(SK_ColorWHITE),
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)             bookmarks_helper::FROM_UI);
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Test that the history service logic for not losing the hidpi versions of
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// favicons as a result of sync does not result in dropping sync updates.
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// In particular, the synced 16x16 favicon bitmap should overwrite 16x16
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// favicon bitmaps on all clients. (Though non-16x16 favicon bitmaps
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// are unchanged).
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_SetFaviconHiDPI) {
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Set the supported scale factors to include 2x such that CreateFavicon()
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // creates a favicon with hidpi representations and that methods in the
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // FaviconService request hidpi favicons.
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::vector<ui::ScaleFactor> supported_scale_factors;
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  supported_scale_factors.push_back(ui::SCALE_FACTOR_100P);
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  supported_scale_factors.push_back(ui::SCALE_FACTOR_200P);
20168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui::SetSupportedScaleFactors(supported_scale_factors);
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const GURL page_url(kGenericURL);
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const GURL icon_url1("http://www.google.com/favicon1.ico");
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const GURL icon_url2("http://www.google.com/favicon2.ico");
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const BookmarkNode* bookmark0 = AddURL(0, kGenericURLTitle, page_url);
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(bookmark0 != NULL);
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetFavicon(0, bookmark0, icon_url1, CreateFavicon(SK_ColorWHITE),
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)             bookmarks_helper::FROM_UI);
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const BookmarkNode* bookmark1 = GetUniqueNodeByURL(1, page_url);
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetFavicon(1, bookmark1, icon_url1, CreateFavicon(SK_ColorBLUE),
2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)             bookmarks_helper::FROM_UI);
2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0)));
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetFavicon(0, bookmark0, icon_url2, CreateFavicon(SK_ColorGREEN),
2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)             bookmarks_helper::FROM_UI);
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 370560.
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_AddNonHTTPBMs) {
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(
236f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      0, "FTP UR", GURL("ftp://user:password@host:1234/path")) != NULL);
237f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, "File UR", GURL("file://host/path")) != NULL);
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 370561.
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_AddFirstBMUnderFolder) {
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder = AddFolder(0, kGenericFolderName);
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder != NULL);
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      0, folder, 0, kGenericURLTitle, GURL(kGenericURL)) != NULL);
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 370562.
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_AddSeveralBMsUnderBMBarAndOtherBM) {
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 20; ++i) {
263f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, i, title, url) != NULL);
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        0, GetOtherNode(0), i, title, url) != NULL);
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 370563.
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_AddSeveralBMsAndFolders) {
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 15; ++i) {
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (base::RandDouble() > 0.6) {
281f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedURLTitle(i);
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL url = GURL(IndexedURL(i));
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddURL(0, i, title, url) != NULL);
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
285f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedFolderName(i);
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const BookmarkNode* folder = AddFolder(0, i, title);
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(folder != NULL);
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (base::RandDouble() > 0.4) {
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        for (int i = 0; i < 20; ++i) {
290f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)          std::string title = IndexedURLTitle(i);
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          GURL url = GURL(IndexedURL(i));
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ASSERT_TRUE(
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              AddURL(0, folder, i, title, url) != NULL);
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 10; i++) {
299f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, GetOtherNode(0), i, title, url) != NULL);
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 370641.
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_DuplicateBMWithDifferentURLSameName) {
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url0 = GURL(IndexedURL(0));
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url1 = GURL(IndexedURL(1));
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, kGenericURLTitle, url0) != NULL);
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, kGenericURLTitle, url1) != NULL);
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 370639 - Add bookmarks with different name and same URL.
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_DuplicateBookmarksWithSameURL) {
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
327f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::string title0 = IndexedURLTitle(0);
328f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::string title1 = IndexedURLTitle(1);
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, title0, GURL(kGenericURL)) != NULL);
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, title1, GURL(kGenericURL)) != NULL);
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371817.
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_RenameBMName) {
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
340f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::string title = IndexedURLTitle(1);
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* bookmark = AddURL(0, title, GURL(kGenericURL));
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(bookmark != NULL);
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
346f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::string new_title = IndexedURLTitle(2);
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetTitle(0, bookmark, new_title);
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371822.
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_RenameBMURL) {
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url = GURL(IndexedURL(1));
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* bookmark = AddURL(0, kGenericURLTitle, url);
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(bookmark != NULL);
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL new_url = GURL(IndexedURL(2));
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetURL(0, bookmark, new_url) != NULL);
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371818 - Renaming the same bookmark name twice.
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_TwiceRenamingBookmarkName) {
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
376f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::string title = IndexedURLTitle(1);
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* bookmark = AddURL(0, title, GURL(kGenericURL));
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(bookmark != NULL);
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
382f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::string new_title = IndexedURLTitle(2);
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetTitle(0, bookmark, new_title);
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetTitle(0, bookmark, title);
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371823 - Renaming the same bookmark URL twice.
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_TwiceRenamingBookmarkURL) {
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url = GURL(IndexedURL(1));
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* bookmark = AddURL(0, kGenericURLTitle, url);
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(bookmark != NULL);
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL new_url = GURL(IndexedURL(2));
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetURL(0, bookmark, new_url) != NULL);
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetURL(0, bookmark, url) != NULL);
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371824.
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_RenameBMFolder) {
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
419f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::string title = IndexedFolderName(1);
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder = AddFolder(0, title);
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      0, folder, 0, kGenericURLTitle, GURL(kGenericURL)) != NULL);
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
426f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::string new_title = IndexedFolderName(2);
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetTitle(0, folder, new_title);
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371825.
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_RenameEmptyBMFolder) {
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
437f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::string title = IndexedFolderName(1);
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder = AddFolder(0, title);
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
442f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::string new_title = IndexedFolderName(2);
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetTitle(0, folder, new_title);
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371826.
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_RenameBMFolderWithLongHierarchy) {
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
454f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::string title = IndexedFolderName(1);
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder = AddFolder(0, title);
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder != NULL);
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 120; ++i) {
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (base::RandDouble() > 0.15) {
459f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedURLTitle(i);
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL url = GURL(IndexedURL(i));
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL);
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
463f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedSubfolderName(i);
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddFolder(0, folder, i, title) != NULL);
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
470f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::string new_title = IndexedFolderName(2);
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetTitle(0, folder, new_title);
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371827.
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_RenameBMFolderThatHasParentAndChildren) {
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder = AddFolder(0, kGenericFolderName);
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder != NULL);
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 1; i < 15; ++i) {
485f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, i, title, url) != NULL);
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
489f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::string title = IndexedSubfolderName(1);
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* subfolder = AddFolder(0, folder, 0, title);
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 120; ++i) {
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (base::RandDouble() > 0.15) {
493f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedURLTitle(i);
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL url = GURL(IndexedURL(i));
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddURL(0, subfolder, i, title, url) != NULL);
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
497f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedSubsubfolderName(i);
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddFolder(0, subfolder, i, title) != NULL);
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
504f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::string new_title = IndexedSubfolderName(2);
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetTitle(0, subfolder, new_title);
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371828.
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_RenameBMNameAndURL) {
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url = GURL(IndexedURL(1));
516f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::string title = IndexedURLTitle(1);
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* bookmark = AddURL(0, title, url);
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(bookmark != NULL);
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL new_url = GURL(IndexedURL(2));
523f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::string new_title = IndexedURLTitle(2);
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bookmark = SetURL(0, bookmark, new_url);
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(bookmark != NULL);
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetTitle(0, bookmark, new_title);
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371832.
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_DeleteBMEmptyAccountAfterwards) {
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      0, kGenericURLTitle, GURL(kGenericURL)) != NULL);
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Remove(0, GetBookmarkBarNode(0), 0);
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371833.
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_DelBMNonEmptyAccountAfterwards) {
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 20; ++i) {
554f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, i, title, url) != NULL);
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Remove(0, GetBookmarkBarNode(0), 0);
5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371835.
5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_DelFirstBMUnderBMFoldNonEmptyFoldAfterwards) {
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder = AddFolder(0, kGenericFolderName);
5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder != NULL);
5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 10; ++i) {
575f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL);
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Remove(0, folder, 0);
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371836.
5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_DelLastBMUnderBMFoldNonEmptyFoldAfterwards) {
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder = AddFolder(0, kGenericFolderName);
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder != NULL);
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 10; ++i) {
596f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL);
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Remove(0, folder, folder->child_count() - 1);
6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371856.
6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_DelMiddleBMUnderBMFoldNonEmptyFoldAfterwards) {
6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder = AddFolder(0, kGenericFolderName);
6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder != NULL);
6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 10; ++i) {
617f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL);
6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Remove(0, folder, 4);
6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371857.
6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_DelBMsUnderBMFoldEmptyFolderAfterwards) {
6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder = AddFolder(0, kGenericFolderName);
6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder != NULL);
6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 10; ++i) {
638f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL);
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int child_count = folder->child_count();
6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < child_count; ++i) {
6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Remove(0, folder, 0);
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371858.
6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_DelEmptyBMFoldEmptyAccountAfterwards) {
6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddFolder(0, kGenericFolderName) != NULL);
6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Remove(0, GetBookmarkBarNode(0), 0);
6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371869.
6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_DelEmptyBMFoldNonEmptyAccountAfterwards) {
6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddFolder(0, kGenericFolderName) != NULL);
6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 1; i < 15; ++i) {
6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (base::RandDouble() > 0.6) {
677f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedURLTitle(i);
6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL url = GURL(IndexedURL(i));
6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddURL(0, i, title, url) != NULL);
6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
681f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedFolderName(i);
6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddFolder(0, i, title) != NULL);
6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Remove(0, GetBookmarkBarNode(0), 0);
6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371879.
6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_DelBMFoldWithBMsNonEmptyAccountAfterwards) {
6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, kGenericURLTitle, GURL(kGenericURL)) != NULL);
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder = AddFolder(0, 1, kGenericFolderName);
7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder != NULL);
7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 2; i < 10; ++i) {
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (base::RandDouble() > 0.6) {
704f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedURLTitle(i);
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL url = GURL(IndexedURL(i));
7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddURL(0, i, title, url) != NULL);
7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
708f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedFolderName(i);
7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddFolder(0, i, title) != NULL);
7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 15; ++i) {
713f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL);
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Remove(0, GetBookmarkBarNode(0), 1);
7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371880.
7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_DelBMFoldWithBMsAndBMFoldsNonEmptyACAfterwards) {
7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, kGenericURLTitle, GURL(kGenericURL)) != NULL);
7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder = AddFolder(0, 1, kGenericFolderName);
7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder != NULL);
7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 2; i < 10; ++i) {
7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (base::RandDouble() > 0.6) {
736f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedURLTitle(i);
7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL url = GURL(IndexedURL(i));
7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddURL(0, i, title, url) != NULL);
7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
740f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedFolderName(i);
7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddFolder(0, i, title) != NULL);
7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 10; ++i) {
7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (base::RandDouble() > 0.6) {
746f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedURLTitle(i);
7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL url = GURL(IndexedURL(i));
7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL);
7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
750f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedSubfolderName(i);
7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const BookmarkNode* subfolder =
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          AddFolder(0, folder, i, title);
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(subfolder != NULL);
7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (base::RandDouble() > 0.3) {
7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        for (int j = 0; j < 10; ++j) {
7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          if (base::RandDouble() > 0.6) {
757f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)            std::string title = IndexedURLTitle(j);
7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GURL url = GURL(IndexedURL(j));
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            ASSERT_TRUE(AddURL(
7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                0, subfolder, j, title, url) != NULL);
7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          } else {
762f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)            std::string title = IndexedSubsubfolderName(j);
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            ASSERT_TRUE(AddFolder(
7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                0, subfolder, j, title) != NULL);
7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          }
7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Remove(0, GetBookmarkBarNode(0), 1);
7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371882.
7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_DelBMFoldWithParentAndChildrenBMsAndBMFolds) {
7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder = AddFolder(0, kGenericFolderName);
7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder != NULL);
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 1; i < 11; ++i) {
787f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, i, title, url) != NULL);
7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* subfolder =
7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AddFolder(0, folder, 0, kGenericSubfolderName);
7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(subfolder != NULL);
7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 30; ++i) {
7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (base::RandDouble() > 0.2) {
796f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedURLTitle(i);
7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL url = GURL(IndexedURL(i));
7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddURL(0, subfolder, i, title, url) != NULL);
7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
800f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedSubsubfolderName(i);
8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddFolder(0, subfolder, i, title) != NULL);
8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Remove(0, folder, 0);
8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371931.
8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_ReverseTheOrderOfTwoBMs) {
8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url0 = GURL(IndexedURL(0));
8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url1 = GURL(IndexedURL(1));
820f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::string title0 = IndexedURLTitle(0);
821f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::string title1 = IndexedURLTitle(1);
8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* bookmark0 = AddURL(0, 0, title0, url0);
8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* bookmark1 = AddURL(0, 1, title1, url1);
8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(bookmark0 != NULL);
8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(bookmark1 != NULL);
8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Move(0, bookmark0, GetBookmarkBarNode(0), 2);
8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371933.
8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_ReverseTheOrderOf10BMs) {
8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 10; ++i) {
840f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, i, title, url) != NULL);
8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ReverseChildOrder(0, GetBookmarkBarNode(0));
8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371954.
8531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// flaky on Windows: http://crbug.com/412169
8541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_WIN)
8551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define MAYBE_SC_MovingBMsFromBMBarToBMFolder DISABLED_SC_MovingBMsFromBMBarToBMFolder
8561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#else
8571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define MAYBE_SC_MovingBMsFromBMBarToBMFolder SC_MovingBMsFromBMBarToBMFolder
8581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif
8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
8601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                       MAYBE_SC_MovingBMsFromBMBarToBMFolder) {
8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, kGenericURLTitle, GURL(kGenericURL)) != NULL);
8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder = AddFolder(0, 1, kGenericFolderName);
8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder != NULL);
8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 2; i < 10; ++i) {
868f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, i, title, url) != NULL);
8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int num_bookmarks_to_move =
8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetBookmarkBarNode(0)->child_count() - 2;
8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < num_bookmarks_to_move; ++i) {
8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Move(
8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        0, GetBookmarkBarNode(0)->GetChild(2), folder, i);
8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AllModelsMatchVerifier());
8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371957.
8861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// flaky on Windows: http://crbug.com/412169
8871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_WIN)
8881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define MAYBE_SC_MovingBMsFromBMFoldToBMBar DISABLED_SC_MovingBMsFromBMFoldToBMBar
8891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#else
8901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define MAYBE_SC_MovingBMsFromBMFoldToBMBar SC_MovingBMsFromBMFoldToBMBar
8911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif
8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
8931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                       MAYBE_SC_MovingBMsFromBMFoldToBMBar) {
8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, kGenericURLTitle, GURL(kGenericURL)) != NULL);
8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder = AddFolder(0, 1, kGenericFolderName);
8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder != NULL);
9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 10; ++i) {
901f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL);
9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int num_bookmarks_to_move = folder->child_count() - 2;
9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < num_bookmarks_to_move; ++i) {
9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Move(0, folder->GetChild(0), GetBookmarkBarNode(0), i);
9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AllModelsMatchVerifier());
9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371961.
9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_MovingBMsFromParentBMFoldToChildBMFold) {
9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder = AddFolder(0, kGenericFolderName);
9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder != NULL);
9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 3; ++i) {
925f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL);
9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* subfolder =
9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AddFolder(0, folder, 3, kGenericSubfolderName);
9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(subfolder != NULL);
9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 10; ++i) {
933f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i + 3);
9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i + 3));
9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, subfolder, i, title, url) != NULL);
9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 3; ++i) {
9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Move(0, GetUniqueNodeByURL(0, url), subfolder, i + 10);
9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371964.
9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_MovingBMsFromChildBMFoldToParentBMFold) {
9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder = AddFolder(0, kGenericFolderName);
9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder != NULL);
9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 3; ++i) {
957f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL);
9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* subfolder =
9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AddFolder(0, folder, 3, kGenericSubfolderName);
9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(subfolder != NULL);
9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 5; ++i) {
965f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i + 3);
9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i + 3));
9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, subfolder, i, title, url) != NULL);
9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 3; ++i) {
9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i + 3));
9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Move(0, GetUniqueNodeByURL(0, url), folder, i + 4);
9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371967.
9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_HoistBMs10LevelUp) {
9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder = GetBookmarkBarNode(0);
9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder_L0 = NULL;
9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder_L10 = NULL;
9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int level = 0; level < 15; ++level) {
9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int num_bookmarks = base::RandInt(0, 9);
9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (int i = 0; i < num_bookmarks; ++i) {
991f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedURLTitle(i);
9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL url = GURL(IndexedURL(i));
9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL);
9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
995f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedFolderName(level);
9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    folder = AddFolder(0, folder, folder->child_count(), title);
9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(folder != NULL);
9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (level == 0) folder_L0 = folder;
9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (level == 10) folder_L10 = folder;
10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 3; ++i) {
1002f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i + 10);
10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i + 10));
10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, folder_L10, i, title, url) != NULL);
10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url10 = GURL(IndexedURL(10));
10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Move(0, GetUniqueNodeByURL(
10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      0, url10), folder_L0, folder_L0->child_count());
10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url11 = GURL(IndexedURL(11));
10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Move(0, GetUniqueNodeByURL(0, url11), folder_L0, 0);
10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url12 = GURL(IndexedURL(12));
10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Move(0, GetUniqueNodeByURL(0, url12), folder_L0, 1);
10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371968.
10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flaky. http://crbug.com/107744.
1022c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_SinkBMs10LevelDown) {
10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder = GetBookmarkBarNode(0);
10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder_L0 = NULL;
10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder_L10 = NULL;
10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int level = 0; level < 15; ++level) {
10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int num_bookmarks = base::RandInt(0, 9);
10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (int i = 0; i < num_bookmarks; ++i) {
1032f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedURLTitle(i);
10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL url = GURL(IndexedURL(i));
10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL);
10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1036f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedFolderName(level);
10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    folder = AddFolder(0, folder, folder->child_count(), title);
10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(folder != NULL);
10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (level == 0) folder_L0 = folder;
10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (level == 10) folder_L10 = folder;
10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 3; ++i) {
1043f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i + 10);
10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i + 10));
10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, folder_L0, 0, title, url) != NULL);
10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url10 = GURL(IndexedURL(10));
10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Move(0, GetUniqueNodeByURL(0, url10), folder_L10, folder_L10->child_count());
10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url11 = GURL(IndexedURL(11));
10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Move(0, GetUniqueNodeByURL(0, url11), folder_L10, 0);
10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url12 = GURL(IndexedURL(12));
10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Move(0, GetUniqueNodeByURL(0, url12), folder_L10, 1);
10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371980.
10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_SinkEmptyBMFold5LevelsDown) {
10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder = GetBookmarkBarNode(0);
10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder_L5 = NULL;
10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int level = 0; level < 15; ++level) {
10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int num_bookmarks = base::RandInt(0, 9);
10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (int i = 0; i < num_bookmarks; ++i) {
1071f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedURLTitle(i);
10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL url = GURL(IndexedURL(i));
10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL);
10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1075f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedFolderName(level);
10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    folder = AddFolder(
10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        0, folder, folder->child_count(), title);
10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(folder != NULL);
10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (level == 5) folder_L5 = folder;
10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  folder = AddFolder(
10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      0, GetBookmarkBarNode(0)->child_count(), kGenericFolderName);
10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder != NULL);
10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Move(0, folder, folder_L5, folder_L5->child_count());
10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 371997.
10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_SinkNonEmptyBMFold5LevelsDown) {
10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder = GetBookmarkBarNode(0);
10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder_L5 = NULL;
11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int level = 0; level < 6; ++level) {
11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int num_bookmarks = base::RandInt(0, 9);
11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (int i = 0; i < num_bookmarks; ++i) {
1103f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedURLTitle(i);
11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL url = GURL(IndexedURL(i));
11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL);
11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1107f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedFolderName(level);
11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    folder = AddFolder(0, folder, folder->child_count(), title);
11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(folder != NULL);
11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (level == 5) folder_L5 = folder;
11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  folder = AddFolder(
11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      0, GetBookmarkBarNode(0)->child_count(), kGenericFolderName);
11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder != NULL);
11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 10; ++i) {
1116f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL);
11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Move(0, folder, folder_L5, folder_L5->child_count());
11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 372006.
11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_HoistFolder5LevelsUp) {
11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder = GetBookmarkBarNode(0);
11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder_L5 = NULL;
11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int level = 0; level < 6; ++level) {
11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int num_bookmarks = base::RandInt(0, 9);
11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (int i = 0; i < num_bookmarks; ++i) {
1139f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedURLTitle(i);
11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL url = GURL(IndexedURL(i));
11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL);
11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1143f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedFolderName(level);
11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    folder = AddFolder(
11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        0, folder, folder->child_count(), title);
11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(folder != NULL);
11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (level == 5) folder_L5 = folder;
11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  folder = AddFolder(
11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      0, folder_L5, folder_L5->child_count(), kGenericFolderName);
11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder != NULL);
11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 10; ++i) {
1153f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, folder, i, title, url) != NULL);
11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Move(0, folder, GetBookmarkBarNode(0), GetBookmarkBarNode(0)->child_count());
11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 372026.
11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_ReverseTheOrderOfTwoBMFolders) {
11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 2; ++i) {
1172f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedFolderName(i);
11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const BookmarkNode* folder = AddFolder(0, i, title);
11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(folder != NULL);
11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (int j = 0; j < 10; ++j) {
1176f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedURLTitle(j);
11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL url = GURL(IndexedURL(j));
11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddURL(0, folder, j, title, url) != NULL);
11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ReverseChildOrder(0, GetBookmarkBarNode(0));
11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 372028.
11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SC_ReverseTheOrderOfTenBMFolders) {
11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 10; ++i) {
1196f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedFolderName(i);
11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const BookmarkNode* folder = AddFolder(0, i, title);
11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(folder != NULL);
11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (int j = 0; j < 10; ++j) {
1200f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedURLTitle(1000 * i + j);
12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL url = GURL(IndexedURL(j));
12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddURL(0, folder, j, title, url) != NULL);
12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ReverseChildOrder(0, GetBookmarkBarNode(0));
12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 373379.
12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       MC_BiDirectionalPushAddingBM) {
12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DisableVerifier();
12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 2; ++i) {
1221f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title0 = IndexedURLTitle(2*i);
12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url0 = GURL(IndexedURL(2*i));
12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, title0, url0) != NULL);
1224f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title1 = IndexedURLTitle(2*i+1);
12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url1 = GURL(IndexedURL(2*i+1));
12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(1, title1, url1) != NULL);
12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(ContainsDuplicateBookmarks(0));
12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 373503.
12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       MC_BiDirectionalPush_AddingSameBMs) {
12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Note: When a racy commit is done with identical bookmarks, it is possible
12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // for duplicates to exist after sync completes. See http://crbug.com/19769.
12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DisableVerifier();
12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 2; ++i) {
1243f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, title, url) != NULL);
12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(1, title, url) != NULL);
12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 373506.
12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       MC_BootStrapEmptyStateEverywhere) {
12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 373505.
12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       MC_Merge_CaseInsensitivity_InNames) {
12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients()) << "SetupClients() failed.";
12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DisableVerifier();
12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1266f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  const BookmarkNode* folder0 = AddFolder(0, "Folder");
12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder0 != NULL);
1268f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, folder0, 0, "Bookmark 0", GURL(kGenericURL)) != NULL);
1269f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, folder0, 1, "Bookmark 1", GURL(kGenericURL)) != NULL);
1270f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, folder0, 2, "Bookmark 2", GURL(kGenericURL)) != NULL);
12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1272f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  const BookmarkNode* folder1 = AddFolder(1, "fOlDeR");
12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder1 != NULL);
1274f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(AddURL(1, folder1, 0, "bOoKmArK 0", GURL(kGenericURL)) != NULL);
1275f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(AddURL(1, folder1, 1, "BooKMarK 1", GURL(kGenericURL)) != NULL);
1276f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(AddURL(1, folder1, 2, "bOOKMARK 2", GURL(kGenericURL)) != NULL);
12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(ContainsDuplicateBookmarks(0));
12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 373508.
12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       MC_SimpleMergeOfDifferentBMModels) {
12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients()) << "SetupClients() failed.";
12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DisableVerifier();
12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 3; ++i) {
1291f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, i, title, url) != NULL);
12945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(1, i, title, url) != NULL);
12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 3; i < 10; ++i) {
1298f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title0 = IndexedURLTitle(i);
12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url0 = GURL(IndexedURL(i));
13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, i, title0, url0) != NULL);
1301f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title1 = IndexedURLTitle(i+7);
13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url1 = GURL(IndexedURL(i+7));
13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(1, i, title1, url1) != NULL);
13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
13075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(ContainsDuplicateBookmarks(0));
13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 386586.
13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       MC_MergeSimpleBMHierarchyUnderBMBar) {
13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients()) << "SetupClients() failed.";
13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DisableVerifier();
13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 3; ++i) {
1319f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, i, title, url) != NULL);
13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(1, i, title, url) != NULL);
13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 3; i < 10; ++i) {
1326f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(1, i, title, url) != NULL);
13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(ContainsDuplicateBookmarks(0));
13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 386589.
13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       MC_MergeSimpleBMHierarchyEqualSetsUnderBMBar) {
13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients()) << "SetupClients() failed.";
13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DisableVerifier();
13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 3; ++i) {
1344f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, i, title, url) != NULL);
13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(1, i, title, url) != NULL);
13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(ContainsDuplicateBookmarks(0));
13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 373504 - Merge bookmark folders with different bookmarks.
13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       MC_MergeBMFoldersWithDifferentBMs) {
13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients()) << "SetupClients() failed.";
13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DisableVerifier();
13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder0 = AddFolder(0, kGenericFolderName);
13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder0 != NULL);
13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder1 = AddFolder(1, kGenericFolderName);
13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder1 != NULL);
13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 2; ++i) {
1367f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title0 = IndexedURLTitle(2*i);
13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url0 = GURL(IndexedURL(2*i));
13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, folder0, i, title0, url0) != NULL);
1370f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title1 = IndexedURLTitle(2*i+1);
13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url1 = GURL(IndexedURL(2*i+1));
13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(1, folder1, i, title1, url1) != NULL);
13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(ContainsDuplicateBookmarks(0));
13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Scribe ID - 373509 - Merge moderately complex bookmark models.
13815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       MC_MergeDifferentBMModelsModeratelyComplex) {
13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients()) << "SetupClients() failed.";
13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DisableVerifier();
13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 25; ++i) {
1387f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title0 = IndexedURLTitle(i);
13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url0 = GURL(IndexedURL(i));
13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, i, title0, url0) != NULL);
1390f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title1 = IndexedURLTitle(i+50);
13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url1 = GURL(IndexedURL(i+50));
13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(1, i, title1, url1) != NULL);
13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 25; i < 30; ++i) {
1395f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title0 = IndexedFolderName(i);
13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const BookmarkNode* folder0 = AddFolder(0, i, title0);
13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(folder0 != NULL);
1398f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title1 = IndexedFolderName(i+50);
13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const BookmarkNode* folder1 = AddFolder(1, i, title1);
14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(folder1 != NULL);
14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (int j = 0; j < 5; ++j) {
1402f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title0 = IndexedURLTitle(i+5*j);
14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL url0 = GURL(IndexedURL(i+5*j));
14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddURL(0, folder0, j, title0, url0) != NULL);
1405f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title1 = IndexedURLTitle(i+5*j+50);
14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL url1 = GURL(IndexedURL(i+5*j+50));
14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddURL(1, folder1, j, title1, url1) != NULL);
14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 100; i < 125; ++i) {
1411f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, title, url) != NULL);
14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(1, title, url) != NULL);
14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(ContainsDuplicateBookmarks(0));
14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TCM ID - 3675271 - Merge simple bookmark subset under bookmark folder.
14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       MC_MergeSimpleBMHierarchySubsetUnderBMFolder) {
14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients()) << "SetupClients() failed.";
14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DisableVerifier();
14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 2; ++i) {
14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const BookmarkNode* folder = AddFolder(i, kGenericFolderName);
14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(folder != NULL);
14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (int j = 0; j < 4; ++j) {
14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (base::RandDouble() < 0.5) {
1433f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        std::string title = IndexedURLTitle(j);
14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GURL url = GURL(IndexedURL(j));
14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ASSERT_TRUE(AddURL(i, folder, j, title, url) != NULL);
14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      } else {
1437f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        std::string title = IndexedFolderName(j);
14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ASSERT_TRUE(AddFolder(i, folder, j, title) != NULL);
14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(ContainsDuplicateBookmarks(0));
14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TCM ID - 3727284 - Merge subsets of bookmark under bookmark bar.
14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       MC_MergeSimpleBMHierarchySubsetUnderBookmarkBar) {
14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients()) << "SetupClients() failed.";
14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DisableVerifier();
14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 4; ++i) {
1455f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, i, title, url) != NULL);
14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int j = 0; j < 2; ++j) {
1461f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(j);
14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(j));
14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(1, j, title, url) != NULL);
14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(ContainsDuplicateBookmarks(0));
14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(ContainsDuplicateBookmarks(1));
14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TCM ID - 3659294 - Merge simple bookmark hierarchy under bookmark folder.
14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       MC_Merge_SimpleBMHierarchy_Under_BMFolder) {
14765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients()) << "SetupClients() failed.";
14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DisableVerifier();
14785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder0 = AddFolder(0, 0, kGenericFolderName);
14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder0 != NULL);
14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(
14825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      0, folder0, 0, IndexedURLTitle(1), GURL(IndexedURL(1))) != NULL);
14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddFolder(0, folder0, 1, IndexedSubfolderName(2)) != NULL);
14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(
14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      0, folder0, 2, IndexedURLTitle(3), GURL(IndexedURL(3))) != NULL);
14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddFolder(0, folder0, 3, IndexedSubfolderName(4)) != NULL);
14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder1 = AddFolder(1, 0, kGenericFolderName);
14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder1 != NULL);
14905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddFolder(1, folder1, 0, IndexedSubfolderName(0)) != NULL);
14915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddFolder(1, folder1, 1, IndexedSubfolderName(2)) != NULL);
14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(
14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      1, folder1, 2, IndexedURLTitle(3), GURL(IndexedURL(3))) != NULL);
14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddFolder(1, folder1, 3, IndexedSubfolderName(5)) != NULL);
14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(
14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      1, folder1, 4, IndexedURLTitle(1), GURL(IndexedURL(1))) != NULL);
14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
15015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(ContainsDuplicateBookmarks(0));
15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TCM ID - 3711273 - Merge disjoint sets of bookmark hierarchy under bookmark
15055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// folder.
15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       MC_Merge_SimpleBMHierarchy_DisjointSets_Under_BMFolder) {
15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients()) << "SetupClients() failed.";
15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DisableVerifier();
15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder0 =
15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AddFolder(0, 0, kGenericFolderName);
15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder0 != NULL);
15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(
15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      0, folder0, 0, IndexedURLTitle(1), GURL(IndexedURL(1))) != NULL);
15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddFolder(0, folder0, 1, IndexedSubfolderName(2)) != NULL);
15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(
15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      0, folder0, 2, IndexedURLTitle(3), GURL(IndexedURL(3))) != NULL);
15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddFolder(0, folder0, 3, IndexedSubfolderName(4)) != NULL);
15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder1 = AddFolder(1, 0, kGenericFolderName);
15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder1 != NULL);
15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddFolder(1, folder1, 0, IndexedSubfolderName(5)) != NULL);
15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddFolder(1, folder1, 1, IndexedSubfolderName(6)) != NULL);
15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(
15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      1, folder1, 2, IndexedURLTitle(7), GURL(IndexedURL(7))) != NULL);
15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(
15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      1, folder1, 3, IndexedURLTitle(8), GURL(IndexedURL(8))) != NULL);
15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(ContainsDuplicateBookmarks(0));
15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TCM ID - 3639296 - Merge disjoint sets of bookmark hierarchy under bookmark
15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// bar.
15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
15395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    MC_Merge_SimpleBMHierarchy_DisjointSets_Under_BookmarkBar) {
15405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients()) << "SetupClients() failed.";
15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DisableVerifier();
15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 3; ++i) {
1544f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i+1);
15455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i+1));
15465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, i, title, url) != NULL);
15475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
15485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int j = 0; j < 3; ++j) {
1550f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(j+4);
15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(j+4));
15525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, j, title, url) != NULL);
15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
15565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(ContainsDuplicateBookmarks(0));
15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TCM ID - 3616282 - Merge sets of duplicate bookmarks under bookmark bar.
15625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
15635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       MC_Merge_SimpleBMHierarchy_DuplicateBMs_Under_BMBar) {
15645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients()) << "SetupClients() failed.";
15655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DisableVerifier();
15665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Let's add duplicate set of bookmark {1,2,2,3,3,3,4,4,4,4} to client0.
15685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int node_index = 0;
15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 1; i < 5 ; ++i) {
15705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (int j = 0; j < i; ++j) {
1571f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedURLTitle(i);
15725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL url = GURL(IndexedURL(i));
15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddURL(0, node_index, title, url) != NULL);
15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ++node_index;
15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Let's add a set of bookmarks {1,2,3,4} to client1.
15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 4; ++i) {
1579f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i+1);
15805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i+1));
15815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(1, i, title, url) != NULL);
15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
15835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
15855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
15865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
15875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 1; i < 5 ; ++i) {
15895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(CountBookmarksWithTitlesMatching(1, IndexedURLTitle(i)) == i);
15905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
15915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TCM ID - 6593872.
15945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, DisableBookmarks) {
15955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
15965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
15975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(1)->DisableSyncForDatatype(syncer::BOOKMARKS));
15995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddFolder(1, kGenericFolderName) != NULL);
16005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
16015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(AllModelsMatch());
16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(1)->EnableSyncForDatatype(syncer::BOOKMARKS));
16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
16055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
16075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TCM ID - 7343544.
16095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, DisableSync) {
16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
16115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
16125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(1)->DisableSyncForAllDatatypes());
16145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddFolder(0, IndexedFolderName(0)) != NULL);
1615e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService((0))));
16165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(AllModelsMatch());
16175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddFolder(1, IndexedFolderName(1)) != NULL);
16195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(AllModelsMatch());
16205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(1)->EnableSyncForAllDatatypes());
16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
16235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
16245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
16255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TCM ID - 3662298 - Test adding duplicate folder - Both with different BMs
16275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// underneath.
16285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, MC_DuplicateFolders) {
16295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients()) << "SetupClients() failed.";
16305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DisableVerifier();
16315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder0 = AddFolder(0, kGenericFolderName);
16335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder0 != NULL);
16345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder1 = AddFolder(1, kGenericFolderName);
16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder1 != NULL);
16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 5; ++i) {
1637f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title0 = IndexedURLTitle(i);
16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url0 = GURL(IndexedURL(i));
16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, folder0, i, title0, url0) != NULL);
1640f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title1 = IndexedURLTitle(i+5);
16415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url1 = GURL(IndexedURL(i+5));
16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(1, folder1, i, title1, url1) != NULL);
16435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
16445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
16465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
16475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(ContainsDuplicateBookmarks(0));
16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1651010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// This test fails when run with FakeServer and FakeServerInvalidationService.
1652010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(LegacyTwoClientBookmarksSyncTest, MC_DeleteBookmark) {
16535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
16545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(1)->DisableSyncForDatatype(syncer::BOOKMARKS));
16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const GURL bar_url("http://example.com/bar");
16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const GURL other_url("http://example.com/other");
16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1659f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, GetBookmarkBarNode(0), 0, "bar", bar_url) != NULL);
1660f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, GetOtherNode(0), 0, "other", other_url) != NULL);
16615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1662e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService((0))));
16635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(HasNodeWithURL(0, bar_url));
16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(HasNodeWithURL(0, other_url));
16665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(HasNodeWithURL(1, bar_url));
16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(HasNodeWithURL(1, other_url));
16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Remove(0, GetBookmarkBarNode(0), 0);
1670e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService((0))));
16715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(HasNodeWithURL(0, bar_url));
16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(HasNodeWithURL(0, other_url));
16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(1)->EnableSyncForDatatype(syncer::BOOKMARKS));
16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
16775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(HasNodeWithURL(0, bar_url));
16795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(HasNodeWithURL(0, other_url));
16805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(HasNodeWithURL(1, bar_url));
16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(HasNodeWithURL(1, other_url));
16825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
16835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TCM ID - 3719307 - Test a scenario of updating the name of the same bookmark
16855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// from two clients at the same time.
16865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
16875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       MC_BookmarkNameChangeConflict) {
16885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
16895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder0 = AddFolder(0, kGenericFolderName);
16915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder0 != NULL);
16925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 3; ++i) {
1693f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
16945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
16955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, folder0, i, title, url) != NULL);
16965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
16975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
16985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
16995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(ContainsDuplicateBookmarks(0));
17005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DisableVerifier();
17025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url(IndexedURL(0));
1703f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SetTitle(0, GetUniqueNodeByURL(0, url), "Title++");
1704f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SetTitle(1, GetUniqueNodeByURL(1, url), "Title--");
17055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
17075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
17085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(ContainsDuplicateBookmarks(0));
17095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
17105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TCM ID - 3672299 - Test a scenario of updating the URL of the same bookmark
17125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// from two clients at the same time.
17135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
17145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       MC_BookmarkURLChangeConflict) {
17155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
17165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folder0 = AddFolder(0, kGenericFolderName);
17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder0 != NULL);
17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 3; ++i) {
1720f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, folder0, i, title, url) != NULL);
17235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
17245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
17255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
17265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(ContainsDuplicateBookmarks(0));
17275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DisableVerifier();
17295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url(IndexedURL(0));
17305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetURL(
17315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      0, GetUniqueNodeByURL(0, url), GURL("http://www.google.com/00")));
17325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetURL(
17335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      1, GetUniqueNodeByURL(1, url), GURL("http://www.google.com/11")));
17345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
17365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(ContainsDuplicateBookmarks(0));
17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TCM ID - 3699290 - Test a scenario of updating the BM Folder name from two
17415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// clients at the same time.
17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
17435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       MC_FolderNameChangeConflict) {
17445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupClients()) << "SetupClients() failed.";
17455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DisableVerifier();
17465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folderA[2];
17485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folderB[2];
17495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* folderC[2];
17505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create empty folder A on both clients.
17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  folderA[0] = AddFolder(0, IndexedFolderName(0));
17535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folderA[0] != NULL);
17545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  folderA[1] = AddFolder(1, IndexedFolderName(0));
17555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folderA[1] != NULL);
17565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create folder B with bookmarks on both clients.
17585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  folderB[0] = AddFolder(0, IndexedFolderName(1));
17595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folderB[0] != NULL);
17605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  folderB[1] = AddFolder(1, IndexedFolderName(1));
17615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folderB[1] != NULL);
17625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 3; ++i) {
1763f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string title = IndexedURLTitle(i);
17645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url = GURL(IndexedURL(i));
17655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, folderB[0], i, title, url) != NULL);
17665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
17675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create folder C with bookmarks and subfolders on both clients.
17695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  folderC[0] = AddFolder(0, IndexedFolderName(2));
17705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folderC[0] != NULL);
17715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  folderC[1] = AddFolder(1, IndexedFolderName(2));
17725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folderC[1] != NULL);
17735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 3; ++i) {
1774f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string folder_name = IndexedSubfolderName(i);
17755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const BookmarkNode* subfolder = AddFolder(0, folderC[0], i, folder_name);
17765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(subfolder != NULL);
17775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (int j = 0; j < 3; ++j) {
1778f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string title = IndexedURLTitle(j);
17795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL url = GURL(IndexedURL(j));
17805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(AddURL(0, subfolder, j, title, url) != NULL);
17815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
17825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
17835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
17855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
17865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(ContainsDuplicateBookmarks(0));
17885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Simultaneously rename folder A on both clients.
1790f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SetTitle(0, folderA[0], "Folder A++");
1791f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SetTitle(1, folderA[1], "Folder A--");
17925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
17935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
17945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(ContainsDuplicateBookmarks(0));
17955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Simultaneously rename folder B on both clients.
1797f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SetTitle(0, folderB[0], "Folder B++");
1798f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SetTitle(1, folderB[1], "Folder B--");
17995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
18005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
18015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(ContainsDuplicateBookmarks(0));
18025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Simultaneously rename folder C on both clients.
1804f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SetTitle(0, folderC[0], "Folder C++");
1805f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SetTitle(1, folderC[1], "Folder C--");
18065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
18075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
18085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(ContainsDuplicateBookmarks(0));
18095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
18105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
18125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SingleClientEnabledEncryption) {
18135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
18145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
18155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(EnableEncryption(0));
18175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
18185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(IsEncryptionComplete(0));
18195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(IsEncryptionComplete(1));
18205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
18215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
18225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
18245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SingleClientEnabledEncryptionAndChanged) {
18255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
18265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
18275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(EnableEncryption(0));
18295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, IndexedURLTitle(0), GURL(IndexedURL(0))) != NULL);
18305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
18315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(IsEncryptionComplete(0));
18325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(IsEncryptionComplete(1));
18335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
18345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
18355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
18375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       BothClientsEnabledEncryption) {
18385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
18395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
18405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(EnableEncryption(0));
18425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(EnableEncryption(1));
18435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
18445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(IsEncryptionComplete(0));
18455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(IsEncryptionComplete(1));
18465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
18475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
18485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
18505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SingleClientEnabledEncryptionBothChanged) {
18515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
18525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
18535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(EnableEncryption(0));
18555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
18565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(IsEncryptionComplete(0));
18575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(IsEncryptionComplete(1));
18585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, IndexedURLTitle(0), GURL(IndexedURL(0))) != NULL);
18595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, IndexedURLTitle(1), GURL(IndexedURL(1))) != NULL);
18605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
18615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
18625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(IsEncryptionComplete(0));
18635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(IsEncryptionComplete(1));
18645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
18655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
18675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       SingleClientEnabledEncryptionAndChangedMultipleTimes) {
18685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
18695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
18705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, IndexedURLTitle(0), GURL(IndexedURL(0))) != NULL);
18725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(EnableEncryption(0));
18735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
18745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(IsEncryptionComplete(0));
18755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(IsEncryptionComplete(1));
18765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
18775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, IndexedURLTitle(1), GURL(IndexedURL(1))) != NULL);
18795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddFolder(0, IndexedFolderName(0)) != NULL);
18805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
18815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
18825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
18835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
18855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       FirstClientEnablesEncryptionWithPassSecondChanges) {
18865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
18875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
18885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add initial bookmarks.
18905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, 0, IndexedURLTitle(0), GURL(IndexedURL(0))) != NULL);
18915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, 1, IndexedURLTitle(1), GURL(IndexedURL(1))) != NULL);
18925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, 2, IndexedURLTitle(2), GURL(IndexedURL(2))) != NULL);
18935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
18945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
18955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set a passphrase and enable encryption on Client 0. Client 1 will not
18975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // understand the bookmark updates.
18985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetEncryptionPassphrase(0, kValidPassphrase, ProfileSyncService::EXPLICIT);
1899e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  ASSERT_TRUE(AwaitPassphraseAccepted(GetSyncService((0))));
19005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(EnableEncryption(0));
19015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
19025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(IsEncryptionComplete(0));
19035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(IsEncryptionComplete(1));
1904e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  ASSERT_TRUE(GetSyncService((1))->IsPassphraseRequired());
19055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Client 1 adds bookmarks between the first two and between the second two.
19075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, 1, IndexedURLTitle(3), GURL(IndexedURL(3))) != NULL);
19085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, 3, IndexedURLTitle(4), GURL(IndexedURL(4))) != NULL);
19095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(AllModelsMatchVerifier());
19105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(AllModelsMatch());
19115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set the passphrase. Everything should resolve.
1913e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  ASSERT_TRUE(AwaitPassphraseRequired(GetSyncService((1))));
19145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetDecryptionPassphrase(1, kValidPassphrase));
1915e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  ASSERT_TRUE(AwaitPassphraseAccepted(GetSyncService((1))));
19165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
19175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(AllModelsMatch());
19185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(0,
19195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetClient(1)->GetLastSessionSnapshot().num_encryption_conflicts());
19205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Ensure everything is syncing normally by appending a final bookmark.
19225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AddURL(1, 5, IndexedURLTitle(5), GURL(IndexedURL(5))) != NULL);
19235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0)));
19245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(AllModelsMatch());
19255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(0,
19265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetClient(1)->GetLastSessionSnapshot().num_encryption_conflicts());
19275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
19285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Deliberately racy rearranging of bookmarks to test that our conflict resolver
19305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// code results in a consistent view across machines (no matter what the final
19315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// order is).
19325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, RacyPositionChanges) {
19335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
19345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
19355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add initial bookmarks.
19375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  size_t num_bookmarks = 5;
19385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < num_bookmarks; ++i) {
19395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(AddURL(0, i, IndexedURLTitle(i), GURL(IndexedURL(i))) != NULL);
19405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
19415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Once we make diverging changes the verifer is helpless.
19435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
19445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
19455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DisableVerifier();
19465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Make changes on client 0.
19485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < num_bookmarks; ++i) {
19495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const BookmarkNode* node = GetUniqueNodeByURL(0, GURL(IndexedURL(i)));
19505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int rand_pos = base::RandInt(0, num_bookmarks-1);
19515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DVLOG(1) << "Moving client 0's bookmark " << i << " to position "
19525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             << rand_pos;
19535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Move(0, node, node->parent(), rand_pos);
19545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
19555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Make changes on client 1.
19575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < num_bookmarks; ++i) {
19585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const BookmarkNode* node = GetUniqueNodeByURL(1, GURL(IndexedURL(i)));
19595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int rand_pos = base::RandInt(0, num_bookmarks-1);
19605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DVLOG(1) << "Moving client 1's bookmark " << i << " to position "
19615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             << rand_pos;
19625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Move(1, node, node->parent(), rand_pos);
19635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
19645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
19665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
19675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Now make changes to client 1 first.
19695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < num_bookmarks; ++i) {
19705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const BookmarkNode* node = GetUniqueNodeByURL(1, GURL(IndexedURL(i)));
19715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int rand_pos = base::RandInt(0, num_bookmarks-1);
19725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DVLOG(1) << "Moving client 1's bookmark " << i << " to position "
19735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             << rand_pos;
19745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Move(1, node, node->parent(), rand_pos);
19755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
19765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Make changes on client 0.
19785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < num_bookmarks; ++i) {
19795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const BookmarkNode* node = GetUniqueNodeByURL(0, GURL(IndexedURL(i)));
19805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int rand_pos = base::RandInt(0, num_bookmarks-1);
19815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DVLOG(1) << "Moving client 0's bookmark " << i << " to position "
19825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             << rand_pos;
19835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Move(0, node, node->parent(), rand_pos);
19845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
19855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
19875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
19885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
19895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Trigger the server side creation of Synced Bookmarks. Ensure both clients
19915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// remain syncing afterwards. Add bookmarks to the synced bookmarks folder
19925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and ensure both clients receive the boomkmark.
1993c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochIN_PROC_BROWSER_TEST_F(LegacyTwoClientBookmarksSyncTest,
1994c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                       CreateSyncedBookmarks) {
19955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
19965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
19975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TriggerCreateSyncedBookmarks();
19995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add a bookmark on Client 0 and ensure it syncs over. This will also trigger
20015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // both clients downloading the new Synced Bookmarks folder.
2002f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, "Google", GURL("http://www.google.com")));
20035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
20045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
20055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Now add a bookmark within the Synced Bookmarks folder and ensure it syncs
20075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // over.
20085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const BookmarkNode* synced_bookmarks = GetSyncedBookmarksNode(0);
20095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(synced_bookmarks);
2010f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, synced_bookmarks, 0, "Google2",
20115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     GURL("http://www.google2.com")));
20125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
20135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
20145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2015c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2016c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest,
2017c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       BookmarkAllNodesRemovedEvent) {
2018c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2019c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
2020c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(AllModelsMatchVerifier());
2021c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2022c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Starting state:
2023c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // other_node
2024c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  //    -> folder0
2025c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  //      -> tier1_a
2026c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  //        -> http://mail.google.com
2027c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  //        -> http://www.google.com
2028c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  //      -> http://news.google.com
2029c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  //      -> http://yahoo.com
2030c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  //    -> http://www.cnn.com
2031c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // bookmark_bar
2032c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // -> empty_folder
2033c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // -> folder1
2034c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  //    -> http://yahoo.com
2035c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // -> http://gmail.com
2036c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2037f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  const BookmarkNode* folder0 = AddFolder(0, GetOtherNode(0), 0, "folder0");
2038f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  const BookmarkNode* tier1_a = AddFolder(0, folder0, 0, "tier1_a");
2039f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, folder0, 1, "News", GURL("http://news.google.com")));
2040f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, folder0, 2, "Yahoo", GURL("http://www.yahoo.com")));
2041f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, tier1_a, 0, "Gmai", GURL("http://mail.google.com")));
2042f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, tier1_a, 1, "Google", GURL("http://www.google.com")));
2043c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(
2044f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      AddURL(0, GetOtherNode(0), 1, "CNN", GURL("http://www.cnn.com")));
2045c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2046f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(AddFolder(0, GetBookmarkBarNode(0), 0, "empty_folder"));
2047c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  const BookmarkNode* folder1 =
2048f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      AddFolder(0, GetBookmarkBarNode(0), 1, "folder1");
2049f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ASSERT_TRUE(AddURL(0, folder1, 0, "Yahoo", GURL("http://www.yahoo.com")));
2050c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(
2051f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      AddURL(0, GetBookmarkBarNode(0), 2, "Gmai", GURL("http://gmail.com")));
2052c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2053c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(AwaitQuiescence());
2054c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
2055c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2056c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Remove all
2057c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  RemoveAll(0);
2058c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2059c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
2060c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Verify other node has no children now.
2061c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(0, GetOtherNode(0)->child_count());
2062c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(0, GetBookmarkBarNode(0)->child_count());
2063c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(AllModelsMatch());
2064c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
20651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
20661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Verifies that managed bookmarks (installed by policy) don't get synced.
20671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, ManagedBookmarks) {
20681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Make sure the first Profile has an overridden policy provider.
20691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
20701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      .WillRepeatedly(testing::Return(true));
20711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  policy::ProfilePolicyConnectorFactory::GetInstance()->PushProviderForTesting(
20721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      &policy_provider_);
20731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
20741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Set up sync.
20751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
20761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(AllModelsMatchVerifier());
20771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
20781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Verify that there are no managed bookmarks at startup in either profile.
20791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // The Managed Bookmarks folder should not be visible at this stage.
20801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const BookmarkNode* managed_node0 = GetManagedNode(0);
20811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(managed_node0->empty());
20821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_FALSE(managed_node0->IsVisible());
20831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const BookmarkNode* managed_node1 = GetManagedNode(1);
20841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(managed_node1->empty());
20851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_FALSE(managed_node1->IsVisible());
20861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
20871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Verify that the bookmark bar node is empty on both profiles too.
20881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const BookmarkNode* bar_node0 = GetBookmarkBarNode(0);
20891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(bar_node0->empty());
20901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(bar_node0->IsVisible());
20911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const BookmarkNode* bar_node1 = GetBookmarkBarNode(1);
20921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(bar_node1->empty());
20931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(bar_node1->IsVisible());
20941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
20951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Verify that adding a bookmark is observed by the second Profile.
20961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GURL google_url("http://www.google.com");
20971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(AddURL(0, "Google", google_url) != NULL);
20981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
20991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(AllModelsMatchVerifier());
21001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_EQ(1, bar_node0->child_count());
21011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_EQ(1, bar_node1->child_count());
21021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
21031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Set the ManagedBookmarks policy for the first Profile,
21041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // which will add one new managed bookmark.
21051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::DictionaryValue* bookmark = new base::DictionaryValue();
21061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bookmark->SetString("name", "Managed bookmark");
21071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bookmark->SetString("url", "youtube.com");
21081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::ListValue* list = new base::ListValue();
21091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  list->Append(bookmark);
21101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  policy::PolicyMap policy;
21111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  policy.Set(policy::key::kManagedBookmarks,
21121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci             policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
21131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci             list, NULL);
21141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  policy_provider_.UpdateChromePolicy(policy);
21151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::RunLoop().RunUntilIdle();
21161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
21171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Now add another user bookmark and wait for it to sync.
21181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(AddURL(0, "Google 2", google_url) != NULL);
21191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
21201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(AllModelsMatchVerifier());
21211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
21221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(GetSyncService(0)->HasUnrecoverableError());
21231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(GetSyncService(1)->HasUnrecoverableError());
21241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
21251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Verify that the managed bookmark exists in the local model of the first
21261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Profile, and has a child node.
21271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_EQ(1, managed_node0->child_count());
21281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(managed_node0->IsVisible());
21291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(GURL("http://youtube.com/"), managed_node0->GetChild(0)->url());
21301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
21311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Verify that the second Profile didn't get this node.
21321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_EQ(0, managed_node1->child_count());
21331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2134