summaryrefslogtreecommitdiffstats
path: root/base/file_util_proxy.cc
diff options
context:
space:
mode:
authorkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-04 13:27:49 +0000
committerkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-04 13:27:49 +0000
commit816903ea8c45ef1e8687f04aa33bad7f1f31c167 (patch)
treef8a13097c56391f1966ca45a543da2574acd0322 /base/file_util_proxy.cc
parent66610e9b0dbb6cea5230def8a4b0a8bb0e824694 (diff)
downloadchromium_src-816903ea8c45ef1e8687f04aa33bad7f1f31c167.zip
chromium_src-816903ea8c45ef1e8687f04aa33bad7f1f31c167.tar.gz
chromium_src-816903ea8c45ef1e8687f04aa33bad7f1f31c167.tar.bz2
Revert 108639 - again it seems to have broken Mac layout tests
Original issue with review is: http://codereview.chromium.org/8424006/ BUG=none TEST=test_shell_tests:\*FileSystem\* TBR=willchan, caseq Review URL: http://codereview.chromium.org/8466003 TBR=kinuko@chromium.org Review URL: http://codereview.chromium.org/8466007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@108643 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/file_util_proxy.cc')
-rw-r--r--base/file_util_proxy.cc109
1 files changed, 26 insertions, 83 deletions
diff --git a/base/file_util_proxy.cc b/base/file_util_proxy.cc
index 4c79465..4ca68f1 100644
--- a/base/file_util_proxy.cc
+++ b/base/file_util_proxy.cc
@@ -26,7 +26,7 @@ namespace {
// 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 @@ Closure ReturnAsParam(const Callback<R1(void)>& func, R2* 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);
@@ -101,23 +89,28 @@ bool PostTaskAndReplyWithStatus(
// 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 @@ class CreateOrOpenHelper {
private:
scoped_refptr<MessageLoopProxy> message_loop_proxy_;
- FileUtilProxy::CloseTask close_task_;
PlatformFile file_handle_;
bool created_;
PlatformFileError error_;
@@ -275,28 +267,6 @@ class WriteHelper {
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 @@ bool FileUtilProxy::CreateOrOpen(
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 @@ bool FileUtilProxy::CreateTemporary(
}
// 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 @@ bool FileUtilProxy::Flush(
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