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); |
} |