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

Side by Side Diff: android_webview/native/aw_contents_io_thread_client_impl.cc

Issue 284123004: [android_webview] Add more params to request intercepting. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "android_webview/native/aw_contents_io_thread_client_impl.h" 5 #include "android_webview/native/aw_contents_io_thread_client_impl.h"
6 6
7 #include <map> 7 #include <map>
8 #include <utility> 8 #include <utility>
9 9
10 #include "android_webview/common/devtools_instrumentation.h" 10 #include "android_webview/common/devtools_instrumentation.h"
11 #include "android_webview/native/intercepted_request_data_impl.h" 11 #include "android_webview/native/intercepted_request_data_impl.h"
12 #include "base/android/jni_array.h"
12 #include "base/android/jni_string.h" 13 #include "base/android/jni_string.h"
13 #include "base/android/jni_weak_ref.h" 14 #include "base/android/jni_weak_ref.h"
14 #include "base/lazy_instance.h" 15 #include "base/lazy_instance.h"
15 #include "base/memory/linked_ptr.h" 16 #include "base/memory/linked_ptr.h"
16 #include "base/memory/scoped_ptr.h" 17 #include "base/memory/scoped_ptr.h"
17 #include "base/synchronization/lock.h" 18 #include "base/synchronization/lock.h"
18 #include "content/public/browser/browser_thread.h" 19 #include "content/public/browser/browser_thread.h"
19 #include "content/public/browser/render_frame_host.h" 20 #include "content/public/browser/render_frame_host.h"
20 #include "content/public/browser/render_process_host.h" 21 #include "content/public/browser/render_process_host.h"
21 #include "content/public/browser/render_view_host.h" 22 #include "content/public/browser/render_view_host.h"
22 #include "content/public/browser/resource_request_info.h" 23 #include "content/public/browser/resource_request_info.h"
23 #include "content/public/browser/web_contents.h" 24 #include "content/public/browser/web_contents.h"
24 #include "content/public/browser/web_contents_observer.h" 25 #include "content/public/browser/web_contents_observer.h"
25 #include "jni/AwContentsIoThreadClient_jni.h" 26 #include "jni/AwContentsIoThreadClient_jni.h"
27 #include "net/http/http_request_headers.h"
26 #include "net/url_request/url_request.h" 28 #include "net/url_request/url_request.h"
27 #include "url/gurl.h" 29 #include "url/gurl.h"
28 30
29 using base::android::AttachCurrentThread; 31 using base::android::AttachCurrentThread;
30 using base::android::ConvertUTF8ToJavaString; 32 using base::android::ConvertUTF8ToJavaString;
31 using base::android::JavaRef; 33 using base::android::JavaRef;
32 using base::android::ScopedJavaLocalRef; 34 using base::android::ScopedJavaLocalRef;
35 using base::android::ToJavaArrayOfStrings;
33 using base::LazyInstance; 36 using base::LazyInstance;
34 using content::BrowserThread; 37 using content::BrowserThread;
35 using content::RenderFrameHost; 38 using content::RenderFrameHost;
36 using content::WebContents; 39 using content::WebContents;
37 using std::map; 40 using std::map;
38 using std::pair; 41 using std::pair;
42 using std::string;
43 using std::vector;
39 44
40 namespace android_webview { 45 namespace android_webview {
41 46
42 namespace { 47 namespace {
43 48
44 struct IoThreadClientData { 49 struct IoThreadClientData {
45 bool pending_association; 50 bool pending_association;
46 JavaObjectWeakGlobalRef io_thread_client; 51 JavaObjectWeakGlobalRef io_thread_client;
47 52
48 IoThreadClientData(); 53 IoThreadClientData();
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 AwContentsIoThreadClientImpl::ShouldInterceptRequest( 236 AwContentsIoThreadClientImpl::ShouldInterceptRequest(
232 const GURL& location, 237 const GURL& location,
233 const net::URLRequest* request) { 238 const net::URLRequest* request) {
234 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 239 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
235 if (java_object_.is_null()) 240 if (java_object_.is_null())
236 return scoped_ptr<InterceptedRequestData>(); 241 return scoped_ptr<InterceptedRequestData>();
237 const content::ResourceRequestInfo* info = 242 const content::ResourceRequestInfo* info =
238 content::ResourceRequestInfo::ForRequest(request); 243 content::ResourceRequestInfo::ForRequest(request);
239 bool is_main_frame = info && 244 bool is_main_frame = info &&
240 info->GetResourceType() == ResourceType::MAIN_FRAME; 245 info->GetResourceType() == ResourceType::MAIN_FRAME;
246 bool has_user_gesture = info && info->HasUserGesture();
247
248 vector<string> headers_names;
249 vector<string> headers_values;
250 {
251 net::HttpRequestHeaders headers;
252 if (!request->GetFullRequestHeaders(&headers))
253 headers = request->extra_request_headers();
254 net::HttpRequestHeaders::Iterator headers_iterator(headers);
255 while (headers_iterator.GetNext()) {
256 headers_names.push_back(headers_iterator.name());
257 headers_values.push_back(headers_iterator.value());
258 }
259 }
241 260
242 JNIEnv* env = AttachCurrentThread(); 261 JNIEnv* env = AttachCurrentThread();
243 ScopedJavaLocalRef<jstring> jstring_url = 262 ScopedJavaLocalRef<jstring> jstring_url =
244 ConvertUTF8ToJavaString(env, location.spec()); 263 ConvertUTF8ToJavaString(env, location.spec());
264 ScopedJavaLocalRef<jstring> jstring_method =
265 ConvertUTF8ToJavaString(env, request->method());
266 ScopedJavaLocalRef<jobjectArray> jstringArray_headers_names =
267 ToJavaArrayOfStrings(env, headers_names);
268 ScopedJavaLocalRef<jobjectArray> jstringArray_headers_values =
269 ToJavaArrayOfStrings(env, headers_values);
245 devtools_instrumentation::ScopedEmbedderCallbackTask embedder_callback( 270 devtools_instrumentation::ScopedEmbedderCallbackTask embedder_callback(
246 "shouldInterceptRequest"); 271 "shouldInterceptRequest");
247 ScopedJavaLocalRef<jobject> ret = 272 ScopedJavaLocalRef<jobject> ret =
248 Java_AwContentsIoThreadClient_shouldInterceptRequest( 273 Java_AwContentsIoThreadClient_shouldInterceptRequest(
249 env, java_object_.obj(), jstring_url.obj(), is_main_frame); 274 env,
275 java_object_.obj(),
276 jstring_url.obj(),
277 is_main_frame,
278 has_user_gesture,
279 jstring_method.obj(),
280 jstringArray_headers_names.obj(),
281 jstringArray_headers_values.obj());
250 if (ret.is_null()) 282 if (ret.is_null())
251 return scoped_ptr<InterceptedRequestData>(); 283 return scoped_ptr<InterceptedRequestData>();
252 return scoped_ptr<InterceptedRequestData>( 284 return scoped_ptr<InterceptedRequestData>(
253 new InterceptedRequestDataImpl(ret)); 285 new InterceptedRequestDataImpl(ret));
254 } 286 }
255 287
256 bool AwContentsIoThreadClientImpl::ShouldBlockContentUrls() const { 288 bool AwContentsIoThreadClientImpl::ShouldBlockContentUrls() const {
257 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 289 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
258 if (java_object_.is_null()) 290 if (java_object_.is_null())
259 return false; 291 return false;
(...skipping 18 matching lines...) Expand all
278 if (java_object_.is_null()) 310 if (java_object_.is_null())
279 return false; 311 return false;
280 312
281 JNIEnv* env = AttachCurrentThread(); 313 JNIEnv* env = AttachCurrentThread();
282 return Java_AwContentsIoThreadClient_shouldBlockNetworkLoads( 314 return Java_AwContentsIoThreadClient_shouldBlockNetworkLoads(
283 env, java_object_.obj()); 315 env, java_object_.obj());
284 } 316 }
285 317
286 void AwContentsIoThreadClientImpl::NewDownload( 318 void AwContentsIoThreadClientImpl::NewDownload(
287 const GURL& url, 319 const GURL& url,
288 const std::string& user_agent, 320 const string& user_agent,
289 const std::string& content_disposition, 321 const string& content_disposition,
290 const std::string& mime_type, 322 const string& mime_type,
291 int64 content_length) { 323 int64 content_length) {
292 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 324 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
293 if (java_object_.is_null()) 325 if (java_object_.is_null())
294 return; 326 return;
295 327
296 JNIEnv* env = AttachCurrentThread(); 328 JNIEnv* env = AttachCurrentThread();
297 ScopedJavaLocalRef<jstring> jstring_url = 329 ScopedJavaLocalRef<jstring> jstring_url =
298 ConvertUTF8ToJavaString(env, url.spec()); 330 ConvertUTF8ToJavaString(env, url.spec());
299 ScopedJavaLocalRef<jstring> jstring_user_agent = 331 ScopedJavaLocalRef<jstring> jstring_user_agent =
300 ConvertUTF8ToJavaString(env, user_agent); 332 ConvertUTF8ToJavaString(env, user_agent);
301 ScopedJavaLocalRef<jstring> jstring_content_disposition = 333 ScopedJavaLocalRef<jstring> jstring_content_disposition =
302 ConvertUTF8ToJavaString(env, content_disposition); 334 ConvertUTF8ToJavaString(env, content_disposition);
303 ScopedJavaLocalRef<jstring> jstring_mime_type = 335 ScopedJavaLocalRef<jstring> jstring_mime_type =
304 ConvertUTF8ToJavaString(env, mime_type); 336 ConvertUTF8ToJavaString(env, mime_type);
305 337
306 Java_AwContentsIoThreadClient_onDownloadStart( 338 Java_AwContentsIoThreadClient_onDownloadStart(
307 env, 339 env,
308 java_object_.obj(), 340 java_object_.obj(),
309 jstring_url.obj(), 341 jstring_url.obj(),
310 jstring_user_agent.obj(), 342 jstring_user_agent.obj(),
311 jstring_content_disposition.obj(), 343 jstring_content_disposition.obj(),
312 jstring_mime_type.obj(), 344 jstring_mime_type.obj(),
313 content_length); 345 content_length);
314 } 346 }
315 347
316 void AwContentsIoThreadClientImpl::NewLoginRequest(const std::string& realm, 348 void AwContentsIoThreadClientImpl::NewLoginRequest(const string& realm,
317 const std::string& account, 349 const string& account,
318 const std::string& args) { 350 const string& args) {
319 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 351 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
320 if (java_object_.is_null()) 352 if (java_object_.is_null())
321 return; 353 return;
322 354
323 JNIEnv* env = AttachCurrentThread(); 355 JNIEnv* env = AttachCurrentThread();
324 ScopedJavaLocalRef<jstring> jrealm = ConvertUTF8ToJavaString(env, realm); 356 ScopedJavaLocalRef<jstring> jrealm = ConvertUTF8ToJavaString(env, realm);
325 ScopedJavaLocalRef<jstring> jargs = ConvertUTF8ToJavaString(env, args); 357 ScopedJavaLocalRef<jstring> jargs = ConvertUTF8ToJavaString(env, args);
326 358
327 ScopedJavaLocalRef<jstring> jaccount; 359 ScopedJavaLocalRef<jstring> jaccount;
328 if (!account.empty()) 360 if (!account.empty())
329 jaccount = ConvertUTF8ToJavaString(env, account); 361 jaccount = ConvertUTF8ToJavaString(env, account);
330 362
331 Java_AwContentsIoThreadClient_newLoginRequest( 363 Java_AwContentsIoThreadClient_newLoginRequest(
332 env, java_object_.obj(), jrealm.obj(), jaccount.obj(), jargs.obj()); 364 env, java_object_.obj(), jrealm.obj(), jaccount.obj(), jargs.obj());
333 } 365 }
334 366
335 bool RegisterAwContentsIoThreadClientImpl(JNIEnv* env) { 367 bool RegisterAwContentsIoThreadClientImpl(JNIEnv* env) {
336 return RegisterNativesImpl(env); 368 return RegisterNativesImpl(env);
337 } 369 }
338 370
339 } // namespace android_webview 371 } // namespace android_webview
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698