Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(333)

Unified Diff: components/bookmarks/browser/bookmark_model_unittest.cc

Issue 1133463005: Update all bookmarks which use an icon URL when a favicon's bitmap is updated (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@startup_do_not_unexpire
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/bookmarks/browser/bookmark_model_unittest.cc
diff --git a/components/bookmarks/browser/bookmark_model_unittest.cc b/components/bookmarks/browser/bookmark_model_unittest.cc
index bf4f9176d0cf05e42ceb73f730e10d40e8b5141b..fd4236b5638ec49d13aec7bdc01aef8c87fa1814 100644
--- a/components/bookmarks/browser/bookmark_model_unittest.cc
+++ b/components/bookmarks/browser/bookmark_model_unittest.cc
@@ -18,13 +18,17 @@
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
+#include "components/bookmarks/browser/bookmark_match.h"
#include "components/bookmarks/browser/bookmark_model_observer.h"
#include "components/bookmarks/browser/bookmark_utils.h"
#include "components/bookmarks/test/bookmark_test_helpers.h"
#include "components/bookmarks/test/test_bookmark_client.h"
+#include "components/favicon_base/favicon_callback.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/base/models/tree_node_iterator.h"
#include "ui/base/models/tree_node_model.h"
+#include "ui/gfx/image/image.h"
#include "url/gurl.h"
using base::ASCIIToUTF16;
@@ -207,6 +211,8 @@ void VerifyNoDuplicateIDs(BookmarkModel* model) {
ASSERT_TRUE(ids.insert(it.Next()->id()).second);
}
+} // namespace
+
class BookmarkModelTest : public testing::Test,
public BookmarkModelObserver {
public:
@@ -247,6 +253,22 @@ class BookmarkModelTest : public testing::Test,
ClearCounts();
}
+ // Emulates the favicon getting asynchronously loaded. In production, the
+ // favicon is asynchronously loaded when BookmarkModel::GetFavicon() is
+ // called.
+ void OnFaviconLoaded(BookmarkNode* node, const GURL& icon_url) {
+ SkBitmap bitmap;
+ bitmap.allocN32Pixels(16, 16);
+ bitmap.eraseColor(SK_ColorBLUE);
+ gfx::Image image = gfx::Image::CreateFrom1xBitmap(bitmap);
+
+ favicon_base::FaviconImageResult image_result;
+ image_result.image = image;
+ image_result.icon_url = icon_url;
+ model_->OnFaviconDataAvailable(node, favicon_base::IconType::FAVICON,
+ image_result);
+ }
+
void BookmarkModelLoaded(BookmarkModel* model, bool ids_reassigned) override {
// We never load from the db, so that this should never get invoked.
NOTREACHED();
@@ -307,8 +329,6 @@ class BookmarkModelTest : public testing::Test,
void BookmarkNodeFaviconChanged(BookmarkModel* model,
const BookmarkNode* node) override {
- // We never attempt to load favicons, so that this method never
- // gets invoked.
}
void ExtensiveBookmarkChangesBeginning(BookmarkModel* model) override {
@@ -605,9 +625,51 @@ TEST_F(BookmarkModelTest, RemoveFolder) {
ASSERT_EQ(0, root->child_count());
AssertObserverCount(0, 0, 1, 0, 0, 1, 0, 0, 0);
observer_details_.ExpectEquals(root, NULL, 0, -1);
+}
- // Make sure there is no mapping for the URL.
- ASSERT_TRUE(model_->GetMostRecentlyAddedUserNodeForURL(url) == NULL);
+// Test that removing a BookmarkNode from the BookmarkModel clears any data that
+// the BookmarkModel has cached about that BookmarkNode.
+TEST_F(BookmarkModelTest, RemoveURLClearsCachedData) {
+ const BookmarkNode* root = model_->bookmark_bar_node();
+ base::string16 kTitle(ASCIIToUTF16("foo"));
+ GURL kPageURL("http://www.google.com");
+ GURL kFaviconURL("http://www.google.com/favicon.ico");
+
+ const BookmarkNode* node = model_->AddURL(root, 0, kTitle, kPageURL);
+
+ // Emulate the favicon getting asynchronously loaded.
+ OnFaviconLoaded(AsMutable(node), kFaviconURL);
+
+ // Test initial state.
+ std::vector<const BookmarkNode*> nodes;
+ model_->GetNodesByURL(kPageURL, &nodes);
+ ASSERT_EQ(1u, nodes.size());
+ ASSERT_EQ(node, nodes[0]);
+
+ nodes.clear();
+ model_->GetNodesByIconURL(kFaviconURL, &nodes);
+ ASSERT_EQ(1u, nodes.size());
+ ASSERT_EQ(node, nodes[0]);
+
+ std::vector<BookmarkMatch> matches;
+ model_->GetBookmarksMatching(kTitle, 1u, &matches);
+ ASSERT_EQ(1u, nodes.size());
+ ASSERT_EQ(node, nodes[0]);
+
+ // Remove |node| from the BookmarkModel.
+ model_->Remove(nodes[0]);
+
+ // Test that the BookmarkModel has forgotten about |node|.
+ nodes.clear();
+ model_->GetNodesByURL(kPageURL, &nodes);
+ EXPECT_TRUE(nodes.empty());
+
+ model_->GetNodesByIconURL(kFaviconURL, &nodes);
+ EXPECT_TRUE(nodes.empty());
+
+ matches.clear();
+ model_->GetBookmarksMatching(kTitle, 1u, &matches);
+ EXPECT_TRUE(matches.empty());
}
TEST_F(BookmarkModelTest, RemoveAllUserBookmarks) {
@@ -681,6 +743,39 @@ TEST_F(BookmarkModelTest, SetURL) {
EXPECT_EQ(url, node->url());
}
+// Test that changing a BookmarkNode's page URL clears the BookmarkModel's
+// cached favicon data and the BookmarkNode's favicon data.
+TEST_F(BookmarkModelTest, SetURLClearsFaviconData) {
+ const BookmarkNode* root = model_->bookmark_bar_node();
+ base::string16 kTitle(ASCIIToUTF16("foo"));
+ GURL kPageURL1("http://www.google.com");
+ GURL kFaviconURL1("http://www.google.com/favicon.ico");
+ GURL kPageURL2("http://www.wikipedia.org");
+
+ const BookmarkNode* node = model_->AddURL(root, 0, kTitle, kPageURL1);
+
+ // Emulate the favicon getting asynchronously loaded.
+ OnFaviconLoaded(AsMutable(node), kFaviconURL1);
+
+ // Test initial state.
+ std::vector<const BookmarkNode*> nodes;
+ model_->GetNodesByIconURL(kFaviconURL1, &nodes);
+ ASSERT_EQ(1u, nodes.size());
+ ASSERT_EQ(node, nodes[0]);
+ ASSERT_EQ(kFaviconURL1, node->icon_url());
+
+ // Change |node|'s page URL
+ model_->SetURL(node, kPageURL2);
+
+ // BookmarkModel should have forgotten about |kFaviconURL1|.
+ nodes.clear();
+ model_->GetNodesByIconURL(kFaviconURL1, &nodes);
+ EXPECT_TRUE(nodes.empty());
+
+ // |node|'s favicon data should have been cleared.
+ EXPECT_EQ(GURL(), node->icon_url());
+}
+
TEST_F(BookmarkModelTest, SetDateAdded) {
const BookmarkNode* root = model_->bookmark_bar_node();
const base::string16 title(ASCIIToUTF16("foo"));
@@ -1181,5 +1276,4 @@ TEST(BookmarkModelTest2, CreateAndRestore) {
}
}
-} // namespace
} // namespace bookmarks

Powered by Google App Engine
This is Rietveld 408576698