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 |
index fb3d688ea3543342a446bc16072efc4c2e67f5b4..4037733f9e28a8403f3c0b54ea9d7cf402b898cf 100644 |
--- a/components/enhanced_bookmarks/bookmark_image_service.cc |
+++ b/components/enhanced_bookmarks/bookmark_image_service.cc |
@@ -148,9 +148,9 @@ void BookmarkImageService::RetrieveSalientImageForPageUrl( |
void BookmarkImageService::FetchCallback(const GURL& page_url, |
ImageCallback original_callback, |
- const ImageRecord& record) { |
+ scoped_refptr<ImageRecord> record) { |
DCHECK(CalledOnValidThread()); |
- if (!record.image.IsEmpty() || !record.url.is_empty()) { |
+ 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. |
@@ -191,15 +191,18 @@ void BookmarkImageService::SalientImageForUrl(const GURL& page_url, |
void BookmarkImageService::ProcessNewImage(const GURL& page_url, |
bool update_bookmarks, |
const GURL& image_url, |
- const gfx::Image& image) { |
+ scoped_ptr<gfx::Image> image) { |
DCHECK(CalledOnValidThread()); |
- PostTaskToStoreImage(image, image_url, page_url); |
+ |
+ 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) { |
- const gfx::Size& size = image.Size(); |
+ |
bool result = enhanced_bookmark_model_->SetOriginalImage( |
bookmark, image_url, size.width(), size.height()); |
DCHECK(result); |
@@ -212,13 +215,13 @@ bool BookmarkImageService::IsPageUrlInProgress(const GURL& page_url) { |
return in_progress_page_urls_.find(page_url) != in_progress_page_urls_.end(); |
} |
-ImageRecord BookmarkImageService::ResizeAndStoreImage(const gfx::Image& image, |
- const GURL& image_url, |
- const GURL& page_url) { |
- gfx::Image resized_image = ResizeImage(image); |
- ImageRecord image_info(resized_image, image_url, SK_ColorBLACK); |
- if (!resized_image.IsEmpty()) { |
- image_info.dominant_color = DominantColorForImage(resized_image); |
+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( |
@@ -226,26 +229,33 @@ ImageRecord BookmarkImageService::ResizeAndStoreImage(const gfx::Image& image, |
base::Bind(&ImageStore::Insert, base::Unretained(store_.get()), |
page_url, image_info)); |
} |
+ |
return image_info; |
} |
-void BookmarkImageService::PostTaskToStoreImage(const gfx::Image& image, |
- const GURL& image_url, |
- const GURL& page_url) { |
+void BookmarkImageService::PostTaskToStoreImage( |
+ scoped_ptr<gfx::Image> image, |
+ const GURL& image_url, |
+ const GURL& page_url) { |
DCHECK(CalledOnValidThread()); |
- base::Callback<ImageRecord(void)> task = |
+ 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, image_url, page_url); |
- base::Callback<void(const ImageRecord&)> reply = |
+ 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, |
- const ImageRecord& image) { |
+void BookmarkImageService::OnStoreImagePosted( |
+ const GURL& page_url, |
+ scoped_refptr<ImageRecord> image) { |
DCHECK(CalledOnValidThread()); |
in_progress_page_urls_.erase(page_url); |
ProcessRequests(page_url, image); |
@@ -258,7 +268,7 @@ void BookmarkImageService::RemoveImageForUrl(const GURL& page_url) { |
FROM_HERE, |
base::Bind(&ImageStore::Erase, base::Unretained(store_.get()), page_url)); |
in_progress_page_urls_.erase(page_url); |
- ProcessRequests(page_url, ImageRecord()); |
+ ProcessRequests(page_url, scoped_refptr<ImageRecord>(new ImageRecord())); |
} |
void BookmarkImageService::ChangeImageURL(const GURL& from, const GURL& to) { |
@@ -270,7 +280,7 @@ void BookmarkImageService::ChangeImageURL(const GURL& from, const GURL& to) { |
from, |
to)); |
in_progress_page_urls_.erase(from); |
- ProcessRequests(from, ImageRecord()); |
+ ProcessRequests(from, scoped_refptr<ImageRecord>(new ImageRecord())); |
} |
void BookmarkImageService::ClearAll() { |
@@ -284,7 +294,7 @@ void BookmarkImageService::ClearAll() { |
for (std::map<const GURL, std::vector<ImageCallback>>::const_iterator it = |
callbacks_.begin(); |
it != callbacks_.end(); ++it) { |
- ProcessRequests(it->first, ImageRecord()); |
+ ProcessRequests(it->first, scoped_refptr<ImageRecord>(new ImageRecord())); |
} |
in_progress_page_urls_.erase(in_progress_page_urls_.begin(), |
@@ -292,7 +302,7 @@ void BookmarkImageService::ClearAll() { |
} |
void BookmarkImageService::ProcessRequests(const GURL& page_url, |
- const ImageRecord& record) { |
+ scoped_refptr<ImageRecord> record) { |
DCHECK(CalledOnValidThread()); |
std::vector<ImageCallback> callbacks = callbacks_[page_url]; |