| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 "base/string_util.h" | 5 #include "base/string_util.h" |
| 6 #include "chrome/browser/bookmarks/bookmark_model.h" | 6 #include "chrome/browser/bookmarks/bookmark_model.h" |
| 7 #include "chrome/browser/bookmarks/bookmark_codec.h" | 7 #include "chrome/browser/bookmarks/bookmark_codec.h" |
| 8 #include "chrome/browser/bookmarks/bookmark_utils.h" | 8 #include "chrome/browser/bookmarks/bookmark_utils.h" |
| 9 #include "chrome/common/chrome_constants.h" | 9 #include "chrome/common/chrome_constants.h" |
| 10 #include "chrome/common/chrome_paths.h" | 10 #include "chrome/common/chrome_paths.h" |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 removed_count++; | 83 removed_count++; |
| 84 observer_details.Set(parent, NULL, index, -1); | 84 observer_details.Set(parent, NULL, index, -1); |
| 85 } | 85 } |
| 86 | 86 |
| 87 virtual void BookmarkNodeChanged(BookmarkModel* model, | 87 virtual void BookmarkNodeChanged(BookmarkModel* model, |
| 88 BookmarkNode* node) { | 88 BookmarkNode* node) { |
| 89 changed_count++; | 89 changed_count++; |
| 90 observer_details.Set(node, NULL, -1, -1); | 90 observer_details.Set(node, NULL, -1, -1); |
| 91 } | 91 } |
| 92 | 92 |
| 93 virtual void BookmarkNodeChildrenReordered(BookmarkModel* model, |
| 94 BookmarkNode* node) { |
| 95 reordered_count_++; |
| 96 } |
| 97 |
| 93 virtual void BookmarkNodeFavIconLoaded(BookmarkModel* model, | 98 virtual void BookmarkNodeFavIconLoaded(BookmarkModel* model, |
| 94 BookmarkNode* node) { | 99 BookmarkNode* node) { |
| 95 // We never attempt to load favicons, so that this method never | 100 // We never attempt to load favicons, so that this method never |
| 96 // gets invoked. | 101 // gets invoked. |
| 97 } | 102 } |
| 98 | 103 |
| 99 void ClearCounts() { | 104 void ClearCounts() { |
| 100 moved_count = added_count = removed_count = changed_count = 0; | 105 reordered_count_ = moved_count = added_count = removed_count = |
| 106 changed_count = 0; |
| 101 } | 107 } |
| 102 | 108 |
| 103 void AssertObserverCount(int added_count, | 109 void AssertObserverCount(int added_count, |
| 104 int moved_count, | 110 int moved_count, |
| 105 int removed_count, | 111 int removed_count, |
| 106 int changed_count) { | 112 int changed_count, |
| 113 int reordered_count) { |
| 107 ASSERT_EQ(added_count, this->added_count); | 114 ASSERT_EQ(added_count, this->added_count); |
| 108 ASSERT_EQ(moved_count, this->moved_count); | 115 ASSERT_EQ(moved_count, this->moved_count); |
| 109 ASSERT_EQ(removed_count, this->removed_count); | 116 ASSERT_EQ(removed_count, this->removed_count); |
| 110 ASSERT_EQ(changed_count, this->changed_count); | 117 ASSERT_EQ(changed_count, this->changed_count); |
| 118 ASSERT_EQ(reordered_count, reordered_count_); |
| 111 } | 119 } |
| 112 | 120 |
| 113 void AssertNodesEqual(BookmarkNode* expected, BookmarkNode* actual) { | 121 void AssertNodesEqual(BookmarkNode* expected, BookmarkNode* actual) { |
| 114 ASSERT_TRUE(expected); | 122 ASSERT_TRUE(expected); |
| 115 ASSERT_TRUE(actual); | 123 ASSERT_TRUE(actual); |
| 116 EXPECT_EQ(expected->GetTitle(), actual->GetTitle()); | 124 EXPECT_EQ(expected->GetTitle(), actual->GetTitle()); |
| 117 EXPECT_EQ(expected->GetType(), actual->GetType()); | 125 EXPECT_EQ(expected->GetType(), actual->GetType()); |
| 118 EXPECT_TRUE(expected->date_added() == actual->date_added()); | 126 EXPECT_TRUE(expected->date_added() == actual->date_added()); |
| 119 if (expected->GetType() == history::StarredEntry::URL) { | 127 if (expected->GetType() == history::StarredEntry::URL) { |
| 120 EXPECT_EQ(expected->GetURL(), actual->GetURL()); | 128 EXPECT_EQ(expected->GetURL(), actual->GetURL()); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 138 BookmarkModel model; | 146 BookmarkModel model; |
| 139 | 147 |
| 140 int moved_count; | 148 int moved_count; |
| 141 | 149 |
| 142 int added_count; | 150 int added_count; |
| 143 | 151 |
| 144 int removed_count; | 152 int removed_count; |
| 145 | 153 |
| 146 int changed_count; | 154 int changed_count; |
| 147 | 155 |
| 156 int reordered_count_; |
| 157 |
| 148 ObserverDetails observer_details; | 158 ObserverDetails observer_details; |
| 149 }; | 159 }; |
| 150 | 160 |
| 151 TEST_F(BookmarkModelTest, InitialState) { | 161 TEST_F(BookmarkModelTest, InitialState) { |
| 152 BookmarkNode* bb_node = model.GetBookmarkBarNode(); | 162 BookmarkNode* bb_node = model.GetBookmarkBarNode(); |
| 153 ASSERT_TRUE(bb_node != NULL); | 163 ASSERT_TRUE(bb_node != NULL); |
| 154 EXPECT_EQ(0, bb_node->GetChildCount()); | 164 EXPECT_EQ(0, bb_node->GetChildCount()); |
| 155 EXPECT_EQ(history::StarredEntry::BOOKMARK_BAR, bb_node->GetType()); | 165 EXPECT_EQ(history::StarredEntry::BOOKMARK_BAR, bb_node->GetType()); |
| 156 | 166 |
| 157 BookmarkNode* other_node = model.other_node(); | 167 BookmarkNode* other_node = model.other_node(); |
| 158 ASSERT_TRUE(other_node != NULL); | 168 ASSERT_TRUE(other_node != NULL); |
| 159 EXPECT_EQ(0, other_node->GetChildCount()); | 169 EXPECT_EQ(0, other_node->GetChildCount()); |
| 160 EXPECT_EQ(history::StarredEntry::OTHER, other_node->GetType()); | 170 EXPECT_EQ(history::StarredEntry::OTHER, other_node->GetType()); |
| 161 | 171 |
| 162 EXPECT_TRUE(bb_node->id() != other_node->id()); | 172 EXPECT_TRUE(bb_node->id() != other_node->id()); |
| 163 } | 173 } |
| 164 | 174 |
| 165 TEST_F(BookmarkModelTest, AddURL) { | 175 TEST_F(BookmarkModelTest, AddURL) { |
| 166 BookmarkNode* root = model.GetBookmarkBarNode(); | 176 BookmarkNode* root = model.GetBookmarkBarNode(); |
| 167 const std::wstring title(L"foo"); | 177 const std::wstring title(L"foo"); |
| 168 const GURL url("http://foo.com"); | 178 const GURL url("http://foo.com"); |
| 169 | 179 |
| 170 BookmarkNode* new_node = model.AddURL(root, 0, title, url); | 180 BookmarkNode* new_node = model.AddURL(root, 0, title, url); |
| 171 AssertObserverCount(1, 0, 0, 0); | 181 AssertObserverCount(1, 0, 0, 0, 0); |
| 172 observer_details.AssertEquals(root, NULL, 0, -1); | 182 observer_details.AssertEquals(root, NULL, 0, -1); |
| 173 | 183 |
| 174 ASSERT_EQ(1, root->GetChildCount()); | 184 ASSERT_EQ(1, root->GetChildCount()); |
| 175 ASSERT_EQ(title, new_node->GetTitle()); | 185 ASSERT_EQ(title, new_node->GetTitle()); |
| 176 ASSERT_TRUE(url == new_node->GetURL()); | 186 ASSERT_TRUE(url == new_node->GetURL()); |
| 177 ASSERT_EQ(history::StarredEntry::URL, new_node->GetType()); | 187 ASSERT_EQ(history::StarredEntry::URL, new_node->GetType()); |
| 178 ASSERT_TRUE(new_node == model.GetMostRecentlyAddedNodeForURL(url)); | 188 ASSERT_TRUE(new_node == model.GetMostRecentlyAddedNodeForURL(url)); |
| 179 | 189 |
| 180 EXPECT_TRUE(new_node->id() != root->id() && | 190 EXPECT_TRUE(new_node->id() != root->id() && |
| 181 new_node->id() != model.other_node()->id()); | 191 new_node->id() != model.other_node()->id()); |
| 182 } | 192 } |
| 183 | 193 |
| 184 TEST_F(BookmarkModelTest, AddGroup) { | 194 TEST_F(BookmarkModelTest, AddGroup) { |
| 185 BookmarkNode* root = model.GetBookmarkBarNode(); | 195 BookmarkNode* root = model.GetBookmarkBarNode(); |
| 186 const std::wstring title(L"foo"); | 196 const std::wstring title(L"foo"); |
| 187 | 197 |
| 188 BookmarkNode* new_node = model.AddGroup(root, 0, title); | 198 BookmarkNode* new_node = model.AddGroup(root, 0, title); |
| 189 AssertObserverCount(1, 0, 0, 0); | 199 AssertObserverCount(1, 0, 0, 0, 0); |
| 190 observer_details.AssertEquals(root, NULL, 0, -1); | 200 observer_details.AssertEquals(root, NULL, 0, -1); |
| 191 | 201 |
| 192 ASSERT_EQ(1, root->GetChildCount()); | 202 ASSERT_EQ(1, root->GetChildCount()); |
| 193 ASSERT_EQ(title, new_node->GetTitle()); | 203 ASSERT_EQ(title, new_node->GetTitle()); |
| 194 ASSERT_EQ(history::StarredEntry::USER_GROUP, new_node->GetType()); | 204 ASSERT_EQ(history::StarredEntry::USER_GROUP, new_node->GetType()); |
| 195 | 205 |
| 196 EXPECT_TRUE(new_node->id() != root->id() && | 206 EXPECT_TRUE(new_node->id() != root->id() && |
| 197 new_node->id() != model.other_node()->id()); | 207 new_node->id() != model.other_node()->id()); |
| 198 | 208 |
| 199 // Add another group, just to make sure group_ids are incremented correctly. | 209 // Add another group, just to make sure group_ids are incremented correctly. |
| 200 ClearCounts(); | 210 ClearCounts(); |
| 201 BookmarkNode* new_node2 = model.AddGroup(root, 0, title); | 211 BookmarkNode* new_node2 = model.AddGroup(root, 0, title); |
| 202 AssertObserverCount(1, 0, 0, 0); | 212 AssertObserverCount(1, 0, 0, 0, 0); |
| 203 observer_details.AssertEquals(root, NULL, 0, -1); | 213 observer_details.AssertEquals(root, NULL, 0, -1); |
| 204 } | 214 } |
| 205 | 215 |
| 206 TEST_F(BookmarkModelTest, RemoveURL) { | 216 TEST_F(BookmarkModelTest, RemoveURL) { |
| 207 BookmarkNode* root = model.GetBookmarkBarNode(); | 217 BookmarkNode* root = model.GetBookmarkBarNode(); |
| 208 const std::wstring title(L"foo"); | 218 const std::wstring title(L"foo"); |
| 209 const GURL url("http://foo.com"); | 219 const GURL url("http://foo.com"); |
| 210 BookmarkNode* new_node = model.AddURL(root, 0, title, url); | 220 BookmarkNode* new_node = model.AddURL(root, 0, title, url); |
| 211 ClearCounts(); | 221 ClearCounts(); |
| 212 | 222 |
| 213 model.Remove(root, 0); | 223 model.Remove(root, 0); |
| 214 ASSERT_EQ(0, root->GetChildCount()); | 224 ASSERT_EQ(0, root->GetChildCount()); |
| 215 AssertObserverCount(0, 0, 1, 0); | 225 AssertObserverCount(0, 0, 1, 0, 0); |
| 216 observer_details.AssertEquals(root, NULL, 0, -1); | 226 observer_details.AssertEquals(root, NULL, 0, -1); |
| 217 | 227 |
| 218 // Make sure there is no mapping for the URL. | 228 // Make sure there is no mapping for the URL. |
| 219 ASSERT_TRUE(model.GetMostRecentlyAddedNodeForURL(url) == NULL); | 229 ASSERT_TRUE(model.GetMostRecentlyAddedNodeForURL(url) == NULL); |
| 220 } | 230 } |
| 221 | 231 |
| 222 TEST_F(BookmarkModelTest, RemoveGroup) { | 232 TEST_F(BookmarkModelTest, RemoveGroup) { |
| 223 BookmarkNode* root = model.GetBookmarkBarNode(); | 233 BookmarkNode* root = model.GetBookmarkBarNode(); |
| 224 BookmarkNode* group = model.AddGroup(root, 0, L"foo"); | 234 BookmarkNode* group = model.AddGroup(root, 0, L"foo"); |
| 225 | 235 |
| 226 ClearCounts(); | 236 ClearCounts(); |
| 227 | 237 |
| 228 // Add a URL as a child. | 238 // Add a URL as a child. |
| 229 const std::wstring title(L"foo"); | 239 const std::wstring title(L"foo"); |
| 230 const GURL url("http://foo.com"); | 240 const GURL url("http://foo.com"); |
| 231 BookmarkNode* new_node = model.AddURL(group, 0, title, url); | 241 BookmarkNode* new_node = model.AddURL(group, 0, title, url); |
| 232 | 242 |
| 233 ClearCounts(); | 243 ClearCounts(); |
| 234 | 244 |
| 235 // Now remove the group. | 245 // Now remove the group. |
| 236 model.Remove(root, 0); | 246 model.Remove(root, 0); |
| 237 ASSERT_EQ(0, root->GetChildCount()); | 247 ASSERT_EQ(0, root->GetChildCount()); |
| 238 AssertObserverCount(0, 0, 1, 0); | 248 AssertObserverCount(0, 0, 1, 0, 0); |
| 239 observer_details.AssertEquals(root, NULL, 0, -1); | 249 observer_details.AssertEquals(root, NULL, 0, -1); |
| 240 | 250 |
| 241 // Make sure there is no mapping for the URL. | 251 // Make sure there is no mapping for the URL. |
| 242 ASSERT_TRUE(model.GetMostRecentlyAddedNodeForURL(url) == NULL); | 252 ASSERT_TRUE(model.GetMostRecentlyAddedNodeForURL(url) == NULL); |
| 243 } | 253 } |
| 244 | 254 |
| 245 TEST_F(BookmarkModelTest, SetTitle) { | 255 TEST_F(BookmarkModelTest, SetTitle) { |
| 246 BookmarkNode* root = model.GetBookmarkBarNode(); | 256 BookmarkNode* root = model.GetBookmarkBarNode(); |
| 247 std::wstring title(L"foo"); | 257 std::wstring title(L"foo"); |
| 248 const GURL url("http://foo.com"); | 258 const GURL url("http://foo.com"); |
| 249 BookmarkNode* node = model.AddURL(root, 0, title, url); | 259 BookmarkNode* node = model.AddURL(root, 0, title, url); |
| 250 | 260 |
| 251 ClearCounts(); | 261 ClearCounts(); |
| 252 | 262 |
| 253 title = L"foo2"; | 263 title = L"foo2"; |
| 254 model.SetTitle(node, title); | 264 model.SetTitle(node, title); |
| 255 AssertObserverCount(0, 0, 0, 1); | 265 AssertObserverCount(0, 0, 0, 1, 0); |
| 256 observer_details.AssertEquals(node, NULL, -1, -1); | 266 observer_details.AssertEquals(node, NULL, -1, -1); |
| 257 EXPECT_EQ(title, node->GetTitle()); | 267 EXPECT_EQ(title, node->GetTitle()); |
| 258 } | 268 } |
| 259 | 269 |
| 260 TEST_F(BookmarkModelTest, Move) { | 270 TEST_F(BookmarkModelTest, Move) { |
| 261 BookmarkNode* root = model.GetBookmarkBarNode(); | 271 BookmarkNode* root = model.GetBookmarkBarNode(); |
| 262 std::wstring title(L"foo"); | 272 std::wstring title(L"foo"); |
| 263 const GURL url("http://foo.com"); | 273 const GURL url("http://foo.com"); |
| 264 BookmarkNode* node = model.AddURL(root, 0, title, url); | 274 BookmarkNode* node = model.AddURL(root, 0, title, url); |
| 265 BookmarkNode* group1 = model.AddGroup(root, 0, L"foo"); | 275 BookmarkNode* group1 = model.AddGroup(root, 0, L"foo"); |
| 266 ClearCounts(); | 276 ClearCounts(); |
| 267 | 277 |
| 268 model.Move(node, group1, 0); | 278 model.Move(node, group1, 0); |
| 269 | 279 |
| 270 AssertObserverCount(0, 1, 0, 0); | 280 AssertObserverCount(0, 1, 0, 0, 0); |
| 271 observer_details.AssertEquals(root, group1, 1, 0); | 281 observer_details.AssertEquals(root, group1, 1, 0); |
| 272 EXPECT_TRUE(group1 == node->GetParent()); | 282 EXPECT_TRUE(group1 == node->GetParent()); |
| 273 EXPECT_EQ(1, root->GetChildCount()); | 283 EXPECT_EQ(1, root->GetChildCount()); |
| 274 EXPECT_EQ(group1, root->GetChild(0)); | 284 EXPECT_EQ(group1, root->GetChild(0)); |
| 275 EXPECT_EQ(1, group1->GetChildCount()); | 285 EXPECT_EQ(1, group1->GetChildCount()); |
| 276 EXPECT_EQ(node, group1->GetChild(0)); | 286 EXPECT_EQ(node, group1->GetChild(0)); |
| 277 | 287 |
| 278 // And remove the group. | 288 // And remove the group. |
| 279 ClearCounts(); | 289 ClearCounts(); |
| 280 model.Remove(root, 0); | 290 model.Remove(root, 0); |
| 281 AssertObserverCount(0, 0, 1, 0); | 291 AssertObserverCount(0, 0, 1, 0, 0); |
| 282 observer_details.AssertEquals(root, NULL, 0, -1); | 292 observer_details.AssertEquals(root, NULL, 0, -1); |
| 283 EXPECT_TRUE(model.GetMostRecentlyAddedNodeForURL(url) == NULL); | 293 EXPECT_TRUE(model.GetMostRecentlyAddedNodeForURL(url) == NULL); |
| 284 EXPECT_EQ(0, root->GetChildCount()); | 294 EXPECT_EQ(0, root->GetChildCount()); |
| 285 } | 295 } |
| 286 | 296 |
| 287 // Tests that adding a URL to a folder updates the last modified time. | 297 // Tests that adding a URL to a folder updates the last modified time. |
| 288 TEST_F(BookmarkModelTest, ParentForNewNodes) { | 298 TEST_F(BookmarkModelTest, ParentForNewNodes) { |
| 289 ASSERT_EQ(model.GetBookmarkBarNode(), model.GetParentForNewNodes()); | 299 ASSERT_EQ(model.GetBookmarkBarNode(), model.GetParentForNewNodes()); |
| 290 | 300 |
| 291 const std::wstring title(L"foo"); | 301 const std::wstring title(L"foo"); |
| (...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 820 bb_model_->SetURLStarred(url, std::wstring(), true); | 830 bb_model_->SetURLStarred(url, std::wstring(), true); |
| 821 | 831 |
| 822 profile_->GetHistoryService(Profile::EXPLICIT_ACCESS)->AddPage( | 832 profile_->GetHistoryService(Profile::EXPLICIT_ACCESS)->AddPage( |
| 823 url, NULL, 1, GURL(), PageTransition::TYPED, | 833 url, NULL, 1, GURL(), PageTransition::TYPED, |
| 824 HistoryService::RedirectList()); | 834 HistoryService::RedirectList()); |
| 825 | 835 |
| 826 // This won't actually delete the URL, rather it'll empty out the visits. | 836 // This won't actually delete the URL, rather it'll empty out the visits. |
| 827 // This triggers blocking on the BookmarkModel. | 837 // This triggers blocking on the BookmarkModel. |
| 828 profile_->GetHistoryService(Profile::EXPLICIT_ACCESS)->DeleteURL(url); | 838 profile_->GetHistoryService(Profile::EXPLICIT_ACCESS)->DeleteURL(url); |
| 829 } | 839 } |
| 840 |
| 841 TEST_F(BookmarkModelTest, Sort) { |
| 842 // Populate the bookmark bar node with nodes for 'B', 'a', 'd' and 'C'. |
| 843 TestNode bbn; |
| 844 PopulateNodeFromString(L"B a d C", &bbn); |
| 845 BookmarkNode* parent = model.GetBookmarkBarNode(); |
| 846 PopulateBookmarkNode(&bbn, &model, parent); |
| 847 |
| 848 ClearCounts(); |
| 849 |
| 850 // Sort the children of the bookmark bar node. |
| 851 model.SortChildren(parent); |
| 852 |
| 853 // Make sure we were notified. |
| 854 AssertObserverCount(0, 0, 0, 0, 1); |
| 855 |
| 856 // Make sure the order matches. |
| 857 EXPECT_TRUE(parent->GetChild(0)->GetTitle() == L"a"); |
| 858 EXPECT_TRUE(parent->GetChild(1)->GetTitle() == L"B"); |
| 859 EXPECT_TRUE(parent->GetChild(2)->GetTitle() == L"C"); |
| 860 EXPECT_TRUE(parent->GetChild(3)->GetTitle() == L"d"); |
| 861 } |
| OLD | NEW |