Index: webkit/fileapi/file_system_context.cc |
diff --git a/webkit/fileapi/file_system_context.cc b/webkit/fileapi/file_system_context.cc |
index 017cf29f417ed78b3a73a84a6a864fdbf0f909b5..33825f6c0fd42dabec68fce7c47154f879c38237 100644 |
--- a/webkit/fileapi/file_system_context.cc |
+++ b/webkit/fileapi/file_system_context.cc |
@@ -150,6 +150,7 @@ FileSystemMountPointProvider* FileSystemContext::GetMountPointProvider( |
case kFileSystemTypeDeviceMedia: |
return isolated_provider_.get(); |
case kFileSystemTypeNativeLocal: |
+ case kFileSystemTypeNativeForPlatformApp: |
#if defined(OS_CHROMEOS) |
return external_provider_.get(); |
#else |
@@ -349,20 +350,24 @@ FileSystemURL FileSystemContext::CrackFileSystemURL( |
// The returned value in case there is no crackers which can crack the url. |
// This is valid situation for non isolated/external file systems. |
- FileSystemURL result = url; |
- |
- for (size_t i = 0; i < url_crackers_.size(); ++i) { |
- if (!url_crackers_[i]->HandlesFileSystemMountType(url.type())) |
- continue; |
- |
- result = url_crackers_[i]->CreateCrackedFileSystemURL(url.origin(), |
- url.type(), |
- url.path()); |
- if (result.is_valid()) |
- return result; |
+ FileSystemURL current = url; |
+ |
+ // File system may be mounted multiple times (e.g., an isolated filesystem on |
+ // top of an external filesystem). Hence cracking needs to be iterated. |
+ for (;;) { |
+ FileSystemURL cracked = current; |
+ for (size_t i = 0; i < url_crackers_.size(); ++i) { |
+ if (!url_crackers_[i]->HandlesFileSystemMountType(current.type())) |
+ continue; |
+ cracked = url_crackers_[i]->CrackFileSystemURL(current); |
+ if (cracked.is_valid()) |
+ break; |
+ } |
+ if (cracked == current) |
+ break; |
+ current = cracked; |
} |
- |
- return result; |
+ return current; |
} |
FileSystemFileUtil* FileSystemContext::GetFileUtil( |