Index: webkit/fileapi/file_system_path_manager.cc |
diff --git a/webkit/fileapi/file_system_path_manager.cc b/webkit/fileapi/file_system_path_manager.cc |
index 72c5355aef21bd48b48bb6cae879e00b5ecf38a2..3e0cd5e41d33928aa5d108c409cdb20e1ad8df40 100644 |
--- a/webkit/fileapi/file_system_path_manager.cc |
+++ b/webkit/fileapi/file_system_path_manager.cc |
@@ -77,6 +77,14 @@ FilePath::StringType CreateUniqueDirectoryName(const GURL& origin_url) { |
static const char kExtensionScheme[] = "chrome-extension"; |
+inline std::string GetFileSystemTypeString(fileapi::FileSystemType type) { |
+ if (type == fileapi::kFileSystemTypeTemporary) |
+ return fileapi::FileSystemPathManager::kTemporaryName; |
+ else if (type == fileapi::kFileSystemTypePersistent) |
+ return fileapi::FileSystemPathManager::kPersistentName; |
+ return std::string(); |
+} |
+ |
} // anonymous namespace |
class FileSystemPathManager::GetFileSystemRootPathTask |
@@ -198,29 +206,17 @@ void FileSystemPathManager::GetFileSystemRootPath( |
return; |
} |
- if (type != fileapi::kFileSystemTypeTemporary && |
- type != fileapi::kFileSystemTypePersistent) { |
- LOG(WARNING) << "Unknown filesystem type is requested:" << type; |
+ FilePath origin_base_path = GetFileSystemBaseDirectoryForOriginAndType( |
+ base_path(), origin_url, type); |
+ if (origin_base_path.empty()) { |
callback->Run(false, FilePath(), std::string()); |
return; |
} |
- std::string storage_identifier = GetStorageIdentifierFromURL(origin_url); |
- |
- std::string type_string; |
- if (type == fileapi::kFileSystemTypeTemporary) |
- type_string = kTemporaryName; |
- else if (type == fileapi::kFileSystemTypePersistent) |
- type_string = kPersistentName; |
- DCHECK(!type_string.empty()); |
- |
- FilePath origin_base_path = base_path_.AppendASCII(storage_identifier) |
- .AppendASCII(type_string); |
- std::string name = storage_identifier + ":" + type_string; |
- |
scoped_refptr<GetFileSystemRootPathTask> task( |
new GetFileSystemRootPathTask(file_message_loop_, |
- name, callback.release())); |
+ GetFileSystemName(origin_url, type), |
+ callback.release())); |
task->Start(origin_url, origin_base_path, create); |
} |
@@ -326,6 +322,14 @@ bool FileSystemPathManager::IsAllowedScheme(const GURL& url) const { |
(url.SchemeIsFile() && allow_file_access_from_files_); |
} |
+// static |
+std::string FileSystemPathManager::GetFileSystemName( |
+ const GURL& origin_url, fileapi::FileSystemType type) { |
+ return GetStorageIdentifierFromURL(origin_url) |
+ .append(":").append(GetFileSystemTypeString(type)); |
+} |
+ |
+// static |
std::string FileSystemPathManager::GetStorageIdentifierFromURL( |
const GURL& url) { |
WebKit::WebSecurityOrigin web_security_origin = |
@@ -333,6 +337,21 @@ std::string FileSystemPathManager::GetStorageIdentifierFromURL( |
return web_security_origin.databaseIdentifier().utf8(); |
} |
+// static |
+FilePath FileSystemPathManager::GetFileSystemBaseDirectoryForOriginAndType( |
+ const FilePath& base_path, const GURL& origin_url, |
+ fileapi::FileSystemType type) { |
+ if (!origin_url.is_valid()) |
+ return FilePath(); |
+ std::string type_string = GetFileSystemTypeString(type); |
+ if (type_string.empty()) { |
+ LOG(WARNING) << "Unknown filesystem type is requested:" << type; |
+ return FilePath(); |
+ } |
+ return base_path.AppendASCII(GetStorageIdentifierFromURL(origin_url)) |
+ .AppendASCII(type_string); |
+} |
+ |
} // namespace fileapi |
COMPILE_ASSERT(int(WebFileSystem::TypeTemporary) == \ |