| Index: base/file_util_proxy.cc
|
| ===================================================================
|
| --- base/file_util_proxy.cc (revision 108640)
|
| +++ base/file_util_proxy.cc (working copy)
|
| @@ -26,7 +26,7 @@
|
| // message_loop_proxy->PostTaskAndReply(
|
| // from_here,
|
| // ReturnAsParam<R>(Bind(&DoWorkAndReturn), result),
|
| -// RelayHelper(Bind(&Callback), Owned(result)));
|
| +// CallbackWithReturn(Bind(&Callback), Owned(result)));
|
| //
|
| // Or just use PostTaskAndReplyWithStatus helper template (see the code below).
|
| template <typename R1, typename R2>
|
| @@ -60,18 +60,6 @@
|
| 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);
|
| @@ -101,23 +89,28 @@
|
| // Helper classes or routines for individual methods.
|
| class CreateOrOpenHelper {
|
| public:
|
| - CreateOrOpenHelper(MessageLoopProxy* message_loop_proxy,
|
| - const FileUtilProxy::CloseTask& close_task)
|
| + CreateOrOpenHelper(MessageLoopProxy* message_loop_proxy)
|
| : message_loop_proxy_(message_loop_proxy),
|
| - close_task_(close_task),
|
| file_handle_(kInvalidPlatformFileValue),
|
| created_(false),
|
| error_(PLATFORM_FILE_OK) {}
|
|
|
| ~CreateOrOpenHelper() {
|
| if (file_handle_ != kInvalidPlatformFileValue) {
|
| - message_loop_proxy_->PostTask(
|
| - FROM_HERE, base::Bind(close_task_, file_handle_));
|
| + FileUtilProxy::Close(message_loop_proxy_, file_handle_,
|
| + FileUtilProxy::StatusCallback());
|
| }
|
| }
|
|
|
| - void RunWork(const FileUtilProxy::CreateOrOpenTask& task) {
|
| - error_ = task.Run(&file_handle_, &created_);
|
| + void RunWork(const FilePath& file_path, int file_flags) {
|
| + if (!file_util::DirectoryExists(file_path.DirName())) {
|
| + // If its parent does not exist, should return NOT_FOUND error.
|
| + error_ = PLATFORM_FILE_ERROR_NOT_FOUND;
|
| + return;
|
| + }
|
| + error_ = PLATFORM_FILE_OK;
|
| + file_handle_ = CreatePlatformFile(file_path, file_flags,
|
| + &created_, &error_);
|
| }
|
|
|
| void Reply(const FileUtilProxy::CreateOrOpenCallback& callback) {
|
| @@ -127,7 +120,6 @@
|
|
|
| private:
|
| scoped_refptr<MessageLoopProxy> message_loop_proxy_;
|
| - FileUtilProxy::CloseTask close_task_;
|
| PlatformFile file_handle_;
|
| bool created_;
|
| PlatformFileError error_;
|
| @@ -275,28 +267,6 @@
|
| DISALLOW_COPY_AND_ASSIGN(WriteHelper);
|
| };
|
|
|
| -
|
| -PlatformFileError CreateOrOpenAdapter(
|
| - const FilePath& file_path, int file_flags,
|
| - PlatformFile* file_handle, bool* created) {
|
| - DCHECK(file_handle);
|
| - DCHECK(created);
|
| - if (!file_util::DirectoryExists(file_path.DirName())) {
|
| - // If its parent does not exist, should return NOT_FOUND error.
|
| - return PLATFORM_FILE_ERROR_NOT_FOUND;
|
| - }
|
| - PlatformFileError error = PLATFORM_FILE_OK;
|
| - *file_handle = CreatePlatformFile(file_path, file_flags, created, &error);
|
| - return error;
|
| -}
|
| -
|
| -PlatformFileError CloseAdapter(PlatformFile file_handle) {
|
| - if (!ClosePlatformFile(file_handle)) {
|
| - return PLATFORM_FILE_ERROR_FAILED;
|
| - }
|
| - return PLATFORM_FILE_OK;
|
| -}
|
| -
|
| } // namespace
|
|
|
| // static
|
| @@ -304,11 +274,12 @@
|
| scoped_refptr<MessageLoopProxy> message_loop_proxy,
|
| const FilePath& file_path, int file_flags,
|
| const CreateOrOpenCallback& callback) {
|
| - return RelayCreateOrOpen(
|
| - message_loop_proxy,
|
| - base::Bind(&CreateOrOpenAdapter, file_path, file_flags),
|
| - base::Bind(&CloseAdapter),
|
| - callback);
|
| + CreateOrOpenHelper* helper = new CreateOrOpenHelper(message_loop_proxy);
|
| + return message_loop_proxy->PostTaskAndReply(
|
| + FROM_HERE,
|
| + Bind(&CreateOrOpenHelper::RunWork, Unretained(helper),
|
| + file_path, file_flags),
|
| + Bind(&CreateOrOpenHelper::Reply, Owned(helper), callback));
|
| }
|
|
|
| // static
|
| @@ -325,14 +296,13 @@
|
| }
|
|
|
| // static
|
| -bool FileUtilProxy::Close(
|
| - scoped_refptr<MessageLoopProxy> message_loop_proxy,
|
| - base::PlatformFile file_handle,
|
| - const StatusCallback& callback) {
|
| - return RelayClose(
|
| - message_loop_proxy,
|
| - base::Bind(&CloseAdapter),
|
| - file_handle, callback);
|
| +bool FileUtilProxy::Close(scoped_refptr<MessageLoopProxy> message_loop_proxy,
|
| + PlatformFile file_handle,
|
| + const StatusCallback& callback) {
|
| + return PostTaskAndReplyWithStatus<bool>(
|
| + message_loop_proxy, FROM_HERE,
|
| + Bind(&ClosePlatformFile, file_handle), callback,
|
| + new PlatformFileError);
|
| }
|
|
|
| // Retrieves the information about a file. It is invalid to pass NULL for the
|
| @@ -471,31 +441,4 @@
|
| new PlatformFileError);
|
| }
|
|
|
| -// static
|
| -bool FileUtilProxy::RelayCreateOrOpen(
|
| - scoped_refptr<MessageLoopProxy> message_loop_proxy,
|
| - const CreateOrOpenTask& open_task,
|
| - const CloseTask& close_task,
|
| - const CreateOrOpenCallback& callback) {
|
| - 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));
|
| -}
|
| -
|
| -// static
|
| -bool FileUtilProxy::RelayClose(
|
| - scoped_refptr<MessageLoopProxy> message_loop_proxy,
|
| - 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)));
|
| -}
|
| -
|
| } // namespace base
|
|
|