Chromium Code Reviews| 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; |
| } |