| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef EXTENSIONS_COMMON_PERMISSIONS_PERMISSION_SET_H_ | 5 #ifndef EXTENSIONS_COMMON_PERMISSIONS_PERMISSION_SET_H_ |
| 6 #define EXTENSIONS_COMMON_PERMISSIONS_PERMISSION_SET_H_ | 6 #define EXTENSIONS_COMMON_PERMISSIONS_PERMISSION_SET_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <set> | 9 #include <set> |
| 10 #include <string> | 10 #include <string> |
| 11 #include <vector> | 11 #include <vector> |
| 12 | 12 |
| 13 #include "base/gtest_prod_util.h" | 13 #include "base/gtest_prod_util.h" |
| 14 #include "base/memory/ref_counted.h" | 14 #include "base/memory/ref_counted.h" |
| 15 #include "base/memory/singleton.h" | 15 #include "base/memory/singleton.h" |
| 16 #include "base/strings/string16.h" | 16 #include "base/strings/string16.h" |
| 17 #include "extensions/common/manifest.h" | 17 #include "extensions/common/manifest.h" |
| 18 #include "extensions/common/permissions/api_permission.h" | 18 #include "extensions/common/permissions/api_permission.h" |
| 19 #include "extensions/common/permissions/api_permission_set.h" | 19 #include "extensions/common/permissions/api_permission_set.h" |
| 20 #include "extensions/common/permissions/manifest_permission.h" |
| 21 #include "extensions/common/permissions/manifest_permission_set.h" |
| 20 #include "extensions/common/url_pattern_set.h" | 22 #include "extensions/common/url_pattern_set.h" |
| 21 | 23 |
| 22 namespace extensions { | 24 namespace extensions { |
| 23 class Extension; | 25 class Extension; |
| 24 | 26 |
| 25 // The PermissionSet is an immutable class that encapsulates an | 27 // The PermissionSet is an immutable class that encapsulates an |
| 26 // extension's permissions. The class exposes set operations for combining and | 28 // extension's permissions. The class exposes set operations for combining and |
| 27 // manipulating the permissions. | 29 // manipulating the permissions. |
| 28 class PermissionSet | 30 class PermissionSet |
| 29 : public base::RefCountedThreadSafe<PermissionSet> { | 31 : public base::RefCountedThreadSafe<PermissionSet> { |
| 30 public: | 32 public: |
| 31 // Creates an empty permission set (e.g. default permissions). | 33 // Creates an empty permission set (e.g. default permissions). |
| 32 PermissionSet(); | 34 PermissionSet(); |
| 33 | 35 |
| 34 // Creates a new permission set based on the specified data: the API | 36 // Creates a new permission set based on the specified data: the API |
| 35 // permissions, host permissions, and scriptable hosts. The effective hosts | 37 // permissions, manifest key permissions, host permissions, and scriptable |
| 36 // of the newly created permission set will be inferred from the given | 38 // hosts. The effective hosts of the newly created permission set will be |
| 37 // host permissions. | 39 // inferred from the given host permissions. |
| 38 PermissionSet(const APIPermissionSet& apis, | 40 PermissionSet(const APIPermissionSet& apis, |
| 41 const ManifestPermissionSet& manifest_permissions, |
| 39 const URLPatternSet& explicit_hosts, | 42 const URLPatternSet& explicit_hosts, |
| 40 const URLPatternSet& scriptable_hosts); | 43 const URLPatternSet& scriptable_hosts); |
| 41 | 44 |
| 42 // Creates a new permission set equal to |set1| - |set2|, passing ownership of | 45 // Creates a new permission set equal to |set1| - |set2|, passing ownership of |
| 43 // the new set to the caller. | 46 // the new set to the caller. |
| 44 static PermissionSet* CreateDifference( | 47 static PermissionSet* CreateDifference( |
| 45 const PermissionSet* set1, const PermissionSet* set2); | 48 const PermissionSet* set1, const PermissionSet* set2); |
| 46 | 49 |
| 47 // Creates a new permission set equal to the intersection of |set1| and | 50 // Creates a new permission set equal to the intersection of |set1| and |
| 48 // |set2|, passing ownership of the new set to the caller. | 51 // |set2|, passing ownership of the new set to the caller. |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 | 98 |
| 96 // Returns true if this permission set includes effective access to |url|. | 99 // Returns true if this permission set includes effective access to |url|. |
| 97 bool HasEffectiveAccessToURL(const GURL& url) const; | 100 bool HasEffectiveAccessToURL(const GURL& url) const; |
| 98 | 101 |
| 99 // Returns true if this permission set effectively represents full access | 102 // Returns true if this permission set effectively represents full access |
| 100 // (e.g. native code). | 103 // (e.g. native code). |
| 101 bool HasEffectiveFullAccess() const; | 104 bool HasEffectiveFullAccess() const; |
| 102 | 105 |
| 103 const APIPermissionSet& apis() const { return apis_; } | 106 const APIPermissionSet& apis() const { return apis_; } |
| 104 | 107 |
| 108 const ManifestPermissionSet& manifest_permissions() const { |
| 109 return manifest_permissions_; |
| 110 } |
| 111 |
| 105 const URLPatternSet& effective_hosts() const { return effective_hosts_; } | 112 const URLPatternSet& effective_hosts() const { return effective_hosts_; } |
| 106 | 113 |
| 107 const URLPatternSet& explicit_hosts() const { return explicit_hosts_; } | 114 const URLPatternSet& explicit_hosts() const { return explicit_hosts_; } |
| 108 | 115 |
| 109 const URLPatternSet& scriptable_hosts() const { return scriptable_hosts_; } | 116 const URLPatternSet& scriptable_hosts() const { return scriptable_hosts_; } |
| 110 | 117 |
| 111 private: | 118 private: |
| 112 FRIEND_TEST_ALL_PREFIXES(PermissionsTest, GetWarningMessages_AudioVideo); | 119 FRIEND_TEST_ALL_PREFIXES(PermissionsTest, GetWarningMessages_AudioVideo); |
| 113 friend class base::RefCountedThreadSafe<PermissionSet>; | 120 friend class base::RefCountedThreadSafe<PermissionSet>; |
| 114 | 121 |
| 115 ~PermissionSet(); | 122 ~PermissionSet(); |
| 116 | 123 |
| 117 void AddAPIPermission(APIPermission::ID id); | 124 void AddAPIPermission(APIPermission::ID id); |
| 118 | 125 |
| 119 // Adds permissions implied independently of other context. | 126 // Adds permissions implied independently of other context. |
| 120 void InitImplicitPermissions(); | 127 void InitImplicitPermissions(); |
| 121 | 128 |
| 122 // Initializes the effective host permission based on the data in this set. | 129 // Initializes the effective host permission based on the data in this set. |
| 123 void InitEffectiveHosts(); | 130 void InitEffectiveHosts(); |
| 124 | 131 |
| 125 // The api list is used when deciding if an extension can access certain | 132 // The api list is used when deciding if an extension can access certain |
| 126 // extension APIs and features. | 133 // extension APIs and features. |
| 127 APIPermissionSet apis_; | 134 APIPermissionSet apis_; |
| 128 | 135 |
| 136 // The manifest key permission list is used when deciding if an extension |
| 137 // can access certain extension APIs and features. |
| 138 ManifestPermissionSet manifest_permissions_; |
| 139 |
| 129 // The list of hosts that can be accessed directly from the extension. | 140 // The list of hosts that can be accessed directly from the extension. |
| 130 // TODO(jstritar): Rename to "hosts_"? | 141 // TODO(jstritar): Rename to "hosts_"? |
| 131 URLPatternSet explicit_hosts_; | 142 URLPatternSet explicit_hosts_; |
| 132 | 143 |
| 133 // The list of hosts that can be scripted by content scripts. | 144 // The list of hosts that can be scripted by content scripts. |
| 134 // TODO(jstritar): Rename to "user_script_hosts_"? | 145 // TODO(jstritar): Rename to "user_script_hosts_"? |
| 135 URLPatternSet scriptable_hosts_; | 146 URLPatternSet scriptable_hosts_; |
| 136 | 147 |
| 137 // The list of hosts this effectively grants access to. | 148 // The list of hosts this effectively grants access to. |
| 138 URLPatternSet effective_hosts_; | 149 URLPatternSet effective_hosts_; |
| 139 }; | 150 }; |
| 140 | 151 |
| 141 } // namespace extensions | 152 } // namespace extensions |
| 142 | 153 |
| 143 #endif // EXTENSIONS_COMMON_PERMISSIONS_PERMISSION_SET_H_ | 154 #endif // EXTENSIONS_COMMON_PERMISSIONS_PERMISSION_SET_H_ |
| OLD | NEW |