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