OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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_stream.h" | 5 #include "net/spdy/spdy_stream.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
9 #include "base/singleton.h" | 9 #include "base/singleton.h" |
10 #include "net/spdy/spdy_session.h" | 10 #include "net/spdy/spdy_session.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 response_complete_(false), | 25 response_complete_(false), |
26 io_state_(STATE_NONE), | 26 io_state_(STATE_NONE), |
27 response_status_(OK), | 27 response_status_(OK), |
28 cancelled_(false), | 28 cancelled_(false), |
29 send_bytes_(0), | 29 send_bytes_(0), |
30 recv_bytes_(0), | 30 recv_bytes_(0), |
31 histograms_recorded_(false) {} | 31 histograms_recorded_(false) {} |
32 | 32 |
33 SpdyStream::~SpdyStream() { | 33 SpdyStream::~SpdyStream() { |
34 DLOG(INFO) << "Deleting SpdyStream for stream " << stream_id_; | 34 DLOG(INFO) << "Deleting SpdyStream for stream " << stream_id_; |
35 | |
36 // When the stream_id_ is 0, we expect that it is because | |
37 // we've cancelled or closed the stream and set the stream_id to 0. | |
38 if (!stream_id_) | |
39 DCHECK(response_complete_); | |
40 } | 35 } |
41 | 36 |
42 void SpdyStream::SetDelegate(Delegate* delegate) { | 37 void SpdyStream::SetDelegate(Delegate* delegate) { |
43 CHECK(delegate); | 38 CHECK(delegate); |
44 delegate_ = delegate; | 39 delegate_ = delegate; |
45 | 40 |
46 if (!response_->empty()) { | 41 if (!response_->empty()) { |
47 // The stream already got response. | 42 // The stream already got response. |
48 delegate_->OnResponseReceived(*response_, response_time_, OK); | 43 delegate_->OnResponseReceived(*response_, response_time_, OK); |
49 } | 44 } |
50 | 45 |
51 std::vector<scoped_refptr<IOBufferWithSize> > buffers; | 46 std::vector<scoped_refptr<IOBufferWithSize> > buffers; |
52 buffers.swap(pending_buffers_); | 47 buffers.swap(pending_buffers_); |
53 for (size_t i = 0; i < buffers.size(); ++i) { | 48 for (size_t i = 0; i < buffers.size(); ++i) { |
54 if (delegate_) | 49 if (delegate_) |
55 delegate_->OnDataReceived(buffers[i]->data(), buffers[i]->size()); | 50 delegate_->OnDataReceived(buffers[i]->data(), buffers[i]->size()); |
56 } | 51 } |
57 } | 52 } |
58 | 53 |
59 void SpdyStream::DetachDelegate() { | 54 void SpdyStream::DetachDelegate() { |
60 delegate_ = NULL; | 55 delegate_ = NULL; |
61 if (!cancelled()) | 56 if (!response_complete_ && !cancelled()) |
62 Cancel(); | 57 Cancel(); |
63 } | 58 } |
64 | 59 |
65 const linked_ptr<spdy::SpdyHeaderBlock>& SpdyStream::spdy_headers() const { | 60 const linked_ptr<spdy::SpdyHeaderBlock>& SpdyStream::spdy_headers() const { |
66 return request_; | 61 return request_; |
67 } | 62 } |
68 | 63 |
69 void SpdyStream::set_spdy_headers( | 64 void SpdyStream::set_spdy_headers( |
70 const linked_ptr<spdy::SpdyHeaderBlock>& headers) { | 65 const linked_ptr<spdy::SpdyHeaderBlock>& headers) { |
71 request_ = headers; | 66 request_ = headers; |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
207 | 202 |
208 if (status > 0) | 203 if (status > 0) |
209 send_bytes_ += status; | 204 send_bytes_ += status; |
210 | 205 |
211 DoLoop(status); | 206 DoLoop(status); |
212 } | 207 } |
213 | 208 |
214 void SpdyStream::OnClose(int status) { | 209 void SpdyStream::OnClose(int status) { |
215 response_complete_ = true; | 210 response_complete_ = true; |
216 response_status_ = status; | 211 response_status_ = status; |
217 stream_id_ = 0; | |
218 Delegate* delegate = delegate_; | 212 Delegate* delegate = delegate_; |
219 delegate_ = NULL; | 213 delegate_ = NULL; |
220 if (delegate) | 214 if (delegate) |
221 delegate->OnClose(status); | 215 delegate->OnClose(status); |
222 } | 216 } |
223 | 217 |
224 void SpdyStream::Cancel() { | 218 void SpdyStream::Cancel() { |
225 cancelled_ = true; | 219 cancelled_ = true; |
226 session_->CloseStream(stream_id_, ERR_ABORTED); | 220 session_->CloseStream(stream_id_, ERR_ABORTED); |
227 } | 221 } |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
448 UMA_HISTOGRAM_TIMES("Net.SpdyStreamDownloadTime", | 442 UMA_HISTOGRAM_TIMES("Net.SpdyStreamDownloadTime", |
449 recv_last_byte_time_ - recv_first_byte_time_); | 443 recv_last_byte_time_ - recv_first_byte_time_); |
450 UMA_HISTOGRAM_TIMES("Net.SpdyStreamTime", | 444 UMA_HISTOGRAM_TIMES("Net.SpdyStreamTime", |
451 recv_last_byte_time_ - send_time_); | 445 recv_last_byte_time_ - send_time_); |
452 | 446 |
453 UMA_HISTOGRAM_COUNTS("Net.SpdySendBytes", send_bytes_); | 447 UMA_HISTOGRAM_COUNTS("Net.SpdySendBytes", send_bytes_); |
454 UMA_HISTOGRAM_COUNTS("Net.SpdyRecvBytes", recv_bytes_); | 448 UMA_HISTOGRAM_COUNTS("Net.SpdyRecvBytes", recv_bytes_); |
455 } | 449 } |
456 | 450 |
457 } // namespace net | 451 } // namespace net |
OLD | NEW |