| Index: content/common/net/url_fetcher.cc
|
| diff --git a/content/common/net/url_fetcher.cc b/content/common/net/url_fetcher.cc
|
| index 677eafea55a83b79924fa38f23ba42be13576b97..9bb73c24c11c6b1fa95f56f35f8cfd42feb83cc8 100644
|
| --- a/content/common/net/url_fetcher.cc
|
| +++ b/content/common/net/url_fetcher.cc
|
| @@ -6,12 +6,14 @@
|
|
|
| #include <set>
|
|
|
| +#include "base/bind.h"
|
| +#include "base/bind_helpers.h"
|
| #include "base/compiler_specific.h"
|
| #include "base/file_path.h"
|
| #include "base/file_util_proxy.h"
|
| #include "base/lazy_instance.h"
|
| -#include "base/memory/scoped_callback_factory.h"
|
| #include "base/memory/scoped_ptr.h"
|
| +#include "base/memory/weak_ptr.h"
|
| #include "base/message_loop_proxy.h"
|
| #include "base/platform_file.h"
|
| #include "base/stl_util.h"
|
| @@ -32,6 +34,9 @@
|
| static const int kBufferSize = 4096;
|
| const int URLFetcher::kInvalidHttpResponseCode = -1;
|
|
|
| +using base::FileUtilProxy;
|
| +using base::PlatformFileError;
|
| +
|
| class URLFetcher::Core
|
| : public base::RefCountedThreadSafe<URLFetcher::Core>,
|
| public net::URLRequest::Delegate {
|
| @@ -146,9 +151,9 @@ class URLFetcher::Core
|
| // if no error occurred.
|
| base::PlatformFileError error_code_;
|
|
|
| - // Callbacks are created for use with base::FileUtilProxy.
|
| - base::ScopedCallbackFactory<URLFetcher::Core::TempFileWriter>
|
| - callback_factory_;
|
| + // For file_util calls on the FileThread.
|
| + base::WeakPtrFactory<URLFetcher::Core::TempFileWriter>
|
| + weak_factory_;
|
|
|
| // Message loop on which file opperations should happen.
|
| scoped_refptr<base::MessageLoopProxy> file_message_loop_proxy_;
|
| @@ -160,6 +165,9 @@ class URLFetcher::Core
|
| // Handle to the temp file.
|
| base::PlatformFile temp_file_handle_;
|
|
|
| + // Bytes written by the last ContinueWrite.
|
| + int bytes_written_;
|
| +
|
| // We always append to the file. Track the total number of bytes
|
| // written, so that writes know the offset to give.
|
| int64 total_bytes_written_;
|
| @@ -319,7 +327,7 @@ URLFetcher::Core::TempFileWriter::TempFileWriter(
|
| scoped_refptr<base::MessageLoopProxy> file_message_loop_proxy)
|
| : core_(core),
|
| error_code_(base::PLATFORM_FILE_OK),
|
| - callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
|
| + weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
|
| file_message_loop_proxy_(file_message_loop_proxy),
|
| temp_file_handle_(base::kInvalidPlatformFileValue) {
|
| }
|
| @@ -331,11 +339,11 @@ URLFetcher::Core::TempFileWriter::~TempFileWriter() {
|
| void URLFetcher::Core::TempFileWriter::CreateTempFile() {
|
| DCHECK(core_->io_message_loop_proxy_->BelongsToCurrentThread());
|
| CHECK(file_message_loop_proxy_.get());
|
| - base::FileUtilProxy::CreateTemporary(
|
| + FileUtilProxy::CreateTemporary(
|
| file_message_loop_proxy_,
|
| 0, // No additional file flags.
|
| - callback_factory_.NewCallback(
|
| - &URLFetcher::Core::TempFileWriter::DidCreateTempFile));
|
| + base::Bind(&URLFetcher::Core::TempFileWriter::DidCreateTempFile,
|
| + weak_factory_.GetWeakPtr()));
|
| }
|
|
|
| void URLFetcher::Core::TempFileWriter::DidCreateTempFile(
|
| @@ -349,7 +357,7 @@ void URLFetcher::Core::TempFileWriter::DidCreateTempFile(
|
| RemoveTempFile();
|
| core_->delegate_loop_proxy_->PostTask(
|
| FROM_HERE,
|
| - NewRunnableMethod(core_, &Core::InformDelegateFetchIsComplete));
|
| + base::Bind(&Core::InformDelegateFetchIsComplete, core_));
|
| return;
|
| }
|
|
|
| @@ -359,7 +367,7 @@ void URLFetcher::Core::TempFileWriter::DidCreateTempFile(
|
|
|
| core_->io_message_loop_proxy_->PostTask(
|
| FROM_HERE,
|
| - NewRunnableMethod(core_, &Core::StartURLRequestWhenAppropriate));
|
| + base::Bind(&Core::StartURLRequestWhenAppropriate, core_));
|
| }
|
|
|
| void URLFetcher::Core::TempFileWriter::WriteBuffer(int num_bytes) {
|
| @@ -383,7 +391,7 @@ void URLFetcher::Core::TempFileWriter::ContinueWrite(
|
| RemoveTempFile();
|
| core_->delegate_loop_proxy_->PostTask(
|
| FROM_HERE,
|
| - NewRunnableMethod(core_, &Core::InformDelegateFetchIsComplete));
|
| + base::Bind(&Core::InformDelegateFetchIsComplete, core_));
|
| return;
|
| }
|
|
|
| @@ -392,14 +400,14 @@ void URLFetcher::Core::TempFileWriter::ContinueWrite(
|
| pending_bytes_ -= bytes_written;
|
|
|
| if (pending_bytes_ > 0) {
|
| - base::FileUtilProxy::Write(
|
| + FileUtilProxy::Write(
|
| file_message_loop_proxy_,
|
| temp_file_handle_,
|
| total_bytes_written_, // Append to the end
|
| (core_->buffer_->data() + buffer_offset_),
|
| pending_bytes_,
|
| - callback_factory_.NewCallback(
|
| - &URLFetcher::Core::TempFileWriter::ContinueWrite));
|
| + base::Bind(&URLFetcher::Core::TempFileWriter::ContinueWrite,
|
| + weak_factory_.GetWeakPtr()));
|
| } else {
|
| // Finished writing core_->buffer_ to the file. Read some more.
|
| core_->ReadResponse();
|
| @@ -421,11 +429,12 @@ void URLFetcher::Core::TempFileWriter::CloseTempFileAndCompleteRequest() {
|
| DCHECK(core_->io_message_loop_proxy_->BelongsToCurrentThread());
|
|
|
| if (temp_file_handle_ != base::kInvalidPlatformFileValue) {
|
| - base::FileUtilProxy::Close(
|
| + FileUtilProxy::PostFileTaskAndReplyStatus<bool, PlatformFileError>(
|
| file_message_loop_proxy_,
|
| - temp_file_handle_,
|
| - callback_factory_.NewCallback(
|
| - &URLFetcher::Core::TempFileWriter::DidCloseTempFile));
|
| + FROM_HERE,
|
| + base::Bind(&base::ClosePlatformFile, temp_file_handle_),
|
| + base::Bind(&URLFetcher::Core::TempFileWriter::DidCloseTempFile,
|
| + weak_factory_.GetWeakPtr()));
|
| temp_file_handle_ = base::kInvalidPlatformFileValue;
|
| }
|
| }
|
| @@ -439,7 +448,7 @@ void URLFetcher::Core::TempFileWriter::DidCloseTempFile(
|
| RemoveTempFile();
|
| core_->delegate_loop_proxy_->PostTask(
|
| FROM_HERE,
|
| - NewRunnableMethod(core_, &Core::InformDelegateFetchIsComplete));
|
| + base::Bind(&Core::InformDelegateFetchIsComplete, core_));
|
| return;
|
| }
|
|
|
| @@ -452,19 +461,19 @@ void URLFetcher::Core::TempFileWriter::RemoveTempFile() {
|
|
|
| // Close the temp file if it is open.
|
| if (temp_file_handle_ != base::kInvalidPlatformFileValue) {
|
| - base::FileUtilProxy::Close(
|
| - file_message_loop_proxy_,
|
| - temp_file_handle_,
|
| - NULL); // No callback: Ignore errors.
|
| + file_message_loop_proxy_->PostTask(
|
| + FROM_HERE,
|
| + base::IgnoreReturn(base::Callback<bool(void)>(
|
| + base::Bind(&base::ClosePlatformFile, temp_file_handle_))));
|
| temp_file_handle_ = base::kInvalidPlatformFileValue;
|
| }
|
|
|
| if (!temp_file_.empty()) {
|
| - base::FileUtilProxy::Delete(
|
| - file_message_loop_proxy_,
|
| - temp_file_,
|
| - false, // No need to recurse, as the path is to a file.
|
| - NULL); // No callback: Ignore errors.
|
| + file_message_loop_proxy_->PostTask(
|
| + FROM_HERE,
|
| + base::IgnoreReturn(base::Callback<bool(void)>(
|
| + base::Bind(&file_util::Delete, temp_file_,
|
| + false /* recursive */))));
|
| DisownTempFile();
|
| }
|
| }
|
| @@ -566,7 +575,7 @@ void URLFetcher::Core::Start() {
|
|
|
| io_message_loop_proxy_->PostTask(
|
| FROM_HERE,
|
| - NewRunnableMethod(this, &Core::StartOnIOThread));
|
| + base::Bind(&Core::StartOnIOThread, this));
|
| }
|
|
|
| void URLFetcher::Core::StartOnIOThread() {
|
|
|