Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(697)

Unified Diff: webkit/browser/fileapi/file_system_operation_runner.cc

Issue 23477026: Make OperationID usable for error handling. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webkit/browser/fileapi/file_system_operation_runner.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/browser/fileapi/file_system_operation_runner.cc
diff --git a/webkit/browser/fileapi/file_system_operation_runner.cc b/webkit/browser/fileapi/file_system_operation_runner.cc
index b899e1b598058191f6af1942e7aaf4ac732727b6..b1e8aa7327f5f0f08c4c97c8b192669c0f78aa2f 100644
--- a/webkit/browser/fileapi/file_system_operation_runner.cc
+++ b/webkit/browser/fileapi/file_system_operation_runner.cc
@@ -17,8 +17,6 @@ namespace fileapi {
typedef FileSystemOperationRunner::OperationID OperationID;
-const OperationID FileSystemOperationRunner::kErrorOperationID = -1;
-
FileSystemOperationRunner::~FileSystemOperationRunner() {
}
@@ -33,16 +31,16 @@ OperationID FileSystemOperationRunner::CreateFile(
base::PlatformFileError error = base::PLATFORM_FILE_OK;
FileSystemOperation* operation =
file_system_context_->CreateFileSystemOperation(url, &error);
+ OperationID id = operations_.Add(operation);
if (!operation) {
- callback.Run(error);
- return kErrorOperationID;
+ DidFinish(id, callback, error);
+ } else {
+ PrepareForWrite(id, url);
+ operation->CreateFile(
+ url, exclusive,
+ base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
+ id, callback));
}
- OperationID id = operations_.Add(operation);
- PrepareForWrite(id, url);
- operation->CreateFile(
- url, exclusive,
- base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
- id, callback));
return id;
}
@@ -54,16 +52,16 @@ OperationID FileSystemOperationRunner::CreateDirectory(
base::PlatformFileError error = base::PLATFORM_FILE_OK;
FileSystemOperation* operation =
file_system_context_->CreateFileSystemOperation(url, &error);
+ OperationID id = operations_.Add(operation);
if (!operation) {
- callback.Run(error);
- return kErrorOperationID;
+ DidFinish(id, callback, error);
+ } else {
+ PrepareForWrite(id, url);
+ operation->CreateDirectory(
+ url, exclusive, recursive,
+ base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
+ id, callback));
}
- OperationID id = operations_.Add(operation);
- PrepareForWrite(id, url);
- operation->CreateDirectory(
- url, exclusive, recursive,
- base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
- id, callback));
return id;
}
@@ -74,17 +72,17 @@ OperationID FileSystemOperationRunner::Copy(
base::PlatformFileError error = base::PLATFORM_FILE_OK;
FileSystemOperation* operation =
file_system_context_->CreateFileSystemOperation(dest_url, &error);
+ OperationID id = operations_.Add(operation);
if (!operation) {
- callback.Run(error);
- return kErrorOperationID;
+ DidFinish(id, callback, error);
+ } else {
+ PrepareForWrite(id, dest_url);
+ PrepareForRead(id, src_url);
+ operation->Copy(
+ src_url, dest_url,
+ base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
+ id, callback));
}
- OperationID id = operations_.Add(operation);
- PrepareForWrite(id, dest_url);
- PrepareForRead(id, src_url);
- operation->Copy(
- src_url, dest_url,
- base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
- id, callback));
return id;
}
@@ -95,17 +93,17 @@ OperationID FileSystemOperationRunner::Move(
base::PlatformFileError error = base::PLATFORM_FILE_OK;
FileSystemOperation* operation =
file_system_context_->CreateFileSystemOperation(dest_url, &error);
+ OperationID id = operations_.Add(operation);
if (!operation) {
- callback.Run(error);
- return kErrorOperationID;
+ DidFinish(id, callback, error);
+ } else {
+ PrepareForWrite(id, dest_url);
+ PrepareForWrite(id, src_url);
+ operation->Move(
+ src_url, dest_url,
+ base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
+ id, callback));
}
- OperationID id = operations_.Add(operation);
- PrepareForWrite(id, dest_url);
- PrepareForWrite(id, src_url);
- operation->Move(
- src_url, dest_url,
- base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
- id, callback));
return id;
}
@@ -115,16 +113,16 @@ OperationID FileSystemOperationRunner::DirectoryExists(
base::PlatformFileError error = base::PLATFORM_FILE_OK;
FileSystemOperation* operation =
file_system_context_->CreateFileSystemOperation(url, &error);
+ OperationID id = operations_.Add(operation);
if (!operation) {
- callback.Run(error);
- return kErrorOperationID;
+ DidFinish(id, callback, error);
+ } else {
+ PrepareForRead(id, url);
+ operation->DirectoryExists(
+ url,
+ base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
+ id, callback));
}
- OperationID id = operations_.Add(operation);
- PrepareForRead(id, url);
- operation->DirectoryExists(
- url,
- base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
- id, callback));
return id;
}
@@ -134,16 +132,16 @@ OperationID FileSystemOperationRunner::FileExists(
base::PlatformFileError error = base::PLATFORM_FILE_OK;
FileSystemOperation* operation =
file_system_context_->CreateFileSystemOperation(url, &error);
+ OperationID id = operations_.Add(operation);
if (!operation) {
- callback.Run(error);
- return kErrorOperationID;
+ DidFinish(id, callback, error);
+ } else {
+ PrepareForRead(id, url);
+ operation->FileExists(
+ url,
+ base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
+ id, callback));
}
- OperationID id = operations_.Add(operation);
- PrepareForRead(id, url);
- operation->FileExists(
- url,
- base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
- id, callback));
return id;
}
@@ -153,16 +151,16 @@ OperationID FileSystemOperationRunner::GetMetadata(
base::PlatformFileError error = base::PLATFORM_FILE_OK;
FileSystemOperation* operation =
file_system_context_->CreateFileSystemOperation(url, &error);
+ OperationID id = operations_.Add(operation);
if (!operation) {
- callback.Run(error, base::PlatformFileInfo());
- return kErrorOperationID;
+ DidGetMetadata(id, callback, error, base::PlatformFileInfo());
+ } else {
+ PrepareForRead(id, url);
+ operation->GetMetadata(
+ url,
+ base::Bind(&FileSystemOperationRunner::DidGetMetadata, AsWeakPtr(),
+ id, callback));
}
- OperationID id = operations_.Add(operation);
- PrepareForRead(id, url);
- operation->GetMetadata(
- url,
- base::Bind(&FileSystemOperationRunner::DidGetMetadata, AsWeakPtr(),
- id, callback));
return id;
}
@@ -172,16 +170,17 @@ OperationID FileSystemOperationRunner::ReadDirectory(
base::PlatformFileError error = base::PLATFORM_FILE_OK;
FileSystemOperation* operation =
file_system_context_->CreateFileSystemOperation(url, &error);
+ OperationID id = operations_.Add(operation);
if (!operation) {
- callback.Run(error, std::vector<DirectoryEntry>(), false);
- return kErrorOperationID;
+ DidReadDirectory(
+ id, callback, error, std::vector<DirectoryEntry>(), false);
+ } else {
+ PrepareForRead(id, url);
+ operation->ReadDirectory(
+ url,
+ base::Bind(&FileSystemOperationRunner::DidReadDirectory, AsWeakPtr(),
+ id, callback));
}
- OperationID id = operations_.Add(operation);
- PrepareForRead(id, url);
- operation->ReadDirectory(
- url,
- base::Bind(&FileSystemOperationRunner::DidReadDirectory, AsWeakPtr(),
- id, callback));
return id;
}
@@ -191,16 +190,16 @@ OperationID FileSystemOperationRunner::Remove(
base::PlatformFileError error = base::PLATFORM_FILE_OK;
FileSystemOperation* operation =
file_system_context_->CreateFileSystemOperation(url, &error);
+ OperationID id = operations_.Add(operation);
if (!operation) {
- callback.Run(error);
- return kErrorOperationID;
+ DidFinish(id, callback, error);
+ } else {
+ PrepareForWrite(id, url);
+ operation->Remove(
+ url, recursive,
+ base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
+ id, callback));
}
- OperationID id = operations_.Add(operation);
- PrepareForWrite(id, url);
- operation->Remove(
- url, recursive,
- base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
- id, callback));
return id;
}
@@ -213,17 +212,19 @@ OperationID FileSystemOperationRunner::Write(
base::PlatformFileError error = base::PLATFORM_FILE_OK;
FileSystemOperation* operation =
file_system_context_->CreateFileSystemOperation(url, &error);
+ OperationID id = operations_.Add(operation);
+
if (!operation) {
- callback.Run(error, 0, true);
- return kErrorOperationID;
+ DidWrite(id, callback, error, 0, true);
+ return id;
}
scoped_ptr<FileStreamWriter> writer(
file_system_context_->CreateFileStreamWriter(url, offset));
if (!writer) {
// Write is not supported.
- callback.Run(base::PLATFORM_FILE_ERROR_SECURITY, 0, true);
- return kErrorOperationID;
+ DidWrite(id, callback, base::PLATFORM_FILE_ERROR_SECURITY, 0, true);
+ return id;
}
DCHECK(blob_url.is_valid());
@@ -232,7 +233,6 @@ OperationID FileSystemOperationRunner::Write(
scoped_ptr<net::URLRequest> blob_request(url_request_context->CreateRequest(
blob_url, writer_delegate.get()));
- OperationID id = operations_.Add(operation);
PrepareForWrite(id, url);
operation->Write(
url, writer_delegate.Pass(), blob_request.Pass(),
@@ -247,16 +247,16 @@ OperationID FileSystemOperationRunner::Truncate(
base::PlatformFileError error = base::PLATFORM_FILE_OK;
FileSystemOperation* operation =
file_system_context_->CreateFileSystemOperation(url, &error);
+ OperationID id = operations_.Add(operation);
if (!operation) {
- callback.Run(error);
- return kErrorOperationID;
+ DidFinish(id, callback, error);
+ } else {
+ PrepareForWrite(id, url);
+ operation->Truncate(
+ url, length,
+ base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
+ id, callback));
}
- OperationID id = operations_.Add(operation);
- PrepareForWrite(id, url);
- operation->Truncate(
- url, length,
- base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
- id, callback));
return id;
}
@@ -280,16 +280,16 @@ OperationID FileSystemOperationRunner::TouchFile(
base::PlatformFileError error = base::PLATFORM_FILE_OK;
FileSystemOperation* operation =
file_system_context_->CreateFileSystemOperation(url, &error);
+ OperationID id = operations_.Add(operation);
if (!operation) {
- callback.Run(error);
- return kErrorOperationID;
+ DidFinish(id, callback, error);
+ } else {
+ PrepareForWrite(id, url);
+ operation->TouchFile(
+ url, last_access_time, last_modified_time,
+ base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
+ id, callback));
}
- OperationID id = operations_.Add(operation);
- PrepareForWrite(id, url);
- operation->TouchFile(
- url, last_access_time, last_modified_time,
- base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
- id, callback));
return id;
}
@@ -301,12 +301,12 @@ OperationID FileSystemOperationRunner::OpenFile(
base::PlatformFileError error = base::PLATFORM_FILE_OK;
FileSystemOperation* operation =
file_system_context_->CreateFileSystemOperation(url, &error);
+ OperationID id = operations_.Add(operation);
if (!operation) {
- callback.Run(error, base::kInvalidPlatformFileValue,
- base::Closure(), base::ProcessHandle());
- return kErrorOperationID;
+ DidOpenFile(id, callback, error, base::kInvalidPlatformFileValue,
+ base::Closure(), base::ProcessHandle());
+ return id;
}
- OperationID id = operations_.Add(operation);
if (file_flags &
(base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_OPEN_ALWAYS |
base::PLATFORM_FILE_CREATE_ALWAYS | base::PLATFORM_FILE_OPEN_TRUNCATED |
@@ -330,16 +330,17 @@ OperationID FileSystemOperationRunner::CreateSnapshotFile(
base::PlatformFileError error = base::PLATFORM_FILE_OK;
FileSystemOperation* operation =
file_system_context_->CreateFileSystemOperation(url, &error);
+ OperationID id = operations_.Add(operation);
if (!operation) {
- callback.Run(error, base::PlatformFileInfo(), base::FilePath(), NULL);
- return kErrorOperationID;
+ DidCreateSnapshot(
+ id, callback, error, base::PlatformFileInfo(), base::FilePath(), NULL);
+ } else {
+ PrepareForRead(id, url);
+ operation->CreateSnapshotFile(
+ url,
+ base::Bind(&FileSystemOperationRunner::DidCreateSnapshot, AsWeakPtr(),
+ id, callback));
}
- OperationID id = operations_.Add(operation);
- PrepareForRead(id, url);
- operation->CreateSnapshotFile(
- url,
- base::Bind(&FileSystemOperationRunner::DidCreateSnapshot, AsWeakPtr(),
- id, callback));
return id;
}
@@ -350,15 +351,15 @@ OperationID FileSystemOperationRunner::CopyInForeignFile(
base::PlatformFileError error = base::PLATFORM_FILE_OK;
FileSystemOperation* operation =
file_system_context_->CreateFileSystemOperation(dest_url, &error);
+ OperationID id = operations_.Add(operation);
if (!operation) {
- callback.Run(error);
- return kErrorOperationID;
+ DidFinish(id, callback, error);
+ } else {
+ operation->CopyInForeignFile(
+ src_local_disk_path, dest_url,
+ base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
+ id, callback));
}
- OperationID id = operations_.Add(operation);
- operation->CopyInForeignFile(
- src_local_disk_path, dest_url,
- base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
- id, callback));
return id;
}
@@ -368,15 +369,15 @@ OperationID FileSystemOperationRunner::RemoveFile(
base::PlatformFileError error = base::PLATFORM_FILE_OK;
FileSystemOperation* operation =
file_system_context_->CreateFileSystemOperation(url, &error);
+ OperationID id = operations_.Add(operation);
if (!operation) {
- callback.Run(error);
- return kErrorOperationID;
+ DidFinish(id, callback, error);
+ } else {
+ operation->RemoveFile(
+ url,
+ base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
+ id, callback));
}
- OperationID id = operations_.Add(operation);
- operation->RemoveFile(
- url,
- base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
- id, callback));
return id;
}
@@ -386,15 +387,15 @@ OperationID FileSystemOperationRunner::RemoveDirectory(
base::PlatformFileError error = base::PLATFORM_FILE_OK;
FileSystemOperation* operation =
file_system_context_->CreateFileSystemOperation(url, &error);
+ OperationID id = operations_.Add(operation);
if (!operation) {
- callback.Run(error);
- return kErrorOperationID;
+ DidFinish(id, callback, error);
+ } else {
+ operation->RemoveDirectory(
+ url,
+ base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
+ id, callback));
}
- OperationID id = operations_.Add(operation);
- operation->RemoveDirectory(
- url,
- base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
- id, callback));
return id;
}
@@ -405,15 +406,15 @@ OperationID FileSystemOperationRunner::CopyFileLocal(
base::PlatformFileError error = base::PLATFORM_FILE_OK;
FileSystemOperation* operation =
file_system_context_->CreateFileSystemOperation(src_url, &error);
+ OperationID id = operations_.Add(operation);
if (!operation) {
- callback.Run(error);
- return kErrorOperationID;
+ DidFinish(id, callback, error);
+ } else {
+ operation->CopyFileLocal(
+ src_url, dest_url,
+ base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
+ id, callback));
}
- OperationID id = operations_.Add(operation);
- operation->CopyFileLocal(
- src_url, dest_url,
- base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
- id, callback));
return id;
}
@@ -424,15 +425,15 @@ OperationID FileSystemOperationRunner::MoveFileLocal(
base::PlatformFileError error = base::PLATFORM_FILE_OK;
FileSystemOperation* operation =
file_system_context_->CreateFileSystemOperation(src_url, &error);
+ OperationID id = operations_.Add(operation);
if (!operation) {
- callback.Run(error);
- return kErrorOperationID;
+ DidFinish(id, callback, error);
+ } else {
+ operation->MoveFileLocal(
+ src_url, dest_url,
+ base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
+ id, callback));
}
- OperationID id = operations_.Add(operation);
- operation->MoveFileLocal(
- src_url, dest_url,
- base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
- id, callback));
return id;
}
@@ -455,7 +456,8 @@ void FileSystemOperationRunner::DidFinish(
OperationID id,
const StatusCallback& callback,
base::PlatformFileError rv) {
- callback.Run(rv);
+ base::MessageLoopProxy::current()->PostTask(
+ FROM_HERE, base::Bind(callback, rv));
FinishOperation(id);
}
@@ -464,7 +466,8 @@ void FileSystemOperationRunner::DidGetMetadata(
const GetMetadataCallback& callback,
base::PlatformFileError rv,
const base::PlatformFileInfo& file_info) {
- callback.Run(rv, file_info);
+ base::MessageLoopProxy::current()->PostTask(
+ FROM_HERE, base::Bind(callback, rv, file_info));
FinishOperation(id);
}
@@ -474,7 +477,8 @@ void FileSystemOperationRunner::DidReadDirectory(
base::PlatformFileError rv,
const std::vector<DirectoryEntry>& entries,
bool has_more) {
- callback.Run(rv, entries, has_more);
+ base::MessageLoopProxy::current()->PostTask(
+ FROM_HERE, base::Bind(callback, rv, entries, has_more));
if (rv != base::PLATFORM_FILE_OK || !has_more)
FinishOperation(id);
}
@@ -485,7 +489,8 @@ void FileSystemOperationRunner::DidWrite(
base::PlatformFileError rv,
int64 bytes,
bool complete) {
- callback.Run(rv, bytes, complete);
+ base::MessageLoopProxy::current()->PostTask(
+ FROM_HERE, base::Bind(callback, rv, bytes, complete));
if (rv != base::PLATFORM_FILE_OK || complete)
FinishOperation(id);
}
@@ -497,7 +502,9 @@ void FileSystemOperationRunner::DidOpenFile(
base::PlatformFile file,
const base::Closure& on_close_callback,
base::ProcessHandle peer_handle) {
- callback.Run(rv, file, on_close_callback, peer_handle);
+ base::MessageLoopProxy::current()->PostTask(
+ FROM_HERE,
+ base::Bind(callback, rv, file, on_close_callback, peer_handle));
FinishOperation(id);
}
@@ -508,7 +515,8 @@ void FileSystemOperationRunner::DidCreateSnapshot(
const base::PlatformFileInfo& file_info,
const base::FilePath& platform_path,
const scoped_refptr<webkit_blob::ShareableFileReference>& file_ref) {
- callback.Run(rv, file_info, platform_path, file_ref);
+ base::MessageLoopProxy::current()->PostTask(
+ FROM_HERE, base::Bind(callback, rv, file_info, platform_path, file_ref));
FinishOperation(id);
}
« no previous file with comments | « webkit/browser/fileapi/file_system_operation_runner.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698