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

Side by Side Diff: src/url_parse.cc

Issue 8974033: Fix the GURL change [compile error, two small changes to make things safe while (Closed) Base URL: http://google-url.googlecode.com/svn/trunk/
Patch Set: Created 8 years, 11 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 | Annotate | Revision Log
« no previous file with comments | « src/url_canon_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* Based on nsURLParsers.cc from Mozilla 1 /* Based on nsURLParsers.cc from Mozilla
2 * ------------------------------------- 2 * -------------------------------------
3 * The contents of this file are subject to the Mozilla Public License Version 3 * The contents of this file are subject to the Mozilla Public License Version
4 * 1.1 (the "License"); you may not use this file except in compliance with 4 * 1.1 (the "License"); you may not use this file except in compliance with
5 * the License. You may obtain a copy of the License at 5 * the License. You may obtain a copy of the License at
6 * http://www.mozilla.org/MPL/ 6 * http://www.mozilla.org/MPL/
7 * 7 *
8 * Software distributed under the License is distributed on an "AS IS" basis, 8 * Software distributed under the License is distributed on an "AS IS" basis,
9 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 9 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
10 * for the specific language governing rights and limitations under the 10 * for the specific language governing rights and limitations under the
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 full_path = Component(); 305 full_path = Component();
306 else // Everything starting from the slash to the end is the path. 306 else // Everything starting from the slash to the end is the path.
307 full_path = Component(end_auth, spec_len - end_auth); 307 full_path = Component(end_auth, spec_len - end_auth);
308 308
309 // Now parse those two sub-parts. 309 // Now parse those two sub-parts.
310 DoParseAuthority(spec, authority, &parsed->username, &parsed->password, 310 DoParseAuthority(spec, authority, &parsed->username, &parsed->password,
311 &parsed->host, &parsed->port); 311 &parsed->host, &parsed->port);
312 ParsePath(spec, full_path, &parsed->path, &parsed->query, &parsed->ref); 312 ParsePath(spec, full_path, &parsed->path, &parsed->query, &parsed->ref);
313 } 313 }
314 314
315 // The main parsing function for standard URLs. Standard URLs have a scheme,
316 // host, path, etc.
317 template<typename CHAR>
318 void DoParseStandardURL(const CHAR* spec, int spec_len, Parsed* parsed) {
319 DCHECK(spec_len >= 0);
320
321 // Strip leading & trailing spaces and control characters.
322 int begin = 0;
323 TrimURL(spec, &begin, &spec_len);
324
325 int after_scheme;
326 if (DoExtractScheme(spec, spec_len, &parsed->scheme)) {
327 after_scheme = parsed->scheme.end() + 1; // Skip past the colon.
328 } else {
329 // Say there's no scheme when there is no colon. We could also say that
330 // everything is the scheme. Both would produce an invalid URL, but this way
331 // seems less wrong in more cases.
332 parsed->scheme.reset();
333 after_scheme = begin;
334 }
335 DoParseAfterScheme(spec, spec_len, after_scheme, parsed);
336 }
337
315 template<typename CHAR> 338 template<typename CHAR>
316 void DoParseFileSystemURL(const CHAR* spec, int spec_len, Parsed* parsed) { 339 void DoParseFileSystemURL(const CHAR* spec, int spec_len, Parsed* parsed) {
317 DCHECK(spec_len >= 0); 340 DCHECK(spec_len >= 0);
318 341
319 // Get the unused parts of the URL out of the way. 342 // Get the unused parts of the URL out of the way.
320 parsed->username.reset(); 343 parsed->username.reset();
321 parsed->password.reset(); 344 parsed->password.reset();
322 parsed->host.reset(); 345 parsed->host.reset();
323 parsed->port.reset(); 346 parsed->port.reset();
324 parsed->path.reset(); // May use this; reset for convenience. 347 parsed->path.reset(); // May use this; reset for convenience.
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
421 int inner_path_end = inner_parsed.path.begin + 1; // skip the leading slash 444 int inner_path_end = inner_parsed.path.begin + 1; // skip the leading slash
422 while (inner_path_end < spec_len && 445 while (inner_path_end < spec_len &&
423 !IsURLSlash(spec[inner_path_end])) 446 !IsURLSlash(spec[inner_path_end]))
424 ++inner_path_end; 447 ++inner_path_end;
425 parsed->path.begin = inner_path_end; 448 parsed->path.begin = inner_path_end;
426 int new_inner_path_length = inner_path_end - inner_parsed.path.begin; 449 int new_inner_path_length = inner_path_end - inner_parsed.path.begin;
427 parsed->path.len = inner_parsed.path.len - new_inner_path_length; 450 parsed->path.len = inner_parsed.path.len - new_inner_path_length;
428 parsed->inner_parsed()->path.len = new_inner_path_length; 451 parsed->inner_parsed()->path.len = new_inner_path_length;
429 } 452 }
430 453
431 // The main parsing function for standard URLs. Standard URLs have a scheme,
432 // host, path, etc.
433 template<typename CHAR>
434 void DoParseStandardURL(const CHAR* spec, int spec_len, Parsed* parsed) {
435 DCHECK(spec_len >= 0);
436
437 // Strip leading & trailing spaces and control characters.
438 int begin = 0;
439 TrimURL(spec, &begin, &spec_len);
440
441 int after_scheme;
442 if (DoExtractScheme(spec, spec_len, &parsed->scheme)) {
443 after_scheme = parsed->scheme.end() + 1; // Skip past the colon.
444 } else {
445 // Say there's no scheme when there is no colon. We could also say that
446 // everything is the scheme. Both would produce an invalid URL, but this way
447 // seems less wrong in more cases.
448 parsed->scheme.reset();
449 after_scheme = begin;
450 }
451 DoParseAfterScheme(spec, spec_len, after_scheme, parsed);
452 }
453
454 // Initializes a path URL which is merely a scheme followed by a path. Examples 454 // Initializes a path URL which is merely a scheme followed by a path. Examples
455 // include "about:foo" and "javascript:alert('bar');" 455 // include "about:foo" and "javascript:alert('bar');"
456 template<typename CHAR> 456 template<typename CHAR>
457 void DoParsePathURL(const CHAR* spec, int spec_len, Parsed* parsed) { 457 void DoParsePathURL(const CHAR* spec, int spec_len, Parsed* parsed) {
458 // Get the non-path and non-scheme parts of the URL out of the way, we never 458 // Get the non-path and non-scheme parts of the URL out of the way, we never
459 // use them. 459 // use them.
460 parsed->username.reset(); 460 parsed->username.reset();
461 parsed->password.reset(); 461 parsed->password.reset();
462 parsed->host.reset(); 462 parsed->host.reset();
463 parsed->port.reset(); 463 parsed->port.reset();
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after
913 } 913 }
914 914
915 void ParseAfterScheme(const char16* spec, 915 void ParseAfterScheme(const char16* spec,
916 int spec_len, 916 int spec_len,
917 int after_scheme, 917 int after_scheme,
918 Parsed* parsed) { 918 Parsed* parsed) {
919 DoParseAfterScheme(spec, spec_len, after_scheme, parsed); 919 DoParseAfterScheme(spec, spec_len, after_scheme, parsed);
920 } 920 }
921 921
922 } // namespace url_parse 922 } // namespace url_parse
OLDNEW
« no previous file with comments | « src/url_canon_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698