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

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, 5 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 37d6bf6912db8654f5c0e7e5a4d9c6a157da40be..271d182222d8fb9aaeb11dd12d671ccc63f4bf21 100644
--- a/components/bookmarks/browser/bookmark_model_unittest.cc
+++ b/components/bookmarks/browser/bookmark_model_unittest.cc
@@ -21,9 +21,12 @@
#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;
@@ -1181,4 +1184,148 @@ TEST(BookmarkModelTest2, CreateAndRestore) {
}
} // namespace
+
+class BookmarkModelFaviconTest : public testing::Test,
+ public BookmarkModelObserver {
+ public:
+ BookmarkModelFaviconTest() : model_(client_.CreateModel()) {
+ model_->AddObserver(this);
+ }
+
+ // 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);
+ }
+
+ bool WasNodeUpdated(const BookmarkNode* node) {
+ return std::find(updated_nodes_.begin(), updated_nodes_.end(), node) !=
+ updated_nodes_.end();
+ }
+
+ void ClearUpdatedNodes() {
+ updated_nodes_.clear();
+ }
+
+ protected:
+ void BookmarkModelLoaded(BookmarkModel* model, bool ids_reassigned) override {
+ }
+
+ void BookmarkNodeMoved(BookmarkModel* model,
+ const BookmarkNode* old_parent,
+ int old_index,
+ const BookmarkNode* new_parent,
+ int new_index) override {}
+
+ void BookmarkNodeAdded(BookmarkModel* model,
+ const BookmarkNode* parent,
+ int index) override {}
+
+ void BookmarkNodeRemoved(BookmarkModel* model,
+ const BookmarkNode* parent,
+ int old_index,
+ const BookmarkNode* node,
+ const std::set<GURL>& removed_urls) override {}
+
+ void BookmarkNodeChanged(BookmarkModel* model,
+ const BookmarkNode* node) override {}
+
+ void BookmarkNodeFaviconChanged(BookmarkModel* model,
+ const BookmarkNode* node) override {
+ updated_nodes_.push_back(node);
+ }
+
+ void BookmarkNodeChildrenReordered(BookmarkModel* model,
+ const BookmarkNode* node) override {}
+
+ void BookmarkAllUserNodesRemoved(
+ BookmarkModel* model,
+ const std::set<GURL>& removed_urls) override {
+ }
+
+ TestBookmarkClient client_;
+ scoped_ptr<BookmarkModel> model_;
+ std::vector<const BookmarkNode*> updated_nodes_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(BookmarkModelFaviconTest);
+};
+
+// Test that BookmarkModel::OnFaviconsChanged() sends a notification that the
+// favicon changed to each BookmarkNode which has either a matching page URL
+// (e.g. http://www.google.com) or a matching icon URL
+// (e.g. http://www.google.com/favicon.ico).
+TEST_F(BookmarkModelFaviconTest, FaviconsChangedObserver) {
+ const BookmarkNode* root = model_->bookmark_bar_node();
+ base::string16 kTitle(ASCIIToUTF16("foo"));
+ GURL kPageURL1("http://www.google.com");
+ GURL kPageURL2("http://www.google.ca");
+ GURL kPageURL3("http://www.amazon.com");
+ GURL kFaviconURL12("http://www.google.com/favicon.ico");
+ GURL kFaviconURL3("http://www.amazon.com/favicon.ico");
+
+ const BookmarkNode* node1 = model_->AddURL(root, 0, kTitle, kPageURL1);
+ const BookmarkNode* node2 = model_->AddURL(root, 0, kTitle, kPageURL2);
+ const BookmarkNode* node3 = model_->AddURL(root, 0, kTitle, kPageURL3);
+ const BookmarkNode* node4 = model_->AddURL(root, 0, kTitle, kPageURL3);
+
+ {
+ OnFaviconLoaded(AsMutable(node1), kFaviconURL12);
+ OnFaviconLoaded(AsMutable(node2), kFaviconURL12);
+ OnFaviconLoaded(AsMutable(node3), kFaviconURL3);
+ OnFaviconLoaded(AsMutable(node4), kFaviconURL3);
+
+ ClearUpdatedNodes();
+ std::set<GURL> changed_page_urls;
+ changed_page_urls.insert(kPageURL2);
+ changed_page_urls.insert(kPageURL3);
+ model_->OnFaviconsChanged(changed_page_urls, GURL());
+ ASSERT_EQ(3u, updated_nodes_.size());
+ EXPECT_TRUE(WasNodeUpdated(node2));
+ EXPECT_TRUE(WasNodeUpdated(node3));
+ EXPECT_TRUE(WasNodeUpdated(node4));
+ }
+
+ {
+ // Reset the favicon data because BookmarkModel::OnFaviconsChanged() clears
+ // the BookmarkNode's favicon data for all of the BookmarkNodes whose
+ // favicon data changed.
+ OnFaviconLoaded(AsMutable(node1), kFaviconURL12);
+ OnFaviconLoaded(AsMutable(node2), kFaviconURL12);
+ OnFaviconLoaded(AsMutable(node3), kFaviconURL3);
+ OnFaviconLoaded(AsMutable(node4), kFaviconURL3);
+
+ ClearUpdatedNodes();
+ model_->OnFaviconsChanged(std::set<GURL>(), kFaviconURL12);
+ ASSERT_EQ(2u, updated_nodes_.size());
+ EXPECT_TRUE(WasNodeUpdated(node1));
+ EXPECT_TRUE(WasNodeUpdated(node2));
+ }
+
+ {
+ OnFaviconLoaded(AsMutable(node1), kFaviconURL12);
+ OnFaviconLoaded(AsMutable(node2), kFaviconURL12);
+ OnFaviconLoaded(AsMutable(node3), kFaviconURL3);
+ OnFaviconLoaded(AsMutable(node4), kFaviconURL3);
+
+ ClearUpdatedNodes();
+ std::set<GURL> changed_page_urls;
+ changed_page_urls.insert(kPageURL1);
+ model_->OnFaviconsChanged(changed_page_urls, kFaviconURL12);
+ ASSERT_EQ(2u, updated_nodes_.size());
+ EXPECT_TRUE(WasNodeUpdated(node1));
+ EXPECT_TRUE(WasNodeUpdated(node2));
+ }
+}
+
} // namespace bookmarks
« no previous file with comments | « components/bookmarks/browser/bookmark_model.cc ('k') | components/history/core/browser/expire_history_backend_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698