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 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
411 const FormatUrlType kFormatUrlExperimentalElideAfterHost = 1 << 3; | 411 const FormatUrlType kFormatUrlExperimentalElideAfterHost = 1 << 3; |
412 const FormatUrlType kFormatUrlExperimentalOmitHTTPS = 1 << 4; | 412 const FormatUrlType kFormatUrlExperimentalOmitHTTPS = 1 << 4; |
413 const FormatUrlType kFormatUrlExperimentalOmitTrivialSubdomains = 1 << 5; | 413 const FormatUrlType kFormatUrlExperimentalOmitTrivialSubdomains = 1 << 5; |
414 | 414 |
415 base::string16 FormatUrl(const GURL& url, | 415 base::string16 FormatUrl(const GURL& url, |
416 FormatUrlTypes format_types, | 416 FormatUrlTypes format_types, |
417 net::UnescapeRule::Type unescape_rules, | 417 net::UnescapeRule::Type unescape_rules, |
418 url::Parsed* new_parsed, | 418 url::Parsed* new_parsed, |
419 size_t* prefix_end, | 419 size_t* prefix_end, |
420 size_t* offset_for_adjustment) { | 420 size_t* offset_for_adjustment) { |
421 std::vector<size_t> offsets; | 421 base::OffsetAdjuster::Adjustments adjustments; |
422 if (offset_for_adjustment) | 422 base::string16 result = FormatUrlWithAdjustments( |
423 offsets.push_back(*offset_for_adjustment); | 423 url, format_types, unescape_rules, new_parsed, prefix_end, &adjustments); |
424 base::string16 result = | 424 if (offset_for_adjustment) { |
425 FormatUrlWithOffsets(url, format_types, unescape_rules, new_parsed, | 425 base::OffsetAdjuster::AdjustOffset(adjustments, offset_for_adjustment, |
426 prefix_end, &offsets); | 426 result.length()); |
427 if (offset_for_adjustment) | 427 } |
428 *offset_for_adjustment = offsets[0]; | |
429 return result; | 428 return result; |
430 } | 429 } |
431 | 430 |
432 base::string16 FormatUrlWithOffsets( | 431 base::string16 FormatUrlWithOffsets( |
433 const GURL& url, | 432 const GURL& url, |
434 FormatUrlTypes format_types, | 433 FormatUrlTypes format_types, |
435 net::UnescapeRule::Type unescape_rules, | 434 net::UnescapeRule::Type unescape_rules, |
436 url::Parsed* new_parsed, | 435 url::Parsed* new_parsed, |
437 size_t* prefix_end, | 436 size_t* prefix_end, |
438 std::vector<size_t>* offsets_for_adjustment) { | 437 std::vector<size_t>* offsets_for_adjustment) { |
439 base::OffsetAdjuster::Adjustments adjustments; | 438 base::OffsetAdjuster::Adjustments adjustments; |
440 const base::string16& format_url_return_value = | 439 const base::string16& result = FormatUrlWithAdjustments( |
441 FormatUrlWithAdjustments(url, format_types, unescape_rules, new_parsed, | 440 url, format_types, unescape_rules, new_parsed, prefix_end, &adjustments); |
442 prefix_end, &adjustments); | 441 base::OffsetAdjuster::AdjustOffsets(adjustments, offsets_for_adjustment, |
443 base::OffsetAdjuster::AdjustOffsets(adjustments, offsets_for_adjustment); | 442 result.length()); |
444 if (offsets_for_adjustment) { | 443 return result; |
445 std::for_each( | |
446 offsets_for_adjustment->begin(), offsets_for_adjustment->end(), | |
447 base::LimitOffset<std::string>(format_url_return_value.length())); | |
448 } | |
449 return format_url_return_value; | |
450 } | 444 } |
451 | 445 |
452 base::string16 FormatUrlWithAdjustments( | 446 base::string16 FormatUrlWithAdjustments( |
453 const GURL& url, | 447 const GURL& url, |
454 FormatUrlTypes format_types, | 448 FormatUrlTypes format_types, |
455 net::UnescapeRule::Type unescape_rules, | 449 net::UnescapeRule::Type unescape_rules, |
456 url::Parsed* new_parsed, | 450 url::Parsed* new_parsed, |
457 size_t* prefix_end, | 451 size_t* prefix_end, |
458 base::OffsetAdjuster::Adjustments* adjustments) { | 452 base::OffsetAdjuster::Adjustments* adjustments) { |
459 DCHECK(adjustments != NULL); | 453 DCHECK(adjustments); |
460 adjustments->clear(); | 454 adjustments->clear(); |
461 url::Parsed parsed_temp; | 455 url::Parsed parsed_temp; |
462 if (!new_parsed) | 456 if (!new_parsed) |
463 new_parsed = &parsed_temp; | 457 new_parsed = &parsed_temp; |
464 else | 458 else |
465 *new_parsed = url::Parsed(); | 459 *new_parsed = url::Parsed(); |
466 | 460 |
467 // Special handling for view-source:. Don't use content::kViewSourceScheme | 461 // Special handling for view-source:. Don't use content::kViewSourceScheme |
468 // because this library shouldn't depend on chrome. | 462 // because this library shouldn't depend on chrome. |
469 const char kViewSource[] = "view-source"; | 463 const char kViewSource[] = "view-source"; |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
658 return base::StartsWith(text, www, base::CompareCase::SENSITIVE) | 652 return base::StartsWith(text, www, base::CompareCase::SENSITIVE) |
659 ? text.substr(www.length()) : text; | 653 ? text.substr(www.length()) : text; |
660 } | 654 } |
661 | 655 |
662 base::string16 StripWWWFromHost(const GURL& url) { | 656 base::string16 StripWWWFromHost(const GURL& url) { |
663 DCHECK(url.is_valid()); | 657 DCHECK(url.is_valid()); |
664 return StripWWW(base::ASCIIToUTF16(url.host_piece())); | 658 return StripWWW(base::ASCIIToUTF16(url.host_piece())); |
665 } | 659 } |
666 | 660 |
667 } // namespace url_formatter | 661 } // namespace url_formatter |
OLD | NEW |