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

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: fix accidentally broken test Created 6 years, 6 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/aw_web_resource_response_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 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 225 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
221 if (java_object_.is_null()) 226 if (java_object_.is_null())
222 return AwContentsIoThreadClient::LOAD_DEFAULT; 227 return AwContentsIoThreadClient::LOAD_DEFAULT;
223 228
224 JNIEnv* env = AttachCurrentThread(); 229 JNIEnv* env = AttachCurrentThread();
225 return static_cast<AwContentsIoThreadClient::CacheMode>( 230 return static_cast<AwContentsIoThreadClient::CacheMode>(
226 Java_AwContentsIoThreadClient_getCacheMode( 231 Java_AwContentsIoThreadClient_getCacheMode(
227 env, java_object_.obj())); 232 env, java_object_.obj()));
228 } 233 }
229 234
230 scoped_ptr<InterceptedRequestData> 235 scoped_ptr<AwWebResourceResponse>
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<AwWebResourceResponse>();
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<AwWebResourceResponse>();
252 return scoped_ptr<InterceptedRequestData>( 284 return scoped_ptr<AwWebResourceResponse>(
253 new InterceptedRequestDataImpl(ret)); 285 new AwWebResourceResponseImpl(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;
260 292
261 JNIEnv* env = AttachCurrentThread(); 293 JNIEnv* env = AttachCurrentThread();
262 return Java_AwContentsIoThreadClient_shouldBlockContentUrls( 294 return Java_AwContentsIoThreadClient_shouldBlockContentUrls(
263 env, java_object_.obj()); 295 env, java_object_.obj());
(...skipping 24 matching lines...) Expand all
288 if (java_object_.is_null()) 320 if (java_object_.is_null())
289 return false; 321 return false;
290 322
291 JNIEnv* env = AttachCurrentThread(); 323 JNIEnv* env = AttachCurrentThread();
292 return Java_AwContentsIoThreadClient_shouldBlockNetworkLoads( 324 return Java_AwContentsIoThreadClient_shouldBlockNetworkLoads(
293 env, java_object_.obj()); 325 env, java_object_.obj());
294 } 326 }
295 327
296 void AwContentsIoThreadClientImpl::NewDownload( 328 void AwContentsIoThreadClientImpl::NewDownload(
297 const GURL& url, 329 const GURL& url,
298 const std::string& user_agent, 330 const string& user_agent,
299 const std::string& content_disposition, 331 const string& content_disposition,
300 const std::string& mime_type, 332 const string& mime_type,
301 int64 content_length) { 333 int64 content_length) {
302 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 334 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
303 if (java_object_.is_null()) 335 if (java_object_.is_null())
304 return; 336 return;
305 337
306 JNIEnv* env = AttachCurrentThread(); 338 JNIEnv* env = AttachCurrentThread();
307 ScopedJavaLocalRef<jstring> jstring_url = 339 ScopedJavaLocalRef<jstring> jstring_url =
308 ConvertUTF8ToJavaString(env, url.spec()); 340 ConvertUTF8ToJavaString(env, url.spec());
309 ScopedJavaLocalRef<jstring> jstring_user_agent = 341 ScopedJavaLocalRef<jstring> jstring_user_agent =
310 ConvertUTF8ToJavaString(env, user_agent); 342 ConvertUTF8ToJavaString(env, user_agent);
311 ScopedJavaLocalRef<jstring> jstring_content_disposition = 343 ScopedJavaLocalRef<jstring> jstring_content_disposition =
312 ConvertUTF8ToJavaString(env, content_disposition); 344 ConvertUTF8ToJavaString(env, content_disposition);
313 ScopedJavaLocalRef<jstring> jstring_mime_type = 345 ScopedJavaLocalRef<jstring> jstring_mime_type =
314 ConvertUTF8ToJavaString(env, mime_type); 346 ConvertUTF8ToJavaString(env, mime_type);
315 347
316 Java_AwContentsIoThreadClient_onDownloadStart( 348 Java_AwContentsIoThreadClient_onDownloadStart(
317 env, 349 env,
318 java_object_.obj(), 350 java_object_.obj(),
319 jstring_url.obj(), 351 jstring_url.obj(),
320 jstring_user_agent.obj(), 352 jstring_user_agent.obj(),
321 jstring_content_disposition.obj(), 353 jstring_content_disposition.obj(),
322 jstring_mime_type.obj(), 354 jstring_mime_type.obj(),
323 content_length); 355 content_length);
324 } 356 }
325 357
326 void AwContentsIoThreadClientImpl::NewLoginRequest(const std::string& realm, 358 void AwContentsIoThreadClientImpl::NewLoginRequest(const string& realm,
327 const std::string& account, 359 const string& account,
328 const std::string& args) { 360 const string& args) {
329 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 361 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
330 if (java_object_.is_null()) 362 if (java_object_.is_null())
331 return; 363 return;
332 364
333 JNIEnv* env = AttachCurrentThread(); 365 JNIEnv* env = AttachCurrentThread();
334 ScopedJavaLocalRef<jstring> jrealm = ConvertUTF8ToJavaString(env, realm); 366 ScopedJavaLocalRef<jstring> jrealm = ConvertUTF8ToJavaString(env, realm);
335 ScopedJavaLocalRef<jstring> jargs = ConvertUTF8ToJavaString(env, args); 367 ScopedJavaLocalRef<jstring> jargs = ConvertUTF8ToJavaString(env, args);
336 368
337 ScopedJavaLocalRef<jstring> jaccount; 369 ScopedJavaLocalRef<jstring> jaccount;
338 if (!account.empty()) 370 if (!account.empty())
339 jaccount = ConvertUTF8ToJavaString(env, account); 371 jaccount = ConvertUTF8ToJavaString(env, account);
340 372
341 Java_AwContentsIoThreadClient_newLoginRequest( 373 Java_AwContentsIoThreadClient_newLoginRequest(
342 env, java_object_.obj(), jrealm.obj(), jaccount.obj(), jargs.obj()); 374 env, java_object_.obj(), jrealm.obj(), jaccount.obj(), jargs.obj());
343 } 375 }
344 376
345 bool RegisterAwContentsIoThreadClientImpl(JNIEnv* env) { 377 bool RegisterAwContentsIoThreadClientImpl(JNIEnv* env) {
346 return RegisterNativesImpl(env); 378 return RegisterNativesImpl(env);
347 } 379 }
348 380
349 } // namespace android_webview 381 } // namespace android_webview
OLDNEW
« no previous file with comments | « android_webview/native/aw_contents_io_thread_client_impl.h ('k') | android_webview/native/aw_web_resource_response_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698