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_factory.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h"
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/browser/bookmark_model.h"
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/test/bookmark_test_helpers.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,
47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                  const base::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,
54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                const base::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();
73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    PartnerBookmarksShim::EnablePartnerBookmarksEditing();
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    profile_.reset(NULL);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestingProfile> profile_;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
79b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  base::MessageLoopForUI message_loop_;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::TestBrowserThread ui_thread_;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::TestBrowserThread file_thread_;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BookmarkModel* model_;
840f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  MockObserver observer_;
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PartnerBookmarksShimTest);
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PartnerBookmarksShimTest, GetNodeByID) {
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BookmarkNode* root_partner_node = new BookmarkPermanentNode(0);
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BookmarkNode* partner_folder1 = new BookmarkNode(1, GURL());
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  partner_folder1->set_type(BookmarkNode::FOLDER);
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  root_partner_node->Add(partner_folder1, root_partner_node->child_count());
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BookmarkNode* partner_folder2 = new BookmarkNode(2, GURL());
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  partner_folder2->set_type(BookmarkNode::FOLDER);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  partner_folder1->Add(partner_folder2, partner_folder1->child_count());
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BookmarkNode* partner_bookmark1 = new BookmarkNode(3,
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                     GURL("http://www.a.com"));
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  partner_bookmark1->set_type(BookmarkNode::URL);
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  partner_folder1->Add(partner_bookmark1, partner_folder1->child_count());
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BookmarkNode* partner_bookmark2 = new BookmarkNode(4,
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                     GURL("http://www.b.com"));
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  partner_bookmark2->set_type(BookmarkNode::URL);
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  partner_folder2->Add(partner_bookmark2, partner_folder2->child_count());
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1090f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  PartnerBookmarksShim* shim = partner_bookmarks_shim();
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(shim->IsLoaded());
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  shim->SetPartnerBookmarksRoot(root_partner_node);
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(shim->IsLoaded());
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_TRUE(shim->IsPartnerBookmark(root_partner_node));
1150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_EQ(shim->GetNodeByID(0), root_partner_node);
1160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_EQ(shim->GetNodeByID(1), partner_folder1);
1170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_EQ(shim->GetNodeByID(4), partner_bookmark2);
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PartnerBookmarksShimTest, ObserverNotifiedOfLoadNoPartnerBookmarks) {
1210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimLoaded(_)).Times(0);
1220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  PartnerBookmarksShim* shim = partner_bookmarks_shim();
1230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  shim->AddObserver(&observer_);
1240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(1);
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  shim->SetPartnerBookmarksRoot(NULL);
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PartnerBookmarksShimTest, ObserverNotifiedOfLoadWithPartnerBookmarks) {
1300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimLoaded(_)).Times(0);
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int64 id = 5;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BookmarkNode* root_partner_node = new BookmarkPermanentNode(id++);
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BookmarkNode* partner_bookmark1 = new BookmarkNode(id++,
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                     GURL("http://www.a.com"));
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  partner_bookmark1->set_type(BookmarkNode::URL);
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  root_partner_node->Add(partner_bookmark1, root_partner_node->child_count());
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1380f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  PartnerBookmarksShim* shim = partner_bookmarks_shim();
1390f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  shim->AddObserver(&observer_);
1400f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1410f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(1);
1420f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  shim->SetPartnerBookmarksRoot(root_partner_node);
1430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
1440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)TEST_F(PartnerBookmarksShimTest, RemoveBookmarks) {
1460f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  PartnerBookmarksShim* shim = partner_bookmarks_shim();
1470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  shim->AddObserver(&observer_);
1480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(0);
1500f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(0);
1510f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* root_partner_node = new BookmarkPermanentNode(0);
1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  root_partner_node->SetTitle(base::ASCIIToUTF16("Partner bookmarks"));
1540f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1550f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* partner_folder1 = new BookmarkNode(1, GURL("http://www.a.net"));
1560f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder1->set_type(BookmarkNode::FOLDER);
1570f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  root_partner_node->Add(partner_folder1, root_partner_node->child_count());
1580f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* partner_folder2 = new BookmarkNode(2, GURL("http://www.b.net"));
1600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder2->set_type(BookmarkNode::FOLDER);
1610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  root_partner_node->Add(partner_folder2, root_partner_node->child_count());
1620f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* partner_bookmark1 = new BookmarkNode(3,
1640f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                                                     GURL("http://www.a.com"));
1650f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_bookmark1->set_type(BookmarkNode::URL);
1660f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder1->Add(partner_bookmark1, partner_folder1->child_count());
1670f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1680f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* partner_bookmark2 = new BookmarkNode(4,
1690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                                                     GURL("http://www.b.com"));
1700f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_bookmark2->set_type(BookmarkNode::URL);
1710f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder2->Add(partner_bookmark2, partner_folder2->child_count());
1720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1730f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* partner_folder3 = new BookmarkNode(5, GURL("http://www.c.net"));
1740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder3->set_type(BookmarkNode::FOLDER);
1750f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder2->Add(partner_folder3, partner_folder2->child_count());
1760f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1770f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* partner_bookmark3 = new BookmarkNode(6,
1780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                                                     GURL("http://www.c.com"));
1790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_bookmark3->set_type(BookmarkNode::URL);
1800f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder3->Add(partner_bookmark3, partner_folder3->child_count());
1810f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1820f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_FALSE(shim->IsLoaded());
1830f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(1);
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  shim->SetPartnerBookmarksRoot(root_partner_node);
1850f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_TRUE(shim->IsLoaded());
1860f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1870f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(root_partner_node, shim->GetNodeByID(0));
1880f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(partner_folder1, shim->GetNodeByID(1));
1890f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(partner_folder2, shim->GetNodeByID(2));
1900f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(partner_bookmark1, shim->GetNodeByID(3));
1910f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(partner_bookmark2, shim->GetNodeByID(4));
1920f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(partner_folder3, shim->GetNodeByID(5));
1930f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(partner_bookmark3, shim->GetNodeByID(6));
1940f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1950f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(root_partner_node));
1960f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder1));
1970f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder2));
1980f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
1990f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark2));
2000f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder3));
2010f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark3));
2020f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2030f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
2040f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  shim->RemoveBookmark(partner_bookmark2);
2050f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(root_partner_node));
2060f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder1));
2070f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder2));
2080f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
2090f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
2100f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder3));
2110f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark3));
2120f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
2140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  shim->RemoveBookmark(partner_folder1);
2150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(root_partner_node));
2160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(shim->IsReachable(partner_folder1));
2170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder2));
2180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(shim->IsReachable(partner_bookmark1));
2190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
2200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder3));
2210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark3));
2220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
2240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  shim->RemoveBookmark(root_partner_node);
2250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(shim->IsReachable(root_partner_node));
2260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(shim->IsReachable(partner_folder1));
2270f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(shim->IsReachable(partner_folder2));
2280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(shim->IsReachable(partner_bookmark1));
2290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
2300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(shim->IsReachable(partner_folder3));
2310f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(shim->IsReachable(partner_bookmark3));
2320f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
2330f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2340f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)TEST_F(PartnerBookmarksShimTest, RenameBookmarks) {
2350f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  PartnerBookmarksShim* shim = partner_bookmarks_shim();
2360f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  shim->AddObserver(&observer_);
2370f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2380f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(0);
2390f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(0);
2400f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2410f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* root_partner_node = new BookmarkPermanentNode(0);
2425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  root_partner_node->SetTitle(base::ASCIIToUTF16("Partner bookmarks"));
2430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* partner_folder1 = new BookmarkNode(1, GURL("http://www.a.net"));
2450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder1->set_type(BookmarkNode::FOLDER);
2465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  partner_folder1->SetTitle(base::ASCIIToUTF16("a.net"));
2470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  root_partner_node->Add(partner_folder1, root_partner_node->child_count());
2480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* partner_folder2 = new BookmarkNode(2, GURL("http://www.b.net"));
2500f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder2->set_type(BookmarkNode::FOLDER);
2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  partner_folder2->SetTitle(base::ASCIIToUTF16("b.net"));
2520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  root_partner_node->Add(partner_folder2, root_partner_node->child_count());
2530f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2540f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* partner_bookmark1 = new BookmarkNode(3,
2550f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                                                     GURL("http://www.a.com"));
2560f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_bookmark1->set_type(BookmarkNode::URL);
2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  partner_bookmark1->SetTitle(base::ASCIIToUTF16("a.com"));
2580f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder1->Add(partner_bookmark1, partner_folder1->child_count());
2590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  BookmarkNode* partner_bookmark2 = new BookmarkNode(4,
2610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                                                     GURL("http://www.b.com"));
2620f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_bookmark2->set_type(BookmarkNode::URL);
2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  partner_bookmark2->SetTitle(base::ASCIIToUTF16("b.com"));
2640f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  partner_folder2->Add(partner_bookmark2, partner_folder2->child_count());
2650f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2660f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_FALSE(shim->IsLoaded());
2670f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(1);
2680f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  shim->SetPartnerBookmarksRoot(root_partner_node);
2690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_TRUE(shim->IsLoaded());
2700f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2710f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(root_partner_node, shim->GetNodeByID(0));
2720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(partner_folder1, shim->GetNodeByID(1));
2730f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(partner_folder2, shim->GetNodeByID(2));
2740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(partner_bookmark1, shim->GetNodeByID(3));
2750f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(partner_bookmark2, shim->GetNodeByID(4));
2760f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2770f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(root_partner_node));
2780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder1));
2790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder2));
2800f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
2810f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark2));
2820f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2830f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
2845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(base::ASCIIToUTF16("b.com"), shim->GetTitle(partner_bookmark2));
2855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  shim->RenameBookmark(partner_bookmark2, base::ASCIIToUTF16("b2.com"));
2865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(base::ASCIIToUTF16("b2.com"), shim->GetTitle(partner_bookmark2));
2870f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2880f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(root_partner_node));
2890f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder1));
2900f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder2));
2910f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
2920f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark2));
2930f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2940f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
2955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(base::ASCIIToUTF16("a.net"), shim->GetTitle(partner_folder1));
2965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  shim->RenameBookmark(partner_folder1, base::ASCIIToUTF16("a2.net"));
2975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(base::ASCIIToUTF16("a2.net"), shim->GetTitle(partner_folder1));
2980f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2990f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(root_partner_node));
3000f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder1));
3010f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder2));
3020f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
3030f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark2));
3040f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3050f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
3065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(base::ASCIIToUTF16("Partner bookmarks"),
3070f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)            shim->GetTitle(root_partner_node));
3085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  shim->RenameBookmark(root_partner_node, base::ASCIIToUTF16("Partner"));
3095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(base::ASCIIToUTF16("Partner"), shim->GetTitle(root_partner_node));
3100f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3110f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(root_partner_node));
3120f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder1));
3130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_folder2));
3140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
3150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(shim->IsReachable(partner_bookmark2));
3160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
3170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)TEST_F(PartnerBookmarksShimTest, SaveLoadProfile) {
3190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  {
3200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    PartnerBookmarksShim* shim = partner_bookmarks_shim();
3210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    shim->AddObserver(&observer_);
3220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(0);
3240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(0);
3250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    BookmarkNode* root_partner_node = new BookmarkPermanentNode(0);
3275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    root_partner_node->SetTitle(base::ASCIIToUTF16("Partner bookmarks"));
3280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    BookmarkNode* partner_folder1 = new BookmarkNode(1, GURL("http://a.net"));
3300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    partner_folder1->set_type(BookmarkNode::FOLDER);
3315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    partner_folder1->SetTitle(base::ASCIIToUTF16("a.net"));
3320f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    root_partner_node->Add(partner_folder1, root_partner_node->child_count());
3330f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3340f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    BookmarkNode* partner_bookmark1 = new BookmarkNode(3,
3350f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                                                       GURL("http://a.com"));
3360f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    partner_bookmark1->set_type(BookmarkNode::URL);
3375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    partner_bookmark1->SetTitle(base::ASCIIToUTF16("a.com"));
3380f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    partner_folder1->Add(partner_bookmark1, partner_folder1->child_count());
3390f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3400f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    BookmarkNode* partner_bookmark2 = new BookmarkNode(5,
3410f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                                                       GURL("http://b.com"));
3420f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    partner_bookmark2->set_type(BookmarkNode::URL);
3435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    partner_bookmark2->SetTitle(base::ASCIIToUTF16("b.com"));
3440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    partner_folder1->Add(partner_bookmark2, partner_folder1->child_count());
3450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3460f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    ASSERT_FALSE(shim->IsLoaded());
3470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(1);
3480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    shim->SetPartnerBookmarksRoot(root_partner_node);
3490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    ASSERT_TRUE(shim->IsLoaded());
3500f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3510f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(2);
3525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    shim->RenameBookmark(partner_bookmark1, base::ASCIIToUTF16("a2.com"));
3530f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    shim->RemoveBookmark(partner_bookmark2);
3545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    EXPECT_EQ(base::ASCIIToUTF16("a2.com"), shim->GetTitle(partner_bookmark1));
3550f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
3560f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  }
3570f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3580f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  PartnerBookmarksShim::ClearInBrowserContextForTesting(profile_.get());
3590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  {
3610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    PartnerBookmarksShim* shim = partner_bookmarks_shim();
3620f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    shim->AddObserver(&observer_);
3630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3640f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(0);
3650f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(0);
3660f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    ASSERT_TRUE(shim->IsLoaded());
3670f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3680f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    const BookmarkNode* partner_bookmark1 = shim->GetNodeByID(3);
3690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    const BookmarkNode* partner_bookmark2 = shim->GetNodeByID(5);
3700f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
3715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    EXPECT_EQ(base::ASCIIToUTF16("a2.com"), shim->GetTitle(partner_bookmark1));
3720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
3730f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  }
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
375effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
376effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochTEST_F(PartnerBookmarksShimTest, DisableEditing) {
377effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  PartnerBookmarksShim* shim = partner_bookmarks_shim();
378effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  shim->AddObserver(&observer_);
379effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
380effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(0);
381effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(0);
382effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
383effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  BookmarkNode* root_partner_node = new BookmarkPermanentNode(0);
384effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  root_partner_node->SetTitle(base::ASCIIToUTF16("Partner bookmarks"));
385effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
386effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  BookmarkNode* partner_bookmark1 = new BookmarkNode(3, GURL("http://a"));
387effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  partner_bookmark1->set_type(BookmarkNode::URL);
388effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  partner_bookmark1->SetTitle(base::ASCIIToUTF16("a"));
389effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  root_partner_node->Add(partner_bookmark1, root_partner_node->child_count());
390effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
391effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  BookmarkNode* partner_bookmark2 = new BookmarkNode(3, GURL("http://b"));
392effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  partner_bookmark2->set_type(BookmarkNode::URL);
393effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  partner_bookmark2->SetTitle(base::ASCIIToUTF16("b"));
394effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  root_partner_node->Add(partner_bookmark2, root_partner_node->child_count());
395effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
396effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  ASSERT_FALSE(shim->IsLoaded());
397effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(1);
398effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  shim->SetPartnerBookmarksRoot(root_partner_node);
399effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  ASSERT_TRUE(shim->IsLoaded());
400effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
401effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Check that edits work by default.
402effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(2);
403effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  shim->RenameBookmark(partner_bookmark1, base::ASCIIToUTF16("a2.com"));
404effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  shim->RemoveBookmark(partner_bookmark2);
405effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(base::ASCIIToUTF16("a2.com"), shim->GetTitle(partner_bookmark1));
406effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
407effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
408effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Disable edits and check that edits are not applied anymore.
409effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  PartnerBookmarksShim::DisablePartnerBookmarksEditing();
410effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(base::ASCIIToUTF16("a"), shim->GetTitle(partner_bookmark1));
411effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_TRUE(shim->IsReachable(partner_bookmark2));
412effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
413