OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/web_contents/web_contents_android.h" | 5 #include "content/browser/web_contents/web_contents_android.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include "base/android/jni_android.h" | 9 #include "base/android/jni_android.h" |
10 #include "base/android/jni_array.h" | 10 #include "base/android/jni_array.h" |
(...skipping 655 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
666 const JavaParamRef<jobject>& obj) { | 666 const JavaParamRef<jobject>& obj) { |
667 static_cast<WebContentsImpl*>(web_contents_) | 667 static_cast<WebContentsImpl*>(web_contents_) |
668 ->NotifyContextMenuClosed(CustomContextMenuContext()); | 668 ->NotifyContextMenuClosed(CustomContextMenuContext()); |
669 } | 669 } |
670 | 670 |
671 void WebContentsAndroid::ReloadLoFiImages(JNIEnv* env, | 671 void WebContentsAndroid::ReloadLoFiImages(JNIEnv* env, |
672 const JavaParamRef<jobject>& obj) { | 672 const JavaParamRef<jobject>& obj) { |
673 static_cast<WebContentsImpl*>(web_contents_)->ReloadLoFiImages(); | 673 static_cast<WebContentsImpl*>(web_contents_)->ReloadLoFiImages(); |
674 } | 674 } |
675 | 675 |
| 676 int WebContentsAndroid::DownloadImage( |
| 677 JNIEnv* env, |
| 678 const base::android::JavaParamRef<jobject>& obj, |
| 679 const base::android::JavaParamRef<jstring>& jurl, |
| 680 jboolean is_fav_icon, |
| 681 jint max_bitmap_size, |
| 682 jboolean bypass_cache, |
| 683 const base::android::JavaParamRef<jobject>& jcallback) { |
| 684 GURL url(base::android::ConvertJavaStringToUTF8(env, jurl)); |
| 685 return web_contents_->DownloadImage( |
| 686 url, is_fav_icon, max_bitmap_size, bypass_cache, |
| 687 base::Bind(&WebContentsAndroid::OnFinishDownloadImage, |
| 688 weak_factory_.GetWeakPtr(), |
| 689 base::Owned(new ScopedJavaGlobalRef<jobject>( |
| 690 env, obj)), |
| 691 base::Owned(new ScopedJavaGlobalRef<jobject>( |
| 692 env, jcallback)))); |
| 693 } |
| 694 |
676 void WebContentsAndroid::OnFinishGetContentBitmap( | 695 void WebContentsAndroid::OnFinishGetContentBitmap( |
677 ScopedJavaGlobalRef<jobject>* obj, | 696 ScopedJavaGlobalRef<jobject>* obj, |
678 ScopedJavaGlobalRef<jobject>* callback, | 697 ScopedJavaGlobalRef<jobject>* callback, |
679 const SkBitmap& bitmap, | 698 const SkBitmap& bitmap, |
680 ReadbackResponse response) { | 699 ReadbackResponse response) { |
681 JNIEnv* env = base::android::AttachCurrentThread(); | 700 JNIEnv* env = base::android::AttachCurrentThread(); |
682 ScopedJavaLocalRef<jobject> java_bitmap; | 701 ScopedJavaLocalRef<jobject> java_bitmap; |
683 if (response == READBACK_SUCCESS) | 702 if (response == READBACK_SUCCESS) |
684 java_bitmap = gfx::ConvertToJavaBitmap(&bitmap); | 703 java_bitmap = gfx::ConvertToJavaBitmap(&bitmap); |
685 Java_WebContentsImpl_onGetContentBitmapFinished(env, | 704 Java_WebContentsImpl_onGetContentBitmapFinished(env, |
686 obj->obj(), | 705 obj->obj(), |
687 callback->obj(), | 706 callback->obj(), |
688 java_bitmap.obj(), | 707 java_bitmap.obj(), |
689 response); | 708 response); |
690 } | 709 } |
691 | 710 |
| 711 void WebContentsAndroid::OnFinishDownloadImage( |
| 712 base::android::ScopedJavaGlobalRef<jobject>* obj, |
| 713 base::android::ScopedJavaGlobalRef<jobject>* callback, |
| 714 int id, |
| 715 int http_status_code, |
| 716 const GURL& url, |
| 717 const std::vector<SkBitmap>& bitmaps, |
| 718 const std::vector<gfx::Size>& sizes) { |
| 719 JNIEnv* env = base::android::AttachCurrentThread(); |
| 720 ScopedJavaLocalRef<jobject> jbitmaps = |
| 721 Java_WebContentsImpl_createBitmapList(env); |
| 722 ScopedJavaLocalRef<jobject> jsizes = |
| 723 Java_WebContentsImpl_createSizeList(env); |
| 724 ScopedJavaLocalRef<jstring> jurl = |
| 725 base::android::ConvertUTF8ToJavaString(env, url.spec()); |
| 726 |
| 727 for (const SkBitmap& bitmap : bitmaps) { |
| 728 // WARNING: convering to java bitmaps results in duplicate memory |
| 729 // allocations, which increases the chance of OOMs if DownloadImage() is |
| 730 // misused. |
| 731 ScopedJavaLocalRef<jobject> jbitmap = gfx::ConvertToJavaBitmap(&bitmap); |
| 732 Java_WebContentsImpl_addToBitmapList(env, jbitmaps.obj(), jbitmap.obj()); |
| 733 } |
| 734 for (const gfx::Size& size : sizes) { |
| 735 Java_WebContentsImpl_createSizeAndAddToList( |
| 736 env, jsizes.obj(), size.width(), size.height()); |
| 737 } |
| 738 Java_WebContentsImpl_onDownloadImageFinished( |
| 739 env, obj->obj(), callback->obj(), id, |
| 740 http_status_code, jurl.obj(), jbitmaps.obj(), jsizes.obj()); |
| 741 } |
692 } // namespace content | 742 } // namespace content |
OLD | NEW |