Index: webkit/fileapi/external_mount_points.cc |
diff --git a/webkit/fileapi/external_mount_points.cc b/webkit/fileapi/external_mount_points.cc |
index 58a8883acf53fb1348434519186a3d1d81c5a9c6..13a10865ad909cd421dd9678318570b776f995ba 100644 |
--- a/webkit/fileapi/external_mount_points.cc |
+++ b/webkit/fileapi/external_mount_points.cc |
@@ -129,7 +129,8 @@ bool ExternalMountPoints::RegisterRemoteFileSystem( |
bool ExternalMountPoints::HandlesFileSystemMountType( |
FileSystemType type) const { |
- return type == kFileSystemTypeExternal; |
+ return type == kFileSystemTypeExternal || |
+ type == kFileSystemTypeExternalFullPath; |
} |
bool ExternalMountPoints::RevokeFileSystem(const std::string& mount_name) { |
@@ -203,26 +204,40 @@ FileSystemURL ExternalMountPoints::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()); |
+ return CrackFileSystemURL(filesystem_url); |
} |
-FileSystemURL ExternalMountPoints::CreateCrackedFileSystemURL( |
- const GURL& origin, |
- FileSystemType type, |
- const base::FilePath& path) const { |
- if (!HandlesFileSystemMountType(type)) |
+FileSystemURL ExternalMountPoints::CrackFileSystemURL( |
+ const FileSystemURL& url) const { |
+ if (!HandlesFileSystemMountType(url.type())) |
return FileSystemURL(); |
+ base::FilePath virtual_path = url.path(); |
+ if (url.type() == kFileSystemTypeExternalFullPath) { |
+ if (!GetVirtualPath(url.path(), &virtual_path)) |
+ return FileSystemURL(); |
+ } |
+ |
std::string mount_name; |
FileSystemType cracked_type; |
base::FilePath cracked_path; |
- if (!CrackVirtualPath(path, &mount_name, &cracked_type, &cracked_path)) |
+ |
+ if (!CrackVirtualPath(virtual_path, &mount_name, &cracked_type, |
+ &cracked_path)) { |
return FileSystemURL(); |
+ } |
+ |
+ return FileSystemURL( |
+ url.origin(), url.mount_type(), url.virtual_path(), |
+ !url.filesystem_id().empty() ? url.filesystem_id() : mount_name, |
+ cracked_type, cracked_path, mount_name); |
+} |
- return FileSystemURL(origin, type, path, |
- mount_name, cracked_type, cracked_path); |
+FileSystemURL ExternalMountPoints::CreateCrackedFileSystemURL( |
+ const GURL& origin, |
+ FileSystemType type, |
+ const base::FilePath& path) const { |
+ return CrackFileSystemURL(FileSystemURL(origin, type, path)); |
} |
RemoteFileSystemProxyInterface* ExternalMountPoints::GetRemoteFileSystemProxy( |
@@ -245,13 +260,13 @@ void ExternalMountPoints::AddMountPointInfosTo( |
} |
bool ExternalMountPoints::GetVirtualPath(const base::FilePath& path_in, |
- base::FilePath* virtual_path) { |
+ base::FilePath* virtual_path) const { |
DCHECK(virtual_path); |
base::AutoLock locker(lock_); |
base::FilePath path = NormalizeFilePath(path_in); |
- std::map<base::FilePath, std::string>::reverse_iterator iter( |
+ std::map<base::FilePath, std::string>::const_reverse_iterator iter( |
path_to_name_map_.upper_bound(path)); |
if (iter == path_to_name_map_.rend()) |
return false; |