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..2f2f14437f5426fa4a7b7dc7b4777001b293ec9c 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,33 @@ 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); |
+ Java_WebContentsImpl_addToBitmapList(env, jbitmaps.obj(), jbitmap.obj()); |
+ } |
+ for (const gfx::Size& size : sizes) { |
+ ScopedJavaLocalRef<jobject> jsize = |
+ Java_WebContentsImpl_createSize(env, size.width(), size.height()); |
+ Java_WebContentsImpl_addToSizeList(env, jsizes.obj(), jsize.obj()); |
+ } |
+ Java_WebContentsImpl_onDownloadImageFinished( |
mlamouri (slow - plz ping)
2016/05/31 16:18:37
Would there be a way to avoid doing that many JNI
Zhiqiang Zhang (Slow)
2016/06/01 11:05:55
"jni_array.h" doesn't seem to have what we need.
|
+ env, obj->obj(), callback->obj(), id, |
+ http_status_code, jurl.obj(), jbitmaps.obj(), jsizes.obj()); |
+} |
} // namespace content |