Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(52)

Side by Side Diff: content/browser/web_contents/web_contents_android.cc

Issue 2014553002: Implement WebContents.downloadImage() on Java side (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebasing Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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 void 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 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 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
729 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.
730 }
731 for (const gfx::Size& size : sizes) {
732 Java_WebContentsImpl_createSizeAndAddToList(
733 env, jsizes.obj(), size.width(), size.height());
734 }
735 Java_WebContentsImpl_onDownloadImageFinished(
736 env, obj->obj(), callback->obj(), id,
737 http_status_code, jurl.obj(), jbitmaps.obj(), jsizes.obj());
738 }
692 } // namespace content 739 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698