| Index: net/http/http_stream_factory_impl_job_controller.cc | 
| diff --git a/net/http/http_stream_factory_impl_job_controller.cc b/net/http/http_stream_factory_impl_job_controller.cc | 
| index 24d6e161d8fa4f8a1e4b82ad5960db385175222d..f10851844f89aeeeb686d0fd094fb3b2e957c3af 100644 | 
| --- a/net/http/http_stream_factory_impl_job_controller.cc | 
| +++ b/net/http/http_stream_factory_impl_job_controller.cc | 
| @@ -448,7 +448,7 @@ void HttpStreamFactoryImpl::JobController::OnNewSpdySessionReady( | 
| const NetLogSource source_dependency = job->net_log().source(); | 
|  | 
| // Cache this so we can still use it if the JobController is deleted. | 
| -  HttpStreamFactoryImpl* factory = factory_; | 
| +  SpdySessionPool* spdy_session_pool = session_->spdy_session_pool(); | 
|  | 
| // Notify |request_|. | 
| if (!is_preconnect_ && !is_job_orphaned) { | 
| @@ -483,12 +483,13 @@ void HttpStreamFactoryImpl::JobController::OnNewSpdySessionReady( | 
| } | 
| } | 
|  | 
| -  // Notify |factory_|. |request_| and |bounded_job_| might be deleted already. | 
| +  // Notify other requests that have the same SpdySessionKey. |request_| and | 
| +  // |bounded_job_| might be deleted already. | 
| if (spdy_session && spdy_session->IsAvailable()) { | 
| -    factory->OnNewSpdySessionReady(spdy_session, direct, used_ssl_config, | 
| -                                   used_proxy_info, was_alpn_negotiated, | 
| -                                   negotiated_protocol, using_spdy, | 
| -                                   source_dependency); | 
| +    spdy_session_pool->OnNewSpdySessionReady( | 
| +        spdy_session, direct, used_ssl_config, used_proxy_info, | 
| +        was_alpn_negotiated, negotiated_protocol, using_spdy, | 
| +        source_dependency); | 
| } | 
| if (is_job_orphaned) { | 
| OnOrphanedJobComplete(job); | 
| @@ -603,13 +604,8 @@ void HttpStreamFactoryImpl::JobController::SetSpdySessionKey( | 
| if (is_preconnect_ || IsJobOrphaned(job)) | 
| return; | 
|  | 
| -  if (!request_->HasSpdySessionKey()) { | 
| -    RequestSet& request_set = | 
| -        factory_->spdy_session_request_map_[spdy_session_key]; | 
| -    DCHECK(!base::ContainsKey(request_set, request_)); | 
| -    request_set.insert(request_); | 
| -    request_->SetSpdySessionKey(spdy_session_key); | 
| -  } | 
| +  session_->spdy_session_pool()->AddRequestToSpdySessionRequestMap( | 
| +      spdy_session_key, request_); | 
| } | 
|  | 
| void HttpStreamFactoryImpl::JobController:: | 
| @@ -622,18 +618,10 @@ void HttpStreamFactoryImpl::JobController:: | 
|  | 
| void HttpStreamFactoryImpl::JobController:: | 
| RemoveRequestFromSpdySessionRequestMap() { | 
| -  if (request_->HasSpdySessionKey()) { | 
| -    const SpdySessionKey& spdy_session_key = request_->GetSpdySessionKey(); | 
| -    SpdySessionRequestMap& spdy_session_request_map = | 
| -        factory_->spdy_session_request_map_; | 
| -    DCHECK(base::ContainsKey(spdy_session_request_map, spdy_session_key)); | 
| -    RequestSet& request_set = spdy_session_request_map[spdy_session_key]; | 
| -    DCHECK(base::ContainsKey(request_set, request_)); | 
| -    request_set.erase(request_); | 
| -    if (request_set.empty()) | 
| -      spdy_session_request_map.erase(spdy_session_key); | 
| -    request_->ResetSpdySessionKey(); | 
| -  } | 
| +  // TODO(xunjieli): Use a DCHECK once https://crbug.com/718576 is fixed. | 
| +  CHECK(request_); | 
| +  session_->spdy_session_pool()->RemoveRequestFromSpdySessionRequestMap( | 
| +      request_); | 
| } | 
|  | 
| const NetLogWithSource* HttpStreamFactoryImpl::JobController::GetNetLog() | 
|  |