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

Side by Side Diff: chrome/browser/ui/android/context_menu_helper.cc

Issue 2804913003: Remove redundant code from Android context menu native. (Closed)
Patch Set: Address dtrainor@ comments Created 3 years, 8 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
« no previous file with comments | « chrome/browser/ui/android/context_menu_helper.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "chrome/browser/ui/android/context_menu_helper.h" 5 #include "chrome/browser/ui/android/context_menu_helper.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/android/jni_android.h" 11 #include "base/android/callback_android.h"
12 #include "base/android/jni_array.h"
13 #include "base/android/jni_string.h" 12 #include "base/android/jni_string.h"
14 #include "base/bind_helpers.h" 13 #include "base/bind_helpers.h"
14 #include "base/callback.h"
15 #include "chrome/browser/android/download/download_controller_base.h" 15 #include "chrome/browser/android/download/download_controller_base.h"
16 #include "chrome/browser/ui/tab_contents/core_tab_helper.h" 16 #include "chrome/browser/ui/tab_contents/core_tab_helper.h"
17 #include "chrome/common/thumbnail_capturer.mojom.h" 17 #include "chrome/common/thumbnail_capturer.mojom.h"
18 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_heade rs.h" 18 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_heade rs.h"
19 #include "content/public/browser/android/content_view_core.h" 19 #include "content/public/browser/android/content_view_core.h"
20 #include "content/public/browser/render_frame_host.h" 20 #include "content/public/browser/render_frame_host.h"
21 #include "content/public/browser/render_process_host.h" 21 #include "content/public/browser/render_process_host.h"
22 #include "content/public/common/context_menu_params.h" 22 #include "content/public/common/context_menu_params.h"
23 #include "jni/ContextMenuHelper_jni.h" 23 #include "jni/ContextMenuHelper_jni.h"
24 #include "jni/ContextMenuParams_jni.h" 24 #include "jni/ContextMenuParams_jni.h"
25 #include "services/service_manager/public/cpp/interface_provider.h" 25 #include "services/service_manager/public/cpp/interface_provider.h"
26 #include "third_party/WebKit/public/web/WebContextMenuData.h" 26 #include "third_party/WebKit/public/web/WebContextMenuData.h"
27 #include "ui/android/window_android.h"
28 #include "ui/gfx/geometry/point.h" 27 #include "ui/gfx/geometry/point.h"
28 #include "ui/gfx/geometry/size.h"
29 29
30 using base::android::ConvertJavaStringToUTF8; 30 using base::android::ConvertJavaStringToUTF8;
31 using base::android::ConvertUTF8ToJavaString; 31 using base::android::ConvertUTF8ToJavaString;
32 using base::android::ConvertUTF16ToJavaString; 32 using base::android::ConvertUTF16ToJavaString;
33 using base::android::JavaParamRef; 33 using base::android::JavaParamRef;
34 34
35 DEFINE_WEB_CONTENTS_USER_DATA_KEY(ContextMenuHelper); 35 DEFINE_WEB_CONTENTS_USER_DATA_KEY(ContextMenuHelper);
36 36
37 const int kShareImageMaxWidth = 2048;
38 const int kShareImageMaxHeight = 2048;
39
40 const char kDataReductionProxyPassthroughHeader[] = 37 const char kDataReductionProxyPassthroughHeader[] =
41 "Chrome-Proxy: pass-through\r\n"; 38 "Chrome-Proxy: pass-through\r\n";
42 39
40 namespace {
41
42 void OnRetrieveImage(chrome::mojom::ThumbnailCapturerPtr thumbnail_capturer,
43 const base::android::JavaRef<jobject>& jcallback,
44 const std::vector<uint8_t>& thumbnail_data,
45 const gfx::Size& original_size) {
46 base::android::RunCallbackAndroid(jcallback, thumbnail_data);
47 }
48
49 } // namespace
50
43 ContextMenuHelper::ContextMenuHelper(content::WebContents* web_contents) 51 ContextMenuHelper::ContextMenuHelper(content::WebContents* web_contents)
44 : web_contents_(web_contents), weak_factory_(this) { 52 : web_contents_(web_contents) {
45 JNIEnv* env = base::android::AttachCurrentThread(); 53 JNIEnv* env = base::android::AttachCurrentThread();
46 java_obj_.Reset( 54 java_obj_.Reset(
47 env, 55 env,
48 Java_ContextMenuHelper_create(env, reinterpret_cast<long>(this)).obj()); 56 Java_ContextMenuHelper_create(env, reinterpret_cast<long>(this)).obj());
49 DCHECK(!java_obj_.is_null()); 57 DCHECK(!java_obj_.is_null());
50 } 58 }
51 59
52 ContextMenuHelper::~ContextMenuHelper() { 60 ContextMenuHelper::~ContextMenuHelper() {
53 JNIEnv* env = base::android::AttachCurrentThread(); 61 JNIEnv* env = base::android::AttachCurrentThread();
54 Java_ContextMenuHelper_destroy(env, java_obj_); 62 Java_ContextMenuHelper_destroy(env, java_obj_);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 ConvertUTF8ToJavaString(env, params.unfiltered_link_url.spec()), 121 ConvertUTF8ToJavaString(env, params.unfiltered_link_url.spec()),
114 ConvertUTF8ToJavaString(env, params.src_url.spec()), 122 ConvertUTF8ToJavaString(env, params.src_url.spec()),
115 ConvertUTF16ToJavaString(env, params.title_text), 123 ConvertUTF16ToJavaString(env, params.title_text),
116 image_was_fetched_lo_fi, 124 image_was_fetched_lo_fi,
117 ConvertUTF8ToJavaString(env, sanitizedReferrer.spec()), 125 ConvertUTF8ToJavaString(env, sanitizedReferrer.spec()),
118 params.referrer_policy, can_save); 126 params.referrer_policy, can_save);
119 127
120 return jmenu_info; 128 return jmenu_info;
121 } 129 }
122 130
131 base::android::ScopedJavaLocalRef<jobject>
132 ContextMenuHelper::GetJavaWebContents(JNIEnv* env,
133 const JavaParamRef<jobject>& obj) {
134 return web_contents_->GetJavaWebContents();
135 }
136
123 void ContextMenuHelper::OnStartDownload( 137 void ContextMenuHelper::OnStartDownload(
124 JNIEnv* env, 138 JNIEnv* env,
125 const JavaParamRef<jobject>& obj, 139 const JavaParamRef<jobject>& obj,
126 jboolean jis_link, 140 jboolean jis_link,
127 jboolean jis_data_reduction_proxy_enabled) { 141 jboolean jis_data_reduction_proxy_enabled) {
128 std::string headers; 142 std::string headers;
129 if (jis_data_reduction_proxy_enabled) 143 if (jis_data_reduction_proxy_enabled)
130 headers = kDataReductionProxyPassthroughHeader; 144 headers = kDataReductionProxyPassthroughHeader;
131 145
132 DownloadControllerBase::Get()->StartContextMenuDownload( 146 DownloadControllerBase::Get()->StartContextMenuDownload(
133 context_menu_params_, 147 context_menu_params_,
134 web_contents_, 148 web_contents_,
135 jis_link, 149 jis_link,
136 headers); 150 headers);
137 } 151 }
138 152
139 void ContextMenuHelper::SearchForImage(JNIEnv* env, 153 void ContextMenuHelper::SearchForImage(JNIEnv* env,
140 const JavaParamRef<jobject>& obj) { 154 const JavaParamRef<jobject>& obj) {
141 content::RenderFrameHost* render_frame_host = 155 content::RenderFrameHost* render_frame_host =
142 content::RenderFrameHost::FromID(render_process_id_, render_frame_id_); 156 content::RenderFrameHost::FromID(render_process_id_, render_frame_id_);
143 if (!render_frame_host) 157 if (!render_frame_host)
144 return; 158 return;
145 159
146 CoreTabHelper::FromWebContents(web_contents_)->SearchByImageInNewTab( 160 CoreTabHelper::FromWebContents(web_contents_)->SearchByImageInNewTab(
147 render_frame_host, context_menu_params_.src_url); 161 render_frame_host, context_menu_params_.src_url);
148 } 162 }
149 163
150 void ContextMenuHelper::ShareImage(JNIEnv* env, 164 void ContextMenuHelper::RetrieveImage(JNIEnv* env,
151 const JavaParamRef<jobject>& obj) { 165 const JavaParamRef<jobject>& obj,
166 const JavaParamRef<jobject>& jcallback,
167 jint max_dimen_px) {
152 content::RenderFrameHost* render_frame_host = 168 content::RenderFrameHost* render_frame_host =
153 content::RenderFrameHost::FromID(render_process_id_, render_frame_id_); 169 content::RenderFrameHost::FromID(render_process_id_, render_frame_id_);
154 if (!render_frame_host) 170 if (!render_frame_host)
155 return; 171 return;
156 172
157 chrome::mojom::ThumbnailCapturerPtr thumbnail_capturer;
158 render_frame_host->GetRemoteInterfaces()->GetInterface(&thumbnail_capturer);
159 // Bind the InterfacePtr into the callback so that it's kept alive until
160 // there's either a connection error or a response.
161 auto* thumbnail_capturer_proxy = thumbnail_capturer.get();
162 thumbnail_capturer_proxy->RequestThumbnailForContextNode(
163 0, gfx::Size(kShareImageMaxWidth, kShareImageMaxHeight),
164 base::Bind(&ContextMenuHelper::OnShareImage, weak_factory_.GetWeakPtr(),
165 base::Passed(&thumbnail_capturer)));
166 }
167
168 void ContextMenuHelper::OnShareImage(
169 chrome::mojom::ThumbnailCapturerPtr thumbnail_capturer,
170 const std::vector<uint8_t>& thumbnail_data,
171 const gfx::Size& original_size) {
172 content::ContentViewCore* content_view_core =
173 content::ContentViewCore::FromWebContents(web_contents_);
174 if (!content_view_core)
175 return;
176
177 base::android::ScopedJavaLocalRef<jobject> jwindow_android(
178 content_view_core->GetWindowAndroid()->GetJavaObject());
179
180 if (jwindow_android.is_null())
181 return;
182
183 JNIEnv* env = base::android::AttachCurrentThread();
184 base::android::ScopedJavaLocalRef<jbyteArray> j_bytes =
185 base::android::ToJavaByteArray(env, thumbnail_data);
186
187 Java_ContextMenuHelper_onShareImageReceived(env, java_obj_, jwindow_android,
188 j_bytes);
189 }
190
191 // TODO(tedchoc): Unify RetrieveHeaderThumbnail and ShareImage.
192 void ContextMenuHelper::RetrieveHeaderThumbnail(
193 JNIEnv* env,
194 const JavaParamRef<jobject>& obj,
195 jint j_max_size_px) {
196 content::RenderFrameHost* render_frame_host =
197 content::RenderFrameHost::FromID(render_process_id_, render_frame_id_);
198
199 if (!render_frame_host)
200 return;
201
202 chrome::mojom::ThumbnailCapturerPtr thumbnail_capturer; 173 chrome::mojom::ThumbnailCapturerPtr thumbnail_capturer;
203 render_frame_host->GetRemoteInterfaces()->GetInterface(&thumbnail_capturer); 174 render_frame_host->GetRemoteInterfaces()->GetInterface(&thumbnail_capturer);
204 // Bind the InterfacePtr into the callback so that it's kept alive until 175 // Bind the InterfacePtr into the callback so that it's kept alive until
205 // there's either a connection error or a response. 176 // there's either a connection error or a response.
206 auto* thumbnail_capturer_proxy = thumbnail_capturer.get(); 177 auto* thumbnail_capturer_proxy = thumbnail_capturer.get();
207 thumbnail_capturer_proxy->RequestThumbnailForContextNode( 178 thumbnail_capturer_proxy->RequestThumbnailForContextNode(
208 0, gfx::Size(j_max_size_px, j_max_size_px), 179 0, gfx::Size(max_dimen_px, max_dimen_px),
209 base::Bind(&ContextMenuHelper::OnHeaderThumbnailReceived, 180 base::Bind(&OnRetrieveImage, base::Passed(&thumbnail_capturer),
210 weak_factory_.GetWeakPtr(), 181 base::android::ScopedJavaGlobalRef<jobject>(env, jcallback)));
211 base::Passed(&thumbnail_capturer)));
212 }
213
214 void ContextMenuHelper::OnHeaderThumbnailReceived(
215 chrome::mojom::ThumbnailCapturerPtr thumbnail_capturer,
216 const std::vector<uint8_t>& thumbnail_data,
217 const gfx::Size& original_size) {
218 content::ContentViewCore* content_view_core =
219 content::ContentViewCore::FromWebContents(web_contents_);
220 if (!content_view_core)
221 return;
222
223 base::android::ScopedJavaLocalRef<jobject> jwindow_android(
224 content_view_core->GetWindowAndroid()->GetJavaObject());
225
226 if (jwindow_android.is_null())
227 return;
228
229 JNIEnv* env = base::android::AttachCurrentThread();
230 base::android::ScopedJavaLocalRef<jbyteArray> j_bytes =
231 base::android::ToJavaByteArray(env, thumbnail_data);
232
233 Java_ContextMenuHelper_onHeaderThumbnailReceived(env, java_obj_,
234 jwindow_android, j_bytes);
235 } 182 }
236 183
237 bool RegisterContextMenuHelper(JNIEnv* env) { 184 bool RegisterContextMenuHelper(JNIEnv* env) {
238 return RegisterNativesImpl(env); 185 return RegisterNativesImpl(env);
239 } 186 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/android/context_menu_helper.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698