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

Unified Diff: components/bookmarks/browser/bookmark_model.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, 7 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.cc
diff --git a/components/bookmarks/browser/bookmark_model.cc b/components/bookmarks/browser/bookmark_model.cc
index 2e174dbedc63314fc2de85d1accdda9582439c90..6f65af880117d935637a261cf43dfe42c224c3da 100644
--- a/components/bookmarks/browser/bookmark_model.cc
+++ b/components/bookmarks/browser/bookmark_model.cc
@@ -446,24 +446,35 @@ void BookmarkModel::SetNodeSyncTransactionVersion(
store_->ScheduleSave();
}
-void BookmarkModel::OnFaviconChanged(const std::set<GURL>& urls) {
+void BookmarkModel::OnFaviconsChanged(const std::vector<GURL>& page_urls,
+ const std::vector<GURL>& icon_urls) {
// Ignore events if |Load| has not been called yet.
if (!store_)
return;
- // Prevent the observers from getting confused for multiple favicon loads.
- for (std::set<GURL>::const_iterator i = urls.begin(); i != urls.end(); ++i) {
+ std::set<const BookmarkNode*> to_update;
+ for (const GURL& page_url : page_urls) {
std::vector<const BookmarkNode*> nodes;
- GetNodesByURL(*i, &nodes);
- for (size_t i = 0; i < nodes.size(); ++i) {
- // Got an updated favicon, for a URL, do a new request.
- BookmarkNode* node = AsMutable(nodes[i]);
- node->InvalidateFavicon();
- CancelPendingFaviconLoadRequests(node);
- FOR_EACH_OBSERVER(BookmarkModelObserver,
- observers_,
- BookmarkNodeFaviconChanged(this, node));
- }
+ GetNodesByURL(page_url, &nodes);
+ for (const BookmarkNode* node : nodes)
+ to_update.insert(node);
+ }
+
+ for (const GURL& icon_url : icon_urls) {
+ std::vector<const BookmarkNode*> nodes;
+ GetNodesByIconURL(icon_url, &nodes);
+ for (const BookmarkNode* node : nodes)
+ to_update.insert(node);
+ }
+
+ for (const BookmarkNode* node : to_update) {
+ // Rerequest the favicon.
+ BookmarkNode* mutable_node = AsMutable(node);
+ mutable_node->InvalidateFavicon();
+ CancelPendingFaviconLoadRequests(mutable_node);
+ FOR_EACH_OBSERVER(BookmarkModelObserver,
+ observers_,
+ BookmarkNodeFaviconChanged(this, mutable_node));
}
}
@@ -504,6 +515,16 @@ void BookmarkModel::GetNodesByURL(const GURL& url,
}
}
+void BookmarkModel::GetNodesByIconURL(const GURL& icon_url,
+ std::vector<const BookmarkNode*>* nodes) {
+ // TODO: Do something more efficient if this gets called a lot
+ base::AutoLock url_lock(url_lock_);
+ for (const BookmarkNode* node : nodes_ordered_by_url_set_) {
+ if (node->icon_url() == icon_url)
+ nodes->push_back(node);
+ }
+}
+
const BookmarkNode* BookmarkModel::GetMostRecentlyAddedUserNodeForURL(
const GURL& url) {
std::vector<const BookmarkNode*> nodes;

Powered by Google App Engine
This is Rietveld 408576698