diff options
author | zork@chromium.org <zork@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-21 14:44:47 +0000 |
---|---|---|
committer | zork@chromium.org <zork@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-21 14:44:47 +0000 |
commit | 8fbe376ddea620f94e794eb9e8684f470b156f00 (patch) | |
tree | df7df01f5797e34eeaa426ea3b673575a0ac4370 /content/browser/streams | |
parent | b191d9ad2d9746d1bb3abb34b0b30c3b89ee308c (diff) | |
download | chromium_src-8fbe376ddea620f94e794eb9e8684f470b156f00.zip chromium_src-8fbe376ddea620f94e794eb9e8684f470b156f00.tar.gz chromium_src-8fbe376ddea620f94e794eb9e8684f470b156f00.tar.bz2 |
Fix Stream URL request for async requests
BUG=222670
Review URL: https://chromiumcodereview.appspot.com/12925003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@189597 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/streams')
-rw-r--r-- | content/browser/streams/stream.cc | 19 | ||||
-rw-r--r-- | content/browser/streams/stream.h | 2 |
2 files changed, 13 insertions, 8 deletions
diff --git a/content/browser/streams/stream.cc b/content/browser/streams/stream.cc index 3fe192a..a0b8007 100644 --- a/content/browser/streams/stream.cc +++ b/content/browser/streams/stream.cc @@ -5,6 +5,7 @@ #include "content/browser/streams/stream.h" #include "base/bind.h" +#include "base/location.h" #include "base/message_loop_proxy.h" #include "content/browser/streams/stream_handle_impl.h" #include "content/browser/streams/stream_read_observer.h" @@ -23,7 +24,7 @@ Stream::Stream(StreamRegistry* registry, StreamWriteObserver* write_observer, const GURL& security_origin, const GURL& url) - : bytes_read_(0), + : data_bytes_read_(0), can_add_data_(true), security_origin_(security_origin), url_(url), @@ -76,15 +77,19 @@ void Stream::Finalize() { writer_->Close(DOWNLOAD_INTERRUPT_REASON_NONE); writer_.reset(NULL); - OnDataAvailable(); + // Continue asynchronously. + base::MessageLoopProxy::current()->PostTask( + FROM_HERE, + base::Bind(&Stream::OnDataAvailable, weak_ptr_factory_.GetWeakPtr())); } Stream::StreamState Stream::ReadRawData(net::IOBuffer* buf, int buf_size, int* bytes_read) { + *bytes_read = 0; if (!data_) { data_length_ = 0; - bytes_read_ = 0; + data_bytes_read_ = 0; ByteStreamReader::StreamState state = reader_->Read(&data_, &data_length_); switch (state) { case ByteStreamReader::STREAM_HAS_DATA: @@ -97,13 +102,13 @@ Stream::StreamState Stream::ReadRawData(net::IOBuffer* buf, } } - size_t remaining_bytes = data_length_ - bytes_read_; + const size_t remaining_bytes = data_length_ - data_bytes_read_; size_t to_read = static_cast<size_t>(buf_size) < remaining_bytes ? buf_size : remaining_bytes; - memcpy(buf->data(), data_->data() + bytes_read_, to_read); - bytes_read_ += to_read; - if (bytes_read_ >= data_length_) + memcpy(buf->data(), data_->data() + data_bytes_read_, to_read); + data_bytes_read_ += to_read; + if (data_bytes_read_ >= data_length_) data_ = NULL; *bytes_read = to_read; diff --git a/content/browser/streams/stream.h b/content/browser/streams/stream.h index d6cd3b8..116d31a 100644 --- a/content/browser/streams/stream.h +++ b/content/browser/streams/stream.h @@ -85,7 +85,7 @@ class CONTENT_EXPORT Stream : public base::RefCountedThreadSafe<Stream> { void OnSpaceAvailable(); void OnDataAvailable(); - size_t bytes_read_; + size_t data_bytes_read_; bool can_add_data_; GURL security_origin_; |