| 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..8c74369429d345c95323281477aa3f641e2a6f0c 100644
|
| --- a/chrome/browser/ui/android/context_menu_helper.cc
|
| +++ b/chrome/browser/ui/android/context_menu_helper.cc
|
| @@ -8,10 +8,10 @@
|
|
|
| #include <vector>
|
|
|
| -#include "base/android/jni_android.h"
|
| -#include "base/android/jni_array.h"
|
| +#include "base/android/callback_android.h"
|
| #include "base/android/jni_string.h"
|
| #include "base/bind_helpers.h"
|
| +#include "base/callback.h"
|
| #include "chrome/browser/android/download/download_controller_base.h"
|
| #include "chrome/browser/ui/tab_contents/core_tab_helper.h"
|
| #include "chrome/common/thumbnail_capturer.mojom.h"
|
| @@ -24,8 +24,8 @@
|
| #include "jni/ContextMenuParams_jni.h"
|
| #include "services/service_manager/public/cpp/interface_provider.h"
|
| #include "third_party/WebKit/public/web/WebContextMenuData.h"
|
| -#include "ui/android/window_android.h"
|
| #include "ui/gfx/geometry/point.h"
|
| +#include "ui/gfx/geometry/size.h"
|
|
|
| using base::android::ConvertJavaStringToUTF8;
|
| using base::android::ConvertUTF8ToJavaString;
|
| @@ -34,14 +34,22 @@ 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";
|
|
|
| +namespace {
|
| +
|
| +void OnRetrieveImage(chrome::mojom::ThumbnailCapturerPtr thumbnail_capturer,
|
| + const base::android::JavaRef<jobject>& jcallback,
|
| + const std::vector<uint8_t>& thumbnail_data,
|
| + const gfx::Size& original_size) {
|
| + base::android::RunCallbackAndroid(jcallback, thumbnail_data);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| ContextMenuHelper::ContextMenuHelper(content::WebContents* web_contents)
|
| - : web_contents_(web_contents), weak_factory_(this) {
|
| + : web_contents_(web_contents) {
|
| JNIEnv* env = base::android::AttachCurrentThread();
|
| java_obj_.Reset(
|
| env,
|
| @@ -120,6 +128,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,55 +161,12 @@ void ContextMenuHelper::SearchForImage(JNIEnv* env,
|
| render_frame_host, context_menu_params_.src_url);
|
| }
|
|
|
| -void ContextMenuHelper::ShareImage(JNIEnv* env,
|
| - const JavaParamRef<jobject>& obj) {
|
| - 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(kShareImageMaxWidth, kShareImageMaxHeight),
|
| - base::Bind(&ContextMenuHelper::OnShareImage, weak_factory_.GetWeakPtr(),
|
| - base::Passed(&thumbnail_capturer)));
|
| -}
|
| -
|
| -void ContextMenuHelper::OnShareImage(
|
| - 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_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) {
|
| +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)
|
| return;
|
|
|
| @@ -205,33 +176,9 @@ void ContextMenuHelper::RetrieveHeaderThumbnail(
|
| // 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);
|
| + 0, gfx::Size(max_dimen_px, max_dimen_px),
|
| + base::Bind(&OnRetrieveImage, base::Passed(&thumbnail_capturer),
|
| + base::android::ScopedJavaGlobalRef<jobject>(env, jcallback)));
|
| }
|
|
|
| bool RegisterContextMenuHelper(JNIEnv* env) {
|
|
|