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

Side by Side Diff: chrome/common/content_settings_pattern.h

Issue 518803009: Move content_settings_pattern and content_settings_pattern_parser to the content_settings component. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 6 years, 3 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 unified diff | Download patch
« no previous file with comments | « chrome/common/content_settings.h ('k') | chrome/common/content_settings_pattern.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2012 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_COMMON_CONTENT_SETTINGS_PATTERN_H_
8 #define CHROME_COMMON_CONTENT_SETTINGS_PATTERN_H_
9
10 #include <string>
11
12 #include "base/gtest_prod_util.h"
13
14 class GURL;
15
16 namespace content_settings {
17 class PatternParser;
18 }
19
20 // A pattern used in content setting rules. See |IsValid| for a description of
21 // possible patterns.
22 class ContentSettingsPattern {
23 public:
24 // Each content settings pattern describes a set of origins. Patterns, and the
25 // sets they describe, have specific relations. |Relation| describes the
26 // relation of two patterns A and B. When pattern A is compared with pattern B
27 // (A compare B) interesting relations are:
28 // - IDENTITY:
29 // Pattern A and B are identical. The patterns are equal.
30 //
31 // - DISJOINT_ORDER_PRE:
32 // Pattern A and B have no intersection. A and B never match the origin of
33 // a URL at the same time. But pattern A has a higher precedence than
34 // pattern B when patterns are sorted.
35 //
36 // - DISJOINT_ORDER_POST:
37 // Pattern A and B have no intersection. A and B never match the origin of
38 // a URL at the same time. But pattern A has a lower precedence than
39 // pattern B when patterns are sorted.
40 //
41 // - SUCCESSOR:
42 // Pattern A and B have an intersection. But pattern B has a higher
43 // precedence than pattern A for URLs that are matched by both pattern.
44 //
45 // - PREDECESSOR:
46 // Pattern A and B have an intersection. But pattern A has a higher
47 // precedence than pattern B for URLs that are matched by both pattern.
48 enum Relation {
49 DISJOINT_ORDER_POST = -2,
50 SUCCESSOR = -1,
51 IDENTITY = 0,
52 PREDECESSOR = 1,
53 DISJOINT_ORDER_PRE = 2,
54 };
55
56 struct PatternParts {
57 PatternParts();
58 ~PatternParts();
59
60 // Lowercase string of the URL scheme to match. This string is empty if the
61 // |is_scheme_wildcard| flag is set.
62 std::string scheme;
63
64 // True if the scheme wildcard is set.
65 bool is_scheme_wildcard;
66
67 // Normalized string that is either of the following:
68 // - IPv4 or IPv6
69 // - hostname
70 // - domain
71 // - empty string if the |is_host_wildcard flag is set.
72 std::string host;
73
74 // True if the domain wildcard is set.
75 bool has_domain_wildcard;
76
77 // String with the port to match. This string is empty if the
78 // |is_port_wildcard| flag is set.
79 std::string port;
80
81 // True if the port wildcard is set.
82 bool is_port_wildcard;
83
84 // TODO(markusheintz): Needed for legacy reasons. Remove. Path
85 // specification. Only used for content settings pattern with a "file"
86 // scheme part.
87 std::string path;
88
89 // True if the path wildcard is set.
90 bool is_path_wildcard;
91 };
92
93 class BuilderInterface {
94 public:
95 virtual ~BuilderInterface() {}
96
97 virtual BuilderInterface* WithPort(const std::string& port) = 0;
98
99 virtual BuilderInterface* WithPortWildcard() = 0;
100
101 virtual BuilderInterface* WithHost(const std::string& host) = 0;
102
103 virtual BuilderInterface* WithDomainWildcard() = 0;
104
105 virtual BuilderInterface* WithScheme(const std::string& scheme) = 0;
106
107 virtual BuilderInterface* WithSchemeWildcard() = 0;
108
109 virtual BuilderInterface* WithPath(const std::string& path) = 0;
110
111 virtual BuilderInterface* WithPathWildcard() = 0;
112
113 virtual BuilderInterface* Invalid() = 0;
114
115 // Returns a content settings pattern according to the current configuration
116 // of the builder.
117 virtual ContentSettingsPattern Build() = 0;
118 };
119
120 static BuilderInterface* CreateBuilder(bool use_legacy_validate);
121
122 // The version of the pattern format implemented.
123 static const int kContentSettingsPatternVersion;
124
125 // Returns a wildcard content settings pattern that matches all possible valid
126 // origins.
127 static ContentSettingsPattern Wildcard();
128
129 // Returns a pattern that matches the scheme and host of this URL, as well as
130 // all subdomains and ports.
131 static ContentSettingsPattern FromURL(const GURL& url);
132
133 // Returns a pattern that matches exactly this URL.
134 static ContentSettingsPattern FromURLNoWildcard(const GURL& url);
135
136 // Returns a pattern that matches the given pattern specification.
137 // Valid patterns specifications are:
138 // - [*.]domain.tld (matches domain.tld and all sub-domains)
139 // - host (matches an exact hostname)
140 // - scheme://host:port (supported schemes: http,https)
141 // - scheme://[*.]domain.tld:port (supported schemes: http,https)
142 // - file://path (The path has to be an absolute path and start with a '/')
143 // - a.b.c.d (matches an exact IPv4 ip)
144 // - [a:b:c:d:e:f:g:h] (matches an exact IPv6 ip)
145 static ContentSettingsPattern FromString(const std::string& pattern_spec);
146
147 // Sets the scheme that doesn't support domain wildcard and port.
148 // Needs to be called by the embedder before using ContentSettingsPattern.
149 // |scheme| can't be NULL, and the pointed string must remain alive until the
150 // app terminates.
151 static void SetNonWildcardDomainNonPortScheme(const char* scheme);
152
153 // Compares |scheme| against the scheme set by the embedder.
154 static bool IsNonWildcardDomainNonPortScheme(const std::string& scheme);
155
156 // Constructs an empty pattern. Empty patterns are invalid patterns. Invalid
157 // patterns match nothing.
158 ContentSettingsPattern();
159
160 // True if this is a valid pattern.
161 bool IsValid() const { return is_valid_; }
162
163 // True if |url| matches this pattern.
164 bool Matches(const GURL& url) const;
165
166 // True if this pattern matches all hosts (i.e. it has a host wildcard).
167 bool MatchesAllHosts() const;
168
169 // Returns a std::string representation of this pattern.
170 std::string ToString() const;
171
172 // Compares the pattern with a given |other| pattern and returns the
173 // |Relation| of the two patterns.
174 Relation Compare(const ContentSettingsPattern& other) const;
175
176 // Returns true if the pattern and the |other| pattern are identical.
177 bool operator==(const ContentSettingsPattern& other) const;
178
179 // Returns true if the pattern and the |other| pattern are not identical.
180 bool operator!=(const ContentSettingsPattern& other) const;
181
182 // Returns true if the pattern has a lower priority than the |other| pattern.
183 bool operator<(const ContentSettingsPattern& other) const;
184
185 // Returns true if the pattern has a higher priority than the |other| pattern.
186 bool operator>(const ContentSettingsPattern& other) const;
187
188 private:
189 friend class content_settings::PatternParser;
190 friend class ContentSettingsPatternSerializer;
191 FRIEND_TEST_ALL_PREFIXES(ContentSettingsPatternParserTest, SerializePatterns);
192
193 class Builder;
194
195 static Relation CompareScheme(
196 const ContentSettingsPattern::PatternParts& parts,
197 const ContentSettingsPattern::PatternParts& other_parts);
198
199 static Relation CompareHost(
200 const ContentSettingsPattern::PatternParts& parts,
201 const ContentSettingsPattern::PatternParts& other_parts);
202
203 static Relation ComparePort(
204 const ContentSettingsPattern::PatternParts& parts,
205 const ContentSettingsPattern::PatternParts& other_parts);
206
207 ContentSettingsPattern(const PatternParts& parts, bool valid);
208
209 PatternParts parts_;
210
211 bool is_valid_;
212 };
213
214 #endif // CHROME_COMMON_CONTENT_SETTINGS_PATTERN_H_
OLDNEW
« no previous file with comments | « chrome/common/content_settings.h ('k') | chrome/common/content_settings_pattern.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698