Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(434)

Side by Side Diff: extensions/common/permissions/permission_set.cc

Issue 1349613003: [Extensions] Un-refcount PermissionSet (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "extensions/common/permissions/permissions_info.h" 7 #include "extensions/common/permissions/permissions_info.h"
8 #include "extensions/common/url_pattern.h" 8 #include "extensions/common/url_pattern.h"
9 #include "url/gurl.h" 9 #include "url/gurl.h"
10 10
(...skipping 25 matching lines...) Expand all
36 const URLPatternSet& scriptable_hosts) 36 const URLPatternSet& scriptable_hosts)
37 : apis_(apis), 37 : apis_(apis),
38 manifest_permissions_(manifest_permissions), 38 manifest_permissions_(manifest_permissions),
39 scriptable_hosts_(scriptable_hosts), 39 scriptable_hosts_(scriptable_hosts),
40 should_warn_all_hosts_(UNINITIALIZED) { 40 should_warn_all_hosts_(UNINITIALIZED) {
41 AddPatternsAndRemovePaths(explicit_hosts, &explicit_hosts_); 41 AddPatternsAndRemovePaths(explicit_hosts, &explicit_hosts_);
42 InitImplicitPermissions(); 42 InitImplicitPermissions();
43 InitEffectiveHosts(); 43 InitEffectiveHosts();
44 } 44 }
45 45
46 PermissionSet::~PermissionSet() {}
47
46 // static 48 // static
47 scoped_refptr<const PermissionSet> PermissionSet::CreateDifference( 49 scoped_ptr<const PermissionSet> PermissionSet::CreateDifference(
48 const PermissionSet& set1, 50 const PermissionSet& set1,
49 const PermissionSet& set2) { 51 const PermissionSet& set2) {
50 APIPermissionSet apis; 52 APIPermissionSet apis;
51 APIPermissionSet::Difference(set1.apis(), set2.apis(), &apis); 53 APIPermissionSet::Difference(set1.apis(), set2.apis(), &apis);
52 54
53 ManifestPermissionSet manifest_permissions; 55 ManifestPermissionSet manifest_permissions;
54 ManifestPermissionSet::Difference(set1.manifest_permissions(), 56 ManifestPermissionSet::Difference(set1.manifest_permissions(),
55 set2.manifest_permissions(), 57 set2.manifest_permissions(),
56 &manifest_permissions); 58 &manifest_permissions);
57 59
58 URLPatternSet explicit_hosts = URLPatternSet::CreateDifference( 60 URLPatternSet explicit_hosts = URLPatternSet::CreateDifference(
59 set1.explicit_hosts(), set2.explicit_hosts()); 61 set1.explicit_hosts(), set2.explicit_hosts());
60 62
61 URLPatternSet scriptable_hosts = URLPatternSet::CreateDifference( 63 URLPatternSet scriptable_hosts = URLPatternSet::CreateDifference(
62 set1.scriptable_hosts(), set2.scriptable_hosts()); 64 set1.scriptable_hosts(), set2.scriptable_hosts());
63 65
64 return make_scoped_refptr(new PermissionSet( 66 return make_scoped_ptr(new PermissionSet(apis, manifest_permissions,
65 apis, manifest_permissions, explicit_hosts, scriptable_hosts)); 67 explicit_hosts, scriptable_hosts));
66 } 68 }
67 69
68 // static 70 // static
69 scoped_refptr<const PermissionSet> PermissionSet::CreateIntersection( 71 scoped_ptr<const PermissionSet> PermissionSet::CreateIntersection(
70 const PermissionSet& set1, 72 const PermissionSet& set1,
71 const PermissionSet& set2) { 73 const PermissionSet& set2) {
72 APIPermissionSet apis; 74 APIPermissionSet apis;
73 APIPermissionSet::Intersection(set1.apis(), set2.apis(), &apis); 75 APIPermissionSet::Intersection(set1.apis(), set2.apis(), &apis);
74 76
75 ManifestPermissionSet manifest_permissions; 77 ManifestPermissionSet manifest_permissions;
76 ManifestPermissionSet::Intersection(set1.manifest_permissions(), 78 ManifestPermissionSet::Intersection(set1.manifest_permissions(),
77 set2.manifest_permissions(), 79 set2.manifest_permissions(),
78 &manifest_permissions); 80 &manifest_permissions);
79 81
80 URLPatternSet explicit_hosts = URLPatternSet::CreateSemanticIntersection( 82 URLPatternSet explicit_hosts = URLPatternSet::CreateSemanticIntersection(
81 set1.explicit_hosts(), set2.explicit_hosts()); 83 set1.explicit_hosts(), set2.explicit_hosts());
82 URLPatternSet scriptable_hosts = URLPatternSet::CreateSemanticIntersection( 84 URLPatternSet scriptable_hosts = URLPatternSet::CreateSemanticIntersection(
83 set1.scriptable_hosts(), set2.scriptable_hosts()); 85 set1.scriptable_hosts(), set2.scriptable_hosts());
84 86
85 return new PermissionSet(apis, manifest_permissions, 87 return make_scoped_ptr(new PermissionSet(apis, manifest_permissions,
86 explicit_hosts, scriptable_hosts); 88 explicit_hosts, scriptable_hosts));
87 } 89 }
88 90
89 // static 91 // static
90 scoped_refptr<const PermissionSet> PermissionSet::CreateUnion( 92 scoped_ptr<const PermissionSet> PermissionSet::CreateUnion(
91 const PermissionSet& set1, 93 const PermissionSet& set1,
92 const PermissionSet& set2) { 94 const PermissionSet& set2) {
93 APIPermissionSet apis; 95 APIPermissionSet apis;
94 APIPermissionSet::Union(set1.apis(), set2.apis(), &apis); 96 APIPermissionSet::Union(set1.apis(), set2.apis(), &apis);
95 97
96 ManifestPermissionSet manifest_permissions; 98 ManifestPermissionSet manifest_permissions;
97 ManifestPermissionSet::Union(set1.manifest_permissions(), 99 ManifestPermissionSet::Union(set1.manifest_permissions(),
98 set2.manifest_permissions(), 100 set2.manifest_permissions(),
99 &manifest_permissions); 101 &manifest_permissions);
100 102
101 URLPatternSet explicit_hosts = 103 URLPatternSet explicit_hosts =
102 URLPatternSet::CreateUnion(set1.explicit_hosts(), set2.explicit_hosts()); 104 URLPatternSet::CreateUnion(set1.explicit_hosts(), set2.explicit_hosts());
103 105
104 URLPatternSet scriptable_hosts = URLPatternSet::CreateUnion( 106 URLPatternSet scriptable_hosts = URLPatternSet::CreateUnion(
105 set1.scriptable_hosts(), set2.scriptable_hosts()); 107 set1.scriptable_hosts(), set2.scriptable_hosts());
106 108
107 return new PermissionSet(apis, manifest_permissions, 109 return make_scoped_ptr(new PermissionSet(apis, manifest_permissions,
108 explicit_hosts, scriptable_hosts); 110 explicit_hosts, scriptable_hosts));
109 } 111 }
110 112
111 bool PermissionSet::operator==( 113 bool PermissionSet::operator==(
112 const PermissionSet& rhs) const { 114 const PermissionSet& rhs) const {
113 return apis_ == rhs.apis_ && 115 return apis_ == rhs.apis_ &&
114 manifest_permissions_ == rhs.manifest_permissions_ && 116 manifest_permissions_ == rhs.manifest_permissions_ &&
115 scriptable_hosts_ == rhs.scriptable_hosts_ && 117 scriptable_hosts_ == rhs.scriptable_hosts_ &&
116 explicit_hosts_ == rhs.explicit_hosts_; 118 explicit_hosts_ == rhs.explicit_hosts_;
117 } 119 }
118 120
119 bool PermissionSet::operator!=(const PermissionSet& rhs) const { 121 bool PermissionSet::operator!=(const PermissionSet& rhs) const {
120 return !(*this == rhs); 122 return !(*this == rhs);
121 } 123 }
122 124
125 scoped_ptr<const PermissionSet> PermissionSet::Clone() const {
126 return make_scoped_ptr(new PermissionSet(*this));
127 }
128
123 bool PermissionSet::Contains(const PermissionSet& set) const { 129 bool PermissionSet::Contains(const PermissionSet& set) const {
124 return apis_.Contains(set.apis()) && 130 return apis_.Contains(set.apis()) &&
125 manifest_permissions_.Contains(set.manifest_permissions()) && 131 manifest_permissions_.Contains(set.manifest_permissions()) &&
126 explicit_hosts().Contains(set.explicit_hosts()) && 132 explicit_hosts().Contains(set.explicit_hosts()) &&
127 scriptable_hosts().Contains(set.scriptable_hosts()); 133 scriptable_hosts().Contains(set.scriptable_hosts());
128 } 134 }
129 135
130 std::set<std::string> PermissionSet::GetAPIsAsStrings() const { 136 std::set<std::string> PermissionSet::GetAPIsAsStrings() const {
131 std::set<std::string> apis_str; 137 std::set<std::string> apis_str;
132 for (APIPermissionSet::const_iterator i = apis_.begin(); 138 for (APIPermissionSet::const_iterator i = apis_.begin();
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 217
212 bool PermissionSet::HasEffectiveFullAccess() const { 218 bool PermissionSet::HasEffectiveFullAccess() const {
213 for (APIPermissionSet::const_iterator i = apis().begin(); 219 for (APIPermissionSet::const_iterator i = apis().begin();
214 i != apis().end(); ++i) { 220 i != apis().end(); ++i) {
215 if (i->info()->implies_full_access()) 221 if (i->info()->implies_full_access())
216 return true; 222 return true;
217 } 223 }
218 return false; 224 return false;
219 } 225 }
220 226
221 PermissionSet::~PermissionSet() {} 227 PermissionSet::PermissionSet(const PermissionSet& permissions)
228 : apis_(permissions.apis_),
229 manifest_permissions_(permissions.manifest_permissions_),
230 explicit_hosts_(permissions.explicit_hosts_),
231 scriptable_hosts_(permissions.scriptable_hosts_),
232 effective_hosts_(permissions.effective_hosts_),
233 should_warn_all_hosts_(permissions.should_warn_all_hosts_) {}
222 234
223 void PermissionSet::InitImplicitPermissions() { 235 void PermissionSet::InitImplicitPermissions() {
224 // The downloads permission implies the internal version as well. 236 // The downloads permission implies the internal version as well.
225 if (apis_.find(APIPermission::kDownloads) != apis_.end()) 237 if (apis_.find(APIPermission::kDownloads) != apis_.end())
226 apis_.insert(APIPermission::kDownloadsInternal); 238 apis_.insert(APIPermission::kDownloadsInternal);
227 239
228 // The fileBrowserHandler permission implies the internal version as well. 240 // The fileBrowserHandler permission implies the internal version as well.
229 if (apis_.find(APIPermission::kFileBrowserHandler) != apis_.end()) 241 if (apis_.find(APIPermission::kFileBrowserHandler) != apis_.end())
230 apis_.insert(APIPermission::kFileBrowserHandlerInternal); 242 apis_.insert(APIPermission::kFileBrowserHandlerInternal);
231 } 243 }
(...skipping 15 matching lines...) Expand all
247 if (iter->ImpliesAllHosts()) { 259 if (iter->ImpliesAllHosts()) {
248 should_warn_all_hosts_ = WARN_ALL_HOSTS; 260 should_warn_all_hosts_ = WARN_ALL_HOSTS;
249 return; 261 return;
250 } 262 }
251 } 263 }
252 264
253 should_warn_all_hosts_ = DONT_WARN_ALL_HOSTS; 265 should_warn_all_hosts_ = DONT_WARN_ALL_HOSTS;
254 } 266 }
255 267
256 } // namespace extensions 268 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/common/permissions/permission_set.h ('k') | extensions/common/permissions/permissions_data.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698