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

Side by Side 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 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/browser/net/aw_url_request_context_getter.h" 5 #include "android_webview/browser/net/aw_url_request_context_getter.h"
6 6
7 #include <vector>
8
7 #include "android_webview/browser/aw_browser_context.h" 9 #include "android_webview/browser/aw_browser_context.h"
8 #include "android_webview/browser/aw_request_interceptor.h" 10 #include "android_webview/browser/aw_request_interceptor.h"
9 #include "android_webview/browser/net/aw_network_delegate.h" 11 #include "android_webview/browser/net/aw_network_delegate.h"
10 #include "android_webview/browser/net/aw_url_request_job_factory.h" 12 #include "android_webview/browser/net/aw_url_request_job_factory.h"
11 #include "android_webview/browser/net/init_native_callback.h" 13 #include "android_webview/browser/net/init_native_callback.h"
12 #include "content/public/browser/browser_thread.h" 14 #include "content/public/browser/browser_thread.h"
13 #include "content/public/browser/content_browser_client.h" 15 #include "content/public/browser/content_browser_client.h"
14 #include "content/public/common/content_client.h" 16 #include "content/public/common/content_client.h"
15 #include "content/public/common/url_constants.h" 17 #include "content/public/common/url_constants.h"
16 #include "net/cookies/cookie_store.h" 18 #include "net/cookies/cookie_store.h"
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 DCHECK(set_protocol); 117 DCHECK(set_protocol);
116 set_protocol = job_factory->SetProtocolHandler( 118 set_protocol = job_factory->SetProtocolHandler(
117 chrome::kChromeUIScheme, 119 chrome::kChromeUIScheme,
118 protocol_handlers_[chrome::kChromeUIScheme].release()); 120 protocol_handlers_[chrome::kChromeUIScheme].release());
119 DCHECK(set_protocol); 121 DCHECK(set_protocol);
120 set_protocol = job_factory->SetProtocolHandler( 122 set_protocol = job_factory->SetProtocolHandler(
121 chrome::kChromeDevToolsScheme, 123 chrome::kChromeDevToolsScheme,
122 protocol_handlers_[chrome::kChromeDevToolsScheme].release()); 124 protocol_handlers_[chrome::kChromeDevToolsScheme].release());
123 DCHECK(set_protocol); 125 DCHECK(set_protocol);
124 protocol_handlers_.clear(); 126 protocol_handlers_.clear();
125 // Create a chain of URLRequestJobFactories. Keep |job_factory_| pointed 127
126 // at the beginning of the chain. 128 // Create a chain of URLRequestJobFactories. The handlers will be invoked
127 job_factory_ = CreateAndroidJobFactory(job_factory.Pass()); 129 // in the order in which they appear in the protocol_handlers vector.
128 job_factory_.reset(new net::ProtocolInterceptJobFactory( 130 typedef std::vector<net::URLRequestJobFactory::ProtocolHandler*>
129 job_factory_.Pass(), 131 ProtocolHandlerVector;
130 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>( 132 ProtocolHandlerVector protocol_interceptors;
131 new AwRequestInterceptor()))); 133
134 // Note that even though the content:// scheme handler is created here,
135 // it cannot be used by child processes until access to it is granted via
136 // ChildProcessSecurityPolicy::GrantScheme(). This is done in
137 // AwContentBrowserClient.
138 protocol_interceptors.push_back(
139 CreateAndroidContentProtocolHandler().release());
140 protocol_interceptors.push_back(
141 CreateAndroidAssetFileProtocolHandler().release());
142 // The AwRequestInterceptor must come after the content and asset file job
143 // factories. This for WebViewClassic compatibility where it was not
144 // possible to intercept resource loads to resolvable content:// and
145 // file:// URIs.
146 // This logical dependency is also the reason why the Content
147 // ProtocolHandler has to be added as a ProtocolInterceptJobFactory rather
148 // than via SetProtocolHandler.
149 protocol_interceptors.push_back(new AwRequestInterceptor());
150
151 // The chain of responsibility will execute the handlers in reverse to the
152 // order in which the elements of the chain are created.
153 job_factory_ = job_factory.PassAs<net::URLRequestJobFactory>();
154 for (ProtocolHandlerVector::reverse_iterator
155 i = protocol_interceptors.rbegin();
156 i != protocol_interceptors.rend();
157 ++i) {
158 job_factory_.reset(new net::ProtocolInterceptJobFactory(
159 job_factory_.Pass(), make_scoped_ptr(*i)));
160 }
161
132 url_request_context_->set_job_factory(job_factory_.get()); 162 url_request_context_->set_job_factory(job_factory_.get());
133 } 163 }
164
134 return url_request_context_.get(); 165 return url_request_context_.get();
135 } 166 }
136 167
137 scoped_refptr<base::SingleThreadTaskRunner> 168 scoped_refptr<base::SingleThreadTaskRunner>
138 AwURLRequestContextGetter::GetNetworkTaskRunner() const { 169 AwURLRequestContextGetter::GetNetworkTaskRunner() const {
139 return BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO); 170 return BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO);
140 } 171 }
141 172
142 void AwURLRequestContextGetter::SetProtocolHandlers( 173 void AwURLRequestContextGetter::SetProtocolHandlers(
143 content::ProtocolHandlerMap* protocol_handlers) { 174 content::ProtocolHandlerMap* protocol_handlers) {
144 std::swap(protocol_handlers_, *protocol_handlers); 175 std::swap(protocol_handlers_, *protocol_handlers);
145 } 176 }
146 177
147 } // namespace android_webview 178 } // namespace android_webview
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698