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

Unified Diff: android_webview/browser/aw_request_interceptor.cc

Issue 1350553005: [Android WebView] Call shouldInterceptRequest on a background thread (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments addressed Created 5 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: android_webview/browser/aw_request_interceptor.cc
diff --git a/android_webview/browser/aw_request_interceptor.cc b/android_webview/browser/aw_request_interceptor.cc
index ee39a6594e896936918ecb56ba87a3ae1ac93d57..83180dbb5ded7848d2ded566320befa43b27c02e 100644
--- a/android_webview/browser/aw_request_interceptor.cc
+++ b/android_webview/browser/aw_request_interceptor.cc
@@ -4,28 +4,16 @@
#include "android_webview/browser/aw_request_interceptor.h"
-#include "android_webview/browser/aw_contents_io_thread_client.h"
-#include "android_webview/browser/aw_web_resource_response.h"
-#include "base/android/jni_string.h"
-#include "base/memory/scoped_ptr.h"
+#include "android_webview/browser/aw_request_handler.h"
+#include "base/supports_user_data.h"
#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/render_view_host.h"
-#include "content/public/browser/resource_request_info.h"
#include "net/url_request/url_request.h"
-#include "net/url_request/url_request_context.h"
-#include "net/url_request/url_request_context_getter.h"
-#include "net/url_request/url_request_job.h"
-
-using content::BrowserThread;
-using content::RenderViewHost;
-using content::ResourceRequestInfo;
namespace android_webview {
namespace {
-const void* const kRequestAlreadyQueriedDataKey =
- &kRequestAlreadyQueriedDataKey;
+const void* const kRequestHandlerDataKey = &kRequestHandlerDataKey;
} // namespace
@@ -35,56 +23,20 @@ AwRequestInterceptor::AwRequestInterceptor() {
AwRequestInterceptor::~AwRequestInterceptor() {
}
-scoped_ptr<AwWebResourceResponse>
-AwRequestInterceptor::QueryForAwWebResourceResponse(
- net::URLRequest* request) const {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
- int render_process_id, render_frame_id;
- if (!ResourceRequestInfo::GetRenderFrameForRequest(
- request, &render_process_id, &render_frame_id))
- return scoped_ptr<AwWebResourceResponse>();
-
- scoped_ptr<AwContentsIoThreadClient> io_thread_client =
- AwContentsIoThreadClient::FromID(render_process_id, render_frame_id);
-
- if (!io_thread_client.get())
- return scoped_ptr<AwWebResourceResponse>();
-
- GURL referrer(request->referrer());
- if (referrer.is_valid() &&
- (!request->is_pending() || request->is_redirecting())) {
- request->SetExtraRequestHeaderByName(net::HttpRequestHeaders::kReferer,
- referrer.spec(), true);
- }
- return io_thread_client->ShouldInterceptRequest(request).Pass();
-}
-
net::URLRequestJob* AwRequestInterceptor::MaybeInterceptRequest(
net::URLRequest* request,
net::NetworkDelegate* network_delegate) const {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
- // See if we've already found out the aw_web_resource_response for this
- // request.
- // This is done not only for efficiency reasons, but also for correctness
- // as it is possible for the Interceptor chain to be invoked more than once
- // in which case we don't want to query the embedder multiple times.
- // Note: The Interceptor chain is not invoked more than once if we create a
- // URLRequestJob in this method, so this is only caching negative hits.
- if (request->GetUserData(kRequestAlreadyQueriedDataKey))
- return NULL;
- request->SetUserData(kRequestAlreadyQueriedDataKey,
- new base::SupportsUserData::Data());
-
- scoped_ptr<AwWebResourceResponse> aw_web_resource_response =
- QueryForAwWebResourceResponse(request);
-
- if (!aw_web_resource_response)
- return NULL;
-
- // The newly created job will own the AwWebResourceResponse.
- return AwWebResourceResponse::CreateJobFor(
- aw_web_resource_response.Pass(), request, network_delegate);
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+
+ typedef base::UserDataAdapter<AwRequestHandler> AwRequestHandlerAdapter;
+ AwRequestHandler* handler =
+ AwRequestHandlerAdapter::Get(request, kRequestHandlerDataKey);
+ if (!handler) {
+ handler = new AwRequestHandler();
+ request->SetUserData(kRequestHandlerDataKey,
+ new AwRequestHandlerAdapter(handler));
+ }
+ return handler->MaybeInterceptRequest(request, network_delegate);
}
} // namespace android_webview

Powered by Google App Engine
This is Rietveld 408576698