Commit 61e3cc82 authored by Rulong Chen(陈汝龙)'s avatar Rulong Chen(陈汝龙) Committed by Commit Bot

[aw] Allow Bitmap allocations to fail without OOM crashing.

One large favicon might cause an OOM crash when it is converted to a
Java-backed Bitmap in Android. Failing to render the favicon still seems
preferable than *ever* crash here.

R=torne@chromium.org,boliu@chromium.org

Bug: 1112794
Change-Id: Idca46d2e1484ce4538b79e8df6910de7b18ef1f0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2376929
Commit-Queue: Bo <boliu@chromium.org>
Reviewed-by: default avatarRichard Coles <torne@chromium.org>
Reviewed-by: default avatarBo <boliu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#802876}
parent 79d065d7
...@@ -812,7 +812,14 @@ void AwContents::OnReceivedIcon(const GURL& icon_url, const SkBitmap& bitmap) { ...@@ -812,7 +812,14 @@ void AwContents::OnReceivedIcon(const GURL& icon_url, const SkBitmap& bitmap) {
entry->GetFavicon().image = gfx::Image::CreateFrom1xBitmap(bitmap); entry->GetFavicon().image = gfx::Image::CreateFrom1xBitmap(bitmap);
} }
Java_AwContents_onReceivedIcon(env, obj, gfx::ConvertToJavaBitmap(&bitmap)); ScopedJavaLocalRef<jobject> java_bitmap =
gfx::ConvertToJavaBitmap(&bitmap, gfx::OomBehavior::kReturnNullOnOom);
if (!java_bitmap) {
LOG(WARNING) << "Skipping onReceivedIcon; Not enough memory to convert "
"icon to Bitmap.";
return;
}
Java_AwContents_onReceivedIcon(env, obj, java_bitmap);
} }
void AwContents::OnReceivedTouchIconUrl(const std::string& url, void AwContents::OnReceivedTouchIconUrl(const std::string& url,
......
...@@ -56,8 +56,10 @@ JNI_NavigationControllerImpl_CreateJavaNavigationEntry( ...@@ -56,8 +56,10 @@ JNI_NavigationControllerImpl_CreateJavaNavigationEntry(
ConvertUTF8ToJavaString(env, entry->GetReferrer().url.spec())); ConvertUTF8ToJavaString(env, entry->GetReferrer().url.spec()));
ScopedJavaLocalRef<jobject> j_bitmap; ScopedJavaLocalRef<jobject> j_bitmap;
const content::FaviconStatus& status = entry->GetFavicon(); const content::FaviconStatus& status = entry->GetFavicon();
if (status.valid && status.image.ToSkBitmap()->computeByteSize() > 0) if (status.valid && status.image.ToSkBitmap()->computeByteSize() > 0) {
j_bitmap = gfx::ConvertToJavaBitmap(status.image.ToSkBitmap()); j_bitmap = gfx::ConvertToJavaBitmap(status.image.ToSkBitmap(),
gfx::OomBehavior::kReturnNullOnOom);
}
jlong j_timestamp = entry->GetTimestamp().ToJavaTime(); jlong j_timestamp = entry->GetTimestamp().ToJavaTime();
return content::Java_NavigationControllerImpl_createNavigationEntry( return content::Java_NavigationControllerImpl_createNavigationEntry(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment