summaryrefslogtreecommitdiffstats
path: root/chromium/content/browser/streams
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/browser/streams')
-rw-r--r--chromium/content/browser/streams/stream.cc11
-rw-r--r--chromium/content/browser/streams/stream.h7
-rw-r--r--chromium/content/browser/streams/stream_context.cc1
-rw-r--r--chromium/content/browser/streams/stream_context.h1
-rw-r--r--chromium/content/browser/streams/stream_handle_impl.cc36
-rw-r--r--chromium/content/browser/streams/stream_handle_impl.h14
-rw-r--r--chromium/content/browser/streams/stream_url_request_job.cc2
-rw-r--r--chromium/content/browser/streams/stream_url_request_job_unittest.cc8
8 files changed, 61 insertions, 19 deletions
diff --git a/chromium/content/browser/streams/stream.cc b/chromium/content/browser/streams/stream.cc
index 5d20fe6ab64..d10770c42d2 100644
--- a/chromium/content/browser/streams/stream.cc
+++ b/chromium/content/browser/streams/stream.cc
@@ -7,11 +7,13 @@
#include "base/bind.h"
#include "base/location.h"
#include "base/message_loop/message_loop_proxy.h"
+#include "base/values.h"
#include "content/browser/streams/stream_handle_impl.h"
#include "content/browser/streams/stream_read_observer.h"
#include "content/browser/streams/stream_registry.h"
#include "content/browser/streams/stream_write_observer.h"
#include "net/base/io_buffer.h"
+#include "net/http/http_response_headers.h"
namespace {
// Start throttling the connection at about 1MB.
@@ -158,12 +160,15 @@ Stream::StreamState Stream::ReadRawData(net::IOBuffer* buf,
return STREAM_HAS_DATA;
}
-scoped_ptr<StreamHandle> Stream::CreateHandle(const GURL& original_url,
- const std::string& mime_type) {
+scoped_ptr<StreamHandle> Stream::CreateHandle(
+ const GURL& original_url,
+ const std::string& mime_type,
+ scoped_refptr<net::HttpResponseHeaders> response_headers) {
CHECK(!stream_handle_);
stream_handle_ = new StreamHandleImpl(weak_ptr_factory_.GetWeakPtr(),
original_url,
- mime_type);
+ mime_type,
+ response_headers);
return scoped_ptr<StreamHandle>(stream_handle_).Pass();
}
diff --git a/chromium/content/browser/streams/stream.h b/chromium/content/browser/streams/stream.h
index 3937f5b9e38..e7e9586ca96 100644
--- a/chromium/content/browser/streams/stream.h
+++ b/chromium/content/browser/streams/stream.h
@@ -13,6 +13,7 @@
#include "url/gurl.h"
namespace net {
+class HttpResponseHeaders;
class IOBuffer;
}
@@ -77,8 +78,10 @@ class CONTENT_EXPORT Stream : public base::RefCountedThreadSafe<Stream> {
// and STREAM_COMPLETE if the stream is finalized and all data has been read.
StreamState ReadRawData(net::IOBuffer* buf, int buf_size, int* bytes_read);
- scoped_ptr<StreamHandle> CreateHandle(const GURL& original_url,
- const std::string& mime_type);
+ scoped_ptr<StreamHandle> CreateHandle(
+ const GURL& original_url,
+ const std::string& mime_type,
+ scoped_refptr<net::HttpResponseHeaders> response_headers);
void CloseHandle();
// Indicates whether there is space in the buffer to add more data.
diff --git a/chromium/content/browser/streams/stream_context.cc b/chromium/content/browser/streams/stream_context.cc
index 44ca0f4a1cd..357e68cae58 100644
--- a/chromium/content/browser/streams/stream_context.cc
+++ b/chromium/content/browser/streams/stream_context.cc
@@ -7,6 +7,7 @@
#include "base/bind.h"
#include "content/browser/streams/stream_registry.h"
#include "content/public/browser/browser_context.h"
+#include "content/public/browser/browser_thread.h"
using base::UserDataAdapter;
diff --git a/chromium/content/browser/streams/stream_context.h b/chromium/content/browser/streams/stream_context.h
index fb6cdc720ff..ad8f65cb638 100644
--- a/chromium/content/browser/streams/stream_context.h
+++ b/chromium/content/browser/streams/stream_context.h
@@ -9,7 +9,6 @@
#include "base/memory/scoped_ptr.h"
#include "base/sequenced_task_runner_helpers.h"
#include "content/common/content_export.h"
-#include "content/public/browser/browser_thread.h"
namespace content {
class BrowserContext;
diff --git a/chromium/content/browser/streams/stream_handle_impl.cc b/chromium/content/browser/streams/stream_handle_impl.cc
index d9f877cbc76..6ff49621b57 100644
--- a/chromium/content/browser/streams/stream_handle_impl.cc
+++ b/chromium/content/browser/streams/stream_handle_impl.cc
@@ -4,23 +4,39 @@
#include "content/browser/streams/stream_handle_impl.h"
+#include "base/bind.h"
+#include "base/location.h"
+#include "base/message_loop/message_loop_proxy.h"
#include "content/browser/streams/stream.h"
-#include "content/public/browser/browser_thread.h"
+#include "net/http/http_response_headers.h"
namespace content {
-StreamHandleImpl::StreamHandleImpl(const base::WeakPtr<Stream>& stream,
- const GURL& original_url,
- const std::string& mime_type)
+namespace {
+
+void RunCloseListeners(const std::vector<base::Closure>& close_listeners) {
+ for (size_t i = 0; i < close_listeners.size(); ++i)
+ close_listeners[i].Run();
+}
+
+} // namespace
+
+StreamHandleImpl::StreamHandleImpl(
+ const base::WeakPtr<Stream>& stream,
+ const GURL& original_url,
+ const std::string& mime_type,
+ scoped_refptr<net::HttpResponseHeaders> response_headers)
: stream_(stream),
url_(stream->url()),
original_url_(original_url),
mime_type_(mime_type),
+ response_headers_(response_headers),
stream_message_loop_(base::MessageLoopProxy::current().get()) {}
StreamHandleImpl::~StreamHandleImpl() {
- stream_message_loop_->PostTask(FROM_HERE,
- base::Bind(&Stream::CloseHandle, stream_));
+ stream_message_loop_->PostTaskAndReply(FROM_HERE,
+ base::Bind(&Stream::CloseHandle, stream_),
+ base::Bind(&RunCloseListeners, close_listeners_));
}
const GURL& StreamHandleImpl::GetURL() {
@@ -35,4 +51,12 @@ const std::string& StreamHandleImpl::GetMimeType() {
return mime_type_;
}
+scoped_refptr<net::HttpResponseHeaders> StreamHandleImpl::GetResponseHeaders() {
+ return response_headers_;
+}
+
+void StreamHandleImpl::AddCloseListener(const base::Closure& callback) {
+ close_listeners_.push_back(callback);
+}
+
} // namespace content
diff --git a/chromium/content/browser/streams/stream_handle_impl.h b/chromium/content/browser/streams/stream_handle_impl.h
index aabd0cb7dfe..dc64dade6da 100644
--- a/chromium/content/browser/streams/stream_handle_impl.h
+++ b/chromium/content/browser/streams/stream_handle_impl.h
@@ -5,11 +5,16 @@
#ifndef CONTENT_BROWSER_STREAMS_STREAM_HANDLE_IMPL_H_
#define CONTENT_BROWSER_STREAMS_STREAM_HANDLE_IMPL_H_
+#include <vector>
+
#include "base/memory/weak_ptr.h"
-#include "base/message_loop/message_loop_proxy.h"
#include "base/synchronization/lock.h"
#include "content/public/browser/stream_handle.h"
+namespace base {
+class MessageLoopProxy;
+}
+
namespace content {
class Stream;
@@ -18,7 +23,8 @@ class StreamHandleImpl : public StreamHandle {
public:
StreamHandleImpl(const base::WeakPtr<Stream>& stream,
const GURL& original_url,
- const std::string& mime_type);
+ const std::string& mime_type,
+ scoped_refptr<net::HttpResponseHeaders> response_headers);
virtual ~StreamHandleImpl();
private:
@@ -26,12 +32,16 @@ class StreamHandleImpl : public StreamHandle {
virtual const GURL& GetURL() OVERRIDE;
virtual const GURL& GetOriginalURL() OVERRIDE;
virtual const std::string& GetMimeType() OVERRIDE;
+ virtual scoped_refptr<net::HttpResponseHeaders> GetResponseHeaders() OVERRIDE;
+ virtual void AddCloseListener(const base::Closure& callback) OVERRIDE;
base::WeakPtr<Stream> stream_;
GURL url_;
GURL original_url_;
std::string mime_type_;
+ scoped_refptr<net::HttpResponseHeaders> response_headers_;
base::MessageLoopProxy* stream_message_loop_;
+ std::vector<base::Closure> close_listeners_;
};
} // namespace content
diff --git a/chromium/content/browser/streams/stream_url_request_job.cc b/chromium/content/browser/streams/stream_url_request_job.cc
index 09b9e6d7815..6d70eefa515 100644
--- a/chromium/content/browser/streams/stream_url_request_job.cc
+++ b/chromium/content/browser/streams/stream_url_request_job.cc
@@ -226,7 +226,7 @@ void StreamURLRequestJob::HeadersCompleted(net::HttpStatusCode status_code) {
if (status_code == net::HTTP_OK) {
std::string content_type_header(net::HttpRequestHeaders::kContentType);
content_type_header.append(": ");
- content_type_header.append("plain/text");
+ content_type_header.append("text/plain");
headers->AddHeader(content_type_header);
}
diff --git a/chromium/content/browser/streams/stream_url_request_job_unittest.cc b/chromium/content/browser/streams/stream_url_request_job_unittest.cc
index d3378032080..035a588bc96 100644
--- a/chromium/content/browser/streams/stream_url_request_job_unittest.cc
+++ b/chromium/content/browser/streams/stream_url_request_job_unittest.cc
@@ -51,7 +51,7 @@ class StreamURLRequestJobTest : public testing::Test {
StreamRegistry* registry_;
};
- StreamURLRequestJobTest() : message_loop_(base::MessageLoop::TYPE_IO) {}
+ StreamURLRequestJobTest() {}
virtual void SetUp() {
registry_.reset(new StreamRegistry());
@@ -76,7 +76,7 @@ class StreamURLRequestJobTest : public testing::Test {
const std::string& expected_response) {
net::TestDelegate delegate;
request_ = url_request_context_.CreateRequest(
- url, net::DEFAULT_PRIORITY, &delegate);
+ url, net::DEFAULT_PRIORITY, &delegate, NULL);
request_->set_method(method);
if (!extra_headers.IsEmpty())
request_->SetExtraRequestHeaders(extra_headers);
@@ -93,7 +93,7 @@ class StreamURLRequestJobTest : public testing::Test {
}
protected:
- base::MessageLoop message_loop_;
+ base::MessageLoopForIO message_loop_;
scoped_ptr<StreamRegistry> registry_;
net::URLRequestContext url_request_context_;
@@ -134,7 +134,7 @@ TEST_F(StreamURLRequestJobTest, TestGetLargeStreamRequest) {
TEST_F(StreamURLRequestJobTest, TestGetNonExistentStreamRequest) {
net::TestDelegate delegate;
request_ = url_request_context_.CreateRequest(
- kStreamURL, net::DEFAULT_PRIORITY, &delegate);
+ kStreamURL, net::DEFAULT_PRIORITY, &delegate, NULL);
request_->set_method("GET");
request_->Start();