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 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
185 | 185 |
186 URLRequestContextBuilder::HttpCacheParams::HttpCacheParams() | 186 URLRequestContextBuilder::HttpCacheParams::HttpCacheParams() |
187 : type(IN_MEMORY), | 187 : type(IN_MEMORY), |
188 max_size(0) {} | 188 max_size(0) {} |
189 URLRequestContextBuilder::HttpCacheParams::~HttpCacheParams() {} | 189 URLRequestContextBuilder::HttpCacheParams::~HttpCacheParams() {} |
190 | 190 |
191 URLRequestContextBuilder::URLRequestContextBuilder() | 191 URLRequestContextBuilder::URLRequestContextBuilder() |
192 : name_(nullptr), | 192 : name_(nullptr), |
193 enable_brotli_(false), | 193 enable_brotli_(false), |
194 network_quality_estimator_(nullptr), | 194 network_quality_estimator_(nullptr), |
| 195 shared_http_user_agent_settings_(nullptr), |
195 data_enabled_(false), | 196 data_enabled_(false), |
196 #if !BUILDFLAG(DISABLE_FILE_SUPPORT) | 197 #if !BUILDFLAG(DISABLE_FILE_SUPPORT) |
197 file_enabled_(false), | 198 file_enabled_(false), |
198 #endif | 199 #endif |
199 #if !BUILDFLAG(DISABLE_FTP_SUPPORT) | 200 #if !BUILDFLAG(DISABLE_FTP_SUPPORT) |
200 ftp_enabled_(false), | 201 ftp_enabled_(false), |
201 #endif | 202 #endif |
202 http_cache_enabled_(true), | 203 http_cache_enabled_(true), |
203 throttling_enabled_(false), | 204 throttling_enabled_(false), |
204 sdch_enabled_(false), | 205 sdch_enabled_(false), |
205 cookie_store_set_by_client_(false), | 206 cookie_store_set_by_client_(false), |
| 207 transport_security_persister_readonly_(false), |
206 net_log_(nullptr), | 208 net_log_(nullptr), |
| 209 shared_host_resolver_(nullptr), |
207 pac_quick_check_enabled_(true), | 210 pac_quick_check_enabled_(true), |
208 pac_sanitize_url_policy_(ProxyService::SanitizeUrlPolicy::SAFE) { | 211 pac_sanitize_url_policy_(ProxyService::SanitizeUrlPolicy::SAFE), |
| 212 shared_proxy_delegate_(nullptr), |
| 213 shared_http_auth_handler_factory_(nullptr), |
| 214 shared_cert_verifier_(nullptr) { |
209 } | 215 } |
210 | 216 |
211 URLRequestContextBuilder::~URLRequestContextBuilder() {} | 217 URLRequestContextBuilder::~URLRequestContextBuilder() {} |
212 | 218 |
213 void URLRequestContextBuilder::SetHttpNetworkSessionComponents( | 219 void URLRequestContextBuilder::SetHttpNetworkSessionComponents( |
214 const URLRequestContext* request_context, | 220 const URLRequestContext* request_context, |
215 HttpNetworkSession::Context* session_context) { | 221 HttpNetworkSession::Context* session_context) { |
216 session_context->host_resolver = request_context->host_resolver(); | 222 session_context->host_resolver = request_context->host_resolver(); |
217 session_context->cert_verifier = request_context->cert_verifier(); | 223 session_context->cert_verifier = request_context->cert_verifier(); |
218 session_context->transport_security_state = | 224 session_context->transport_security_state = |
(...skipping 11 matching lines...) Expand all Loading... |
230 session_context->channel_id_service = request_context->channel_id_service(); | 236 session_context->channel_id_service = request_context->channel_id_service(); |
231 session_context->network_quality_provider = | 237 session_context->network_quality_provider = |
232 request_context->network_quality_estimator(); | 238 request_context->network_quality_estimator(); |
233 if (request_context->network_quality_estimator()) { | 239 if (request_context->network_quality_estimator()) { |
234 session_context->socket_performance_watcher_factory = | 240 session_context->socket_performance_watcher_factory = |
235 request_context->network_quality_estimator() | 241 request_context->network_quality_estimator() |
236 ->GetSocketPerformanceWatcherFactory(); | 242 ->GetSocketPerformanceWatcherFactory(); |
237 } | 243 } |
238 } | 244 } |
239 | 245 |
| 246 void URLRequestContextBuilder::set_accept_language( |
| 247 const std::string& accept_language) { |
| 248 DCHECK(!shared_http_user_agent_settings_); |
| 249 accept_language_ = accept_language; |
| 250 } |
| 251 void URLRequestContextBuilder::set_user_agent(const std::string& user_agent) { |
| 252 DCHECK(!shared_http_user_agent_settings_); |
| 253 user_agent_ = user_agent; |
| 254 } |
| 255 void URLRequestContextBuilder::set_shared_http_user_agent_settings( |
| 256 HttpUserAgentSettings* shared_http_user_agent_settings) { |
| 257 DCHECK(accept_language_.empty()); |
| 258 DCHECK(user_agent_.empty()); |
| 259 shared_http_user_agent_settings_ = shared_http_user_agent_settings; |
| 260 } |
| 261 |
240 void URLRequestContextBuilder::EnableHttpCache(const HttpCacheParams& params) { | 262 void URLRequestContextBuilder::EnableHttpCache(const HttpCacheParams& params) { |
241 http_cache_enabled_ = true; | 263 http_cache_enabled_ = true; |
242 http_cache_params_ = params; | 264 http_cache_params_ = params; |
243 } | 265 } |
244 | 266 |
245 void URLRequestContextBuilder::DisableHttpCache() { | 267 void URLRequestContextBuilder::DisableHttpCache() { |
246 http_cache_enabled_ = false; | 268 http_cache_enabled_ = false; |
247 http_cache_params_ = HttpCacheParams(); | 269 http_cache_params_ = HttpCacheParams(); |
248 } | 270 } |
249 | 271 |
250 void URLRequestContextBuilder::SetSpdyAndQuicEnabled(bool spdy_enabled, | 272 void URLRequestContextBuilder::SetSpdyAndQuicEnabled(bool spdy_enabled, |
251 bool quic_enabled) { | 273 bool quic_enabled) { |
252 http_network_session_params_.enable_http2 = spdy_enabled; | 274 http_network_session_params_.enable_http2 = spdy_enabled; |
253 http_network_session_params_.enable_quic = quic_enabled; | 275 http_network_session_params_.enable_quic = quic_enabled; |
254 } | 276 } |
255 | 277 |
256 void URLRequestContextBuilder::set_ct_verifier( | 278 void URLRequestContextBuilder::set_ct_verifier( |
257 std::unique_ptr<CTVerifier> ct_verifier) { | 279 std::unique_ptr<CTVerifier> ct_verifier) { |
258 ct_verifier_ = std::move(ct_verifier); | 280 ct_verifier_ = std::move(ct_verifier); |
259 } | 281 } |
260 | 282 |
261 void URLRequestContextBuilder::set_ct_policy_enforcer( | 283 void URLRequestContextBuilder::set_ct_policy_enforcer( |
262 std::unique_ptr<CTPolicyEnforcer> ct_policy_enforcer) { | 284 std::unique_ptr<CTPolicyEnforcer> ct_policy_enforcer) { |
263 ct_policy_enforcer_ = std::move(ct_policy_enforcer); | 285 ct_policy_enforcer_ = std::move(ct_policy_enforcer); |
264 } | 286 } |
265 | 287 |
266 void URLRequestContextBuilder::SetCertVerifier( | 288 void URLRequestContextBuilder::SetCertVerifier( |
267 std::unique_ptr<CertVerifier> cert_verifier) { | 289 std::unique_ptr<CertVerifier> cert_verifier) { |
| 290 DCHECK(!shared_cert_verifier_); |
268 cert_verifier_ = std::move(cert_verifier); | 291 cert_verifier_ = std::move(cert_verifier); |
269 } | 292 } |
270 | 293 |
| 294 void URLRequestContextBuilder::set_shared_cert_verifier( |
| 295 CertVerifier* shared_cert_verifier) { |
| 296 DCHECK(!cert_verifier_); |
| 297 shared_cert_verifier_ = shared_cert_verifier; |
| 298 } |
| 299 |
271 #if BUILDFLAG(ENABLE_REPORTING) | 300 #if BUILDFLAG(ENABLE_REPORTING) |
272 void URLRequestContextBuilder::set_reporting_policy( | 301 void URLRequestContextBuilder::set_reporting_policy( |
273 std::unique_ptr<net::ReportingPolicy> reporting_policy) { | 302 std::unique_ptr<net::ReportingPolicy> reporting_policy) { |
274 reporting_policy_ = std::move(reporting_policy); | 303 reporting_policy_ = std::move(reporting_policy); |
275 } | 304 } |
276 #endif // BUILDFLAG(ENABLE_REPORTING) | 305 #endif // BUILDFLAG(ENABLE_REPORTING) |
277 | 306 |
278 void URLRequestContextBuilder::SetInterceptors( | 307 void URLRequestContextBuilder::SetInterceptors( |
279 std::vector<std::unique_ptr<URLRequestInterceptor>> | 308 std::vector<std::unique_ptr<URLRequestInterceptor>> |
280 url_request_interceptors) { | 309 url_request_interceptors) { |
281 url_request_interceptors_ = std::move(url_request_interceptors); | 310 url_request_interceptors_ = std::move(url_request_interceptors); |
282 } | 311 } |
283 | 312 |
| 313 void URLRequestContextBuilder::set_create_intercepting_job_factory( |
| 314 CreateInterceptingJobFactory create_intercepting_job_factory) { |
| 315 DCHECK(!create_intercepting_job_factory_); |
| 316 create_intercepting_job_factory_ = std::move(create_intercepting_job_factory); |
| 317 } |
| 318 |
284 void URLRequestContextBuilder::SetCookieAndChannelIdStores( | 319 void URLRequestContextBuilder::SetCookieAndChannelIdStores( |
285 std::unique_ptr<CookieStore> cookie_store, | 320 std::unique_ptr<CookieStore> cookie_store, |
286 std::unique_ptr<ChannelIDService> channel_id_service) { | 321 std::unique_ptr<ChannelIDService> channel_id_service) { |
287 cookie_store_set_by_client_ = true; | 322 cookie_store_set_by_client_ = true; |
288 // If |cookie_store| is NULL, |channel_id_service| must be NULL too. | 323 // If |cookie_store| is NULL, |channel_id_service| must be NULL too. |
289 DCHECK(cookie_store || !channel_id_service); | 324 DCHECK(cookie_store || !channel_id_service); |
290 cookie_store_ = std::move(cookie_store); | 325 cookie_store_ = std::move(cookie_store); |
291 channel_id_service_ = std::move(channel_id_service); | 326 channel_id_service_ = std::move(channel_id_service); |
292 } | 327 } |
293 | 328 |
294 void URLRequestContextBuilder::SetCacheThreadTaskRunner( | 329 void URLRequestContextBuilder::SetCacheThreadTaskRunner( |
295 scoped_refptr<base::SingleThreadTaskRunner> cache_thread_task_runner) { | 330 scoped_refptr<base::SingleThreadTaskRunner> cache_thread_task_runner) { |
296 cache_thread_task_runner_ = std::move(cache_thread_task_runner); | 331 cache_thread_task_runner_ = std::move(cache_thread_task_runner); |
297 } | 332 } |
298 | 333 |
299 void URLRequestContextBuilder::SetProtocolHandler( | 334 void URLRequestContextBuilder::SetProtocolHandler( |
300 const std::string& scheme, | 335 const std::string& scheme, |
301 std::unique_ptr<URLRequestJobFactory::ProtocolHandler> protocol_handler) { | 336 std::unique_ptr<URLRequestJobFactory::ProtocolHandler> protocol_handler) { |
302 DCHECK(protocol_handler); | 337 DCHECK(protocol_handler); |
| 338 // If a consumer sets a ProtocolHandler and then overwrites it with another, |
| 339 // it's probably a bug. |
| 340 DCHECK_EQ(0u, protocol_handlers_.count(scheme)); |
303 protocol_handlers_[scheme] = std::move(protocol_handler); | 341 protocol_handlers_[scheme] = std::move(protocol_handler); |
304 } | 342 } |
305 | 343 |
| 344 void URLRequestContextBuilder::set_host_resolver( |
| 345 std::unique_ptr<HostResolver> host_resolver) { |
| 346 DCHECK(!shared_host_resolver_); |
| 347 host_resolver_ = std::move(host_resolver); |
| 348 } |
| 349 |
| 350 void URLRequestContextBuilder::set_shared_host_resolver( |
| 351 HostResolver* shared_host_resolver) { |
| 352 DCHECK(!host_resolver_); |
| 353 shared_host_resolver_ = shared_host_resolver; |
| 354 } |
| 355 |
| 356 void URLRequestContextBuilder::set_proxy_delegate( |
| 357 std::unique_ptr<ProxyDelegate> proxy_delegate) { |
| 358 DCHECK(!shared_proxy_delegate_); |
| 359 proxy_delegate_ = std::move(proxy_delegate); |
| 360 } |
| 361 |
| 362 void URLRequestContextBuilder::set_shared_proxy_delegate( |
| 363 ProxyDelegate* shared_proxy_delegate) { |
| 364 DCHECK(!proxy_delegate_); |
| 365 shared_proxy_delegate_ = shared_proxy_delegate; |
| 366 } |
| 367 |
306 void URLRequestContextBuilder::SetHttpAuthHandlerFactory( | 368 void URLRequestContextBuilder::SetHttpAuthHandlerFactory( |
307 std::unique_ptr<HttpAuthHandlerFactory> factory) { | 369 std::unique_ptr<HttpAuthHandlerFactory> factory) { |
| 370 DCHECK(!shared_http_auth_handler_factory_); |
308 http_auth_handler_factory_ = std::move(factory); | 371 http_auth_handler_factory_ = std::move(factory); |
309 } | 372 } |
310 | 373 |
| 374 void URLRequestContextBuilder::set_shared_http_auth_handler_factory( |
| 375 HttpAuthHandlerFactory* shared_http_auth_handler_factory) { |
| 376 DCHECK(!http_auth_handler_factory_); |
| 377 shared_http_auth_handler_factory_ = shared_http_auth_handler_factory; |
| 378 } |
| 379 |
311 void URLRequestContextBuilder::SetHttpServerProperties( | 380 void URLRequestContextBuilder::SetHttpServerProperties( |
312 std::unique_ptr<HttpServerProperties> http_server_properties) { | 381 std::unique_ptr<HttpServerProperties> http_server_properties) { |
313 http_server_properties_ = std::move(http_server_properties); | 382 http_server_properties_ = std::move(http_server_properties); |
314 } | 383 } |
315 | 384 |
316 std::unique_ptr<URLRequestContext> URLRequestContextBuilder::Build() { | 385 std::unique_ptr<URLRequestContext> URLRequestContextBuilder::Build() { |
317 std::unique_ptr<ContainerURLRequestContext> context( | 386 std::unique_ptr<ContainerURLRequestContext> context( |
318 new ContainerURLRequestContext()); | 387 new ContainerURLRequestContext()); |
319 URLRequestContextStorage* storage = context->storage(); | 388 URLRequestContextStorage* storage = context->storage(); |
320 | 389 |
321 context->set_name(name_); | 390 context->set_name(name_); |
322 context->set_enable_brotli(enable_brotli_); | 391 context->set_enable_brotli(enable_brotli_); |
323 context->set_network_quality_estimator(network_quality_estimator_); | 392 context->set_network_quality_estimator(network_quality_estimator_); |
324 | 393 |
325 storage->set_http_user_agent_settings( | 394 if (shared_http_user_agent_settings_) { |
326 base::MakeUnique<StaticHttpUserAgentSettings>(accept_language_, | 395 context->set_http_user_agent_settings(shared_http_user_agent_settings_); |
327 user_agent_)); | 396 } else { |
| 397 storage->set_http_user_agent_settings( |
| 398 base::MakeUnique<StaticHttpUserAgentSettings>(accept_language_, |
| 399 user_agent_)); |
| 400 } |
328 | 401 |
329 if (!network_delegate_) | 402 if (!network_delegate_) |
330 network_delegate_.reset(new BasicNetworkDelegate); | 403 network_delegate_.reset(new BasicNetworkDelegate); |
331 storage->set_network_delegate(std::move(network_delegate_)); | 404 storage->set_network_delegate(std::move(network_delegate_)); |
332 | 405 |
333 if (net_log_) { | 406 if (net_log_) { |
334 // Unlike the other builder parameters, |net_log_| is not owned by the | 407 // Unlike the other builder parameters, |net_log_| is not owned by the |
335 // builder or resulting context. | 408 // builder or resulting context. |
336 context->set_net_log(net_log_); | 409 context->set_net_log(net_log_); |
337 } else { | 410 } else { |
338 storage->set_net_log(base::WrapUnique(new NetLog)); | 411 storage->set_net_log(base::WrapUnique(new NetLog)); |
339 } | 412 } |
340 | 413 |
341 if (!host_resolver_) { | 414 if (host_resolver_) { |
342 host_resolver_ = HostResolver::CreateDefaultResolver(context->net_log()); | 415 DCHECK(!shared_host_resolver_); |
| 416 storage->set_host_resolver(std::move(host_resolver_)); |
| 417 } else if (shared_host_resolver_) { |
| 418 context->set_host_resolver(shared_host_resolver_); |
| 419 } else { |
| 420 storage->set_host_resolver( |
| 421 HostResolver::CreateDefaultResolver(context->net_log())); |
343 } | 422 } |
344 storage->set_host_resolver(std::move(host_resolver_)); | |
345 | 423 |
346 if (ssl_config_service_) { | 424 if (ssl_config_service_) { |
347 // This takes a raw pointer, but |storage| will hold onto a reference to the | 425 // This takes a raw pointer, but |storage| will hold onto a reference to the |
348 // service. | 426 // service. |
349 storage->set_ssl_config_service(ssl_config_service_.get()); | 427 storage->set_ssl_config_service(ssl_config_service_.get()); |
350 } else { | 428 } else { |
351 storage->set_ssl_config_service(new SSLConfigServiceDefaults); | 429 storage->set_ssl_config_service(new SSLConfigServiceDefaults); |
352 } | 430 } |
353 | 431 |
354 if (!http_auth_handler_factory_) { | 432 if (http_auth_handler_factory_) { |
355 http_auth_handler_factory_ = | 433 DCHECK(!shared_http_auth_handler_factory_); |
356 HttpAuthHandlerRegistryFactory::CreateDefault(context->host_resolver()); | 434 storage->set_http_auth_handler_factory( |
| 435 std::move(http_auth_handler_factory_)); |
| 436 } else if (shared_http_auth_handler_factory_) { |
| 437 context->set_http_auth_handler_factory(shared_http_auth_handler_factory_); |
| 438 } else { |
| 439 storage->set_http_auth_handler_factory( |
| 440 HttpAuthHandlerRegistryFactory::CreateDefault( |
| 441 context->host_resolver())); |
357 } | 442 } |
358 | 443 |
359 storage->set_http_auth_handler_factory(std::move(http_auth_handler_factory_)); | |
360 | |
361 if (cookie_store_set_by_client_) { | 444 if (cookie_store_set_by_client_) { |
362 storage->set_cookie_store(std::move(cookie_store_)); | 445 storage->set_cookie_store(std::move(cookie_store_)); |
363 storage->set_channel_id_service(std::move(channel_id_service_)); | 446 storage->set_channel_id_service(std::move(channel_id_service_)); |
364 } else { | 447 } else { |
365 std::unique_ptr<CookieStore> cookie_store( | 448 std::unique_ptr<CookieStore> cookie_store( |
366 new CookieMonster(nullptr, nullptr)); | 449 new CookieMonster(nullptr, nullptr)); |
367 std::unique_ptr<ChannelIDService> channel_id_service( | 450 std::unique_ptr<ChannelIDService> channel_id_service( |
368 new ChannelIDService(new DefaultChannelIDStore(NULL))); | 451 new ChannelIDService(new DefaultChannelIDStore(NULL))); |
369 cookie_store->SetChannelIDServiceID(channel_id_service->GetUniqueID()); | 452 cookie_store->SetChannelIDServiceID(channel_id_service->GetUniqueID()); |
370 storage->set_cookie_store(std::move(cookie_store)); | 453 storage->set_cookie_store(std::move(cookie_store)); |
(...skipping 11 matching lines...) Expand all Loading... |
382 // Use a low priority because saving this should not block anything | 465 // Use a low priority because saving this should not block anything |
383 // user-visible. Block shutdown to ensure it does get persisted to disk, | 466 // user-visible. Block shutdown to ensure it does get persisted to disk, |
384 // since it contains security-relevant information. | 467 // since it contains security-relevant information. |
385 scoped_refptr<base::SequencedTaskRunner> task_runner( | 468 scoped_refptr<base::SequencedTaskRunner> task_runner( |
386 base::CreateSequencedTaskRunnerWithTraits( | 469 base::CreateSequencedTaskRunnerWithTraits( |
387 {base::MayBlock(), base::TaskPriority::BACKGROUND, | 470 {base::MayBlock(), base::TaskPriority::BACKGROUND, |
388 base::TaskShutdownBehavior::BLOCK_SHUTDOWN})); | 471 base::TaskShutdownBehavior::BLOCK_SHUTDOWN})); |
389 | 472 |
390 context->set_transport_security_persister( | 473 context->set_transport_security_persister( |
391 base::WrapUnique<TransportSecurityPersister>( | 474 base::WrapUnique<TransportSecurityPersister>( |
392 new TransportSecurityPersister(context->transport_security_state(), | 475 new TransportSecurityPersister( |
393 transport_security_persister_path_, | 476 context->transport_security_state(), |
394 task_runner, false))); | 477 transport_security_persister_path_, task_runner, |
| 478 transport_security_persister_readonly_))); |
395 } | 479 } |
396 | 480 |
397 if (http_server_properties_) { | 481 if (http_server_properties_) { |
398 storage->set_http_server_properties(std::move(http_server_properties_)); | 482 storage->set_http_server_properties(std::move(http_server_properties_)); |
399 } else { | 483 } else { |
400 storage->set_http_server_properties( | 484 storage->set_http_server_properties( |
401 std::unique_ptr<HttpServerProperties>(new HttpServerPropertiesImpl())); | 485 std::unique_ptr<HttpServerProperties>(new HttpServerPropertiesImpl())); |
402 } | 486 } |
403 | 487 |
404 if (cert_verifier_) { | 488 if (cert_verifier_) { |
| 489 DCHECK(!shared_cert_verifier_); |
405 storage->set_cert_verifier(std::move(cert_verifier_)); | 490 storage->set_cert_verifier(std::move(cert_verifier_)); |
| 491 } else if (shared_cert_verifier_) { |
| 492 context->set_cert_verifier(shared_cert_verifier_); |
406 } else { | 493 } else { |
407 storage->set_cert_verifier(CertVerifier::CreateDefault()); | 494 storage->set_cert_verifier(CertVerifier::CreateDefault()); |
408 } | 495 } |
409 | 496 |
410 if (ct_verifier_) { | 497 if (ct_verifier_) { |
411 storage->set_cert_transparency_verifier(std::move(ct_verifier_)); | 498 storage->set_cert_transparency_verifier(std::move(ct_verifier_)); |
412 } else { | 499 } else { |
413 std::unique_ptr<MultiLogCTVerifier> ct_verifier = | 500 std::unique_ptr<MultiLogCTVerifier> ct_verifier = |
414 base::MakeUnique<MultiLogCTVerifier>(); | 501 base::MakeUnique<MultiLogCTVerifier>(); |
415 ct_verifier->AddLogs(ct::CreateLogVerifiersForKnownLogs()); | 502 ct_verifier->AddLogs(ct::CreateLogVerifiersForKnownLogs()); |
(...skipping 25 matching lines...) Expand all Loading... |
441 context->network_delegate(), context->net_log()); | 528 context->network_delegate(), context->net_log()); |
442 proxy_service_->set_quick_check_enabled(pac_quick_check_enabled_); | 529 proxy_service_->set_quick_check_enabled(pac_quick_check_enabled_); |
443 proxy_service_->set_sanitize_url_policy(pac_sanitize_url_policy_); | 530 proxy_service_->set_sanitize_url_policy(pac_sanitize_url_policy_); |
444 } | 531 } |
445 storage->set_proxy_service(std::move(proxy_service_)); | 532 storage->set_proxy_service(std::move(proxy_service_)); |
446 | 533 |
447 HttpNetworkSession::Context network_session_context; | 534 HttpNetworkSession::Context network_session_context; |
448 SetHttpNetworkSessionComponents(context.get(), &network_session_context); | 535 SetHttpNetworkSessionComponents(context.get(), &network_session_context); |
449 | 536 |
450 if (proxy_delegate_) { | 537 if (proxy_delegate_) { |
| 538 DCHECK(!shared_proxy_delegate_); |
451 network_session_context.proxy_delegate = proxy_delegate_.get(); | 539 network_session_context.proxy_delegate = proxy_delegate_.get(); |
452 storage->set_proxy_delegate(std::move(proxy_delegate_)); | 540 storage->set_proxy_delegate(std::move(proxy_delegate_)); |
| 541 } else if (shared_proxy_delegate_) { |
| 542 network_session_context.proxy_delegate = shared_proxy_delegate_; |
453 } | 543 } |
454 | 544 |
455 storage->set_http_network_session(base::MakeUnique<HttpNetworkSession>( | 545 storage->set_http_network_session(base::MakeUnique<HttpNetworkSession>( |
456 http_network_session_params_, network_session_context)); | 546 http_network_session_params_, network_session_context)); |
457 | 547 |
458 std::unique_ptr<HttpTransactionFactory> http_transaction_factory; | 548 std::unique_ptr<HttpTransactionFactory> http_transaction_factory; |
459 if (http_cache_enabled_) { | 549 if (http_cache_enabled_) { |
460 std::unique_ptr<HttpCache::BackendFactory> http_cache_backend; | 550 std::unique_ptr<HttpCache::BackendFactory> http_cache_backend; |
461 if (http_cache_params_.type != HttpCacheParams::IN_MEMORY) { | 551 if (http_cache_params_.type != HttpCacheParams::IN_MEMORY) { |
462 if (!cache_thread_task_runner_) { | 552 if (!cache_thread_task_runner_) { |
463 cache_thread_task_runner_ = | 553 cache_thread_task_runner_ = |
464 base::CreateSingleThreadTaskRunnerWithTraits( | 554 base::CreateSingleThreadTaskRunnerWithTraits( |
465 {base::MayBlock(), base::TaskPriority::USER_BLOCKING, | 555 {base::MayBlock(), base::TaskPriority::USER_BLOCKING, |
466 base::TaskShutdownBehavior::BLOCK_SHUTDOWN}); | 556 base::TaskShutdownBehavior::BLOCK_SHUTDOWN}); |
467 } | 557 } |
468 BackendType backend_type = | 558 // TODO(mmenke): Maybe merge BackendType and HttpCacheParams::Type? The |
469 http_cache_params_.type == HttpCacheParams::DISK | 559 // first doesn't include in memory, so may require some work. |
470 ? CACHE_BACKEND_DEFAULT | 560 BackendType backend_type = CACHE_BACKEND_DEFAULT; |
471 : CACHE_BACKEND_SIMPLE; | 561 switch (http_cache_params_.type) { |
| 562 case HttpCacheParams::DISK: |
| 563 backend_type = CACHE_BACKEND_DEFAULT; |
| 564 break; |
| 565 case HttpCacheParams::DISK_BLOCKFILE: |
| 566 backend_type = CACHE_BACKEND_BLOCKFILE; |
| 567 break; |
| 568 case HttpCacheParams::DISK_SIMPLE: |
| 569 backend_type = CACHE_BACKEND_SIMPLE; |
| 570 break; |
| 571 case HttpCacheParams::IN_MEMORY: |
| 572 NOTREACHED(); |
| 573 break; |
| 574 } |
472 http_cache_backend.reset(new HttpCache::DefaultBackend( | 575 http_cache_backend.reset(new HttpCache::DefaultBackend( |
473 DISK_CACHE, backend_type, http_cache_params_.path, | 576 DISK_CACHE, backend_type, http_cache_params_.path, |
474 http_cache_params_.max_size, cache_thread_task_runner_)); | 577 http_cache_params_.max_size, cache_thread_task_runner_)); |
475 } else { | 578 } else { |
476 http_cache_backend = | 579 http_cache_backend = |
477 HttpCache::DefaultBackend::InMemory(http_cache_params_.max_size); | 580 HttpCache::DefaultBackend::InMemory(http_cache_params_.max_size); |
478 } | 581 } |
479 | 582 |
480 http_transaction_factory.reset(new HttpCache( | 583 http_transaction_factory.reset(new HttpCache( |
481 storage->http_network_session(), std::move(http_cache_backend), true)); | 584 storage->http_network_session(), std::move(http_cache_backend), true)); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
519 if (!url_request_interceptors_.empty()) { | 622 if (!url_request_interceptors_.empty()) { |
520 // Set up interceptors in the reverse order. | 623 // Set up interceptors in the reverse order. |
521 | 624 |
522 for (auto i = url_request_interceptors_.rbegin(); | 625 for (auto i = url_request_interceptors_.rbegin(); |
523 i != url_request_interceptors_.rend(); ++i) { | 626 i != url_request_interceptors_.rend(); ++i) { |
524 top_job_factory.reset(new net::URLRequestInterceptingJobFactory( | 627 top_job_factory.reset(new net::URLRequestInterceptingJobFactory( |
525 std::move(top_job_factory), std::move(*i))); | 628 std::move(top_job_factory), std::move(*i))); |
526 } | 629 } |
527 url_request_interceptors_.clear(); | 630 url_request_interceptors_.clear(); |
528 } | 631 } |
| 632 if (create_intercepting_job_factory_) { |
| 633 top_job_factory = std::move(create_intercepting_job_factory_) |
| 634 .Run(std::move(top_job_factory)); |
| 635 } |
529 storage->set_job_factory(std::move(top_job_factory)); | 636 storage->set_job_factory(std::move(top_job_factory)); |
530 | 637 |
531 #if BUILDFLAG(ENABLE_REPORTING) | 638 #if BUILDFLAG(ENABLE_REPORTING) |
532 if (reporting_policy_) { | 639 if (reporting_policy_) { |
533 storage->set_reporting_service( | 640 storage->set_reporting_service( |
534 ReportingService::Create(*reporting_policy_, context.get())); | 641 ReportingService::Create(*reporting_policy_, context.get())); |
535 } | 642 } |
536 #endif // BUILDFLAG(ENABLE_REPORTING) | 643 #endif // BUILDFLAG(ENABLE_REPORTING) |
537 | 644 |
538 return std::move(context); | 645 return std::move(context); |
539 } | 646 } |
540 | 647 |
541 std::unique_ptr<ProxyService> URLRequestContextBuilder::CreateProxyService( | 648 std::unique_ptr<ProxyService> URLRequestContextBuilder::CreateProxyService( |
542 std::unique_ptr<ProxyConfigService> proxy_config_service, | 649 std::unique_ptr<ProxyConfigService> proxy_config_service, |
543 URLRequestContext* url_request_context, | 650 URLRequestContext* url_request_context, |
544 HostResolver* host_resolver, | 651 HostResolver* host_resolver, |
545 NetworkDelegate* network_delegate, | 652 NetworkDelegate* network_delegate, |
546 NetLog* net_log) { | 653 NetLog* net_log) { |
547 return ProxyService::CreateUsingSystemProxyResolver( | 654 return ProxyService::CreateUsingSystemProxyResolver( |
548 std::move(proxy_config_service), net_log); | 655 std::move(proxy_config_service), net_log); |
549 } | 656 } |
550 | 657 |
551 } // namespace net | 658 } // namespace net |
OLD | NEW |