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 #include "components/url_fixer/url_fixer.h" | 5 #include "components/url_fixer/url_fixer.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/files/file_path.h" | 9 #include "base/files/file_path.h" |
10 #include "base/files/file_util.h" | 10 #include "base/files/file_util.h" |
(...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
429 if (semicolon != 0 && semicolon != std::string::npos) { | 429 if (semicolon != 0 && semicolon != std::string::npos) { |
430 (*text)[semicolon] = ':'; | 430 (*text)[semicolon] = ':'; |
431 if (GetValidScheme(*text, &parts->scheme, &scheme)) | 431 if (GetValidScheme(*text, &parts->scheme, &scheme)) |
432 found_scheme = true; | 432 found_scheme = true; |
433 else | 433 else |
434 (*text)[semicolon] = ';'; | 434 (*text)[semicolon] = ';'; |
435 } | 435 } |
436 if (!found_scheme) { | 436 if (!found_scheme) { |
437 // Couldn't determine the scheme, so just pick one. | 437 // Couldn't determine the scheme, so just pick one. |
438 parts->scheme.reset(); | 438 parts->scheme.reset(); |
439 scheme = StartsWithASCII(*text, "ftp.", false) ? url::kFtpScheme | 439 scheme = base::StartsWithASCII(*text, "ftp.", false) ? url::kFtpScheme |
440 : url::kHttpScheme; | 440 : url::kHttpScheme; |
441 } | 441 } |
442 } | 442 } |
443 | 443 |
444 // Proceed with about and chrome schemes, but not file or nonstandard schemes. | 444 // Proceed with about and chrome schemes, but not file or nonstandard schemes. |
445 if ((scheme != url::kAboutScheme) && (scheme != kChromeUIScheme) && | 445 if ((scheme != url::kAboutScheme) && (scheme != kChromeUIScheme) && |
446 ((scheme == url::kFileScheme) || | 446 ((scheme == url::kFileScheme) || |
447 !url::IsStandard( | 447 !url::IsStandard( |
448 scheme.c_str(), | 448 scheme.c_str(), |
449 url::Component(0, static_cast<int>(scheme.length()))))) { | 449 url::Component(0, static_cast<int>(scheme.length()))))) { |
450 return scheme; | 450 return scheme; |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
520 | 520 |
521 // Segment the URL. | 521 // Segment the URL. |
522 url::Parsed parts; | 522 url::Parsed parts; |
523 std::string scheme(SegmentURLInternal(&trimmed, &parts)); | 523 std::string scheme(SegmentURLInternal(&trimmed, &parts)); |
524 | 524 |
525 // For view-source: URLs, we strip "view-source:", do fixup, and stick it back | 525 // For view-source: URLs, we strip "view-source:", do fixup, and stick it back |
526 // on. This allows us to handle things like "view-source:google.com". | 526 // on. This allows us to handle things like "view-source:google.com". |
527 if (scheme == kViewSourceScheme) { | 527 if (scheme == kViewSourceScheme) { |
528 // Reject "view-source:view-source:..." to avoid deep recursion. | 528 // Reject "view-source:view-source:..." to avoid deep recursion. |
529 std::string view_source(kViewSourceScheme + std::string(":")); | 529 std::string view_source(kViewSourceScheme + std::string(":")); |
530 if (!StartsWithASCII(text, view_source + view_source, false)) { | 530 if (!base::StartsWithASCII(text, view_source + view_source, false)) { |
531 return GURL(kViewSourceScheme + std::string(":") + | 531 return GURL(kViewSourceScheme + std::string(":") + |
532 FixupURL(trimmed.substr(scheme.length() + 1), desired_tld) | 532 FixupURL(trimmed.substr(scheme.length() + 1), desired_tld) |
533 .possibly_invalid_spec()); | 533 .possibly_invalid_spec()); |
534 } | 534 } |
535 } | 535 } |
536 | 536 |
537 // We handle the file scheme separately. | 537 // We handle the file scheme separately. |
538 if (scheme == url::kFileScheme) | 538 if (scheme == url::kFileScheme) |
539 return GURL(parts.scheme.is_valid() ? text : FixupPath(text)); | 539 return GURL(parts.scheme.is_valid() ? text : FixupPath(text)); |
540 | 540 |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
669 part->reset(); | 669 part->reset(); |
670 } | 670 } |
671 } | 671 } |
672 | 672 |
673 bool url_fixer::IsEquivalentScheme(const std::string& scheme1, | 673 bool url_fixer::IsEquivalentScheme(const std::string& scheme1, |
674 const std::string& scheme2) { | 674 const std::string& scheme2) { |
675 return scheme1 == scheme2 || | 675 return scheme1 == scheme2 || |
676 (scheme1 == url::kAboutScheme && scheme2 == kChromeUIScheme) || | 676 (scheme1 == url::kAboutScheme && scheme2 == kChromeUIScheme) || |
677 (scheme1 == kChromeUIScheme && scheme2 == url::kAboutScheme); | 677 (scheme1 == kChromeUIScheme && scheme2 == url::kAboutScheme); |
678 } | 678 } |
OLD | NEW |