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) { |