| 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
|
|
|