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 |