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

Unified Diff: components/enhanced_bookmarks/bookmark_image_service.cc

Issue 1219713002: Removed bookmark_image_service (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixed accidental BookmarkImageServiceFactory mention Created 5 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.cc
diff --git a/components/enhanced_bookmarks/bookmark_image_service.cc b/components/enhanced_bookmarks/bookmark_image_service.cc
deleted file mode 100644
index 4037733f9e28a8403f3c0b54ea9d7cf402b898cf..0000000000000000000000000000000000000000
--- a/components/enhanced_bookmarks/bookmark_image_service.cc
+++ /dev/null
@@ -1,379 +0,0 @@
-// 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.
-
-#include "components/enhanced_bookmarks/bookmark_image_service.h"
-
-#include "base/single_thread_task_runner.h"
-#include "base/task_runner_util.h"
-#include "base/thread_task_runner_handle.h"
-#include "base/threading/sequenced_worker_pool.h"
-#include "components/bookmarks/browser/bookmark_model.h"
-#include "components/bookmarks/browser/bookmark_model_observer.h"
-#include "components/enhanced_bookmarks/enhanced_bookmark_model.h"
-#include "components/enhanced_bookmarks/enhanced_bookmark_utils.h"
-#include "components/enhanced_bookmarks/image_store_util.h"
-#include "components/enhanced_bookmarks/persistent_image_store.h"
-
-using bookmarks::BookmarkModel;
-using bookmarks::BookmarkNode;
-
-namespace {
-
-const char kSequenceToken[] = "BookmarkImagesSequenceToken";
-
-void ConstructPersistentImageStore(PersistentImageStore* store,
- const base::FilePath& path) {
- DCHECK(store);
- new (store) PersistentImageStore(path);
-}
-
-void DeleteImageStore(ImageStore* store) {
- DCHECK(store);
- delete store;
-}
-
-void RetrieveImageFromStoreRelay(
- ImageStore* store,
- const GURL& page_url,
- enhanced_bookmarks::BookmarkImageService::ImageCallback callback,
- scoped_refptr<base::SingleThreadTaskRunner> origin_loop) {
- origin_loop->PostTask(FROM_HERE, base::Bind(callback, store->Get(page_url)));
-}
-
-} // namespace
-
-namespace enhanced_bookmarks {
-BookmarkImageService::BookmarkImageService(
- scoped_ptr<ImageStore> store,
- EnhancedBookmarkModel* enhanced_bookmark_model,
- scoped_refptr<base::SequencedWorkerPool> pool)
- : enhanced_bookmark_model_(enhanced_bookmark_model),
- store_(store.Pass()),
- pool_(pool) {
- DCHECK(CalledOnValidThread());
- enhanced_bookmark_model_->bookmark_model()->AddObserver(this);
-}
-
-BookmarkImageService::BookmarkImageService(
- const base::FilePath& path,
- EnhancedBookmarkModel* enhanced_bookmark_model,
- scoped_refptr<base::SequencedWorkerPool> pool)
- : enhanced_bookmark_model_(enhanced_bookmark_model), pool_(pool) {
- DCHECK(CalledOnValidThread());
- // PersistentImageStore has to be constructed in the thread it will be used,
- // so we are posting the construction to the thread. However, we first
- // allocate memory and keep here. The reason is that, before
- // PersistentImageStore construction is done, it's possible that
- // another member function, that posts store_ to the thread, is called.
- // Although the construction might not be finished yet, we still want to post
- // the task since it's guaranteed to be constructed by the time it is used, by
- // the sequential thread task pool.
- //
- // Other alternatives:
- // - Using a lock or WaitableEvent for PersistentImageStore construction.
- // But waiting on UI thread is discouraged.
- // - Posting the current BookmarkImageService instance instead of store_.
- // But this will require using a weak pointer and can potentially block
- // destroying BookmarkImageService.
- PersistentImageStore* store =
- (PersistentImageStore*)::operator new(sizeof(PersistentImageStore));
- store_.reset(store);
- pool_->PostNamedSequencedWorkerTask(
- kSequenceToken,
- FROM_HERE,
- base::Bind(&ConstructPersistentImageStore, store, path));
-}
-
-BookmarkImageService::~BookmarkImageService() {
- DCHECK(CalledOnValidThread());
- pool_->PostNamedSequencedWorkerTask(
- kSequenceToken,
- FROM_HERE,
- base::Bind(&DeleteImageStore, store_.release()));
-}
-
-void BookmarkImageService::Shutdown() {
- DCHECK(CalledOnValidThread());
- enhanced_bookmark_model_->bookmark_model()->RemoveObserver(this);
- enhanced_bookmark_model_ = NULL;
-}
-
-void BookmarkImageService::SalientImageForUrl(const GURL& page_url,
- ImageCallback callback) {
- DCHECK(CalledOnValidThread());
- SalientImageForUrl(page_url, true, callback);
-}
-
-void BookmarkImageService::RetrieveImageFromStore(const GURL& page_url,
- ImageCallback callback) {
- DCHECK(CalledOnValidThread());
- pool_->PostSequencedWorkerTaskWithShutdownBehavior(
- pool_->GetNamedSequenceToken(kSequenceToken),
- FROM_HERE,
- base::Bind(&RetrieveImageFromStoreRelay,
- base::Unretained(store_.get()),
- page_url,
- callback,
- base::ThreadTaskRunnerHandle::Get()),
- base::SequencedWorkerPool::SKIP_ON_SHUTDOWN);
-}
-
-void BookmarkImageService::RetrieveSalientImageForPageUrl(
- const GURL& page_url) {
- DCHECK(CalledOnValidThread());
- if (IsPageUrlInProgress(page_url))
- return; // A request for this URL is already in progress.
-
- in_progress_page_urls_.insert(page_url);
-
- const BookmarkNode* bookmark =
- enhanced_bookmark_model_->bookmark_model()
- ->GetMostRecentlyAddedUserNodeForURL(page_url);
- GURL image_url;
- if (bookmark) {
- int width;
- int height;
- enhanced_bookmark_model_->GetThumbnailImage(
- bookmark, &image_url, &width, &height);
- }
-
- RetrieveSalientImage(
- page_url,
- image_url,
- "",
- net::URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE,
- false);
-}
-
-void BookmarkImageService::FetchCallback(const GURL& page_url,
- ImageCallback original_callback,
- scoped_refptr<ImageRecord> record) {
- DCHECK(CalledOnValidThread());
- if (!record->image->IsEmpty() || !record->url.is_empty()) {
- // Either the record was in the store or there is no image in the store, but
- // an URL for a record is present, indicating that a previous attempt to
- // download the image failed. Just return the record.
- original_callback.Run(record);
- } else {
- // There is no record in the store, and no previous attempts to retrieve
- // one. Start a request to retrieve a salient image if there is an image
- // url set on a bookmark, and then enqueue the request for the record to
- // be triggered when the retrieval is finished.
- RetrieveSalientImageForPageUrl(page_url);
- SalientImageForUrl(page_url, false, original_callback);
- }
-}
-
-void BookmarkImageService::SalientImageForUrl(const GURL& page_url,
- bool fetch_from_web,
- ImageCallback callback) {
- DCHECK(CalledOnValidThread());
-
- // If the request is done while the image is currently being retrieved, just
- // store the appropriate callbacks to call once the image is retrieved.
- if (IsPageUrlInProgress(page_url)) {
- callbacks_[page_url].push_back(callback);
- return;
- }
-
- if (!fetch_from_web) {
- RetrieveImageFromStore(page_url, callback);
- } else {
- RetrieveImageFromStore(page_url,
- base::Bind(&BookmarkImageService::FetchCallback,
- base::Unretained(this),
- page_url,
- callback));
- }
-}
-
-void BookmarkImageService::ProcessNewImage(const GURL& page_url,
- bool update_bookmarks,
- const GURL& image_url,
- scoped_ptr<gfx::Image> image) {
- DCHECK(CalledOnValidThread());
-
- gfx::Size size = image->Size();
- PostTaskToStoreImage(image.Pass(), image_url, page_url);
-
- if (update_bookmarks && image_url.is_valid()) {
- const BookmarkNode* bookmark =
- enhanced_bookmark_model_->bookmark_model()
- ->GetMostRecentlyAddedUserNodeForURL(page_url);
- if (bookmark) {
-
- bool result = enhanced_bookmark_model_->SetOriginalImage(
- bookmark, image_url, size.width(), size.height());
- DCHECK(result);
- }
- }
-}
-
-bool BookmarkImageService::IsPageUrlInProgress(const GURL& page_url) {
- DCHECK(CalledOnValidThread());
- return in_progress_page_urls_.find(page_url) != in_progress_page_urls_.end();
-}
-
-scoped_refptr<ImageRecord> BookmarkImageService::ResizeAndStoreImage(
- scoped_refptr<ImageRecord> image_info,
- const GURL& page_url) {
-
- if (!image_info->image->IsEmpty()) {
- image_info->image = ResizeImage(*image_info->image);
- image_info->dominant_color = DominantColorForImage(*image_info->image);
- // TODO(lpromero): this should be saved all the time, even when there is an
- // empty image. http://crbug.com/451450
- pool_->PostNamedSequencedWorkerTask(
- kSequenceToken, FROM_HERE,
- base::Bind(&ImageStore::Insert, base::Unretained(store_.get()),
- page_url, image_info));
- }
-
- return image_info;
-}
-
-void BookmarkImageService::PostTaskToStoreImage(
- scoped_ptr<gfx::Image> image,
- const GURL& image_url,
- const GURL& page_url) {
- DCHECK(CalledOnValidThread());
-
- scoped_refptr<ImageRecord> image_info(
- new ImageRecord(image.Pass(), image_url));
-
- // TODO ensure image thread safety.
- base::Callback<scoped_refptr<ImageRecord>(void)> task =
- base::Bind(&BookmarkImageService::ResizeAndStoreImage,
- base::Unretained(this), image_info, page_url);
- base::Callback<void(scoped_refptr<ImageRecord>)> reply =
- base::Bind(&BookmarkImageService::OnStoreImagePosted,
- base::Unretained(this), page_url);
-
- base::PostTaskAndReplyWithResult(pool_.get(), FROM_HERE, task, reply);
-}
-
-void BookmarkImageService::OnStoreImagePosted(
- const GURL& page_url,
- scoped_refptr<ImageRecord> image) {
- DCHECK(CalledOnValidThread());
- in_progress_page_urls_.erase(page_url);
- ProcessRequests(page_url, image);
-}
-
-void BookmarkImageService::RemoveImageForUrl(const GURL& page_url) {
- DCHECK(CalledOnValidThread());
- pool_->PostNamedSequencedWorkerTask(
- kSequenceToken,
- FROM_HERE,
- base::Bind(&ImageStore::Erase, base::Unretained(store_.get()), page_url));
- in_progress_page_urls_.erase(page_url);
- ProcessRequests(page_url, scoped_refptr<ImageRecord>(new ImageRecord()));
-}
-
-void BookmarkImageService::ChangeImageURL(const GURL& from, const GURL& to) {
- DCHECK(CalledOnValidThread());
- pool_->PostNamedSequencedWorkerTask(kSequenceToken,
- FROM_HERE,
- base::Bind(&ImageStore::ChangeImageURL,
- base::Unretained(store_.get()),
- from,
- to));
- in_progress_page_urls_.erase(from);
- ProcessRequests(from, scoped_refptr<ImageRecord>(new ImageRecord()));
-}
-
-void BookmarkImageService::ClearAll() {
- DCHECK(CalledOnValidThread());
- // Clears and executes callbacks.
- pool_->PostNamedSequencedWorkerTask(
- kSequenceToken,
- FROM_HERE,
- base::Bind(&ImageStore::ClearAll, base::Unretained(store_.get())));
-
- for (std::map<const GURL, std::vector<ImageCallback>>::const_iterator it =
- callbacks_.begin();
- it != callbacks_.end(); ++it) {
- ProcessRequests(it->first, scoped_refptr<ImageRecord>(new ImageRecord()));
- }
-
- in_progress_page_urls_.erase(in_progress_page_urls_.begin(),
- in_progress_page_urls_.end());
-}
-
-void BookmarkImageService::ProcessRequests(const GURL& page_url,
- scoped_refptr<ImageRecord> record) {
- DCHECK(CalledOnValidThread());
-
- std::vector<ImageCallback> callbacks = callbacks_[page_url];
- for (std::vector<ImageCallback>::const_iterator it = callbacks.begin();
- it != callbacks.end(); ++it) {
- it->Run(record);
- }
-
- callbacks_.erase(page_url);
-}
-
-// BookmarkModelObserver methods.
-
-void BookmarkImageService::BookmarkNodeRemoved(
- BookmarkModel* model,
- const BookmarkNode* parent,
- int old_index,
- const BookmarkNode* node,
- const std::set<GURL>& removed_urls) {
- DCHECK(CalledOnValidThread());
- for (std::set<GURL>::const_iterator iter = removed_urls.begin();
- iter != removed_urls.end();
- ++iter) {
- RemoveImageForUrl(*iter);
- }
-}
-
-void BookmarkImageService::BookmarkModelLoaded(BookmarkModel* model,
- bool ids_reassigned) {
-}
-
-void BookmarkImageService::BookmarkNodeMoved(BookmarkModel* model,
- const BookmarkNode* old_parent,
- int old_index,
- const BookmarkNode* new_parent,
- int new_index) {
-}
-
-void BookmarkImageService::BookmarkNodeAdded(BookmarkModel* model,
- const BookmarkNode* parent,
- int index) {
-}
-
-void BookmarkImageService::OnWillChangeBookmarkNode(BookmarkModel* model,
- const BookmarkNode* node) {
- DCHECK(CalledOnValidThread());
- if (node->is_url())
- previous_url_ = node->url();
-}
-
-void BookmarkImageService::BookmarkNodeChanged(BookmarkModel* model,
- const BookmarkNode* node) {
- DCHECK(CalledOnValidThread());
- if (node->is_url() && previous_url_ != node->url())
- ChangeImageURL(previous_url_, node->url());
-}
-
-void BookmarkImageService::BookmarkNodeFaviconChanged(
- BookmarkModel* model,
- const BookmarkNode* node) {
-}
-
-void BookmarkImageService::BookmarkNodeChildrenReordered(
- BookmarkModel* model,
- const BookmarkNode* node) {
-}
-
-void BookmarkImageService::BookmarkAllUserNodesRemoved(
- BookmarkModel* model,
- const std::set<GURL>& removed_urls) {
- ClearAll();
-}
-
-} // namespace enhanced_bookmarks

Powered by Google App Engine
This is Rietveld 408576698