diff options
-rw-r--r-- | base/file_util_proxy.cc | 13 | ||||
-rw-r--r-- | base/file_util_proxy.h | 8 | ||||
-rw-r--r-- | content/browser/renderer_host/redirect_to_file_resource_handler.cc | 6 | ||||
-rw-r--r-- | content/browser/renderer_host/redirect_to_file_resource_handler.h | 4 | ||||
-rw-r--r-- | content/common/net/url_fetcher.cc | 10 |
5 files changed, 22 insertions, 19 deletions
diff --git a/base/file_util_proxy.cc b/base/file_util_proxy.cc index bd9807b..2d4db8f 100644 --- a/base/file_util_proxy.cc +++ b/base/file_util_proxy.cc @@ -167,12 +167,12 @@ class RelayCreateTemporary : public MessageLoopRelay { RelayCreateTemporary( scoped_refptr<base::MessageLoopProxy> message_loop_proxy, int additional_file_flags, - base::FileUtilProxy::CreateTemporaryCallback* callback) + const base::FileUtilProxy::CreateTemporaryCallback& callback) : message_loop_proxy_(message_loop_proxy), additional_file_flags_(additional_file_flags), callback_(callback), file_handle_(base::kInvalidPlatformFileValue) { - DCHECK(callback); + DCHECK_EQ(false, callback.is_null()); } protected: @@ -199,15 +199,14 @@ class RelayCreateTemporary : public MessageLoopRelay { } virtual void RunCallback() { - callback_->Run(error_code(), base::PassPlatformFile(&file_handle_), - file_path_); - delete callback_; + callback_.Run(error_code(), base::PassPlatformFile(&file_handle_), + file_path_); } private: scoped_refptr<base::MessageLoopProxy> message_loop_proxy_; int additional_file_flags_; - base::FileUtilProxy::CreateTemporaryCallback* callback_; + base::FileUtilProxy::CreateTemporaryCallback callback_; base::PlatformFile file_handle_; FilePath file_path_; }; @@ -747,7 +746,7 @@ bool FileUtilProxy::CreateOrOpen( bool FileUtilProxy::CreateTemporary( scoped_refptr<MessageLoopProxy> message_loop_proxy, int additional_file_flags, - CreateTemporaryCallback* callback) { + const CreateTemporaryCallback& callback) { return Start(FROM_HERE, message_loop_proxy, new RelayCreateTemporary(message_loop_proxy, additional_file_flags, diff --git a/base/file_util_proxy.h b/base/file_util_proxy.h index 808c60e..196043a1 100644 --- a/base/file_util_proxy.h +++ b/base/file_util_proxy.h @@ -42,9 +42,9 @@ class BASE_EXPORT FileUtilProxy { typedef base::Callback<void(PlatformFileError /* error code */, PassPlatformFile, bool /* created */)> CreateOrOpenCallback; - typedef Callback3<PlatformFileError /* error code */, - PassPlatformFile, - FilePath>::Type CreateTemporaryCallback; + typedef base::Callback<void(PlatformFileError /* error code */, + PassPlatformFile, + FilePath)> CreateTemporaryCallback; typedef Callback2<PlatformFileError /* error code */, bool /* created */>::Type EnsureFileExistsCallback; typedef Callback2<PlatformFileError /* error code */, @@ -80,7 +80,7 @@ class BASE_EXPORT FileUtilProxy { static bool CreateTemporary( scoped_refptr<MessageLoopProxy> message_loop_proxy, int additional_file_flags, - CreateTemporaryCallback* callback); + const CreateTemporaryCallback& callback); // Close the given file handle. static bool Close(scoped_refptr<MessageLoopProxy> message_loop_proxy, diff --git a/content/browser/renderer_host/redirect_to_file_resource_handler.cc b/content/browser/renderer_host/redirect_to_file_resource_handler.cc index 19079a3..25e4914 100644 --- a/content/browser/renderer_host/redirect_to_file_resource_handler.cc +++ b/content/browser/renderer_host/redirect_to_file_resource_handler.cc @@ -27,7 +27,7 @@ RedirectToFileResourceHandler::RedirectToFileResourceHandler( ResourceHandler* next_handler, int process_id, ResourceDispatcherHost* host) - : callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), + : ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)), host_(host), next_handler_(next_handler), process_id_(process_id), @@ -77,8 +77,8 @@ bool RedirectToFileResourceHandler::OnWillStart(int request_id, base::FileUtilProxy::CreateTemporary( BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE), base::PLATFORM_FILE_ASYNC, - callback_factory_.NewCallback( - &RedirectToFileResourceHandler::DidCreateTemporaryFile)); + base::Bind(&RedirectToFileResourceHandler::DidCreateTemporaryFile, + weak_factory_.GetWeakPtr())); return true; } return next_handler_->OnWillStart(request_id, url, defer); diff --git a/content/browser/renderer_host/redirect_to_file_resource_handler.h b/content/browser/renderer_host/redirect_to_file_resource_handler.h index c860b2d..adf1aa7 100644 --- a/content/browser/renderer_host/redirect_to_file_resource_handler.h +++ b/content/browser/renderer_host/redirect_to_file_resource_handler.h @@ -7,8 +7,8 @@ #include "base/file_path.h" #include "base/memory/ref_counted.h" -#include "base/memory/scoped_callback_factory.h" #include "base/memory/scoped_ptr.h" +#include "base/memory/weak_ptr.h" #include "base/platform_file.h" #include "content/browser/renderer_host/resource_handler.h" #include "net/url_request/url_request_status.h" @@ -57,7 +57,7 @@ class RedirectToFileResourceHandler : public ResourceHandler { bool WriteMore(); bool BufIsFull() const; - base::ScopedCallbackFactory<RedirectToFileResourceHandler> callback_factory_; + base::WeakPtrFactory<RedirectToFileResourceHandler> weak_factory_; ResourceDispatcherHost* host_; scoped_refptr<ResourceHandler> next_handler_; diff --git a/content/common/net/url_fetcher.cc b/content/common/net/url_fetcher.cc index b9e1ff7..13332af 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/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" @@ -149,6 +151,7 @@ class URLFetcher::Core // Callbacks are created for use with base::FileUtilProxy. base::ScopedCallbackFactory<URLFetcher::Core::TempFileWriter> callback_factory_; + base::WeakPtrFactory<URLFetcher::Core::TempFileWriter> weak_factory_; // Message loop on which file opperations should happen. scoped_refptr<base::MessageLoopProxy> file_message_loop_proxy_; @@ -321,7 +324,8 @@ 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)), + ALLOW_THIS_IN_INITIALIZER_LIST(callback_factory_(this)), + ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)), file_message_loop_proxy_(file_message_loop_proxy), temp_file_handle_(base::kInvalidPlatformFileValue) { } @@ -336,8 +340,8 @@ void URLFetcher::Core::TempFileWriter::CreateTempFile() { base::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( |