| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/streams/stream.h" | 5 #include "content/browser/streams/stream.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/location.h" | 8 #include "base/location.h" |
| 9 #include "base/single_thread_task_runner.h" | 9 #include "base/message_loop/message_loop_proxy.h" |
| 10 #include "base/thread_task_runner_handle.h" | |
| 11 #include "base/values.h" | 10 #include "base/values.h" |
| 12 #include "content/browser/streams/stream_handle_impl.h" | 11 #include "content/browser/streams/stream_handle_impl.h" |
| 13 #include "content/browser/streams/stream_read_observer.h" | 12 #include "content/browser/streams/stream_read_observer.h" |
| 14 #include "content/browser/streams/stream_registry.h" | 13 #include "content/browser/streams/stream_registry.h" |
| 15 #include "content/browser/streams/stream_write_observer.h" | 14 #include "content/browser/streams/stream_write_observer.h" |
| 16 #include "net/base/io_buffer.h" | 15 #include "net/base/io_buffer.h" |
| 17 #include "net/http/http_response_headers.h" | 16 #include "net/http/http_response_headers.h" |
| 18 | 17 |
| 19 namespace { | 18 namespace { |
| 20 // Start throttling the connection at about 1MB. | 19 // Start throttling the connection at about 1MB. |
| 21 const size_t kDeferSizeThreshold = 40 * 32768; | 20 const size_t kDeferSizeThreshold = 40 * 32768; |
| 22 } | 21 } |
| 23 | 22 |
| 24 namespace content { | 23 namespace content { |
| 25 | 24 |
| 26 Stream::Stream(StreamRegistry* registry, | 25 Stream::Stream(StreamRegistry* registry, |
| 27 StreamWriteObserver* write_observer, | 26 StreamWriteObserver* write_observer, |
| 28 const GURL& url) | 27 const GURL& url) |
| 29 : can_add_data_(true), | 28 : can_add_data_(true), |
| 30 url_(url), | 29 url_(url), |
| 31 data_length_(0), | 30 data_length_(0), |
| 32 data_bytes_read_(0), | 31 data_bytes_read_(0), |
| 33 last_total_buffered_bytes_(0), | 32 last_total_buffered_bytes_(0), |
| 34 registry_(registry), | 33 registry_(registry), |
| 35 read_observer_(NULL), | 34 read_observer_(NULL), |
| 36 write_observer_(write_observer), | 35 write_observer_(write_observer), |
| 37 stream_handle_(NULL), | 36 stream_handle_(NULL), |
| 38 weak_ptr_factory_(this) { | 37 weak_ptr_factory_(this) { |
| 39 CreateByteStream(base::ThreadTaskRunnerHandle::Get(), | 38 CreateByteStream(base::MessageLoopProxy::current(), |
| 40 base::ThreadTaskRunnerHandle::Get(), kDeferSizeThreshold, | 39 base::MessageLoopProxy::current(), |
| 41 &writer_, &reader_); | 40 kDeferSizeThreshold, |
| 41 &writer_, |
| 42 &reader_); |
| 42 | 43 |
| 43 // Setup callback for writing. | 44 // Setup callback for writing. |
| 44 writer_->RegisterCallback(base::Bind(&Stream::OnSpaceAvailable, | 45 writer_->RegisterCallback(base::Bind(&Stream::OnSpaceAvailable, |
| 45 weak_ptr_factory_.GetWeakPtr())); | 46 weak_ptr_factory_.GetWeakPtr())); |
| 46 reader_->RegisterCallback(base::Bind(&Stream::OnDataAvailable, | 47 reader_->RegisterCallback(base::Bind(&Stream::OnDataAvailable, |
| 47 weak_ptr_factory_.GetWeakPtr())); | 48 weak_ptr_factory_.GetWeakPtr())); |
| 48 | 49 |
| 49 registry_->RegisterStream(this); | 50 registry_->RegisterStream(this); |
| 50 } | 51 } |
| 51 | 52 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 114 } | 115 } |
| 115 | 116 |
| 116 void Stream::Finalize() { | 117 void Stream::Finalize() { |
| 117 if (!writer_.get()) | 118 if (!writer_.get()) |
| 118 return; | 119 return; |
| 119 | 120 |
| 120 writer_->Close(0); | 121 writer_->Close(0); |
| 121 writer_.reset(); | 122 writer_.reset(); |
| 122 | 123 |
| 123 // Continue asynchronously. | 124 // Continue asynchronously. |
| 124 base::ThreadTaskRunnerHandle::Get()->PostTask( | 125 base::MessageLoopProxy::current()->PostTask( |
| 125 FROM_HERE, | 126 FROM_HERE, |
| 126 base::Bind(&Stream::OnDataAvailable, weak_ptr_factory_.GetWeakPtr())); | 127 base::Bind(&Stream::OnDataAvailable, weak_ptr_factory_.GetWeakPtr())); |
| 127 } | 128 } |
| 128 | 129 |
| 129 Stream::StreamState Stream::ReadRawData(net::IOBuffer* buf, | 130 Stream::StreamState Stream::ReadRawData(net::IOBuffer* buf, |
| 130 int buf_size, | 131 int buf_size, |
| 131 int* bytes_read) { | 132 int* bytes_read) { |
| 132 DCHECK(buf); | 133 DCHECK(buf); |
| 133 DCHECK(bytes_read); | 134 DCHECK(bytes_read); |
| 134 | 135 |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 193 read_observer_->OnDataAvailable(this); | 194 read_observer_->OnDataAvailable(this); |
| 194 } | 195 } |
| 195 | 196 |
| 196 void Stream::ClearBuffer() { | 197 void Stream::ClearBuffer() { |
| 197 data_ = NULL; | 198 data_ = NULL; |
| 198 data_length_ = 0; | 199 data_length_ = 0; |
| 199 data_bytes_read_ = 0; | 200 data_bytes_read_ = 0; |
| 200 } | 201 } |
| 201 | 202 |
| 202 } // namespace content | 203 } // namespace content |
| OLD | NEW |