| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/extensions/api/bookmarks/bookmark_api_helpers.h" | 5 #include "chrome/browser/extensions/api/bookmarks/bookmark_api_helpers.h" |
| 6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
| 9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 10 #include "base/values.h" | 10 #include "base/values.h" |
| 11 #include "chrome/browser/bookmarks/bookmark_model_factory.h" | 11 #include "chrome/browser/bookmarks/bookmark_model_factory.h" |
| 12 #include "chrome/browser/bookmarks/chrome_bookmark_client.h" | 12 #include "chrome/browser/bookmarks/managed_bookmark_service_factory.h" |
| 13 #include "chrome/browser/bookmarks/chrome_bookmark_client_factory.h" | |
| 14 #include "chrome/browser/extensions/api/bookmarks/bookmark_api_constants.h" | 13 #include "chrome/browser/extensions/api/bookmarks/bookmark_api_constants.h" |
| 15 #include "chrome/common/extensions/api/bookmarks.h" | 14 #include "chrome/common/extensions/api/bookmarks.h" |
| 16 #include "chrome/test/base/testing_profile.h" | 15 #include "chrome/test/base/testing_profile.h" |
| 17 #include "components/bookmarks/browser/bookmark_model.h" | 16 #include "components/bookmarks/browser/bookmark_model.h" |
| 17 #include "components/bookmarks/managed/managed_bookmark_service.h" |
| 18 #include "components/bookmarks/test/bookmark_test_helpers.h" | 18 #include "components/bookmarks/test/bookmark_test_helpers.h" |
| 19 #include "content/public/test/test_browser_thread_bundle.h" | 19 #include "content/public/test/test_browser_thread_bundle.h" |
| 20 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
| 21 | 21 |
| 22 using bookmarks::BookmarkModel; | 22 using bookmarks::BookmarkModel; |
| 23 using bookmarks::BookmarkNode; | 23 using bookmarks::BookmarkNode; |
| 24 | 24 |
| 25 namespace extensions { | 25 namespace extensions { |
| 26 | 26 |
| 27 namespace keys = bookmark_api_constants; | 27 namespace keys = bookmark_api_constants; |
| 28 using api::bookmarks::BookmarkTreeNode; | 28 using api::bookmarks::BookmarkTreeNode; |
| 29 | 29 |
| 30 namespace bookmark_api_helpers { | 30 namespace bookmark_api_helpers { |
| 31 | 31 |
| 32 class ExtensionBookmarksTest : public testing::Test { | 32 class ExtensionBookmarksTest : public testing::Test { |
| 33 public: | 33 public: |
| 34 ExtensionBookmarksTest() | 34 ExtensionBookmarksTest() |
| 35 : client_(NULL), model_(NULL), node_(NULL), node2_(NULL), folder_(NULL) {} | 35 : managed_(NULL), |
| 36 model_(NULL), |
| 37 node_(NULL), |
| 38 node2_(NULL), |
| 39 folder_(NULL) {} |
| 36 | 40 |
| 37 void SetUp() override { | 41 void SetUp() override { |
| 38 profile_.CreateBookmarkModel(false); | 42 profile_.CreateBookmarkModel(false); |
| 39 model_ = BookmarkModelFactory::GetForProfile(&profile_); | 43 model_ = BookmarkModelFactory::GetForProfile(&profile_); |
| 40 client_ = ChromeBookmarkClientFactory::GetForProfile(&profile_); | 44 managed_ = ManagedBookmarkServiceFactory::GetForProfile(&profile_); |
| 41 bookmarks::test::WaitForBookmarkModelToLoad(model_); | 45 bookmarks::test::WaitForBookmarkModelToLoad(model_); |
| 42 | 46 |
| 43 node_ = model_->AddURL(model_->other_node(), 0, base::ASCIIToUTF16("Digg"), | 47 node_ = model_->AddURL(model_->other_node(), 0, base::ASCIIToUTF16("Digg"), |
| 44 GURL("http://www.reddit.com")); | 48 GURL("http://www.reddit.com")); |
| 45 model_->SetNodeMetaInfo(node_, "some_key1", "some_value1"); | 49 model_->SetNodeMetaInfo(node_, "some_key1", "some_value1"); |
| 46 model_->SetNodeMetaInfo(node_, "some_key2", "some_value2"); | 50 model_->SetNodeMetaInfo(node_, "some_key2", "some_value2"); |
| 47 model_->AddURL(model_->other_node(), 0, base::ASCIIToUTF16("News"), | 51 model_->AddURL(model_->other_node(), 0, base::ASCIIToUTF16("News"), |
| 48 GURL("http://www.foxnews.com")); | 52 GURL("http://www.foxnews.com")); |
| 49 folder_ = model_->AddFolder( | 53 folder_ = model_->AddFolder( |
| 50 model_->other_node(), 0, base::ASCIIToUTF16("outer folder")); | 54 model_->other_node(), 0, base::ASCIIToUTF16("outer folder")); |
| 51 model_->SetNodeMetaInfo(folder_, "some_key1", "some_value1"); | 55 model_->SetNodeMetaInfo(folder_, "some_key1", "some_value1"); |
| 52 model_->AddFolder(folder_, 0, base::ASCIIToUTF16("inner folder 1")); | 56 model_->AddFolder(folder_, 0, base::ASCIIToUTF16("inner folder 1")); |
| 53 model_->AddFolder(folder_, 0, base::ASCIIToUTF16("inner folder 2")); | 57 model_->AddFolder(folder_, 0, base::ASCIIToUTF16("inner folder 2")); |
| 54 node2_ = model_->AddURL( | 58 node2_ = model_->AddURL( |
| 55 folder_, 0, base::ASCIIToUTF16("Digg"), GURL("http://reddit.com")); | 59 folder_, 0, base::ASCIIToUTF16("Digg"), GURL("http://reddit.com")); |
| 56 model_->SetNodeMetaInfo(node2_, "some_key2", "some_value2"); | 60 model_->SetNodeMetaInfo(node2_, "some_key2", "some_value2"); |
| 57 model_->AddURL( | 61 model_->AddURL( |
| 58 folder_, 0, base::ASCIIToUTF16("CNet"), GURL("http://cnet.com")); | 62 folder_, 0, base::ASCIIToUTF16("CNet"), GURL("http://cnet.com")); |
| 59 } | 63 } |
| 60 | 64 |
| 61 content::TestBrowserThreadBundle thread_bundle_; | 65 content::TestBrowserThreadBundle thread_bundle_; |
| 62 TestingProfile profile_; | 66 TestingProfile profile_; |
| 63 ChromeBookmarkClient* client_; | 67 bookmarks::ManagedBookmarkService* managed_; |
| 64 BookmarkModel* model_; | 68 BookmarkModel* model_; |
| 65 const BookmarkNode* node_; | 69 const BookmarkNode* node_; |
| 66 const BookmarkNode* node2_; | 70 const BookmarkNode* node2_; |
| 67 const BookmarkNode* folder_; | 71 const BookmarkNode* folder_; |
| 68 }; | 72 }; |
| 69 | 73 |
| 70 TEST_F(ExtensionBookmarksTest, GetFullTreeFromRoot) { | 74 TEST_F(ExtensionBookmarksTest, GetFullTreeFromRoot) { |
| 71 scoped_ptr<BookmarkTreeNode> tree( | 75 scoped_ptr<BookmarkTreeNode> tree( |
| 72 GetBookmarkTreeNode(client_, | 76 GetBookmarkTreeNode(managed_, |
| 73 model_->other_node(), | 77 model_->other_node(), |
| 74 true, // Recurse. | 78 true, // Recurse. |
| 75 false)); // Not only folders. | 79 false)); // Not only folders. |
| 76 ASSERT_EQ(3U, tree->children->size()); | 80 ASSERT_EQ(3U, tree->children->size()); |
| 77 } | 81 } |
| 78 | 82 |
| 79 TEST_F(ExtensionBookmarksTest, GetFoldersOnlyFromRoot) { | 83 TEST_F(ExtensionBookmarksTest, GetFoldersOnlyFromRoot) { |
| 80 scoped_ptr<BookmarkTreeNode> tree( | 84 scoped_ptr<BookmarkTreeNode> tree( |
| 81 GetBookmarkTreeNode(client_, | 85 GetBookmarkTreeNode(managed_, |
| 82 model_->other_node(), | 86 model_->other_node(), |
| 83 true, // Recurse. | 87 true, // Recurse. |
| 84 true)); // Only folders. | 88 true)); // Only folders. |
| 85 ASSERT_EQ(1U, tree->children->size()); | 89 ASSERT_EQ(1U, tree->children->size()); |
| 86 } | 90 } |
| 87 | 91 |
| 88 TEST_F(ExtensionBookmarksTest, GetSubtree) { | 92 TEST_F(ExtensionBookmarksTest, GetSubtree) { |
| 89 scoped_ptr<BookmarkTreeNode> tree( | 93 scoped_ptr<BookmarkTreeNode> tree( |
| 90 GetBookmarkTreeNode(client_, | 94 GetBookmarkTreeNode(managed_, |
| 91 folder_, | 95 folder_, |
| 92 true, // Recurse. | 96 true, // Recurse. |
| 93 false)); // Not only folders. | 97 false)); // Not only folders. |
| 94 ASSERT_EQ(4U, tree->children->size()); | 98 ASSERT_EQ(4U, tree->children->size()); |
| 95 linked_ptr<BookmarkTreeNode> digg = tree->children->at(1); | 99 linked_ptr<BookmarkTreeNode> digg = tree->children->at(1); |
| 96 ASSERT_TRUE(digg.get()); | 100 ASSERT_TRUE(digg.get()); |
| 97 ASSERT_EQ("Digg", digg->title); | 101 ASSERT_EQ("Digg", digg->title); |
| 98 } | 102 } |
| 99 | 103 |
| 100 TEST_F(ExtensionBookmarksTest, GetSubtreeFoldersOnly) { | 104 TEST_F(ExtensionBookmarksTest, GetSubtreeFoldersOnly) { |
| 101 scoped_ptr<BookmarkTreeNode> tree( | 105 scoped_ptr<BookmarkTreeNode> tree( |
| 102 GetBookmarkTreeNode(client_, | 106 GetBookmarkTreeNode(managed_, |
| 103 folder_, | 107 folder_, |
| 104 true, // Recurse. | 108 true, // Recurse. |
| 105 true)); // Only folders. | 109 true)); // Only folders. |
| 106 ASSERT_EQ(2U, tree->children->size()); | 110 ASSERT_EQ(2U, tree->children->size()); |
| 107 linked_ptr<BookmarkTreeNode> inner_folder = tree->children->at(1); | 111 linked_ptr<BookmarkTreeNode> inner_folder = tree->children->at(1); |
| 108 ASSERT_TRUE(inner_folder.get()); | 112 ASSERT_TRUE(inner_folder.get()); |
| 109 ASSERT_EQ("inner folder 1", inner_folder->title); | 113 ASSERT_EQ("inner folder 1", inner_folder->title); |
| 110 } | 114 } |
| 111 | 115 |
| 112 TEST_F(ExtensionBookmarksTest, GetModifiableNode) { | 116 TEST_F(ExtensionBookmarksTest, GetModifiableNode) { |
| 113 scoped_ptr<BookmarkTreeNode> tree( | 117 scoped_ptr<BookmarkTreeNode> tree( |
| 114 GetBookmarkTreeNode(client_, | 118 GetBookmarkTreeNode(managed_, |
| 115 node_, | 119 node_, |
| 116 false, // Recurse. | 120 false, // Recurse. |
| 117 false)); // Only folders. | 121 false)); // Only folders. |
| 118 EXPECT_EQ("Digg", tree->title); | 122 EXPECT_EQ("Digg", tree->title); |
| 119 ASSERT_TRUE(tree->url); | 123 ASSERT_TRUE(tree->url); |
| 120 EXPECT_EQ("http://www.reddit.com/", *tree->url); | 124 EXPECT_EQ("http://www.reddit.com/", *tree->url); |
| 121 EXPECT_EQ(api::bookmarks::BOOKMARK_TREE_NODE_UNMODIFIABLE_NONE, | 125 EXPECT_EQ(api::bookmarks::BOOKMARK_TREE_NODE_UNMODIFIABLE_NONE, |
| 122 tree->unmodifiable); | 126 tree->unmodifiable); |
| 123 } | 127 } |
| 124 | 128 |
| 125 TEST_F(ExtensionBookmarksTest, GetManagedNode) { | 129 TEST_F(ExtensionBookmarksTest, GetManagedNode) { |
| 126 const BookmarkNode* managed_bookmark = | 130 const BookmarkNode* managed_bookmark = |
| 127 model_->AddURL(client_->managed_node(), | 131 model_->AddURL(managed_->managed_node(), |
| 128 0, | 132 0, |
| 129 base::ASCIIToUTF16("Chromium"), | 133 base::ASCIIToUTF16("Chromium"), |
| 130 GURL("http://www.chromium.org/")); | 134 GURL("http://www.chromium.org/")); |
| 131 scoped_ptr<BookmarkTreeNode> tree( | 135 scoped_ptr<BookmarkTreeNode> tree( |
| 132 GetBookmarkTreeNode(client_, | 136 GetBookmarkTreeNode(managed_, |
| 133 managed_bookmark, | 137 managed_bookmark, |
| 134 false, // Recurse. | 138 false, // Recurse. |
| 135 false)); // Only folders. | 139 false)); // Only folders. |
| 136 EXPECT_EQ("Chromium", tree->title); | 140 EXPECT_EQ("Chromium", tree->title); |
| 137 EXPECT_EQ("http://www.chromium.org/", *tree->url); | 141 EXPECT_EQ("http://www.chromium.org/", *tree->url); |
| 138 EXPECT_EQ(api::bookmarks::BOOKMARK_TREE_NODE_UNMODIFIABLE_MANAGED, | 142 EXPECT_EQ(api::bookmarks::BOOKMARK_TREE_NODE_UNMODIFIABLE_MANAGED, |
| 139 tree->unmodifiable); | 143 tree->unmodifiable); |
| 140 } | 144 } |
| 141 | 145 |
| 142 TEST_F(ExtensionBookmarksTest, RemoveNodeInvalidId) { | 146 TEST_F(ExtensionBookmarksTest, RemoveNodeInvalidId) { |
| 143 int64 invalid_id = model_->next_node_id(); | 147 int64 invalid_id = model_->next_node_id(); |
| 144 std::string error; | 148 std::string error; |
| 145 EXPECT_FALSE(RemoveNode(model_, client_, invalid_id, true, &error)); | 149 EXPECT_FALSE(RemoveNode(model_, managed_, invalid_id, true, &error)); |
| 146 EXPECT_EQ(keys::kNoNodeError, error); | 150 EXPECT_EQ(keys::kNoNodeError, error); |
| 147 } | 151 } |
| 148 | 152 |
| 149 TEST_F(ExtensionBookmarksTest, RemoveNodePermanent) { | 153 TEST_F(ExtensionBookmarksTest, RemoveNodePermanent) { |
| 150 std::string error; | 154 std::string error; |
| 151 EXPECT_FALSE( | 155 EXPECT_FALSE( |
| 152 RemoveNode(model_, client_, model_->other_node()->id(), true, &error)); | 156 RemoveNode(model_, managed_, model_->other_node()->id(), true, &error)); |
| 153 EXPECT_EQ(keys::kModifySpecialError, error); | 157 EXPECT_EQ(keys::kModifySpecialError, error); |
| 154 } | 158 } |
| 155 | 159 |
| 156 TEST_F(ExtensionBookmarksTest, RemoveNodeManaged) { | 160 TEST_F(ExtensionBookmarksTest, RemoveNodeManaged) { |
| 157 const BookmarkNode* managed_bookmark = | 161 const BookmarkNode* managed_bookmark = |
| 158 model_->AddURL(client_->managed_node(), | 162 model_->AddURL(managed_->managed_node(), |
| 159 0, | 163 0, |
| 160 base::ASCIIToUTF16("Chromium"), | 164 base::ASCIIToUTF16("Chromium"), |
| 161 GURL("http://www.chromium.org")); | 165 GURL("http://www.chromium.org")); |
| 162 std::string error; | 166 std::string error; |
| 163 EXPECT_FALSE( | 167 EXPECT_FALSE( |
| 164 RemoveNode(model_, client_, managed_bookmark->id(), true, &error)); | 168 RemoveNode(model_, managed_, managed_bookmark->id(), true, &error)); |
| 165 EXPECT_EQ(keys::kModifyManagedError, error); | 169 EXPECT_EQ(keys::kModifyManagedError, error); |
| 166 } | 170 } |
| 167 | 171 |
| 168 TEST_F(ExtensionBookmarksTest, RemoveNodeNotRecursive) { | 172 TEST_F(ExtensionBookmarksTest, RemoveNodeNotRecursive) { |
| 169 std::string error; | 173 std::string error; |
| 170 EXPECT_FALSE(RemoveNode(model_, client_, folder_->id(), false, &error)); | 174 EXPECT_FALSE(RemoveNode(model_, managed_, folder_->id(), false, &error)); |
| 171 EXPECT_EQ(keys::kFolderNotEmptyError, error); | 175 EXPECT_EQ(keys::kFolderNotEmptyError, error); |
| 172 } | 176 } |
| 173 | 177 |
| 174 TEST_F(ExtensionBookmarksTest, RemoveNodeRecursive) { | 178 TEST_F(ExtensionBookmarksTest, RemoveNodeRecursive) { |
| 175 EXPECT_EQ(3, model_->other_node()->child_count()); | 179 EXPECT_EQ(3, model_->other_node()->child_count()); |
| 176 std::string error; | 180 std::string error; |
| 177 EXPECT_TRUE(RemoveNode(model_, client_, folder_->id(), true, &error)); | 181 EXPECT_TRUE(RemoveNode(model_, managed_, folder_->id(), true, &error)); |
| 178 EXPECT_EQ(2, model_->other_node()->child_count()); | 182 EXPECT_EQ(2, model_->other_node()->child_count()); |
| 179 } | 183 } |
| 180 | 184 |
| 181 TEST_F(ExtensionBookmarksTest, GetMetaInfo) { | 185 TEST_F(ExtensionBookmarksTest, GetMetaInfo) { |
| 182 base::DictionaryValue id_to_meta_info_map; | 186 base::DictionaryValue id_to_meta_info_map; |
| 183 GetMetaInfo(*model_->other_node(), &id_to_meta_info_map); | 187 GetMetaInfo(*model_->other_node(), &id_to_meta_info_map); |
| 184 EXPECT_EQ(8u, id_to_meta_info_map.size()); | 188 EXPECT_EQ(8u, id_to_meta_info_map.size()); |
| 185 | 189 |
| 186 // Verify top level node. | 190 // Verify top level node. |
| 187 const base::Value* value = NULL; | 191 const base::Value* value = NULL; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 232 string_value.clear(); | 236 string_value.clear(); |
| 233 EXPECT_FALSE(dictionary_value->GetString("some_key1", &string_value)); | 237 EXPECT_FALSE(dictionary_value->GetString("some_key1", &string_value)); |
| 234 EXPECT_EQ("", string_value); | 238 EXPECT_EQ("", string_value); |
| 235 EXPECT_TRUE(dictionary_value->GetString("some_key2", &string_value)); | 239 EXPECT_TRUE(dictionary_value->GetString("some_key2", &string_value)); |
| 236 EXPECT_EQ("some_value2", string_value); | 240 EXPECT_EQ("some_value2", string_value); |
| 237 | 241 |
| 238 } | 242 } |
| 239 | 243 |
| 240 } // namespace bookmark_api_helpers | 244 } // namespace bookmark_api_helpers |
| 241 } // namespace extensions | 245 } // namespace extensions |
| OLD | NEW |