summaryrefslogtreecommitdiffstats
path: root/net/base
diff options
context:
space:
mode:
Diffstat (limited to 'net/base')
-rw-r--r--net/base/upload_data.cc18
-rw-r--r--net/base/upload_data.h15
-rw-r--r--net/base/upload_data_stream.cc8
-rw-r--r--net/base/upload_data_stream_unittest.cc24
-rw-r--r--net/base/upload_element.h2
5 files changed, 23 insertions, 44 deletions
diff --git a/net/base/upload_data.cc b/net/base/upload_data.cc
index c8f2be3..91923a5 100644
--- a/net/base/upload_data.cc
+++ b/net/base/upload_data.cc
@@ -20,8 +20,8 @@ UploadData::UploadData()
void UploadData::AppendBytes(const char* bytes, int bytes_len) {
DCHECK(!is_chunked_);
if (bytes_len > 0) {
- elements_.push_back(UploadElement());
- elements_.back().SetToBytes(bytes, bytes_len);
+ elements_.push_back(new UploadElement());
+ elements_.back()->SetToBytes(bytes, bytes_len);
}
}
@@ -29,9 +29,9 @@ void UploadData::AppendFileRange(const FilePath& file_path,
uint64 offset, uint64 length,
const base::Time& expected_modification_time) {
DCHECK(!is_chunked_);
- elements_.push_back(UploadElement());
- elements_.back().SetToFilePathRange(file_path, offset, length,
- expected_modification_time);
+ elements_.push_back(new UploadElement());
+ elements_.back()->SetToFilePathRange(file_path, offset, length,
+ expected_modification_time);
}
void UploadData::AppendChunk(const char* bytes,
@@ -39,8 +39,8 @@ void UploadData::AppendChunk(const char* bytes,
bool is_last_chunk) {
DCHECK(is_chunked_);
DCHECK(!last_chunk_appended_);
- elements_.push_back(UploadElement());
- elements_.back().SetToBytes(bytes, bytes_len);
+ elements_.push_back(new UploadElement());
+ elements_.back()->SetToBytes(bytes, bytes_len);
last_chunk_appended_ = is_last_chunk;
if (!chunk_callback_.is_null())
chunk_callback_.Run();
@@ -50,10 +50,6 @@ void UploadData::set_chunk_callback(const base::Closure& callback) {
chunk_callback_ = callback;
}
-void UploadData::SetElements(const std::vector<UploadElement>& elements) {
- elements_ = elements;
-}
-
UploadData::~UploadData() {
}
diff --git a/net/base/upload_data.h b/net/base/upload_data.h
index d541ce4..2f0494c 100644
--- a/net/base/upload_data.h
+++ b/net/base/upload_data.h
@@ -5,11 +5,10 @@
#ifndef NET_BASE_UPLOAD_DATA_H_
#define NET_BASE_UPLOAD_DATA_H_
-#include <vector>
-
#include "base/basictypes.h"
#include "base/callback.h"
#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_vector.h"
#include "base/supports_user_data.h"
#include "net/base/net_export.h"
#include "net/base/upload_element.h"
@@ -61,17 +60,15 @@ class NET_EXPORT UploadData
void set_last_chunk_appended(bool set) { last_chunk_appended_ = set; }
bool last_chunk_appended() const { return last_chunk_appended_; }
- const std::vector<UploadElement>* elements() const {
- return &elements_;
+ const ScopedVector<UploadElement>& elements() const {
+ return elements_;
}
- std::vector<UploadElement>* elements_mutable() {
+ ScopedVector<UploadElement>* elements_mutable() {
return &elements_;
}
- void SetElements(const std::vector<UploadElement>& elements);
-
- void swap_elements(std::vector<UploadElement>* elements) {
+ void swap_elements(ScopedVector<UploadElement>* elements) {
elements_.swap(*elements);
}
@@ -86,7 +83,7 @@ class NET_EXPORT UploadData
virtual ~UploadData();
- std::vector<UploadElement> elements_;
+ ScopedVector<UploadElement> elements_;
int64 identifier_;
base::Closure chunk_callback_;
bool is_chunked_;
diff --git a/net/base/upload_data_stream.cc b/net/base/upload_data_stream.cc
index 3cc85f1..8398cd1 100644
--- a/net/base/upload_data_stream.cc
+++ b/net/base/upload_data_stream.cc
@@ -27,9 +27,9 @@ UploadDataStream::UploadDataStream(UploadData* upload_data)
initialized_successfully_(false),
weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
weak_ptr_factory_for_chunks_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
- const std::vector<UploadElement>& elements = *upload_data_->elements();
+ const ScopedVector<UploadElement>& elements = upload_data_->elements();
for (size_t i = 0; i < elements.size(); ++i)
- element_readers_.push_back(UploadElementReader::Create(elements[i]));
+ element_readers_.push_back(UploadElementReader::Create(*elements[i]));
upload_data_->set_chunk_callback(
base::Bind(&UploadDataStream::OnChunkAvailable,
@@ -241,13 +241,13 @@ void UploadDataStream::OnChunkAvailable() {
DCHECK(is_chunked());
// Initialize a reader for the newly appended chunk.
- const std::vector<UploadElement>& elements = *upload_data_->elements();
+ const ScopedVector<UploadElement>& elements = upload_data_->elements();
DCHECK_EQ(elements.size(), element_readers_.size() + 1);
// We can initialize the reader synchronously here because only bytes can be
// appended for chunked data. We leave |total_size_| at zero, since for
// chunked uploads, we may not know the total size.
- const UploadElement& element = elements.back();
+ const UploadElement& element = *elements.back();
DCHECK_EQ(UploadElement::TYPE_BYTES, element.type());
UploadElementReader* reader = UploadElementReader::Create(element);
const int rv = reader->InitSync();
diff --git a/net/base/upload_data_stream_unittest.cc b/net/base/upload_data_stream_unittest.cc
index 3c77804..afd1fb5 100644
--- a/net/base/upload_data_stream_unittest.cc
+++ b/net/base/upload_data_stream_unittest.cc
@@ -177,11 +177,7 @@ TEST_F(UploadDataStreamTest, File) {
ASSERT_EQ(static_cast<int>(kTestDataSize),
file_util::WriteFile(temp_file_path, kTestData, kTestDataSize));
- std::vector<UploadElement> elements;
- UploadElement element;
- element.SetToFilePath(temp_file_path);
- elements.push_back(element);
- upload_data_->SetElements(elements);
+ upload_data_->AppendFileRange(temp_file_path, 0, kuint64max, base::Time());
UploadDataStream stream(upload_data_);
ASSERT_EQ(OK, stream.InitSync());
@@ -209,11 +205,7 @@ TEST_F(UploadDataStreamTest, FileSmallerThanLength) {
UploadFileElementReader::ScopedOverridingContentLengthForTests
overriding_content_length(kFakeSize);
- std::vector<UploadElement> elements;
- UploadElement element;
- element.SetToFilePath(temp_file_path);
- elements.push_back(element);
- upload_data_->SetElements(elements);
+ upload_data_->AppendFileRange(temp_file_path, 0, kuint64max, base::Time());
UploadDataStream stream(upload_data_);
ASSERT_EQ(OK, stream.InitSync());
@@ -442,14 +434,10 @@ TEST_F(UploadDataStreamTest, ReadAsync) {
void UploadDataStreamTest::FileChangedHelper(const FilePath& file_path,
const base::Time& time,
bool error_expected) {
- std::vector<UploadElement> elements;
- UploadElement element;
- element.SetToFilePathRange(file_path, 1, 2, time);
- elements.push_back(element);
// Don't use upload_data_ here, as this function is called twice, and
// reusing upload_data_ is wrong.
scoped_refptr<UploadData> upload_data(new UploadData);
- upload_data->SetElements(elements);
+ upload_data->AppendFileRange(file_path, 1, 2, time);
UploadDataStream stream(upload_data);
int error_code = stream.InitSync();
@@ -486,11 +474,7 @@ TEST_F(UploadDataStreamTest, UploadDataReused) {
file_util::WriteFile(temp_file_path, kTestData, kTestDataSize));
// Prepare |upload_data_| that contains a file.
- std::vector<UploadElement> elements;
- UploadElement element;
- element.SetToFilePath(temp_file_path);
- elements.push_back(element);
- upload_data_->SetElements(elements);
+ upload_data_->AppendFileRange(temp_file_path, 0, kuint64max, base::Time());
// Confirm that the file is read properly.
{
diff --git a/net/base/upload_element.h b/net/base/upload_element.h
index 96e065e..1e7a7fd 100644
--- a/net/base/upload_element.h
+++ b/net/base/upload_element.h
@@ -77,6 +77,8 @@ class NET_EXPORT UploadElement {
uint64 file_range_offset_;
uint64 file_range_length_;
base::Time expected_file_modification_time_;
+
+ DISALLOW_COPY_AND_ASSIGN(UploadElement);
};
#if defined(UNIT_TEST)