Index: chrome/common/content_settings_pattern_parser.cc |
diff --git a/chrome/common/content_settings_pattern_parser.cc b/chrome/common/content_settings_pattern_parser.cc |
deleted file mode 100644 |
index 1a90da4d419042ad9a00efc7a3c57cb95f53b27a..0000000000000000000000000000000000000000 |
--- a/chrome/common/content_settings_pattern_parser.cc |
+++ /dev/null |
@@ -1,221 +0,0 @@ |
-// Copyright (c) 2012 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/content_settings_pattern_parser.h" |
- |
-#include "base/strings/string_util.h" |
-#include "url/url_constants.h" |
- |
-namespace { |
- |
-const char kDomainWildcard[] = "[*.]"; |
-const size_t kDomainWildcardLength = 4; |
-const char kHostWildcard[] = "*"; |
-const char kPathWildcard[] = "*"; |
-const char kPortWildcard[] = "*"; |
-const char kSchemeWildcard[] = "*"; |
-const char kUrlPathSeparator[] = "/"; |
-const char kUrlPortSeparator[] = ":"; |
- |
-class Component { |
- public: |
- Component() : start(0), len(0) {} |
- Component(size_t s, size_t l) : start(s), len(l) {} |
- |
- bool IsNonEmpty() { |
- return len > 0; |
- } |
- |
- size_t start; |
- size_t len; |
-}; |
- |
-} // namespace |
- |
-namespace content_settings { |
- |
-void PatternParser::Parse(const std::string& pattern_spec, |
- ContentSettingsPattern::BuilderInterface* builder) { |
- if (pattern_spec == "*") { |
- builder->WithSchemeWildcard(); |
- builder->WithDomainWildcard(); |
- builder->WithPortWildcard(); |
- return; |
- } |
- |
- // Initialize components for the individual patterns parts to empty |
- // sub-strings. |
- Component scheme_component; |
- Component host_component; |
- Component port_component; |
- Component path_component; |
- |
- size_t start = 0; |
- size_t current_pos = 0; |
- |
- if (pattern_spec.empty()) |
- return; |
- |
- // Test if a scheme pattern is in the spec. |
- const std::string standard_scheme_separator(url::kStandardSchemeSeparator); |
- current_pos = pattern_spec.find(standard_scheme_separator, start); |
- if (current_pos != std::string::npos) { |
- scheme_component = Component(start, current_pos); |
- start = current_pos + standard_scheme_separator.size(); |
- current_pos = start; |
- } else { |
- current_pos = start; |
- } |
- |
- if (start >= pattern_spec.size()) |
- return; // Bad pattern spec. |
- |
- // Jump to the end of domain wildcards or an IPv6 addresses. IPv6 addresses |
- // contain ':'. So first move to the end of an IPv6 address befor searching |
- // for the ':' that separates the port form the host. |
- if (pattern_spec[current_pos] == '[') |
- current_pos = pattern_spec.find("]", start); |
- |
- if (current_pos == std::string::npos) |
- return; // Bad pattern spec. |
- |
- current_pos = pattern_spec.find(std::string(kUrlPortSeparator), current_pos); |
- if (current_pos == std::string::npos) { |
- // No port spec found |
- current_pos = pattern_spec.find(std::string(kUrlPathSeparator), start); |
- if (current_pos == std::string::npos) { |
- current_pos = pattern_spec.size(); |
- host_component = Component(start, current_pos - start); |
- } else { |
- // Pattern has a path spec. |
- host_component = Component(start, current_pos - start); |
- } |
- start = current_pos; |
- } else { |
- // Port spec found. |
- host_component = Component(start, current_pos - start); |
- start = current_pos + 1; |
- if (start < pattern_spec.size()) { |
- current_pos = pattern_spec.find(std::string(kUrlPathSeparator), start); |
- if (current_pos == std::string::npos) { |
- current_pos = pattern_spec.size(); |
- } |
- port_component = Component(start, current_pos - start); |
- start = current_pos; |
- } |
- } |
- |
- current_pos = pattern_spec.size(); |
- if (start < current_pos) { |
- // Pattern has a path spec. |
- path_component = Component(start, current_pos - start); |
- } |
- |
- // Set pattern parts. |
- std::string scheme; |
- if (scheme_component.IsNonEmpty()) { |
- scheme = pattern_spec.substr(scheme_component.start, scheme_component.len); |
- if (scheme == kSchemeWildcard) { |
- builder->WithSchemeWildcard(); |
- } else { |
- builder->WithScheme(scheme); |
- } |
- } else { |
- builder->WithSchemeWildcard(); |
- } |
- |
- if (host_component.IsNonEmpty()) { |
- std::string host = pattern_spec.substr(host_component.start, |
- host_component.len); |
- if (host == kHostWildcard) { |
- builder->WithDomainWildcard(); |
- } else if (StartsWithASCII(host, kDomainWildcard, true)) { |
- host = host.substr(kDomainWildcardLength); |
- builder->WithDomainWildcard(); |
- builder->WithHost(host); |
- } else { |
- // If the host contains a wildcard symbol then it is invalid. |
- if (host.find(kHostWildcard) != std::string::npos) { |
- builder->Invalid(); |
- return; |
- } |
- builder->WithHost(host); |
- } |
- } |
- |
- if (port_component.IsNonEmpty()) { |
- const std::string port = pattern_spec.substr(port_component.start, |
- port_component.len); |
- if (port == kPortWildcard) { |
- builder->WithPortWildcard(); |
- } else { |
- // Check if the port string represents a valid port. |
- for (size_t i = 0; i < port.size(); ++i) { |
- if (!IsAsciiDigit(port[i])) { |
- builder->Invalid(); |
- return; |
- } |
- } |
- // TODO(markusheintz): Check port range. |
- builder->WithPort(port); |
- } |
- } else { |
- if (!ContentSettingsPattern::IsNonWildcardDomainNonPortScheme(scheme) && |
- scheme != url::kFileScheme) |
- builder->WithPortWildcard(); |
- } |
- |
- if (path_component.IsNonEmpty()) { |
- const std::string path = pattern_spec.substr(path_component.start, |
- path_component.len); |
- if (path.substr(1) == kPathWildcard) |
- builder->WithPathWildcard(); |
- else |
- builder->WithPath(path); |
- } |
-} |
- |
-// static |
-std::string PatternParser::ToString( |
- const ContentSettingsPattern::PatternParts& parts) { |
- // Return the most compact form to support legacy code and legacy pattern |
- // strings. |
- if (parts.is_scheme_wildcard && |
- parts.has_domain_wildcard && |
- parts.host.empty() && |
- parts.is_port_wildcard) |
- return "*"; |
- |
- std::string str; |
- if (!parts.is_scheme_wildcard) |
- str += parts.scheme + url::kStandardSchemeSeparator; |
- |
- if (parts.scheme == url::kFileScheme) { |
- if (parts.is_path_wildcard) |
- return str + kUrlPathSeparator + kPathWildcard; |
- else |
- return str + parts.path; |
- } |
- |
- if (parts.has_domain_wildcard) { |
- if (parts.host.empty()) |
- str += kHostWildcard; |
- else |
- str += kDomainWildcard; |
- } |
- str += parts.host; |
- |
- if (ContentSettingsPattern::IsNonWildcardDomainNonPortScheme(parts.scheme)) { |
- str += parts.path.empty() ? std::string(kUrlPathSeparator) : parts.path; |
- return str; |
- } |
- |
- if (!parts.is_port_wildcard) { |
- str += std::string(kUrlPortSeparator) + parts.port; |
- } |
- |
- return str; |
-} |
- |
-} // namespace content_settings |