Index: net/base/upload_file_element_reader.cc |
diff --git a/net/base/upload_file_element_reader.cc b/net/base/upload_file_element_reader.cc |
index 32cb27ff42e3cc7758129cbd562b51fd9d0c8d93..cdfc95ed35ebaa16a22b3b33dedf858e7cf67d0a 100644 |
--- a/net/base/upload_file_element_reader.cc |
+++ b/net/base/upload_file_element_reader.cc |
@@ -8,7 +8,6 @@ |
#include "base/file_util.h" |
#include "base/location.h" |
#include "base/task_runner_util.h" |
-#include "base/threading/worker_pool.h" |
#include "net/base/file_stream.h" |
#include "net/base/io_buffer.h" |
#include "net/base/net_errors.h" |
@@ -92,25 +91,33 @@ int ReadInternal(scoped_refptr<IOBuffer> buf, |
} // namespace |
+UploadFileElementReader::FileStreamDeleter::FileStreamDeleter( |
+ base::TaskRunner* task_runner) : task_runner_(task_runner) {} |
+ |
+UploadFileElementReader::FileStreamDeleter::~FileStreamDeleter() {} |
+ |
void UploadFileElementReader::FileStreamDeleter::operator() ( |
FileStream* file_stream) const { |
if (file_stream) { |
- base::WorkerPool::PostTask(FROM_HERE, |
- base::Bind(&base::DeletePointer<FileStream>, |
- file_stream), |
- true /* task_is_slow */); |
+ DCHECK(task_runner_); |
+ task_runner_->PostTask(FROM_HERE, |
+ base::Bind(&base::DeletePointer<FileStream>, |
+ file_stream)); |
} |
} |
UploadFileElementReader::UploadFileElementReader( |
+ base::TaskRunner* task_runner, |
const FilePath& path, |
uint64 range_offset, |
uint64 range_length, |
const base::Time& expected_modification_time) |
- : path_(path), |
+ : task_runner_(task_runner), |
+ path_(path), |
range_offset_(range_offset), |
range_length_(range_length), |
expected_modification_time_(expected_modification_time), |
+ file_stream_(NULL, FileStreamDeleter(task_runner_)), |
content_length_(0), |
bytes_remaining_(0), |
ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) { |
@@ -127,10 +134,11 @@ int UploadFileElementReader::Init(const CompletionCallback& callback) { |
DCHECK(!callback.is_null()); |
Reset(); |
- ScopedFileStreamPtr* file_stream = new ScopedFileStreamPtr; |
+ ScopedFileStreamPtr* file_stream = |
+ new ScopedFileStreamPtr(NULL, FileStreamDeleter(task_runner_)); |
uint64* content_length = new uint64; |
const bool posted = base::PostTaskAndReplyWithResult( |
- base::WorkerPool::GetTaskRunner(true /* task_is_slow */), |
+ task_runner_, |
FROM_HERE, |
base::Bind(&InitInternal, |
path_, |
@@ -171,7 +179,7 @@ int UploadFileElementReader::Read(IOBuffer* buf, |
// Pass the ownership of file_stream_ to the worker pool to safely perform |
// operation even when |this| is destructed before the read completes. |
const bool posted = base::PostTaskAndReplyWithResult( |
- base::WorkerPool::GetTaskRunner(true /* task_is_slow */), |
+ task_runner_, |
FROM_HERE, |
base::Bind(&ReadInternal, |
scoped_refptr<IOBuffer>(buf), |
@@ -249,7 +257,9 @@ int UploadFileElementReaderSync::Init(const CompletionCallback& callback) { |
content_length_ = 0; |
file_stream_.reset(); |
- UploadFileElementReader::ScopedFileStreamPtr file_stream; |
+ // 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
|
+ UploadFileElementReader::FileStreamDeleter deleter(NULL); |
+ UploadFileElementReader::ScopedFileStreamPtr file_stream(NULL, deleter); |
const int result = InitInternal(path_, range_offset_, range_length_, |
expected_modification_time_, |