Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(123)

Side by Side Diff: net/spdy/spdy_http_stream.cc

Issue 2298823002: Resetting the HttpRequestInfo pointers in HttpNetworkTransaction and streams (Closed)
Patch Set: Rebased till refs/heads/master@{#425377} Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/spdy/spdy_http_stream.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/spdy/spdy_http_stream.h" 5 #include "net/spdy/spdy_http_stream.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <list> 8 #include <list>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 } 113 }
114 114
115 // Still waiting for the response, return IO_PENDING. 115 // Still waiting for the response, return IO_PENDING.
116 CHECK(response_callback_.is_null()); 116 CHECK(response_callback_.is_null());
117 response_callback_ = callback; 117 response_callback_ = callback;
118 return ERR_IO_PENDING; 118 return ERR_IO_PENDING;
119 } 119 }
120 120
121 int SpdyHttpStream::ReadResponseBody( 121 int SpdyHttpStream::ReadResponseBody(
122 IOBuffer* buf, int buf_len, const CompletionCallback& callback) { 122 IOBuffer* buf, int buf_len, const CompletionCallback& callback) {
123 // Invalidate HttpRequestInfo pointer. This is to allow the stream to be
124 // shared across multiple transactions which might require this
125 // stream to outlive the request_'s owner.
126 // Only allowed when Reading of response body starts. It is safe to reset it
127 // at this point since request_->upload_data_stream is also not needed
128 // anymore.
129 request_info_ = nullptr;
130
123 if (stream_.get()) 131 if (stream_.get())
124 CHECK(!stream_->IsIdle()); 132 CHECK(!stream_->IsIdle());
125 133
126 CHECK(buf); 134 CHECK(buf);
127 CHECK(buf_len); 135 CHECK(buf_len);
128 CHECK(!callback.is_null()); 136 CHECK(!callback.is_null());
129 137
130 // If we have data buffered, complete the IO immediately. 138 // If we have data buffered, complete the IO immediately.
131 if (!response_body_queue_.IsEmpty()) { 139 if (!response_body_queue_.IsEmpty()) {
132 return response_body_queue_.Dequeue(buf->data(), buf_len); 140 return response_body_queue_.Dequeue(buf->data(), buf_len);
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 void SpdyHttpStream::OnDataSent() { 368 void SpdyHttpStream::OnDataSent() {
361 request_body_buf_size_ = 0; 369 request_body_buf_size_ = 0;
362 ReadAndSendRequestBodyData(); 370 ReadAndSendRequestBodyData();
363 } 371 }
364 372
365 // TODO(xunjieli): Maybe do something with the trailers. crbug.com/422958. 373 // TODO(xunjieli): Maybe do something with the trailers. crbug.com/422958.
366 void SpdyHttpStream::OnTrailers(const SpdyHeaderBlock& trailers) {} 374 void SpdyHttpStream::OnTrailers(const SpdyHeaderBlock& trailers) {}
367 375
368 void SpdyHttpStream::OnClose(int status) { 376 void SpdyHttpStream::OnClose(int status) {
369 // Cancel any pending reads from the upload data stream. 377 // Cancel any pending reads from the upload data stream.
370 if (request_info_->upload_data_stream) 378 if (request_info_ && request_info_->upload_data_stream)
371 request_info_->upload_data_stream->Reset(); 379 request_info_->upload_data_stream->Reset();
372 380
373 if (stream_.get()) { 381 if (stream_.get()) {
374 stream_closed_ = true; 382 stream_closed_ = true;
375 closed_stream_status_ = status; 383 closed_stream_status_ = status;
376 closed_stream_id_ = stream_->stream_id(); 384 closed_stream_id_ = stream_->stream_id();
377 closed_stream_has_load_timing_info_ = 385 closed_stream_has_load_timing_info_ =
378 stream_->GetLoadTimingInfo(&closed_stream_load_timing_info_); 386 stream_->GetLoadTimingInfo(&closed_stream_load_timing_info_);
379 closed_stream_received_bytes_ = stream_->raw_received_bytes(); 387 closed_stream_received_bytes_ = stream_->raw_received_bytes();
380 closed_stream_sent_bytes_ = stream_->raw_sent_bytes(); 388 closed_stream_sent_bytes_ = stream_->raw_sent_bytes();
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 details->connection_info = HttpResponseInfo::CONNECTION_INFO_HTTP2; 615 details->connection_info = HttpResponseInfo::CONNECTION_INFO_HTTP2;
608 return; 616 return;
609 } 617 }
610 618
611 void SpdyHttpStream::SetPriority(RequestPriority priority) { 619 void SpdyHttpStream::SetPriority(RequestPriority priority) {
612 // TODO(akalin): Plumb this through to |stream_request_| and 620 // TODO(akalin): Plumb this through to |stream_request_| and
613 // |stream_|. 621 // |stream_|.
614 } 622 }
615 623
616 } // namespace net 624 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_http_stream.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698