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

Unified Diff: chrome/browser/enhanced_bookmarks/android/bookmark_image_service_android.cc

Issue 1031293002: Fix crashes due to gfx::Image unsafe thread passing (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove unnecessary Pass() Created 5 years, 9 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: 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;
}

Powered by Google App Engine
This is Rietveld 408576698