Index: chrome/browser/extensions/permissions_updater.cc |
diff --git a/chrome/browser/extensions/permissions_updater.cc b/chrome/browser/extensions/permissions_updater.cc |
index 5f2f62981d5889f7db19804d7734561aaaac5b9f..3a2a585238ec3a7bf8b92e0c6ed6911c9cf0f4f7 100644 |
--- a/chrome/browser/extensions/permissions_updater.cc |
+++ b/chrome/browser/extensions/permissions_updater.cc |
@@ -36,6 +36,17 @@ namespace permissions = api::permissions; |
namespace { |
+URLPatternSet FilterSingleOriginPermissions(URLPatternSet permissions) { |
not at google - send to devlin
2014/08/12 19:49:27
const URLPatternSet& permissions
gpdavis
2014/08/12 21:19:55
Done.
|
+ URLPatternSet single_origin_permissions; |
+ for (URLPatternSet::const_iterator iter = permissions.begin(); |
+ iter != permissions.end(); |
+ ++iter) { |
+ if (iter->MatchesSingleOrigin()) |
+ single_origin_permissions.AddPattern(*iter); |
+ } |
+ return single_origin_permissions; |
+} |
+ |
// Returns a PermissionSet that has the active permissions of the extension, |
// bounded to its current manifest. |
scoped_refptr<const PermissionSet> GetBoundedActivePermissions( |
@@ -67,6 +78,19 @@ scoped_refptr<const PermissionSet> GetBoundedActivePermissions( |
adjusted_active = |
PermissionSet::CreateUnion(required_permissions, adjusted_active); |
+ // Re-add any active permissions that only match a single origin in order |
+ // to persist "always run" script injection hosts. These permissions get |
+ // filtered out because single origin permissions are not recognized as a |
+ // subset of all-host permissions. |
+ adjusted_active = PermissionSet::CreateUnion( |
+ adjusted_active, |
+ new PermissionSet( |
+ APIPermissionSet(), |
+ ManifestPermissionSet(), |
+ FilterSingleOriginPermissions(active_permissions->explicit_hosts()), |
+ FilterSingleOriginPermissions( |
+ active_permissions->scriptable_hosts()))); |
+ |
return adjusted_active; |
} |