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

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

Issue 11778016: net: Stop using base::WorkerPool from UploadFileElementReader (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Stop passing FileSystemContext, just pass TaskRunner Created 7 years, 11 months 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/upload_file_element_reader.h" 5 #include "net/base/upload_file_element_reader.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/task_runner_util.h" 10 #include "base/task_runner_util.h"
11 #include "base/threading/worker_pool.h"
12 #include "net/base/file_stream.h" 11 #include "net/base/file_stream.h"
13 #include "net/base/io_buffer.h" 12 #include "net/base/io_buffer.h"
14 #include "net/base/net_errors.h" 13 #include "net/base/net_errors.h"
15 14
16 namespace net { 15 namespace net {
17 16
18 namespace { 17 namespace {
19 18
20 // In tests, this value is used to override the return value of 19 // In tests, this value is used to override the return value of
21 // UploadFileElementReader::GetContentLength() when set to non-zero. 20 // UploadFileElementReader::GetContentLength() when set to non-zero.
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 DCHECK(file_stream); // file_stream is non-null if content_length_ > 0. 84 DCHECK(file_stream); // file_stream is non-null if content_length_ > 0.
86 result = file_stream->ReadSync(buf->data(), num_bytes_to_read); 85 result = file_stream->ReadSync(buf->data(), num_bytes_to_read);
87 if (result == 0) // Reached end-of-file earlier than expected. 86 if (result == 0) // Reached end-of-file earlier than expected.
88 result = ERR_UPLOAD_FILE_CHANGED; 87 result = ERR_UPLOAD_FILE_CHANGED;
89 } 88 }
90 return result; 89 return result;
91 } 90 }
92 91
93 } // namespace 92 } // namespace
94 93
94 UploadFileElementReader::FileStreamDeleter::FileStreamDeleter(
95 base::TaskRunner* task_runner) : task_runner_(task_runner) {}
96
97 UploadFileElementReader::FileStreamDeleter::~FileStreamDeleter() {}
98
95 void UploadFileElementReader::FileStreamDeleter::operator() ( 99 void UploadFileElementReader::FileStreamDeleter::operator() (
96 FileStream* file_stream) const { 100 FileStream* file_stream) const {
97 if (file_stream) { 101 if (file_stream) {
98 base::WorkerPool::PostTask(FROM_HERE, 102 DCHECK(task_runner_);
99 base::Bind(&base::DeletePointer<FileStream>, 103 task_runner_->PostTask(FROM_HERE,
100 file_stream), 104 base::Bind(&base::DeletePointer<FileStream>,
101 true /* task_is_slow */); 105 file_stream));
102 } 106 }
103 } 107 }
104 108
105 UploadFileElementReader::UploadFileElementReader( 109 UploadFileElementReader::UploadFileElementReader(
110 base::TaskRunner* task_runner,
106 const FilePath& path, 111 const FilePath& path,
107 uint64 range_offset, 112 uint64 range_offset,
108 uint64 range_length, 113 uint64 range_length,
109 const base::Time& expected_modification_time) 114 const base::Time& expected_modification_time)
110 : path_(path), 115 : task_runner_(task_runner),
116 path_(path),
111 range_offset_(range_offset), 117 range_offset_(range_offset),
112 range_length_(range_length), 118 range_length_(range_length),
113 expected_modification_time_(expected_modification_time), 119 expected_modification_time_(expected_modification_time),
120 file_stream_(NULL, FileStreamDeleter(task_runner_)),
114 content_length_(0), 121 content_length_(0),
115 bytes_remaining_(0), 122 bytes_remaining_(0),
116 ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) { 123 ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) {
117 } 124 }
118 125
119 UploadFileElementReader::~UploadFileElementReader() { 126 UploadFileElementReader::~UploadFileElementReader() {
120 } 127 }
121 128
122 const UploadFileElementReader* UploadFileElementReader::AsFileReader() const { 129 const UploadFileElementReader* UploadFileElementReader::AsFileReader() const {
123 return this; 130 return this;
124 } 131 }
125 132
126 int UploadFileElementReader::Init(const CompletionCallback& callback) { 133 int UploadFileElementReader::Init(const CompletionCallback& callback) {
127 DCHECK(!callback.is_null()); 134 DCHECK(!callback.is_null());
128 Reset(); 135 Reset();
129 136
130 ScopedFileStreamPtr* file_stream = new ScopedFileStreamPtr; 137 ScopedFileStreamPtr* file_stream =
138 new ScopedFileStreamPtr(NULL, FileStreamDeleter(task_runner_));
131 uint64* content_length = new uint64; 139 uint64* content_length = new uint64;
132 const bool posted = base::PostTaskAndReplyWithResult( 140 const bool posted = base::PostTaskAndReplyWithResult(
133 base::WorkerPool::GetTaskRunner(true /* task_is_slow */), 141 task_runner_,
134 FROM_HERE, 142 FROM_HERE,
135 base::Bind(&InitInternal, 143 base::Bind(&InitInternal,
136 path_, 144 path_,
137 range_offset_, 145 range_offset_,
138 range_length_, 146 range_length_,
139 expected_modification_time_, 147 expected_modification_time_,
140 file_stream, 148 file_stream,
141 content_length), 149 content_length),
142 base::Bind(&UploadFileElementReader::OnInitCompleted, 150 base::Bind(&UploadFileElementReader::OnInitCompleted,
143 weak_ptr_factory_.GetWeakPtr(), 151 weak_ptr_factory_.GetWeakPtr(),
(...skipping 20 matching lines...) Expand all
164 DCHECK(!callback.is_null()); 172 DCHECK(!callback.is_null());
165 173
166 if (BytesRemaining() == 0) 174 if (BytesRemaining() == 0)
167 return 0; 175 return 0;
168 176
169 // Save the value of file_stream_.get() before base::Passed() invalidates it. 177 // Save the value of file_stream_.get() before base::Passed() invalidates it.
170 FileStream* file_stream_ptr = file_stream_.get(); 178 FileStream* file_stream_ptr = file_stream_.get();
171 // Pass the ownership of file_stream_ to the worker pool to safely perform 179 // Pass the ownership of file_stream_ to the worker pool to safely perform
172 // operation even when |this| is destructed before the read completes. 180 // operation even when |this| is destructed before the read completes.
173 const bool posted = base::PostTaskAndReplyWithResult( 181 const bool posted = base::PostTaskAndReplyWithResult(
174 base::WorkerPool::GetTaskRunner(true /* task_is_slow */), 182 task_runner_,
175 FROM_HERE, 183 FROM_HERE,
176 base::Bind(&ReadInternal, 184 base::Bind(&ReadInternal,
177 scoped_refptr<IOBuffer>(buf), 185 scoped_refptr<IOBuffer>(buf),
178 buf_length, 186 buf_length,
179 BytesRemaining(), 187 BytesRemaining(),
180 file_stream_ptr), 188 file_stream_ptr),
181 base::Bind(&UploadFileElementReader::OnReadCompleted, 189 base::Bind(&UploadFileElementReader::OnReadCompleted,
182 weak_ptr_factory_.GetWeakPtr(), 190 weak_ptr_factory_.GetWeakPtr(),
183 base::Passed(&file_stream_), 191 base::Passed(&file_stream_),
184 callback)); 192 callback));
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 } 250 }
243 251
244 UploadFileElementReaderSync::~UploadFileElementReaderSync() { 252 UploadFileElementReaderSync::~UploadFileElementReaderSync() {
245 } 253 }
246 254
247 int UploadFileElementReaderSync::Init(const CompletionCallback& callback) { 255 int UploadFileElementReaderSync::Init(const CompletionCallback& callback) {
248 bytes_remaining_ = 0; 256 bytes_remaining_ = 0;
249 content_length_ = 0; 257 content_length_ = 0;
250 file_stream_.reset(); 258 file_stream_.reset();
251 259
252 UploadFileElementReader::ScopedFileStreamPtr file_stream; 260 // It's safe to pass NULL for |deleter| here because it will not be used.
mmenke 2013/01/07 16:40:51 nit: "NULL to deleter" - The deleter itself is no
hashimoto 2013/01/08 02:27:36 Now passing MessageLoopProxy::current() to satisfy
261 UploadFileElementReader::FileStreamDeleter deleter(NULL);
262 UploadFileElementReader::ScopedFileStreamPtr file_stream(NULL, deleter);
253 263
254 const int result = InitInternal(path_, range_offset_, range_length_, 264 const int result = InitInternal(path_, range_offset_, range_length_,
255 expected_modification_time_, 265 expected_modification_time_,
256 &file_stream, &content_length_); 266 &file_stream, &content_length_);
257 file_stream_.reset(file_stream.release()); 267 file_stream_.reset(file_stream.release());
258 bytes_remaining_ = GetContentLength(); 268 bytes_remaining_ = GetContentLength();
259 return result; 269 return result;
260 } 270 }
261 271
262 uint64 UploadFileElementReaderSync::GetContentLength() const { 272 uint64 UploadFileElementReaderSync::GetContentLength() const {
(...skipping 10 matching lines...) Expand all
273 const int result = ReadInternal(buf, buf_length, BytesRemaining(), 283 const int result = ReadInternal(buf, buf_length, BytesRemaining(),
274 file_stream_.get()); 284 file_stream_.get());
275 if (result > 0) { 285 if (result > 0) {
276 DCHECK_GE(static_cast<int>(bytes_remaining_), result); 286 DCHECK_GE(static_cast<int>(bytes_remaining_), result);
277 bytes_remaining_ -= result; 287 bytes_remaining_ -= result;
278 } 288 }
279 return result; 289 return result;
280 } 290 }
281 291
282 } // namespace net 292 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698