Chromium Code Reviews| Index: net/spdy/spdy_buffer.cc |
| diff --git a/net/spdy/spdy_buffer.cc b/net/spdy/spdy_buffer.cc |
| index 3257befc8518a3b7a47d83d6e636a2da82dcab03..15edcab1e0ae7953bec1fdd99d2e221da24fbef8 100644 |
| --- a/net/spdy/spdy_buffer.cc |
| +++ b/net/spdy/spdy_buffer.cc |
| @@ -6,6 +6,7 @@ |
| #include <cstring> |
| +#include "base/callback.h" |
| #include "base/logging.h" |
| #include "net/base/io_buffer.h" |
| #include "net/spdy/spdy_protocol.h" |
| @@ -38,7 +39,10 @@ SpdyBuffer::SpdyBuffer(const char* data, size_t size) : |
| frame_(MakeSpdyFrame(data, size)), |
| offset_(0) {} |
| -SpdyBuffer::~SpdyBuffer() {} |
| +SpdyBuffer::~SpdyBuffer() { |
| + if (GetRemainingSize() > 0) |
| + Consume(GetRemainingSize()); |
| +} |
| const char* SpdyBuffer::GetRemainingData() const { |
| return frame_->data() + offset_; |
| @@ -48,10 +52,18 @@ size_t SpdyBuffer::GetRemainingSize() const { |
| return frame_->size() - offset_; |
| } |
| +void SpdyBuffer::AddConsumeCallback(const ConsumeCallback& consume_callback) { |
| + consume_callbacks_.push_back(consume_callback); |
| +} |
| + |
| void SpdyBuffer::Consume(size_t consume_size) { |
| DCHECK_GE(consume_size, 1u); |
| DCHECK_LE(consume_size, GetRemainingSize()); |
| offset_ += consume_size; |
| + for (std::vector<ConsumeCallback>::const_iterator it = |
| + consume_callbacks_.begin(); it != consume_callbacks_.end(); ++it) { |
| + it->Run(consume_size); |
|
Ryan Hamilton
2013/04/16 23:41:32
Is there any chance that executing one of these ca
akalin
2013/04/16 23:53:10
I think for the ConsumeCallback's use case, it's b
Ryan Hamilton
2013/04/17 00:14:32
sgtm
|
| + } |
| }; |
| IOBuffer* SpdyBuffer::GetIOBufferForRemainingData() { |