OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/api/sockets/sockets_manifest_permission.h" | 5 #include "extensions/common/api/sockets/sockets_manifest_permission.h" |
6 | 6 |
7 #include "base/memory/scoped_ptr.h" | 7 #include <memory> |
| 8 |
8 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
9 #include "base/strings/string_split.h" | 10 #include "base/strings/string_split.h" |
10 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
11 #include "base/values.h" | 12 #include "base/values.h" |
12 #include "extensions/common/api/extensions_manifest_types.h" | 13 #include "extensions/common/api/extensions_manifest_types.h" |
13 #include "extensions/common/api/sockets/sockets_manifest_data.h" | 14 #include "extensions/common/api/sockets/sockets_manifest_data.h" |
14 #include "extensions/common/error_utils.h" | 15 #include "extensions/common/error_utils.h" |
15 #include "extensions/common/manifest_constants.h" | 16 #include "extensions/common/manifest_constants.h" |
16 #include "grit/extensions_strings.h" | 17 #include "grit/extensions_strings.h" |
17 #include "ipc/ipc_message.h" | 18 #include "ipc/ipc_message.h" |
(...skipping 24 matching lines...) Expand all Loading... |
42 errors::kErrorInvalidHostPattern, host_pattern); | 43 errors::kErrorInvalidHostPattern, host_pattern); |
43 return false; | 44 return false; |
44 } | 45 } |
45 permission->AddPermission(entry); | 46 permission->AddPermission(entry); |
46 return true; | 47 return true; |
47 } | 48 } |
48 | 49 |
49 static bool ParseHostPatterns( | 50 static bool ParseHostPatterns( |
50 SocketsManifestPermission* permission, | 51 SocketsManifestPermission* permission, |
51 content::SocketPermissionRequest::OperationType operation_type, | 52 content::SocketPermissionRequest::OperationType operation_type, |
52 const scoped_ptr<SocketHostPatterns>& host_patterns, | 53 const std::unique_ptr<SocketHostPatterns>& host_patterns, |
53 base::string16* error) { | 54 base::string16* error) { |
54 if (!host_patterns) | 55 if (!host_patterns) |
55 return true; | 56 return true; |
56 | 57 |
57 if (host_patterns->as_string) { | 58 if (host_patterns->as_string) { |
58 return ParseHostPattern( | 59 return ParseHostPattern( |
59 permission, operation_type, *host_patterns->as_string, error); | 60 permission, operation_type, *host_patterns->as_string, error); |
60 } | 61 } |
61 | 62 |
62 CHECK(host_patterns->as_strings); | 63 CHECK(host_patterns->as_strings); |
63 for (std::vector<std::string>::const_iterator it = | 64 for (std::vector<std::string>::const_iterator it = |
64 host_patterns->as_strings->begin(); | 65 host_patterns->as_strings->begin(); |
65 it != host_patterns->as_strings->end(); | 66 it != host_patterns->as_strings->end(); |
66 ++it) { | 67 ++it) { |
67 if (!ParseHostPattern(permission, operation_type, *it, error)) { | 68 if (!ParseHostPattern(permission, operation_type, *it, error)) { |
68 return false; | 69 return false; |
69 } | 70 } |
70 } | 71 } |
71 return true; | 72 return true; |
72 } | 73 } |
73 | 74 |
74 static void SetHostPatterns( | 75 static void SetHostPatterns( |
75 scoped_ptr<SocketHostPatterns>& host_patterns, | 76 std::unique_ptr<SocketHostPatterns>& host_patterns, |
76 const SocketsManifestPermission* permission, | 77 const SocketsManifestPermission* permission, |
77 content::SocketPermissionRequest::OperationType operation_type) { | 78 content::SocketPermissionRequest::OperationType operation_type) { |
78 host_patterns.reset(new SocketHostPatterns()); | 79 host_patterns.reset(new SocketHostPatterns()); |
79 host_patterns->as_strings.reset(new std::vector<std::string>()); | 80 host_patterns->as_strings.reset(new std::vector<std::string>()); |
80 for (SocketPermissionEntrySet::const_iterator it = | 81 for (SocketPermissionEntrySet::const_iterator it = |
81 permission->entries().begin(); | 82 permission->entries().begin(); |
82 it != permission->entries().end(); ++it) { | 83 it != permission->entries().end(); ++it) { |
83 if (it->pattern().type == operation_type) { | 84 if (it->pattern().type == operation_type) { |
84 host_patterns->as_strings->push_back(it->GetHostPatternAsString()); | 85 host_patterns->as_strings->push_back(it->GetHostPatternAsString()); |
85 } | 86 } |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 } | 143 } |
143 } | 144 } |
144 | 145 |
145 } // namespace | 146 } // namespace |
146 | 147 |
147 SocketsManifestPermission::SocketsManifestPermission() {} | 148 SocketsManifestPermission::SocketsManifestPermission() {} |
148 | 149 |
149 SocketsManifestPermission::~SocketsManifestPermission() {} | 150 SocketsManifestPermission::~SocketsManifestPermission() {} |
150 | 151 |
151 // static | 152 // static |
152 scoped_ptr<SocketsManifestPermission> SocketsManifestPermission::FromValue( | 153 std::unique_ptr<SocketsManifestPermission> SocketsManifestPermission::FromValue( |
153 const base::Value& value, | 154 const base::Value& value, |
154 base::string16* error) { | 155 base::string16* error) { |
155 scoped_ptr<Sockets> sockets = Sockets::FromValue(value, error); | 156 std::unique_ptr<Sockets> sockets = Sockets::FromValue(value, error); |
156 if (!sockets) | 157 if (!sockets) |
157 return scoped_ptr<SocketsManifestPermission>(); | 158 return std::unique_ptr<SocketsManifestPermission>(); |
158 | 159 |
159 scoped_ptr<SocketsManifestPermission> result(new SocketsManifestPermission()); | 160 std::unique_ptr<SocketsManifestPermission> result( |
| 161 new SocketsManifestPermission()); |
160 if (sockets->udp) { | 162 if (sockets->udp) { |
161 if (!ParseHostPatterns(result.get(), | 163 if (!ParseHostPatterns(result.get(), |
162 SocketPermissionRequest::UDP_BIND, | 164 SocketPermissionRequest::UDP_BIND, |
163 sockets->udp->bind, | 165 sockets->udp->bind, |
164 error)) { | 166 error)) { |
165 return scoped_ptr<SocketsManifestPermission>(); | 167 return std::unique_ptr<SocketsManifestPermission>(); |
166 } | 168 } |
167 if (!ParseHostPatterns(result.get(), | 169 if (!ParseHostPatterns(result.get(), |
168 SocketPermissionRequest::UDP_SEND_TO, | 170 SocketPermissionRequest::UDP_SEND_TO, |
169 sockets->udp->send, | 171 sockets->udp->send, |
170 error)) { | 172 error)) { |
171 return scoped_ptr<SocketsManifestPermission>(); | 173 return std::unique_ptr<SocketsManifestPermission>(); |
172 } | 174 } |
173 if (!ParseHostPatterns(result.get(), | 175 if (!ParseHostPatterns(result.get(), |
174 SocketPermissionRequest::UDP_MULTICAST_MEMBERSHIP, | 176 SocketPermissionRequest::UDP_MULTICAST_MEMBERSHIP, |
175 sockets->udp->multicast_membership, | 177 sockets->udp->multicast_membership, |
176 error)) { | 178 error)) { |
177 return scoped_ptr<SocketsManifestPermission>(); | 179 return std::unique_ptr<SocketsManifestPermission>(); |
178 } | 180 } |
179 } | 181 } |
180 if (sockets->tcp) { | 182 if (sockets->tcp) { |
181 if (!ParseHostPatterns(result.get(), | 183 if (!ParseHostPatterns(result.get(), |
182 SocketPermissionRequest::TCP_CONNECT, | 184 SocketPermissionRequest::TCP_CONNECT, |
183 sockets->tcp->connect, | 185 sockets->tcp->connect, |
184 error)) { | 186 error)) { |
185 return scoped_ptr<SocketsManifestPermission>(); | 187 return std::unique_ptr<SocketsManifestPermission>(); |
186 } | 188 } |
187 } | 189 } |
188 if (sockets->tcp_server) { | 190 if (sockets->tcp_server) { |
189 if (!ParseHostPatterns(result.get(), | 191 if (!ParseHostPatterns(result.get(), |
190 SocketPermissionRequest::TCP_LISTEN, | 192 SocketPermissionRequest::TCP_LISTEN, |
191 sockets->tcp_server->listen, | 193 sockets->tcp_server->listen, |
192 error)) { | 194 error)) { |
193 return scoped_ptr<SocketsManifestPermission>(); | 195 return std::unique_ptr<SocketsManifestPermission>(); |
194 } | 196 } |
195 } | 197 } |
196 return result; | 198 return result; |
197 } | 199 } |
198 | 200 |
199 bool SocketsManifestPermission::CheckRequest( | 201 bool SocketsManifestPermission::CheckRequest( |
200 const Extension* extension, | 202 const Extension* extension, |
201 const SocketPermissionRequest& request) const { | 203 const SocketPermissionRequest& request) const { |
202 for (SocketPermissionEntrySet::const_iterator it = permissions_.begin(); | 204 for (SocketPermissionEntrySet::const_iterator it = permissions_.begin(); |
203 it != permissions_.end(); | 205 it != permissions_.end(); |
(...skipping 13 matching lines...) Expand all Loading... |
217 PermissionIDSet SocketsManifestPermission::GetPermissions() const { | 219 PermissionIDSet SocketsManifestPermission::GetPermissions() const { |
218 PermissionIDSet ids; | 220 PermissionIDSet ids; |
219 AddSocketHostPermissions(permissions_, &ids); | 221 AddSocketHostPermissions(permissions_, &ids); |
220 return ids; | 222 return ids; |
221 } | 223 } |
222 | 224 |
223 bool SocketsManifestPermission::FromValue(const base::Value* value) { | 225 bool SocketsManifestPermission::FromValue(const base::Value* value) { |
224 if (!value) | 226 if (!value) |
225 return false; | 227 return false; |
226 base::string16 error; | 228 base::string16 error; |
227 scoped_ptr<SocketsManifestPermission> manifest_permission( | 229 std::unique_ptr<SocketsManifestPermission> manifest_permission( |
228 SocketsManifestPermission::FromValue(*value, &error)); | 230 SocketsManifestPermission::FromValue(*value, &error)); |
229 | 231 |
230 if (!manifest_permission) | 232 if (!manifest_permission) |
231 return false; | 233 return false; |
232 | 234 |
233 permissions_ = manifest_permission->permissions_; | 235 permissions_ = manifest_permission->permissions_; |
234 return true; | 236 return true; |
235 } | 237 } |
236 | 238 |
237 scoped_ptr<base::Value> SocketsManifestPermission::ToValue() const { | 239 std::unique_ptr<base::Value> SocketsManifestPermission::ToValue() const { |
238 Sockets sockets; | 240 Sockets sockets; |
239 | 241 |
240 sockets.udp.reset(new Sockets::Udp()); | 242 sockets.udp.reset(new Sockets::Udp()); |
241 SetHostPatterns(sockets.udp->bind, this, SocketPermissionRequest::UDP_BIND); | 243 SetHostPatterns(sockets.udp->bind, this, SocketPermissionRequest::UDP_BIND); |
242 SetHostPatterns( | 244 SetHostPatterns( |
243 sockets.udp->send, this, SocketPermissionRequest::UDP_SEND_TO); | 245 sockets.udp->send, this, SocketPermissionRequest::UDP_SEND_TO); |
244 SetHostPatterns(sockets.udp->multicast_membership, | 246 SetHostPatterns(sockets.udp->multicast_membership, |
245 this, | 247 this, |
246 SocketPermissionRequest::UDP_MULTICAST_MEMBERSHIP); | 248 SocketPermissionRequest::UDP_MULTICAST_MEMBERSHIP); |
247 if (sockets.udp->bind->as_strings->size() == 0 && | 249 if (sockets.udp->bind->as_strings->size() == 0 && |
248 sockets.udp->send->as_strings->size() == 0 && | 250 sockets.udp->send->as_strings->size() == 0 && |
249 sockets.udp->multicast_membership->as_strings->size() == 0) { | 251 sockets.udp->multicast_membership->as_strings->size() == 0) { |
250 sockets.udp.reset(NULL); | 252 sockets.udp.reset(NULL); |
251 } | 253 } |
252 | 254 |
253 sockets.tcp.reset(new Sockets::Tcp()); | 255 sockets.tcp.reset(new Sockets::Tcp()); |
254 SetHostPatterns( | 256 SetHostPatterns( |
255 sockets.tcp->connect, this, SocketPermissionRequest::TCP_CONNECT); | 257 sockets.tcp->connect, this, SocketPermissionRequest::TCP_CONNECT); |
256 if (sockets.tcp->connect->as_strings->size() == 0) { | 258 if (sockets.tcp->connect->as_strings->size() == 0) { |
257 sockets.tcp.reset(NULL); | 259 sockets.tcp.reset(NULL); |
258 } | 260 } |
259 | 261 |
260 sockets.tcp_server.reset(new Sockets::TcpServer()); | 262 sockets.tcp_server.reset(new Sockets::TcpServer()); |
261 SetHostPatterns( | 263 SetHostPatterns( |
262 sockets.tcp_server->listen, this, SocketPermissionRequest::TCP_LISTEN); | 264 sockets.tcp_server->listen, this, SocketPermissionRequest::TCP_LISTEN); |
263 if (sockets.tcp_server->listen->as_strings->size() == 0) { | 265 if (sockets.tcp_server->listen->as_strings->size() == 0) { |
264 sockets.tcp_server.reset(NULL); | 266 sockets.tcp_server.reset(NULL); |
265 } | 267 } |
266 | 268 |
267 return scoped_ptr<base::Value>(sockets.ToValue().release()); | 269 return std::unique_ptr<base::Value>(sockets.ToValue().release()); |
268 } | 270 } |
269 | 271 |
270 ManifestPermission* SocketsManifestPermission::Diff( | 272 ManifestPermission* SocketsManifestPermission::Diff( |
271 const ManifestPermission* rhs) const { | 273 const ManifestPermission* rhs) const { |
272 const SocketsManifestPermission* other = | 274 const SocketsManifestPermission* other = |
273 static_cast<const SocketsManifestPermission*>(rhs); | 275 static_cast<const SocketsManifestPermission*>(rhs); |
274 | 276 |
275 scoped_ptr<SocketsManifestPermission> result(new SocketsManifestPermission()); | 277 std::unique_ptr<SocketsManifestPermission> result( |
| 278 new SocketsManifestPermission()); |
276 result->permissions_ = base::STLSetDifference<SocketPermissionEntrySet>( | 279 result->permissions_ = base::STLSetDifference<SocketPermissionEntrySet>( |
277 permissions_, other->permissions_); | 280 permissions_, other->permissions_); |
278 return result.release(); | 281 return result.release(); |
279 } | 282 } |
280 | 283 |
281 ManifestPermission* SocketsManifestPermission::Union( | 284 ManifestPermission* SocketsManifestPermission::Union( |
282 const ManifestPermission* rhs) const { | 285 const ManifestPermission* rhs) const { |
283 const SocketsManifestPermission* other = | 286 const SocketsManifestPermission* other = |
284 static_cast<const SocketsManifestPermission*>(rhs); | 287 static_cast<const SocketsManifestPermission*>(rhs); |
285 | 288 |
286 scoped_ptr<SocketsManifestPermission> result(new SocketsManifestPermission()); | 289 std::unique_ptr<SocketsManifestPermission> result( |
| 290 new SocketsManifestPermission()); |
287 result->permissions_ = base::STLSetUnion<SocketPermissionEntrySet>( | 291 result->permissions_ = base::STLSetUnion<SocketPermissionEntrySet>( |
288 permissions_, other->permissions_); | 292 permissions_, other->permissions_); |
289 return result.release(); | 293 return result.release(); |
290 } | 294 } |
291 | 295 |
292 ManifestPermission* SocketsManifestPermission::Intersect( | 296 ManifestPermission* SocketsManifestPermission::Intersect( |
293 const ManifestPermission* rhs) const { | 297 const ManifestPermission* rhs) const { |
294 const SocketsManifestPermission* other = | 298 const SocketsManifestPermission* other = |
295 static_cast<const SocketsManifestPermission*>(rhs); | 299 static_cast<const SocketsManifestPermission*>(rhs); |
296 | 300 |
297 scoped_ptr<SocketsManifestPermission> result(new SocketsManifestPermission()); | 301 std::unique_ptr<SocketsManifestPermission> result( |
| 302 new SocketsManifestPermission()); |
298 result->permissions_ = base::STLSetIntersection<SocketPermissionEntrySet>( | 303 result->permissions_ = base::STLSetIntersection<SocketPermissionEntrySet>( |
299 permissions_, other->permissions_); | 304 permissions_, other->permissions_); |
300 return result.release(); | 305 return result.release(); |
301 } | 306 } |
302 | 307 |
303 void SocketsManifestPermission::AddPermission( | 308 void SocketsManifestPermission::AddPermission( |
304 const SocketPermissionEntry& entry) { | 309 const SocketPermissionEntry& entry) { |
305 permissions_.insert(entry); | 310 permissions_.insert(entry); |
306 } | 311 } |
307 | 312 |
308 // static | 313 // static |
309 void SocketsManifestPermission::AddSocketHostPermissions( | 314 void SocketsManifestPermission::AddSocketHostPermissions( |
310 const SocketPermissionEntrySet& sockets, | 315 const SocketPermissionEntrySet& sockets, |
311 PermissionIDSet* ids) { | 316 PermissionIDSet* ids) { |
312 if (!AddAnyHostMessage(sockets, ids)) { | 317 if (!AddAnyHostMessage(sockets, ids)) { |
313 AddSpecificHostMessage(sockets, ids); | 318 AddSpecificHostMessage(sockets, ids); |
314 AddSubdomainHostMessage(sockets, ids); | 319 AddSubdomainHostMessage(sockets, ids); |
315 } | 320 } |
316 AddNetworkListMessage(sockets, ids); | 321 AddNetworkListMessage(sockets, ids); |
317 } | 322 } |
318 | 323 |
319 } // namespace extensions | 324 } // namespace extensions |
OLD | NEW |