summaryrefslogtreecommitdiffstats
path: root/content/browser/streams
diff options
context:
space:
mode:
authorzork@chromium.org <zork@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-21 14:44:47 +0000
committerzork@chromium.org <zork@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-21 14:44:47 +0000
commit8fbe376ddea620f94e794eb9e8684f470b156f00 (patch)
treedf7df01f5797e34eeaa426ea3b673575a0ac4370 /content/browser/streams
parentb191d9ad2d9746d1bb3abb34b0b30c3b89ee308c (diff)
downloadchromium_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.cc19
-rw-r--r--content/browser/streams/stream.h2
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_;