| Index: chrome/common/extensions/api/file_system_provider_capabilities/file_system_provider_capabilities_handler.cc
|
| diff --git a/chrome/common/extensions/api/file_system_provider_capabilities/file_system_provider_capabilities_handler.cc b/chrome/common/extensions/api/file_system_provider_capabilities/file_system_provider_capabilities_handler.cc
|
| index e716df08babc3b8ff0937dc0d8339a335c0efd27..c3dc906cea8e0dc5f00180483399ce2297e23063 100644
|
| --- a/chrome/common/extensions/api/file_system_provider_capabilities/file_system_provider_capabilities_handler.cc
|
| +++ b/chrome/common/extensions/api/file_system_provider_capabilities/file_system_provider_capabilities_handler.cc
|
| @@ -10,6 +10,7 @@
|
| #include "chrome/common/extensions/api/manifest_types.h"
|
| #include "extensions/common/error_utils.h"
|
| #include "extensions/common/manifest_constants.h"
|
| +#include "extensions/common/manifest_handlers/permissions_parser.h"
|
| #include "url/gurl.h"
|
|
|
| namespace extensions {
|
| @@ -47,10 +48,30 @@ const FileSystemProviderCapabilities* FileSystemProviderCapabilities::Get(
|
|
|
| bool FileSystemProviderCapabilitiesHandler::Parse(Extension* extension,
|
| base::string16* error) {
|
| - const base::DictionaryValue* section = NULL;
|
| + const bool has_permission = extensions::PermissionsParser::HasAPIPermission(
|
| + extension, extensions::APIPermission::ID::kFileSystemProvider);
|
| + const base::DictionaryValue* section = nullptr;
|
| extension->manifest()->GetDictionary(
|
| manifest_keys::kFileSystemProviderCapabilities, §ion);
|
| - DCHECK(section);
|
| +
|
| + if (has_permission && !section) {
|
| + *error = base::ASCIIToUTF16(
|
| + manifest_errors::kInvalidFileSystemProviderMissingCapabilities);
|
| + return false;
|
| + }
|
| +
|
| + if (!has_permission && section) {
|
| + // If the permission is not specified, then the section has simply no
|
| + // effect, hence just a warning.
|
| + extension->AddInstallWarning(extensions::InstallWarning(
|
| + manifest_errors::kInvalidFileSystemProviderMissingPermission));
|
| + return true;
|
| + }
|
| +
|
| + if (!has_permission && !section) {
|
| + // No permission and no capabilities, so ignore.
|
| + return true;
|
| + }
|
|
|
| api::manifest_types::FileSystemProviderCapabilities idl_capabilities;
|
| if (!api::manifest_types::FileSystemProviderCapabilities::Populate(
|
| @@ -88,4 +109,9 @@ const std::vector<std::string> FileSystemProviderCapabilitiesHandler::Keys()
|
| return SingleKey(manifest_keys::kFileSystemProviderCapabilities);
|
| }
|
|
|
| +bool FileSystemProviderCapabilitiesHandler::AlwaysParseForType(
|
| + Manifest::Type type) const {
|
| + return true;
|
| +}
|
| +
|
| } // namespace extensions
|
|
|