Chromium Code Reviews| 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 |