| Index: base/file_util_proxy.cc
|
| diff --git a/base/file_util_proxy.cc b/base/file_util_proxy.cc
|
| index 0873c9ccd5b3f61f7b2e84f75a8ed36c9ac6b1b9..71bb1c5dfed329ce88b4564a0843a41035b27d21 100644
|
| --- a/base/file_util_proxy.cc
|
| +++ b/base/file_util_proxy.cc
|
| @@ -8,94 +8,16 @@
|
| #include "base/bind_helpers.h"
|
| #include "base/file_util.h"
|
| #include "base/message_loop_proxy.h"
|
| +#include "base/task_runner_util.h"
|
|
|
| namespace base {
|
|
|
| namespace {
|
|
|
| -// Helper templates to call file_util or base::PlatformFile methods
|
| -// and reply with the returned value.
|
| -//
|
| -// Typically when you have these methods:
|
| -// R DoWorkAndReturn();
|
| -// void Callback(R& result);
|
| -//
|
| -// You can pass the result of DoWorkAndReturn to the Callback by:
|
| -//
|
| -// R* result = new R;
|
| -// message_loop_proxy->PostTaskAndReply(
|
| -// from_here,
|
| -// ReturnAsParam<R>(Bind(&DoWorkAndReturn), result),
|
| -// RelayHelper(Bind(&Callback), Owned(result)));
|
| -//
|
| -// Or just use PostTaskAndReplyWithStatus helper template (see the code below).
|
| -template <typename R1, typename R2>
|
| -struct ReturnValueTranslator {
|
| - static R2 Value(const R1& value);
|
| -};
|
| -
|
| -template <typename R>
|
| -struct ReturnValueTranslator<R, R> {
|
| - static R Value(const R& value) { return value; }
|
| -};
|
| -
|
| -template <>
|
| -struct ReturnValueTranslator<bool, PlatformFileError> {
|
| - static PlatformFileError Value(const bool& value) {
|
| - if (value)
|
| - return PLATFORM_FILE_OK;
|
| - return PLATFORM_FILE_ERROR_FAILED;
|
| - }
|
| -};
|
| -
|
| -template <typename R1, typename R2>
|
| -void ReturnAsParamAdapter(const Callback<R1(void)>& func, R2* result) {
|
| - if (!func.is_null())
|
| - *result = ReturnValueTranslator<R1, R2>::Value(func.Run());
|
| -}
|
| -
|
| -template <typename R1, typename R2>
|
| -Closure ReturnAsParam(const Callback<R1(void)>& func, R2* result) {
|
| - DCHECK(result);
|
| - return Bind(&ReturnAsParamAdapter<R1, R2>, func, result);
|
| -}
|
| -
|
| -template <typename R, typename A1>
|
| -void ReturnAsParamAdapter1(const Callback<R(A1)>& func, A1 a1, R* result) {
|
| - if (!func.is_null())
|
| - *result = func.Run(a1);
|
| -}
|
| -
|
| -template <typename R, typename A1>
|
| -Closure ReturnAsParam(const Callback<R(A1)>& func, A1 a1, R* result) {
|
| - DCHECK(result);
|
| - return Bind(&ReturnAsParamAdapter1<R, A1>, func, a1, result);
|
| -}
|
| -
|
| -template <typename R>
|
| -void ReplyAdapter(const Callback<void(R)>& callback, R* result) {
|
| - DCHECK(result);
|
| - if (!callback.is_null())
|
| - callback.Run(*result);
|
| -}
|
| -
|
| -template <typename R, typename OWNED>
|
| -Closure ReplyHelper(const Callback<void(R)>& callback, OWNED result) {
|
| - return Bind(&ReplyAdapter<R>, callback, result);
|
| -}
|
| -
|
| -// Putting everything together.
|
| -template <typename R1, typename R2>
|
| -bool PostTaskAndReplyWithStatus(
|
| - const scoped_refptr<MessageLoopProxy>& message_loop_proxy,
|
| - const tracked_objects::Location& from_here,
|
| - const Callback<R1(void)>& file_util_work,
|
| - const Callback<void(R2)>& callback,
|
| - R2* result) {
|
| - return message_loop_proxy->PostTaskAndReply(
|
| - from_here,
|
| - ReturnAsParam<R1>(file_util_work, result),
|
| - ReplyHelper(callback, Owned(result)));
|
| +void CallWithTranslatedParameter(const FileUtilProxy::StatusCallback& callback,
|
| + bool value) {
|
| + DCHECK(!callback.is_null());
|
| + callback.Run(value ? PLATFORM_FILE_OK : PLATFORM_FILE_ERROR_FAILED);
|
| }
|
|
|
| // Helper classes or routines for individual methods.
|
| @@ -319,10 +241,10 @@ bool FileUtilProxy::CreateTemporary(
|
| const CreateTemporaryCallback& callback) {
|
| CreateTemporaryHelper* helper = new CreateTemporaryHelper(message_loop_proxy);
|
| return message_loop_proxy->PostTaskAndReply(
|
| - FROM_HERE,
|
| - Bind(&CreateTemporaryHelper::RunWork, Unretained(helper),
|
| - additional_file_flags),
|
| - Bind(&CreateTemporaryHelper::Reply, Owned(helper), callback));
|
| + FROM_HERE,
|
| + Bind(&CreateTemporaryHelper::RunWork, Unretained(helper),
|
| + additional_file_flags),
|
| + Bind(&CreateTemporaryHelper::Reply, Owned(helper), callback));
|
| }
|
|
|
| // static
|
| @@ -344,10 +266,10 @@ bool FileUtilProxy::GetFileInfo(
|
| const GetFileInfoCallback& callback) {
|
| GetFileInfoHelper* helper = new GetFileInfoHelper;
|
| return message_loop_proxy->PostTaskAndReply(
|
| - FROM_HERE,
|
| - Bind(&GetFileInfoHelper::RunWorkForFilePath,
|
| - Unretained(helper), file_path),
|
| - Bind(&GetFileInfoHelper::Reply, Owned(helper), callback));
|
| + FROM_HERE,
|
| + Bind(&GetFileInfoHelper::RunWorkForFilePath,
|
| + Unretained(helper), file_path),
|
| + Bind(&GetFileInfoHelper::Reply, Owned(helper), callback));
|
| }
|
|
|
| // static
|
| @@ -357,10 +279,10 @@ bool FileUtilProxy::GetFileInfoFromPlatformFile(
|
| const GetFileInfoCallback& callback) {
|
| GetFileInfoHelper* helper = new GetFileInfoHelper;
|
| return message_loop_proxy->PostTaskAndReply(
|
| - FROM_HERE,
|
| - Bind(&GetFileInfoHelper::RunWorkForPlatformFile,
|
| - Unretained(helper), file),
|
| - Bind(&GetFileInfoHelper::Reply, Owned(helper), callback));
|
| + FROM_HERE,
|
| + Bind(&GetFileInfoHelper::RunWorkForPlatformFile,
|
| + Unretained(helper), file),
|
| + Bind(&GetFileInfoHelper::Reply, Owned(helper), callback));
|
| }
|
|
|
| // static
|
| @@ -397,9 +319,9 @@ bool FileUtilProxy::Read(
|
| }
|
| ReadHelper* helper = new ReadHelper(bytes_to_read);
|
| return message_loop_proxy->PostTaskAndReply(
|
| - FROM_HERE,
|
| - Bind(&ReadHelper::RunWork, Unretained(helper), file, offset),
|
| - Bind(&ReadHelper::Reply, Owned(helper), callback));
|
| + FROM_HERE,
|
| + Bind(&ReadHelper::RunWork, Unretained(helper), file, offset),
|
| + Bind(&ReadHelper::Reply, Owned(helper), callback));
|
| }
|
|
|
| // static
|
| @@ -415,9 +337,9 @@ bool FileUtilProxy::Write(
|
| }
|
| WriteHelper* helper = new WriteHelper(buffer, bytes_to_write);
|
| return message_loop_proxy->PostTaskAndReply(
|
| - FROM_HERE,
|
| - Bind(&WriteHelper::RunWork, Unretained(helper), file, offset),
|
| - Bind(&WriteHelper::Reply, Owned(helper), callback));
|
| + FROM_HERE,
|
| + Bind(&WriteHelper::RunWork, Unretained(helper), file, offset),
|
| + Bind(&WriteHelper::Reply, Owned(helper), callback));
|
| }
|
|
|
| // static
|
| @@ -427,11 +349,12 @@ bool FileUtilProxy::Touch(
|
| const Time& last_access_time,
|
| const Time& last_modified_time,
|
| const StatusCallback& callback) {
|
| - return PostTaskAndReplyWithStatus<bool>(
|
| - message_loop_proxy, FROM_HERE,
|
| + return base::PostTaskAndReplyWithResult(
|
| + message_loop_proxy,
|
| + FROM_HERE,
|
| Bind(&TouchPlatformFile, file,
|
| - last_access_time, last_modified_time), callback,
|
| - new PlatformFileError);
|
| + last_access_time, last_modified_time),
|
| + Bind(&CallWithTranslatedParameter, callback));
|
| }
|
|
|
| // static
|
| @@ -441,12 +364,12 @@ bool FileUtilProxy::Touch(
|
| const Time& last_access_time,
|
| const Time& last_modified_time,
|
| const StatusCallback& callback) {
|
| - return PostTaskAndReplyWithStatus<bool>(
|
| - message_loop_proxy, FROM_HERE,
|
| + return base::PostTaskAndReplyWithResult(
|
| + message_loop_proxy,
|
| + FROM_HERE,
|
| Bind(&file_util::TouchFile, file_path,
|
| last_access_time, last_modified_time),
|
| - callback,
|
| - new PlatformFileError);
|
| + Bind(&CallWithTranslatedParameter, callback));
|
| }
|
|
|
| // static
|
| @@ -455,10 +378,11 @@ bool FileUtilProxy::Truncate(
|
| PlatformFile file,
|
| int64 length,
|
| const StatusCallback& callback) {
|
| - return PostTaskAndReplyWithStatus<bool>(
|
| - message_loop_proxy, FROM_HERE,
|
| - Bind(&TruncatePlatformFile, file, length), callback,
|
| - new PlatformFileError);
|
| + return base::PostTaskAndReplyWithResult(
|
| + message_loop_proxy,
|
| + FROM_HERE,
|
| + Bind(&TruncatePlatformFile, file, length),
|
| + Bind(&CallWithTranslatedParameter, callback));
|
| }
|
|
|
| // static
|
| @@ -466,10 +390,11 @@ bool FileUtilProxy::Flush(
|
| scoped_refptr<MessageLoopProxy> message_loop_proxy,
|
| PlatformFile file,
|
| const StatusCallback& callback) {
|
| - return PostTaskAndReplyWithStatus<bool>(
|
| - message_loop_proxy, FROM_HERE,
|
| - Bind(&FlushPlatformFile, file), callback,
|
| - new PlatformFileError);
|
| + return base::PostTaskAndReplyWithResult(
|
| + message_loop_proxy,
|
| + FROM_HERE,
|
| + Bind(&FlushPlatformFile, file),
|
| + Bind(&CallWithTranslatedParameter, callback));
|
| }
|
|
|
| // static
|
| @@ -478,11 +403,8 @@ bool FileUtilProxy::RelayFileTask(
|
| const tracked_objects::Location& from_here,
|
| const FileTask& file_task,
|
| const StatusCallback& callback) {
|
| - PlatformFileError* result = new PlatformFileError;
|
| - return message_loop_proxy->PostTaskAndReply(
|
| - from_here,
|
| - ReturnAsParam(file_task, result),
|
| - ReplyHelper(callback, Owned(result)));
|
| + return base::PostTaskAndReplyWithResult(
|
| + message_loop_proxy, from_here, file_task, callback);
|
| }
|
|
|
| // static
|
| @@ -494,9 +416,9 @@ bool FileUtilProxy::RelayCreateOrOpen(
|
| CreateOrOpenHelper* helper = new CreateOrOpenHelper(
|
| message_loop_proxy, close_task);
|
| return message_loop_proxy->PostTaskAndReply(
|
| - FROM_HERE,
|
| - Bind(&CreateOrOpenHelper::RunWork, Unretained(helper), open_task),
|
| - Bind(&CreateOrOpenHelper::Reply, Owned(helper), callback));
|
| + FROM_HERE,
|
| + Bind(&CreateOrOpenHelper::RunWork, Unretained(helper), open_task),
|
| + Bind(&CreateOrOpenHelper::Reply, Owned(helper), callback));
|
| }
|
|
|
| // static
|
| @@ -505,11 +427,8 @@ bool FileUtilProxy::RelayClose(
|
| const CloseTask& close_task,
|
| PlatformFile file_handle,
|
| const StatusCallback& callback) {
|
| - PlatformFileError* result = new PlatformFileError;
|
| - return message_loop_proxy->PostTaskAndReply(
|
| - FROM_HERE,
|
| - ReturnAsParam(close_task, file_handle, result),
|
| - ReplyHelper(callback, Owned(result)));
|
| + return base::PostTaskAndReplyWithResult(
|
| + message_loop_proxy, FROM_HERE, Bind(close_task, file_handle), callback);
|
| }
|
|
|
| } // namespace base
|
|
|