| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/http/http_stream_factory_impl_job.h" | 5 #include "net/http/http_stream_factory_impl_job.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/stl_util-inl.h" | 8 #include "base/stl_util-inl.h" |
| 9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
| 10 #include "base/stringprintf.h" | 10 #include "base/stringprintf.h" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 #include "net/socket/client_socket_pool.h" | 23 #include "net/socket/client_socket_pool.h" |
| 24 #include "net/socket/socks_client_socket_pool.h" | 24 #include "net/socket/socks_client_socket_pool.h" |
| 25 #include "net/socket/ssl_client_socket.h" | 25 #include "net/socket/ssl_client_socket.h" |
| 26 #include "net/socket/ssl_client_socket_pool.h" | 26 #include "net/socket/ssl_client_socket_pool.h" |
| 27 #include "net/spdy/spdy_http_stream.h" | 27 #include "net/spdy/spdy_http_stream.h" |
| 28 #include "net/spdy/spdy_session.h" | 28 #include "net/spdy/spdy_session.h" |
| 29 #include "net/spdy/spdy_session_pool.h" | 29 #include "net/spdy/spdy_session_pool.h" |
| 30 | 30 |
| 31 namespace net { | 31 namespace net { |
| 32 | 32 |
| 33 namespace { | 33 // Parameters associated with the start of a HTTP stream job. |
| 34 class HttpStreamJobParameters : public NetLog::EventParameters { |
| 35 public: |
| 36 static scoped_refptr<HttpStreamJobParameters> Create( |
| 37 const GURL& original_url, |
| 38 const GURL& url) { |
| 39 return make_scoped_refptr(new HttpStreamJobParameters(original_url, url)); |
| 40 } |
| 34 | 41 |
| 35 } // namespace | 42 virtual Value* ToValue() const; |
| 43 |
| 44 private: |
| 45 HttpStreamJobParameters(const GURL& original_url, const GURL& url) |
| 46 : original_url_(original_url.GetOrigin().spec()), |
| 47 url_(url.GetOrigin().spec()) {} |
| 48 |
| 49 const std::string original_url_; |
| 50 const std::string url_; |
| 51 }; |
| 52 |
| 53 Value* HttpStreamJobParameters::ToValue() const { |
| 54 DictionaryValue* dict = new DictionaryValue(); |
| 55 dict->SetString("original_url", original_url_); |
| 56 dict->SetString("url", url_); |
| 57 return dict; |
| 58 } |
| 36 | 59 |
| 37 HttpStreamFactoryImpl::Job::Job(HttpStreamFactoryImpl* stream_factory, | 60 HttpStreamFactoryImpl::Job::Job(HttpStreamFactoryImpl* stream_factory, |
| 38 HttpNetworkSession* session, | 61 HttpNetworkSession* session, |
| 39 const HttpRequestInfo& request_info, | 62 const HttpRequestInfo& request_info, |
| 40 const SSLConfig& ssl_config, | 63 const SSLConfig& ssl_config, |
| 41 const BoundNetLog& net_log) | 64 const BoundNetLog& net_log) |
| 42 : request_(NULL), | 65 : request_(NULL), |
| 43 request_info_(request_info), | 66 request_info_(request_info), |
| 44 ssl_config_(ssl_config), | 67 ssl_config_(ssl_config), |
| 45 net_log_(BoundNetLog::Make(net_log.net_log(), | 68 net_log_(BoundNetLog::Make(net_log.net_log(), |
| (...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 433 NOTREACHED() << "bad state"; | 456 NOTREACHED() << "bad state"; |
| 434 rv = ERR_FAILED; | 457 rv = ERR_FAILED; |
| 435 break; | 458 break; |
| 436 } | 459 } |
| 437 } while (rv != ERR_IO_PENDING && next_state_ != STATE_NONE); | 460 } while (rv != ERR_IO_PENDING && next_state_ != STATE_NONE); |
| 438 return rv; | 461 return rv; |
| 439 } | 462 } |
| 440 | 463 |
| 441 int HttpStreamFactoryImpl::Job::StartInternal() { | 464 int HttpStreamFactoryImpl::Job::StartInternal() { |
| 442 CHECK_EQ(STATE_NONE, next_state_); | 465 CHECK_EQ(STATE_NONE, next_state_); |
| 466 |
| 467 origin_ = HostPortPair(request_info_.url.HostNoBrackets(), |
| 468 request_info_.url.EffectiveIntPort()); |
| 469 origin_url_ = HttpStreamFactory::ApplyHostMappingRules( |
| 470 request_info_.url, &origin_); |
| 471 |
| 443 net_log_.BeginEvent(NetLog::TYPE_HTTP_STREAM_JOB, | 472 net_log_.BeginEvent(NetLog::TYPE_HTTP_STREAM_JOB, |
| 444 make_scoped_refptr(new NetLogStringParameter( | 473 HttpStreamJobParameters::Create(request_info_.url, |
| 445 "url", request_info_.url.GetOrigin().spec()))); | 474 origin_url_)); |
| 446 next_state_ = STATE_RESOLVE_PROXY; | 475 next_state_ = STATE_RESOLVE_PROXY; |
| 447 int rv = RunLoop(OK); | 476 int rv = RunLoop(OK); |
| 448 DCHECK_EQ(ERR_IO_PENDING, rv); | 477 DCHECK_EQ(ERR_IO_PENDING, rv); |
| 449 return rv; | 478 return rv; |
| 450 } | 479 } |
| 451 | 480 |
| 452 int HttpStreamFactoryImpl::Job::DoResolveProxy() { | 481 int HttpStreamFactoryImpl::Job::DoResolveProxy() { |
| 453 DCHECK(!pac_request_); | 482 DCHECK(!pac_request_); |
| 454 | 483 |
| 455 next_state_ = STATE_RESOLVE_PROXY_COMPLETE; | 484 next_state_ = STATE_RESOLVE_PROXY_COMPLETE; |
| 456 | 485 |
| 457 origin_ = HostPortPair(request_info_.url.HostNoBrackets(), | |
| 458 request_info_.url.EffectiveIntPort()); | |
| 459 | |
| 460 if (request_info_.load_flags & LOAD_BYPASS_PROXY) { | 486 if (request_info_.load_flags & LOAD_BYPASS_PROXY) { |
| 461 proxy_info_.UseDirect(); | 487 proxy_info_.UseDirect(); |
| 462 return OK; | 488 return OK; |
| 463 } | 489 } |
| 464 | 490 |
| 465 return session_->proxy_service()->ResolveProxy( | 491 return session_->proxy_service()->ResolveProxy( |
| 466 request_info_.url, &proxy_info_, &io_callback_, &pac_request_, | 492 request_info_.url, &proxy_info_, &io_callback_, &pac_request_, |
| 467 net_log_); | 493 net_log_); |
| 468 } | 494 } |
| 469 | 495 |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 569 if (proxy_info_.is_https()) { | 595 if (proxy_info_.is_https()) { |
| 570 InitSSLConfig(proxy_info_.proxy_server().host_port_pair(), | 596 InitSSLConfig(proxy_info_.proxy_server().host_port_pair(), |
| 571 &ssl_config_for_proxy); | 597 &ssl_config_for_proxy); |
| 572 } | 598 } |
| 573 if (using_ssl_) { | 599 if (using_ssl_) { |
| 574 InitSSLConfig(origin_, &ssl_config_); | 600 InitSSLConfig(origin_, &ssl_config_); |
| 575 } | 601 } |
| 576 | 602 |
| 577 if (IsPreconnecting()) { | 603 if (IsPreconnecting()) { |
| 578 return ClientSocketPoolManager::PreconnectSocketsForHttpRequest( | 604 return ClientSocketPoolManager::PreconnectSocketsForHttpRequest( |
| 579 request_info_, | 605 origin_url_, |
| 606 request_info_.referrer, |
| 607 request_info_.extra_headers, |
| 608 request_info_.load_flags, |
| 609 request_info_.priority, |
| 580 session_, | 610 session_, |
| 581 proxy_info_, | 611 proxy_info_, |
| 582 ShouldForceSpdySSL(), | 612 ShouldForceSpdySSL(), |
| 583 want_spdy_over_npn, | 613 want_spdy_over_npn, |
| 584 ssl_config_, | 614 ssl_config_, |
| 585 ssl_config_for_proxy, | 615 ssl_config_for_proxy, |
| 586 net_log_, | 616 net_log_, |
| 587 num_streams_); | 617 num_streams_); |
| 588 } else { | 618 } else { |
| 589 return ClientSocketPoolManager::InitSocketHandleForHttpRequest( | 619 return ClientSocketPoolManager::InitSocketHandleForHttpRequest( |
| 590 request_info_, | 620 origin_url_, |
| 621 request_info_.referrer, |
| 622 request_info_.extra_headers, |
| 623 request_info_.load_flags, |
| 624 request_info_.priority, |
| 591 session_, | 625 session_, |
| 592 proxy_info_, | 626 proxy_info_, |
| 593 ShouldForceSpdySSL(), | 627 ShouldForceSpdySSL(), |
| 594 want_spdy_over_npn, | 628 want_spdy_over_npn, |
| 595 ssl_config_, | 629 ssl_config_, |
| 596 ssl_config_for_proxy, | 630 ssl_config_for_proxy, |
| 597 net_log_, | 631 net_log_, |
| 598 connection_.get(), | 632 connection_.get(), |
| 599 &io_callback_); | 633 &io_callback_); |
| 600 } | 634 } |
| (...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1058 bool HttpStreamFactoryImpl::Job::IsPreconnecting() const { | 1092 bool HttpStreamFactoryImpl::Job::IsPreconnecting() const { |
| 1059 DCHECK_GE(num_streams_, 0); | 1093 DCHECK_GE(num_streams_, 0); |
| 1060 return num_streams_ > 0; | 1094 return num_streams_ > 0; |
| 1061 } | 1095 } |
| 1062 | 1096 |
| 1063 bool HttpStreamFactoryImpl::Job::IsOrphaned() const { | 1097 bool HttpStreamFactoryImpl::Job::IsOrphaned() const { |
| 1064 return !IsPreconnecting() && !request_; | 1098 return !IsPreconnecting() && !request_; |
| 1065 } | 1099 } |
| 1066 | 1100 |
| 1067 } // namespace net | 1101 } // namespace net |
| OLD | NEW |