| Index: net/spdy/spdy_stream.cc
|
| diff --git a/net/spdy/spdy_stream.cc b/net/spdy/spdy_stream.cc
|
| index 398890593023e29141f4d570dd74b4fc0e78d405..75fd33352c51d54b18a9452ec2726674bc0e9432 100644
|
| --- a/net/spdy/spdy_stream.cc
|
| +++ b/net/spdy/spdy_stream.cc
|
| @@ -106,8 +106,7 @@ SpdyStream::SpdyStream(SpdyStreamType type,
|
| recv_bytes_(0),
|
| write_handler_guard_(false) {
|
| CHECK(type_ == SPDY_BIDIRECTIONAL_STREAM ||
|
| - type_ == SPDY_REQUEST_RESPONSE_STREAM ||
|
| - type_ == SPDY_PUSH_STREAM);
|
| + type_ == SPDY_REQUEST_RESPONSE_STREAM || type_ == SPDY_PUSH_STREAM);
|
| CHECK_GE(priority_, MINIMUM_PRIORITY);
|
| CHECK_LE(priority_, MAXIMUM_PRIORITY);
|
| }
|
| @@ -128,8 +127,7 @@ void SpdyStream::SetDelegate(Delegate* delegate) {
|
| if (io_state_ == STATE_HALF_CLOSED_LOCAL_UNCLAIMED) {
|
| DCHECK_EQ(type_, SPDY_PUSH_STREAM);
|
| base::MessageLoop::current()->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&SpdyStream::PushedStreamReplay, GetWeakPtr()));
|
| + FROM_HERE, base::Bind(&SpdyStream::PushedStreamReplay, GetWeakPtr()));
|
| }
|
| }
|
|
|
| @@ -197,9 +195,9 @@ scoped_ptr<SpdyFrame> SpdyStream::ProduceSynStreamFrame() {
|
| CHECK(request_headers_);
|
| CHECK_GT(stream_id_, 0u);
|
|
|
| - SpdyControlFlags flags =
|
| - (pending_send_status_ == NO_MORE_DATA_TO_SEND) ?
|
| - CONTROL_FLAG_FIN : CONTROL_FLAG_NONE;
|
| + SpdyControlFlags flags = (pending_send_status_ == NO_MORE_DATA_TO_SEND)
|
| + ? CONTROL_FLAG_FIN
|
| + : CONTROL_FLAG_NONE;
|
| scoped_ptr<SpdyFrame> frame(session_->CreateSynStream(
|
| stream_id_, priority_, flags, *request_headers_));
|
| send_time_ = base::TimeTicks::Now();
|
| @@ -261,7 +259,9 @@ void SpdyStream::IncreaseSendWindowSize(int32 delta_window_size) {
|
| if (delta_window_size > max_delta_window_size) {
|
| std::string desc = base::StringPrintf(
|
| "Received WINDOW_UPDATE [delta: %d] for stream %d overflows "
|
| - "send_window_size_ [current: %d]", delta_window_size, stream_id_,
|
| + "send_window_size_ [current: %d]",
|
| + delta_window_size,
|
| + stream_id_,
|
| send_window_size_);
|
| session_->ResetStream(stream_id_, RST_STREAM_FLOW_CONTROL_ERROR, desc);
|
| return;
|
| @@ -270,10 +270,11 @@ void SpdyStream::IncreaseSendWindowSize(int32 delta_window_size) {
|
|
|
| send_window_size_ += delta_window_size;
|
|
|
| - net_log_.AddEvent(
|
| - NetLog::TYPE_SPDY_STREAM_UPDATE_SEND_WINDOW,
|
| - base::Bind(&NetLogSpdyStreamWindowUpdateCallback,
|
| - stream_id_, delta_window_size, send_window_size_));
|
| + net_log_.AddEvent(NetLog::TYPE_SPDY_STREAM_UPDATE_SEND_WINDOW,
|
| + base::Bind(&NetLogSpdyStreamWindowUpdateCallback,
|
| + stream_id_,
|
| + delta_window_size,
|
| + send_window_size_));
|
|
|
| PossiblyResumeIfSendStalled();
|
| }
|
| @@ -295,10 +296,11 @@ void SpdyStream::DecreaseSendWindowSize(int32 delta_window_size) {
|
|
|
| send_window_size_ -= delta_window_size;
|
|
|
| - net_log_.AddEvent(
|
| - NetLog::TYPE_SPDY_STREAM_UPDATE_SEND_WINDOW,
|
| - base::Bind(&NetLogSpdyStreamWindowUpdateCallback,
|
| - stream_id_, -delta_window_size, send_window_size_));
|
| + net_log_.AddEvent(NetLog::TYPE_SPDY_STREAM_UPDATE_SEND_WINDOW,
|
| + base::Bind(&NetLogSpdyStreamWindowUpdateCallback,
|
| + stream_id_,
|
| + -delta_window_size,
|
| + send_window_size_));
|
| }
|
|
|
| void SpdyStream::OnReadBufferConsumed(
|
| @@ -325,10 +327,11 @@ void SpdyStream::IncreaseRecvWindowSize(int32 delta_window_size) {
|
| DCHECK_LE(delta_window_size, kint32max - recv_window_size_);
|
|
|
| recv_window_size_ += delta_window_size;
|
| - net_log_.AddEvent(
|
| - NetLog::TYPE_SPDY_STREAM_UPDATE_RECV_WINDOW,
|
| - base::Bind(&NetLogSpdyStreamWindowUpdateCallback,
|
| - stream_id_, delta_window_size, recv_window_size_));
|
| + net_log_.AddEvent(NetLog::TYPE_SPDY_STREAM_UPDATE_RECV_WINDOW,
|
| + base::Bind(&NetLogSpdyStreamWindowUpdateCallback,
|
| + stream_id_,
|
| + delta_window_size,
|
| + recv_window_size_));
|
|
|
| unacked_recv_window_bytes_ += delta_window_size;
|
| if (unacked_recv_window_bytes_ >
|
| @@ -349,7 +352,8 @@ void SpdyStream::DecreaseRecvWindowSize(int32 delta_window_size) {
|
| // negative. If we do, the receive window isn't being respected.
|
| if (delta_window_size > recv_window_size_) {
|
| session_->ResetStream(
|
| - stream_id_, RST_STREAM_PROTOCOL_ERROR,
|
| + stream_id_,
|
| + RST_STREAM_PROTOCOL_ERROR,
|
| "delta_window_size is " + base::IntToString(delta_window_size) +
|
| " in DecreaseRecvWindowSize, which is larger than the receive " +
|
| "window size of " + base::IntToString(recv_window_size_));
|
| @@ -357,10 +361,11 @@ void SpdyStream::DecreaseRecvWindowSize(int32 delta_window_size) {
|
| }
|
|
|
| recv_window_size_ -= delta_window_size;
|
| - net_log_.AddEvent(
|
| - NetLog::TYPE_SPDY_STREAM_UPDATE_RECV_WINDOW,
|
| - base::Bind(&NetLogSpdyStreamWindowUpdateCallback,
|
| - stream_id_, -delta_window_size, recv_window_size_));
|
| + net_log_.AddEvent(NetLog::TYPE_SPDY_STREAM_UPDATE_RECV_WINDOW,
|
| + base::Bind(&NetLogSpdyStreamWindowUpdateCallback,
|
| + stream_id_,
|
| + -delta_window_size,
|
| + recv_window_size_));
|
| }
|
|
|
| int SpdyStream::GetPeerAddress(IPEndPoint* address) const {
|
| @@ -397,7 +402,8 @@ int SpdyStream::OnInitialResponseHeadersReceived(
|
| // For a bidirectional stream, we're ready for the response
|
| // headers once we've finished sending the request headers.
|
| if (io_state_ == STATE_IDLE) {
|
| - session_->ResetStream(stream_id_, RST_STREAM_PROTOCOL_ERROR,
|
| + session_->ResetStream(stream_id_,
|
| + RST_STREAM_PROTOCOL_ERROR,
|
| "Response received before request sent");
|
| return ERR_SPDY_PROTOCOL_ERROR;
|
| }
|
| @@ -407,7 +413,8 @@ int SpdyStream::OnInitialResponseHeadersReceived(
|
| // For a request/response stream, we're ready for the response
|
| // headers once we've finished sending the request headers.
|
| if (io_state_ == STATE_IDLE) {
|
| - session_->ResetStream(stream_id_, RST_STREAM_PROTOCOL_ERROR,
|
| + session_->ResetStream(stream_id_,
|
| + RST_STREAM_PROTOCOL_ERROR,
|
| "Response received before request sent");
|
| return ERR_SPDY_PROTOCOL_ERROR;
|
| }
|
| @@ -438,14 +445,15 @@ int SpdyStream::OnAdditionalResponseHeadersReceived(
|
| const SpdyHeaderBlock& additional_response_headers) {
|
| if (type_ == SPDY_REQUEST_RESPONSE_STREAM) {
|
| session_->ResetStream(
|
| - stream_id_, RST_STREAM_PROTOCOL_ERROR,
|
| + stream_id_,
|
| + RST_STREAM_PROTOCOL_ERROR,
|
| "Additional headers received for request/response stream");
|
| return ERR_SPDY_PROTOCOL_ERROR;
|
| } else if (type_ == SPDY_PUSH_STREAM &&
|
| response_headers_status_ == RESPONSE_HEADERS_ARE_COMPLETE) {
|
| - session_->ResetStream(
|
| - stream_id_, RST_STREAM_PROTOCOL_ERROR,
|
| - "Additional headers received for push stream");
|
| + session_->ResetStream(stream_id_,
|
| + RST_STREAM_PROTOCOL_ERROR,
|
| + "Additional headers received for push stream");
|
| return ERR_SPDY_PROTOCOL_ERROR;
|
| }
|
| return MergeWithResponseHeaders(additional_response_headers);
|
| @@ -523,20 +531,19 @@ void SpdyStream::OnFrameWriteComplete(SpdyFrameType frame_type,
|
| NOTREACHED();
|
| return;
|
| }
|
| - CHECK(frame_type == SYN_STREAM ||
|
| - frame_type == DATA) << frame_type;
|
| + CHECK(frame_type == SYN_STREAM || frame_type == DATA) << frame_type;
|
|
|
| - int result = (frame_type == SYN_STREAM) ?
|
| - OnRequestHeadersSent() : OnDataSent(frame_size);
|
| + int result = (frame_type == SYN_STREAM) ? OnRequestHeadersSent()
|
| + : OnDataSent(frame_size);
|
| if (result == ERR_IO_PENDING) {
|
| // The write operation hasn't completed yet.
|
| return;
|
| }
|
|
|
| if (pending_send_status_ == NO_MORE_DATA_TO_SEND) {
|
| - if(io_state_ == STATE_OPEN) {
|
| + if (io_state_ == STATE_OPEN) {
|
| io_state_ = STATE_HALF_CLOSED_LOCAL;
|
| - } else if(io_state_ == STATE_HALF_CLOSED_REMOTE) {
|
| + } else if (io_state_ == STATE_HALF_CLOSED_REMOTE) {
|
| io_state_ = STATE_CLOSED;
|
| } else {
|
| NOTREACHED() << io_state_;
|
| @@ -571,8 +578,8 @@ int SpdyStream::OnRequestHeadersSent() {
|
| }
|
|
|
| int SpdyStream::OnDataSent(size_t frame_size) {
|
| - CHECK(io_state_ == STATE_OPEN ||
|
| - io_state_ == STATE_HALF_CLOSED_REMOTE) << io_state_;
|
| + CHECK(io_state_ == STATE_OPEN || io_state_ == STATE_HALF_CLOSED_REMOTE)
|
| + << io_state_;
|
|
|
| size_t frame_payload_size = frame_size - session_->GetDataFrameMinimumSize();
|
|
|
| @@ -598,9 +605,10 @@ SpdyMajorVersion SpdyStream::GetProtocolVersion() const {
|
| }
|
|
|
| void SpdyStream::LogStreamError(int status, const std::string& description) {
|
| - net_log_.AddEvent(NetLog::TYPE_SPDY_STREAM_ERROR,
|
| - base::Bind(&NetLogSpdyStreamErrorCallback,
|
| - stream_id_, status, &description));
|
| + net_log_.AddEvent(
|
| + NetLog::TYPE_SPDY_STREAM_ERROR,
|
| + base::Bind(
|
| + &NetLogSpdyStreamErrorCallback, stream_id_, status, &description));
|
| }
|
|
|
| void SpdyStream::OnClose(int status) {
|
| @@ -655,10 +663,10 @@ int SpdyStream::SendRequestHeaders(scoped_ptr<SpdyHeaderBlock> request_headers,
|
| CHECK_EQ(io_state_, STATE_IDLE);
|
| request_headers_ = request_headers.Pass();
|
| pending_send_status_ = send_status;
|
| - session_->EnqueueStreamWrite(
|
| - GetWeakPtr(), SYN_STREAM,
|
| - scoped_ptr<SpdyBufferProducer>(
|
| - new SynStreamBufferProducer(GetWeakPtr())));
|
| + session_->EnqueueStreamWrite(GetWeakPtr(),
|
| + SYN_STREAM,
|
| + scoped_ptr<SpdyBufferProducer>(
|
| + new SynStreamBufferProducer(GetWeakPtr())));
|
| return ERR_IO_PENDING;
|
| }
|
|
|
| @@ -667,8 +675,8 @@ void SpdyStream::SendData(IOBuffer* data,
|
| SpdySendStatus send_status) {
|
| CHECK_NE(type_, SPDY_PUSH_STREAM);
|
| CHECK_EQ(pending_send_status_, MORE_DATA_TO_SEND);
|
| - CHECK(io_state_ == STATE_OPEN ||
|
| - io_state_ == STATE_HALF_CLOSED_REMOTE) << io_state_;
|
| + CHECK(io_state_ == STATE_OPEN || io_state_ == STATE_HALF_CLOSED_REMOTE)
|
| + << io_state_;
|
| CHECK(!pending_send_data_.get());
|
| pending_send_data_ = new DrainableIOBuffer(data, length);
|
| pending_send_status_ = send_status;
|
| @@ -692,9 +700,8 @@ void SpdyStream::PossiblyResumeIfSendStalled() {
|
| }
|
| if (send_stalled_by_flow_control_ && !session_->IsSendStalled() &&
|
| send_window_size_ > 0) {
|
| - net_log_.AddEvent(
|
| - NetLog::TYPE_SPDY_STREAM_FLOW_CONTROL_UNSTALLED,
|
| - NetLog::IntegerCallback("stream_id", stream_id_));
|
| + net_log_.AddEvent(NetLog::TYPE_SPDY_STREAM_FLOW_CONTROL_UNSTALLED,
|
| + NetLog::IntegerCallback("stream_id", stream_id_));
|
| send_stalled_by_flow_control_ = false;
|
| QueueNextDataFrame();
|
| }
|
| @@ -706,8 +713,7 @@ bool SpdyStream::IsClosed() const {
|
|
|
| bool SpdyStream::IsLocallyClosed() const {
|
| return io_state_ == STATE_HALF_CLOSED_LOCAL_UNCLAIMED ||
|
| - io_state_ == STATE_HALF_CLOSED_LOCAL ||
|
| - io_state_ == STATE_CLOSED;
|
| + io_state_ == STATE_HALF_CLOSED_LOCAL || io_state_ == STATE_CLOSED;
|
| }
|
|
|
| bool SpdyStream::IsIdle() const {
|
| @@ -735,8 +741,8 @@ GURL SpdyStream::GetUrlFromHeaders() const {
|
|
|
| const SpdyHeaderBlock& headers =
|
| (type_ == SPDY_PUSH_STREAM) ? response_headers_ : *request_headers_;
|
| - return GetUrlFromHeaderBlock(headers, GetProtocolVersion(),
|
| - type_ == SPDY_PUSH_STREAM);
|
| + return GetUrlFromHeaderBlock(
|
| + headers, GetProtocolVersion(), type_ == SPDY_PUSH_STREAM);
|
| }
|
|
|
| bool SpdyStream::HasUrlFromHeaders() const {
|
| @@ -776,15 +782,15 @@ void SpdyStream::UpdateHistograms() {
|
| void SpdyStream::QueueNextDataFrame() {
|
| // Until the request has been completely sent, we cannot be sure
|
| // that our stream_id is correct.
|
| - CHECK(io_state_ == STATE_OPEN ||
|
| - io_state_ == STATE_HALF_CLOSED_REMOTE) << io_state_;
|
| + CHECK(io_state_ == STATE_OPEN || io_state_ == STATE_HALF_CLOSED_REMOTE)
|
| + << io_state_;
|
| CHECK_GT(stream_id_, 0u);
|
| CHECK(pending_send_data_.get());
|
| CHECK_GT(pending_send_data_->BytesRemaining(), 0);
|
|
|
| - SpdyDataFlags flags =
|
| - (pending_send_status_ == NO_MORE_DATA_TO_SEND) ?
|
| - DATA_FLAG_FIN : DATA_FLAG_NONE;
|
| + SpdyDataFlags flags = (pending_send_status_ == NO_MORE_DATA_TO_SEND)
|
| + ? DATA_FLAG_FIN
|
| + : DATA_FLAG_NONE;
|
| scoped_ptr<SpdyBuffer> data_buffer(
|
| session_->CreateDataBuffer(stream_id_,
|
| pending_send_data_.get(),
|
| @@ -804,13 +810,13 @@ void SpdyStream::QueueNextDataFrame() {
|
| // This currently isn't strictly needed, since write frames are
|
| // discarded only if the stream is about to be closed. But have it
|
| // here anyway just in case this changes.
|
| - data_buffer->AddConsumeCallback(
|
| - base::Bind(&SpdyStream::OnWriteBufferConsumed,
|
| - GetWeakPtr(), payload_size));
|
| + data_buffer->AddConsumeCallback(base::Bind(
|
| + &SpdyStream::OnWriteBufferConsumed, GetWeakPtr(), payload_size));
|
| }
|
|
|
| session_->EnqueueStreamWrite(
|
| - GetWeakPtr(), DATA,
|
| + GetWeakPtr(),
|
| + DATA,
|
| scoped_ptr<SpdyBufferProducer>(
|
| new SimpleBufferProducer(data_buffer.Pass())));
|
| }
|
| @@ -819,16 +825,19 @@ int SpdyStream::MergeWithResponseHeaders(
|
| const SpdyHeaderBlock& new_response_headers) {
|
| if (new_response_headers.find("transfer-encoding") !=
|
| new_response_headers.end()) {
|
| - session_->ResetStream(stream_id_, RST_STREAM_PROTOCOL_ERROR,
|
| - "Received transfer-encoding header");
|
| + session_->ResetStream(stream_id_,
|
| + RST_STREAM_PROTOCOL_ERROR,
|
| + "Received transfer-encoding header");
|
| return ERR_SPDY_PROTOCOL_ERROR;
|
| }
|
|
|
| for (SpdyHeaderBlock::const_iterator it = new_response_headers.begin();
|
| - it != new_response_headers.end(); ++it) {
|
| + it != new_response_headers.end();
|
| + ++it) {
|
| // Disallow uppercase headers.
|
| if (ContainsUppercaseAscii(it->first)) {
|
| - session_->ResetStream(stream_id_, RST_STREAM_PROTOCOL_ERROR,
|
| + session_->ResetStream(stream_id_,
|
| + RST_STREAM_PROTOCOL_ERROR,
|
| "Upper case characters in header: " + it->first);
|
| return ERR_SPDY_PROTOCOL_ERROR;
|
| }
|
| @@ -836,7 +845,8 @@ int SpdyStream::MergeWithResponseHeaders(
|
| SpdyHeaderBlock::iterator it2 = response_headers_.lower_bound(it->first);
|
| // Disallow duplicate headers. This is just to be conservative.
|
| if (it2 != response_headers_.end() && it2->first == it->first) {
|
| - session_->ResetStream(stream_id_, RST_STREAM_PROTOCOL_ERROR,
|
| + session_->ResetStream(stream_id_,
|
| + RST_STREAM_PROTOCOL_ERROR,
|
| "Duplicate header: " + it->first);
|
| return ERR_SPDY_PROTOCOL_ERROR;
|
| }
|
| @@ -860,8 +870,8 @@ int SpdyStream::MergeWithResponseHeaders(
|
| CHECK(weak_this);
|
| // Incomplete headers are OK only for push streams.
|
| if (type_ != SPDY_PUSH_STREAM) {
|
| - session_->ResetStream(stream_id_, RST_STREAM_PROTOCOL_ERROR,
|
| - "Incomplete headers");
|
| + session_->ResetStream(
|
| + stream_id_, RST_STREAM_PROTOCOL_ERROR, "Incomplete headers");
|
| return ERR_INCOMPLETE_SPDY_HEADERS;
|
| }
|
| } else if (weak_this) {
|
| @@ -872,8 +882,8 @@ int SpdyStream::MergeWithResponseHeaders(
|
| return OK;
|
| }
|
|
|
| -#define STATE_CASE(s) \
|
| - case s: \
|
| +#define STATE_CASE(s) \
|
| + case s: \
|
| description = base::StringPrintf("%s (0x%08X)", #s, s); \
|
| break
|
|
|
| @@ -886,8 +896,8 @@ std::string SpdyStream::DescribeState(State state) {
|
| STATE_CASE(STATE_HALF_CLOSED_LOCAL);
|
| STATE_CASE(STATE_CLOSED);
|
| default:
|
| - description = base::StringPrintf("Unknown state 0x%08X (%u)", state,
|
| - state);
|
| + description =
|
| + base::StringPrintf("Unknown state 0x%08X (%u)", state, state);
|
| break;
|
| }
|
| return description;
|
|
|