Chromium Code Reviews| Index: chrome/browser/ui/android/context_menu_helper.cc |
| diff --git a/chrome/browser/ui/android/context_menu_helper.cc b/chrome/browser/ui/android/context_menu_helper.cc |
| index 3f237be8edfb607ac1199a9c197583a57a9cfcde..a9355ed99462c60d12bd108a29bcefab2a057133 100644 |
| --- a/chrome/browser/ui/android/context_menu_helper.cc |
| +++ b/chrome/browser/ui/android/context_menu_helper.cc |
| @@ -8,7 +8,7 @@ |
| #include <vector> |
| -#include "base/android/jni_android.h" |
| +#include "base/android/callback_android.h" |
| #include "base/android/jni_array.h" |
| #include "base/android/jni_string.h" |
| #include "base/bind_helpers.h" |
| @@ -34,9 +34,6 @@ using base::android::JavaParamRef; |
| DEFINE_WEB_CONTENTS_USER_DATA_KEY(ContextMenuHelper); |
| -const int kShareImageMaxWidth = 2048; |
| -const int kShareImageMaxHeight = 2048; |
| - |
| const char kDataReductionProxyPassthroughHeader[] = |
| "Chrome-Proxy: pass-through\r\n"; |
| @@ -120,6 +117,12 @@ ContextMenuHelper::CreateJavaContextMenuParams( |
| return jmenu_info; |
| } |
| +base::android::ScopedJavaLocalRef<jobject> |
| +ContextMenuHelper::GetJavaWebContents(JNIEnv* env, |
| + const JavaParamRef<jobject>& obj) { |
| + return web_contents_->GetJavaWebContents(); |
| +} |
| + |
| void ContextMenuHelper::OnStartDownload( |
| JNIEnv* env, |
| const JavaParamRef<jobject>& obj, |
| @@ -147,8 +150,10 @@ void ContextMenuHelper::SearchForImage(JNIEnv* env, |
| render_frame_host, context_menu_params_.src_url); |
| } |
| -void ContextMenuHelper::ShareImage(JNIEnv* env, |
| - const JavaParamRef<jobject>& obj) { |
| +void ContextMenuHelper::RetrieveImage(JNIEnv* env, |
| + const JavaParamRef<jobject>& obj, |
| + const JavaParamRef<jobject>& jcallback, |
| + jint max_dimen_px) { |
| content::RenderFrameHost* render_frame_host = |
| content::RenderFrameHost::FromID(render_process_id_, render_frame_id_); |
| if (!render_frame_host) |
| @@ -160,78 +165,18 @@ void ContextMenuHelper::ShareImage(JNIEnv* env, |
| // there's either a connection error or a response. |
| auto* thumbnail_capturer_proxy = thumbnail_capturer.get(); |
| thumbnail_capturer_proxy->RequestThumbnailForContextNode( |
| - 0, gfx::Size(kShareImageMaxWidth, kShareImageMaxHeight), |
| - base::Bind(&ContextMenuHelper::OnShareImage, weak_factory_.GetWeakPtr(), |
| - base::Passed(&thumbnail_capturer))); |
| + 0, gfx::Size(max_dimen_px, max_dimen_px), |
| + base::Bind(&ContextMenuHelper::OnRetrieveImage, |
| + weak_factory_.GetWeakPtr(), base::Passed(&thumbnail_capturer), |
| + base::android::ScopedJavaGlobalRef<jobject>(env, jcallback))); |
| } |
| -void ContextMenuHelper::OnShareImage( |
| +void ContextMenuHelper::OnRetrieveImage( |
|
David Trainor- moved to gerrit
2017/04/06 21:53:57
Can this just be an anonymous namespace helper met
Ted C
2017/04/07 17:09:37
Done.
|
| chrome::mojom::ThumbnailCapturerPtr thumbnail_capturer, |
| + const base::android::JavaRef<jobject>& jcallback, |
| const std::vector<uint8_t>& thumbnail_data, |
| const gfx::Size& original_size) { |
| - content::ContentViewCore* content_view_core = |
| - content::ContentViewCore::FromWebContents(web_contents_); |
| - if (!content_view_core) |
| - return; |
| - |
| - base::android::ScopedJavaLocalRef<jobject> jwindow_android( |
| - content_view_core->GetWindowAndroid()->GetJavaObject()); |
| - |
| - if (jwindow_android.is_null()) |
| - return; |
| - |
| - JNIEnv* env = base::android::AttachCurrentThread(); |
| - base::android::ScopedJavaLocalRef<jbyteArray> j_bytes = |
| - base::android::ToJavaByteArray(env, thumbnail_data); |
| - |
| - Java_ContextMenuHelper_onShareImageReceived(env, java_obj_, jwindow_android, |
| - j_bytes); |
| -} |
| - |
| -// TODO(tedchoc): Unify RetrieveHeaderThumbnail and ShareImage. |
| -void ContextMenuHelper::RetrieveHeaderThumbnail( |
| - JNIEnv* env, |
| - const JavaParamRef<jobject>& obj, |
| - jint j_max_size_px) { |
| - content::RenderFrameHost* render_frame_host = |
| - content::RenderFrameHost::FromID(render_process_id_, render_frame_id_); |
| - |
| - if (!render_frame_host) |
| - return; |
| - |
| - chrome::mojom::ThumbnailCapturerPtr thumbnail_capturer; |
| - render_frame_host->GetRemoteInterfaces()->GetInterface(&thumbnail_capturer); |
| - // Bind the InterfacePtr into the callback so that it's kept alive until |
| - // there's either a connection error or a response. |
| - auto* thumbnail_capturer_proxy = thumbnail_capturer.get(); |
| - thumbnail_capturer_proxy->RequestThumbnailForContextNode( |
| - 0, gfx::Size(j_max_size_px, j_max_size_px), |
| - base::Bind(&ContextMenuHelper::OnHeaderThumbnailReceived, |
| - weak_factory_.GetWeakPtr(), |
| - base::Passed(&thumbnail_capturer))); |
| -} |
| - |
| -void ContextMenuHelper::OnHeaderThumbnailReceived( |
| - chrome::mojom::ThumbnailCapturerPtr thumbnail_capturer, |
| - const std::vector<uint8_t>& thumbnail_data, |
| - const gfx::Size& original_size) { |
| - content::ContentViewCore* content_view_core = |
| - content::ContentViewCore::FromWebContents(web_contents_); |
| - if (!content_view_core) |
| - return; |
| - |
| - base::android::ScopedJavaLocalRef<jobject> jwindow_android( |
| - content_view_core->GetWindowAndroid()->GetJavaObject()); |
| - |
| - if (jwindow_android.is_null()) |
| - return; |
| - |
| - JNIEnv* env = base::android::AttachCurrentThread(); |
| - base::android::ScopedJavaLocalRef<jbyteArray> j_bytes = |
| - base::android::ToJavaByteArray(env, thumbnail_data); |
| - |
| - Java_ContextMenuHelper_onHeaderThumbnailReceived(env, java_obj_, |
| - jwindow_android, j_bytes); |
| + base::android::RunCallbackAndroid(jcallback, thumbnail_data); |
| } |
| bool RegisterContextMenuHelper(JNIEnv* env) { |