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

Unified Diff: chrome/browser/file_system/file_system_dispatcher_host.cc

Issue 4054003: FileSystem code cleanup 2nd cut - introduce SandboxedFileSystemOperation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 10 years, 1 month 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 | « chrome/browser/file_system/file_system_dispatcher_host.h ('k') | webkit/fileapi/file_system_operation.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/file_system/file_system_dispatcher_host.cc
diff --git a/chrome/browser/file_system/file_system_dispatcher_host.cc b/chrome/browser/file_system/file_system_dispatcher_host.cc
index 3ebda7b8aa1d78d549b796e5b1d0ca08d6d62b85..12b4d19c474beed209d4feb6bbe61e94703a137e 100644
--- a/chrome/browser/file_system/file_system_dispatcher_host.cc
+++ b/chrome/browser/file_system/file_system_dispatcher_host.cc
@@ -20,58 +20,13 @@
#include "chrome/common/render_messages_params.h"
#include "googleurl/src/gurl.h"
#include "net/url_request/url_request_context.h"
+#include "webkit/fileapi/file_system_operation.h"
#include "webkit/fileapi/file_system_path_manager.h"
#include "webkit/fileapi/file_system_quota_manager.h"
+#include "webkit/fileapi/sandboxed_file_system_operation.h"
using fileapi::FileSystemQuotaManager;
-
-class FileSystemDispatcherHost::OpenFileSystemTask {
- public:
- static void Start(
- int request_id,
- const GURL& origin_url,
- fileapi::FileSystemType type,
- bool create,
- FileSystemDispatcherHost* dispatcher_host) {
- // The task is self-destructed.
- new OpenFileSystemTask(
- request_id, origin_url, type, create, dispatcher_host);
- }
-
- private:
- void DidGetRootPath(bool success, const FilePath& root_path,
- const std::string& name) {
- if (success)
- dispatcher_host_->Send(
- new ViewMsg_OpenFileSystemRequest_Complete(
- request_id_, true, name, root_path));
- else
- dispatcher_host_->Send(
- new ViewMsg_OpenFileSystemRequest_Complete(
- request_id_, false, std::string(), FilePath()));
- delete this;
- }
-
- OpenFileSystemTask(
- int request_id,
- const GURL& origin_url,
- fileapi::FileSystemType type,
- bool create,
- FileSystemDispatcherHost* dispatcher_host)
- : request_id_(request_id),
- dispatcher_host_(dispatcher_host),
- callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
- dispatcher_host->context_->path_manager()->GetFileSystemRootPath(
- origin_url, type, create,
- callback_factory_.NewCallback(&OpenFileSystemTask::DidGetRootPath));
- }
-
- int request_id_;
- std::string name_;
- FilePath root_path_;
- scoped_refptr<FileSystemDispatcherHost> dispatcher_host_;
- base::ScopedCallbackFactory<OpenFileSystemTask> callback_factory_;
-};
+using fileapi::SandboxedFileSystemOperation;
FileSystemDispatcherHost::FileSystemDispatcherHost(
IPC::Message::Sender* sender, Profile* profile)
@@ -156,48 +111,32 @@ void FileSystemDispatcherHost::OnOpenFileSystem(
return;
}
- OpenFileSystemTask::Start(request_id, origin_url, type, create, this);
+ GetNewOperation(request_id)->OpenFileSystem(origin_url, type, create);
}
void FileSystemDispatcherHost::OnMove(
int request_id, const FilePath& src_path, const FilePath& dest_path) {
- if (!VerifyFileSystemPathForRead(src_path, request_id) ||
- !VerifyFileSystemPathForWrite(dest_path, request_id, true /* create */,
- FileSystemQuotaManager::kUnknownSize))
- return;
-
GetNewOperation(request_id)->Move(src_path, dest_path);
}
void FileSystemDispatcherHost::OnCopy(
int request_id, const FilePath& src_path, const FilePath& dest_path) {
- if (!VerifyFileSystemPathForRead(src_path, request_id) ||
- !VerifyFileSystemPathForWrite(dest_path, request_id, true /* create */,
- FileSystemQuotaManager::kUnknownSize))
- return;
-
GetNewOperation(request_id)->Copy(src_path, dest_path);
}
void FileSystemDispatcherHost::OnRemove(
int request_id, const FilePath& path, bool recursive) {
- if (!VerifyFileSystemPathForWrite(path, request_id, false /* create */, 0))
- return;
GetNewOperation(request_id)->Remove(path, recursive);
}
void FileSystemDispatcherHost::OnReadMetadata(
int request_id, const FilePath& path) {
- if (!VerifyFileSystemPathForRead(path, request_id))
- return;
GetNewOperation(request_id)->GetMetadata(path);
}
void FileSystemDispatcherHost::OnCreate(
int request_id, const FilePath& path, bool exclusive,
bool is_directory, bool recursive) {
- if (!VerifyFileSystemPathForWrite(path, request_id, true /* create */, 0))
- return;
if (is_directory)
GetNewOperation(request_id)->CreateDirectory(path, exclusive, recursive);
else
@@ -206,8 +145,6 @@ void FileSystemDispatcherHost::OnCreate(
void FileSystemDispatcherHost::OnExists(
int request_id, const FilePath& path, bool is_directory) {
- if (!VerifyFileSystemPathForRead(path, request_id))
- return;
if (is_directory)
GetNewOperation(request_id)->DirectoryExists(path);
else
@@ -216,8 +153,6 @@ void FileSystemDispatcherHost::OnExists(
void FileSystemDispatcherHost::OnReadDirectory(
int request_id, const FilePath& path) {
- if (!VerifyFileSystemPathForRead(path, request_id))
- return;
GetNewOperation(request_id)->ReadDirectory(path);
}
@@ -226,9 +161,6 @@ void FileSystemDispatcherHost::OnWrite(
const FilePath& path,
const GURL& blob_url,
int64 offset) {
- if (!VerifyFileSystemPathForWrite(path, request_id, true /* create */,
- FileSystemQuotaManager::kUnknownSize))
- return;
GetNewOperation(request_id)->Write(
request_context_, path, blob_url, offset);
}
@@ -237,8 +169,6 @@ void FileSystemDispatcherHost::OnTruncate(
int request_id,
const FilePath& path,
int64 length) {
- if (!VerifyFileSystemPathForWrite(path, request_id, false /* create */, 0))
- return;
GetNewOperation(request_id)->Truncate(path, length);
}
@@ -247,8 +177,6 @@ void FileSystemDispatcherHost::OnTouchFile(
const FilePath& path,
const base::Time& last_access_time,
const base::Time& last_modified_time) {
- if (!VerifyFileSystemPathForWrite(path, request_id, true /* create */, 0))
- return;
GetNewOperation(request_id)->TouchFile(
path, last_access_time, last_modified_time);
}
@@ -256,8 +184,8 @@ void FileSystemDispatcherHost::OnTouchFile(
void FileSystemDispatcherHost::OnCancel(
int request_id,
int request_id_to_cancel) {
- fileapi::FileSystemOperation* write =
- operations_.Lookup(request_id_to_cancel);
+ SandboxedFileSystemOperation* write = operations_.Lookup(
+ request_id_to_cancel);
if (write) {
// The cancel will eventually send both the write failure and the cancel
// success.
@@ -277,69 +205,14 @@ void FileSystemDispatcherHost::Send(IPC::Message* message) {
delete message;
}
-bool FileSystemDispatcherHost::VerifyFileSystemPathForRead(
- const FilePath& path, int request_id) {
- // We may want do more checks, but for now it just checks if the given
- // |path| is under the valid FileSystem root path for this host context.
- if (!context_->path_manager()->CrackFileSystemPath(
- path, NULL, NULL, NULL)) {
- Send(new ViewMsg_FileSystem_DidFail(
- request_id, base::PLATFORM_FILE_ERROR_SECURITY));
- return false;
- }
- return true;
-}
-
-bool FileSystemDispatcherHost::VerifyFileSystemPathForWrite(
- const FilePath& path, int request_id, bool create, int64 growth) {
- GURL origin_url;
- FilePath virtual_path;
- if (!context_->path_manager()->CrackFileSystemPath(
- path, &origin_url, NULL, &virtual_path)) {
- Send(new ViewMsg_FileSystem_DidFail(
- request_id, base::PLATFORM_FILE_ERROR_SECURITY));
- return false;
- }
- // Any write access is disallowed on the root path.
- if (virtual_path.value().length() == 0 ||
- virtual_path.DirName().value() == virtual_path.value()) {
- Send(new ViewMsg_FileSystem_DidFail(
- request_id, base::PLATFORM_FILE_ERROR_SECURITY));
- return false;
- }
- if (create && context_->path_manager()->IsRestrictedFileName(
- path.BaseName())) {
- Send(new ViewMsg_FileSystem_DidFail(
- request_id, base::PLATFORM_FILE_ERROR_SECURITY));
- return false;
- }
- // TODO(kinuko): For operations with kUnknownSize we'll eventually
- // need to resolve what amount of size it's going to write.
- if (!context_->CheckOriginQuota(origin_url, growth)) {
- Send(new ViewMsg_FileSystem_DidFail(
- request_id, base::PLATFORM_FILE_ERROR_NO_SPACE));
- return false;
- }
- return true;
-}
-
-bool FileSystemDispatcherHost::CheckIfFilePathIsSafe(
- const FilePath& path, int request_id) {
- if (context_->path_manager()->IsRestrictedFileName(path.BaseName())) {
- Send(new ViewMsg_FileSystem_DidFail(
- request_id, base::PLATFORM_FILE_ERROR_SECURITY));
- return false;
- }
- return true;
-}
-
-fileapi::FileSystemOperation* FileSystemDispatcherHost::GetNewOperation(
+SandboxedFileSystemOperation* FileSystemDispatcherHost::GetNewOperation(
int request_id) {
BrowserFileSystemCallbackDispatcher* dispatcher =
new BrowserFileSystemCallbackDispatcher(this, request_id);
- fileapi::FileSystemOperation* operation = new fileapi::FileSystemOperation(
+ SandboxedFileSystemOperation* operation = new SandboxedFileSystemOperation(
dispatcher,
- BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE));
+ BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE),
+ context_.get());
operations_.AddWithID(operation, request_id);
return operation;
}
« no previous file with comments | « chrome/browser/file_system/file_system_dispatcher_host.h ('k') | webkit/fileapi/file_system_operation.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698