| Index: chrome/common/extensions/features/permission_feature.cc
|
| diff --git a/chrome/common/extensions/features/permission_feature.cc b/chrome/common/extensions/features/permission_feature.cc
|
| index b6085d22b122464faea00e1cb1715286d29ee01e..1f5da626995751a25540285db3da55a47a772af0 100644
|
| --- a/chrome/common/extensions/features/permission_feature.cc
|
| +++ b/chrome/common/extensions/features/permission_feature.cc
|
| @@ -4,6 +4,8 @@
|
|
|
| #include "chrome/common/extensions/features/permission_feature.h"
|
|
|
| +#include "chrome/common/extensions/permissions/permission_set.h"
|
| +
|
| namespace extensions {
|
|
|
| PermissionFeature::PermissionFeature() {
|
| @@ -15,15 +17,21 @@ PermissionFeature::~PermissionFeature() {
|
| Feature::Availability PermissionFeature::IsAvailableToContext(
|
| const Extension* extension,
|
| Feature::Context context,
|
| + const GURL& url,
|
| Feature::Platform platform) const {
|
| Availability availability = SimpleFeature::IsAvailableToContext(extension,
|
| context,
|
| + url,
|
| platform);
|
| if (!availability.is_available())
|
| return availability;
|
|
|
| - if (!extension->HasAPIPermission(name()))
|
| + // Optional permissions need to be checked so an API will not be set to
|
| + // undefined forever, when it could just need optional permissions.
|
| + if (extension && !extension->HasAPIPermission(name()) &&
|
| + !extension->optional_permission_set()->HasAnyAccessToAPI(name())) {
|
| return CreateAvailability(NOT_PRESENT, extension->GetType());
|
| + }
|
|
|
| return CreateAvailability(IS_AVAILABLE);
|
| }
|
|
|