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

Unified Diff: webkit/fileapi/sandbox_mount_point_provider.cc

Issue 9004019: Cleanup: Removing FileSystemPathManager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: '' Created 9 years 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/fileapi/sandbox_mount_point_provider.cc
diff --git a/webkit/fileapi/sandbox_mount_point_provider.cc b/webkit/fileapi/sandbox_mount_point_provider.cc
index 661d760ffab35a2fcd12623a95da155b664d3c0d..0d31db392627f920035740c9f4f260b8663fb6a2 100644
--- a/webkit/fileapi/sandbox_mount_point_provider.cc
+++ b/webkit/fileapi/sandbox_mount_point_provider.cc
@@ -18,7 +18,7 @@
#include "googleurl/src/gurl.h"
#include "net/base/net_util.h"
#include "webkit/fileapi/file_system_operation_context.h"
-#include "webkit/fileapi/file_system_path_manager.h"
+#include "webkit/fileapi/file_system_options.h"
#include "webkit/fileapi/file_system_types.h"
#include "webkit/fileapi/file_system_usage_cache.h"
#include "webkit/fileapi/file_system_util.h"
@@ -31,10 +31,13 @@ using quota::QuotaManagerProxy;
namespace {
-static const FilePath::CharType kOldFileSystemUniqueNamePrefix[] =
+const char kChromeScheme[] = "chrome";
+const char kExtensionScheme[] = "chrome-extension";
+
+const FilePath::CharType kOldFileSystemUniqueNamePrefix[] =
FILE_PATH_LITERAL("chrome-");
-static const int kOldFileSystemUniqueLength = 16;
-static const unsigned kOldFileSystemUniqueDirectoryNameLength =
+const int kOldFileSystemUniqueLength = 16;
+const unsigned kOldFileSystemUniqueDirectoryNameLength =
kOldFileSystemUniqueLength + arraysize(kOldFileSystemUniqueNamePrefix) - 1;
tzik 2011/12/21 02:52:33 size_t?
kinuko 2011/12/21 13:00:50 Done.
const char kOpenFileSystem[] = "FileSystem.OpenFileSystem";
@@ -48,24 +51,15 @@ enum FileSystemError {
// Restricted names.
// http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#naming-restrictions
-static const char* const kRestrictedNames[] = {
+const char* const kRestrictedNames[] = {
".", "..",
};
// Restricted chars.
-static const FilePath::CharType kRestrictedChars[] = {
+const FilePath::CharType kRestrictedChars[] = {
'/', '\\',
tzik 2011/12/21 02:52:33 FILE_PATH_LITERAL?
kinuko 2011/12/21 13:00:50 Done.
};
-inline std::string FilePathStringToASCII(
- const FilePath::StringType& path_string) {
-#if defined(OS_WIN)
- return WideToASCII(path_string);
-#elif defined(OS_POSIX)
- return path_string;
-#endif
-}
-
FilePath::StringType OldCreateUniqueDirectoryName(const GURL& origin_url) {
// This can be anything but need to be unpredictable.
static const FilePath::CharType letters[] = FILE_PATH_LITERAL(
@@ -136,14 +130,13 @@ class OldSandboxOriginEnumerator
if (current_.empty())
return GURL();
return fileapi::GetOriginURLFromIdentifier(
- FilePathStringToASCII(current_.BaseName().value()));
+ current_.BaseName().MaybeAsASCII());
}
virtual bool HasFileSystemType(fileapi::FileSystemType type) const OVERRIDE {
if (current_.empty())
return false;
- std::string directory =
- fileapi::FileSystemPathManager::GetFileSystemTypeString(type);
+ std::string directory = GetFileSystemTypeString(type);
DCHECK(!directory.empty());
return file_util::DirectoryExists(current_.AppendASCII(directory));
}
@@ -165,8 +158,7 @@ FilePath OldGetBaseDirectoryForOrigin(
FilePath OldGetBaseDirectoryForOriginAndType(
const FilePath& old_base_path,
const GURL& origin_url, fileapi::FileSystemType type) {
- std::string type_string =
- fileapi::FileSystemPathManager::GetFileSystemTypeString(type);
+ std::string type_string = GetFileSystemTypeString(type);
if (type_string.empty()) {
NOTREACHED();
return FilePath();
@@ -279,34 +271,6 @@ const FilePath::CharType
SandboxMountPointProvider::kRenamedOldFileSystemDirectory[] =
FILE_PATH_LITERAL("FS.old");
-SandboxMountPointProvider::SandboxMountPointProvider(
- FileSystemPathManager* path_manager,
- scoped_refptr<base::MessageLoopProxy> file_message_loop,
- const FilePath& profile_path)
- : FileSystemQuotaUtil(file_message_loop),
- path_manager_(path_manager),
- file_message_loop_(file_message_loop),
- profile_path_(profile_path),
- sandbox_file_util_(
- new ObfuscatedFileUtil(
- profile_path.Append(kNewFileSystemDirectory),
- QuotaFileUtil::CreateDefault())) {
-}
-
-SandboxMountPointProvider::~SandboxMountPointProvider() {
- if (!file_message_loop_->BelongsToCurrentThread())
- file_message_loop_->ReleaseSoon(FROM_HERE, sandbox_file_util_.release());
-}
-
-bool SandboxMountPointProvider::IsAccessAllowed(const GURL& origin_url,
- FileSystemType type,
- const FilePath& unused) {
- if (type != kFileSystemTypeTemporary && type != kFileSystemTypePersistent)
- return false;
- // We essentially depend on quota to do our access controls.
- return path_manager_->IsAllowedScheme(origin_url);
-}
-
class SandboxMountPointProvider::GetFileSystemRootPathTask
: public base::RefCountedThreadSafe<
SandboxMountPointProvider::GetFileSystemRootPathTask> {
@@ -317,7 +281,7 @@ class SandboxMountPointProvider::GetFileSystemRootPathTask
FileSystemType type,
ObfuscatedFileUtil* file_util,
const FilePath& old_base_path,
- const FileSystemPathManager::GetRootPathCallback& callback)
+ const FileSystemMountPointProvider::GetRootPathCallback& callback)
: file_message_loop_(file_message_loop),
origin_message_loop_proxy_(
base::MessageLoopProxy::current()),
@@ -366,8 +330,7 @@ class SandboxMountPointProvider::GetFileSystemRootPathTask
void DispatchCallback(const FilePath& root_path) {
std::string origin_identifier = GetOriginIdentifierFromURL(origin_url_);
- std::string type_string =
- FileSystemPathManager::GetFileSystemTypeString(type_);
+ std::string type_string = GetFileSystemTypeString(type_);
DCHECK(!type_string.empty());
std::string name = origin_identifier + ":" + type_string;
@@ -384,64 +347,45 @@ class SandboxMountPointProvider::GetFileSystemRootPathTask
FileSystemType type_;
scoped_refptr<ObfuscatedFileUtil> file_util_;
FilePath old_base_path_;
- FileSystemPathManager::GetRootPathCallback callback_;
+ FileSystemMountPointProvider::GetRootPathCallback callback_;
};
-FilePath SandboxMountPointProvider::old_base_path() const {
- return profile_path_.Append(kOldFileSystemDirectory);
-}
-
-FilePath SandboxMountPointProvider::new_base_path() const {
- return profile_path_.Append(kNewFileSystemDirectory);
+SandboxMountPointProvider::SandboxMountPointProvider(
+ scoped_refptr<base::MessageLoopProxy> file_message_loop,
+ const FilePath& profile_path,
+ FileSystemOptions* file_system_options)
+ : FileSystemQuotaUtil(file_message_loop),
+ file_message_loop_(file_message_loop),
+ profile_path_(profile_path),
+ file_system_options_(file_system_options),
+ sandbox_file_util_(
+ new ObfuscatedFileUtil(
+ profile_path.Append(kNewFileSystemDirectory),
+ QuotaFileUtil::CreateDefault())) {
+ DCHECK(file_system_options);
}
-FilePath SandboxMountPointProvider::renamed_old_base_path() const {
- return profile_path_.Append(kRenamedOldFileSystemDirectory);
+SandboxMountPointProvider::~SandboxMountPointProvider() {
+ if (!file_message_loop_->BelongsToCurrentThread())
+ file_message_loop_->ReleaseSoon(FROM_HERE, sandbox_file_util_.release());
}
-bool SandboxMountPointProvider::IsRestrictedFileName(const FilePath& filename)
- const {
- if (filename.value().empty())
+bool SandboxMountPointProvider::IsAccessAllowed(const GURL& origin_url,
+ FileSystemType type,
+ const FilePath& unused) {
+ if (type != kFileSystemTypeTemporary && type != kFileSystemTypePersistent)
return false;
-
- std::string filename_lower = StringToLowerASCII(
- FilePathStringToASCII(filename.value()));
-
- for (size_t i = 0; i < arraysize(kRestrictedNames); ++i) {
- // Exact match.
- if (filename_lower == kRestrictedNames[i])
- return true;
- }
-
- for (size_t i = 0; i < arraysize(kRestrictedChars); ++i) {
- if (filename.value().find(kRestrictedChars[i]) !=
- FilePath::StringType::npos)
- return true;
- }
-
- return false;
-}
-
-std::vector<FilePath> SandboxMountPointProvider::GetRootDirectories() const {
- NOTREACHED();
- // TODO(ericu): Implement this method and check for access permissions as
- // fileBrowserPrivate extension API does. We currently have another mechanism,
- // but we should switch over. This may also need to call MigrateIfNeeded().
- return std::vector<FilePath>();
-}
-
-SandboxMountPointProvider::OriginEnumerator*
-SandboxMountPointProvider::CreateOriginEnumerator() const {
- MigrateIfNeeded(sandbox_file_util_, old_base_path());
- return new ObfuscatedOriginEnumerator(sandbox_file_util_.get());
+ // We essentially depend on quota to do our access controls, so here
+ // we only check if the requested scheme is allowed or not.
+ return IsAllowedScheme(origin_url);
}
void SandboxMountPointProvider::ValidateFileSystemRootAndGetURL(
const GURL& origin_url, fileapi::FileSystemType type, bool create,
- const FileSystemPathManager::GetRootPathCallback& callback) {
+ const FileSystemMountPointProvider::GetRootPathCallback& callback) {
FilePath origin_base_path;
- if (path_manager_->is_incognito()) {
+ if (file_system_options_->is_incognito()) {
// TODO(kinuko): return an isolated temporary directory.
callback.Run(false, FilePath(), std::string());
UMA_HISTOGRAM_ENUMERATION(kOpenFileSystem,
@@ -450,7 +394,7 @@ void SandboxMountPointProvider::ValidateFileSystemRootAndGetURL(
return;
}
- if (!path_manager_->IsAllowedScheme(origin_url)) {
+ if (!IsAllowedScheme(origin_url)) {
callback.Run(false, FilePath(), std::string());
UMA_HISTOGRAM_ENUMERATION(kOpenFileSystem,
kInvalidScheme,
@@ -469,11 +413,11 @@ FilePath
SandboxMountPointProvider::ValidateFileSystemRootAndGetPathOnFileThread(
const GURL& origin_url, FileSystemType type, const FilePath& unused,
bool create) {
- if (path_manager_->is_incognito())
+ if (file_system_options_->is_incognito())
// TODO(kinuko): return an isolated temporary directory.
return FilePath();
- if (!path_manager_->IsAllowedScheme(origin_url))
+ if (!IsAllowedScheme(origin_url))
return FilePath();
MigrateIfNeeded(sandbox_file_util_, old_base_path());
@@ -482,6 +426,58 @@ SandboxMountPointProvider::ValidateFileSystemRootAndGetPathOnFileThread(
origin_url, type, create);
}
+bool SandboxMountPointProvider::IsRestrictedFileName(const FilePath& filename)
+ const {
+ if (filename.value().empty())
+ return false;
+
+ std::string filename_lower = StringToLowerASCII(filename.MaybeAsASCII());
tzik 2011/12/21 02:52:33 MaybeAsASCII will return empty string if filename
kinuko 2011/12/21 13:00:50 Good catch. Changed the code to use FilePath::Cha
+
+ for (size_t i = 0; i < arraysize(kRestrictedNames); ++i) {
+ // Exact match.
+ if (filename_lower == kRestrictedNames[i])
+ return true;
+ }
+
+ for (size_t i = 0; i < arraysize(kRestrictedChars); ++i) {
+ if (filename.value().find(kRestrictedChars[i]) !=
+ FilePath::StringType::npos)
+ return true;
+ }
+
+ return false;
+}
+
+std::vector<FilePath> SandboxMountPointProvider::GetRootDirectories() const {
+ NOTREACHED();
+ // TODO(ericu): Implement this method and check for access permissions as
+ // fileBrowserPrivate extension API does. We currently have another mechanism,
+ // but we should switch over. This may also need to call MigrateIfNeeded().
+ return std::vector<FilePath>();
+}
+
+FileSystemFileUtil* SandboxMountPointProvider::GetFileUtil() {
+ return sandbox_file_util_.get();
+}
+
+FilePath SandboxMountPointProvider::old_base_path() const {
+ return profile_path_.Append(kOldFileSystemDirectory);
+}
+
+FilePath SandboxMountPointProvider::new_base_path() const {
+ return profile_path_.Append(kNewFileSystemDirectory);
+}
+
+FilePath SandboxMountPointProvider::renamed_old_base_path() const {
+ return profile_path_.Append(kRenamedOldFileSystemDirectory);
+}
+
+SandboxMountPointProvider::OriginEnumerator*
+SandboxMountPointProvider::CreateOriginEnumerator() const {
+ MigrateIfNeeded(sandbox_file_util_, old_base_path());
+ return new ObfuscatedOriginEnumerator(sandbox_file_util_.get());
+}
+
FilePath SandboxMountPointProvider::GetBaseDirectoryForOriginAndType(
const GURL& origin_url, fileapi::FileSystemType type, bool create) const {
@@ -640,10 +636,6 @@ void SandboxMountPointProvider::InvalidateUsageCache(
FileSystemUsageCache::IncrementDirty(usage_file_path);
}
-FileSystemFileUtil* SandboxMountPointProvider::GetFileUtil() {
- return sandbox_file_util_.get();
-}
-
FilePath SandboxMountPointProvider::GetUsageCachePathForOriginAndType(
const GURL& origin_url, fileapi::FileSystemType type) const {
FilePath base_path =
@@ -678,4 +670,13 @@ FilePath SandboxMountPointProvider::OldCreateFileSystemRootPath(
return root;
}
+bool SandboxMountPointProvider::IsAllowedScheme(const GURL& url) const {
+ // Basically we only accept http or https. We allow file:// URLs
+ // only if --allow-file-access-from-files flag is given.
+ return url.SchemeIs("http") || url.SchemeIs("https") ||
+ url.SchemeIs(kExtensionScheme) || url.SchemeIs(kChromeScheme) ||
+ (url.SchemeIsFile() &&
+ file_system_options_->allow_file_access_from_files());
+}
+
} // namespace fileapi

Powered by Google App Engine
This is Rietveld 408576698