OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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_formatter/url_formatter.h" | 5 #include "components/url_formatter/url_formatter.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
159 DCHECK(new_parsed); | 159 DCHECK(new_parsed); |
160 const char kViewSource[] = "view-source:"; | 160 const char kViewSource[] = "view-source:"; |
161 const size_t kViewSourceLength = arraysize(kViewSource) - 1; | 161 const size_t kViewSourceLength = arraysize(kViewSource) - 1; |
162 | 162 |
163 // Format the underlying URL and record adjustments. | 163 // Format the underlying URL and record adjustments. |
164 const std::string& url_str(url.possibly_invalid_spec()); | 164 const std::string& url_str(url.possibly_invalid_spec()); |
165 adjustments->clear(); | 165 adjustments->clear(); |
166 base::string16 result( | 166 base::string16 result( |
167 base::ASCIIToUTF16(kViewSource) + | 167 base::ASCIIToUTF16(kViewSource) + |
168 FormatUrlWithAdjustments(GURL(url_str.substr(kViewSourceLength)), | 168 FormatUrlWithAdjustments(GURL(url_str.substr(kViewSourceLength)), |
169 std::string(), format_types, unescape_rules, | 169 format_types, unescape_rules, new_parsed, |
170 new_parsed, prefix_end, adjustments)); | 170 prefix_end, adjustments)); |
171 // Revise |adjustments| by shifting to the offsets to prefix that the above | 171 // Revise |adjustments| by shifting to the offsets to prefix that the above |
172 // call to FormatUrl didn't get to see. | 172 // call to FormatUrl didn't get to see. |
173 for (base::OffsetAdjuster::Adjustments::iterator it = adjustments->begin(); | 173 for (base::OffsetAdjuster::Adjustments::iterator it = adjustments->begin(); |
174 it != adjustments->end(); ++it) | 174 it != adjustments->end(); ++it) |
175 it->original_offset += kViewSourceLength; | 175 it->original_offset += kViewSourceLength; |
176 | 176 |
177 // Adjust positions of the parsed components. | 177 // Adjust positions of the parsed components. |
178 if (new_parsed->scheme.is_nonempty()) { | 178 if (new_parsed->scheme.is_nonempty()) { |
179 // Assume "view-source:real-scheme" as a scheme. | 179 // Assume "view-source:real-scheme" as a scheme. |
180 new_parsed->scheme.len += kViewSourceLength; | 180 new_parsed->scheme.len += kViewSourceLength; |
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
570 | 570 |
571 const FormatUrlType kFormatUrlOmitNothing = 0; | 571 const FormatUrlType kFormatUrlOmitNothing = 0; |
572 const FormatUrlType kFormatUrlOmitUsernamePassword = 1 << 0; | 572 const FormatUrlType kFormatUrlOmitUsernamePassword = 1 << 0; |
573 const FormatUrlType kFormatUrlOmitHTTP = 1 << 1; | 573 const FormatUrlType kFormatUrlOmitHTTP = 1 << 1; |
574 const FormatUrlType kFormatUrlOmitTrailingSlashOnBareHostname = 1 << 2; | 574 const FormatUrlType kFormatUrlOmitTrailingSlashOnBareHostname = 1 << 2; |
575 const FormatUrlType kFormatUrlOmitAll = | 575 const FormatUrlType kFormatUrlOmitAll = |
576 kFormatUrlOmitUsernamePassword | kFormatUrlOmitHTTP | | 576 kFormatUrlOmitUsernamePassword | kFormatUrlOmitHTTP | |
577 kFormatUrlOmitTrailingSlashOnBareHostname; | 577 kFormatUrlOmitTrailingSlashOnBareHostname; |
578 | 578 |
579 base::string16 FormatUrl(const GURL& url, | 579 base::string16 FormatUrl(const GURL& url, |
580 const std::string& languages, | |
581 FormatUrlTypes format_types, | 580 FormatUrlTypes format_types, |
582 net::UnescapeRule::Type unescape_rules, | 581 net::UnescapeRule::Type unescape_rules, |
583 url::Parsed* new_parsed, | 582 url::Parsed* new_parsed, |
584 size_t* prefix_end, | 583 size_t* prefix_end, |
585 size_t* offset_for_adjustment) { | 584 size_t* offset_for_adjustment) { |
586 std::vector<size_t> offsets; | 585 std::vector<size_t> offsets; |
587 if (offset_for_adjustment) | 586 if (offset_for_adjustment) |
588 offsets.push_back(*offset_for_adjustment); | 587 offsets.push_back(*offset_for_adjustment); |
589 base::string16 result = | 588 base::string16 result = |
590 FormatUrlWithOffsets(url, std::string(), format_types, unescape_rules, | 589 FormatUrlWithOffsets(url, format_types, unescape_rules, new_parsed, |
591 new_parsed, prefix_end, &offsets); | 590 prefix_end, &offsets); |
592 if (offset_for_adjustment) | 591 if (offset_for_adjustment) |
593 *offset_for_adjustment = offsets[0]; | 592 *offset_for_adjustment = offsets[0]; |
594 return result; | 593 return result; |
595 } | 594 } |
596 | 595 |
597 base::string16 FormatUrlWithOffsets( | 596 base::string16 FormatUrlWithOffsets( |
598 const GURL& url, | 597 const GURL& url, |
599 const std::string& languages, | |
600 FormatUrlTypes format_types, | 598 FormatUrlTypes format_types, |
601 net::UnescapeRule::Type unescape_rules, | 599 net::UnescapeRule::Type unescape_rules, |
602 url::Parsed* new_parsed, | 600 url::Parsed* new_parsed, |
603 size_t* prefix_end, | 601 size_t* prefix_end, |
604 std::vector<size_t>* offsets_for_adjustment) { | 602 std::vector<size_t>* offsets_for_adjustment) { |
605 base::OffsetAdjuster::Adjustments adjustments; | 603 base::OffsetAdjuster::Adjustments adjustments; |
606 const base::string16& format_url_return_value = | 604 const base::string16& format_url_return_value = |
607 FormatUrlWithAdjustments(url, std::string(), format_types, unescape_rules, | 605 FormatUrlWithAdjustments(url, format_types, unescape_rules, new_parsed, |
608 new_parsed, prefix_end, &adjustments); | 606 prefix_end, &adjustments); |
609 base::OffsetAdjuster::AdjustOffsets(adjustments, offsets_for_adjustment); | 607 base::OffsetAdjuster::AdjustOffsets(adjustments, offsets_for_adjustment); |
610 if (offsets_for_adjustment) { | 608 if (offsets_for_adjustment) { |
611 std::for_each( | 609 std::for_each( |
612 offsets_for_adjustment->begin(), offsets_for_adjustment->end(), | 610 offsets_for_adjustment->begin(), offsets_for_adjustment->end(), |
613 base::LimitOffset<std::string>(format_url_return_value.length())); | 611 base::LimitOffset<std::string>(format_url_return_value.length())); |
614 } | 612 } |
615 return format_url_return_value; | 613 return format_url_return_value; |
616 } | 614 } |
617 | 615 |
618 base::string16 FormatUrlWithAdjustments( | 616 base::string16 FormatUrlWithAdjustments( |
619 const GURL& url, | 617 const GURL& url, |
620 const std::string& languages, | |
621 FormatUrlTypes format_types, | 618 FormatUrlTypes format_types, |
622 net::UnescapeRule::Type unescape_rules, | 619 net::UnescapeRule::Type unescape_rules, |
623 url::Parsed* new_parsed, | 620 url::Parsed* new_parsed, |
624 size_t* prefix_end, | 621 size_t* prefix_end, |
625 base::OffsetAdjuster::Adjustments* adjustments) { | 622 base::OffsetAdjuster::Adjustments* adjustments) { |
626 DCHECK(adjustments != NULL); | 623 DCHECK(adjustments != NULL); |
627 adjustments->clear(); | 624 adjustments->clear(); |
628 url::Parsed parsed_temp; | 625 url::Parsed parsed_temp; |
629 if (!new_parsed) | 626 if (!new_parsed) |
630 new_parsed = &parsed_temp; | 627 new_parsed = &parsed_temp; |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
773 return url_string; | 770 return url_string; |
774 } | 771 } |
775 | 772 |
776 bool CanStripTrailingSlash(const GURL& url) { | 773 bool CanStripTrailingSlash(const GURL& url) { |
777 // Omit the path only for standard, non-file URLs with nothing but "/" after | 774 // Omit the path only for standard, non-file URLs with nothing but "/" after |
778 // the hostname. | 775 // the hostname. |
779 return url.IsStandard() && !url.SchemeIsFile() && !url.SchemeIsFileSystem() && | 776 return url.IsStandard() && !url.SchemeIsFile() && !url.SchemeIsFileSystem() && |
780 !url.has_query() && !url.has_ref() && url.path() == "/"; | 777 !url.has_query() && !url.has_ref() && url.path() == "/"; |
781 } | 778 } |
782 | 779 |
783 void AppendFormattedHost(const GURL& url, | 780 void AppendFormattedHost(const GURL& url, base::string16* output) { |
784 const std::string& languages, | |
785 base::string16* output) { | |
786 AppendFormattedComponent( | 781 AppendFormattedComponent( |
787 url.possibly_invalid_spec(), url.parsed_for_possibly_invalid_spec().host, | 782 url.possibly_invalid_spec(), url.parsed_for_possibly_invalid_spec().host, |
788 HostComponentTransform(), output, NULL, NULL); | 783 HostComponentTransform(), output, NULL, NULL); |
789 } | 784 } |
790 | 785 |
791 base::string16 IDNToUnicode(const std::string& host, | 786 base::string16 IDNToUnicode(const std::string& host) { |
792 const std::string& languages) { | 787 return IDNToUnicodeWithAdjustments(host, nullptr); |
793 return IDNToUnicodeWithAdjustments(host, NULL); | |
794 } | 788 } |
795 | 789 |
796 base::string16 StripWWW(const base::string16& text) { | 790 base::string16 StripWWW(const base::string16& text) { |
797 const base::string16 www(base::ASCIIToUTF16("www.")); | 791 const base::string16 www(base::ASCIIToUTF16("www.")); |
798 return base::StartsWith(text, www, base::CompareCase::SENSITIVE) | 792 return base::StartsWith(text, www, base::CompareCase::SENSITIVE) |
799 ? text.substr(www.length()) : text; | 793 ? text.substr(www.length()) : text; |
800 } | 794 } |
801 | 795 |
802 base::string16 StripWWWFromHost(const GURL& url) { | 796 base::string16 StripWWWFromHost(const GURL& url) { |
803 DCHECK(url.is_valid()); | 797 DCHECK(url.is_valid()); |
804 return StripWWW(base::ASCIIToUTF16(url.host_piece())); | 798 return StripWWW(base::ASCIIToUTF16(url.host_piece())); |
805 } | 799 } |
806 | 800 |
807 } // namespace url_formatter | 801 } // namespace url_formatter |
OLD | NEW |