Index: chrome_frame/urlmon_upload_data_stream.cc |
diff --git a/chrome_frame/urlmon_upload_data_stream.cc b/chrome_frame/urlmon_upload_data_stream.cc |
deleted file mode 100644 |
index 2fe2ed0b71f0d1a26ecbb7380d6b628f330055a3..0000000000000000000000000000000000000000 |
--- a/chrome_frame/urlmon_upload_data_stream.cc |
+++ /dev/null |
@@ -1,153 +0,0 @@ |
-// Copyright (c) 2012 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 "chrome_frame/urlmon_upload_data_stream.h" |
- |
-#include "net/base/io_buffer.h" |
-#include "net/base/net_errors.h" |
-#include "net/base/upload_bytes_element_reader.h" |
-#include "net/base/upload_file_element_reader.h" |
- |
-namespace { |
- |
-// Creates UploadDataStream from UploadData. |
-net::UploadDataStream* CreateUploadDataStream(net::UploadData* upload_data) { |
- net::UploadDataStream* upload_data_stream = NULL; |
- const ScopedVector<net::UploadElement>& elements = upload_data->elements(); |
- |
- if (upload_data->is_chunked()) { |
- // Use AppendChunk when data is chunked. |
- upload_data_stream = new net::UploadDataStream( |
- net::UploadDataStream::CHUNKED, upload_data->identifier()); |
- |
- for (size_t i = 0; i < elements.size(); ++i) { |
- const net::UploadElement& element = *elements[i]; |
- const bool is_last_chunk = |
- i == elements.size() - 1 && upload_data->last_chunk_appended(); |
- DCHECK_EQ(net::UploadElement::TYPE_BYTES, element.type()); |
- upload_data_stream->AppendChunk(element.bytes(), element.bytes_length(), |
- is_last_chunk); |
- } |
- } else { |
- // Not chunked. |
- ScopedVector<net::UploadElementReader> element_readers; |
- for (size_t i = 0; i < elements.size(); ++i) { |
- const net::UploadElement& element = *elements[i]; |
- net::UploadElementReader* reader = NULL; |
- switch (element.type()) { |
- case net::UploadElement::TYPE_BYTES: |
- reader = new net::UploadBytesElementReader(element.bytes(), |
- element.bytes_length()); |
- break; |
- case net::UploadElement::TYPE_FILE: |
- reader = new net::UploadFileElementReaderSync( |
- element.file_path(), |
- element.file_range_offset(), |
- element.file_range_length(), |
- element.expected_file_modification_time()); |
- break; |
- } |
- DCHECK(reader); |
- element_readers.push_back(reader); |
- } |
- upload_data_stream = new net::UploadDataStream(element_readers.Pass(), |
- upload_data->identifier()); |
- } |
- return upload_data_stream; |
-} |
- |
-} // namespace |
- |
-bool UrlmonUploadDataStream::Initialize(net::UploadData* upload_data) { |
- upload_data_ = upload_data; |
- request_body_stream_.reset(CreateUploadDataStream(upload_data)); |
- return request_body_stream_->Init(net::CompletionCallback()) == net::OK; |
-} |
- |
-STDMETHODIMP UrlmonUploadDataStream::Read(void* pv, ULONG cb, ULONG* read) { |
- if (pv == NULL) { |
- NOTREACHED(); |
- return E_POINTER; |
- } |
- |
- // Have we already read past the end of the stream? |
- if (request_body_stream_->IsEOF()) { |
- if (read) { |
- *read = 0; |
- } |
- return S_FALSE; |
- } |
- |
- // The data in request_body_stream_ can be smaller than 'cb' so it's not |
- // guaranteed that we'll be able to read total_bytes_to_copy bytes. |
- uint64 total_bytes_to_copy = cb; |
- |
- uint64 bytes_copied = 0; |
- |
- char* write_pointer = reinterpret_cast<char*>(pv); |
- while (bytes_copied < total_bytes_to_copy) { |
- size_t bytes_to_copy_now = total_bytes_to_copy - bytes_copied; |
- |
- scoped_refptr<net::IOBufferWithSize> buf( |
- new net::IOBufferWithSize(bytes_to_copy_now)); |
- int bytes_read = request_body_stream_->Read(buf, buf->size(), |
- net::CompletionCallback()); |
- DCHECK_NE(net::ERR_IO_PENDING, bytes_read); |
- if (bytes_read == 0) // Reached the end of the stream. |
- break; |
- |
- memcpy(write_pointer, buf->data(), bytes_read); |
- |
- // Advance our copy tally |
- bytes_copied += bytes_read; |
- |
- // Advance our write pointer |
- write_pointer += bytes_read; |
- } |
- |
- DCHECK_LE(bytes_copied, total_bytes_to_copy); |
- |
- if (read) { |
- *read = static_cast<ULONG>(bytes_copied); |
- } |
- |
- return S_OK; |
-} |
- |
-STDMETHODIMP UrlmonUploadDataStream::Seek(LARGE_INTEGER move, DWORD origin, |
- ULARGE_INTEGER* new_pos) { |
- // UploadDataStream is really not very seek-able, so for now allow |
- // STREAM_SEEK_SETs to work with a 0 offset, but fail on everything else. |
- if (origin == STREAM_SEEK_SET && move.QuadPart == 0) { |
- if (request_body_stream_->position() != 0) { |
- request_body_stream_.reset(CreateUploadDataStream(upload_data_)); |
- const int result = request_body_stream_->Init(net::CompletionCallback()); |
- DCHECK_EQ(net::OK, result); |
- } |
- if (new_pos) { |
- new_pos->QuadPart = 0; |
- } |
- return S_OK; |
- } |
- |
- DCHECK(false) << __FUNCTION__; |
- return STG_E_INVALIDFUNCTION; |
-} |
- |
-STDMETHODIMP UrlmonUploadDataStream::Stat(STATSTG *stat_stg, |
- DWORD grf_stat_flag) { |
- if (stat_stg == NULL) |
- return E_POINTER; |
- |
- memset(stat_stg, 0, sizeof(STATSTG)); |
- if (0 == (grf_stat_flag & STATFLAG_NONAME)) { |
- const wchar_t kStreamBuffer[] = L"PostStream"; |
- stat_stg->pwcsName = |
- static_cast<wchar_t*>(::CoTaskMemAlloc(sizeof(kStreamBuffer))); |
- lstrcpy(stat_stg->pwcsName, kStreamBuffer); |
- } |
- stat_stg->type = STGTY_STREAM; |
- stat_stg->cbSize.QuadPart = request_body_stream_->size(); |
- return S_OK; |
-} |