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

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: 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" 12 #include "base/android/jni_array.h"
13 #include "base/android/jni_string.h" 13 #include "base/android/jni_string.h"
14 #include "base/bind_helpers.h" 14 #include "base/bind_helpers.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" 27 #include "ui/android/window_android.h"
28 #include "ui/gfx/geometry/point.h" 28 #include "ui/gfx/geometry/point.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
43 ContextMenuHelper::ContextMenuHelper(content::WebContents* web_contents) 40 ContextMenuHelper::ContextMenuHelper(content::WebContents* web_contents)
44 : web_contents_(web_contents), weak_factory_(this) { 41 : web_contents_(web_contents), weak_factory_(this) {
45 JNIEnv* env = base::android::AttachCurrentThread(); 42 JNIEnv* env = base::android::AttachCurrentThread();
46 java_obj_.Reset( 43 java_obj_.Reset(
47 env, 44 env,
48 Java_ContextMenuHelper_create(env, reinterpret_cast<long>(this)).obj()); 45 Java_ContextMenuHelper_create(env, reinterpret_cast<long>(this)).obj());
49 DCHECK(!java_obj_.is_null()); 46 DCHECK(!java_obj_.is_null());
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 ConvertUTF8ToJavaString(env, params.unfiltered_link_url.spec()), 110 ConvertUTF8ToJavaString(env, params.unfiltered_link_url.spec()),
114 ConvertUTF8ToJavaString(env, params.src_url.spec()), 111 ConvertUTF8ToJavaString(env, params.src_url.spec()),
115 ConvertUTF16ToJavaString(env, params.title_text), 112 ConvertUTF16ToJavaString(env, params.title_text),
116 image_was_fetched_lo_fi, 113 image_was_fetched_lo_fi,
117 ConvertUTF8ToJavaString(env, sanitizedReferrer.spec()), 114 ConvertUTF8ToJavaString(env, sanitizedReferrer.spec()),
118 params.referrer_policy, can_save); 115 params.referrer_policy, can_save);
119 116
120 return jmenu_info; 117 return jmenu_info;
121 } 118 }
122 119
120 base::android::ScopedJavaLocalRef<jobject>
121 ContextMenuHelper::GetJavaWebContents(JNIEnv* env,
122 const JavaParamRef<jobject>& obj) {
123 return web_contents_->GetJavaWebContents();
124 }
125
123 void ContextMenuHelper::OnStartDownload( 126 void ContextMenuHelper::OnStartDownload(
124 JNIEnv* env, 127 JNIEnv* env,
125 const JavaParamRef<jobject>& obj, 128 const JavaParamRef<jobject>& obj,
126 jboolean jis_link, 129 jboolean jis_link,
127 jboolean jis_data_reduction_proxy_enabled) { 130 jboolean jis_data_reduction_proxy_enabled) {
128 std::string headers; 131 std::string headers;
129 if (jis_data_reduction_proxy_enabled) 132 if (jis_data_reduction_proxy_enabled)
130 headers = kDataReductionProxyPassthroughHeader; 133 headers = kDataReductionProxyPassthroughHeader;
131 134
132 DownloadControllerBase::Get()->StartContextMenuDownload( 135 DownloadControllerBase::Get()->StartContextMenuDownload(
133 context_menu_params_, 136 context_menu_params_,
134 web_contents_, 137 web_contents_,
135 jis_link, 138 jis_link,
136 headers); 139 headers);
137 } 140 }
138 141
139 void ContextMenuHelper::SearchForImage(JNIEnv* env, 142 void ContextMenuHelper::SearchForImage(JNIEnv* env,
140 const JavaParamRef<jobject>& obj) { 143 const JavaParamRef<jobject>& obj) {
141 content::RenderFrameHost* render_frame_host = 144 content::RenderFrameHost* render_frame_host =
142 content::RenderFrameHost::FromID(render_process_id_, render_frame_id_); 145 content::RenderFrameHost::FromID(render_process_id_, render_frame_id_);
143 if (!render_frame_host) 146 if (!render_frame_host)
144 return; 147 return;
145 148
146 CoreTabHelper::FromWebContents(web_contents_)->SearchByImageInNewTab( 149 CoreTabHelper::FromWebContents(web_contents_)->SearchByImageInNewTab(
147 render_frame_host, context_menu_params_.src_url); 150 render_frame_host, context_menu_params_.src_url);
148 } 151 }
149 152
150 void ContextMenuHelper::ShareImage(JNIEnv* env, 153 void ContextMenuHelper::RetrieveImage(JNIEnv* env,
151 const JavaParamRef<jobject>& obj) { 154 const JavaParamRef<jobject>& obj,
155 const JavaParamRef<jobject>& jcallback,
156 jint max_dimen_px) {
152 content::RenderFrameHost* render_frame_host = 157 content::RenderFrameHost* render_frame_host =
153 content::RenderFrameHost::FromID(render_process_id_, render_frame_id_); 158 content::RenderFrameHost::FromID(render_process_id_, render_frame_id_);
154 if (!render_frame_host) 159 if (!render_frame_host)
155 return; 160 return;
156 161
157 chrome::mojom::ThumbnailCapturerPtr thumbnail_capturer; 162 chrome::mojom::ThumbnailCapturerPtr thumbnail_capturer;
158 render_frame_host->GetRemoteInterfaces()->GetInterface(&thumbnail_capturer); 163 render_frame_host->GetRemoteInterfaces()->GetInterface(&thumbnail_capturer);
159 // Bind the InterfacePtr into the callback so that it's kept alive until 164 // Bind the InterfacePtr into the callback so that it's kept alive until
160 // there's either a connection error or a response. 165 // there's either a connection error or a response.
161 auto* thumbnail_capturer_proxy = thumbnail_capturer.get(); 166 auto* thumbnail_capturer_proxy = thumbnail_capturer.get();
162 thumbnail_capturer_proxy->RequestThumbnailForContextNode( 167 thumbnail_capturer_proxy->RequestThumbnailForContextNode(
163 0, gfx::Size(kShareImageMaxWidth, kShareImageMaxHeight), 168 0, gfx::Size(max_dimen_px, max_dimen_px),
164 base::Bind(&ContextMenuHelper::OnShareImage, weak_factory_.GetWeakPtr(), 169 base::Bind(&ContextMenuHelper::OnRetrieveImage,
165 base::Passed(&thumbnail_capturer))); 170 weak_factory_.GetWeakPtr(), base::Passed(&thumbnail_capturer),
171 base::android::ScopedJavaGlobalRef<jobject>(env, jcallback)));
166 } 172 }
167 173
168 void ContextMenuHelper::OnShareImage( 174 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.
169 chrome::mojom::ThumbnailCapturerPtr thumbnail_capturer, 175 chrome::mojom::ThumbnailCapturerPtr thumbnail_capturer,
176 const base::android::JavaRef<jobject>& jcallback,
170 const std::vector<uint8_t>& thumbnail_data, 177 const std::vector<uint8_t>& thumbnail_data,
171 const gfx::Size& original_size) { 178 const gfx::Size& original_size) {
172 content::ContentViewCore* content_view_core = 179 base::android::RunCallbackAndroid(jcallback, thumbnail_data);
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;
203 render_frame_host->GetRemoteInterfaces()->GetInterface(&thumbnail_capturer);
204 // Bind the InterfacePtr into the callback so that it's kept alive until
205 // there's either a connection error or a response.
206 auto* thumbnail_capturer_proxy = thumbnail_capturer.get();
207 thumbnail_capturer_proxy->RequestThumbnailForContextNode(
208 0, gfx::Size(j_max_size_px, j_max_size_px),
209 base::Bind(&ContextMenuHelper::OnHeaderThumbnailReceived,
210 weak_factory_.GetWeakPtr(),
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 } 180 }
236 181
237 bool RegisterContextMenuHelper(JNIEnv* env) { 182 bool RegisterContextMenuHelper(JNIEnv* env) {
238 return RegisterNativesImpl(env); 183 return RegisterNativesImpl(env);
239 } 184 }
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