summaryrefslogtreecommitdiffstats
path: root/webkit/browser/fileapi/sandbox_file_system_backend_delegate.cc
diff options
context:
space:
mode:
authorkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-19 18:15:10 +0000
committerkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-19 18:15:10 +0000
commitc19e2ff3cae12fb055ffed194b3a5a9c908cf996 (patch)
tree3f6f9bebaf88c0df74911110c8a504769b72f3b5 /webkit/browser/fileapi/sandbox_file_system_backend_delegate.cc
parent9f123a0fbd7d95a24a37b5e5069ee010124d3152 (diff)
downloadchromium_src-c19e2ff3cae12fb055ffed194b3a5a9c908cf996.zip
chromium_src-c19e2ff3cae12fb055ffed194b3a5a9c908cf996.tar.gz
chromium_src-c19e2ff3cae12fb055ffed194b3a5a9c908cf996.tar.bz2
Give type directory string for given URL from outside ObfuscatedFileUtil
This patch moves FileSystemType to type string map outside ObfuscatedFileUtil and let it take 'type string' from outside the ObfuscatedFileUtil (so that we can later utilize the 'type string' field for plugin/MIME-type private filesystem). Brief plausible plan: - Use separate ObfuscatedFileUtil in its own directory for plugin-private - Utilize type_string field for MIME type (this should be ok since we only store data for PluginPrivate type in this separate directory) - Record { filesystem_id: mime-type } pair for each OpenPrivateFileSystem() in PluginPrivateFileSystemBackend - GetTypeStringForURLCallback given in ctor can look up this table to get type_string - (We need to unregister filesystem_id when it's no longer needed) BUG=286240 TEST=content_unittests:ObfuscatedFileUtil*,Sandbox* Review URL: https://codereview.chromium.org/27168004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@229603 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/browser/fileapi/sandbox_file_system_backend_delegate.cc')
-rw-r--r--webkit/browser/fileapi/sandbox_file_system_backend_delegate.cc67
1 files changed, 61 insertions, 6 deletions
diff --git a/webkit/browser/fileapi/sandbox_file_system_backend_delegate.cc b/webkit/browser/fileapi/sandbox_file_system_backend_delegate.cc
index dc3b298..754c3b4 100644
--- a/webkit/browser/fileapi/sandbox_file_system_backend_delegate.cc
+++ b/webkit/browser/fileapi/sandbox_file_system_backend_delegate.cc
@@ -36,6 +36,13 @@ const char kOpenFileSystemDetailNonThrottledLabel[] =
"FileSystem.OpenFileSystemDetailNonthrottled";
int64 kMinimumStatsCollectionIntervalHours = 1;
+// For type directory names in ObfuscatedFileUtil.
+// TODO(kinuko,nhiroki): Each type string registration should be done
+// via its own backend.
+const char kTemporaryDirectoryName[] = "t";
+const char kPersistentDirectoryName[] = "p";
+const char kSyncableDirectoryName[] = "s";
+
enum FileSystemError {
kOK = 0,
kIncognito,
@@ -57,6 +64,18 @@ const base::FilePath::CharType kRestrictedChars[] = {
FILE_PATH_LITERAL('/'), FILE_PATH_LITERAL('\\'),
};
+std::string GetTypeStringForURL(const FileSystemURL& url) {
+ return SandboxFileSystemBackendDelegate::GetTypeString(url.type());
+}
+
+std::set<std::string> GetKnownTypeStrings() {
+ std::set<std::string> known_type_strings;
+ known_type_strings.insert(kTemporaryDirectoryName);
+ known_type_strings.insert(kPersistentDirectoryName);
+ known_type_strings.insert(kSyncableDirectoryName);
+ return known_type_strings;
+}
+
class ObfuscatedOriginEnumerator
: public SandboxFileSystemBackendDelegate::OriginEnumerator {
public:
@@ -70,7 +89,8 @@ class ObfuscatedOriginEnumerator
}
virtual bool HasFileSystemType(FileSystemType type) const OVERRIDE {
- return enum_->HasFileSystemType(type);
+ return enum_->HasTypeDirectory(
+ SandboxFileSystemBackendDelegate::GetTypeString(type));
}
private:
@@ -85,7 +105,9 @@ void OpenFileSystemOnFileThread(
base::PlatformFileError* error_ptr) {
DCHECK(error_ptr);
const bool create = (mode == OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT);
- file_util->GetDirectoryForOriginAndType(origin_url, type, create, error_ptr);
+ file_util->GetDirectoryForOriginAndType(
+ origin_url, SandboxFileSystemBackendDelegate::GetTypeString(type),
+ create, error_ptr);
if (*error_ptr != base::PLATFORM_FILE_OK) {
UMA_HISTOGRAM_ENUMERATION(kOpenFileSystemLabel,
kCreateDirectoryError,
@@ -113,6 +135,24 @@ const base::FilePath::CharType
SandboxFileSystemBackendDelegate::kFileSystemDirectory[] =
FILE_PATH_LITERAL("File System");
+// static
+std::string SandboxFileSystemBackendDelegate::GetTypeString(
+ FileSystemType type) {
+ switch (type) {
+ case kFileSystemTypeTemporary:
+ return kTemporaryDirectoryName;
+ case kFileSystemTypePersistent:
+ return kPersistentDirectoryName;
+ case kFileSystemTypeSyncable:
+ case kFileSystemTypeSyncableForInternalSync:
+ return kSyncableDirectoryName;
+ case kFileSystemTypeUnknown:
+ default:
+ NOTREACHED() << "Unknown filesystem type requested:" << type;
+ return std::string();
+ }
+}
+
SandboxFileSystemBackendDelegate::SandboxFileSystemBackendDelegate(
quota::QuotaManagerProxy* quota_manager_proxy,
base::SequencedTaskRunner* file_task_runner,
@@ -124,7 +164,9 @@ SandboxFileSystemBackendDelegate::SandboxFileSystemBackendDelegate(
new ObfuscatedFileUtil(
special_storage_policy,
profile_path.Append(kFileSystemDirectory),
- file_task_runner))),
+ file_task_runner,
+ base::Bind(&GetTypeStringForURL),
+ GetKnownTypeStrings()))),
file_system_usage_cache_(new FileSystemUsageCache(file_task_runner)),
quota_observer_(new SandboxQuotaObserver(
quota_manager_proxy,
@@ -165,7 +207,7 @@ SandboxFileSystemBackendDelegate::GetBaseDirectoryForOriginAndType(
bool create) {
base::PlatformFileError error = base::PLATFORM_FILE_OK;
base::FilePath path = obfuscated_file_util()->GetDirectoryForOriginAndType(
- origin_url, type, create, &error);
+ origin_url, GetTypeString(type), create, &error);
if (error != base::PLATFORM_FILE_OK)
return base::FilePath();
return path;
@@ -259,7 +301,7 @@ SandboxFileSystemBackendDelegate::DeleteOriginDataOnFileThread(
file_system_context, origin_url, type);
usage_cache()->CloseCacheFiles();
bool result = obfuscated_file_util()->DeleteDirectoryForOriginAndType(
- origin_url, type);
+ origin_url, GetTypeString(type));
if (result && proxy) {
proxy->NotifyStorageModified(
quota::QuotaClient::kFileSystem,
@@ -499,7 +541,7 @@ SandboxFileSystemBackendDelegate::GetUsageCachePathForOriginAndType(
DCHECK(error_out);
*error_out = base::PLATFORM_FILE_OK;
base::FilePath base_path = sandbox_file_util->GetDirectoryForOriginAndType(
- origin_url, type, false /* create */, error_out);
+ origin_url, GetTypeString(type), false /* create */, error_out);
if (*error_out != base::PLATFORM_FILE_OK)
return base::FilePath();
return base_path.Append(FileSystemUsageCache::kUsageFileName);
@@ -568,4 +610,17 @@ ObfuscatedFileUtil* SandboxFileSystemBackendDelegate::obfuscated_file_util() {
return static_cast<ObfuscatedFileUtil*>(sync_file_util());
}
+// Declared in obfuscated_file_util.h.
+// static
+ObfuscatedFileUtil* ObfuscatedFileUtil::CreateForTesting(
+ quota::SpecialStoragePolicy* special_storage_policy,
+ const base::FilePath& file_system_directory,
+ base::SequencedTaskRunner* file_task_runner) {
+ return new ObfuscatedFileUtil(special_storage_policy,
+ file_system_directory,
+ file_task_runner,
+ base::Bind(&GetTypeStringForURL),
+ GetKnownTypeStrings());
+}
+
} // namespace fileapi