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

Side by Side Diff: chrome/common/extensions/permissions/socket_permission_data.cc

Issue 23703008: Add network-status socket permission. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ' Created 7 years, 3 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/common/extensions/permissions/socket_permission_data.h" 5 #include "chrome/common/extensions/permissions/socket_permission_data.h"
6 6
7 #include <cstdlib> 7 #include <cstdlib>
8 #include <sstream> 8 #include <sstream>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 15 matching lines...) Expand all
26 const char kDot = '.'; 26 const char kDot = '.';
27 const char kWildcard[] = "*"; 27 const char kWildcard[] = "*";
28 const char kInvalid[] = "invalid"; 28 const char kInvalid[] = "invalid";
29 const char kTCPConnect[] = "tcp-connect"; 29 const char kTCPConnect[] = "tcp-connect";
30 const char kTCPListen[] = "tcp-listen"; 30 const char kTCPListen[] = "tcp-listen";
31 const char kUDPBind[] = "udp-bind"; 31 const char kUDPBind[] = "udp-bind";
32 const char kUDPSendTo[] = "udp-send-to"; 32 const char kUDPSendTo[] = "udp-send-to";
33 const char kUDPMulticastMembership[] = "udp-multicast-membership"; 33 const char kUDPMulticastMembership[] = "udp-multicast-membership";
34 const char kResolveHost[] = "resolve-host"; 34 const char kResolveHost[] = "resolve-host";
35 const char kResolveProxy[] = "resolve-proxy"; 35 const char kResolveProxy[] = "resolve-proxy";
36 const char kNetworkState[] = "network-state";
36 const int kWildcardPortNumber = 0; 37 const int kWildcardPortNumber = 0;
37 const int kInvalidPort = -1; 38 const int kInvalidPort = -1;
38 39
39 SocketPermissionRequest::OperationType StringToType(const std::string& s) { 40 SocketPermissionRequest::OperationType StringToType(const std::string& s) {
40 if (s == kTCPConnect) 41 if (s == kTCPConnect)
41 return SocketPermissionRequest::TCP_CONNECT; 42 return SocketPermissionRequest::TCP_CONNECT;
42 if (s == kTCPListen) 43 if (s == kTCPListen)
43 return SocketPermissionRequest::TCP_LISTEN; 44 return SocketPermissionRequest::TCP_LISTEN;
44 if (s == kUDPBind) 45 if (s == kUDPBind)
45 return SocketPermissionRequest::UDP_BIND; 46 return SocketPermissionRequest::UDP_BIND;
46 if (s == kUDPSendTo) 47 if (s == kUDPSendTo)
47 return SocketPermissionRequest::UDP_SEND_TO; 48 return SocketPermissionRequest::UDP_SEND_TO;
48 if (s == kUDPMulticastMembership) 49 if (s == kUDPMulticastMembership)
49 return SocketPermissionRequest::UDP_MULTICAST_MEMBERSHIP; 50 return SocketPermissionRequest::UDP_MULTICAST_MEMBERSHIP;
50 if (s == kResolveHost) 51 if (s == kResolveHost)
51 return SocketPermissionRequest::RESOLVE_HOST; 52 return SocketPermissionRequest::RESOLVE_HOST;
52 if (s == kResolveProxy) 53 if (s == kResolveProxy)
53 return SocketPermissionRequest::RESOLVE_PROXY; 54 return SocketPermissionRequest::RESOLVE_PROXY;
55 if (s == kNetworkState)
56 return SocketPermissionRequest::NETWORK_STATE;
54 return SocketPermissionRequest::NONE; 57 return SocketPermissionRequest::NONE;
55 } 58 }
56 59
57 const char* TypeToString(SocketPermissionRequest::OperationType type) { 60 const char* TypeToString(SocketPermissionRequest::OperationType type) {
58 switch (type) { 61 switch (type) {
59 case SocketPermissionRequest::TCP_CONNECT: 62 case SocketPermissionRequest::TCP_CONNECT:
60 return kTCPConnect; 63 return kTCPConnect;
61 case SocketPermissionRequest::TCP_LISTEN: 64 case SocketPermissionRequest::TCP_LISTEN:
62 return kTCPListen; 65 return kTCPListen;
63 case SocketPermissionRequest::UDP_BIND: 66 case SocketPermissionRequest::UDP_BIND:
64 return kUDPBind; 67 return kUDPBind;
65 case SocketPermissionRequest::UDP_SEND_TO: 68 case SocketPermissionRequest::UDP_SEND_TO:
66 return kUDPSendTo; 69 return kUDPSendTo;
67 case SocketPermissionRequest::UDP_MULTICAST_MEMBERSHIP: 70 case SocketPermissionRequest::UDP_MULTICAST_MEMBERSHIP:
68 return kUDPMulticastMembership; 71 return kUDPMulticastMembership;
69 case SocketPermissionRequest::RESOLVE_HOST: 72 case SocketPermissionRequest::RESOLVE_HOST:
70 return kResolveHost; 73 return kResolveHost;
71 case SocketPermissionRequest::RESOLVE_PROXY: 74 case SocketPermissionRequest::RESOLVE_PROXY:
72 return kResolveProxy; 75 return kResolveProxy;
76 case SocketPermissionRequest::NETWORK_STATE:
77 return kNetworkState;
73 default: 78 default:
74 return kInvalid; 79 return kInvalid;
75 } 80 }
76 } 81 }
77 82
78 bool StartsOrEndsWithWhitespace(const std::string& str) { 83 bool StartsOrEndsWithWhitespace(const std::string& str) {
79 if (str.find_first_not_of(kWhitespaceASCII) != 0) 84 if (str.find_first_not_of(kWhitespaceASCII) != 0)
80 return true; 85 return true;
81 if (str.find_last_not_of(kWhitespaceASCII) != str.length() - 1) 86 if (str.find_last_not_of(kWhitespaceASCII) != str.length() - 1)
82 return true; 87 return true;
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 } 178 }
174 179
175 bool SocketPermissionData::FromValue(const base::Value* value) { 180 bool SocketPermissionData::FromValue(const base::Value* value) {
176 std::string spec; 181 std::string spec;
177 if (!value->GetAsString(&spec)) 182 if (!value->GetAsString(&spec))
178 return false; 183 return false;
179 184
180 return Parse(spec); 185 return Parse(spec);
181 } 186 }
182 187
188 bool SocketPermissionData::IsAddressBoundType() const {
189 return pattern_.type == SocketPermissionRequest::TCP_CONNECT ||
190 pattern_.type == SocketPermissionRequest::TCP_LISTEN ||
191 pattern_.type == SocketPermissionRequest::UDP_BIND ||
192 pattern_.type == SocketPermissionRequest::UDP_SEND_TO;
193 }
194
183 SocketPermissionData::HostType SocketPermissionData::GetHostType() const { 195 SocketPermissionData::HostType SocketPermissionData::GetHostType() const {
184 return pattern_.host.empty() ? SocketPermissionData::ANY_HOST : 196 return pattern_.host.empty() ? SocketPermissionData::ANY_HOST :
185 match_subdomains_ ? SocketPermissionData::HOSTS_IN_DOMAINS : 197 match_subdomains_ ? SocketPermissionData::HOSTS_IN_DOMAINS :
186 SocketPermissionData::SPECIFIC_HOSTS; 198 SocketPermissionData::SPECIFIC_HOSTS;
187 } 199 }
188 200
189 const std::string SocketPermissionData::GetHost() const { 201 const std::string SocketPermissionData::GetHost() const {
190 return pattern_.host; 202 return pattern_.host;
191 } 203 }
192 204
(...skipping 23 matching lines...) Expand all
216 if (tokens.empty() || tokens.size() > 3) 228 if (tokens.empty() || tokens.size() > 3)
217 break; 229 break;
218 230
219 pattern_.type = StringToType(tokens[0]); 231 pattern_.type = StringToType(tokens[0]);
220 if (pattern_.type == SocketPermissionRequest::NONE) 232 if (pattern_.type == SocketPermissionRequest::NONE)
221 break; 233 break;
222 234
223 if (tokens.size() == 1) 235 if (tokens.size() == 1)
224 return true; 236 return true;
225 237
226 // Multicast membership, resolve proxy and resolve host permission strings 238 // Return an error if address is specified for permissions that don't
227 // do not carry an address. 239 // need it (such as 'resolve-host').
228 if (pattern_.type == SocketPermissionRequest::UDP_MULTICAST_MEMBERSHIP || 240 if (!IsAddressBoundType())
229 pattern_.type == SocketPermissionRequest::RESOLVE_PROXY ||
230 pattern_.type == SocketPermissionRequest::RESOLVE_HOST)
231 break; 241 break;
232 242
233 pattern_.host = tokens[1]; 243 pattern_.host = tokens[1];
234 if (!pattern_.host.empty()) { 244 if (!pattern_.host.empty()) {
235 if (StartsOrEndsWithWhitespace(pattern_.host)) 245 if (StartsOrEndsWithWhitespace(pattern_.host))
236 break; 246 break;
237 pattern_.host = StringToLowerASCII(pattern_.host); 247 pattern_.host = StringToLowerASCII(pattern_.host);
238 248
239 // The first component can optionally be '*' to match all subdomains. 249 // The first component can optionally be '*' to match all subdomains.
240 std::vector<std::string> host_components; 250 std::vector<std::string> host_components;
(...skipping 25 matching lines...) Expand all
266 return false; 276 return false;
267 } 277 }
268 278
269 const std::string& SocketPermissionData::GetAsString() const { 279 const std::string& SocketPermissionData::GetAsString() const {
270 if (!spec_.empty()) 280 if (!spec_.empty())
271 return spec_; 281 return spec_;
272 282
273 spec_.reserve(64); 283 spec_.reserve(64);
274 spec_.append(TypeToString(pattern_.type)); 284 spec_.append(TypeToString(pattern_.type));
275 285
276 if (pattern_.type == SocketPermissionRequest::UDP_MULTICAST_MEMBERSHIP || 286 if (!IsAddressBoundType())
277 pattern_.type == SocketPermissionRequest::RESOLVE_PROXY ||
278 pattern_.type == SocketPermissionRequest::RESOLVE_HOST)
279 return spec_; 287 return spec_;
280 288
281 if (match_subdomains_) { 289 if (match_subdomains_) {
282 spec_.append(1, kColon).append(kWildcard); 290 spec_.append(1, kColon).append(kWildcard);
283 if (!pattern_.host.empty()) 291 if (!pattern_.host.empty())
284 spec_.append(1, kDot).append(pattern_.host); 292 spec_.append(1, kDot).append(pattern_.host);
285 } else { 293 } else {
286 spec_.append(1, kColon).append(pattern_.host); 294 spec_.append(1, kColon).append(pattern_.host);
287 } 295 }
288 296
289 if (pattern_.port == kWildcardPortNumber) 297 if (pattern_.port == kWildcardPortNumber)
290 spec_.append(1, kColon).append(kWildcard); 298 spec_.append(1, kColon).append(kWildcard);
291 else 299 else
292 spec_.append(1, kColon).append(base::IntToString(pattern_.port)); 300 spec_.append(1, kColon).append(base::IntToString(pattern_.port));
293 301
294 return spec_; 302 return spec_;
295 } 303 }
296 304
297 void SocketPermissionData::Reset() { 305 void SocketPermissionData::Reset() {
298 pattern_.type = SocketPermissionRequest::NONE; 306 pattern_.type = SocketPermissionRequest::NONE;
299 pattern_.host.clear(); 307 pattern_.host.clear();
300 match_subdomains_ = false; 308 match_subdomains_ = false;
301 pattern_.port = kInvalidPort; 309 pattern_.port = kInvalidPort;
302 spec_.clear(); 310 spec_.clear();
303 } 311 }
304 312
305 } // namespace extensions 313 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698