Index: webkit/fileapi/isolated_context.cc |
diff --git a/webkit/fileapi/isolated_context.cc b/webkit/fileapi/isolated_context.cc |
index 1433e7240b2dcdcc6010b760f2586dbe46a70cd4..fe1aec0ce3000ff97c1cb103bd9726b8d7dfbf3c 100644 |
--- a/webkit/fileapi/isolated_context.cc |
+++ b/webkit/fileapi/isolated_context.cc |
@@ -12,6 +12,7 @@ |
#include "base/string_number_conversions.h" |
#include "base/string_util.h" |
#include "base/stringprintf.h" |
+#include "webkit/fileapi/file_system_url.h" |
namespace fileapi { |
@@ -225,6 +226,10 @@ std::string IsolatedContext::RegisterFileSystemForPath( |
return filesystem_id; |
} |
+bool IsolatedContext::HandlesFileSystemMountType(FileSystemType type) const { |
+ return type == kFileSystemTypeIsolated; |
+} |
+ |
bool IsolatedContext::RevokeFileSystem(const std::string& filesystem_id) { |
base::AutoLock locker(lock_); |
return UnregisterFileSystem(filesystem_id); |
@@ -292,6 +297,32 @@ bool IsolatedContext::CrackVirtualPath(const FilePath& virtual_path, |
return true; |
} |
+FileSystemURL IsolatedContext::CrackURL(const GURL& url) const { |
+ FileSystemURL filesystem_url = FileSystemURL(url); |
+ if (!filesystem_url.is_valid()) |
+ return FileSystemURL(); |
+ return CreateCrackedFileSystemURL(filesystem_url.origin(), |
+ filesystem_url.mount_type(), |
+ filesystem_url.path()); |
+} |
+ |
+FileSystemURL IsolatedContext::CreateCrackedFileSystemURL( |
+ const GURL& origin, |
+ FileSystemType type, |
+ const FilePath& path) const { |
+ if (!HandlesFileSystemMountType(type)) |
+ return FileSystemURL(); |
+ |
+ std::string mount_name; |
+ FileSystemType cracked_type; |
+ FilePath cracked_path; |
+ if (!CrackVirtualPath(path, &mount_name, &cracked_type, &cracked_path)) |
+ return FileSystemURL(); |
+ |
+ return FileSystemURL(origin, type, path, |
+ mount_name, cracked_type, cracked_path); |
+} |
+ |
void IsolatedContext::RevokeFileSystemByPath(const FilePath& path_in) { |
base::AutoLock locker(lock_); |
FilePath path(path_in.NormalizePathSeparators()); |