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

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

Issue 2298823002: Resetting the HttpRequestInfo pointers in HttpNetworkTransaction and streams (Closed)
Patch Set: Initial patch Created 4 years, 3 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
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 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 92
93 if (rv == OK) { 93 if (rv == OK) {
94 stream_ = stream_request_.ReleaseStream(); 94 stream_ = stream_request_.ReleaseStream();
95 InitializeStreamHelper(); 95 InitializeStreamHelper();
96 } 96 }
97 97
98 return rv; 98 return rv;
99 } 99 }
100 100
101 UploadProgress SpdyHttpStream::GetUploadProgress() const { 101 UploadProgress SpdyHttpStream::GetUploadProgress() const {
102 if (!request_info_ || !HasUploadData()) 102 if (!request_info_)
103 return upload_progress_;
mmenke 2016/08/31 21:57:59 Hrm...I wonder about all this UploadProgress plumb
shivanisha 2016/09/01 20:30:59 Why do we even need to go to the URLRequestJob, Ht
shivanisha 2016/09/01 20:32:12 Ah ok, I see your concerns about rewinding the str
shivanisha 2016/09/08 20:43:54 Removed all the plumbing for getting upload progre
104
105 if (!HasUploadData())
103 return UploadProgress(); 106 return UploadProgress();
104 107
105 return UploadProgress(request_info_->upload_data_stream->position(), 108 return UploadProgress(request_info_->upload_data_stream->position(),
106 request_info_->upload_data_stream->size()); 109 request_info_->upload_data_stream->size());
107 } 110 }
108 111
109 int SpdyHttpStream::ReadResponseHeaders(const CompletionCallback& callback) { 112 int SpdyHttpStream::ReadResponseHeaders(const CompletionCallback& callback) {
110 CHECK(!callback.is_null()); 113 CHECK(!callback.is_null());
111 if (stream_closed_) 114 if (stream_closed_)
112 return closed_stream_status_; 115 return closed_stream_status_;
113 116
114 CHECK(stream_.get()); 117 CHECK(stream_.get());
115 118
116 // Check if we already have the response headers. If so, return synchronously. 119 // Check if we already have the response headers. If so, return synchronously.
117 if (response_headers_status_ == RESPONSE_HEADERS_ARE_COMPLETE) { 120 if (response_headers_status_ == RESPONSE_HEADERS_ARE_COMPLETE) {
118 CHECK(!stream_->IsIdle()); 121 CHECK(!stream_->IsIdle());
119 return OK; 122 return OK;
120 } 123 }
121 124
122 // Still waiting for the response, return IO_PENDING. 125 // Still waiting for the response, return IO_PENDING.
123 CHECK(response_callback_.is_null()); 126 CHECK(response_callback_.is_null());
124 response_callback_ = callback; 127 response_callback_ = callback;
125 return ERR_IO_PENDING; 128 return ERR_IO_PENDING;
126 } 129 }
127 130
128 int SpdyHttpStream::ReadResponseBody( 131 int SpdyHttpStream::ReadResponseBody(
129 IOBuffer* buf, int buf_len, const CompletionCallback& callback) { 132 IOBuffer* buf, int buf_len, const CompletionCallback& callback) {
133 // Invalidate HttpRequestInfo pointer. This is to allow the stream to be
134 // shared across multiple HttpCache::Transactions which might require this
135 // stream to outlive the request_'s owner URLRequestHttpJob.
136 if (request_info_)
137 ResetRequestInfo();
138
130 if (stream_.get()) 139 if (stream_.get())
131 CHECK(!stream_->IsIdle()); 140 CHECK(!stream_->IsIdle());
132 141
133 CHECK(buf); 142 CHECK(buf);
134 CHECK(buf_len); 143 CHECK(buf_len);
135 CHECK(!callback.is_null()); 144 CHECK(!callback.is_null());
136 145
137 // If we have data buffered, complete the IO immediately. 146 // If we have data buffered, complete the IO immediately.
138 if (!response_body_queue_.IsEmpty()) { 147 if (!response_body_queue_.IsEmpty()) {
139 return response_body_queue_.Dequeue(buf->data(), buf_len); 148 return response_body_queue_.Dequeue(buf->data(), buf_len);
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 void SpdyHttpStream::OnDataSent() { 376 void SpdyHttpStream::OnDataSent() {
368 request_body_buf_size_ = 0; 377 request_body_buf_size_ = 0;
369 ReadAndSendRequestBodyData(); 378 ReadAndSendRequestBodyData();
370 } 379 }
371 380
372 // TODO(xunjieli): Maybe do something with the trailers. crbug.com/422958. 381 // TODO(xunjieli): Maybe do something with the trailers. crbug.com/422958.
373 void SpdyHttpStream::OnTrailers(const SpdyHeaderBlock& trailers) {} 382 void SpdyHttpStream::OnTrailers(const SpdyHeaderBlock& trailers) {}
374 383
375 void SpdyHttpStream::OnClose(int status) { 384 void SpdyHttpStream::OnClose(int status) {
376 // Cancel any pending reads from the upload data stream. 385 // Cancel any pending reads from the upload data stream.
377 if (request_info_->upload_data_stream) 386 if (request_info_ && request_info_->upload_data_stream)
378 request_info_->upload_data_stream->Reset(); 387 request_info_->upload_data_stream->Reset();
379 388
380 if (stream_.get()) { 389 if (stream_.get()) {
381 stream_closed_ = true; 390 stream_closed_ = true;
382 closed_stream_status_ = status; 391 closed_stream_status_ = status;
383 closed_stream_id_ = stream_->stream_id(); 392 closed_stream_id_ = stream_->stream_id();
384 closed_stream_has_load_timing_info_ = 393 closed_stream_has_load_timing_info_ =
385 stream_->GetLoadTimingInfo(&closed_stream_load_timing_info_); 394 stream_->GetLoadTimingInfo(&closed_stream_load_timing_info_);
386 closed_stream_received_bytes_ = stream_->raw_received_bytes(); 395 closed_stream_received_bytes_ = stream_->raw_received_bytes();
387 closed_stream_sent_bytes_ = stream_->raw_sent_bytes(); 396 closed_stream_sent_bytes_ = stream_->raw_sent_bytes();
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 void SpdyHttpStream::PopulateNetErrorDetails(NetErrorDetails* details) { 621 void SpdyHttpStream::PopulateNetErrorDetails(NetErrorDetails* details) {
613 details->connection_info = HttpResponseInfo::CONNECTION_INFO_HTTP2; 622 details->connection_info = HttpResponseInfo::CONNECTION_INFO_HTTP2;
614 return; 623 return;
615 } 624 }
616 625
617 void SpdyHttpStream::SetPriority(RequestPriority priority) { 626 void SpdyHttpStream::SetPriority(RequestPriority priority) {
618 // TODO(akalin): Plumb this through to |stream_request_| and 627 // TODO(akalin): Plumb this through to |stream_request_| and
619 // |stream_|. 628 // |stream_|.
620 } 629 }
621 630
631 void SpdyHttpStream::ResetRequestInfo() {
632 // Only allowed when Reading of response body starts. It is safe to reset it
633 // at this point since request_->upload_data_stream is also not needed
634 // anymore.
635
636 // Save upload progress if any.
637 upload_progress_ = GetUploadProgress();
638
639 request_info_ = nullptr;
640 }
641
622 } // namespace net 642 } // namespace net
OLDNEW
« net/quic/chromium/quic_http_stream.cc ('K') | « net/spdy/spdy_http_stream.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698