Index: chrome/browser/enhanced_bookmarks/android/bookmark_image_service_android.cc |
diff --git a/chrome/browser/enhanced_bookmarks/android/bookmark_image_service_android.cc b/chrome/browser/enhanced_bookmarks/android/bookmark_image_service_android.cc |
index c39859d8d8f94dc8d1648adf16ec02290b84053a..c783f9c9499e2132c4332a07f34bebabe60622cc 100644 |
--- a/chrome/browser/enhanced_bookmarks/android/bookmark_image_service_android.cc |
+++ b/chrome/browser/enhanced_bookmarks/android/bookmark_image_service_android.cc |
@@ -72,7 +72,8 @@ void BookmarkImageServiceAndroid::RetrieveSalientImage( |
enhanced_bookmark_model_->bookmark_model() |
->GetMostRecentlyAddedUserNodeForURL(page_url); |
if (!bookmark || !image_url.is_valid()) { |
- ProcessNewImage(page_url, update_bookmark, image_url, gfx::Image()); |
+ ProcessNewImage(page_url, update_bookmark, image_url, |
+ scoped_ptr<gfx::Image>(new gfx::Image())); |
return; |
} |
@@ -211,26 +212,34 @@ void BookmarkImageServiceAndroid::RetrieveSalientImageFromContextCallback( |
referrer_policy, update_bookmark); |
} |
-gfx::Image BookmarkImageServiceAndroid::ResizeImage(gfx::Image image) { |
+scoped_ptr<gfx::Image> BookmarkImageServiceAndroid::ResizeImage( |
+ const gfx::Image& image) { |
DCHECK(!content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
- gfx::Image resized_image = image; |
+ scoped_ptr<gfx::Image> result(new gfx::Image()); |
+ |
if (image.Width() > max_size_.width() && |
image.Height() > max_size_.height()) { |
- float resize_ratio = std::min(((float)max_size_.width()) / image.Width(), |
- ((float)max_size_.height()) / image.Height()); |
+ float resize_ratio = std::min( |
+ ((float)max_size_.width()) / image.Width(), |
+ ((float)max_size_.height()) / image.Height()); |
// +0.5f is for correct rounding. Without it, it's possible that dest_width |
// is smaller than max_size_.Width() by one. |
int dest_width = static_cast<int>(resize_ratio * image.Width() + 0.5f); |
- int dest_height = static_cast<int>(resize_ratio * image.Height() + 0.5f); |
- |
- resized_image = |
- gfx::Image::CreateFrom1xBitmap(skia::ImageOperations::Resize( |
- image.AsBitmap(), skia::ImageOperations::RESIZE_BEST, dest_width, |
- dest_height)); |
- resized_image.AsImageSkia().MakeThreadSafe(); |
+ int dest_height = static_cast<int>( |
+ resize_ratio * image.Height() + 0.5f); |
+ |
+ *result = gfx::Image::CreateFrom1xBitmap( |
+ skia::ImageOperations::Resize(image.AsBitmap(), |
+ skia::ImageOperations::RESIZE_BEST, |
+ dest_width, |
+ dest_height)); |
+ result->AsImageSkia().MakeThreadSafe(); |
+ } else { |
+ *result = image; |
} |
- return resized_image; |
+ |
+ return result.Pass(); |
} |
void BookmarkImageServiceAndroid::BitmapFetcherHandler::Start( |
@@ -252,13 +261,15 @@ void BookmarkImageServiceAndroid::BitmapFetcherHandler::OnFetchComplete( |
const SkBitmap* bitmap) { |
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
- gfx::Image image; |
+ scoped_ptr<gfx::Image> image; |
if (bitmap) { |
gfx::ImageSkia imageSkia = gfx::ImageSkia::CreateFrom1xBitmap(*bitmap); |
imageSkia.MakeThreadSafe(); |
- image = gfx::Image(imageSkia); |
+ image.reset(new gfx::Image(imageSkia)); |
+ } else { |
+ image.reset(new gfx::Image()); |
} |
- service_->ProcessNewImage(page_url_, update_bookmark_, url, image); |
+ service_->ProcessNewImage(page_url_, update_bookmark_, url, image.Pass()); |
delete this; |
} |