summaryrefslogtreecommitdiffstats
path: root/webkit/fileapi/file_system_operation.cc
diff options
context:
space:
mode:
authorkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-22 09:19:31 +0000
committerkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-22 09:19:31 +0000
commit397a1f4db17560722bcb45108ccf7bf07fd5139f (patch)
tree4527d92f136e2e32c2cea613e69e1cd468cab89a /webkit/fileapi/file_system_operation.cc
parent1adcd7531107e881f31ce3f1cb18a87d94935347 (diff)
downloadchromium_src-397a1f4db17560722bcb45108ccf7bf07fd5139f.zip
chromium_src-397a1f4db17560722bcb45108ccf7bf07fd5139f.tar.gz
chromium_src-397a1f4db17560722bcb45108ccf7bf07fd5139f.tar.bz2
Implement SandboxFileWriter and rewrite FileWriterDelegate to use it
BUG=127529 TEST=FileWriterDelegate*, FileSystemOperationWrite* Review URL: https://chromiumcodereview.appspot.com/10387054 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@138236 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/fileapi/file_system_operation.cc')
-rw-r--r--webkit/fileapi/file_system_operation.cc54
1 files changed, 5 insertions, 49 deletions
diff --git a/webkit/fileapi/file_system_operation.cc b/webkit/fileapi/file_system_operation.cc
index 0ca2490..95ee278 100644
--- a/webkit/fileapi/file_system_operation.cc
+++ b/webkit/fileapi/file_system_operation.cc
@@ -19,6 +19,7 @@
#include "webkit/fileapi/file_system_types.h"
#include "webkit/fileapi/file_system_util.h"
#include "webkit/fileapi/file_writer_delegate.h"
+#include "webkit/fileapi/sandbox_file_writer.h"
#include "webkit/quota/quota_manager.h"
#include "webkit/quota/quota_types.h"
@@ -79,17 +80,6 @@ FileSystemOperation::TaskParamsForDidGetQuota::TaskParamsForDidGetQuota()
FileSystemOperation::TaskParamsForDidGetQuota::~TaskParamsForDidGetQuota() {}
FileSystemOperation::~FileSystemOperation() {
- if (file_writer_delegate_.get()) {
- FileSystemOperationContext* c =
- new FileSystemOperationContext(operation_context_);
- base::FileUtilProxy::RelayClose(
- file_system_context()->file_task_runner(),
- base::Bind(&FileSystemFileUtil::Close,
- base::Unretained(src_util_),
- base::Owned(c)),
- file_writer_delegate_->file(),
- base::FileUtilProxy::StatusCallback());
- }
}
void FileSystemOperation::CreateFile(const GURL& path_url,
@@ -288,17 +278,15 @@ void FileSystemOperation::Write(
}
DCHECK(blob_url.is_valid());
file_writer_delegate_.reset(new FileWriterDelegate(
- this, src_path_, offset));
+ base::Bind(&FileSystemOperation::DidWrite, weak_factory_.GetWeakPtr()),
+ scoped_ptr<FileWriter>(
+ new SandboxFileWriter(file_system_context(), path_url, offset))));
set_write_callback(callback);
scoped_ptr<net::URLRequest> blob_request(
new net::URLRequest(blob_url, file_writer_delegate_.get()));
blob_request->set_context(url_request_context);
- GetUsageAndQuotaThenRunTask(
- src_path_.origin(), src_path_.type(),
- base::Bind(&FileSystemOperation::DoWrite, weak_factory_.GetWeakPtr(),
- base::Passed(&blob_request)),
- base::Bind(callback, base::PLATFORM_FILE_ERROR_FAILED, 0, true));
+ file_writer_delegate_->Start(blob_request.Pass());
}
void FileSystemOperation::Truncate(const GURL& path_url, int64 length,
@@ -542,23 +530,6 @@ void FileSystemOperation::DoMove(const StatusCallback& callback) {
base::Owned(this), callback));
}
-void FileSystemOperation::DoWrite(scoped_ptr<net::URLRequest> blob_request) {
- int file_flags = base::PLATFORM_FILE_OPEN |
- base::PLATFORM_FILE_WRITE |
- base::PLATFORM_FILE_ASYNC;
-
- // We may get deleted on the way so allocate a new operation context
- // to keep it alive.
- FileSystemOperationContext* write_context = new FileSystemOperationContext(
- operation_context_);
- FileSystemFileUtilProxy::CreateOrOpen(
- write_context, src_util_, src_path_, file_flags,
- base::Bind(&FileSystemOperation::OnFileOpenedForWrite,
- weak_factory_.GetWeakPtr(),
- base::Passed(&blob_request),
- base::Owned(write_context)));
-}
-
void FileSystemOperation::DoTruncate(const StatusCallback& callback,
int64 length) {
FileSystemFileUtilProxy::Truncate(
@@ -671,21 +642,6 @@ void FileSystemOperation::DidOpenFile(
callback.Run(rv, file.ReleaseValue(), peer_handle_);
}
-void FileSystemOperation::OnFileOpenedForWrite(
- scoped_ptr<net::URLRequest> blob_request,
- FileSystemOperationContext* unused,
- base::PlatformFileError rv,
- base::PassPlatformFile file,
- bool created) {
- if (rv != base::PLATFORM_FILE_OK) {
- if (!write_callback_.is_null())
- write_callback_.Run(rv, 0, false);
- delete this;
- return;
- }
- file_writer_delegate_->Start(file.ReleaseValue(), blob_request.Pass());
-}
-
base::PlatformFileError FileSystemOperation::SetUpFileSystemPath(
const GURL& path_url,
FileSystemPath* file_system_path,