Index: chrome/common/extensions/permissions/socket_permission_entry.cc |
diff --git a/chrome/common/extensions/permissions/socket_permission_entry.cc b/chrome/common/extensions/permissions/socket_permission_entry.cc |
deleted file mode 100644 |
index be426ead0796d4376eb136ff32c36a7244180527..0000000000000000000000000000000000000000 |
--- a/chrome/common/extensions/permissions/socket_permission_entry.cc |
+++ /dev/null |
@@ -1,227 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/common/extensions/permissions/socket_permission_entry.h" |
- |
-#include <cstdlib> |
-#include <sstream> |
-#include <vector> |
- |
-#include "base/logging.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/strings/string_number_conversions.h" |
-#include "base/strings/string_split.h" |
-#include "base/strings/string_util.h" |
-#include "chrome/common/extensions/permissions/socket_permission.h" |
-#include "extensions/common/permissions/api_permission.h" |
-#include "url/url_canon.h" |
- |
-namespace { |
- |
-using content::SocketPermissionRequest; |
- |
-const char kColon = ':'; |
-const char kDot = '.'; |
-const char kWildcard[] = "*"; |
-const int kWildcardPortNumber = 0; |
-const int kInvalidPort = -1; |
- |
-bool StartsOrEndsWithWhitespace(const std::string& str) { |
- if (str.find_first_not_of(base::kWhitespaceASCII) != 0) |
- return true; |
- if (str.find_last_not_of(base::kWhitespaceASCII) != str.length() - 1) |
- return true; |
- return false; |
-} |
- |
-} // namespace |
- |
-namespace extensions { |
- |
-SocketPermissionEntry::SocketPermissionEntry() |
- : pattern_(SocketPermissionRequest::NONE, std::string(), kInvalidPort), |
- match_subdomains_(false) { |
-} |
- |
-SocketPermissionEntry::~SocketPermissionEntry() {} |
- |
-bool SocketPermissionEntry::operator<(const SocketPermissionEntry& rhs) const { |
- if (pattern_.type < rhs.pattern_.type) |
- return true; |
- if (pattern_.type > rhs.pattern_.type) |
- return false; |
- |
- if (pattern_.host < rhs.pattern_.host) |
- return true; |
- if (pattern_.host > rhs.pattern_.host) |
- return false; |
- |
- if (match_subdomains_ < rhs.match_subdomains_) |
- return true; |
- if (match_subdomains_ > rhs.match_subdomains_) |
- return false; |
- |
- if (pattern_.port < rhs.pattern_.port) |
- return true; |
- return false; |
-} |
- |
-bool SocketPermissionEntry::operator==(const SocketPermissionEntry& rhs) const { |
- return (pattern_.type == rhs.pattern_.type) && |
- (pattern_.host == rhs.pattern_.host) && |
- (match_subdomains_ == rhs.match_subdomains_) && |
- (pattern_.port == rhs.pattern_.port); |
-} |
- |
-bool SocketPermissionEntry::Check( |
- const content::SocketPermissionRequest& request) const { |
- if (pattern_.type != request.type) |
- return false; |
- |
- std::string lhost = StringToLowerASCII(request.host); |
- if (pattern_.host != lhost) { |
- if (!match_subdomains_) |
- return false; |
- |
- if (!pattern_.host.empty()) { |
- // Do not wildcard part of IP address. |
- url_parse::Component component(0, lhost.length()); |
- url_canon::RawCanonOutputT<char, 128> ignored_output; |
- url_canon::CanonHostInfo host_info; |
- url_canon::CanonicalizeIPAddress(lhost.c_str(), component, |
- &ignored_output, &host_info); |
- if (host_info.IsIPAddress()) |
- return false; |
- |
- // host should equal one or more chars + "." + host_. |
- int i = lhost.length() - pattern_.host.length(); |
- if (i < 2) |
- return false; |
- |
- if (lhost.compare(i, pattern_.host.length(), pattern_.host) != 0) |
- return false; |
- |
- if (lhost[i - 1] != kDot) |
- return false; |
- } |
- } |
- |
- if (pattern_.port != request.port && pattern_.port != kWildcardPortNumber) |
- return false; |
- |
- return true; |
-} |
- |
-SocketPermissionEntry::HostType SocketPermissionEntry::GetHostType() const { |
- return pattern_.host.empty() ? SocketPermissionEntry::ANY_HOST : |
- match_subdomains_ ? SocketPermissionEntry::HOSTS_IN_DOMAINS : |
- SocketPermissionEntry::SPECIFIC_HOSTS; |
-} |
- |
-bool SocketPermissionEntry::IsAddressBoundType() const { |
- return pattern_.type == SocketPermissionRequest::TCP_CONNECT || |
- pattern_.type == SocketPermissionRequest::TCP_LISTEN || |
- pattern_.type == SocketPermissionRequest::UDP_BIND || |
- pattern_.type == SocketPermissionRequest::UDP_SEND_TO; |
-} |
- |
-// static |
-bool SocketPermissionEntry::ParseHostPattern( |
- SocketPermissionRequest::OperationType type, |
- const std::string& pattern, |
- SocketPermissionEntry* entry) { |
- std::vector<std::string> tokens; |
- base::SplitStringDontTrim(pattern, kColon, &tokens); |
- return ParseHostPattern(type, tokens, entry); |
-} |
- |
-// static |
-bool SocketPermissionEntry::ParseHostPattern( |
- SocketPermissionRequest::OperationType type, |
- const std::vector<std::string>& pattern_tokens, |
- SocketPermissionEntry* entry) { |
- |
- SocketPermissionEntry result; |
- |
- if (type == SocketPermissionRequest::NONE) |
- return false; |
- |
- if (pattern_tokens.size() > 2) |
- return false; |
- |
- result.pattern_.type = type; |
- result.pattern_.port = kWildcardPortNumber; |
- result.match_subdomains_ = true; |
- |
- if (pattern_tokens.size() == 0) { |
- *entry = result; |
- return true; |
- } |
- |
- // Return an error if address is specified for permissions that don't |
- // need it (such as 'resolve-host'). |
- if (!result.IsAddressBoundType()) |
- return false; |
- |
- result.pattern_.host = pattern_tokens[0]; |
- if (!result.pattern_.host.empty()) { |
- if (StartsOrEndsWithWhitespace(result.pattern_.host)) |
- return false; |
- result.pattern_.host = StringToLowerASCII(result.pattern_.host); |
- |
- // The first component can optionally be '*' to match all subdomains. |
- std::vector<std::string> host_components; |
- base::SplitString(result.pattern_.host, kDot, &host_components); |
- DCHECK(!host_components.empty()); |
- |
- if (host_components[0] == kWildcard || host_components[0].empty()) { |
- host_components.erase(host_components.begin(), |
- host_components.begin() + 1); |
- } else { |
- result.match_subdomains_ = false; |
- } |
- result.pattern_.host = JoinString(host_components, kDot); |
- } |
- |
- if (pattern_tokens.size() == 1 || |
- pattern_tokens[1].empty() || |
- pattern_tokens[1] == kWildcard) { |
- *entry = result; |
- return true; |
- } |
- |
- if (StartsOrEndsWithWhitespace(pattern_tokens[1])) |
- return false; |
- |
- if (!base::StringToInt(pattern_tokens[1], &result.pattern_.port) || |
- result.pattern_.port < 1 || result.pattern_.port > 65535) |
- return false; |
- |
- *entry = result; |
- return true; |
-} |
- |
-std::string SocketPermissionEntry::GetHostPatternAsString() const { |
- std::string result; |
- |
- if (!IsAddressBoundType()) |
- return result; |
- |
- if (match_subdomains()) { |
- result.append(kWildcard); |
- if (!pattern_.host.empty()) |
- result.append(1, kDot).append(pattern_.host); |
- } else { |
- result.append(pattern_.host); |
- } |
- |
- if (pattern_.port == kWildcardPortNumber) |
- result.append(1, kColon).append(kWildcard); |
- else |
- result.append(1, kColon).append(base::IntToString(pattern_.port)); |
- |
- return result; |
-} |
- |
-} // namespace extensions |