Index: content/browser/streams/stream.cc |
=================================================================== |
--- content/browser/streams/stream.cc (revision 187273) |
+++ content/browser/streams/stream.cc (working copy) |
@@ -1,113 +0,0 @@ |
-// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "content/browser/streams/stream.h" |
- |
-#include "base/bind.h" |
-#include "base/message_loop_proxy.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" |
- |
-namespace { |
-// Start throttling the connection at about 1MB. |
-const size_t kDeferSizeThreshold = 40 * 32768; |
-} |
- |
-namespace content { |
- |
-Stream::Stream(StreamRegistry* registry, |
- StreamWriteObserver* write_observer, |
- const GURL& security_origin, |
- const GURL& url) |
- : bytes_read_(0), |
- can_add_data_(true), |
- security_origin_(security_origin), |
- url_(url), |
- data_length_(0), |
- registry_(registry), |
- read_observer_(NULL), |
- write_observer_(write_observer) { |
- CreateByteStream(base::MessageLoopProxy::current(), |
- base::MessageLoopProxy::current(), |
- kDeferSizeThreshold, |
- &writer_, |
- &reader_); |
- |
- // Setup callback for writing. |
- writer_->RegisterCallback(base::Bind(&Stream::OnSpaceAvailable, this)); |
- reader_->RegisterCallback(base::Bind(&Stream::OnDataAvailable, this)); |
- |
- registry_->RegisterStream(this); |
-} |
- |
-Stream::~Stream() { |
-} |
- |
-bool Stream::SetReadObserver(StreamReadObserver* observer) { |
- if (read_observer_) |
- return false; |
- read_observer_ = observer; |
- return true; |
-} |
- |
-void Stream::RemoveReadObserver(StreamReadObserver* observer) { |
- DCHECK(observer == read_observer_); |
- read_observer_ = NULL; |
-} |
- |
-void Stream::AddData(scoped_refptr<net::IOBuffer> buffer, size_t size) { |
- can_add_data_ = writer_->Write(buffer, size); |
-} |
- |
-void Stream::Finalize() { |
- writer_->Close(DOWNLOAD_INTERRUPT_REASON_NONE); |
- writer_.reset(NULL); |
- |
- OnDataAvailable(); |
-} |
- |
-Stream::StreamState Stream::ReadRawData(net::IOBuffer* buf, |
- int buf_size, |
- int* bytes_read) { |
- if (!data_) { |
- data_length_ = 0; |
- bytes_read_ = 0; |
- ByteStreamReader::StreamState state = reader_->Read(&data_, &data_length_); |
- switch (state) { |
- case ByteStreamReader::STREAM_HAS_DATA: |
- break; |
- case ByteStreamReader::STREAM_COMPLETE: |
- registry_->UnregisterStream(url()); |
- return STREAM_COMPLETE; |
- case ByteStreamReader::STREAM_EMPTY: |
- return STREAM_EMPTY; |
- } |
- } |
- |
- size_t remaining_bytes = data_length_ - bytes_read_; |
- size_t to_read = |
- static_cast<size_t>(buf_size) < remaining_bytes ? |
- buf_size : remaining_bytes; |
- memcpy(buf->data(), data_->data() + bytes_read_, to_read); |
- bytes_read_ += to_read; |
- if (bytes_read_ >= data_length_) |
- data_ = NULL; |
- |
- *bytes_read = to_read; |
- return STREAM_HAS_DATA; |
-} |
- |
-void Stream::OnSpaceAvailable() { |
- can_add_data_ = true; |
- write_observer_->OnSpaceAvailable(this); |
-} |
- |
-void Stream::OnDataAvailable() { |
- read_observer_->OnDataAvailable(this); |
-} |
- |
-} // namespace content |
- |