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

Unified Diff: webkit/browser/chromeos/fileapi/cros_mount_point_provider.cc

Issue 17644006: Move files under webkit/browser/fileapi/... to chrome/browser/chromeos/fileapi/... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address review comments. Created 7 years, 6 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
Index: webkit/browser/chromeos/fileapi/cros_mount_point_provider.cc
diff --git a/webkit/browser/chromeos/fileapi/cros_mount_point_provider.cc b/webkit/browser/chromeos/fileapi/cros_mount_point_provider.cc
deleted file mode 100644
index ffe2f8cdc78f6fc399c89608b5e8c4bad0fc4635..0000000000000000000000000000000000000000
--- a/webkit/browser/chromeos/fileapi/cros_mount_point_provider.cc
+++ /dev/null
@@ -1,372 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "webkit/browser/chromeos/fileapi/cros_mount_point_provider.h"
-
-#include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/message_loop.h"
-#include "base/path_service.h"
-#include "base/strings/stringprintf.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/synchronization/lock.h"
-#include "chromeos/dbus/cros_disks_client.h"
-#include "third_party/WebKit/public/platform/WebCString.h"
-#include "third_party/WebKit/public/platform/WebFileSystem.h"
-#include "third_party/WebKit/public/platform/WebString.h"
-#include "webkit/browser/chromeos/fileapi/file_access_permissions.h"
-#include "webkit/browser/chromeos/fileapi/remote_file_stream_writer.h"
-#include "webkit/browser/chromeos/fileapi/remote_file_system_operation.h"
-#include "webkit/browser/fileapi/async_file_util_adapter.h"
-#include "webkit/browser/fileapi/copy_or_move_file_validator.h"
-#include "webkit/browser/fileapi/external_mount_points.h"
-#include "webkit/browser/fileapi/file_system_context.h"
-#include "webkit/browser/fileapi/file_system_file_stream_reader.h"
-#include "webkit/browser/fileapi/file_system_operation_context.h"
-#include "webkit/browser/fileapi/file_system_task_runners.h"
-#include "webkit/browser/fileapi/file_system_url.h"
-#include "webkit/browser/fileapi/isolated_context.h"
-#include "webkit/browser/fileapi/isolated_file_util.h"
-#include "webkit/browser/fileapi/local_file_stream_writer.h"
-#include "webkit/browser/fileapi/local_file_system_operation.h"
-
-namespace {
-
-const char kChromeUIScheme[] = "chrome";
-
-} // namespace
-
-namespace chromeos {
-
-// static
-bool CrosMountPointProvider::CanHandleURL(const fileapi::FileSystemURL& url) {
- if (!url.is_valid())
- return false;
- return url.type() == fileapi::kFileSystemTypeNativeLocal ||
- url.type() == fileapi::kFileSystemTypeRestrictedNativeLocal ||
- url.type() == fileapi::kFileSystemTypeDrive;
-}
-
-CrosMountPointProvider::CrosMountPointProvider(
- scoped_refptr<quota::SpecialStoragePolicy> special_storage_policy,
- scoped_refptr<fileapi::ExternalMountPoints> mount_points,
- fileapi::ExternalMountPoints* system_mount_points)
- : special_storage_policy_(special_storage_policy),
- file_access_permissions_(new FileAccessPermissions()),
- local_file_util_(new fileapi::AsyncFileUtilAdapter(
- new fileapi::IsolatedFileUtil())),
- mount_points_(mount_points),
- system_mount_points_(system_mount_points) {
-}
-
-CrosMountPointProvider::~CrosMountPointProvider() {
-}
-
-void CrosMountPointProvider::AddSystemMountPoints() {
- // RegisterFileSystem() is no-op if the mount point with the same name
- // already exists, hence it's safe to call without checking if a mount
- // point already exists or not.
-
- // TODO(satorux): "Downloads" directory should probably be per-profile. For
- // this to be per-profile, a unique directory path should be chosen per
- // profile, and the mount point should be added to
- // mount_points_. crbug.com/247236
- base::FilePath home_path;
- if (PathService::Get(base::DIR_HOME, &home_path)) {
- system_mount_points_->RegisterFileSystem(
- "Downloads",
- fileapi::kFileSystemTypeNativeLocal,
- home_path.AppendASCII("Downloads"));
- }
-
- system_mount_points_->RegisterFileSystem(
- "archive",
- fileapi::kFileSystemTypeNativeLocal,
- chromeos::CrosDisksClient::GetArchiveMountPoint());
- system_mount_points_->RegisterFileSystem(
- "removable",
- fileapi::kFileSystemTypeNativeLocal,
- chromeos::CrosDisksClient::GetRemovableDiskMountPoint());
- system_mount_points_->RegisterFileSystem(
- "oem",
- fileapi::kFileSystemTypeRestrictedNativeLocal,
- base::FilePath(FILE_PATH_LITERAL("/usr/share/oem")));
-}
-
-bool CrosMountPointProvider::CanHandleType(fileapi::FileSystemType type) const {
- switch (type) {
- case fileapi::kFileSystemTypeExternal:
- case fileapi::kFileSystemTypeDrive:
- case fileapi::kFileSystemTypeRestrictedNativeLocal:
- case fileapi::kFileSystemTypeNativeLocal:
- case fileapi::kFileSystemTypeNativeForPlatformApp:
- return true;
- default:
- return false;
- }
-}
-
-void CrosMountPointProvider::OpenFileSystem(
- const GURL& origin_url,
- fileapi::FileSystemType type,
- fileapi::OpenFileSystemMode mode,
- const OpenFileSystemCallback& callback) {
- DCHECK(fileapi::IsolatedContext::IsIsolatedType(type));
- // Nothing to validate for external filesystem.
- callback.Run(base::PLATFORM_FILE_OK);
-}
-
-fileapi::FileSystemQuotaUtil* CrosMountPointProvider::GetQuotaUtil() {
- // No quota support.
- return NULL;
-}
-
-void CrosMountPointProvider::DeleteFileSystem(
- const GURL& origin_url,
- fileapi::FileSystemType type,
- fileapi::FileSystemContext* context,
- const DeleteFileSystemCallback& callback) {
- NOTREACHED();
- callback.Run(base::PLATFORM_FILE_ERROR_INVALID_OPERATION);
-}
-
-bool CrosMountPointProvider::IsAccessAllowed(
- const fileapi::FileSystemURL& url) const {
- if (!url.is_valid())
- return false;
-
- // Permit access to mount points from internal WebUI.
- const GURL& origin_url = url.origin();
- if (origin_url.SchemeIs(kChromeUIScheme))
- return true;
-
- // No extra check is needed for isolated file systems.
- if (url.mount_type() == fileapi::kFileSystemTypeIsolated)
- return true;
-
- if (!CanHandleURL(url))
- return false;
-
- std::string extension_id = origin_url.host();
- // Check first to make sure this extension has fileBrowserHander permissions.
- if (!special_storage_policy_->IsFileHandler(extension_id))
- return false;
-
- return file_access_permissions_->HasAccessPermission(extension_id,
- url.virtual_path());
-}
-
-void CrosMountPointProvider::GrantFullAccessToExtension(
- const std::string& extension_id) {
- DCHECK(special_storage_policy_->IsFileHandler(extension_id));
- if (!special_storage_policy_->IsFileHandler(extension_id))
- return;
-
- std::vector<fileapi::MountPoints::MountPointInfo> files;
- mount_points_->AddMountPointInfosTo(&files);
- system_mount_points_->AddMountPointInfosTo(&files);
-
- for (size_t i = 0; i < files.size(); ++i) {
- file_access_permissions_->GrantAccessPermission(
- extension_id,
- base::FilePath::FromUTF8Unsafe(files[i].name));
- }
-}
-
-void CrosMountPointProvider::GrantFileAccessToExtension(
- const std::string& extension_id, const base::FilePath& virtual_path) {
- // All we care about here is access from extensions for now.
- DCHECK(special_storage_policy_->IsFileHandler(extension_id));
- if (!special_storage_policy_->IsFileHandler(extension_id))
- return;
-
- std::string id;
- fileapi::FileSystemType type;
- base::FilePath path;
- if (!mount_points_->CrackVirtualPath(virtual_path, &id, &type, &path) &&
- !system_mount_points_->CrackVirtualPath(virtual_path,
- &id, &type, &path)) {
- return;
- }
-
- if (type == fileapi::kFileSystemTypeRestrictedNativeLocal) {
- LOG(ERROR) << "Can't grant access for restricted mount point";
- return;
- }
-
- file_access_permissions_->GrantAccessPermission(extension_id, virtual_path);
-}
-
-void CrosMountPointProvider::RevokeAccessForExtension(
- const std::string& extension_id) {
- file_access_permissions_->RevokePermissions(extension_id);
-}
-
-std::vector<base::FilePath> CrosMountPointProvider::GetRootDirectories() const {
- std::vector<fileapi::MountPoints::MountPointInfo> mount_points;
- mount_points_->AddMountPointInfosTo(&mount_points);
- system_mount_points_->AddMountPointInfosTo(&mount_points);
-
- std::vector<base::FilePath> root_dirs;
- for (size_t i = 0; i < mount_points.size(); ++i)
- root_dirs.push_back(mount_points[i].path);
- return root_dirs;
-}
-
-fileapi::FileSystemFileUtil* CrosMountPointProvider::GetFileUtil(
- fileapi::FileSystemType type) {
- DCHECK(type == fileapi::kFileSystemTypeNativeLocal ||
- type == fileapi::kFileSystemTypeRestrictedNativeLocal);
- return local_file_util_->sync_file_util();
-}
-
-fileapi::AsyncFileUtil* CrosMountPointProvider::GetAsyncFileUtil(
- fileapi::FileSystemType type) {
- DCHECK(type == fileapi::kFileSystemTypeNativeLocal ||
- type == fileapi::kFileSystemTypeRestrictedNativeLocal);
- return local_file_util_.get();
-}
-
-fileapi::CopyOrMoveFileValidatorFactory*
-CrosMountPointProvider::GetCopyOrMoveFileValidatorFactory(
- fileapi::FileSystemType type, base::PlatformFileError* error_code) {
- DCHECK(error_code);
- *error_code = base::PLATFORM_FILE_OK;
- return NULL;
-}
-
-fileapi::FilePermissionPolicy CrosMountPointProvider::GetPermissionPolicy(
- const fileapi::FileSystemURL& url, int permissions) const {
- if (url.type() == fileapi::kFileSystemTypeRestrictedNativeLocal &&
- (permissions & ~fileapi::kReadFilePermissions)) {
- // Restricted file system is read-only.
- return fileapi::FILE_PERMISSION_ALWAYS_DENY;
- }
-
- if (!IsAccessAllowed(url))
- return fileapi::FILE_PERMISSION_ALWAYS_DENY;
-
- // Permit access to mount points from internal WebUI.
- const GURL& origin_url = url.origin();
- if (origin_url.SchemeIs(kChromeUIScheme))
- return fileapi::FILE_PERMISSION_ALWAYS_ALLOW;
-
- if (url.mount_type() == fileapi::kFileSystemTypeIsolated) {
- // Permissions in isolated filesystems should be examined with
- // FileSystem permission.
- return fileapi::FILE_PERMISSION_USE_FILESYSTEM_PERMISSION;
- }
-
- // Also apply system's file permission by default.
- return fileapi::FILE_PERMISSION_USE_FILE_PERMISSION;
-}
-
-fileapi::FileSystemOperation* CrosMountPointProvider::CreateFileSystemOperation(
- const fileapi::FileSystemURL& url,
- fileapi::FileSystemContext* context,
- base::PlatformFileError* error_code) const {
- DCHECK(url.is_valid());
-
- if (url.type() == fileapi::kFileSystemTypeDrive) {
- fileapi::RemoteFileSystemProxyInterface* remote_proxy =
- GetRemoteProxy(url.filesystem_id());
- if (!remote_proxy) {
- *error_code = base::PLATFORM_FILE_ERROR_NOT_FOUND;
- return NULL;
- }
- return new chromeos::RemoteFileSystemOperation(remote_proxy);
- }
-
- DCHECK(url.type() == fileapi::kFileSystemTypeNativeLocal ||
- url.type() == fileapi::kFileSystemTypeRestrictedNativeLocal);
- scoped_ptr<fileapi::FileSystemOperationContext> operation_context(
- new fileapi::FileSystemOperationContext(context));
- operation_context->set_root_path(GetFileSystemRootPath(url));
- return new fileapi::LocalFileSystemOperation(url, context,
- operation_context.Pass());
-}
-
-scoped_ptr<webkit_blob::FileStreamReader>
-CrosMountPointProvider::CreateFileStreamReader(
- const fileapi::FileSystemURL& url,
- int64 offset,
- const base::Time& expected_modification_time,
- fileapi::FileSystemContext* context) const {
- DCHECK(url.is_valid());
-
- if (url.type() == fileapi::kFileSystemTypeDrive) {
- fileapi::RemoteFileSystemProxyInterface* remote_proxy =
- GetRemoteProxy(url.filesystem_id());
- if (!remote_proxy)
- return scoped_ptr<webkit_blob::FileStreamReader>();
- return remote_proxy->CreateFileStreamReader(
- context->task_runners()->file_task_runner(),
- url, offset, expected_modification_time);
- }
-
- return scoped_ptr<webkit_blob::FileStreamReader>(
- new fileapi::FileSystemFileStreamReader(
- context, url, offset, expected_modification_time));
-}
-
-scoped_ptr<fileapi::FileStreamWriter>
-CrosMountPointProvider::CreateFileStreamWriter(
- const fileapi::FileSystemURL& url,
- int64 offset,
- fileapi::FileSystemContext* context) const {
- DCHECK(url.is_valid());
-
- if (url.type() == fileapi::kFileSystemTypeDrive) {
- fileapi::RemoteFileSystemProxyInterface* remote_proxy =
- GetRemoteProxy(url.filesystem_id());
- if (!remote_proxy)
- return scoped_ptr<fileapi::FileStreamWriter>();
- return scoped_ptr<fileapi::FileStreamWriter>(
- new fileapi::RemoteFileStreamWriter(
- remote_proxy, url, offset,
- context->task_runners()->file_task_runner()));
- }
-
- if (url.type() == fileapi::kFileSystemTypeRestrictedNativeLocal)
- return scoped_ptr<fileapi::FileStreamWriter>();
-
- DCHECK(url.type() == fileapi::kFileSystemTypeNativeLocal);
- return scoped_ptr<fileapi::FileStreamWriter>(
- new fileapi::LocalFileStreamWriter(
- context->task_runners()->file_task_runner(), url.path(), offset));
-}
-
-bool CrosMountPointProvider::GetVirtualPath(
- const base::FilePath& filesystem_path,
- base::FilePath* virtual_path) {
- return mount_points_->GetVirtualPath(filesystem_path, virtual_path) ||
- system_mount_points_->GetVirtualPath(filesystem_path, virtual_path);
-}
-
-fileapi::RemoteFileSystemProxyInterface* CrosMountPointProvider::GetRemoteProxy(
- const std::string& mount_name) const {
- fileapi::RemoteFileSystemProxyInterface* proxy =
- mount_points_->GetRemoteFileSystemProxy(mount_name);
- if (proxy)
- return proxy;
- return system_mount_points_->GetRemoteFileSystemProxy(mount_name);
-}
-
-base::FilePath CrosMountPointProvider::GetFileSystemRootPath(
- const fileapi::FileSystemURL& url) const {
- DCHECK(fileapi::IsolatedContext::IsIsolatedType(url.mount_type()));
- if (!url.is_valid())
- return base::FilePath();
-
- base::FilePath root_path;
- std::string mount_name = url.filesystem_id();
- if (!mount_points_->GetRegisteredPath(mount_name, &root_path) &&
- !system_mount_points_->GetRegisteredPath(mount_name, &root_path)) {
- return base::FilePath();
- }
-
- return root_path.DirName();
-}
-
-} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698