Index: content/browser/web_contents/web_contents_android.cc |
diff --git a/content/browser/web_contents/web_contents_android.cc b/content/browser/web_contents/web_contents_android.cc |
index 87c8b2d1cf169debb694c133e5096a5cfb5840ce..8f120f0dda63af9295e07fb8a712b4a630e03f0c 100644 |
--- a/content/browser/web_contents/web_contents_android.cc |
+++ b/content/browser/web_contents/web_contents_android.cc |
@@ -673,6 +673,25 @@ void WebContentsAndroid::ReloadLoFiImages(JNIEnv* env, |
static_cast<WebContentsImpl*>(web_contents_)->ReloadLoFiImages(); |
} |
+void WebContentsAndroid::DownloadImage( |
+ JNIEnv* env, |
+ const base::android::JavaParamRef<jobject>& obj, |
+ const base::android::JavaParamRef<jstring>& jurl, |
+ jboolean is_fav_icon, |
+ jint max_bitmap_size, |
+ jboolean bypass_cache, |
+ const base::android::JavaParamRef<jobject>& jcallback) { |
+ GURL url(base::android::ConvertJavaStringToUTF8(env, jurl)); |
+ web_contents_->DownloadImage( |
+ url, is_fav_icon, max_bitmap_size, bypass_cache, |
+ base::Bind(&WebContentsAndroid::OnFinishDownloadImage, |
+ weak_factory_.GetWeakPtr(), |
+ base::Owned(new ScopedJavaGlobalRef<jobject>( |
+ env, obj)), |
+ base::Owned(new ScopedJavaGlobalRef<jobject>( |
+ env, jcallback)))); |
+} |
+ |
void WebContentsAndroid::OnFinishGetContentBitmap( |
ScopedJavaGlobalRef<jobject>* obj, |
ScopedJavaGlobalRef<jobject>* callback, |
@@ -689,4 +708,32 @@ void WebContentsAndroid::OnFinishGetContentBitmap( |
response); |
} |
+void WebContentsAndroid::OnFinishDownloadImage( |
+ base::android::ScopedJavaGlobalRef<jobject>* obj, |
+ base::android::ScopedJavaGlobalRef<jobject>* callback, |
+ int id, |
+ int http_status_code, |
+ const GURL& url, |
+ const std::vector<SkBitmap>& bitmaps, |
+ const std::vector<gfx::Size>& sizes) { |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ ScopedJavaLocalRef<jobject> jbitmaps = |
+ Java_WebContentsImpl_createBitmapList(env); |
+ ScopedJavaLocalRef<jobject> jsizes = |
+ Java_WebContentsImpl_createSizeList(env); |
+ ScopedJavaLocalRef<jstring> jurl = |
+ base::android::ConvertUTF8ToJavaString(env, url.spec()); |
+ |
+ for (const SkBitmap& bitmap : bitmaps) { |
+ ScopedJavaLocalRef<jobject> jbitmap = gfx::ConvertToJavaBitmap(&bitmap); |
Ted C
2016/06/03 16:44:09
forgive my ignorance (and for my education), but h
Zhiqiang Zhang (Slow)
2016/06/03 18:53:51
Yes, .ico files can contain multiple images of dif
|
+ Java_WebContentsImpl_addToBitmapList(env, jbitmaps.obj(), jbitmap.obj()); |
Ted C
2016/06/03 16:44:09
This is the only really sad line. Converting to j
Zhiqiang Zhang (Slow)
2016/06/03 18:53:51
Added comments about this.
|
+ } |
+ for (const gfx::Size& size : sizes) { |
+ Java_WebContentsImpl_createSizeAndAddToList( |
+ env, jsizes.obj(), size.width(), size.height()); |
+ } |
+ Java_WebContentsImpl_onDownloadImageFinished( |
+ env, obj->obj(), callback->obj(), id, |
+ http_status_code, jurl.obj(), jbitmaps.obj(), jsizes.obj()); |
+} |
} // namespace content |