Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(90)

Unified Diff: webkit/fileapi/file_system_context.cc

Issue 12717014: Launch packaged app with files on Drive on Chrome OS. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..383b1577a1fdc536e9bb149874b82d62c40e9898 100644
--- a/webkit/fileapi/file_system_context.cc
+++ b/webkit/fileapi/file_system_context.cc
@@ -141,6 +141,7 @@ FileSystemMountPointProvider* FileSystemContext::GetMountPointProvider(
case kFileSystemTypeSyncable:
return sandbox_provider_.get();
case kFileSystemTypeExternal:
+ case kFileSystemTypeExternalFullPath:
case kFileSystemTypeDrive:
case kFileSystemTypeRestrictedNativeLocal:
return external_provider_.get();
@@ -349,20 +350,26 @@ 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;
+ bool crack_happened = false;
+ for (size_t i = 0; i < url_crackers_.size(); ++i) {
+ if (!url_crackers_[i]->HandlesFileSystemMountType(current.type()))
+ continue;
+ crack_happened = true;
+ cracked = url_crackers_[i]->CrackFileSystemURL(current);
+ if (cracked.is_valid())
+ break;
+ }
+ if (!crack_happened)
kinuko 2013/03/19 20:34:50 nit: if (cracked == current) may be enough
kinaba 2013/03/21 07:35:13 Done.
+ break;
+ current = cracked;
}
-
- return result;
+ return current;
}
FileSystemFileUtil* FileSystemContext::GetFileUtil(

Powered by Google App Engine
This is Rietveld 408576698