Index: chrome/browser/chromeos/file_system_provider/service.cc |
diff --git a/chrome/browser/chromeos/file_system_provider/service.cc b/chrome/browser/chromeos/file_system_provider/service.cc |
index 94ef49dde675c5390175bec802ce73726dd108be..faa6ce5c885e84dfd936f31b30180fbcfade88a8 100644 |
--- a/chrome/browser/chromeos/file_system_provider/service.cc |
+++ b/chrome/browser/chromeos/file_system_provider/service.cc |
@@ -160,6 +160,9 @@ base::File::Error Service::MountFileSystemInternal( |
return base::File::FILE_ERROR_INVALID_OPERATION; |
} |
+ ProvidingExtensionInfo provider_info; |
+ // TODO(mtomasz): Set up a testing extension in unit tests. |
+ GetProvidingExtensionInfo(extension_id, &provider_info); |
// Store the file system descriptor. Use the mount point name as the file |
// system provider file system id. |
// Examples: |
@@ -168,7 +171,12 @@ base::File::Error Service::MountFileSystemInternal( |
// writable = false |
// supports_notify_tag = false |
// mount_path = /provided/b33f1337-hello_world-5aa5 |
- ProvidedFileSystemInfo file_system_info(extension_id, options, mount_path); |
+ // configurable = true |
+ // source = SOURCE_FILE |
+ ProvidedFileSystemInfo file_system_info( |
+ extension_id, options, mount_path, |
+ provider_info.capabilities.configurable(), |
+ provider_info.capabilities.source()); |
ProvidedFileSystemInterface* file_system = |
file_system_factory_.Run(profile_, file_system_info); |
@@ -310,24 +318,39 @@ std::vector<ProvidingExtensionInfo> Service::GetProvidingExtensionInfoList() |
std::vector<ProvidingExtensionInfo> result; |
for (const auto& extension : registry->enabled_extensions()) { |
- if (!extension->permissions_data()->HasAPIPermission( |
- extensions::APIPermission::kFileSystemProvider)) { |
- continue; |
- } |
- |
ProvidingExtensionInfo info; |
- info.extension_id = extension->id(); |
- info.name = extension->name(); |
- const extensions::FileSystemProviderCapabilities* const capabilities = |
- extensions::FileSystemProviderCapabilities::Get(extension.get()); |
- DCHECK(capabilities); |
- info.capabilities = *capabilities; |
- result.push_back(info); |
+ if (GetProvidingExtensionInfo(extension->id(), &info)) |
+ result.push_back(info); |
} |
return result; |
} |
+bool Service::GetProvidingExtensionInfo(const std::string& extension_id, |
+ ProvidingExtensionInfo* result) const { |
+ DCHECK(result); |
+ extensions::ExtensionRegistry* const registry = |
+ extensions::ExtensionRegistry::Get(profile_); |
+ DCHECK(registry); |
+ |
+ const extensions::Extension* const extension = registry->GetExtensionById( |
+ extension_id, extensions::ExtensionRegistry::ENABLED); |
+ if (!extension || |
+ !extension->permissions_data()->HasAPIPermission( |
+ extensions::APIPermission::kFileSystemProvider)) { |
+ return false; |
+ } |
+ |
+ result->extension_id = extension->id(); |
+ result->name = extension->name(); |
+ const extensions::FileSystemProviderCapabilities* const capabilities = |
+ extensions::FileSystemProviderCapabilities::Get(extension); |
+ DCHECK(capabilities); |
+ result->capabilities = *capabilities; |
+ |
+ return true; |
+} |
+ |
void Service::OnExtensionUnloaded( |
content::BrowserContext* browser_context, |
const extensions::Extension* extension, |