| 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 "net/base/net_util.h" | 5 #include "net/base/net_util.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/i18n/time_formatting.h" | 10 #include "base/i18n/time_formatting.h" |
| (...skipping 661 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 672 new_parsed = &parsed_temp; | 672 new_parsed = &parsed_temp; |
| 673 else | 673 else |
| 674 *new_parsed = url::Parsed(); | 674 *new_parsed = url::Parsed(); |
| 675 | 675 |
| 676 // Special handling for view-source:. Don't use content::kViewSourceScheme | 676 // Special handling for view-source:. Don't use content::kViewSourceScheme |
| 677 // because this library shouldn't depend on chrome. | 677 // because this library shouldn't depend on chrome. |
| 678 const char kViewSource[] = "view-source"; | 678 const char kViewSource[] = "view-source"; |
| 679 // Reject "view-source:view-source:..." to avoid deep recursion. | 679 // Reject "view-source:view-source:..." to avoid deep recursion. |
| 680 const char kViewSourceTwice[] = "view-source:view-source:"; | 680 const char kViewSourceTwice[] = "view-source:view-source:"; |
| 681 if (url.SchemeIs(kViewSource) && | 681 if (url.SchemeIs(kViewSource) && |
| 682 !base::StartsWithASCII(url.possibly_invalid_spec(), kViewSourceTwice, | 682 !base::StartsWith(url.possibly_invalid_spec(), kViewSourceTwice, |
| 683 false)) { | 683 base::CompareCase::INSENSITIVE_ASCII)) { |
| 684 return FormatViewSourceUrl(url, languages, format_types, | 684 return FormatViewSourceUrl(url, languages, format_types, |
| 685 unescape_rules, new_parsed, prefix_end, | 685 unescape_rules, new_parsed, prefix_end, |
| 686 adjustments); | 686 adjustments); |
| 687 } | 687 } |
| 688 | 688 |
| 689 // We handle both valid and invalid URLs (this will give us the spec | 689 // We handle both valid and invalid URLs (this will give us the spec |
| 690 // regardless of validity). | 690 // regardless of validity). |
| 691 const std::string& spec = url.possibly_invalid_spec(); | 691 const std::string& spec = url.possibly_invalid_spec(); |
| 692 const url::Parsed& parsed = url.parsed_for_possibly_invalid_spec(); | 692 const url::Parsed& parsed = url.parsed_for_possibly_invalid_spec(); |
| 693 | 693 |
| 694 // Scheme & separators. These are ASCII. | 694 // Scheme & separators. These are ASCII. |
| 695 base::string16 url_string; | 695 base::string16 url_string; |
| 696 url_string.insert( | 696 url_string.insert( |
| 697 url_string.end(), spec.begin(), | 697 url_string.end(), spec.begin(), |
| 698 spec.begin() + parsed.CountCharactersBefore(url::Parsed::USERNAME, true)); | 698 spec.begin() + parsed.CountCharactersBefore(url::Parsed::USERNAME, true)); |
| 699 const char kHTTP[] = "http://"; | 699 const char kHTTP[] = "http://"; |
| 700 const char kFTP[] = "ftp."; | 700 const char kFTP[] = "ftp."; |
| 701 // url_fixer::FixupURL() treats "ftp.foo.com" as ftp://ftp.foo.com. This | 701 // url_fixer::FixupURL() treats "ftp.foo.com" as ftp://ftp.foo.com. This |
| 702 // means that if we trim "http://" off a URL whose host starts with "ftp." and | 702 // means that if we trim "http://" off a URL whose host starts with "ftp." and |
| 703 // the user inputs this into any field subject to fixup (which is basically | 703 // the user inputs this into any field subject to fixup (which is basically |
| 704 // all input fields), the meaning would be changed. (In fact, often the | 704 // all input fields), the meaning would be changed. (In fact, often the |
| 705 // formatted URL is directly pre-filled into an input field.) For this reason | 705 // formatted URL is directly pre-filled into an input field.) For this reason |
| 706 // we avoid stripping "http://" in this case. | 706 // we avoid stripping "http://" in this case. |
| 707 bool omit_http = (format_types & kFormatUrlOmitHTTP) && | 707 bool omit_http = |
| 708 base::EqualsASCII(url_string, kHTTP) && | 708 (format_types & kFormatUrlOmitHTTP) && |
| 709 !base::StartsWithASCII(url.host(), kFTP, true); | 709 base::EqualsASCII(url_string, kHTTP) && |
| 710 !base::StartsWith(url.host(), kFTP, base::CompareCase::SENSITIVE); |
| 710 new_parsed->scheme = parsed.scheme; | 711 new_parsed->scheme = parsed.scheme; |
| 711 | 712 |
| 712 // Username & password. | 713 // Username & password. |
| 713 if ((format_types & kFormatUrlOmitUsernamePassword) != 0) { | 714 if ((format_types & kFormatUrlOmitUsernamePassword) != 0) { |
| 714 // Remove the username and password fields. We don't want to display those | 715 // Remove the username and password fields. We don't want to display those |
| 715 // to the user since they can be used for attacks, | 716 // to the user since they can be used for attacks, |
| 716 // e.g. "http://google.com:search@evil.ru/" | 717 // e.g. "http://google.com:search@evil.ru/" |
| 717 new_parsed->username.reset(); | 718 new_parsed->username.reset(); |
| 718 new_parsed->password.reset(); | 719 new_parsed->password.reset(); |
| 719 // Update the adjustments based on removed username and/or password. | 720 // Update the adjustments based on removed username and/or password. |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 829 if (offset_for_adjustment) | 830 if (offset_for_adjustment) |
| 830 offsets.push_back(*offset_for_adjustment); | 831 offsets.push_back(*offset_for_adjustment); |
| 831 base::string16 result = FormatUrlWithOffsets(url, languages, format_types, | 832 base::string16 result = FormatUrlWithOffsets(url, languages, format_types, |
| 832 unescape_rules, new_parsed, prefix_end, &offsets); | 833 unescape_rules, new_parsed, prefix_end, &offsets); |
| 833 if (offset_for_adjustment) | 834 if (offset_for_adjustment) |
| 834 *offset_for_adjustment = offsets[0]; | 835 *offset_for_adjustment = offsets[0]; |
| 835 return result; | 836 return result; |
| 836 } | 837 } |
| 837 | 838 |
| 838 } // namespace net | 839 } // namespace net |
| OLD | NEW |