OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Patterns used in content setting rules. | 5 // Patterns used in content setting rules. |
6 | 6 |
7 #ifndef CHROME_COMMON_CONTENT_SETTINGS_PATTERN_H_ | 7 #ifndef CHROME_COMMON_CONTENT_SETTINGS_PATTERN_H_ |
8 #define CHROME_COMMON_CONTENT_SETTINGS_PATTERN_H_ | 8 #define CHROME_COMMON_CONTENT_SETTINGS_PATTERN_H_ |
9 | 9 |
10 #include <ostream> | 10 #include <ostream> |
11 #include <string> | 11 #include <string> |
12 | 12 |
13 #include "base/basictypes.h" | 13 #include "base/basictypes.h" |
14 #include "base/compiler_specific.h" | |
15 #include "base/gtest_prod_util.h" | 14 #include "base/gtest_prod_util.h" |
16 | 15 |
17 class GURL; | 16 class GURL; |
18 class Pickle; | |
19 class PickleIterator; | 17 class PickleIterator; |
20 | 18 |
21 namespace content_settings { | 19 namespace content_settings { |
22 class PatternParser; | 20 class PatternParser; |
23 } | 21 } |
24 | 22 |
25 namespace IPC { | 23 namespace IPC { |
26 class Message; | 24 class Message; |
27 } | 25 } |
28 | 26 |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
124 // Returns a content settings pattern according to the current configuration | 122 // Returns a content settings pattern according to the current configuration |
125 // of the builder. | 123 // of the builder. |
126 virtual ContentSettingsPattern Build() = 0; | 124 virtual ContentSettingsPattern Build() = 0; |
127 }; | 125 }; |
128 | 126 |
129 static BuilderInterface* CreateBuilder(bool use_legacy_validate); | 127 static BuilderInterface* CreateBuilder(bool use_legacy_validate); |
130 | 128 |
131 // The version of the pattern format implemented. | 129 // The version of the pattern format implemented. |
132 static const int kContentSettingsPatternVersion; | 130 static const int kContentSettingsPatternVersion; |
133 | 131 |
134 // The format of a domain wildcard. | |
135 static const char* kDomainWildcard; | |
136 | |
137 // The length of kDomainWildcard (without the trailing '\0'). | |
138 static const size_t kDomainWildcardLength; | |
139 | |
140 // Returns a wildcard content settings pattern that matches all possible valid | 132 // Returns a wildcard content settings pattern that matches all possible valid |
141 // origins. | 133 // origins. |
142 static ContentSettingsPattern Wildcard(); | 134 static ContentSettingsPattern Wildcard(); |
143 | 135 |
144 // Returns a pattern that matches the scheme and host of this URL, as well as | 136 // Returns a pattern that matches the scheme and host of this URL, as well as |
145 // all subdomains and ports. | 137 // all subdomains and ports. |
146 static ContentSettingsPattern FromURL(const GURL& url); | 138 static ContentSettingsPattern FromURL(const GURL& url); |
147 | 139 |
148 // Returns a pattern that matches exactly this URL. | 140 // Returns a pattern that matches exactly this URL. |
149 static ContentSettingsPattern FromURLNoWildcard(const GURL& url); | 141 static ContentSettingsPattern FromURLNoWildcard(const GURL& url); |
150 | 142 |
151 // Returns a pattern that matches the given pattern specification. | 143 // Returns a pattern that matches the given pattern specification. |
152 // Valid patterns specifications are: | 144 // Valid patterns specifications are: |
153 // - [*.]domain.tld (matches domain.tld and all sub-domains) | 145 // - [*.]domain.tld (matches domain.tld and all sub-domains) |
154 // - host (matches an exact hostname) | 146 // - host (matches an exact hostname) |
155 // - scheme://host:port (supported schemes: http,https) | 147 // - scheme://host:port (supported schemes: http,https) |
156 // - scheme://[*.]domain.tld:port (supported schemes: http,https) | 148 // - scheme://[*.]domain.tld:port (supported schemes: http,https) |
157 // - file://path (The path has to be an absolute path and start with a '/') | 149 // - file://path (The path has to be an absolute path and start with a '/') |
158 // - a.b.c.d (matches an exact IPv4 ip) | 150 // - a.b.c.d (matches an exact IPv4 ip) |
159 // - [a:b:c:d:e:f:g:h] (matches an exact IPv6 ip) | 151 // - [a:b:c:d:e:f:g:h] (matches an exact IPv6 ip) |
160 static ContentSettingsPattern FromString(const std::string& pattern_spec); | 152 static ContentSettingsPattern FromString( |
161 | 153 const char* extension_scheme, |
Bernhard Bauer
2014/08/11 14:06:44
You still have the notion of an extension scheme i
vasilii
2014/08/11 16:37:47
Vaclav's proposal was to hardcode the constant in
Bernhard Bauer
2014/08/11 16:47:15
There are two things I don't like here: One is the
| |
162 static ContentSettingsPattern LegacyFromString( | |
163 const std::string& pattern_spec); | 154 const std::string& pattern_spec); |
164 | 155 |
165 // Constructs an empty pattern. Empty patterns are invalid patterns. Invalid | 156 // Constructs an empty pattern. Empty patterns are invalid patterns. Invalid |
166 // patterns match nothing. | 157 // patterns match nothing. |
167 ContentSettingsPattern(); | 158 ContentSettingsPattern(); |
168 | 159 |
169 // Serializes the pattern to an IPC message or deserializes it. | 160 // Serializes the pattern to an IPC message or deserializes it. |
170 void WriteToMessage(IPC::Message* m) const; | 161 void WriteToMessage(IPC::Message* m) const; |
171 bool ReadFromMessage(const IPC::Message* m, PickleIterator* iter); | 162 bool ReadFromMessage(const IPC::Message* m, PickleIterator* iter); |
172 | 163 |
173 // True if this is a valid pattern. | 164 // True if this is a valid pattern. |
174 bool IsValid() const { return is_valid_; } | 165 bool IsValid() const { return is_valid_; } |
175 | 166 |
176 // True if |url| matches this pattern. | 167 // True if |url| matches this pattern. |
177 bool Matches(const GURL& url) const; | 168 bool Matches(const GURL& url) const; |
178 | 169 |
179 // True if this pattern matches all hosts (i.e. it has a host wildcard). | 170 // True if this pattern matches all hosts (i.e. it has a host wildcard). |
180 bool MatchesAllHosts() const; | 171 bool MatchesAllHosts() const; |
181 | 172 |
182 // Returns a std::string representation of this pattern. | 173 // Returns a std::string representation of this pattern. |
183 const std::string ToString() const; | 174 std::string ToString(const char* extension_scheme) const; |
184 | 175 |
185 // Compares the pattern with a given |other| pattern and returns the | 176 // Compares the pattern with a given |other| pattern and returns the |
186 // |Relation| of the two patterns. | 177 // |Relation| of the two patterns. |
187 Relation Compare(const ContentSettingsPattern& other) const; | 178 Relation Compare(const ContentSettingsPattern& other) const; |
188 | 179 |
189 // Returns true if the pattern and the |other| pattern are identical. | 180 // Returns true if the pattern and the |other| pattern are identical. |
190 bool operator==(const ContentSettingsPattern& other) const; | 181 bool operator==(const ContentSettingsPattern& other) const; |
191 | 182 |
192 // Returns true if the pattern and the |other| pattern are not identical. | 183 // Returns true if the pattern and the |other| pattern are not identical. |
193 bool operator!=(const ContentSettingsPattern& other) const; | 184 bool operator!=(const ContentSettingsPattern& other) const; |
194 | 185 |
195 // Returns true if the pattern has a lower priority than the |other| pattern. | 186 // Returns true if the pattern has a lower priority than the |other| pattern. |
196 bool operator<(const ContentSettingsPattern& other) const; | 187 bool operator<(const ContentSettingsPattern& other) const; |
197 | 188 |
198 // Returns true if the pattern has a higher priority than the |other| pattern. | 189 // Returns true if the pattern has a higher priority than the |other| pattern. |
199 bool operator>(const ContentSettingsPattern& other) const; | 190 bool operator>(const ContentSettingsPattern& other) const; |
200 | 191 |
201 private: | 192 private: |
202 friend class content_settings::PatternParser; | 193 friend class content_settings::PatternParser; |
203 friend class Builder; | |
204 FRIEND_TEST_ALL_PREFIXES(ContentSettingsPatternParserTest, SerializePatterns); | 194 FRIEND_TEST_ALL_PREFIXES(ContentSettingsPatternParserTest, SerializePatterns); |
205 | 195 |
206 class Builder : public BuilderInterface { | 196 class Builder; |
207 public: | |
208 explicit Builder(bool use_legacy_validate); | |
209 virtual ~Builder(); | |
210 | |
211 // Overrides BuilderInterface | |
212 virtual BuilderInterface* WithPort(const std::string& port) OVERRIDE; | |
213 | |
214 virtual BuilderInterface* WithPortWildcard() OVERRIDE; | |
215 | |
216 virtual BuilderInterface* WithHost(const std::string& host) OVERRIDE; | |
217 | |
218 virtual BuilderInterface* WithDomainWildcard() OVERRIDE; | |
219 | |
220 virtual BuilderInterface* WithScheme(const std::string& scheme) OVERRIDE; | |
221 | |
222 virtual BuilderInterface* WithSchemeWildcard() OVERRIDE; | |
223 | |
224 virtual BuilderInterface* WithPath(const std::string& path) OVERRIDE; | |
225 | |
226 virtual BuilderInterface* WithPathWildcard() OVERRIDE; | |
227 | |
228 virtual BuilderInterface* Invalid() OVERRIDE; | |
229 | |
230 virtual ContentSettingsPattern Build() OVERRIDE; | |
231 | |
232 private: | |
233 // Canonicalizes the pattern parts so that they are ASCII only, either | |
234 // in original (if it was already ASCII) or punycode form. Returns true if | |
235 // the canonicalization was successful. | |
236 static bool Canonicalize(PatternParts* parts); | |
237 | |
238 // Returns true when the pattern |parts| represent a valid pattern. | |
239 static bool Validate(const PatternParts& parts); | |
240 | |
241 static bool LegacyValidate(const PatternParts& parts); | |
242 | |
243 bool is_valid_; | |
244 | |
245 bool use_legacy_validate_; | |
246 | |
247 PatternParts parts_; | |
248 | |
249 DISALLOW_COPY_AND_ASSIGN(Builder); | |
250 }; | |
251 | 197 |
252 static Relation CompareScheme( | 198 static Relation CompareScheme( |
253 const ContentSettingsPattern::PatternParts& parts, | 199 const ContentSettingsPattern::PatternParts& parts, |
254 const ContentSettingsPattern::PatternParts& other_parts); | 200 const ContentSettingsPattern::PatternParts& other_parts); |
255 | 201 |
256 static Relation CompareHost( | 202 static Relation CompareHost( |
257 const ContentSettingsPattern::PatternParts& parts, | 203 const ContentSettingsPattern::PatternParts& parts, |
258 const ContentSettingsPattern::PatternParts& other_parts); | 204 const ContentSettingsPattern::PatternParts& other_parts); |
259 | 205 |
260 static Relation ComparePort( | 206 static Relation ComparePort( |
261 const ContentSettingsPattern::PatternParts& parts, | 207 const ContentSettingsPattern::PatternParts& parts, |
262 const ContentSettingsPattern::PatternParts& other_parts); | 208 const ContentSettingsPattern::PatternParts& other_parts); |
263 | 209 |
264 static bool Validate(const PatternParts& parts); | 210 static bool Validate(const PatternParts& parts); |
265 | 211 |
266 ContentSettingsPattern(const PatternParts& parts, bool valid); | 212 ContentSettingsPattern(const PatternParts& parts, bool valid); |
267 | 213 |
268 PatternParts parts_; | 214 PatternParts parts_; |
269 | 215 |
270 bool is_valid_; | 216 bool is_valid_; |
271 }; | 217 }; |
272 | 218 |
273 // Stream operator so ContentSettingsPattern can be used in assertion | |
274 // statements. | |
275 inline std::ostream& operator<<( | |
276 std::ostream& out, const ContentSettingsPattern& pattern) { | |
277 return out << pattern.ToString(); | |
278 } | |
279 | |
280 #endif // CHROME_COMMON_CONTENT_SETTINGS_PATTERN_H_ | 219 #endif // CHROME_COMMON_CONTENT_SETTINGS_PATTERN_H_ |
OLD | NEW |