OLD | NEW |
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 "net/url_request/url_request_context_builder.h" | 5 #include "net/url_request/url_request_context_builder.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 SocketStream* stream, | 116 SocketStream* stream, |
117 const CompletionCallback& callback) OVERRIDE { | 117 const CompletionCallback& callback) OVERRIDE { |
118 return OK; | 118 return OK; |
119 } | 119 } |
120 | 120 |
121 DISALLOW_COPY_AND_ASSIGN(BasicNetworkDelegate); | 121 DISALLOW_COPY_AND_ASSIGN(BasicNetworkDelegate); |
122 }; | 122 }; |
123 | 123 |
124 class BasicURLRequestContext : public URLRequestContext { | 124 class BasicURLRequestContext : public URLRequestContext { |
125 public: | 125 public: |
126 BasicURLRequestContext() | 126 BasicURLRequestContext() : storage_(this) {} |
127 : storage_(this) {} | |
128 | 127 |
129 URLRequestContextStorage* storage() { | 128 URLRequestContextStorage* storage() { return &storage_; } |
130 return &storage_; | |
131 } | |
132 | 129 |
133 base::Thread* GetCacheThread() { | 130 base::Thread* GetCacheThread() { |
134 if (!cache_thread_) { | 131 if (!cache_thread_) { |
135 cache_thread_.reset(new base::Thread("Cache Thread")); | 132 cache_thread_.reset(new base::Thread("Cache Thread")); |
136 cache_thread_->StartWithOptions( | 133 cache_thread_->StartWithOptions( |
137 base::Thread::Options(base::MessageLoop::TYPE_IO, 0)); | 134 base::Thread::Options(base::MessageLoop::TYPE_IO, 0)); |
138 } | 135 } |
139 return cache_thread_.get(); | 136 return cache_thread_.get(); |
140 } | 137 } |
141 | 138 |
(...skipping 12 matching lines...) Expand all Loading... |
154 private: | 151 private: |
155 scoped_ptr<base::Thread> cache_thread_; | 152 scoped_ptr<base::Thread> cache_thread_; |
156 scoped_ptr<base::Thread> file_thread_; | 153 scoped_ptr<base::Thread> file_thread_; |
157 URLRequestContextStorage storage_; | 154 URLRequestContextStorage storage_; |
158 DISALLOW_COPY_AND_ASSIGN(BasicURLRequestContext); | 155 DISALLOW_COPY_AND_ASSIGN(BasicURLRequestContext); |
159 }; | 156 }; |
160 | 157 |
161 } // namespace | 158 } // namespace |
162 | 159 |
163 URLRequestContextBuilder::HttpCacheParams::HttpCacheParams() | 160 URLRequestContextBuilder::HttpCacheParams::HttpCacheParams() |
164 : type(IN_MEMORY), | 161 : type(IN_MEMORY), max_size(0) { |
165 max_size(0) {} | 162 } |
166 URLRequestContextBuilder::HttpCacheParams::~HttpCacheParams() {} | 163 URLRequestContextBuilder::HttpCacheParams::~HttpCacheParams() { |
| 164 } |
167 | 165 |
168 URLRequestContextBuilder::HttpNetworkSessionParams::HttpNetworkSessionParams() | 166 URLRequestContextBuilder::HttpNetworkSessionParams::HttpNetworkSessionParams() |
169 : ignore_certificate_errors(false), | 167 : ignore_certificate_errors(false), |
170 host_mapping_rules(NULL), | 168 host_mapping_rules(NULL), |
171 http_pipelining_enabled(false), | 169 http_pipelining_enabled(false), |
172 testing_fixed_http_port(0), | 170 testing_fixed_http_port(0), |
173 testing_fixed_https_port(0), | 171 testing_fixed_https_port(0), |
174 trusted_spdy_proxy() {} | 172 trusted_spdy_proxy() { |
| 173 } |
175 | 174 |
176 URLRequestContextBuilder::HttpNetworkSessionParams::~HttpNetworkSessionParams() | 175 URLRequestContextBuilder::HttpNetworkSessionParams:: |
177 {} | 176 ~HttpNetworkSessionParams() { |
| 177 } |
178 | 178 |
179 URLRequestContextBuilder::SchemeFactory::SchemeFactory( | 179 URLRequestContextBuilder::SchemeFactory::SchemeFactory( |
180 const std::string& auth_scheme, | 180 const std::string& auth_scheme, |
181 net::HttpAuthHandlerFactory* auth_handler_factory) | 181 net::HttpAuthHandlerFactory* auth_handler_factory) |
182 : scheme(auth_scheme), factory(auth_handler_factory) { | 182 : scheme(auth_scheme), factory(auth_handler_factory) { |
183 } | 183 } |
184 | 184 |
185 URLRequestContextBuilder::SchemeFactory::~SchemeFactory() { | 185 URLRequestContextBuilder::SchemeFactory::~SchemeFactory() { |
186 } | 186 } |
187 | 187 |
188 URLRequestContextBuilder::URLRequestContextBuilder() | 188 URLRequestContextBuilder::URLRequestContextBuilder() |
189 : data_enabled_(false), | 189 : data_enabled_(false), |
190 file_enabled_(false), | 190 file_enabled_(false), |
191 #if !defined(DISABLE_FTP_SUPPORT) | 191 #if !defined(DISABLE_FTP_SUPPORT) |
192 ftp_enabled_(false), | 192 ftp_enabled_(false), |
193 #endif | 193 #endif |
194 http_cache_enabled_(true) { | 194 http_cache_enabled_(true) { |
195 } | 195 } |
196 | 196 |
197 URLRequestContextBuilder::~URLRequestContextBuilder() {} | 197 URLRequestContextBuilder::~URLRequestContextBuilder() { |
| 198 } |
198 | 199 |
199 void URLRequestContextBuilder::set_proxy_config_service( | 200 void URLRequestContextBuilder::set_proxy_config_service( |
200 ProxyConfigService* proxy_config_service) { | 201 ProxyConfigService* proxy_config_service) { |
201 proxy_config_service_.reset(proxy_config_service); | 202 proxy_config_service_.reset(proxy_config_service); |
202 } | 203 } |
203 | 204 |
204 URLRequestContext* URLRequestContextBuilder::Build() { | 205 URLRequestContext* URLRequestContextBuilder::Build() { |
205 BasicURLRequestContext* context = new BasicURLRequestContext; | 206 BasicURLRequestContext* context = new BasicURLRequestContext; |
206 URLRequestContextStorage* storage = context->storage(); | 207 URLRequestContextStorage* storage = context->storage(); |
207 | 208 |
208 storage->set_http_user_agent_settings(new StaticHttpUserAgentSettings( | 209 storage->set_http_user_agent_settings( |
209 accept_language_, user_agent_)); | 210 new StaticHttpUserAgentSettings(accept_language_, user_agent_)); |
210 | 211 |
211 if (!network_delegate_) | 212 if (!network_delegate_) |
212 network_delegate_.reset(new BasicNetworkDelegate); | 213 network_delegate_.reset(new BasicNetworkDelegate); |
213 NetworkDelegate* network_delegate = network_delegate_.release(); | 214 NetworkDelegate* network_delegate = network_delegate_.release(); |
214 storage->set_network_delegate(network_delegate); | 215 storage->set_network_delegate(network_delegate); |
215 | 216 |
216 if (!host_resolver_) | 217 if (!host_resolver_) |
217 host_resolver_ = net::HostResolver::CreateDefaultResolver(NULL); | 218 host_resolver_ = net::HostResolver::CreateDefaultResolver(NULL); |
218 storage->set_host_resolver(host_resolver_.Pass()); | 219 storage->set_host_resolver(host_resolver_.Pass()); |
219 | 220 |
220 storage->set_net_log(new net::NetLog); | 221 storage->set_net_log(new net::NetLog); |
221 | 222 |
222 // TODO(willchan): Switch to using this code when | 223 // TODO(willchan): Switch to using this code when |
223 // ProxyService::CreateSystemProxyConfigService()'s signature doesn't suck. | 224 // ProxyService::CreateSystemProxyConfigService()'s signature doesn't suck. |
224 #if defined(OS_LINUX) || defined(OS_ANDROID) | 225 #if defined(OS_LINUX) || defined(OS_ANDROID) |
225 ProxyConfigService* proxy_config_service = proxy_config_service_.release(); | 226 ProxyConfigService* proxy_config_service = proxy_config_service_.release(); |
226 #else | 227 #else |
227 ProxyConfigService* proxy_config_service = NULL; | 228 ProxyConfigService* proxy_config_service = NULL; |
228 if (proxy_config_service_) { | 229 if (proxy_config_service_) { |
229 proxy_config_service = proxy_config_service_.release(); | 230 proxy_config_service = proxy_config_service_.release(); |
230 } else { | 231 } else { |
231 proxy_config_service = | 232 proxy_config_service = ProxyService::CreateSystemProxyConfigService( |
232 ProxyService::CreateSystemProxyConfigService( | 233 base::ThreadTaskRunnerHandle::Get().get(), |
233 base::ThreadTaskRunnerHandle::Get().get(), | 234 context->GetFileThread()->message_loop()); |
234 context->GetFileThread()->message_loop()); | |
235 } | 235 } |
236 #endif // defined(OS_LINUX) || defined(OS_ANDROID) | 236 #endif // defined(OS_LINUX) || defined(OS_ANDROID) |
237 storage->set_proxy_service( | 237 storage->set_proxy_service(ProxyService::CreateUsingSystemProxyResolver( |
238 ProxyService::CreateUsingSystemProxyResolver( | 238 proxy_config_service, |
239 proxy_config_service, | 239 4, // TODO(willchan): Find a better constant somewhere. |
240 4, // TODO(willchan): Find a better constant somewhere. | 240 context->net_log())); |
241 context->net_log())); | |
242 storage->set_ssl_config_service(new net::SSLConfigServiceDefaults); | 241 storage->set_ssl_config_service(new net::SSLConfigServiceDefaults); |
243 HttpAuthHandlerRegistryFactory* http_auth_handler_registry_factory = | 242 HttpAuthHandlerRegistryFactory* http_auth_handler_registry_factory = |
244 net::HttpAuthHandlerRegistryFactory::CreateDefault( | 243 net::HttpAuthHandlerRegistryFactory::CreateDefault( |
245 context->host_resolver()); | 244 context->host_resolver()); |
246 for (size_t i = 0; i < extra_http_auth_handlers_.size(); ++i) { | 245 for (size_t i = 0; i < extra_http_auth_handlers_.size(); ++i) { |
247 http_auth_handler_registry_factory->RegisterSchemeFactory( | 246 http_auth_handler_registry_factory->RegisterSchemeFactory( |
248 extra_http_auth_handlers_[i].scheme, | 247 extra_http_auth_handlers_[i].scheme, |
249 extra_http_auth_handlers_[i].factory); | 248 extra_http_auth_handlers_[i].factory); |
250 } | 249 } |
251 storage->set_http_auth_handler_factory(http_auth_handler_registry_factory); | 250 storage->set_http_auth_handler_factory(http_auth_handler_registry_factory); |
252 storage->set_cookie_store(new CookieMonster(NULL, NULL)); | 251 storage->set_cookie_store(new CookieMonster(NULL, NULL)); |
253 storage->set_transport_security_state(new net::TransportSecurityState()); | 252 storage->set_transport_security_state(new net::TransportSecurityState()); |
254 storage->set_http_server_properties( | 253 storage->set_http_server_properties(scoped_ptr<net::HttpServerProperties>( |
255 scoped_ptr<net::HttpServerProperties>( | 254 new net::HttpServerPropertiesImpl())); |
256 new net::HttpServerPropertiesImpl())); | |
257 storage->set_cert_verifier(CertVerifier::CreateDefault()); | 255 storage->set_cert_verifier(CertVerifier::CreateDefault()); |
258 | 256 |
259 net::HttpNetworkSession::Params network_session_params; | 257 net::HttpNetworkSession::Params network_session_params; |
260 network_session_params.host_resolver = context->host_resolver(); | 258 network_session_params.host_resolver = context->host_resolver(); |
261 network_session_params.cert_verifier = context->cert_verifier(); | 259 network_session_params.cert_verifier = context->cert_verifier(); |
262 network_session_params.transport_security_state = | 260 network_session_params.transport_security_state = |
263 context->transport_security_state(); | 261 context->transport_security_state(); |
264 network_session_params.proxy_service = context->proxy_service(); | 262 network_session_params.proxy_service = context->proxy_service(); |
265 network_session_params.ssl_config_service = | 263 network_session_params.ssl_config_service = context->ssl_config_service(); |
266 context->ssl_config_service(); | |
267 network_session_params.http_auth_handler_factory = | 264 network_session_params.http_auth_handler_factory = |
268 context->http_auth_handler_factory(); | 265 context->http_auth_handler_factory(); |
269 network_session_params.network_delegate = network_delegate; | 266 network_session_params.network_delegate = network_delegate; |
270 network_session_params.http_server_properties = | 267 network_session_params.http_server_properties = |
271 context->http_server_properties(); | 268 context->http_server_properties(); |
272 network_session_params.net_log = context->net_log(); | 269 network_session_params.net_log = context->net_log(); |
273 network_session_params.ignore_certificate_errors = | 270 network_session_params.ignore_certificate_errors = |
274 http_network_session_params_.ignore_certificate_errors; | 271 http_network_session_params_.ignore_certificate_errors; |
275 network_session_params.host_mapping_rules = | 272 network_session_params.host_mapping_rules = |
276 http_network_session_params_.host_mapping_rules; | 273 http_network_session_params_.host_mapping_rules; |
(...skipping 16 matching lines...) Expand all Loading... |
293 DISK_CACHE, | 290 DISK_CACHE, |
294 net::CACHE_BACKEND_DEFAULT, | 291 net::CACHE_BACKEND_DEFAULT, |
295 http_cache_params_.path, | 292 http_cache_params_.path, |
296 http_cache_params_.max_size, | 293 http_cache_params_.max_size, |
297 context->GetCacheThread()->message_loop_proxy().get()); | 294 context->GetCacheThread()->message_loop_proxy().get()); |
298 } else { | 295 } else { |
299 http_cache_backend = | 296 http_cache_backend = |
300 HttpCache::DefaultBackend::InMemory(http_cache_params_.max_size); | 297 HttpCache::DefaultBackend::InMemory(http_cache_params_.max_size); |
301 } | 298 } |
302 | 299 |
303 http_transaction_factory = new HttpCache( | 300 http_transaction_factory = |
304 network_session_params, http_cache_backend); | 301 new HttpCache(network_session_params, http_cache_backend); |
305 } else { | 302 } else { |
306 scoped_refptr<net::HttpNetworkSession> network_session( | 303 scoped_refptr<net::HttpNetworkSession> network_session( |
307 new net::HttpNetworkSession(network_session_params)); | 304 new net::HttpNetworkSession(network_session_params)); |
308 | 305 |
309 http_transaction_factory = new HttpNetworkLayer(network_session.get()); | 306 http_transaction_factory = new HttpNetworkLayer(network_session.get()); |
310 } | 307 } |
311 storage->set_http_transaction_factory(http_transaction_factory); | 308 storage->set_http_transaction_factory(http_transaction_factory); |
312 | 309 |
313 URLRequestJobFactoryImpl* job_factory = new URLRequestJobFactoryImpl; | 310 URLRequestJobFactoryImpl* job_factory = new URLRequestJobFactoryImpl; |
314 if (data_enabled_) | 311 if (data_enabled_) |
315 job_factory->SetProtocolHandler("data", new DataProtocolHandler); | 312 job_factory->SetProtocolHandler("data", new DataProtocolHandler); |
316 if (file_enabled_) { | 313 if (file_enabled_) { |
317 job_factory->SetProtocolHandler( | 314 job_factory->SetProtocolHandler( |
318 "file", | 315 "file", |
319 new FileProtocolHandler(context->GetFileThread()->message_loop_proxy())); | 316 new FileProtocolHandler( |
| 317 context->GetFileThread()->message_loop_proxy())); |
320 } | 318 } |
321 #if !defined(DISABLE_FTP_SUPPORT) | 319 #if !defined(DISABLE_FTP_SUPPORT) |
322 if (ftp_enabled_) { | 320 if (ftp_enabled_) { |
323 ftp_transaction_factory_.reset( | 321 ftp_transaction_factory_.reset( |
324 new FtpNetworkLayer(context->host_resolver())); | 322 new FtpNetworkLayer(context->host_resolver())); |
325 job_factory->SetProtocolHandler("ftp", | 323 job_factory->SetProtocolHandler( |
326 new FtpProtocolHandler(ftp_transaction_factory_.get())); | 324 "ftp", new FtpProtocolHandler(ftp_transaction_factory_.get())); |
327 } | 325 } |
328 #endif | 326 #endif |
329 storage->set_job_factory(job_factory); | 327 storage->set_job_factory(job_factory); |
330 | 328 |
331 // TODO(willchan): Support sdch. | 329 // TODO(willchan): Support sdch. |
332 | 330 |
333 return context; | 331 return context; |
334 } | 332 } |
335 | 333 |
336 } // namespace net | 334 } // namespace net |
OLD | NEW |