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

Unified Diff: components/bookmarks/browser/bookmark_model.h

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
« no previous file with comments | « components/bookmarks/DEPS ('k') | components/bookmarks/browser/bookmark_model.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/bookmarks/browser/bookmark_model.h
diff --git a/components/bookmarks/browser/bookmark_model.h b/components/bookmarks/browser/bookmark_model.h
index e222790c4dc1a74035bc837566ef089f1e770ef0..48fc4619690b15deae2a1232e8f7b29b474e8c57 100644
--- a/components/bookmarks/browser/bookmark_model.h
+++ b/components/bookmarks/browser/bookmark_model.h
@@ -166,6 +166,10 @@ class BookmarkModel : public KeyedService {
// Returns the set of nodes with the |url|.
void GetNodesByURL(const GURL& url, std::vector<const BookmarkNode*>* nodes);
+ // Returns the set of nodes which use the favicon at |icon_url|.
+ void GetNodesByIconURL(const GURL& icon_url,
+ std::vector<const BookmarkNode*>* nodes);
+
// Returns the most recently added user node for the |url|; urls from any
// nodes that are not editable by the user are never returned by this call.
// Returns NULL if |url| is not bookmarked.
@@ -296,15 +300,19 @@ class BookmarkModel : public KeyedService {
void SetNodeSyncTransactionVersion(const BookmarkNode* node,
int64 sync_transaction_version);
- // Notify BookmarkModel that the favicons for |urls| have changed and have to
+ // Notify BookmarkModel that the favicons for the given page URLs
+ // (e.g. http://www.google.com) and the given icon URLs (e.g.
+ // http://www.google.com/favicon.ico) have changed and have to
// be refetched. This notification is sent by BookmarkClient.
- void OnFaviconChanged(const std::set<GURL>& urls);
+ void OnFaviconsChanged(const std::vector<GURL>& page_urls,
+ const std::vector<GURL>& icon_urls);
// Returns the client used by this BookmarkModel.
BookmarkClient* client() const { return client_; }
private:
friend class BookmarkCodecTest;
+ friend class BookmarkModelTest;
friend class BookmarkStorage;
friend class ScopedGroupBookmarkActions;
friend class TestBookmarkClient;
@@ -317,6 +325,14 @@ class BookmarkModel : public KeyedService {
}
};
+ // Used to order BookmarkNodes by icon URL.
+ class NodeIconURLComparator {
+ public:
+ bool operator()(const BookmarkNode* n1, BookmarkNode* n2) const {
+ return n1->icon_url() < n2->icon_url();
+ }
+ };
+
// Implementation of IsBookmarked. Before calling this the caller must obtain
// a lock on |url_lock_|.
bool IsBookmarkedNoLock(const GURL& url);
@@ -378,6 +394,13 @@ class BookmarkModel : public KeyedService {
// Called to notify the observers that the favicon has been loaded.
void FaviconLoaded(const BookmarkNode* node);
+ // Sets |node|'s favicon URL.
+ void SetFaviconURL(BookmarkNode* node, const GURL& icon_url);
+
+ // Clear |node|'s favicon data. Also cancel's any pending favicon load
+ // requests for |node|.
+ void InvalidateFavicon(BookmarkNode* node);
+
// If we're waiting on a favicon for node, the load request is canceled.
void CancelPendingFaviconLoadRequests(BookmarkNode* node);
@@ -426,6 +449,13 @@ class BookmarkModel : public KeyedService {
NodesOrderedByURLSet nodes_ordered_by_url_set_;
base::Lock url_lock_;
+ // Set of nodes ordered by favicon URL. Does not contain nodes whose favicon
+ // has not been loaded or which do not have a favicon.
+ // WARNING: Only access from the UI thread.
+ typedef std::multiset<BookmarkNode*, NodeIconURLComparator>
+ NodesOrderedByIconURLSet;
+ NodesOrderedByIconURLSet nodes_ordered_by_favicon_url_set_;
sky 2015/06/15 14:40:54 If you're saying the favicons rarely change, then
pkotwicz 2015/06/15 14:50:21 I expect there to be 5 - 10 changes a day when syn
+
// Used for loading favicons.
base::CancelableTaskTracker cancelable_task_tracker_;
« no previous file with comments | « components/bookmarks/DEPS ('k') | components/bookmarks/browser/bookmark_model.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698