| 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 #include "extensions/common/permissions/permission_set.h" | 5 #include "extensions/common/permissions/permission_set.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <iterator> | 8 #include <iterator> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 namespace extensions { | 31 namespace extensions { |
| 32 | 32 |
| 33 // | 33 // |
| 34 // PermissionSet | 34 // PermissionSet |
| 35 // | 35 // |
| 36 | 36 |
| 37 PermissionSet::PermissionSet() {} | 37 PermissionSet::PermissionSet() {} |
| 38 | 38 |
| 39 PermissionSet::PermissionSet( | 39 PermissionSet::PermissionSet( |
| 40 const APIPermissionSet& apis, | 40 const APIPermissionSet& apis, |
| 41 const ManifestPermissionSet& manifest_permissions, |
| 41 const URLPatternSet& explicit_hosts, | 42 const URLPatternSet& explicit_hosts, |
| 42 const URLPatternSet& scriptable_hosts) | 43 const URLPatternSet& scriptable_hosts) |
| 43 : apis_(apis), | 44 : apis_(apis), |
| 45 manifest_permissions_(manifest_permissions), |
| 44 scriptable_hosts_(scriptable_hosts) { | 46 scriptable_hosts_(scriptable_hosts) { |
| 45 AddPatternsAndRemovePaths(explicit_hosts, &explicit_hosts_); | 47 AddPatternsAndRemovePaths(explicit_hosts, &explicit_hosts_); |
| 46 InitImplicitPermissions(); | 48 InitImplicitPermissions(); |
| 47 InitEffectiveHosts(); | 49 InitEffectiveHosts(); |
| 48 } | 50 } |
| 49 | 51 |
| 50 // static | 52 // static |
| 51 PermissionSet* PermissionSet::CreateDifference( | 53 PermissionSet* PermissionSet::CreateDifference( |
| 52 const PermissionSet* set1, | 54 const PermissionSet* set1, |
| 53 const PermissionSet* set2) { | 55 const PermissionSet* set2) { |
| 54 scoped_refptr<PermissionSet> empty = new PermissionSet(); | 56 scoped_refptr<PermissionSet> empty = new PermissionSet(); |
| 55 const PermissionSet* set1_safe = (set1 == NULL) ? empty.get() : set1; | 57 const PermissionSet* set1_safe = (set1 == NULL) ? empty.get() : set1; |
| 56 const PermissionSet* set2_safe = (set2 == NULL) ? empty.get() : set2; | 58 const PermissionSet* set2_safe = (set2 == NULL) ? empty.get() : set2; |
| 57 | 59 |
| 58 APIPermissionSet apis; | 60 APIPermissionSet apis; |
| 59 APIPermissionSet::Difference(set1_safe->apis(), set2_safe->apis(), &apis); | 61 APIPermissionSet::Difference(set1_safe->apis(), set2_safe->apis(), &apis); |
| 60 | 62 |
| 63 ManifestPermissionSet manifest_permissions; |
| 64 ManifestPermissionSet::Difference(set1_safe->manifest_permissions(), |
| 65 set2_safe->manifest_permissions(), |
| 66 &manifest_permissions); |
| 67 |
| 61 URLPatternSet explicit_hosts; | 68 URLPatternSet explicit_hosts; |
| 62 URLPatternSet::CreateDifference(set1_safe->explicit_hosts(), | 69 URLPatternSet::CreateDifference(set1_safe->explicit_hosts(), |
| 63 set2_safe->explicit_hosts(), | 70 set2_safe->explicit_hosts(), |
| 64 &explicit_hosts); | 71 &explicit_hosts); |
| 65 | 72 |
| 66 URLPatternSet scriptable_hosts; | 73 URLPatternSet scriptable_hosts; |
| 67 URLPatternSet::CreateDifference(set1_safe->scriptable_hosts(), | 74 URLPatternSet::CreateDifference(set1_safe->scriptable_hosts(), |
| 68 set2_safe->scriptable_hosts(), | 75 set2_safe->scriptable_hosts(), |
| 69 &scriptable_hosts); | 76 &scriptable_hosts); |
| 70 | 77 |
| 71 return new PermissionSet(apis, explicit_hosts, scriptable_hosts); | 78 return new PermissionSet(apis, manifest_permissions, |
| 79 explicit_hosts, scriptable_hosts); |
| 72 } | 80 } |
| 73 | 81 |
| 74 // static | 82 // static |
| 75 PermissionSet* PermissionSet::CreateIntersection( | 83 PermissionSet* PermissionSet::CreateIntersection( |
| 76 const PermissionSet* set1, | 84 const PermissionSet* set1, |
| 77 const PermissionSet* set2) { | 85 const PermissionSet* set2) { |
| 78 scoped_refptr<PermissionSet> empty = new PermissionSet(); | 86 scoped_refptr<PermissionSet> empty = new PermissionSet(); |
| 79 const PermissionSet* set1_safe = (set1 == NULL) ? empty.get() : set1; | 87 const PermissionSet* set1_safe = (set1 == NULL) ? empty.get() : set1; |
| 80 const PermissionSet* set2_safe = (set2 == NULL) ? empty.get() : set2; | 88 const PermissionSet* set2_safe = (set2 == NULL) ? empty.get() : set2; |
| 81 | 89 |
| 82 APIPermissionSet apis; | 90 APIPermissionSet apis; |
| 83 APIPermissionSet::Intersection(set1_safe->apis(), set2_safe->apis(), &apis); | 91 APIPermissionSet::Intersection(set1_safe->apis(), set2_safe->apis(), &apis); |
| 84 | 92 |
| 93 ManifestPermissionSet manifest_permissions; |
| 94 ManifestPermissionSet::Intersection(set1_safe->manifest_permissions(), |
| 95 set2_safe->manifest_permissions(), |
| 96 &manifest_permissions); |
| 97 |
| 85 URLPatternSet explicit_hosts; | 98 URLPatternSet explicit_hosts; |
| 86 URLPatternSet::CreateIntersection(set1_safe->explicit_hosts(), | 99 URLPatternSet::CreateIntersection(set1_safe->explicit_hosts(), |
| 87 set2_safe->explicit_hosts(), | 100 set2_safe->explicit_hosts(), |
| 88 &explicit_hosts); | 101 &explicit_hosts); |
| 89 | 102 |
| 90 URLPatternSet scriptable_hosts; | 103 URLPatternSet scriptable_hosts; |
| 91 URLPatternSet::CreateIntersection(set1_safe->scriptable_hosts(), | 104 URLPatternSet::CreateIntersection(set1_safe->scriptable_hosts(), |
| 92 set2_safe->scriptable_hosts(), | 105 set2_safe->scriptable_hosts(), |
| 93 &scriptable_hosts); | 106 &scriptable_hosts); |
| 94 | 107 |
| 95 return new PermissionSet(apis, explicit_hosts, scriptable_hosts); | 108 return new PermissionSet(apis, manifest_permissions, |
| 109 explicit_hosts, scriptable_hosts); |
| 96 } | 110 } |
| 97 | 111 |
| 98 // static | 112 // static |
| 99 PermissionSet* PermissionSet::CreateUnion( | 113 PermissionSet* PermissionSet::CreateUnion( |
| 100 const PermissionSet* set1, | 114 const PermissionSet* set1, |
| 101 const PermissionSet* set2) { | 115 const PermissionSet* set2) { |
| 102 scoped_refptr<PermissionSet> empty = new PermissionSet(); | 116 scoped_refptr<PermissionSet> empty = new PermissionSet(); |
| 103 const PermissionSet* set1_safe = (set1 == NULL) ? empty.get() : set1; | 117 const PermissionSet* set1_safe = (set1 == NULL) ? empty.get() : set1; |
| 104 const PermissionSet* set2_safe = (set2 == NULL) ? empty.get() : set2; | 118 const PermissionSet* set2_safe = (set2 == NULL) ? empty.get() : set2; |
| 105 | 119 |
| 106 APIPermissionSet apis; | 120 APIPermissionSet apis; |
| 107 APIPermissionSet::Union(set1_safe->apis(), set2_safe->apis(), &apis); | 121 APIPermissionSet::Union(set1_safe->apis(), set2_safe->apis(), &apis); |
| 108 | 122 |
| 123 ManifestPermissionSet manifest_permissions; |
| 124 ManifestPermissionSet::Union(set1_safe->manifest_permissions(), |
| 125 set2_safe->manifest_permissions(), |
| 126 &manifest_permissions); |
| 127 |
| 109 URLPatternSet explicit_hosts; | 128 URLPatternSet explicit_hosts; |
| 110 URLPatternSet::CreateUnion(set1_safe->explicit_hosts(), | 129 URLPatternSet::CreateUnion(set1_safe->explicit_hosts(), |
| 111 set2_safe->explicit_hosts(), | 130 set2_safe->explicit_hosts(), |
| 112 &explicit_hosts); | 131 &explicit_hosts); |
| 113 | 132 |
| 114 URLPatternSet scriptable_hosts; | 133 URLPatternSet scriptable_hosts; |
| 115 URLPatternSet::CreateUnion(set1_safe->scriptable_hosts(), | 134 URLPatternSet::CreateUnion(set1_safe->scriptable_hosts(), |
| 116 set2_safe->scriptable_hosts(), | 135 set2_safe->scriptable_hosts(), |
| 117 &scriptable_hosts); | 136 &scriptable_hosts); |
| 118 | 137 |
| 119 return new PermissionSet(apis, explicit_hosts, scriptable_hosts); | 138 return new PermissionSet(apis, manifest_permissions, |
| 139 explicit_hosts, scriptable_hosts); |
| 120 } | 140 } |
| 121 | 141 |
| 122 bool PermissionSet::operator==( | 142 bool PermissionSet::operator==( |
| 123 const PermissionSet& rhs) const { | 143 const PermissionSet& rhs) const { |
| 124 return apis_ == rhs.apis_ && | 144 return apis_ == rhs.apis_ && |
| 145 manifest_permissions_ == rhs.manifest_permissions_ && |
| 125 scriptable_hosts_ == rhs.scriptable_hosts_ && | 146 scriptable_hosts_ == rhs.scriptable_hosts_ && |
| 126 explicit_hosts_ == rhs.explicit_hosts_; | 147 explicit_hosts_ == rhs.explicit_hosts_; |
| 127 } | 148 } |
| 128 | 149 |
| 129 bool PermissionSet::Contains(const PermissionSet& set) const { | 150 bool PermissionSet::Contains(const PermissionSet& set) const { |
| 130 return apis_.Contains(set.apis()) && | 151 return apis_.Contains(set.apis()) && |
| 152 manifest_permissions_.Contains(set.manifest_permissions()) && |
| 131 explicit_hosts().Contains(set.explicit_hosts()) && | 153 explicit_hosts().Contains(set.explicit_hosts()) && |
| 132 scriptable_hosts().Contains(set.scriptable_hosts()); | 154 scriptable_hosts().Contains(set.scriptable_hosts()); |
| 133 } | 155 } |
| 134 | 156 |
| 135 std::set<std::string> PermissionSet::GetAPIsAsStrings() const { | 157 std::set<std::string> PermissionSet::GetAPIsAsStrings() const { |
| 136 std::set<std::string> apis_str; | 158 std::set<std::string> apis_str; |
| 137 for (APIPermissionSet::const_iterator i = apis_.begin(); | 159 for (APIPermissionSet::const_iterator i = apis_.begin(); |
| 138 i != apis_.end(); ++i) { | 160 i != apis_.end(); ++i) { |
| 139 apis_str.insert(i->name()); | 161 apis_str.insert(i->name()); |
| 140 } | 162 } |
| 141 return apis_str; | 163 return apis_str; |
| 142 } | 164 } |
| 143 | 165 |
| 144 bool PermissionSet::IsEmpty() const { | 166 bool PermissionSet::IsEmpty() const { |
| 145 // Not default if any host permissions are present. | 167 // Not default if any host permissions are present. |
| 146 if (!(explicit_hosts().is_empty() && scriptable_hosts().is_empty())) | 168 if (!(explicit_hosts().is_empty() && scriptable_hosts().is_empty())) |
| 147 return false; | 169 return false; |
| 148 | 170 |
| 149 // Or if it has no api permissions. | 171 // Or if it has no api permissions. |
| 150 return apis().empty(); | 172 return apis().empty() && manifest_permissions().empty(); |
| 151 } | 173 } |
| 152 | 174 |
| 153 bool PermissionSet::HasAPIPermission( | 175 bool PermissionSet::HasAPIPermission( |
| 154 APIPermission::ID id) const { | 176 APIPermission::ID id) const { |
| 155 return apis().find(id) != apis().end(); | 177 return apis().find(id) != apis().end(); |
| 156 } | 178 } |
| 157 | 179 |
| 158 bool PermissionSet::HasAPIPermission(const std::string& permission_name) const { | 180 bool PermissionSet::HasAPIPermission(const std::string& permission_name) const { |
| 159 const APIPermissionInfo* permission = | 181 const APIPermissionInfo* permission = |
| 160 PermissionsInfo::GetInstance()->GetByName(permission_name); | 182 PermissionsInfo::GetInstance()->GetByName(permission_name); |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 } | 264 } |
| 243 | 265 |
| 244 void PermissionSet::InitEffectiveHosts() { | 266 void PermissionSet::InitEffectiveHosts() { |
| 245 effective_hosts_.ClearPatterns(); | 267 effective_hosts_.ClearPatterns(); |
| 246 | 268 |
| 247 URLPatternSet::CreateUnion( | 269 URLPatternSet::CreateUnion( |
| 248 explicit_hosts(), scriptable_hosts(), &effective_hosts_); | 270 explicit_hosts(), scriptable_hosts(), &effective_hosts_); |
| 249 } | 271 } |
| 250 | 272 |
| 251 } // namespace extensions | 273 } // namespace extensions |
| OLD | NEW |