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

Unified Diff: components/enhanced_bookmarks/bookmark_image_service.h

Issue 513793002: Bring up of ImageService. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 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/enhanced_bookmarks/bookmark_image_service.h
diff --git a/components/enhanced_bookmarks/bookmark_image_service.h b/components/enhanced_bookmarks/bookmark_image_service.h
new file mode 100644
index 0000000000000000000000000000000000000000..6ca75eb4e39c97e7dc6b5e44b4446a763d7c33da
--- /dev/null
+++ b/components/enhanced_bookmarks/bookmark_image_service.h
@@ -0,0 +1,167 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+#ifndef COMPONENTS_ENHANCED_BOOKMARKS_BOOKMARK_IMAGE_SERVICE_H_
+#define COMPONENTS_ENHANCED_BOOKMARKS_BOOKMARK_IMAGE_SERVICE_H_
+
+#include "base/files/file_path.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/singleton.h"
+#include "components/bookmarks/browser/bookmark_model_observer.h"
+#include "components/enhanced_bookmarks/image_store.h"
+#include "components/keyed_service/core/keyed_service.h"
+#include "net/url_request/url_request.h"
+#include "url/gurl.h"
+
+namespace base {
+class SingleThreadTaskRunner;
+}
+class BookmarkNode;
+
+namespace enhanced_bookmarks {
+
+// The BookmarkImageService stores salient images for bookmarks.
+class BookmarkImageService : public KeyedService,
+ public BookmarkModelObserver,
+ public base::NonThreadSafe {
+ public:
+ explicit BookmarkImageService(const base::FilePath& path,
+ BookmarkModel* bookmark_model,
+ scoped_refptr<base::SequencedWorkerPool> pool);
+ BookmarkImageService(scoped_ptr<ImageStore> store,
+ BookmarkModel* bookmark_model,
+ scoped_refptr<base::SequencedWorkerPool> pool);
+
+ virtual ~BookmarkImageService();
+
+ typedef base::Callback<void(const gfx::Image&, const GURL& url)> Callback;
+
+ // Returns a salient image for a URL. This may trigger a network request for
+ // the image if the image was not retrieved before and if a bookmark node has
+ // a URL for this salient image available. The image (which may be empty) is
+ // sent via the callback. The callback may be called synchronously if it is
+ // possible. The callback is always triggered on the main thread.
+ void SalientImageForUrl(const GURL& page_url, Callback callback);
+
+ // BookmarkModelObserver methods.
+ virtual void BookmarkNodeRemoved(BookmarkModel* model,
+ const BookmarkNode* parent,
+ int old_index,
+ const BookmarkNode* node,
+ const std::set<GURL>& removed_urls) OVERRIDE;
+ virtual void BookmarkModelLoaded(BookmarkModel* model,
+ bool ids_reassigned) OVERRIDE;
+ virtual void BookmarkNodeMoved(BookmarkModel* model,
+ const BookmarkNode* old_parent,
+ int old_index,
+ const BookmarkNode* new_parent,
+ int new_index) OVERRIDE;
+ virtual void BookmarkNodeAdded(BookmarkModel* model,
+ const BookmarkNode* parent,
+ int index) OVERRIDE;
+ virtual void OnWillChangeBookmarkNode(BookmarkModel* model,
+ const BookmarkNode* node) OVERRIDE;
+ virtual void BookmarkNodeChanged(BookmarkModel* model,
+ const BookmarkNode* node) OVERRIDE;
+ virtual void BookmarkNodeFaviconChanged(BookmarkModel* model,
+ const BookmarkNode* node) OVERRIDE;
+ virtual void BookmarkNodeChildrenReordered(BookmarkModel* model,
+ const BookmarkNode* node) OVERRIDE;
+ virtual void BookmarkAllUserNodesRemoved(
+ BookmarkModel* model,
+ const std::set<GURL>& removed_urls) OVERRIDE;
+
+ protected:
+ // Returns true if the image for the page_url is currently being fetched.
+ bool IsPageUrlInProgress(const GURL& page_url);
+
+ // Once an image has been retrieved, store the image and notify all the
+ // consumers that were waiting on it.
+ void ProcessNewImage(const GURL& page_url,
+ bool update_bookmarks,
+ const gfx::Image& image,
+ const GURL& image_url);
+
+ // Sets a new image for a bookmark. If the given page_url is bookmarked and
+ // the image is retrieved from the image_url, then the image is locally
+ // stored. If update_bookmark is true the URL is also added to the bookmark.
+ // This is the only method subclass needs to implement.
+ virtual void RetrieveSalientImage(
+ const GURL& page_url,
+ const GURL& image_url,
+ const std::string& referrer,
+ net::URLRequest::ReferrerPolicy referrer_policy,
+ bool update_bookmark) = 0;
+
+ // Retrieves a salient image for a given page_url by downloading the image in
+ // one of the bookmark.
+ virtual void RetrieveSalientImageForPageUrl(const GURL& page_url);
+
+ // PageUrls currently in the progress of being retrieved.
+ std::set<GURL> in_progress_page_urls_;
+
+ // Cached pointer to the bookmarks model.
+ BookmarkModel* bookmark_model_; // weak
+
+ private:
+ // Same as SalientImageForUrl(const GURL&, Callback) but can prevent the
+ // network request if fetch_from_bookmark is false.
+ void SalientImageForUrl(const GURL& page_url,
+ bool fetch_from_bookmark,
+ Callback stack_callback);
+
+ // Processes the requests that have been waiting on an image.
+ void ProcessRequests(const GURL& page_url,
+ const gfx::Image& image,
+ const GURL& image_url);
+
+ // Once an image is retrieved this method updates the store with it.
+ void StoreImage(const gfx::Image& image,
+ const GURL& image_url,
+ const GURL& page_url);
+
+ // Called when retrieving an image from the image store fails, to trigger
+ // retrieving the image from the url stored in the bookmark (if any).
+ void FetchCallback(const GURL& page_url,
+ Callback original_callback,
+ const gfx::Image& image,
+ const GURL& image_url);
+
+ // Remove the image stored for this bookmark (if it exists). Called when a
+ // bookmark is deleted.
+ void RemoveImageForUrl(const GURL& url);
+
+ // Moves an image from one url to another.
+ void ChangeImageURL(const GURL& from, const GURL& to);
+
+ // Removes all the entries in the image service.
+ void ClearAll();
+
+ // The image store can only be accessed from the blocking pool.
+ // RetrieveImageFromStore starts a request to retrieve the image and returns
+ // the result via a callback. RetrieveImageFromStore must be called on the
+ // main thread and the callback will be called on the main thread as well. The
+ // callback will always be called. The returned image is nil if the image is
+ // not present in the store.
+ void RetrieveImageFromStore(const GURL& page_url,
+ BookmarkImageService::Callback callback);
+
+ // Maps a pageUrl to an image.
+ scoped_ptr<ImageStore> store_;
+
+ // All the callbacks waiting for a particular image.
+ std::map<const GURL, std::vector<Callback> > callbacks_;
+
+ // When a bookmark is changed, two messages are received on the
+ // bookmarkModelObserver, one with the old state, one with the new. The url
+ // before the change is saved in this instance variable.
+ GURL previous_url_;
+
+ // The worker pool to enqueue the store requests onto.
+ scoped_refptr<base::SequencedWorkerPool> pool_;
+ DISALLOW_COPY_AND_ASSIGN(BookmarkImageService);
+};
+
+} // namespace enhanced_bookmarks
+
+#endif // COMPONENTS_ENHANCED_BOOKMARKS_BOOKMARK_IMAGE_SERVICE_H_

Powered by Google App Engine
This is Rietveld 408576698