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

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

Issue 12684008: Multicast socket API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Minor fixes Created 7 years, 8 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 12 matching lines...) Expand all
23 using extensions::SocketPermissionData; 23 using extensions::SocketPermissionData;
24 24
25 const char kColon = ':'; 25 const char kColon = ':';
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 int kWildcardPortNumber = 0; 34 const int kWildcardPortNumber = 0;
34 const int kInvalidPort = -1; 35 const int kInvalidPort = -1;
35 36
36 SocketPermissionRequest::OperationType StringToType(const std::string& s) { 37 SocketPermissionRequest::OperationType StringToType(const std::string& s) {
37 if (s == kTCPConnect) 38 if (s == kTCPConnect)
38 return SocketPermissionRequest::TCP_CONNECT; 39 return SocketPermissionRequest::TCP_CONNECT;
39 if (s == kTCPListen) 40 if (s == kTCPListen)
40 return SocketPermissionRequest::TCP_LISTEN; 41 return SocketPermissionRequest::TCP_LISTEN;
41 if (s == kUDPBind) 42 if (s == kUDPBind)
42 return SocketPermissionRequest::UDP_BIND; 43 return SocketPermissionRequest::UDP_BIND;
43 if (s == kUDPSendTo) 44 if (s == kUDPSendTo)
44 return SocketPermissionRequest::UDP_SEND_TO; 45 return SocketPermissionRequest::UDP_SEND_TO;
46 if (s == kUDPMulticastMembership)
47 return SocketPermissionRequest::UDP_MUTICAST_MEMBERSHIP;
45 return SocketPermissionRequest::NONE; 48 return SocketPermissionRequest::NONE;
46 } 49 }
47 50
48 const char* TypeToString(SocketPermissionRequest::OperationType type) { 51 const char* TypeToString(SocketPermissionRequest::OperationType type) {
49 switch (type) { 52 switch (type) {
50 case SocketPermissionRequest::TCP_CONNECT: 53 case SocketPermissionRequest::TCP_CONNECT:
51 return kTCPConnect; 54 return kTCPConnect;
52 case SocketPermissionRequest::TCP_LISTEN: 55 case SocketPermissionRequest::TCP_LISTEN:
53 return kTCPListen; 56 return kTCPListen;
54 case SocketPermissionRequest::UDP_BIND: 57 case SocketPermissionRequest::UDP_BIND:
55 return kUDPBind; 58 return kUDPBind;
56 case SocketPermissionRequest::UDP_SEND_TO: 59 case SocketPermissionRequest::UDP_SEND_TO:
57 return kUDPSendTo; 60 return kUDPSendTo;
61 case SocketPermissionRequest::UDP_MUTICAST_MEMBERSHIP:
miket_OOO 2013/04/25 21:52:12 spelling (fix everywhere, please)
62 return kUDPMulticastMembership;
58 default: 63 default:
59 return kInvalid; 64 return kInvalid;
60 } 65 }
61 } 66 }
62 67
63 bool StartsOrEndsWithWhitespace(const std::string& str) { 68 bool StartsOrEndsWithWhitespace(const std::string& str) {
64 if (str.find_first_not_of(kWhitespaceASCII) != 0) 69 if (str.find_first_not_of(kWhitespaceASCII) != 0)
65 return true; 70 return true;
66 if (str.find_last_not_of(kWhitespaceASCII) != str.length() - 1) 71 if (str.find_last_not_of(kWhitespaceASCII) != str.length() - 1)
67 return true; 72 return true;
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 if (tokens.empty() || tokens.size() > 3) 205 if (tokens.empty() || tokens.size() > 3)
201 break; 206 break;
202 207
203 pattern_.type = StringToType(tokens[0]); 208 pattern_.type = StringToType(tokens[0]);
204 if (pattern_.type == SocketPermissionRequest::NONE) 209 if (pattern_.type == SocketPermissionRequest::NONE)
205 break; 210 break;
206 211
207 if (tokens.size() == 1) 212 if (tokens.size() == 1)
208 return true; 213 return true;
209 214
215 // Multicast membership permission string does not include an address.
216 if (pattern_.type == SocketPermissionRequest::UDP_MUTICAST_MEMBERSHIP)
217 return false;
218
210 pattern_.host = tokens[1]; 219 pattern_.host = tokens[1];
211 if (!pattern_.host.empty()) { 220 if (!pattern_.host.empty()) {
212 if (StartsOrEndsWithWhitespace(pattern_.host)) 221 if (StartsOrEndsWithWhitespace(pattern_.host))
213 break; 222 break;
214 pattern_.host = StringToLowerASCII(pattern_.host); 223 pattern_.host = StringToLowerASCII(pattern_.host);
215 224
216 // The first component can optionally be '*' to match all subdomains. 225 // The first component can optionally be '*' to match all subdomains.
217 std::vector<std::string> host_components; 226 std::vector<std::string> host_components;
218 base::SplitString(pattern_.host, kDot, &host_components); 227 base::SplitString(pattern_.host, kDot, &host_components);
219 DCHECK(!host_components.empty()); 228 DCHECK(!host_components.empty());
(...skipping 23 matching lines...) Expand all
243 return false; 252 return false;
244 } 253 }
245 254
246 const std::string& SocketPermissionData::GetAsString() const { 255 const std::string& SocketPermissionData::GetAsString() const {
247 if (!spec_.empty()) 256 if (!spec_.empty())
248 return spec_; 257 return spec_;
249 258
250 spec_.reserve(64); 259 spec_.reserve(64);
251 spec_.append(TypeToString(pattern_.type)); 260 spec_.append(TypeToString(pattern_.type));
252 261
262 if (pattern_.type == SocketPermissionRequest::UDP_MUTICAST_MEMBERSHIP)
263 return spec_;
264
253 if (match_subdomains_) { 265 if (match_subdomains_) {
254 spec_.append(1, kColon).append(kWildcard); 266 spec_.append(1, kColon).append(kWildcard);
255 if (!pattern_.host.empty()) 267 if (!pattern_.host.empty())
256 spec_.append(1, kDot).append(pattern_.host); 268 spec_.append(1, kDot).append(pattern_.host);
257 } else { 269 } else {
258 spec_.append(1, kColon).append(pattern_.host); 270 spec_.append(1, kColon).append(pattern_.host);
259 } 271 }
260 272
261 if (pattern_.port == kWildcardPortNumber) 273 if (pattern_.port == kWildcardPortNumber)
262 spec_.append(1, kColon).append(kWildcard); 274 spec_.append(1, kColon).append(kWildcard);
263 else 275 else
264 spec_.append(1, kColon).append(base::IntToString(pattern_.port)); 276 spec_.append(1, kColon).append(base::IntToString(pattern_.port));
265 277
266 return spec_; 278 return spec_;
267 } 279 }
268 280
269 void SocketPermissionData::Reset() { 281 void SocketPermissionData::Reset() {
270 pattern_.type = SocketPermissionRequest::NONE; 282 pattern_.type = SocketPermissionRequest::NONE;
271 pattern_.host.clear(); 283 pattern_.host.clear();
272 match_subdomains_ = false; 284 match_subdomains_ = false;
273 pattern_.port = kInvalidPort; 285 pattern_.port = kInvalidPort;
274 spec_.clear(); 286 spec_.clear();
275 } 287 }
276 288
277 } // namespace extensions 289 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698