| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "components/bookmarks/browser/bookmark_utils.h" | 5 #include "components/bookmarks/browser/bookmark_utils.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 int grouped_changes_beginning_count_; | 71 int grouped_changes_beginning_count_; |
| 72 int grouped_changes_ended_count_; | 72 int grouped_changes_ended_count_; |
| 73 | 73 |
| 74 // Clipboard requires a message loop. | 74 // Clipboard requires a message loop. |
| 75 base::MessageLoopForUI loop_; | 75 base::MessageLoopForUI loop_; |
| 76 | 76 |
| 77 DISALLOW_COPY_AND_ASSIGN(BookmarkUtilsTest); | 77 DISALLOW_COPY_AND_ASSIGN(BookmarkUtilsTest); |
| 78 }; | 78 }; |
| 79 | 79 |
| 80 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesWordPhraseQuery) { | 80 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesWordPhraseQuery) { |
| 81 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); | 81 std::unique_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
| 82 const BookmarkNode* node1 = model->AddURL(model->other_node(), | 82 const BookmarkNode* node1 = model->AddURL(model->other_node(), |
| 83 0, | 83 0, |
| 84 ASCIIToUTF16("foo bar"), | 84 ASCIIToUTF16("foo bar"), |
| 85 GURL("http://www.google.com")); | 85 GURL("http://www.google.com")); |
| 86 const BookmarkNode* node2 = model->AddURL(model->other_node(), | 86 const BookmarkNode* node2 = model->AddURL(model->other_node(), |
| 87 0, | 87 0, |
| 88 ASCIIToUTF16("baz buz"), | 88 ASCIIToUTF16("baz buz"), |
| 89 GURL("http://www.cnn.com")); | 89 GURL("http://www.cnn.com")); |
| 90 const BookmarkNode* folder1 = | 90 const BookmarkNode* folder1 = |
| 91 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("foo")); | 91 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("foo")); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 | 128 |
| 129 // Bookmark Bar and Other Bookmarks are not returned in search results. | 129 // Bookmark Bar and Other Bookmarks are not returned in search results. |
| 130 *query.word_phrase_query = ASCIIToUTF16("Bookmark"); | 130 *query.word_phrase_query = ASCIIToUTF16("Bookmark"); |
| 131 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); | 131 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); |
| 132 ASSERT_EQ(0U, nodes.size()); | 132 ASSERT_EQ(0U, nodes.size()); |
| 133 nodes.clear(); | 133 nodes.clear(); |
| 134 } | 134 } |
| 135 | 135 |
| 136 // Check exact matching against a URL query. | 136 // Check exact matching against a URL query. |
| 137 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesUrl) { | 137 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesUrl) { |
| 138 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); | 138 std::unique_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
| 139 const BookmarkNode* node1 = model->AddURL(model->other_node(), | 139 const BookmarkNode* node1 = model->AddURL(model->other_node(), |
| 140 0, | 140 0, |
| 141 ASCIIToUTF16("Google"), | 141 ASCIIToUTF16("Google"), |
| 142 GURL("https://www.google.com/")); | 142 GURL("https://www.google.com/")); |
| 143 model->AddURL(model->other_node(), | 143 model->AddURL(model->other_node(), |
| 144 0, | 144 0, |
| 145 ASCIIToUTF16("Google Calendar"), | 145 ASCIIToUTF16("Google Calendar"), |
| 146 GURL("https://www.google.com/calendar")); | 146 GURL("https://www.google.com/calendar")); |
| 147 | 147 |
| 148 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("Folder")); | 148 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("Folder")); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 163 | 163 |
| 164 // Empty URL should not match folders. | 164 // Empty URL should not match folders. |
| 165 *query.url = ASCIIToUTF16(""); | 165 *query.url = ASCIIToUTF16(""); |
| 166 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); | 166 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); |
| 167 ASSERT_EQ(0U, nodes.size()); | 167 ASSERT_EQ(0U, nodes.size()); |
| 168 nodes.clear(); | 168 nodes.clear(); |
| 169 } | 169 } |
| 170 | 170 |
| 171 // Check exact matching against a title query. | 171 // Check exact matching against a title query. |
| 172 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesTitle) { | 172 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesTitle) { |
| 173 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); | 173 std::unique_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
| 174 const BookmarkNode* node1 = model->AddURL(model->other_node(), | 174 const BookmarkNode* node1 = model->AddURL(model->other_node(), |
| 175 0, | 175 0, |
| 176 ASCIIToUTF16("Google"), | 176 ASCIIToUTF16("Google"), |
| 177 GURL("https://www.google.com/")); | 177 GURL("https://www.google.com/")); |
| 178 model->AddURL(model->other_node(), | 178 model->AddURL(model->other_node(), |
| 179 0, | 179 0, |
| 180 ASCIIToUTF16("Google Calendar"), | 180 ASCIIToUTF16("Google Calendar"), |
| 181 GURL("https://www.google.com/calendar")); | 181 GURL("https://www.google.com/calendar")); |
| 182 | 182 |
| 183 const BookmarkNode* folder1 = | 183 const BookmarkNode* folder1 = |
| (...skipping 16 matching lines...) Expand all Loading... |
| 200 // Title should match folders. | 200 // Title should match folders. |
| 201 *query.title = ASCIIToUTF16("Folder"); | 201 *query.title = ASCIIToUTF16("Folder"); |
| 202 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); | 202 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); |
| 203 ASSERT_EQ(1U, nodes.size()); | 203 ASSERT_EQ(1U, nodes.size()); |
| 204 EXPECT_TRUE(nodes[0] == folder1); | 204 EXPECT_TRUE(nodes[0] == folder1); |
| 205 nodes.clear(); | 205 nodes.clear(); |
| 206 } | 206 } |
| 207 | 207 |
| 208 // Check matching against a query with multiple predicates. | 208 // Check matching against a query with multiple predicates. |
| 209 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesConjunction) { | 209 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesConjunction) { |
| 210 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); | 210 std::unique_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
| 211 const BookmarkNode* node1 = model->AddURL(model->other_node(), | 211 const BookmarkNode* node1 = model->AddURL(model->other_node(), |
| 212 0, | 212 0, |
| 213 ASCIIToUTF16("Google"), | 213 ASCIIToUTF16("Google"), |
| 214 GURL("https://www.google.com/")); | 214 GURL("https://www.google.com/")); |
| 215 model->AddURL(model->other_node(), | 215 model->AddURL(model->other_node(), |
| 216 0, | 216 0, |
| 217 ASCIIToUTF16("Google Calendar"), | 217 ASCIIToUTF16("Google Calendar"), |
| 218 GURL("https://www.google.com/calendar")); | 218 GURL("https://www.google.com/calendar")); |
| 219 | 219 |
| 220 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("Folder")); | 220 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("Folder")); |
| 221 | 221 |
| 222 std::vector<const BookmarkNode*> nodes; | 222 std::vector<const BookmarkNode*> nodes; |
| 223 QueryFields query; | 223 QueryFields query; |
| 224 | 224 |
| 225 // Test all fields matching. | 225 // Test all fields matching. |
| 226 query.word_phrase_query.reset(new base::string16(ASCIIToUTF16("www"))); | 226 query.word_phrase_query.reset(new base::string16(ASCIIToUTF16("www"))); |
| 227 query.url.reset(new base::string16(ASCIIToUTF16("https://www.google.com/"))); | 227 query.url.reset(new base::string16(ASCIIToUTF16("https://www.google.com/"))); |
| 228 query.title.reset(new base::string16(ASCIIToUTF16("Google"))); | 228 query.title.reset(new base::string16(ASCIIToUTF16("Google"))); |
| 229 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); | 229 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); |
| 230 ASSERT_EQ(1U, nodes.size()); | 230 ASSERT_EQ(1U, nodes.size()); |
| 231 EXPECT_TRUE(nodes[0] == node1); | 231 EXPECT_TRUE(nodes[0] == node1); |
| 232 nodes.clear(); | 232 nodes.clear(); |
| 233 | 233 |
| 234 scoped_ptr<base::string16>* fields[] = { | 234 std::unique_ptr<base::string16>* fields[] = {&query.word_phrase_query, |
| 235 &query.word_phrase_query, &query.url, &query.title }; | 235 &query.url, &query.title}; |
| 236 | 236 |
| 237 // Test two fields matching. | 237 // Test two fields matching. |
| 238 for (size_t i = 0; i < arraysize(fields); i++) { | 238 for (size_t i = 0; i < arraysize(fields); i++) { |
| 239 scoped_ptr<base::string16> original_value(fields[i]->release()); | 239 std::unique_ptr<base::string16> original_value(fields[i]->release()); |
| 240 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); | 240 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); |
| 241 ASSERT_EQ(1U, nodes.size()); | 241 ASSERT_EQ(1U, nodes.size()); |
| 242 EXPECT_TRUE(nodes[0] == node1); | 242 EXPECT_TRUE(nodes[0] == node1); |
| 243 nodes.clear(); | 243 nodes.clear(); |
| 244 fields[i]->reset(original_value.release()); | 244 fields[i]->reset(original_value.release()); |
| 245 } | 245 } |
| 246 | 246 |
| 247 // Test two fields matching with one non-matching field. | 247 // Test two fields matching with one non-matching field. |
| 248 for (size_t i = 0; i < arraysize(fields); i++) { | 248 for (size_t i = 0; i < arraysize(fields); i++) { |
| 249 scoped_ptr<base::string16> original_value(fields[i]->release()); | 249 std::unique_ptr<base::string16> original_value(fields[i]->release()); |
| 250 fields[i]->reset(new base::string16(ASCIIToUTF16("fjdkslafjkldsa"))); | 250 fields[i]->reset(new base::string16(ASCIIToUTF16("fjdkslafjkldsa"))); |
| 251 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); | 251 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); |
| 252 ASSERT_EQ(0U, nodes.size()); | 252 ASSERT_EQ(0U, nodes.size()); |
| 253 nodes.clear(); | 253 nodes.clear(); |
| 254 fields[i]->reset(original_value.release()); | 254 fields[i]->reset(original_value.release()); |
| 255 } | 255 } |
| 256 } | 256 } |
| 257 | 257 |
| 258 // Copy and paste is not yet supported on iOS. http://crbug.com/228147 | 258 // Copy and paste is not yet supported on iOS. http://crbug.com/228147 |
| 259 #if !defined(OS_IOS) | 259 #if !defined(OS_IOS) |
| 260 TEST_F(BookmarkUtilsTest, PasteBookmarkFromURL) { | 260 TEST_F(BookmarkUtilsTest, PasteBookmarkFromURL) { |
| 261 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); | 261 std::unique_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
| 262 const base::string16 url_text = ASCIIToUTF16("http://www.google.com/"); | 262 const base::string16 url_text = ASCIIToUTF16("http://www.google.com/"); |
| 263 const BookmarkNode* new_folder = model->AddFolder( | 263 const BookmarkNode* new_folder = model->AddFolder( |
| 264 model->bookmark_bar_node(), 0, ASCIIToUTF16("New_Folder")); | 264 model->bookmark_bar_node(), 0, ASCIIToUTF16("New_Folder")); |
| 265 | 265 |
| 266 // Write blank text to clipboard. | 266 // Write blank text to clipboard. |
| 267 { | 267 { |
| 268 ui::ScopedClipboardWriter clipboard_writer(ui::CLIPBOARD_TYPE_COPY_PASTE); | 268 ui::ScopedClipboardWriter clipboard_writer(ui::CLIPBOARD_TYPE_COPY_PASTE); |
| 269 clipboard_writer.WriteText(base::string16()); | 269 clipboard_writer.WriteText(base::string16()); |
| 270 } | 270 } |
| 271 // Now we shouldn't be able to paste from the clipboard. | 271 // Now we shouldn't be able to paste from the clipboard. |
| 272 EXPECT_FALSE(CanPasteFromClipboard(model.get(), new_folder)); | 272 EXPECT_FALSE(CanPasteFromClipboard(model.get(), new_folder)); |
| 273 | 273 |
| 274 // Write some valid url to the clipboard. | 274 // Write some valid url to the clipboard. |
| 275 { | 275 { |
| 276 ui::ScopedClipboardWriter clipboard_writer(ui::CLIPBOARD_TYPE_COPY_PASTE); | 276 ui::ScopedClipboardWriter clipboard_writer(ui::CLIPBOARD_TYPE_COPY_PASTE); |
| 277 clipboard_writer.WriteText(url_text); | 277 clipboard_writer.WriteText(url_text); |
| 278 } | 278 } |
| 279 // Now we should be able to paste from the clipboard. | 279 // Now we should be able to paste from the clipboard. |
| 280 EXPECT_TRUE(CanPasteFromClipboard(model.get(), new_folder)); | 280 EXPECT_TRUE(CanPasteFromClipboard(model.get(), new_folder)); |
| 281 | 281 |
| 282 PasteFromClipboard(model.get(), new_folder, 0); | 282 PasteFromClipboard(model.get(), new_folder, 0); |
| 283 ASSERT_EQ(1, new_folder->child_count()); | 283 ASSERT_EQ(1, new_folder->child_count()); |
| 284 | 284 |
| 285 // Url for added node should be same as url_text. | 285 // Url for added node should be same as url_text. |
| 286 EXPECT_EQ(url_text, ASCIIToUTF16(new_folder->GetChild(0)->url().spec())); | 286 EXPECT_EQ(url_text, ASCIIToUTF16(new_folder->GetChild(0)->url().spec())); |
| 287 } | 287 } |
| 288 | 288 |
| 289 TEST_F(BookmarkUtilsTest, CopyPaste) { | 289 TEST_F(BookmarkUtilsTest, CopyPaste) { |
| 290 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); | 290 std::unique_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
| 291 const BookmarkNode* node = model->AddURL(model->other_node(), | 291 const BookmarkNode* node = model->AddURL(model->other_node(), |
| 292 0, | 292 0, |
| 293 ASCIIToUTF16("foo bar"), | 293 ASCIIToUTF16("foo bar"), |
| 294 GURL("http://www.google.com")); | 294 GURL("http://www.google.com")); |
| 295 | 295 |
| 296 // Copy a node to the clipboard. | 296 // Copy a node to the clipboard. |
| 297 std::vector<const BookmarkNode*> nodes; | 297 std::vector<const BookmarkNode*> nodes; |
| 298 nodes.push_back(node); | 298 nodes.push_back(node); |
| 299 CopyToClipboard(model.get(), nodes, false); | 299 CopyToClipboard(model.get(), nodes, false); |
| 300 | 300 |
| 301 // And make sure we can paste a bookmark from the clipboard. | 301 // And make sure we can paste a bookmark from the clipboard. |
| 302 EXPECT_TRUE(CanPasteFromClipboard(model.get(), model->bookmark_bar_node())); | 302 EXPECT_TRUE(CanPasteFromClipboard(model.get(), model->bookmark_bar_node())); |
| 303 | 303 |
| 304 // Write some text to the clipboard. | 304 // Write some text to the clipboard. |
| 305 { | 305 { |
| 306 ui::ScopedClipboardWriter clipboard_writer( | 306 ui::ScopedClipboardWriter clipboard_writer( |
| 307 ui::CLIPBOARD_TYPE_COPY_PASTE); | 307 ui::CLIPBOARD_TYPE_COPY_PASTE); |
| 308 clipboard_writer.WriteText(ASCIIToUTF16("foo")); | 308 clipboard_writer.WriteText(ASCIIToUTF16("foo")); |
| 309 } | 309 } |
| 310 | 310 |
| 311 // Now we shouldn't be able to paste from the clipboard. | 311 // Now we shouldn't be able to paste from the clipboard. |
| 312 EXPECT_FALSE(CanPasteFromClipboard(model.get(), model->bookmark_bar_node())); | 312 EXPECT_FALSE(CanPasteFromClipboard(model.get(), model->bookmark_bar_node())); |
| 313 } | 313 } |
| 314 | 314 |
| 315 // Test for updating title such that url and title pair are unique among the | 315 // Test for updating title such that url and title pair are unique among the |
| 316 // children of parent. | 316 // children of parent. |
| 317 TEST_F(BookmarkUtilsTest, MakeTitleUnique) { | 317 TEST_F(BookmarkUtilsTest, MakeTitleUnique) { |
| 318 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); | 318 std::unique_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
| 319 const base::string16 url_text = ASCIIToUTF16("http://www.google.com/"); | 319 const base::string16 url_text = ASCIIToUTF16("http://www.google.com/"); |
| 320 const base::string16 title_text = ASCIIToUTF16("foobar"); | 320 const base::string16 title_text = ASCIIToUTF16("foobar"); |
| 321 const BookmarkNode* bookmark_bar_node = model->bookmark_bar_node(); | 321 const BookmarkNode* bookmark_bar_node = model->bookmark_bar_node(); |
| 322 | 322 |
| 323 const BookmarkNode* node = | 323 const BookmarkNode* node = |
| 324 model->AddURL(bookmark_bar_node, 0, title_text, GURL(url_text)); | 324 model->AddURL(bookmark_bar_node, 0, title_text, GURL(url_text)); |
| 325 | 325 |
| 326 EXPECT_EQ(url_text, | 326 EXPECT_EQ(url_text, |
| 327 ASCIIToUTF16(bookmark_bar_node->GetChild(0)->url().spec())); | 327 ASCIIToUTF16(bookmark_bar_node->GetChild(0)->url().spec())); |
| 328 EXPECT_EQ(title_text, bookmark_bar_node->GetChild(0)->GetTitle()); | 328 EXPECT_EQ(title_text, bookmark_bar_node->GetChild(0)->GetTitle()); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 341 // Url for added node should be same as url_text. | 341 // Url for added node should be same as url_text. |
| 342 EXPECT_EQ(url_text, | 342 EXPECT_EQ(url_text, |
| 343 ASCIIToUTF16(bookmark_bar_node->GetChild(1)->url().spec())); | 343 ASCIIToUTF16(bookmark_bar_node->GetChild(1)->url().spec())); |
| 344 // Title for added node should be numeric subscript suffix with copied node | 344 // Title for added node should be numeric subscript suffix with copied node |
| 345 // title. | 345 // title. |
| 346 EXPECT_EQ(ASCIIToUTF16("foobar (1)"), | 346 EXPECT_EQ(ASCIIToUTF16("foobar (1)"), |
| 347 bookmark_bar_node->GetChild(1)->GetTitle()); | 347 bookmark_bar_node->GetChild(1)->GetTitle()); |
| 348 } | 348 } |
| 349 | 349 |
| 350 TEST_F(BookmarkUtilsTest, CopyPasteMetaInfo) { | 350 TEST_F(BookmarkUtilsTest, CopyPasteMetaInfo) { |
| 351 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); | 351 std::unique_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
| 352 const BookmarkNode* node = model->AddURL(model->other_node(), | 352 const BookmarkNode* node = model->AddURL(model->other_node(), |
| 353 0, | 353 0, |
| 354 ASCIIToUTF16("foo bar"), | 354 ASCIIToUTF16("foo bar"), |
| 355 GURL("http://www.google.com")); | 355 GURL("http://www.google.com")); |
| 356 model->SetNodeMetaInfo(node, "somekey", "somevalue"); | 356 model->SetNodeMetaInfo(node, "somekey", "somevalue"); |
| 357 model->SetNodeMetaInfo(node, "someotherkey", "someothervalue"); | 357 model->SetNodeMetaInfo(node, "someotherkey", "someothervalue"); |
| 358 | 358 |
| 359 // Copy a node to the clipboard. | 359 // Copy a node to the clipboard. |
| 360 std::vector<const BookmarkNode*> nodes; | 360 std::vector<const BookmarkNode*> nodes; |
| 361 nodes.push_back(node); | 361 nodes.push_back(node); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 383 EXPECT_EQ("someothervalue", value); | 383 EXPECT_EQ("someothervalue", value); |
| 384 } | 384 } |
| 385 | 385 |
| 386 #if defined(OS_LINUX) || defined(OS_MACOSX) | 386 #if defined(OS_LINUX) || defined(OS_MACOSX) |
| 387 // http://crbug.com/396472 | 387 // http://crbug.com/396472 |
| 388 #define MAYBE_CutToClipboard DISABLED_CutToClipboard | 388 #define MAYBE_CutToClipboard DISABLED_CutToClipboard |
| 389 #else | 389 #else |
| 390 #define MAYBE_CutToClipboard CutToClipboard | 390 #define MAYBE_CutToClipboard CutToClipboard |
| 391 #endif | 391 #endif |
| 392 TEST_F(BookmarkUtilsTest, MAYBE_CutToClipboard) { | 392 TEST_F(BookmarkUtilsTest, MAYBE_CutToClipboard) { |
| 393 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); | 393 std::unique_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
| 394 model->AddObserver(this); | 394 model->AddObserver(this); |
| 395 | 395 |
| 396 base::string16 title(ASCIIToUTF16("foo")); | 396 base::string16 title(ASCIIToUTF16("foo")); |
| 397 GURL url("http://foo.com"); | 397 GURL url("http://foo.com"); |
| 398 const BookmarkNode* n1 = model->AddURL(model->other_node(), 0, title, url); | 398 const BookmarkNode* n1 = model->AddURL(model->other_node(), 0, title, url); |
| 399 const BookmarkNode* n2 = model->AddURL(model->other_node(), 1, title, url); | 399 const BookmarkNode* n2 = model->AddURL(model->other_node(), 1, title, url); |
| 400 | 400 |
| 401 // Cut the nodes to the clipboard. | 401 // Cut the nodes to the clipboard. |
| 402 std::vector<const BookmarkNode*> nodes; | 402 std::vector<const BookmarkNode*> nodes; |
| 403 nodes.push_back(n1); | 403 nodes.push_back(n1); |
| 404 nodes.push_back(n2); | 404 nodes.push_back(n2); |
| 405 CopyToClipboard(model.get(), nodes, true); | 405 CopyToClipboard(model.get(), nodes, true); |
| 406 | 406 |
| 407 // Make sure the nodes were removed. | 407 // Make sure the nodes were removed. |
| 408 EXPECT_EQ(0, model->other_node()->child_count()); | 408 EXPECT_EQ(0, model->other_node()->child_count()); |
| 409 | 409 |
| 410 // Make sure observers were notified the set of changes should be grouped. | 410 // Make sure observers were notified the set of changes should be grouped. |
| 411 ExpectGroupedChangeCount(1, 1); | 411 ExpectGroupedChangeCount(1, 1); |
| 412 | 412 |
| 413 // And make sure we can paste from the clipboard. | 413 // And make sure we can paste from the clipboard. |
| 414 EXPECT_TRUE(CanPasteFromClipboard(model.get(), model->other_node())); | 414 EXPECT_TRUE(CanPasteFromClipboard(model.get(), model->other_node())); |
| 415 } | 415 } |
| 416 | 416 |
| 417 TEST_F(BookmarkUtilsTest, PasteNonEditableNodes) { | 417 TEST_F(BookmarkUtilsTest, PasteNonEditableNodes) { |
| 418 // Load a model with an extra node that is not editable. | 418 // Load a model with an extra node that is not editable. |
| 419 scoped_ptr<TestBookmarkClient> client(new TestBookmarkClient()); | 419 std::unique_ptr<TestBookmarkClient> client(new TestBookmarkClient()); |
| 420 BookmarkPermanentNode* extra_node = new BookmarkPermanentNode(100); | 420 BookmarkPermanentNode* extra_node = new BookmarkPermanentNode(100); |
| 421 BookmarkPermanentNodeList extra_nodes; | 421 BookmarkPermanentNodeList extra_nodes; |
| 422 extra_nodes.push_back(extra_node); | 422 extra_nodes.push_back(extra_node); |
| 423 client->SetExtraNodesToLoad(std::move(extra_nodes)); | 423 client->SetExtraNodesToLoad(std::move(extra_nodes)); |
| 424 | 424 |
| 425 scoped_ptr<BookmarkModel> model( | 425 std::unique_ptr<BookmarkModel> model( |
| 426 TestBookmarkClient::CreateModelWithClient(std::move(client))); | 426 TestBookmarkClient::CreateModelWithClient(std::move(client))); |
| 427 const BookmarkNode* node = model->AddURL(model->other_node(), | 427 const BookmarkNode* node = model->AddURL(model->other_node(), |
| 428 0, | 428 0, |
| 429 ASCIIToUTF16("foo bar"), | 429 ASCIIToUTF16("foo bar"), |
| 430 GURL("http://www.google.com")); | 430 GURL("http://www.google.com")); |
| 431 | 431 |
| 432 // Copy a node to the clipboard. | 432 // Copy a node to the clipboard. |
| 433 std::vector<const BookmarkNode*> nodes; | 433 std::vector<const BookmarkNode*> nodes; |
| 434 nodes.push_back(node); | 434 nodes.push_back(node); |
| 435 CopyToClipboard(model.get(), nodes, false); | 435 CopyToClipboard(model.get(), nodes, false); |
| 436 | 436 |
| 437 // And make sure we can paste a bookmark from the clipboard. | 437 // And make sure we can paste a bookmark from the clipboard. |
| 438 EXPECT_TRUE(CanPasteFromClipboard(model.get(), model->bookmark_bar_node())); | 438 EXPECT_TRUE(CanPasteFromClipboard(model.get(), model->bookmark_bar_node())); |
| 439 | 439 |
| 440 // But it can't be pasted into a non-editable folder. | 440 // But it can't be pasted into a non-editable folder. |
| 441 BookmarkClient* upcast = model->client(); | 441 BookmarkClient* upcast = model->client(); |
| 442 EXPECT_FALSE(upcast->CanBeEditedByUser(extra_node)); | 442 EXPECT_FALSE(upcast->CanBeEditedByUser(extra_node)); |
| 443 EXPECT_FALSE(CanPasteFromClipboard(model.get(), extra_node)); | 443 EXPECT_FALSE(CanPasteFromClipboard(model.get(), extra_node)); |
| 444 } | 444 } |
| 445 #endif // !defined(OS_IOS) | 445 #endif // !defined(OS_IOS) |
| 446 | 446 |
| 447 TEST_F(BookmarkUtilsTest, GetParentForNewNodes) { | 447 TEST_F(BookmarkUtilsTest, GetParentForNewNodes) { |
| 448 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); | 448 std::unique_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
| 449 // This tests the case where selection contains one item and that item is a | 449 // This tests the case where selection contains one item and that item is a |
| 450 // folder. | 450 // folder. |
| 451 std::vector<const BookmarkNode*> nodes; | 451 std::vector<const BookmarkNode*> nodes; |
| 452 nodes.push_back(model->bookmark_bar_node()); | 452 nodes.push_back(model->bookmark_bar_node()); |
| 453 int index = -1; | 453 int index = -1; |
| 454 const BookmarkNode* real_parent = | 454 const BookmarkNode* real_parent = |
| 455 GetParentForNewNodes(model->bookmark_bar_node(), nodes, &index); | 455 GetParentForNewNodes(model->bookmark_bar_node(), nodes, &index); |
| 456 EXPECT_EQ(real_parent, model->bookmark_bar_node()); | 456 EXPECT_EQ(real_parent, model->bookmark_bar_node()); |
| 457 EXPECT_EQ(0, index); | 457 EXPECT_EQ(0, index); |
| 458 | 458 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 479 | 479 |
| 480 // This tests the case where selection doesn't contain any items. | 480 // This tests the case where selection doesn't contain any items. |
| 481 nodes.clear(); | 481 nodes.clear(); |
| 482 real_parent = GetParentForNewNodes(model->bookmark_bar_node(), nodes, &index); | 482 real_parent = GetParentForNewNodes(model->bookmark_bar_node(), nodes, &index); |
| 483 EXPECT_EQ(real_parent, model->bookmark_bar_node()); | 483 EXPECT_EQ(real_parent, model->bookmark_bar_node()); |
| 484 EXPECT_EQ(2, index); | 484 EXPECT_EQ(2, index); |
| 485 } | 485 } |
| 486 | 486 |
| 487 // Verifies that meta info is copied when nodes are cloned. | 487 // Verifies that meta info is copied when nodes are cloned. |
| 488 TEST_F(BookmarkUtilsTest, CloneMetaInfo) { | 488 TEST_F(BookmarkUtilsTest, CloneMetaInfo) { |
| 489 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); | 489 std::unique_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
| 490 // Add a node containing meta info. | 490 // Add a node containing meta info. |
| 491 const BookmarkNode* node = model->AddURL(model->other_node(), | 491 const BookmarkNode* node = model->AddURL(model->other_node(), |
| 492 0, | 492 0, |
| 493 ASCIIToUTF16("foo bar"), | 493 ASCIIToUTF16("foo bar"), |
| 494 GURL("http://www.google.com")); | 494 GURL("http://www.google.com")); |
| 495 model->SetNodeMetaInfo(node, "somekey", "somevalue"); | 495 model->SetNodeMetaInfo(node, "somekey", "somevalue"); |
| 496 model->SetNodeMetaInfo(node, "someotherkey", "someothervalue"); | 496 model->SetNodeMetaInfo(node, "someotherkey", "someothervalue"); |
| 497 | 497 |
| 498 // Clone node to a different folder. | 498 // Clone node to a different folder. |
| 499 const BookmarkNode* folder = | 499 const BookmarkNode* folder = |
| (...skipping 12 matching lines...) Expand all Loading... |
| 512 std::string value; | 512 std::string value; |
| 513 EXPECT_TRUE(clone->GetMetaInfo("somekey", &value)); | 513 EXPECT_TRUE(clone->GetMetaInfo("somekey", &value)); |
| 514 EXPECT_EQ("somevalue", value); | 514 EXPECT_EQ("somevalue", value); |
| 515 EXPECT_TRUE(clone->GetMetaInfo("someotherkey", &value)); | 515 EXPECT_TRUE(clone->GetMetaInfo("someotherkey", &value)); |
| 516 EXPECT_EQ("someothervalue", value); | 516 EXPECT_EQ("someothervalue", value); |
| 517 } | 517 } |
| 518 | 518 |
| 519 // Verifies that meta info fields in the non cloned set are not copied when | 519 // Verifies that meta info fields in the non cloned set are not copied when |
| 520 // cloning a bookmark. | 520 // cloning a bookmark. |
| 521 TEST_F(BookmarkUtilsTest, CloneBookmarkResetsNonClonedKey) { | 521 TEST_F(BookmarkUtilsTest, CloneBookmarkResetsNonClonedKey) { |
| 522 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); | 522 std::unique_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
| 523 model->AddNonClonedKey("foo"); | 523 model->AddNonClonedKey("foo"); |
| 524 const BookmarkNode* parent = model->other_node(); | 524 const BookmarkNode* parent = model->other_node(); |
| 525 const BookmarkNode* node = model->AddURL( | 525 const BookmarkNode* node = model->AddURL( |
| 526 parent, 0, ASCIIToUTF16("title"), GURL("http://www.google.com")); | 526 parent, 0, ASCIIToUTF16("title"), GURL("http://www.google.com")); |
| 527 model->SetNodeMetaInfo(node, "foo", "ignored value"); | 527 model->SetNodeMetaInfo(node, "foo", "ignored value"); |
| 528 model->SetNodeMetaInfo(node, "bar", "kept value"); | 528 model->SetNodeMetaInfo(node, "bar", "kept value"); |
| 529 std::vector<BookmarkNodeData::Element> elements; | 529 std::vector<BookmarkNodeData::Element> elements; |
| 530 BookmarkNodeData::Element node_data(node); | 530 BookmarkNodeData::Element node_data(node); |
| 531 elements.push_back(node_data); | 531 elements.push_back(node_data); |
| 532 | 532 |
| 533 // Cloning a bookmark should clear the non cloned key. | 533 // Cloning a bookmark should clear the non cloned key. |
| 534 CloneBookmarkNode(model.get(), elements, parent, 0, true); | 534 CloneBookmarkNode(model.get(), elements, parent, 0, true); |
| 535 ASSERT_EQ(2, parent->child_count()); | 535 ASSERT_EQ(2, parent->child_count()); |
| 536 std::string value; | 536 std::string value; |
| 537 EXPECT_FALSE(parent->GetChild(0)->GetMetaInfo("foo", &value)); | 537 EXPECT_FALSE(parent->GetChild(0)->GetMetaInfo("foo", &value)); |
| 538 | 538 |
| 539 // Other keys should still be cloned. | 539 // Other keys should still be cloned. |
| 540 EXPECT_TRUE(parent->GetChild(0)->GetMetaInfo("bar", &value)); | 540 EXPECT_TRUE(parent->GetChild(0)->GetMetaInfo("bar", &value)); |
| 541 EXPECT_EQ("kept value", value); | 541 EXPECT_EQ("kept value", value); |
| 542 } | 542 } |
| 543 | 543 |
| 544 // Verifies that meta info fields in the non cloned set are not copied when | 544 // Verifies that meta info fields in the non cloned set are not copied when |
| 545 // cloning a folder. | 545 // cloning a folder. |
| 546 TEST_F(BookmarkUtilsTest, CloneFolderResetsNonClonedKey) { | 546 TEST_F(BookmarkUtilsTest, CloneFolderResetsNonClonedKey) { |
| 547 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); | 547 std::unique_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
| 548 model->AddNonClonedKey("foo"); | 548 model->AddNonClonedKey("foo"); |
| 549 const BookmarkNode* parent = model->other_node(); | 549 const BookmarkNode* parent = model->other_node(); |
| 550 const BookmarkNode* node = model->AddFolder(parent, 0, ASCIIToUTF16("title")); | 550 const BookmarkNode* node = model->AddFolder(parent, 0, ASCIIToUTF16("title")); |
| 551 model->SetNodeMetaInfo(node, "foo", "ignored value"); | 551 model->SetNodeMetaInfo(node, "foo", "ignored value"); |
| 552 model->SetNodeMetaInfo(node, "bar", "kept value"); | 552 model->SetNodeMetaInfo(node, "bar", "kept value"); |
| 553 std::vector<BookmarkNodeData::Element> elements; | 553 std::vector<BookmarkNodeData::Element> elements; |
| 554 BookmarkNodeData::Element node_data(node); | 554 BookmarkNodeData::Element node_data(node); |
| 555 elements.push_back(node_data); | 555 elements.push_back(node_data); |
| 556 | 556 |
| 557 // Cloning a folder should clear the non cloned key. | 557 // Cloning a folder should clear the non cloned key. |
| 558 CloneBookmarkNode(model.get(), elements, parent, 0, true); | 558 CloneBookmarkNode(model.get(), elements, parent, 0, true); |
| 559 ASSERT_EQ(2, parent->child_count()); | 559 ASSERT_EQ(2, parent->child_count()); |
| 560 std::string value; | 560 std::string value; |
| 561 EXPECT_FALSE(parent->GetChild(0)->GetMetaInfo("foo", &value)); | 561 EXPECT_FALSE(parent->GetChild(0)->GetMetaInfo("foo", &value)); |
| 562 | 562 |
| 563 // Other keys should still be cloned. | 563 // Other keys should still be cloned. |
| 564 EXPECT_TRUE(parent->GetChild(0)->GetMetaInfo("bar", &value)); | 564 EXPECT_TRUE(parent->GetChild(0)->GetMetaInfo("bar", &value)); |
| 565 EXPECT_EQ("kept value", value); | 565 EXPECT_EQ("kept value", value); |
| 566 } | 566 } |
| 567 | 567 |
| 568 TEST_F(BookmarkUtilsTest, RemoveAllBookmarks) { | 568 TEST_F(BookmarkUtilsTest, RemoveAllBookmarks) { |
| 569 // Load a model with an extra node that is not editable. | 569 // Load a model with an extra node that is not editable. |
| 570 scoped_ptr<TestBookmarkClient> client(new TestBookmarkClient()); | 570 std::unique_ptr<TestBookmarkClient> client(new TestBookmarkClient()); |
| 571 BookmarkPermanentNode* extra_node = new BookmarkPermanentNode(100); | 571 BookmarkPermanentNode* extra_node = new BookmarkPermanentNode(100); |
| 572 BookmarkPermanentNodeList extra_nodes; | 572 BookmarkPermanentNodeList extra_nodes; |
| 573 extra_nodes.push_back(extra_node); | 573 extra_nodes.push_back(extra_node); |
| 574 client->SetExtraNodesToLoad(std::move(extra_nodes)); | 574 client->SetExtraNodesToLoad(std::move(extra_nodes)); |
| 575 | 575 |
| 576 scoped_ptr<BookmarkModel> model( | 576 std::unique_ptr<BookmarkModel> model( |
| 577 TestBookmarkClient::CreateModelWithClient(std::move(client))); | 577 TestBookmarkClient::CreateModelWithClient(std::move(client))); |
| 578 EXPECT_TRUE(model->bookmark_bar_node()->empty()); | 578 EXPECT_TRUE(model->bookmark_bar_node()->empty()); |
| 579 EXPECT_TRUE(model->other_node()->empty()); | 579 EXPECT_TRUE(model->other_node()->empty()); |
| 580 EXPECT_TRUE(model->mobile_node()->empty()); | 580 EXPECT_TRUE(model->mobile_node()->empty()); |
| 581 EXPECT_TRUE(extra_node->empty()); | 581 EXPECT_TRUE(extra_node->empty()); |
| 582 | 582 |
| 583 const base::string16 title = base::ASCIIToUTF16("Title"); | 583 const base::string16 title = base::ASCIIToUTF16("Title"); |
| 584 const GURL url("http://google.com"); | 584 const GURL url("http://google.com"); |
| 585 model->AddURL(model->bookmark_bar_node(), 0, title, url); | 585 model->AddURL(model->bookmark_bar_node(), 0, title, url); |
| 586 model->AddURL(model->other_node(), 0, title, url); | 586 model->AddURL(model->other_node(), 0, title, url); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 597 model->GetNodesByURL(url, &nodes); | 597 model->GetNodesByURL(url, &nodes); |
| 598 ASSERT_EQ(1u, nodes.size()); | 598 ASSERT_EQ(1u, nodes.size()); |
| 599 EXPECT_TRUE(model->bookmark_bar_node()->empty()); | 599 EXPECT_TRUE(model->bookmark_bar_node()->empty()); |
| 600 EXPECT_TRUE(model->other_node()->empty()); | 600 EXPECT_TRUE(model->other_node()->empty()); |
| 601 EXPECT_TRUE(model->mobile_node()->empty()); | 601 EXPECT_TRUE(model->mobile_node()->empty()); |
| 602 EXPECT_EQ(1, extra_node->child_count()); | 602 EXPECT_EQ(1, extra_node->child_count()); |
| 603 } | 603 } |
| 604 | 604 |
| 605 } // namespace | 605 } // namespace |
| 606 } // namespace bookmarks | 606 } // namespace bookmarks |
| OLD | NEW |