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