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

Side by Side Diff: chrome/common/extensions/url_pattern.cc

Issue 8885022: Move URLPattern::ParseOption into a field. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: more minor sprucing Created 9 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 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 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 #include "chrome/common/extensions/url_pattern.h" 5 #include "chrome/common/extensions/url_pattern.h"
6 6
7 #include "base/string_number_conversions.h" 7 #include "base/string_number_conversions.h"
8 #include "base/string_piece.h" 8 #include "base/string_piece.h"
9 #include "base/string_split.h" 9 #include "base/string_split.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 91
92 int parsed_port = url_parse::PORT_UNSPECIFIED; 92 int parsed_port = url_parse::PORT_UNSPECIFIED;
93 if (!base::StringToInt(port, &parsed_port)) 93 if (!base::StringToInt(port, &parsed_port))
94 return false; 94 return false;
95 return (parsed_port >= 0) && (parsed_port < 65536); 95 return (parsed_port >= 0) && (parsed_port < 65536);
96 } 96 }
97 97
98 } // namespace 98 } // namespace
99 99
100 URLPattern::URLPattern() 100 URLPattern::URLPattern()
101 : valid_schemes_(SCHEME_NONE), 101 : parse_option_(ERROR_ON_PORTS),
102 valid_schemes_(SCHEME_NONE),
102 match_all_urls_(false), 103 match_all_urls_(false),
103 match_subdomains_(false), 104 match_subdomains_(false),
104 port_("*") {} 105 port_("*") {}
105 106
106 URLPattern::URLPattern(int valid_schemes) 107 URLPattern::URLPattern(URLPattern::ParseOption parse_option, int valid_schemes)
107 : valid_schemes_(valid_schemes), 108 : parse_option_(parse_option),
109 valid_schemes_(valid_schemes),
108 match_all_urls_(false), 110 match_all_urls_(false),
109 match_subdomains_(false), 111 match_subdomains_(false),
110 port_("*") {} 112 port_("*") {}
111 113
112 URLPattern::URLPattern(int valid_schemes, const std::string& pattern) 114 URLPattern::URLPattern(int valid_schemes, const std::string& pattern)
113 : valid_schemes_(valid_schemes), 115 // Strict error checking is used, because this constructor is only
116 // appropriate when we know |pattern| is valid.
117 : parse_option_(ERROR_ON_PORTS),
118 valid_schemes_(valid_schemes),
114 match_all_urls_(false), 119 match_all_urls_(false),
115 match_subdomains_(false), 120 match_subdomains_(false),
116 port_("*") { 121 port_("*") {
117 122 if (PARSE_SUCCESS != Parse(pattern))
118 // Strict error checking is used, because this constructor is only
119 // appropriate when we know |pattern| is valid.
120 if (PARSE_SUCCESS != Parse(pattern, ERROR_ON_PORTS))
121 NOTREACHED() << "URLPattern is invalid: " << pattern; 123 NOTREACHED() << "URLPattern is invalid: " << pattern;
122 } 124 }
123 125
124 URLPattern::~URLPattern() { 126 URLPattern::~URLPattern() {
125 } 127 }
126 128
127 bool URLPattern::operator<(const URLPattern& other) const { 129 bool URLPattern::operator<(const URLPattern& other) const {
128 return GetAsString() < other.GetAsString(); 130 return GetAsString() < other.GetAsString();
129 } 131 }
130 132
131 bool URLPattern::operator==(const URLPattern& other) const { 133 bool URLPattern::operator==(const URLPattern& other) const {
132 return GetAsString() == other.GetAsString(); 134 return GetAsString() == other.GetAsString();
133 } 135 }
134 136
135 URLPattern::ParseResult URLPattern::Parse(const std::string& pattern, 137 URLPattern::ParseResult URLPattern::Parse(const std::string& pattern) {
136 ParseOption strictness) {
137 spec_.clear(); 138 spec_.clear();
138 139
139 // Special case pattern to match every valid URL. 140 // Special case pattern to match every valid URL.
140 if (pattern == kAllUrlsPattern) { 141 if (pattern == kAllUrlsPattern) {
141 SetMatchAllURLs(true); 142 SetMatchAllURLs(true);
142 return PARSE_SUCCESS; 143 return PARSE_SUCCESS;
143 } 144 }
144 145
145 // Parse out the scheme. 146 // Parse out the scheme.
146 size_t scheme_end_pos = pattern.find(chrome::kStandardSchemeSeparator); 147 size_t scheme_end_pos = pattern.find(chrome::kStandardSchemeSeparator);
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 } 209 }
209 host_ = JoinString(host_components, '.'); 210 host_ = JoinString(host_components, '.');
210 211
211 path_start_pos = host_end_pos; 212 path_start_pos = host_end_pos;
212 } 213 }
213 214
214 SetPath(pattern.substr(path_start_pos)); 215 SetPath(pattern.substr(path_start_pos));
215 216
216 size_t port_pos = host_.find(':'); 217 size_t port_pos = host_.find(':');
217 if (port_pos != std::string::npos) { 218 if (port_pos != std::string::npos) {
218 switch (strictness) { 219 switch (parse_option_) {
219 case USE_PORTS: { 220 case USE_PORTS: {
220 if (!SetPort(host_.substr(port_pos + 1))) 221 if (!SetPort(host_.substr(port_pos + 1)))
221 return PARSE_ERROR_INVALID_PORT; 222 return PARSE_ERROR_INVALID_PORT;
222 host_ = host_.substr(0, port_pos); 223 host_ = host_.substr(0, port_pos);
223 break; 224 break;
224 } 225 }
225 case ERROR_ON_PORTS: { 226 case ERROR_ON_PORTS: {
226 return PARSE_ERROR_HAS_COLON; 227 return PARSE_ERROR_HAS_COLON;
227 } 228 }
228 case IGNORE_PORTS: { 229 case IGNORE_PORTS: {
229 // Do nothing, i.e. leave the colon in the host. 230 // Do nothing, i.e. leave the colon in the host.
230 } 231 }
231 } 232 }
232 } 233 }
233 234
234 // No other '*' can occur in the host, though. This isn't necessary, but is 235 // No other '*' can occur in the host, though. This isn't necessary, but is
235 // done as a convenience to developers who might otherwise be confused and 236 // done as a convenience to developers who might otherwise be confused and
236 // think '*' works as a glob in the host. 237 // think '*' works as a glob in the host.
237 if (host_.find('*') != std::string::npos) 238 if (host_.find('*') != std::string::npos)
238 return PARSE_ERROR_INVALID_HOST_WILDCARD; 239 return PARSE_ERROR_INVALID_HOST_WILDCARD;
239 240
240 return PARSE_SUCCESS; 241 return PARSE_SUCCESS;
241 } 242 }
242 243
243 void URLPattern::SetValidSchemes(int valid_schemes) { 244 void URLPattern::SetValidSchemes(int valid_schemes) {
244 spec_.clear(); 245 spec_.clear();
245 valid_schemes_ = valid_schemes; 246 valid_schemes_ = valid_schemes;
246 } 247 }
247 248
249 void URLPattern::SetParseOption(URLPattern::ParseOption parse_option) {
250 spec_.clear();
251 parse_option_ = parse_option;
252 }
253
248 void URLPattern::SetHost(const std::string& host) { 254 void URLPattern::SetHost(const std::string& host) {
249 spec_.clear(); 255 spec_.clear();
250 host_ = host; 256 host_ = host;
251 } 257 }
252 258
253 void URLPattern::SetMatchAllURLs(bool val) { 259 void URLPattern::SetMatchAllURLs(bool val) {
254 spec_.clear(); 260 spec_.clear();
255 match_all_urls_ = val; 261 match_all_urls_ = val;
256 262
257 if (val) { 263 if (val) {
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 } 511 }
506 512
507 return result; 513 return result;
508 } 514 }
509 515
510 // static 516 // static
511 const char* URLPattern::GetParseResultString( 517 const char* URLPattern::GetParseResultString(
512 URLPattern::ParseResult parse_result) { 518 URLPattern::ParseResult parse_result) {
513 return kParseResultMessages[parse_result]; 519 return kParseResultMessages[parse_result];
514 } 520 }
OLDNEW
« no previous file with comments | « chrome/common/extensions/url_pattern.h ('k') | chrome/common/extensions/url_pattern_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698