| Index: google_apis/gcm/engine/connection_factory_impl.cc
|
| diff --git a/google_apis/gcm/engine/connection_factory_impl.cc b/google_apis/gcm/engine/connection_factory_impl.cc
|
| index 0ff3175cb2b51394f4e1286ecf3be73204e128fd..0b23e7db7cac9589fb94fea356aa0138b76b9c63 100644
|
| --- a/google_apis/gcm/engine/connection_factory_impl.cc
|
| +++ b/google_apis/gcm/engine/connection_factory_impl.cc
|
| @@ -45,14 +45,16 @@ bool ShouldRestorePreviousBackoff(const base::TimeTicks& login_time,
|
| ConnectionFactoryImpl::ConnectionFactoryImpl(
|
| const std::vector<GURL>& mcs_endpoints,
|
| const net::BackoffEntry::Policy& backoff_policy,
|
| - scoped_refptr<net::HttpNetworkSession> network_session,
|
| + const scoped_refptr<net::HttpNetworkSession>& http_network_session,
|
| + const scoped_refptr<net::HttpNetworkSession>& gcm_network_session,
|
| net::NetLog* net_log,
|
| GCMStatsRecorder* recorder)
|
| : mcs_endpoints_(mcs_endpoints),
|
| next_endpoint_(0),
|
| last_successful_endpoint_(0),
|
| backoff_policy_(backoff_policy),
|
| - network_session_(network_session),
|
| + gcm_network_session_(gcm_network_session),
|
| + http_network_session_(http_network_session),
|
| bound_net_log_(
|
| net::BoundNetLog::Make(net_log, net::NetLog::SOURCE_SOCKET)),
|
| pac_request_(NULL),
|
| @@ -64,13 +66,15 @@ ConnectionFactoryImpl::ConnectionFactoryImpl(
|
| listener_(NULL),
|
| weak_ptr_factory_(this) {
|
| DCHECK_GE(mcs_endpoints_.size(), 1U);
|
| + DCHECK(!http_network_session_.get() ||
|
| + (gcm_network_session_.get() != http_network_session_.get()));
|
| }
|
|
|
| ConnectionFactoryImpl::~ConnectionFactoryImpl() {
|
| CloseSocket();
|
| net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this);
|
| if (pac_request_) {
|
| - network_session_->proxy_service()->CancelPacRequest(pac_request_);
|
| + gcm_network_session_->proxy_service()->CancelPacRequest(pac_request_);
|
| pac_request_ = NULL;
|
| }
|
| }
|
| @@ -280,7 +284,8 @@ void ConnectionFactoryImpl::ConnectImpl() {
|
| connecting_ = true;
|
| GURL current_endpoint = GetCurrentEndpoint();
|
| recorder_->RecordConnectionInitiated(current_endpoint.host());
|
| - int status = network_session_->proxy_service()->ResolveProxy(
|
| + RebuildNetworkSessionAuthCache();
|
| + int status = gcm_network_session_->proxy_service()->ResolveProxy(
|
| current_endpoint,
|
| net::LOAD_NORMAL,
|
| &proxy_info_,
|
| @@ -425,10 +430,10 @@ void ConnectionFactoryImpl::OnProxyResolveDone(int status) {
|
| DVLOG(1) << "Resolved proxy with PAC:" << proxy_info_.ToPacString();
|
|
|
| net::SSLConfig ssl_config;
|
| - network_session_->ssl_config_service()->GetSSLConfig(&ssl_config);
|
| + gcm_network_session_->ssl_config_service()->GetSSLConfig(&ssl_config);
|
| status = net::InitSocketHandleForTlsConnect(
|
| net::HostPortPair::FromURL(GetCurrentEndpoint()),
|
| - network_session_.get(),
|
| + gcm_network_session_.get(),
|
| proxy_info_,
|
| ssl_config,
|
| ssl_config,
|
| @@ -494,13 +499,13 @@ int ConnectionFactoryImpl::ReconsiderProxyAfterError(int error) {
|
| }
|
|
|
| net::SSLConfig ssl_config;
|
| - network_session_->ssl_config_service()->GetSSLConfig(&ssl_config);
|
| + gcm_network_session_->ssl_config_service()->GetSSLConfig(&ssl_config);
|
| if (proxy_info_.is_https() && ssl_config.send_client_cert) {
|
| - network_session_->ssl_client_auth_cache()->Remove(
|
| + gcm_network_session_->ssl_client_auth_cache()->Remove(
|
| proxy_info_.proxy_server().host_port_pair());
|
| }
|
|
|
| - int status = network_session_->proxy_service()->ReconsiderProxyAfterError(
|
| + int status = gcm_network_session_->proxy_service()->ReconsiderProxyAfterError(
|
| GetCurrentEndpoint(), net::LOAD_NORMAL, error, &proxy_info_,
|
| base::Bind(&ConnectionFactoryImpl::OnProxyResolveDone,
|
| weak_ptr_factory_.GetWeakPtr()),
|
| @@ -529,8 +534,8 @@ int ConnectionFactoryImpl::ReconsiderProxyAfterError(int error) {
|
| }
|
|
|
| void ConnectionFactoryImpl::ReportSuccessfulProxyConnection() {
|
| - if (network_session_ && network_session_->proxy_service())
|
| - network_session_->proxy_service()->ReportSuccess(proxy_info_);
|
| + if (gcm_network_session_ && gcm_network_session_->proxy_service())
|
| + gcm_network_session_->proxy_service()->ReportSuccess(proxy_info_);
|
| }
|
|
|
| void ConnectionFactoryImpl::CloseSocket() {
|
| @@ -544,4 +549,12 @@ void ConnectionFactoryImpl::CloseSocket() {
|
| socket_handle_.Reset();
|
| }
|
|
|
| +void ConnectionFactoryImpl::RebuildNetworkSessionAuthCache() {
|
| + if (!http_network_session_ || !http_network_session_->http_auth_cache())
|
| + return;
|
| +
|
| + gcm_network_session_->http_auth_cache()->UpdateAllFrom(
|
| + *http_network_session_->http_auth_cache());
|
| +}
|
| +
|
| } // namespace gcm
|
|
|