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) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/api/bookmarks/bookmark_api_helpers.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/strings/string_number_conversions.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_model_factory.h" 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/bookmarks/chrome_bookmark_client.h" 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/bookmarks/chrome_bookmark_client_factory.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/api/bookmarks/bookmark_api_constants.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/api/bookmarks.h" 1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/test/base/testing_profile.h" 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/browser/bookmark_model.h" 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/bookmarks/test/bookmark_test_helpers.h" 1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "content/public/test/test_browser_thread_bundle.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace keys = bookmark_api_constants; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using api::bookmarks::BookmarkTreeNode; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace bookmark_api_helpers { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionBookmarksTest : public testing::Test { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ExtensionBookmarksTest() 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : client_(NULL), model_(NULL), node_(NULL), node2_(NULL), folder_(NULL) {} 3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) profile_.CreateBookmarkModel(false); 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) model_ = BookmarkModelFactory::GetForProfile(&profile_); 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) client_ = ChromeBookmarkClientFactory::GetForProfile(&profile_); 3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) test::WaitForBookmarkModelToLoad(model_); 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) node_ = model_->AddURL(model_->other_node(), 0, base::ASCIIToUTF16("Digg"), 4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GURL("http://www.reddit.com")); 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch model_->SetNodeMetaInfo(node_, "some_key1", "some_value1"); 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch model_->SetNodeMetaInfo(node_, "some_key2", "some_value2"); 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) model_->AddURL(model_->other_node(), 0, base::ASCIIToUTF16("News"), 4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GURL("http://www.foxnews.com")); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) folder_ = model_->AddFolder( 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) model_->other_node(), 0, base::ASCIIToUTF16("outer folder")); 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch model_->SetNodeMetaInfo(folder_, "some_key1", "some_value1"); 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) model_->AddFolder(folder_, 0, base::ASCIIToUTF16("inner folder 1")); 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) model_->AddFolder(folder_, 0, base::ASCIIToUTF16("inner folder 2")); 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch node2_ = model_->AddURL( 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) folder_, 0, base::ASCIIToUTF16("Digg"), GURL("http://reddit.com")); 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch model_->SetNodeMetaInfo(node2_, "some_key2", "some_value2"); 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) model_->AddURL( 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) folder_, 0, base::ASCIIToUTF16("CNet"), GURL("http://cnet.com")); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) content::TestBrowserThreadBundle thread_bundle_; 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) TestingProfile profile_; 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ChromeBookmarkClient* client_; 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) BookmarkModel* model_; 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const BookmarkNode* node_; 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const BookmarkNode* node2_; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* folder_; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ExtensionBookmarksTest, GetFullTreeFromRoot) { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BookmarkTreeNode> tree( 6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetBookmarkTreeNode(client_, 7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) model_->other_node(), 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) true, // Recurse. 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false)); // Not only folders. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3U, tree->children->size()); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ExtensionBookmarksTest, GetFoldersOnlyFromRoot) { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BookmarkTreeNode> tree( 7846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetBookmarkTreeNode(client_, 7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) model_->other_node(), 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) true, // Recurse. 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) true)); // Only folders. 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, tree->children->size()); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ExtensionBookmarksTest, GetSubtree) { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BookmarkTreeNode> tree( 8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetBookmarkTreeNode(client_, 8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) folder_, 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) true, // Recurse. 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false)); // Not only folders. 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(4U, tree->children->size()); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) linked_ptr<BookmarkTreeNode> digg = tree->children->at(1); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(digg.get()); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ("Digg", digg->title); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ExtensionBookmarksTest, GetSubtreeFoldersOnly) { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BookmarkTreeNode> tree( 9946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetBookmarkTreeNode(client_, 10046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) folder_, 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) true, // Recurse. 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) true)); // Only folders. 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, tree->children->size()); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) linked_ptr<BookmarkTreeNode> inner_folder = tree->children->at(1); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(inner_folder.get()); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ("inner folder 1", inner_folder->title); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(ExtensionBookmarksTest, GetModifiableNode) { 11046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<BookmarkTreeNode> tree( 11146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetBookmarkTreeNode(client_, 11246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) node_, 11346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) false, // Recurse. 11446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) false)); // Only folders. 11546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ("Digg", tree->title); 11646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_TRUE(tree->url); 11746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ("http://www.reddit.com/", *tree->url); 11846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(BookmarkTreeNode::UNMODIFIABLE_NONE, tree->unmodifiable); 11946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 12046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 12146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(ExtensionBookmarksTest, GetManagedNode) { 12246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const BookmarkNode* managed_bookmark = 12346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) model_->AddURL(client_->managed_node(), 12446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 0, 12546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::ASCIIToUTF16("Chromium"), 12646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GURL("http://www.chromium.org/")); 12746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<BookmarkTreeNode> tree( 12846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetBookmarkTreeNode(client_, 12946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) managed_bookmark, 13046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) false, // Recurse. 13146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) false)); // Only folders. 13246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ("Chromium", tree->title); 13346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ("http://www.chromium.org/", *tree->url); 13446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(BookmarkTreeNode::UNMODIFIABLE_MANAGED, tree->unmodifiable); 13546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 13646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 13746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(ExtensionBookmarksTest, RemoveNodeInvalidId) { 13846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int64 invalid_id = model_->next_node_id(); 13946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::string error; 140f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(RemoveNode(model_, client_, invalid_id, true, &error)); 14146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(keys::kNoNodeError, error); 14246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 14346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 14446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(ExtensionBookmarksTest, RemoveNodePermanent) { 14546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::string error; 146f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE( 147f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) RemoveNode(model_, client_, model_->other_node()->id(), true, &error)); 14846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(keys::kModifySpecialError, error); 14946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 15046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 15146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(ExtensionBookmarksTest, RemoveNodeManaged) { 15246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const BookmarkNode* managed_bookmark = 15346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) model_->AddURL(client_->managed_node(), 15446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 0, 15546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::ASCIIToUTF16("Chromium"), 15646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GURL("http://www.chromium.org")); 15746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::string error; 158f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE( 159f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) RemoveNode(model_, client_, managed_bookmark->id(), true, &error)); 16046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(keys::kModifyManagedError, error); 16146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 16246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 16346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(ExtensionBookmarksTest, RemoveNodeNotRecursive) { 16446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::string error; 165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(RemoveNode(model_, client_, folder_->id(), false, &error)); 16646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(keys::kFolderNotEmptyError, error); 16746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 16846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 16946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(ExtensionBookmarksTest, RemoveNodeRecursive) { 17046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(3, model_->other_node()->child_count()); 17146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::string error; 172f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(RemoveNode(model_, client_, folder_->id(), true, &error)); 17346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(2, model_->other_node()->child_count()); 17446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 17546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 176116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(ExtensionBookmarksTest, GetMetaInfo) { 177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::DictionaryValue id_to_meta_info_map; 178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GetMetaInfo(*model_->other_node(), &id_to_meta_info_map); 179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(8u, id_to_meta_info_map.size()); 180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Verify top level node. 182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::Value* value = NULL; 183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(id_to_meta_info_map.Get( 184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Int64ToString(model_->other_node()->id()), &value)); 185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(NULL != value); 186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::DictionaryValue* dictionary_value = NULL; 187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(value->GetAsDictionary(&dictionary_value)); 188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(NULL != dictionary_value); 189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(0u, dictionary_value->size()); 190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Verify bookmark with two meta info key/value pairs. 192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch value = NULL; 193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(id_to_meta_info_map.Get( 194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Int64ToString(node_->id()), &value)); 195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(NULL != value); 196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch dictionary_value = NULL; 197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(value->GetAsDictionary(&dictionary_value)); 198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(NULL != dictionary_value); 199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(2u, dictionary_value->size()); 200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string string_value; 201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(dictionary_value->GetString("some_key1", &string_value)); 202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ("some_value1", string_value); 203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(dictionary_value->GetString("some_key2", &string_value)); 204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ("some_value2", string_value); 205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Verify folder with one meta info key/value pair. 207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch value = NULL; 208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(id_to_meta_info_map.Get( 209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Int64ToString(folder_->id()), &value)); 210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(NULL != value); 211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch dictionary_value = NULL; 212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(value->GetAsDictionary(&dictionary_value)); 213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(NULL != dictionary_value); 214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(1u, dictionary_value->size()); 215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(dictionary_value->GetString("some_key1", &string_value)); 216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ("some_value1", string_value); 217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Verify bookmark in a subfolder with one meta info key/value pairs. 219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch value = NULL; 220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(id_to_meta_info_map.Get( 221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Int64ToString(node2_->id()), &value)); 222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(NULL != value); 223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch dictionary_value = NULL; 224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(value->GetAsDictionary(&dictionary_value)); 225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(NULL != dictionary_value); 226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(1u, dictionary_value->size()); 227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch string_value.clear(); 228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(dictionary_value->GetString("some_key1", &string_value)); 229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ("", string_value); 230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(dictionary_value->GetString("some_key2", &string_value)); 231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ("some_value2", string_value); 232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace bookmark_api_helpers 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace extensions 237