diff options
author | tyoshino@chromium.org <tyoshino@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-23 01:03:26 +0000 |
---|---|---|
committer | tyoshino@chromium.org <tyoshino@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-23 01:03:26 +0000 |
commit | 7819b8725882113aec034756dd1b5c7ae02c3b58 (patch) | |
tree | 6672ed107496579537c7f516017cd06bd4cc9b98 /content/browser/streams/stream.cc | |
parent | 1f1fd6c86e57524b5a024dd10665941cebf4db51 (diff) | |
download | chromium_src-7819b8725882113aec034756dd1b5c7ae02c3b58.zip chromium_src-7819b8725882113aec034756dd1b5c7ae02c3b58.tar.gz chromium_src-7819b8725882113aec034756dd1b5c7ae02c3b58.tar.bz2 |
Make Stream return STREAM_ABORTED to tell the reader it's failed.
Using this, StreamURLRequestJob aborts itself.
For now, this value will be used to deal with memory limit exceed.
data_bytes_read_ is moved using this opportunity since it's a part of temporary buffer consists of data_ and data_length_.
BUG=169957
Review URL: https://chromiumcodereview.appspot.com/22942003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@219170 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/streams/stream.cc')
-rw-r--r-- | content/browser/streams/stream.cc | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/content/browser/streams/stream.cc b/content/browser/streams/stream.cc index a9d43332..5d20fe6 100644 --- a/content/browser/streams/stream.cc +++ b/content/browser/streams/stream.cc @@ -23,10 +23,10 @@ namespace content { Stream::Stream(StreamRegistry* registry, StreamWriteObserver* write_observer, const GURL& url) - : data_bytes_read_(0), - can_add_data_(true), + : can_add_data_(true), url_(url), data_length_(0), + data_bytes_read_(0), last_total_buffered_bytes_(0), registry_(registry), read_observer_(NULL), @@ -73,6 +73,7 @@ void Stream::Abort() { // is used for both input and output operation. writer_.reset(); reader_.reset(); + ClearBuffer(); can_add_data_ = false; registry_->UnregisterStream(url()); } @@ -97,6 +98,9 @@ void Stream::AddData(scoped_refptr<net::IOBuffer> buffer, size_t size) { } void Stream::AddData(const char* data, size_t size) { + if (!writer_.get()) + return; + scoped_refptr<net::IOBuffer> io_buffer(new net::IOBuffer(size)); memcpy(io_buffer->data(), data, size); AddData(io_buffer, size); @@ -123,13 +127,12 @@ Stream::StreamState Stream::ReadRawData(net::IOBuffer* buf, *bytes_read = 0; if (!data_.get()) { - // TODO(tyoshino): Add STREAM_ABORTED type to tell the reader that this - // stream is aborted. + DCHECK(!data_length_); + DCHECK(!data_bytes_read_); + if (!reader_.get()) - return STREAM_EMPTY; + return STREAM_ABORTED; - data_length_ = 0; - data_bytes_read_ = 0; ByteStreamReader::StreamState state = reader_->Read(&data_, &data_length_); switch (state) { case ByteStreamReader::STREAM_HAS_DATA: @@ -149,7 +152,7 @@ Stream::StreamState Stream::ReadRawData(net::IOBuffer* buf, memcpy(buf->data(), data_->data() + data_bytes_read_, to_read); data_bytes_read_ += to_read; if (data_bytes_read_ >= data_length_) - data_ = NULL; + ClearBuffer(); *bytes_read = to_read; return STREAM_HAS_DATA; @@ -186,4 +189,10 @@ void Stream::OnDataAvailable() { read_observer_->OnDataAvailable(this); } +void Stream::ClearBuffer() { + data_ = NULL; + data_length_ = 0; + data_bytes_read_ = 0; +} + } // namespace content |