| Index: net/quic/chromium/quic_stream_factory.cc
|
| diff --git a/net/quic/chromium/quic_stream_factory.cc b/net/quic/chromium/quic_stream_factory.cc
|
| index 61f79e0a5a2950db56e2a25fc78d12b0377add60..1dc3c599751ac4b3f50eefb8dff811469b8d48ee 100644
|
| --- a/net/quic/chromium/quic_stream_factory.cc
|
| +++ b/net/quic/chromium/quic_stream_factory.cc
|
| @@ -607,9 +607,9 @@ int QuicStreamRequest::Request(const HostPortPair& destination,
|
| return rv;
|
| }
|
|
|
| -void QuicStreamRequest::SetSession(QuicChromiumClientSession* session) {
|
| - DCHECK(session);
|
| - session_ = session->GetWeakPtr();
|
| +void QuicStreamRequest::SetSession(
|
| + std::unique_ptr<QuicChromiumClientSession::Handle> session) {
|
| + session_ = move(session);
|
| }
|
|
|
| void QuicStreamRequest::OnRequestComplete(int rv) {
|
| @@ -624,16 +624,19 @@ base::TimeDelta QuicStreamRequest::GetTimeDelayForWaitingJob() const {
|
| }
|
|
|
| std::unique_ptr<HttpStream> QuicStreamRequest::CreateStream() {
|
| - if (!session_)
|
| + if (!session_ || !session_->IsConnected())
|
| return nullptr;
|
| - return base::MakeUnique<QuicHttpStream>(session_, http_server_properties_);
|
| +
|
| + return base::MakeUnique<QuicHttpStream>(std::move(session_),
|
| + http_server_properties_);
|
| }
|
|
|
| std::unique_ptr<BidirectionalStreamImpl>
|
| QuicStreamRequest::CreateBidirectionalStreamImpl() {
|
| - if (!session_)
|
| + if (!session_ || !session_->IsConnected())
|
| return nullptr;
|
| - return base::MakeUnique<BidirectionalStreamQuicImpl>(session_);
|
| +
|
| + return base::MakeUnique<BidirectionalStreamQuicImpl>(std::move(session_));
|
| }
|
|
|
| QuicStreamFactory::QuicStreamFactory(
|
| @@ -874,7 +877,7 @@ int QuicStreamFactory::Create(const QuicServerId& server_id,
|
| static_cast<QuicChromiumClientSession*>(promised->session());
|
| DCHECK(session);
|
| if (session->server_id().privacy_mode() == server_id.privacy_mode()) {
|
| - request->SetSession(session);
|
| + request->SetSession(session->CreateHandle());
|
| ++num_push_streams_created_;
|
| return OK;
|
| }
|
| @@ -890,7 +893,7 @@ int QuicStreamFactory::Create(const QuicServerId& server_id,
|
| SessionMap::iterator it = active_sessions_.find(server_id);
|
| if (it != active_sessions_.end()) {
|
| QuicChromiumClientSession* session = it->second;
|
| - request->SetSession(session);
|
| + request->SetSession(session->CreateHandle());
|
| return OK;
|
| }
|
| }
|
| @@ -915,7 +918,7 @@ int QuicStreamFactory::Create(const QuicServerId& server_id,
|
| QuicChromiumClientSession* session = key_value.second;
|
| if (destination.Equals(all_sessions_[session].destination()) &&
|
| session->CanPool(server_id.host(), server_id.privacy_mode())) {
|
| - request->SetSession(session);
|
| + request->SetSession(session->CreateHandle());
|
| return OK;
|
| }
|
| }
|
| @@ -949,7 +952,7 @@ int QuicStreamFactory::Create(const QuicServerId& server_id,
|
| if (it == active_sessions_.end())
|
| return ERR_QUIC_PROTOCOL_ERROR;
|
| QuicChromiumClientSession* session = it->second;
|
| - request->SetSession(session);
|
| + request->SetSession(session->CreateHandle());
|
| }
|
| return rv;
|
| }
|
| @@ -1014,7 +1017,7 @@ void QuicStreamFactory::OnJobComplete(Job* job, int rv) {
|
| for (QuicStreamRequest* request : requests_iter->second) {
|
| DCHECK(request->server_id() == server_id);
|
| // Do not notify |request| yet.
|
| - request->SetSession(session);
|
| + request->SetSession(session->CreateHandle());
|
| }
|
| }
|
| }
|
|
|