Index: extensions/common/permissions/permissions_data.h |
diff --git a/extensions/common/permissions/permissions_data.h b/extensions/common/permissions/permissions_data.h |
index 3b87e79bc393161819710e7d8cca9703cc0857e2..699740325cc0e0b0e198ff6c66e3f4272fe3327a 100644 |
--- a/extensions/common/permissions/permissions_data.h |
+++ b/extensions/common/permissions/permissions_data.h |
@@ -82,6 +82,10 @@ class PermissionsData { |
const Extension* extension, |
std::string* error); |
+ // Is this extension using the default scope for policy_blocked_hosts and |
+ // policy_allowed_hosts of the ExtensionSettings policy. |
+ bool UsesDefaultPolicyHostRestrictions() const; |
+ |
// Locks the permissions data to the current thread. We don't do this on |
// construction, since extensions are initialized across multiple threads. |
void BindToCurrentThread() const; |
@@ -91,6 +95,27 @@ class PermissionsData { |
void SetPermissions(std::unique_ptr<const PermissionSet> active, |
std::unique_ptr<const PermissionSet> withheld) const; |
+ // Applies restrictions from enterprise policy limiting which URLs this |
+ // extension can interact with. The same policy can also define a default set |
+ // of URL restrictions using SetDefaultPolicyHostRestrictions. This function |
+ // overrides any default host restriction policy. |
+ void SetPolicyHostRestrictions( |
+ const URLPatternSet& runtime_blocked_hosts, |
+ const URLPatternSet& runtime_allowed_hosts) const; |
+ |
+ // Marks this extension as using default enterprise policy limiting |
+ // which URLs extensions can interact with. A default policy can be set with |
+ // SetDefaultPolicyHostRestrictions. A policy specific to this extension |
+ // can be set with SetPolicyHostRestrictions. |
+ void SetUsesDefaultHostRestrictions() const; |
+ |
+ // Applies restrictions from enterprise policy limiting which URLs all |
+ // extensions can interact with. This restriction can be overridden on a |
+ // per-extension basis with SetPolicyHostRestrictions. |
+ static void SetDefaultPolicyHostRestrictions( |
+ const URLPatternSet& default_runtime_blocked_hosts, |
+ const URLPatternSet& default_runtime_allowed_hosts); |
+ |
// Sets the active permissions, leaving withheld the same. |
void SetActivePermissions(std::unique_ptr<const PermissionSet> active) const; |
@@ -201,11 +226,42 @@ class PermissionsData { |
return *withheld_permissions_unsafe_; |
} |
+ // Returns list of hosts this extension may not interact with by policy. |
+ // This should only be used for 1. Serialization when initializing renderers |
+ // or 2. Called from utility methods above. For all other uses, call utility |
+ // methods instead (e.g. CanAccessPage()). |
+ static const URLPatternSet& default_policy_blocked_hosts(); |
+ |
+ // Returns list of hosts this extension may interact with regardless of |
+ // what is defined by policy_blocked_hosts(). |
+ // This should only be used for 1. Serialization when initializing renderers |
+ // or 2. Called from utility methods above. For all other uses, call utility |
+ // methods instead (e.g. CanAccessPage()). |
+ static const URLPatternSet& default_policy_allowed_hosts(); |
+ |
+ // Returns list of hosts this extension may not interact with by policy. |
+ // This should only be used for 1. Serialization when initializing renderers |
+ // or 2. Called from utility methods above. For all other uses, call utility |
+ // methods instead (e.g. CanAccessPage()). |
+ const URLPatternSet policy_blocked_hosts() const; |
+ |
+ // Returns list of hosts this extension may interact with regardless of |
+ // what is defined by policy_blocked_hosts(). |
+ // This should only be used for 1. Serialization when initializing renderers |
+ // or 2. Called from utility methods above. For all other uses, call utility |
+ // methods instead (e.g. CanAccessPage()). |
+ const URLPatternSet policy_allowed_hosts() const; |
+ |
#if defined(UNIT_TEST) |
const PermissionSet* GetTabSpecificPermissionsForTesting(int tab_id) const { |
base::AutoLock auto_lock(runtime_lock_); |
return GetTabSpecificPermissions(tab_id); |
} |
+ |
+ bool IsRuntimeBlockedHostForTesting(const GURL& url) const { |
+ base::AutoLock auto_lock(runtime_lock_); |
+ return IsRuntimeBlockedHost(url); |
+ } |
#endif |
private: |
@@ -233,6 +289,17 @@ class PermissionsData { |
const URLPatternSet& withheld_url_patterns, |
std::string* error) const; |
+ // Check if a specific URL is blocked by policy from extension use at runtime. |
+ bool IsRuntimeBlockedHost(const GURL& url) const; |
+ |
+ // Same as policy_blocked_hosts but instead returns a reference. |
+ // You must acquire runtime_lock_ before calling this. |
+ const URLPatternSet& PolicyBlockedHostsUnsafe() const; |
+ |
+ // Same as policy_allowed_hosts but instead returns a reference. |
+ // You must acquire runtime_lock_ before calling this. |
+ const URLPatternSet& PolicyAllowedHostsUnsafe() const; |
+ |
// The associated extension's id. |
std::string extension_id_; |
@@ -255,6 +322,20 @@ class PermissionsData { |
// withheld_permissions() accessor. |
mutable std::unique_ptr<const PermissionSet> withheld_permissions_unsafe_; |
+ // The list of hosts an extension may not interact with by policy. |
+ // Unless you need to change |policy_blocked_hosts_unsafe_|, use the (safe) |
+ // policy_blocked_hosts() accessor. |
+ mutable URLPatternSet policy_blocked_hosts_unsafe_; |
+ |
+ // The exclusive list of hosts an extension may interact with by policy. |
+ // Unless you need to change |policy_allowed_hosts_unsafe_|, use the (safe) |
+ // policy_allowed_hosts() accessor. |
+ mutable URLPatternSet policy_allowed_hosts_unsafe_; |
+ |
+ // If the ExtensionSettings policy is not being used, or no per-extension |
+ // exception to the default policy was declared for this extension. |
+ mutable bool uses_default_policy_host_restrictions = true; |
+ |
mutable TabPermissionsMap tab_specific_permissions_; |
mutable std::unique_ptr<base::ThreadChecker> thread_checker_; |