partner_bookmarks_shim_unittest.cc revision f2477e01787aa58f445919b809d89e252beef54f
1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 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)
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/android/bookmarks/partner_bookmarks_shim.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
79ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h"
8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h"
9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_model.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_model_factory.h"
1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_test_helpers.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h"
160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)using testing::_;
210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)class MockObserver : public PartnerBookmarksShim::Observer {
230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) public:
240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  MockObserver() {}
250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  MOCK_METHOD1(PartnerShimChanged, void(PartnerBookmarksShim*));
260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  MOCK_METHOD1(PartnerShimLoaded, void(PartnerBookmarksShim*));
270f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) private:
290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MockObserver);
300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)};
310f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PartnerBookmarksShimTest : public testing::Test {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PartnerBookmarksShimTest()
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      : ui_thread_(content::BrowserThread::UI, &message_loop_),
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        file_thread_(content::BrowserThread::FILE, &message_loop_),
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        model_(NULL) {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestingProfile* profile() const { return profile_.get(); }
410f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  PartnerBookmarksShim* partner_bookmarks_shim() const {
420f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    return PartnerBookmarksShim::BuildForBrowserContext(profile_.get());
430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  }
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  const BookmarkNode* AddBookmark(const BookmarkNode* parent,
460f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                                  const GURL& url,
470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                                  const string16& title) {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!parent)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      parent = model_->bookmark_bar_node();
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return model_->AddURL(parent, parent->child_count(), title, url);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
530f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  const BookmarkNode* AddFolder(const BookmarkNode* parent,
540f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                                const string16& title) {
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!parent)
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      parent = model_->bookmark_bar_node();
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return model_->AddFolder(parent, parent->child_count(), title);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // testing::Test
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUp() OVERRIDE {
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    profile_.reset(new TestingProfile());
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    profile_->CreateBookmarkModel(true);
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    model_ = BookmarkModelFactory::GetForProfile(profile_.get());
6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    test::WaitForBookmarkModelToLoad(model_);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void TearDown() OVERRIDE {
710f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    PartnerBookmarksShim::ClearInBrowserContextForTesting(profile_.get());
720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    PartnerBookmarksShim::ClearPartnerModelForTesting();
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    profile_.reset(NULL);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestingProfile> profile_;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
78b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  base::MessageLoopForUI message_loop_;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::TestBrowserThread ui_thread_;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::TestBrowserThread file_thread_;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BookmarkModel* model_;
830f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  MockObserver observer_;
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PartnerBookmarksShimTest);
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PartnerBookmarksShimTest, GetNodeByID) {
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BookmarkNode* root_partner_node = new BookmarkPermanentNode(0);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BookmarkNode* partner_folder1 = new BookmarkNode(1, GURL());
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  partner_folder1->set_type(BookmarkNode::FOLDER);
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  root_partner_node->Add(partner_folder1, root_partner_node->child_count());
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BookmarkNode* partner_folder2 = new BookmarkNode(2, GURL());
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  partner_folder2->set_type(BookmarkNode::FOLDER);
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  partner_folder1->Add(partner_folder2, partner_folder1->child_count());
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BookmarkNode* partner_bookmark1 = new BookmarkNode(3,
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                     GURL("http://www.a.com"));
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  partner_bookmark1->set_type(BookmarkNode::URL);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  partner_folder1->Add(partner_bookmark1, partner_folder1->child_count());
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BookmarkNode* partner_bookmark2 = new BookmarkNode(4,
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                     GURL("http://www.b.com"));
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  partner_bookmark2->set_type(BookmarkNode::URL);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  partner_folder2->Add(partner_bookmark2, partner_folder2->child_count());
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1080f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  PartnerBookmarksShim* shim = partner_bookmarks_shim();
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(shim->IsLoaded());
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  shim->SetPartnerBookmarksRoot(root_partner_node);
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(shim->IsLoaded());
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_TRUE(shim->IsPartnerBookmark(root_partner_node));
1140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_EQ(shim->GetNodeByID(0), root_partner_node);
1150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_EQ(shim->GetNodeByID(1), partner_folder1);
1160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_EQ(shim->GetNodeByID(4), partner_bookmark2);
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PartnerBookmarksShimTest, ObserverNotifiedOfLoadNoPartnerBookmarks) {
1200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimLoaded(_)).Times(0);
1210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  PartnerBookmarksShim* shim = partner_bookmarks_shim();
1220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  shim->AddObserver(&observer_);
1230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(1);
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  shim->SetPartnerBookmarksRoot(NULL);
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PartnerBookmarksShimTest, ObserverNotifiedOfLoadWithPartnerBookmarks) {
1290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimLoaded(_)).Times(0);
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int64 id = 5;
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BookmarkNode* root_partner_node = new BookmarkPermanentNode(id++);
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BookmarkNode* partner_bookmark1 = new BookmarkNode(id++,
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                     GURL("http://www.a.com"));
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  partner_bookmark1->set_type(BookmarkNode::URL);
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  root_partner_node->Add(partner_bookmark1, root_partner_node->child_count());
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1370f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  PartnerBookmarksShim* shim = partner_bookmarks_shim();
1380f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  shim->AddObserver(&observer_);
1390f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1400f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(1);
1410f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  shim->SetPartnerBookmarksRoot(root_partner_node);
1420f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
1430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)TEST_F(PartnerBookmarksShimTest, RemoveBookmarks) {
1450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  PartnerBookmarksShim* shim = partner_bookmarks_shim();
1460f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  shim->AddObserver(&observer_);
1470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(0);
1490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(0);
1500f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1510f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* root_partner_node = new BookmarkPermanentNode(0);
1520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  root_partner_node->SetTitle(ASCIIToUTF16("Partner bookmarks"));
1530f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1540f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* partner_folder1 = new BookmarkNode(1, GURL("http://www.a.net"));
1550f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder1->set_type(BookmarkNode::FOLDER);
1560f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  root_partner_node->Add(partner_folder1, root_partner_node->child_count());
1570f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1580f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* partner_folder2 = new BookmarkNode(2, GURL("http://www.b.net"));
1590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder2->set_type(BookmarkNode::FOLDER);
1600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  root_partner_node->Add(partner_folder2, root_partner_node->child_count());
1610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1620f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* partner_bookmark1 = new BookmarkNode(3,
1630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                                                     GURL("http://www.a.com"));
1640f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_bookmark1->set_type(BookmarkNode::URL);
1650f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder1->Add(partner_bookmark1, partner_folder1->child_count());
1660f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1670f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* partner_bookmark2 = new BookmarkNode(4,
1680f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                                                     GURL("http://www.b.com"));
1690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_bookmark2->set_type(BookmarkNode::URL);
1700f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder2->Add(partner_bookmark2, partner_folder2->child_count());
1710f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* partner_folder3 = new BookmarkNode(5, GURL("http://www.c.net"));
1730f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder3->set_type(BookmarkNode::FOLDER);
1740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder2->Add(partner_folder3, partner_folder2->child_count());
1750f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1760f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* partner_bookmark3 = new BookmarkNode(6,
1770f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                                                     GURL("http://www.c.com"));
1780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_bookmark3->set_type(BookmarkNode::URL);
1790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder3->Add(partner_bookmark3, partner_folder3->child_count());
1800f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1810f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_FALSE(shim->IsLoaded());
1820f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(1);
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  shim->SetPartnerBookmarksRoot(root_partner_node);
1840f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_TRUE(shim->IsLoaded());
1850f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1860f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(root_partner_node, shim->GetNodeByID(0));
1870f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(partner_folder1, shim->GetNodeByID(1));
1880f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(partner_folder2, shim->GetNodeByID(2));
1890f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(partner_bookmark1, shim->GetNodeByID(3));
1900f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(partner_bookmark2, shim->GetNodeByID(4));
1910f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(partner_folder3, shim->GetNodeByID(5));
1920f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(partner_bookmark3, shim->GetNodeByID(6));
1930f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1940f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(root_partner_node));
1950f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder1));
1960f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder2));
1970f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
1980f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark2));
1990f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder3));
2000f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark3));
2010f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2020f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
2030f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  shim->RemoveBookmark(partner_bookmark2);
2040f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(root_partner_node));
2050f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder1));
2060f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder2));
2070f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
2080f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
2090f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder3));
2100f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark3));
2110f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2120f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
2130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  shim->RemoveBookmark(partner_folder1);
2140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(root_partner_node));
2150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(shim->IsReachable(partner_folder1));
2160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder2));
2170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(shim->IsReachable(partner_bookmark1));
2180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
2190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder3));
2200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark3));
2210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
2230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  shim->RemoveBookmark(root_partner_node);
2240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(shim->IsReachable(root_partner_node));
2250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(shim->IsReachable(partner_folder1));
2260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(shim->IsReachable(partner_folder2));
2270f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(shim->IsReachable(partner_bookmark1));
2280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
2290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(shim->IsReachable(partner_folder3));
2300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(shim->IsReachable(partner_bookmark3));
2310f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
2320f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2330f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)TEST_F(PartnerBookmarksShimTest, RenameBookmarks) {
2340f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  PartnerBookmarksShim* shim = partner_bookmarks_shim();
2350f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  shim->AddObserver(&observer_);
2360f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2370f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(0);
2380f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(0);
2390f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2400f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* root_partner_node = new BookmarkPermanentNode(0);
2410f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  root_partner_node->SetTitle(ASCIIToUTF16("Partner bookmarks"));
2420f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* partner_folder1 = new BookmarkNode(1, GURL("http://www.a.net"));
2440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder1->set_type(BookmarkNode::FOLDER);
2450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder1->SetTitle(ASCIIToUTF16("a.net"));
2460f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  root_partner_node->Add(partner_folder1, root_partner_node->child_count());
2470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* partner_folder2 = new BookmarkNode(2, GURL("http://www.b.net"));
2490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder2->set_type(BookmarkNode::FOLDER);
2500f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder2->SetTitle(ASCIIToUTF16("b.net"));
2510f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  root_partner_node->Add(partner_folder2, root_partner_node->child_count());
2520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2530f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* partner_bookmark1 = new BookmarkNode(3,
2540f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                                                     GURL("http://www.a.com"));
2550f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_bookmark1->set_type(BookmarkNode::URL);
2560f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_bookmark1->SetTitle(ASCIIToUTF16("a.com"));
2570f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder1->Add(partner_bookmark1, partner_folder1->child_count());
2580f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* partner_bookmark2 = new BookmarkNode(4,
2600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                                                     GURL("http://www.b.com"));
2610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_bookmark2->set_type(BookmarkNode::URL);
2620f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_bookmark2->SetTitle(ASCIIToUTF16("b.com"));
2630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder2->Add(partner_bookmark2, partner_folder2->child_count());
2640f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2650f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_FALSE(shim->IsLoaded());
2660f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(1);
2670f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  shim->SetPartnerBookmarksRoot(root_partner_node);
2680f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_TRUE(shim->IsLoaded());
2690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2700f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(root_partner_node, shim->GetNodeByID(0));
2710f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(partner_folder1, shim->GetNodeByID(1));
2720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(partner_folder2, shim->GetNodeByID(2));
2730f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(partner_bookmark1, shim->GetNodeByID(3));
2740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(partner_bookmark2, shim->GetNodeByID(4));
2750f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2760f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(root_partner_node));
2770f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder1));
2780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder2));
2790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
2800f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark2));
2810f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2820f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
2830f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("b.com"), shim->GetTitle(partner_bookmark2));
2840f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  shim->RenameBookmark(partner_bookmark2, ASCIIToUTF16("b2.com"));
2850f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("b2.com"), shim->GetTitle(partner_bookmark2));
2860f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2870f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(root_partner_node));
2880f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder1));
2890f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder2));
2900f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
2910f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark2));
2920f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2930f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
2940f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("a.net"), shim->GetTitle(partner_folder1));
2950f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  shim->RenameBookmark(partner_folder1, ASCIIToUTF16("a2.net"));
2960f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("a2.net"), shim->GetTitle(partner_folder1));
2970f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2980f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(root_partner_node));
2990f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder1));
3000f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder2));
3010f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
3020f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark2));
3030f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3040f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
3050f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("Partner bookmarks"),
3060f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)            shim->GetTitle(root_partner_node));
3070f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  shim->RenameBookmark(root_partner_node, ASCIIToUTF16("Partner"));
3080f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("Partner"), shim->GetTitle(root_partner_node));
3090f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3100f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(root_partner_node));
3110f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder1));
3120f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder2));
3130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
3140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark2));
3150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
3160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)TEST_F(PartnerBookmarksShimTest, SaveLoadProfile) {
3180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  {
3190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    PartnerBookmarksShim* shim = partner_bookmarks_shim();
3200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    shim->AddObserver(&observer_);
3210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(0);
3230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(0);
3240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    BookmarkNode* root_partner_node = new BookmarkPermanentNode(0);
3260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    root_partner_node->SetTitle(ASCIIToUTF16("Partner bookmarks"));
3270f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    BookmarkNode* partner_folder1 = new BookmarkNode(1, GURL("http://a.net"));
3290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    partner_folder1->set_type(BookmarkNode::FOLDER);
3300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    partner_folder1->SetTitle(ASCIIToUTF16("a.net"));
3310f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    root_partner_node->Add(partner_folder1, root_partner_node->child_count());
3320f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3330f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    BookmarkNode* partner_bookmark1 = new BookmarkNode(3,
3340f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                                                       GURL("http://a.com"));
3350f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    partner_bookmark1->set_type(BookmarkNode::URL);
3360f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    partner_bookmark1->SetTitle(ASCIIToUTF16("a.com"));
3370f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    partner_folder1->Add(partner_bookmark1, partner_folder1->child_count());
3380f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3390f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    BookmarkNode* partner_bookmark2 = new BookmarkNode(5,
3400f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                                                       GURL("http://b.com"));
3410f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    partner_bookmark2->set_type(BookmarkNode::URL);
3420f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    partner_bookmark2->SetTitle(ASCIIToUTF16("b.com"));
3430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    partner_folder1->Add(partner_bookmark2, partner_folder1->child_count());
3440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    ASSERT_FALSE(shim->IsLoaded());
3460f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(1);
3470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    shim->SetPartnerBookmarksRoot(root_partner_node);
3480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    ASSERT_TRUE(shim->IsLoaded());
3490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3500f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(2);
3510f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    shim->RenameBookmark(partner_bookmark1, ASCIIToUTF16("a2.com"));
3520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    shim->RemoveBookmark(partner_bookmark2);
3530f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    EXPECT_EQ(ASCIIToUTF16("a2.com"), shim->GetTitle(partner_bookmark1));
3540f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
3550f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  }
3560f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3570f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  PartnerBookmarksShim::ClearInBrowserContextForTesting(profile_.get());
3580f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  {
3600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    PartnerBookmarksShim* shim = partner_bookmarks_shim();
3610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    shim->AddObserver(&observer_);
3620f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(0);
3640f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(0);
3650f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    ASSERT_TRUE(shim->IsLoaded());
3660f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3670f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    const BookmarkNode* partner_bookmark1 = shim->GetNodeByID(3);
3680f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    const BookmarkNode* partner_bookmark2 = shim->GetNodeByID(5);
3690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3700f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    EXPECT_EQ(ASCIIToUTF16("a2.com"), shim->GetTitle(partner_bookmark1));
3710f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
3720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  }
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
374