Index: content/browser/streams/stream_handle_impl.cc |
diff --git a/content/browser/streams/stream_handle_impl.cc b/content/browser/streams/stream_handle_impl.cc |
index d13bdc6a710ec28d85d7ca2cfbc2e38ad2288e06..6ff49621b57f10744cc10fe875906da362bc97ca 100644 |
--- a/content/browser/streams/stream_handle_impl.cc |
+++ b/content/browser/streams/stream_handle_impl.cc |
@@ -12,6 +12,15 @@ |
namespace content { |
+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, |
@@ -25,8 +34,9 @@ StreamHandleImpl::StreamHandleImpl( |
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() { |
@@ -45,4 +55,8 @@ scoped_refptr<net::HttpResponseHeaders> StreamHandleImpl::GetResponseHeaders() { |
return response_headers_; |
} |
+void StreamHandleImpl::AddCloseListener(const base::Closure& callback) { |
+ close_listeners_.push_back(callback); |
+} |
+ |
} // namespace content |