• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 // Patterns used in content setting rules.
6 
7 #ifndef CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_PATTERN_H_
8 #define CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_PATTERN_H_
9 #pragma once
10 
11 #include <ostream>
12 #include <string>
13 
14 class GURL;
15 
16 // A pattern used in content setting rules. See |IsValid| for a description of
17 // possible patterns.
18 class ContentSettingsPattern {
19  public:
20   // Returns a pattern that matches the host of this URL and all subdomains.
21   static ContentSettingsPattern FromURL(const GURL& url);
22 
23   // Returns a pattern that matches exactly this URL.
24   static ContentSettingsPattern FromURLNoWildcard(const GURL& url);
25 
ContentSettingsPattern()26   ContentSettingsPattern() {}
27 
ContentSettingsPattern(const std::string & pattern)28   explicit ContentSettingsPattern(const std::string& pattern)
29       : pattern_(pattern),
30         scheme_("") {}
31 
32   // True if this is a valid pattern. Valid patterns are
33   //   - [*.]domain.tld (matches domain.tld and all sub-domains)
34   //   - host (matches an exact hostname)
35   //   - a.b.c.d (matches an exact IPv4 ip)
36   //   - [a:b:c:d:e:f:g:h] (matches an exact IPv6 ip)
37   // TODO(jochen): should also return true for a complete URL without a host.
38   bool IsValid() const;
39 
40   // True if |url| matches this pattern.
41   bool Matches(const GURL& url) const;
42 
43   // Returns a std::string representation of this pattern.
AsString()44   const std::string& AsString() const { return pattern_; }
45 
46   bool operator==(const ContentSettingsPattern& other) const {
47     return pattern_ == other.pattern_;
48   }
49 
50   // Canonicalizes the pattern so that it's ASCII only, either
51   // in original (if it was already ASCII) or punycode form.
52   std::string CanonicalizePattern() const;
53 
scheme()54   std::string scheme() const {
55     return scheme_;
56   }
57 
58   // The version of the pattern format implemented.
59   static const int kContentSettingsPatternVersion;
60 
61   // The format of a domain wildcard.
62   static const char* kDomainWildcard;
63 
64   // The length of kDomainWildcard (without the trailing '\0').
65   static const size_t kDomainWildcardLength;
66 
67  private:
68   // TODO(markusheintz): This constructor is only here to fix bug 76693. Further
69   // refactoring pending to fully integrate scheme support in content settings
70   // patterns.
ContentSettingsPattern(const std::string & host,const std::string & scheme)71   ContentSettingsPattern(const std::string& host, const std::string& scheme)
72       : pattern_(host),
73         scheme_(scheme) {}
74 
75   std::string pattern_;
76 
77   // TODO(markusheintz): This is only here to fix bug 76693. There is more work
78   // to do to add scheme support to content-settings patterns.
79   // TODO(markusheintz): canonicalize to lowercase;
80   std::string scheme_;
81 };
82 
83 // Stream operator so ContentSettingsPattern can be used in assertion
84 // statements.
85 inline std::ostream& operator<<(
86     std::ostream& out, const ContentSettingsPattern& pattern) {
87   return out << pattern.AsString();
88 }
89 
90 #endif  // CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_PATTERN_H_
91