Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(52)

Side by Side Diff: net/base/elements_upload_data_stream.cc

Issue 1476443002: Remove ScopedVector from ElementsUploadDataStream (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "net/base/elements_upload_data_stream.h" 5 #include "net/base/elements_upload_data_stream.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "net/base/completion_callback.h" 9 #include "net/base/completion_callback.h"
10 #include "net/base/io_buffer.h" 10 #include "net/base/io_buffer.h"
11 #include "net/base/net_errors.h" 11 #include "net/base/net_errors.h"
12 #include "net/base/upload_bytes_element_reader.h" 12 #include "net/base/upload_bytes_element_reader.h"
13 #include "net/base/upload_element_reader.h" 13 #include "net/base/upload_element_reader.h"
14 14
15 namespace net { 15 namespace net {
16 16
17 ElementsUploadDataStream::ElementsUploadDataStream( 17 ElementsUploadDataStream::ElementsUploadDataStream(
18 ScopedVector<UploadElementReader> element_readers, 18 std::vector<scoped_ptr<UploadElementReader>> element_readers,
19 int64_t identifier) 19 int64_t identifier)
20 : UploadDataStream(false, identifier), 20 : UploadDataStream(false, identifier),
21 element_readers_(element_readers.Pass()), 21 element_readers_(std::move(element_readers)),
22 element_index_(0), 22 element_index_(0),
23 read_failed_(false), 23 read_failed_(false),
24 weak_ptr_factory_(this) { 24 weak_ptr_factory_(this) {}
25 }
26 25
27 ElementsUploadDataStream::~ElementsUploadDataStream() { 26 ElementsUploadDataStream::~ElementsUploadDataStream() {
28 } 27 }
29 28
30 scoped_ptr<UploadDataStream> ElementsUploadDataStream::CreateWithReader( 29 scoped_ptr<UploadDataStream> ElementsUploadDataStream::CreateWithReader(
31 scoped_ptr<UploadElementReader> reader, 30 scoped_ptr<UploadElementReader> reader,
32 int64_t identifier) { 31 int64_t identifier) {
33 ScopedVector<UploadElementReader> readers; 32 std::vector<scoped_ptr<UploadElementReader>> readers;
34 readers.push_back(reader.Pass()); 33 readers.push_back(std::move(reader));
35 return scoped_ptr<UploadDataStream>( 34 return scoped_ptr<UploadDataStream>(
36 new ElementsUploadDataStream(readers.Pass(), identifier)); 35 new ElementsUploadDataStream(std::move(readers), identifier));
37 } 36 }
38 37
39 int ElementsUploadDataStream::InitInternal() { 38 int ElementsUploadDataStream::InitInternal() {
40 return InitElements(0); 39 return InitElements(0);
41 } 40 }
42 41
43 int ElementsUploadDataStream::ReadInternal( 42 int ElementsUploadDataStream::ReadInternal(
44 IOBuffer* buf, 43 IOBuffer* buf,
45 int buf_len) { 44 int buf_len) {
46 DCHECK_GT(buf_len, 0); 45 DCHECK_GT(buf_len, 0);
47 return ReadElements(new DrainableIOBuffer(buf, buf_len)); 46 return ReadElements(new DrainableIOBuffer(buf, buf_len));
48 } 47 }
49 48
50 bool ElementsUploadDataStream::IsInMemory() const { 49 bool ElementsUploadDataStream::IsInMemory() const {
51 for (size_t i = 0; i < element_readers_.size(); ++i) { 50 for (const scoped_ptr<UploadElementReader>& it : element_readers_) {
52 if (!element_readers_[i]->IsInMemory()) 51 if (!it->IsInMemory())
53 return false; 52 return false;
54 } 53 }
55 return true; 54 return true;
56 } 55 }
57 56
58 const ScopedVector<UploadElementReader>* 57 const std::vector<scoped_ptr<UploadElementReader>>*
59 ElementsUploadDataStream::GetElementReaders() const { 58 ElementsUploadDataStream::GetElementReaders() const {
60 return &element_readers_; 59 return &element_readers_;
61 } 60 }
62 61
63 void ElementsUploadDataStream::ResetInternal() { 62 void ElementsUploadDataStream::ResetInternal() {
64 weak_ptr_factory_.InvalidateWeakPtrs(); 63 weak_ptr_factory_.InvalidateWeakPtrs();
65 read_failed_ = false; 64 read_failed_ = false;
66 element_index_ = 0; 65 element_index_ = 0;
67 } 66 }
68 67
69 int ElementsUploadDataStream::InitElements(size_t start_index) { 68 int ElementsUploadDataStream::InitElements(size_t start_index) {
70 // Call Init() for all elements. 69 // Call Init() for all elements.
71 for (size_t i = start_index; i < element_readers_.size(); ++i) { 70 for (size_t i = start_index; i < element_readers_.size(); ++i) {
72 UploadElementReader* reader = element_readers_[i]; 71 UploadElementReader* reader = element_readers_[i].get();
73 // When new_result is ERR_IO_PENDING, InitInternal() will be called 72 // When new_result is ERR_IO_PENDING, InitInternal() will be called
74 // with start_index == i + 1 when reader->Init() finishes. 73 // with start_index == i + 1 when reader->Init() finishes.
75 int result = reader->Init( 74 int result = reader->Init(
76 base::Bind(&ElementsUploadDataStream::OnInitElementCompleted, 75 base::Bind(&ElementsUploadDataStream::OnInitElementCompleted,
77 weak_ptr_factory_.GetWeakPtr(), 76 weak_ptr_factory_.GetWeakPtr(),
78 i)); 77 i));
79 DCHECK(result != ERR_IO_PENDING || !reader->IsInMemory()); 78 DCHECK(result != ERR_IO_PENDING || !reader->IsInMemory());
80 DCHECK_LE(result, OK); 79 DCHECK_LE(result, OK);
81 if (result != OK) 80 if (result != OK)
82 return result; 81 return result;
83 } 82 }
84 83
85 uint64_t total_size = 0; 84 uint64_t total_size = 0;
86 for (size_t i = 0; i < element_readers_.size(); ++i) { 85 for (const scoped_ptr<UploadElementReader>& it : element_readers_) {
87 total_size += element_readers_[i]->GetContentLength(); 86 total_size += it->GetContentLength();
88 } 87 }
89 SetSize(total_size); 88 SetSize(total_size);
90 return OK; 89 return OK;
91 } 90 }
92 91
93 void ElementsUploadDataStream::OnInitElementCompleted(size_t index, 92 void ElementsUploadDataStream::OnInitElementCompleted(size_t index,
94 int result) { 93 int result) {
95 DCHECK_NE(ERR_IO_PENDING, result); 94 DCHECK_NE(ERR_IO_PENDING, result);
96 95
97 // Check the last result. 96 // Check the last result.
98 if (result == OK) 97 if (result == OK)
99 result = InitElements(index + 1); 98 result = InitElements(index + 1);
100 99
101 if (result != ERR_IO_PENDING) 100 if (result != ERR_IO_PENDING)
102 OnInitCompleted(result); 101 OnInitCompleted(result);
103 } 102 }
104 103
105 int ElementsUploadDataStream::ReadElements( 104 int ElementsUploadDataStream::ReadElements(
106 const scoped_refptr<DrainableIOBuffer>& buf) { 105 const scoped_refptr<DrainableIOBuffer>& buf) {
107 while (!read_failed_ && element_index_ < element_readers_.size()) { 106 while (!read_failed_ && element_index_ < element_readers_.size()) {
108 UploadElementReader* reader = element_readers_[element_index_]; 107 UploadElementReader* reader = element_readers_[element_index_].get();
109 108
110 if (reader->BytesRemaining() == 0) { 109 if (reader->BytesRemaining() == 0) {
111 ++element_index_; 110 ++element_index_;
112 continue; 111 continue;
113 } 112 }
114 113
115 if (buf->BytesRemaining() == 0) 114 if (buf->BytesRemaining() == 0)
116 break; 115 break;
117 116
118 int result = reader->Read( 117 int result = reader->Read(
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 DCHECK(!read_failed_); 156 DCHECK(!read_failed_);
158 157
159 if (result >= 0) { 158 if (result >= 0) {
160 buf->DidConsume(result); 159 buf->DidConsume(result);
161 } else { 160 } else {
162 read_failed_ = true; 161 read_failed_ = true;
163 } 162 }
164 } 163 }
165 164
166 } // namespace net 165 } // namespace net
OLDNEW
« no previous file with comments | « net/base/elements_upload_data_stream.h ('k') | net/base/elements_upload_data_stream_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698