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

Unified Diff: chrome/common/extensions/permissions/socket_permission_entry.cc

Issue 201203006: Move basic API permissions code out of //chrome (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: move moar things Created 6 years, 9 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698