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

Side by Side Diff: net/base/net_util_icu.cc

Issue 1172183002: Move StartsWith[ASCII] to base namespace. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@string_util3
Patch Set: merger Created 5 years, 6 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
« no previous file with comments | « net/base/net_util.cc ('k') | net/dns/host_resolver_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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 !StartsWithASCII(url.possibly_invalid_spec(), kViewSourceTwice, false)) { 682 !base::StartsWithASCII(url.possibly_invalid_spec(), kViewSourceTwice,
683 false)) {
683 return FormatViewSourceUrl(url, languages, format_types, 684 return FormatViewSourceUrl(url, languages, format_types,
684 unescape_rules, new_parsed, prefix_end, 685 unescape_rules, new_parsed, prefix_end,
685 adjustments); 686 adjustments);
686 } 687 }
687 688
688 // 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
689 // regardless of validity). 690 // regardless of validity).
690 const std::string& spec = url.possibly_invalid_spec(); 691 const std::string& spec = url.possibly_invalid_spec();
691 const url::Parsed& parsed = url.parsed_for_possibly_invalid_spec(); 692 const url::Parsed& parsed = url.parsed_for_possibly_invalid_spec();
692 693
693 // Scheme & separators. These are ASCII. 694 // Scheme & separators. These are ASCII.
694 base::string16 url_string; 695 base::string16 url_string;
695 url_string.insert( 696 url_string.insert(
696 url_string.end(), spec.begin(), 697 url_string.end(), spec.begin(),
697 spec.begin() + parsed.CountCharactersBefore(url::Parsed::USERNAME, true)); 698 spec.begin() + parsed.CountCharactersBefore(url::Parsed::USERNAME, true));
698 const char kHTTP[] = "http://"; 699 const char kHTTP[] = "http://";
699 const char kFTP[] = "ftp."; 700 const char kFTP[] = "ftp.";
700 // 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
701 // 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
702 // 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
703 // 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
704 // 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
705 // we avoid stripping "http://" in this case. 706 // we avoid stripping "http://" in this case.
706 bool omit_http = (format_types & kFormatUrlOmitHTTP) && 707 bool omit_http = (format_types & kFormatUrlOmitHTTP) &&
707 base::EqualsASCII(url_string, kHTTP) && 708 base::EqualsASCII(url_string, kHTTP) &&
708 !StartsWithASCII(url.host(), kFTP, true); 709 !base::StartsWithASCII(url.host(), kFTP, true);
709 new_parsed->scheme = parsed.scheme; 710 new_parsed->scheme = parsed.scheme;
710 711
711 // Username & password. 712 // Username & password.
712 if ((format_types & kFormatUrlOmitUsernamePassword) != 0) { 713 if ((format_types & kFormatUrlOmitUsernamePassword) != 0) {
713 // Remove the username and password fields. We don't want to display those 714 // Remove the username and password fields. We don't want to display those
714 // to the user since they can be used for attacks, 715 // to the user since they can be used for attacks,
715 // e.g. "http://google.com:search@evil.ru/" 716 // e.g. "http://google.com:search@evil.ru/"
716 new_parsed->username.reset(); 717 new_parsed->username.reset();
717 new_parsed->password.reset(); 718 new_parsed->password.reset();
718 // Update the adjustments based on removed username and/or password. 719 // Update the adjustments based on removed username and/or password.
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
785 &url_string, &new_parsed->query, adjustments); 786 &url_string, &new_parsed->query, adjustments);
786 787
787 // Ref. This is valid, unescaped UTF-8, so we can just convert. 788 // Ref. This is valid, unescaped UTF-8, so we can just convert.
788 if (parsed.ref.is_valid()) 789 if (parsed.ref.is_valid())
789 url_string.push_back('#'); 790 url_string.push_back('#');
790 AppendFormattedComponent(spec, parsed.ref, 791 AppendFormattedComponent(spec, parsed.ref,
791 NonHostComponentTransform(UnescapeRule::NONE), 792 NonHostComponentTransform(UnescapeRule::NONE),
792 &url_string, &new_parsed->ref, adjustments); 793 &url_string, &new_parsed->ref, adjustments);
793 794
794 // If we need to strip out http do it after the fact. 795 // If we need to strip out http do it after the fact.
795 if (omit_http && StartsWith(url_string, base::ASCIIToUTF16(kHTTP), true)) { 796 if (omit_http &&
797 base::StartsWith(url_string, base::ASCIIToUTF16(kHTTP), true)) {
796 const size_t kHTTPSize = arraysize(kHTTP) - 1; 798 const size_t kHTTPSize = arraysize(kHTTP) - 1;
797 url_string = url_string.substr(kHTTPSize); 799 url_string = url_string.substr(kHTTPSize);
798 // Because offsets in the |adjustments| are already calculated with respect 800 // Because offsets in the |adjustments| are already calculated with respect
799 // to the string with the http:// prefix in it, those offsets remain correct 801 // to the string with the http:// prefix in it, those offsets remain correct
800 // after stripping the prefix. The only thing necessary is to add an 802 // after stripping the prefix. The only thing necessary is to add an
801 // adjustment to reflect the stripped prefix. 803 // adjustment to reflect the stripped prefix.
802 adjustments->insert(adjustments->begin(), 804 adjustments->insert(adjustments->begin(),
803 base::OffsetAdjuster::Adjustment(0, kHTTPSize, 0)); 805 base::OffsetAdjuster::Adjustment(0, kHTTPSize, 0));
804 806
805 if (prefix_end) 807 if (prefix_end)
(...skipping 20 matching lines...) Expand all
826 if (offset_for_adjustment) 828 if (offset_for_adjustment)
827 offsets.push_back(*offset_for_adjustment); 829 offsets.push_back(*offset_for_adjustment);
828 base::string16 result = FormatUrlWithOffsets(url, languages, format_types, 830 base::string16 result = FormatUrlWithOffsets(url, languages, format_types,
829 unescape_rules, new_parsed, prefix_end, &offsets); 831 unescape_rules, new_parsed, prefix_end, &offsets);
830 if (offset_for_adjustment) 832 if (offset_for_adjustment)
831 *offset_for_adjustment = offsets[0]; 833 *offset_for_adjustment = offsets[0];
832 return result; 834 return result;
833 } 835 }
834 836
835 } // namespace net 837 } // namespace net
OLDNEW
« no previous file with comments | « net/base/net_util.cc ('k') | net/dns/host_resolver_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698