diff options
author | hashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-14 06:35:52 +0000 |
---|---|---|
committer | hashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-14 06:35:52 +0000 |
commit | b1064d692d5f1d56877d0b1eb0b38920115227ba (patch) | |
tree | 6145df9c1a9d94bf5879cbdbf03cb9fcab4211c7 /net/base/upload_data.cc | |
parent | ca0206c7aba32aa151c94514a0456a6c58252fb5 (diff) | |
download | chromium_src-b1064d692d5f1d56877d0b1eb0b38920115227ba.zip chromium_src-b1064d692d5f1d56877d0b1eb0b38920115227ba.tar.gz chromium_src-b1064d692d5f1d56877d0b1eb0b38920115227ba.tar.bz2 |
net: Change type of UploadData::elements from std::vector to ScopedVector
Using std::vector to hold UploadElement is bad for two reasons:
1. It results in a lot of unnecessary copy of uploaded data.
2. Appending new chunks may result in invalidating the pointer held by UploadBytesElementReader.
BUG=160028
TEST=git try
TBR=ananta@chromium.org, tony@chromium.org
Review URL: https://chromiumcodereview.appspot.com/11275223
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@167611 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base/upload_data.cc')
-rw-r--r-- | net/base/upload_data.cc | 18 |
1 files changed, 7 insertions, 11 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() { } |