Index: net/spdy/spdy_proxy_client_socket.cc |
diff --git a/net/spdy/spdy_proxy_client_socket.cc b/net/spdy/spdy_proxy_client_socket.cc |
index 5bc617cb47ff8f08aebb8cfb53349322084b5ff8..43ec5b2313b8792b310f6d579559bc8188278c85 100644 |
--- a/net/spdy/spdy_proxy_client_socket.cc |
+++ b/net/spdy/spdy_proxy_client_socket.cc |
@@ -8,6 +8,7 @@ |
#include "base/bind.h" |
#include "base/bind_helpers.h" |
+#include "base/callback_helpers.h" |
#include "base/logging.h" |
#include "base/string_util.h" |
#include "base/values.h" |
@@ -41,7 +42,6 @@ SpdyProxyClientSocket::SpdyProxyClientSocket( |
auth_handler_factory)), |
user_buffer_len_(0), |
write_buffer_len_(0), |
- write_bytes_outstanding_(0), |
weak_factory_(this), |
net_log_(BoundNetLog::Make(spdy_stream->net_log().net_log(), |
NetLog::SOURCE_PROXY_CLIENT_SOCKET)) { |
@@ -133,7 +133,6 @@ void SpdyProxyClientSocket::Disconnect() { |
read_callback_.Reset(); |
write_buffer_len_ = 0; |
- write_bytes_outstanding_ = 0; |
write_callback_.Reset(); |
next_state_ = STATE_DISCONNECTED; |
@@ -227,33 +226,12 @@ int SpdyProxyClientSocket::Write(IOBuffer* buf, int buf_len, |
return ERR_SOCKET_NOT_CONNECTED; |
DCHECK(spdy_stream_); |
- write_bytes_outstanding_= buf_len; |
- if (buf_len <= kMaxSpdyFrameChunkSize) { |
- spdy_stream_->QueueStreamData(buf, buf_len, DATA_FLAG_NONE); |
- net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_SENT, |
- buf_len, buf->data()); |
- write_callback_ = callback; |
- write_buffer_len_ = buf_len; |
- return ERR_IO_PENDING; |
- } |
- |
- // Since a SPDY Data frame can only include kMaxSpdyFrameChunkSize bytes |
- // we need to send multiple data frames |
- for (int i = 0; i < buf_len; i += kMaxSpdyFrameChunkSize) { |
- int len = std::min(kMaxSpdyFrameChunkSize, buf_len - i); |
- scoped_refptr<DrainableIOBuffer> iobuf(new DrainableIOBuffer(buf, i + len)); |
- iobuf->SetOffset(i); |
- spdy_stream_->QueueStreamData(iobuf, len, DATA_FLAG_NONE); |
- net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_SENT, |
- len, buf->data()); |
- } |
- if (write_bytes_outstanding_ > 0) { |
- write_callback_ = callback; |
- write_buffer_len_ = buf_len; |
- return ERR_IO_PENDING; |
- } else { |
- return buf_len; |
- } |
+ spdy_stream_->SendStreamData(buf, buf_len, DATA_FLAG_NONE); |
+ net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_SENT, |
+ buf_len, buf->data()); |
+ write_callback_ = callback; |
+ write_buffer_len_ = buf_len; |
+ return ERR_IO_PENDING; |
} |
bool SpdyProxyClientSocket::SetReceiveBufferSize(int32 size) { |
@@ -474,8 +452,7 @@ void SpdyProxyClientSocket::OnSendBody() { |
CHECK(false); |
} |
-SpdySendStatus SpdyProxyClientSocket::OnSendBodyComplete( |
- size_t /*bytes_sent*/) { |
+SpdySendStatus SpdyProxyClientSocket::OnSendBodyComplete() { |
// Because we use |spdy_stream_| via STATE_OPEN (ala WebSockets) |
// OnSendBodyComplete() must never be called. |
CHECK(false); |
@@ -528,20 +505,12 @@ int SpdyProxyClientSocket::OnDataReceived(scoped_ptr<SpdyBuffer> buffer) { |
return OK; |
} |
-void SpdyProxyClientSocket::OnDataSent(size_t bytes_sent) { |
+void SpdyProxyClientSocket::OnDataSent() { |
DCHECK(!write_callback_.is_null()); |
- DCHECK_LE(static_cast<int>(bytes_sent), write_bytes_outstanding_); |
- write_bytes_outstanding_ -= static_cast<int>(bytes_sent); |
- |
- if (write_bytes_outstanding_ == 0) { |
- int rv = write_buffer_len_; |
- write_buffer_len_ = 0; |
- write_bytes_outstanding_ = 0; |
- CompletionCallback c = write_callback_; |
- write_callback_.Reset(); |
- c.Run(rv); |
- } |
+ int rv = write_buffer_len_; |
+ write_buffer_len_ = 0; |
+ ResetAndReturn(&write_callback_).Run(rv); |
} |
void SpdyProxyClientSocket::OnClose(int status) { |
@@ -559,7 +528,6 @@ void SpdyProxyClientSocket::OnClose(int status) { |
CompletionCallback write_callback = write_callback_; |
write_callback_.Reset(); |
write_buffer_len_ = 0; |
- write_bytes_outstanding_ = 0; |
// If we're in the middle of connecting, we need to make sure |
// we invoke the connect callback. |