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..83dc755d478dfe507815bbadd29328e257596002 100644 |
--- a/chrome/browser/extensions/permissions_updater.cc |
+++ b/chrome/browser/extensions/permissions_updater.cc |
@@ -67,6 +67,32 @@ 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. |
+ URLPatternSet single_origin_explicit; |
+ URLPatternSet single_origin_scriptable; |
+ for (URLPatternSet::const_iterator iter = |
+ active_permissions->explicit_hosts().begin(); |
+ iter != active_permissions->explicit_hosts().end(); |
+ ++iter) { |
+ if (iter->MatchesSingleOrigin()) |
+ single_origin_explicit.AddPattern(*iter); |
+ } |
+ for (URLPatternSet::const_iterator iter = |
+ active_permissions->scriptable_hosts().begin(); |
+ iter != active_permissions->scriptable_hosts().end(); |
+ ++iter) { |
+ if (iter->MatchesSingleOrigin()) |
+ single_origin_scriptable.AddPattern(*iter); |
+ } |
+ |
+ adjusted_active = PermissionSet::CreateUnion( |
+ adjusted_active, |
+ new PermissionSet(APIPermissionSet(), |
+ ManifestPermissionSet(), |
+ single_origin_explicit, |
+ single_origin_scriptable)); |
+ |
return adjusted_active; |
} |