Index: webkit/fileapi/file_system_context.cc |
diff --git a/webkit/fileapi/file_system_context.cc b/webkit/fileapi/file_system_context.cc |
index 72558d9522434e606dfe2c76e5dacea702188a3a..e00ae6165a6fa0d98b7899777b05993d50566237 100644 |
--- a/webkit/fileapi/file_system_context.cc |
+++ b/webkit/fileapi/file_system_context.cc |
@@ -28,11 +28,6 @@ |
#include "webkit/fileapi/syncable/syncable_file_system_util.h" |
#include "webkit/fileapi/test_mount_point_provider.h" |
#include "webkit/quota/quota_manager.h" |
-#include "webkit/quota/special_storage_policy.h" |
- |
-#if defined(OS_CHROMEOS) |
-#include "webkit/chromeos/fileapi/cros_mount_point_provider.h" |
-#endif |
using quota::QuotaClient; |
@@ -58,9 +53,9 @@ void DidOpenFileSystem( |
FileSystemContext::FileSystemContext( |
scoped_ptr<FileSystemTaskRunners> task_runners, |
- ExternalMountPoints* external_mount_points, |
- quota::SpecialStoragePolicy* special_storage_policy, |
quota::QuotaManagerProxy* quota_manager_proxy, |
+ ScopedVector<FileSystemMountPointProvider> additional_providers, |
+ const std::vector<MountPoints*>& additional_mount_points, |
const base::FilePath& partition_path, |
const FileSystemOptions& options) |
: task_runners_(task_runners.Pass()), |
@@ -72,28 +67,33 @@ FileSystemContext::FileSystemContext( |
partition_path, |
options)), |
isolated_provider_(new IsolatedMountPointProvider(partition_path)), |
- external_mount_points_(external_mount_points), |
+ additional_providers_(additional_providers.Pass()), |
partition_path_(partition_path) { |
DCHECK(task_runners_.get()); |
+ RegisterMountPointProvider(sandbox_provider_.get()); |
+ RegisterMountPointProvider(isolated_provider_.get()); |
+ |
+ for (ScopedVector<FileSystemMountPointProvider>::const_iterator iter = |
+ additional_providers_.begin(); |
+ iter != additional_providers_.end(); ++iter) { |
+ RegisterMountPointProvider(*iter); |
+ } |
+ |
if (quota_manager_proxy) { |
quota_manager_proxy->RegisterClient(CreateQuotaClient( |
this, options.is_incognito())); |
} |
-#if defined(OS_CHROMEOS) |
- DCHECK(external_mount_points); |
- external_provider_.reset( |
- new chromeos::CrosMountPointProvider( |
- special_storage_policy, |
- external_mount_points, |
- ExternalMountPoints::GetSystemInstance())); |
-#endif |
- |
- if (external_mount_points) |
- url_crackers_.push_back(external_mount_points); |
- url_crackers_.push_back(ExternalMountPoints::GetSystemInstance()); |
- url_crackers_.push_back(IsolatedContext::GetInstance()); |
+ // Additional mount points must be added before regular system-wide |
+ // mount points. |
+ for (std::vector<fileapi::MountPoints*>::const_iterator iter = |
+ additional_mount_points.begin(); |
+ iter != additional_mount_points.end(); ++iter) { |
+ url_crackers_.push_back(*iter); |
+ } |
+ url_crackers_.push_back(fileapi::ExternalMountPoints::GetSystemInstance()); |
+ url_crackers_.push_back(fileapi::IsolatedContext::GetInstance()); |
} |
bool FileSystemContext::DeleteDataForOriginOnFileThread( |
@@ -151,35 +151,10 @@ FileSystemContext::GetCopyOrMoveFileValidatorFactory( |
FileSystemMountPointProvider* FileSystemContext::GetMountPointProvider( |
FileSystemType type) const { |
- switch (type) { |
- case kFileSystemTypeTemporary: |
- case kFileSystemTypePersistent: |
- case kFileSystemTypeSyncable: |
- return sandbox_provider_.get(); |
- case kFileSystemTypeExternal: |
- case kFileSystemTypeDrive: |
- case kFileSystemTypeRestrictedNativeLocal: |
- return external_provider_.get(); |
- case kFileSystemTypeIsolated: |
- case kFileSystemTypeDragged: |
- case kFileSystemTypeNativeMedia: |
- case kFileSystemTypeDeviceMedia: |
- return isolated_provider_.get(); |
- case kFileSystemTypeNativeLocal: |
- case kFileSystemTypeNativeForPlatformApp: |
-#if defined(OS_CHROMEOS) |
- return external_provider_.get(); |
-#else |
- return isolated_provider_.get(); |
-#endif |
- default: |
- if (provider_map_.find(type) != provider_map_.end()) |
- return provider_map_.find(type)->second; |
- // Fall through. |
- case kFileSystemTypeUnknown: |
- NOTREACHED(); |
- return NULL; |
- } |
+ if (provider_map_.find(type) != provider_map_.end()) |
+ return provider_map_.find(type)->second; |
tzik
2013/04/17 12:06:04
could you reuse the result of find(type)?
kinuko
2013/04/17 14:27:29
Done.
|
+ NOTREACHED() << "Unknown filesystem type: " << type; |
+ return NULL; |
} |
const UpdateObserverList* FileSystemContext::GetUpdateObservers( |
@@ -189,7 +164,7 @@ const UpdateObserverList* FileSystemContext::GetUpdateObservers( |
// TODO(kinuko): Probably GetUpdateObservers() virtual method should be |
// added to FileSystemMountPointProvider interface and be called like |
// other GetFoo() methods do. |
- if (SandboxMountPointProvider::CanHandleType(type)) |
+ if (SandboxMountPointProvider::IsSandboxType(type)) |
return sandbox_provider()->GetUpdateObservers(type); |
if (type != kFileSystemTypeTest) |
return NULL; |
@@ -206,7 +181,11 @@ FileSystemContext::sandbox_provider() const { |
ExternalFileSystemMountPointProvider* |
FileSystemContext::external_provider() const { |
- return external_provider_.get(); |
+ ExternalFileSystemMountPointProvider* external_provider = |
+ static_cast<ExternalFileSystemMountPointProvider*>( |
+ GetMountPointProvider(kFileSystemTypeExternal)); |
+ DCHECK(external_provider); |
+ return external_provider; |
} |
void FileSystemContext::OpenFileSystem( |
@@ -320,12 +299,13 @@ scoped_ptr<FileStreamWriter> FileSystemContext::CreateFileStreamWriter( |
return mount_point_provider->CreateFileStreamWriter(url, offset, this); |
} |
-void FileSystemContext::RegisterMountPointProvider( |
+void FileSystemContext::RegisterMountPointProviderForTesting( |
FileSystemType type, |
FileSystemMountPointProvider* provider) { |
DCHECK(provider); |
DCHECK(provider_map_.find(type) == provider_map_.end()); |
provider_map_[type] = provider; |
+ additional_providers_.push_back(provider); |
} |
void FileSystemContext::SetLocalFileChangeTracker( |
@@ -367,8 +347,6 @@ void FileSystemContext::DeleteOnCorrectThread() const { |
task_runners_->io_task_runner()->DeleteSoon(FROM_HERE, this)) { |
return; |
} |
- STLDeleteContainerPairSecondPointers(provider_map_.begin(), |
- provider_map_.end()); |
delete this; |
} |
@@ -408,4 +386,26 @@ FileSystemFileUtil* FileSystemContext::GetFileUtil( |
return mount_point_provider->GetFileUtil(type); |
} |
+void FileSystemContext::RegisterMountPointProvider( |
+ FileSystemMountPointProvider* provider) { |
+ static const FileSystemType mount_types[] = { |
tzik
2013/04/17 12:06:04
could you move this to the top of the file?
kinuko
2013/04/17 14:27:29
It's only referred in this method-- I just dropped
|
+ kFileSystemTypeTemporary, |
+ kFileSystemTypePersistent, |
+ kFileSystemTypeIsolated, |
+ kFileSystemTypeExternal, |
+ }; |
+ // Register mount point providers for public mount types. |
+ for (size_t j = 0; j < ARRAYSIZE_UNSAFE(mount_types); ++j) { |
+ if (provider->CanHandleType(mount_types[j])) |
+ provider_map_.insert(std::make_pair(mount_types[j], provider)); |
tzik
2013/04/17 12:06:04
could you add DCHECK the .second of the result?
kinuko
2013/04/17 14:27:29
Done.
|
+ } |
+ // Register mount point providers for internal types. |
+ for (int t = kFileSystemInternalTypeEnumStart; |
tzik
2013/04/17 12:06:04
kFileSystemInternalTypeEnumStart + 1?
kinuko
2013/04/17 14:27:29
Done.
|
+ t < kFileSystemInternalTypeEnumEnd; ++t) { |
tzik
2013/04/17 12:06:04
indent?
kinuko
2013/04/17 14:27:29
Done.
|
+ FileSystemType type = static_cast<FileSystemType>(t); |
+ if (provider->CanHandleType(type)) |
+ provider_map_.insert(std::make_pair(type, provider)); |
+ } |
+} |
+ |
} // namespace fileapi |