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

Unified Diff: android_webview/browser/net/aw_url_request_context_getter.cc

Issue 12377051: [android_webview] Don't intercept resource and asset URLRequests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 9 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/net/aw_url_request_context_getter.cc
diff --git a/android_webview/browser/net/aw_url_request_context_getter.cc b/android_webview/browser/net/aw_url_request_context_getter.cc
index 9e7b8b0eaa0a688d12e264e163b0d037a46ab9fb..3337292948c2b306a70356124aa8bba4bae6cc9f 100644
--- a/android_webview/browser/net/aw_url_request_context_getter.cc
+++ b/android_webview/browser/net/aw_url_request_context_getter.cc
@@ -4,6 +4,8 @@
#include "android_webview/browser/net/aw_url_request_context_getter.h"
+#include <vector>
+
#include "android_webview/browser/aw_browser_context.h"
#include "android_webview/browser/aw_request_interceptor.h"
#include "android_webview/browser/net/aw_network_delegate.h"
@@ -122,15 +124,44 @@ net::URLRequestContext* AwURLRequestContextGetter::GetURLRequestContext() {
protocol_handlers_[chrome::kChromeDevToolsScheme].release());
DCHECK(set_protocol);
protocol_handlers_.clear();
- // Create a chain of URLRequestJobFactories. Keep |job_factory_| pointed
- // at the beginning of the chain.
- job_factory_ = CreateAndroidJobFactory(job_factory.Pass());
- job_factory_.reset(new net::ProtocolInterceptJobFactory(
- job_factory_.Pass(),
- scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>(
- new AwRequestInterceptor())));
+
+ // Create a chain of URLRequestJobFactories. The handlers will be invoked
+ // in the order in which they appear in the protocol_handlers vector.
+ typedef std::vector<net::URLRequestJobFactory::ProtocolHandler*>
+ ProtocolHandlerVector;
+ ProtocolHandlerVector protocol_interceptors;
+
+ // Note that even though the content:// scheme handler is created here,
+ // it cannot be used by child processes until access to it is granted via
+ // ChildProcessSecurityPolicy::GrantScheme(). This is done in
+ // AwContentBrowserClient.
+ protocol_interceptors.push_back(
+ CreateAndroidContentProtocolHandler().release());
+ protocol_interceptors.push_back(
+ CreateAndroidAssetFileProtocolHandler().release());
+ // The AwRequestInterceptor must come after the content and asset file job
+ // factories. This for WebViewClassic compatibility where it was not
+ // possible to intercept resource loads to resolvable content:// and
+ // file:// URIs.
+ // This logical dependency is also the reason why the Content
+ // ProtocolHandler has to be added as a ProtocolInterceptJobFactory rather
+ // than via SetProtocolHandler.
+ protocol_interceptors.push_back(new AwRequestInterceptor());
+
+ // The chain of responsibility will execute the handlers in reverse to the
+ // order in which the elements of the chain are created.
+ job_factory_ = job_factory.PassAs<net::URLRequestJobFactory>();
+ for (ProtocolHandlerVector::reverse_iterator
+ i = protocol_interceptors.rbegin();
+ i != protocol_interceptors.rend();
+ ++i) {
+ job_factory_.reset(new net::ProtocolInterceptJobFactory(
+ job_factory_.Pass(), make_scoped_ptr(*i)));
+ }
+
url_request_context_->set_job_factory(job_factory_.get());
}
+
return url_request_context_.get();
}

Powered by Google App Engine
This is Rietveld 408576698