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 <stddef.h> | 7 #include <stddef.h> |
8 #include <string.h> | 8 #include <string.h> |
9 | 9 |
10 #include <vector> | 10 #include <vector> |
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
372 FormatUrlTypes format_types, | 372 FormatUrlTypes format_types, |
373 net::UnescapeRule::Type unescape_rules, | 373 net::UnescapeRule::Type unescape_rules, |
374 const size_t* output_offsets) { | 374 const size_t* output_offsets) { |
375 GURL url(url_string); | 375 GURL url(url_string); |
376 size_t url_length = url_string.length(); | 376 size_t url_length = url_string.length(); |
377 std::vector<size_t> offsets; | 377 std::vector<size_t> offsets; |
378 for (size_t i = 0; i <= url_length + 1; ++i) | 378 for (size_t i = 0; i <= url_length + 1; ++i) |
379 offsets.push_back(i); | 379 offsets.push_back(i); |
380 offsets.push_back(500000); // Something larger than any input length. | 380 offsets.push_back(500000); // Something larger than any input length. |
381 offsets.push_back(std::string::npos); | 381 offsets.push_back(std::string::npos); |
382 base::string16 formatted_url = FormatUrlWithOffsets(url, std::string(), | 382 base::string16 formatted_url = FormatUrlWithOffsets(url, format_types, |
383 format_types, unescape_rules, NULL, NULL, &offsets); | 383 unescape_rules, nullptr, nullptr, &offsets); |
384 for (size_t i = 0; i < url_length; ++i) | 384 for (size_t i = 0; i < url_length; ++i) |
385 VerboseExpect(output_offsets[i], offsets[i], url_string, i, formatted_url); | 385 VerboseExpect(output_offsets[i], offsets[i], url_string, i, formatted_url); |
386 VerboseExpect(formatted_url.length(), offsets[url_length], url_string, | 386 VerboseExpect(formatted_url.length(), offsets[url_length], url_string, |
387 url_length, formatted_url); | 387 url_length, formatted_url); |
388 VerboseExpect(base::string16::npos, offsets[url_length + 1], url_string, | 388 VerboseExpect(base::string16::npos, offsets[url_length + 1], url_string, |
389 500000, formatted_url); | 389 500000, formatted_url); |
390 VerboseExpect(base::string16::npos, offsets[url_length + 2], url_string, | 390 VerboseExpect(base::string16::npos, offsets[url_length + 2], url_string, |
391 std::string::npos, formatted_url); | 391 std::string::npos, formatted_url); |
392 } | 392 } |
393 | 393 |
394 TEST(UrlFormatterTest, IDNToUnicode) { | 394 TEST(UrlFormatterTest, IDNToUnicode) { |
395 for (size_t i = 0; i < arraysize(idn_cases); i++) { | 395 for (size_t i = 0; i < arraysize(idn_cases); i++) { |
396 base::string16 output(IDNToUnicode(idn_cases[i].input, std::string())); | 396 base::string16 output(IDNToUnicode(idn_cases[i].input)); |
397 base::string16 expected(idn_cases[i].unicode_allowed | 397 base::string16 expected(idn_cases[i].unicode_allowed |
398 ? WideToUTF16(idn_cases[i].unicode_output) | 398 ? WideToUTF16(idn_cases[i].unicode_output) |
399 : ASCIIToUTF16(idn_cases[i].input)); | 399 : ASCIIToUTF16(idn_cases[i].input)); |
400 EXPECT_EQ(expected, output) << "input # " << i << ": \"" | 400 EXPECT_EQ(expected, output) << "input # " << i << ": \"" |
401 << idn_cases[i].input << "\""; | 401 << idn_cases[i].input << "\""; |
402 } | 402 } |
403 } | 403 } |
404 | 404 |
405 TEST(UrlFormatterTest, FormatUrl) { | 405 TEST(UrlFormatterTest, FormatUrl) { |
406 FormatUrlTypes default_format_type = kFormatUrlOmitUsernamePassword; | 406 FormatUrlTypes default_format_type = kFormatUrlOmitUsernamePassword; |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
546 kFormatUrlOmitAll, net::UnescapeRule::NORMAL, | 546 kFormatUrlOmitAll, net::UnescapeRule::NORMAL, |
547 L"view-source:http://ftp.b/c", 19}, | 547 L"view-source:http://ftp.b/c", 19}, |
548 {"view-source omit slash when it's the entire path", | 548 {"view-source omit slash when it's the entire path", |
549 "view-source:http://a.b/", kFormatUrlOmitAll, | 549 "view-source:http://a.b/", kFormatUrlOmitAll, |
550 net::UnescapeRule::NORMAL, L"view-source:a.b", 12}, | 550 net::UnescapeRule::NORMAL, L"view-source:a.b", 12}, |
551 }; | 551 }; |
552 | 552 |
553 for (size_t i = 0; i < arraysize(tests); ++i) { | 553 for (size_t i = 0; i < arraysize(tests); ++i) { |
554 size_t prefix_len; | 554 size_t prefix_len; |
555 base::string16 formatted = FormatUrl( | 555 base::string16 formatted = FormatUrl( |
556 GURL(tests[i].input), std::string(), tests[i].format_types, | 556 GURL(tests[i].input), tests[i].format_types, tests[i].escape_rules, |
557 tests[i].escape_rules, NULL, &prefix_len, NULL); | 557 nullptr, &prefix_len, nullptr); |
558 EXPECT_EQ(WideToUTF16(tests[i].output), formatted) << tests[i].description; | 558 EXPECT_EQ(WideToUTF16(tests[i].output), formatted) << tests[i].description; |
559 EXPECT_EQ(tests[i].prefix_len, prefix_len) << tests[i].description; | 559 EXPECT_EQ(tests[i].prefix_len, prefix_len) << tests[i].description; |
560 } | 560 } |
561 } | 561 } |
562 | 562 |
563 TEST(UrlFormatterTest, FormatUrlParsed) { | 563 TEST(UrlFormatterTest, FormatUrlParsed) { |
564 // No unescape case. | 564 // No unescape case. |
565 url::Parsed parsed; | 565 url::Parsed parsed; |
566 base::string16 formatted = | 566 base::string16 formatted = |
567 FormatUrl(GURL("http://\xE3\x82\xB0:\xE3\x83\xBC@xn--qcka1pmc.jp:8080/" | 567 FormatUrl(GURL("http://\xE3\x82\xB0:\xE3\x83\xBC@xn--qcka1pmc.jp:8080/" |
568 "%E3%82%B0/?q=%E3%82%B0#\xE3\x82\xB0"), | 568 "%E3%82%B0/?q=%E3%82%B0#\xE3\x82\xB0"), |
569 std::string(), kFormatUrlOmitNothing, net::UnescapeRule::NONE, | 569 kFormatUrlOmitNothing, net::UnescapeRule::NONE, |
570 &parsed, NULL, NULL); | 570 &parsed, nullptr, nullptr); |
571 EXPECT_EQ(WideToUTF16( | 571 EXPECT_EQ(WideToUTF16( |
572 L"http://%E3%82%B0:%E3%83%BC@\x30B0\x30FC\x30B0\x30EB.jp:8080" | 572 L"http://%E3%82%B0:%E3%83%BC@\x30B0\x30FC\x30B0\x30EB.jp:8080" |
573 L"/%E3%82%B0/?q=%E3%82%B0#\x30B0"), formatted); | 573 L"/%E3%82%B0/?q=%E3%82%B0#\x30B0"), formatted); |
574 EXPECT_EQ(WideToUTF16(L"%E3%82%B0"), | 574 EXPECT_EQ(WideToUTF16(L"%E3%82%B0"), |
575 formatted.substr(parsed.username.begin, parsed.username.len)); | 575 formatted.substr(parsed.username.begin, parsed.username.len)); |
576 EXPECT_EQ(WideToUTF16(L"%E3%83%BC"), | 576 EXPECT_EQ(WideToUTF16(L"%E3%83%BC"), |
577 formatted.substr(parsed.password.begin, parsed.password.len)); | 577 formatted.substr(parsed.password.begin, parsed.password.len)); |
578 EXPECT_EQ(WideToUTF16(L"\x30B0\x30FC\x30B0\x30EB.jp"), | 578 EXPECT_EQ(WideToUTF16(L"\x30B0\x30FC\x30B0\x30EB.jp"), |
579 formatted.substr(parsed.host.begin, parsed.host.len)); | 579 formatted.substr(parsed.host.begin, parsed.host.len)); |
580 EXPECT_EQ(WideToUTF16(L"8080"), | 580 EXPECT_EQ(WideToUTF16(L"8080"), |
581 formatted.substr(parsed.port.begin, parsed.port.len)); | 581 formatted.substr(parsed.port.begin, parsed.port.len)); |
582 EXPECT_EQ(WideToUTF16(L"/%E3%82%B0/"), | 582 EXPECT_EQ(WideToUTF16(L"/%E3%82%B0/"), |
583 formatted.substr(parsed.path.begin, parsed.path.len)); | 583 formatted.substr(parsed.path.begin, parsed.path.len)); |
584 EXPECT_EQ(WideToUTF16(L"q=%E3%82%B0"), | 584 EXPECT_EQ(WideToUTF16(L"q=%E3%82%B0"), |
585 formatted.substr(parsed.query.begin, parsed.query.len)); | 585 formatted.substr(parsed.query.begin, parsed.query.len)); |
586 EXPECT_EQ(WideToUTF16(L"\x30B0"), | 586 EXPECT_EQ(WideToUTF16(L"\x30B0"), |
587 formatted.substr(parsed.ref.begin, parsed.ref.len)); | 587 formatted.substr(parsed.ref.begin, parsed.ref.len)); |
588 | 588 |
589 // Unescape case. | 589 // Unescape case. |
590 formatted = | 590 formatted = |
591 FormatUrl(GURL("http://\xE3\x82\xB0:\xE3\x83\xBC@xn--qcka1pmc.jp:8080/" | 591 FormatUrl(GURL("http://\xE3\x82\xB0:\xE3\x83\xBC@xn--qcka1pmc.jp:8080/" |
592 "%E3%82%B0/?q=%E3%82%B0#\xE3\x82\xB0"), | 592 "%E3%82%B0/?q=%E3%82%B0#\xE3\x82\xB0"), |
593 "ja", kFormatUrlOmitNothing, net::UnescapeRule::NORMAL, &parsed, | 593 kFormatUrlOmitNothing, net::UnescapeRule::NORMAL, &parsed, |
594 NULL, NULL); | 594 nullptr, nullptr); |
595 EXPECT_EQ(WideToUTF16(L"http://\x30B0:\x30FC@\x30B0\x30FC\x30B0\x30EB.jp:8080" | 595 EXPECT_EQ(WideToUTF16(L"http://\x30B0:\x30FC@\x30B0\x30FC\x30B0\x30EB.jp:8080" |
596 L"/\x30B0/?q=\x30B0#\x30B0"), formatted); | 596 L"/\x30B0/?q=\x30B0#\x30B0"), formatted); |
597 EXPECT_EQ(WideToUTF16(L"\x30B0"), | 597 EXPECT_EQ(WideToUTF16(L"\x30B0"), |
598 formatted.substr(parsed.username.begin, parsed.username.len)); | 598 formatted.substr(parsed.username.begin, parsed.username.len)); |
599 EXPECT_EQ(WideToUTF16(L"\x30FC"), | 599 EXPECT_EQ(WideToUTF16(L"\x30FC"), |
600 formatted.substr(parsed.password.begin, parsed.password.len)); | 600 formatted.substr(parsed.password.begin, parsed.password.len)); |
601 EXPECT_EQ(WideToUTF16(L"\x30B0\x30FC\x30B0\x30EB.jp"), | 601 EXPECT_EQ(WideToUTF16(L"\x30B0\x30FC\x30B0\x30EB.jp"), |
602 formatted.substr(parsed.host.begin, parsed.host.len)); | 602 formatted.substr(parsed.host.begin, parsed.host.len)); |
603 EXPECT_EQ(WideToUTF16(L"8080"), | 603 EXPECT_EQ(WideToUTF16(L"8080"), |
604 formatted.substr(parsed.port.begin, parsed.port.len)); | 604 formatted.substr(parsed.port.begin, parsed.port.len)); |
605 EXPECT_EQ(WideToUTF16(L"/\x30B0/"), | 605 EXPECT_EQ(WideToUTF16(L"/\x30B0/"), |
606 formatted.substr(parsed.path.begin, parsed.path.len)); | 606 formatted.substr(parsed.path.begin, parsed.path.len)); |
607 EXPECT_EQ(WideToUTF16(L"q=\x30B0"), | 607 EXPECT_EQ(WideToUTF16(L"q=\x30B0"), |
608 formatted.substr(parsed.query.begin, parsed.query.len)); | 608 formatted.substr(parsed.query.begin, parsed.query.len)); |
609 EXPECT_EQ(WideToUTF16(L"\x30B0"), | 609 EXPECT_EQ(WideToUTF16(L"\x30B0"), |
610 formatted.substr(parsed.ref.begin, parsed.ref.len)); | 610 formatted.substr(parsed.ref.begin, parsed.ref.len)); |
611 | 611 |
612 // Omit_username_password + unescape case. | 612 // Omit_username_password + unescape case. |
613 formatted = | 613 formatted = |
614 FormatUrl(GURL("http://\xE3\x82\xB0:\xE3\x83\xBC@xn--qcka1pmc.jp:8080/" | 614 FormatUrl(GURL("http://\xE3\x82\xB0:\xE3\x83\xBC@xn--qcka1pmc.jp:8080/" |
615 "%E3%82%B0/?q=%E3%82%B0#\xE3\x82\xB0"), | 615 "%E3%82%B0/?q=%E3%82%B0#\xE3\x82\xB0"), |
616 "ja", kFormatUrlOmitUsernamePassword, net::UnescapeRule::NORMAL, | 616 kFormatUrlOmitUsernamePassword, net::UnescapeRule::NORMAL, |
617 &parsed, NULL, NULL); | 617 &parsed, nullptr, nullptr); |
618 EXPECT_EQ(WideToUTF16(L"http://\x30B0\x30FC\x30B0\x30EB.jp:8080" | 618 EXPECT_EQ(WideToUTF16(L"http://\x30B0\x30FC\x30B0\x30EB.jp:8080" |
619 L"/\x30B0/?q=\x30B0#\x30B0"), formatted); | 619 L"/\x30B0/?q=\x30B0#\x30B0"), formatted); |
620 EXPECT_FALSE(parsed.username.is_valid()); | 620 EXPECT_FALSE(parsed.username.is_valid()); |
621 EXPECT_FALSE(parsed.password.is_valid()); | 621 EXPECT_FALSE(parsed.password.is_valid()); |
622 EXPECT_EQ(WideToUTF16(L"\x30B0\x30FC\x30B0\x30EB.jp"), | 622 EXPECT_EQ(WideToUTF16(L"\x30B0\x30FC\x30B0\x30EB.jp"), |
623 formatted.substr(parsed.host.begin, parsed.host.len)); | 623 formatted.substr(parsed.host.begin, parsed.host.len)); |
624 EXPECT_EQ(WideToUTF16(L"8080"), | 624 EXPECT_EQ(WideToUTF16(L"8080"), |
625 formatted.substr(parsed.port.begin, parsed.port.len)); | 625 formatted.substr(parsed.port.begin, parsed.port.len)); |
626 EXPECT_EQ(WideToUTF16(L"/\x30B0/"), | 626 EXPECT_EQ(WideToUTF16(L"/\x30B0/"), |
627 formatted.substr(parsed.path.begin, parsed.path.len)); | 627 formatted.substr(parsed.path.begin, parsed.path.len)); |
628 EXPECT_EQ(WideToUTF16(L"q=\x30B0"), | 628 EXPECT_EQ(WideToUTF16(L"q=\x30B0"), |
629 formatted.substr(parsed.query.begin, parsed.query.len)); | 629 formatted.substr(parsed.query.begin, parsed.query.len)); |
630 EXPECT_EQ(WideToUTF16(L"\x30B0"), | 630 EXPECT_EQ(WideToUTF16(L"\x30B0"), |
631 formatted.substr(parsed.ref.begin, parsed.ref.len)); | 631 formatted.substr(parsed.ref.begin, parsed.ref.len)); |
632 | 632 |
633 // View-source case. | 633 // View-source case. |
634 formatted = | 634 formatted = |
635 FormatUrl(GURL("view-source:http://user:passwd@host:81/path?query#ref"), | 635 FormatUrl(GURL("view-source:http://user:passwd@host:81/path?query#ref"), |
636 std::string(), kFormatUrlOmitUsernamePassword, | 636 kFormatUrlOmitUsernamePassword, net::UnescapeRule::NORMAL, |
637 net::UnescapeRule::NORMAL, &parsed, NULL, NULL); | 637 &parsed, nullptr, nullptr); |
638 EXPECT_EQ(WideToUTF16(L"view-source:http://host:81/path?query#ref"), | 638 EXPECT_EQ(WideToUTF16(L"view-source:http://host:81/path?query#ref"), |
639 formatted); | 639 formatted); |
640 EXPECT_EQ(WideToUTF16(L"view-source:http"), | 640 EXPECT_EQ(WideToUTF16(L"view-source:http"), |
641 formatted.substr(parsed.scheme.begin, parsed.scheme.len)); | 641 formatted.substr(parsed.scheme.begin, parsed.scheme.len)); |
642 EXPECT_FALSE(parsed.username.is_valid()); | 642 EXPECT_FALSE(parsed.username.is_valid()); |
643 EXPECT_FALSE(parsed.password.is_valid()); | 643 EXPECT_FALSE(parsed.password.is_valid()); |
644 EXPECT_EQ(WideToUTF16(L"host"), | 644 EXPECT_EQ(WideToUTF16(L"host"), |
645 formatted.substr(parsed.host.begin, parsed.host.len)); | 645 formatted.substr(parsed.host.begin, parsed.host.len)); |
646 EXPECT_EQ(WideToUTF16(L"81"), | 646 EXPECT_EQ(WideToUTF16(L"81"), |
647 formatted.substr(parsed.port.begin, parsed.port.len)); | 647 formatted.substr(parsed.port.begin, parsed.port.len)); |
648 EXPECT_EQ(WideToUTF16(L"/path"), | 648 EXPECT_EQ(WideToUTF16(L"/path"), |
649 formatted.substr(parsed.path.begin, parsed.path.len)); | 649 formatted.substr(parsed.path.begin, parsed.path.len)); |
650 EXPECT_EQ(WideToUTF16(L"query"), | 650 EXPECT_EQ(WideToUTF16(L"query"), |
651 formatted.substr(parsed.query.begin, parsed.query.len)); | 651 formatted.substr(parsed.query.begin, parsed.query.len)); |
652 EXPECT_EQ(WideToUTF16(L"ref"), | 652 EXPECT_EQ(WideToUTF16(L"ref"), |
653 formatted.substr(parsed.ref.begin, parsed.ref.len)); | 653 formatted.substr(parsed.ref.begin, parsed.ref.len)); |
654 | 654 |
655 // omit http case. | 655 // omit http case. |
656 formatted = FormatUrl(GURL("http://host:8000/a?b=c#d"), std::string(), | 656 formatted = FormatUrl(GURL("http://host:8000/a?b=c#d"), kFormatUrlOmitHTTP, |
657 kFormatUrlOmitHTTP, net::UnescapeRule::NORMAL, &parsed, | 657 net::UnescapeRule::NORMAL, &parsed, nullptr, nullptr); |
658 NULL, NULL); | |
659 EXPECT_EQ(WideToUTF16(L"host:8000/a?b=c#d"), formatted); | 658 EXPECT_EQ(WideToUTF16(L"host:8000/a?b=c#d"), formatted); |
660 EXPECT_FALSE(parsed.scheme.is_valid()); | 659 EXPECT_FALSE(parsed.scheme.is_valid()); |
661 EXPECT_FALSE(parsed.username.is_valid()); | 660 EXPECT_FALSE(parsed.username.is_valid()); |
662 EXPECT_FALSE(parsed.password.is_valid()); | 661 EXPECT_FALSE(parsed.password.is_valid()); |
663 EXPECT_EQ(WideToUTF16(L"host"), | 662 EXPECT_EQ(WideToUTF16(L"host"), |
664 formatted.substr(parsed.host.begin, parsed.host.len)); | 663 formatted.substr(parsed.host.begin, parsed.host.len)); |
665 EXPECT_EQ(WideToUTF16(L"8000"), | 664 EXPECT_EQ(WideToUTF16(L"8000"), |
666 formatted.substr(parsed.port.begin, parsed.port.len)); | 665 formatted.substr(parsed.port.begin, parsed.port.len)); |
667 EXPECT_EQ(WideToUTF16(L"/a"), | 666 EXPECT_EQ(WideToUTF16(L"/a"), |
668 formatted.substr(parsed.path.begin, parsed.path.len)); | 667 formatted.substr(parsed.path.begin, parsed.path.len)); |
669 EXPECT_EQ(WideToUTF16(L"b=c"), | 668 EXPECT_EQ(WideToUTF16(L"b=c"), |
670 formatted.substr(parsed.query.begin, parsed.query.len)); | 669 formatted.substr(parsed.query.begin, parsed.query.len)); |
671 EXPECT_EQ(WideToUTF16(L"d"), | 670 EXPECT_EQ(WideToUTF16(L"d"), |
672 formatted.substr(parsed.ref.begin, parsed.ref.len)); | 671 formatted.substr(parsed.ref.begin, parsed.ref.len)); |
673 | 672 |
674 // omit http starts with ftp case. | 673 // omit http starts with ftp case. |
675 formatted = FormatUrl(GURL("http://ftp.host:8000/a?b=c#d"), std::string(), | 674 formatted = FormatUrl(GURL("http://ftp.host:8000/a?b=c#d"), |
676 kFormatUrlOmitHTTP, net::UnescapeRule::NORMAL, &parsed, | 675 kFormatUrlOmitHTTP, net::UnescapeRule::NORMAL, &parsed, |
677 NULL, NULL); | 676 nullptr, nullptr); |
678 EXPECT_EQ(WideToUTF16(L"http://ftp.host:8000/a?b=c#d"), formatted); | 677 EXPECT_EQ(WideToUTF16(L"http://ftp.host:8000/a?b=c#d"), formatted); |
679 EXPECT_TRUE(parsed.scheme.is_valid()); | 678 EXPECT_TRUE(parsed.scheme.is_valid()); |
680 EXPECT_FALSE(parsed.username.is_valid()); | 679 EXPECT_FALSE(parsed.username.is_valid()); |
681 EXPECT_FALSE(parsed.password.is_valid()); | 680 EXPECT_FALSE(parsed.password.is_valid()); |
682 EXPECT_EQ(WideToUTF16(L"http"), | 681 EXPECT_EQ(WideToUTF16(L"http"), |
683 formatted.substr(parsed.scheme.begin, parsed.scheme.len)); | 682 formatted.substr(parsed.scheme.begin, parsed.scheme.len)); |
684 EXPECT_EQ(WideToUTF16(L"ftp.host"), | 683 EXPECT_EQ(WideToUTF16(L"ftp.host"), |
685 formatted.substr(parsed.host.begin, parsed.host.len)); | 684 formatted.substr(parsed.host.begin, parsed.host.len)); |
686 EXPECT_EQ(WideToUTF16(L"8000"), | 685 EXPECT_EQ(WideToUTF16(L"8000"), |
687 formatted.substr(parsed.port.begin, parsed.port.len)); | 686 formatted.substr(parsed.port.begin, parsed.port.len)); |
688 EXPECT_EQ(WideToUTF16(L"/a"), | 687 EXPECT_EQ(WideToUTF16(L"/a"), |
689 formatted.substr(parsed.path.begin, parsed.path.len)); | 688 formatted.substr(parsed.path.begin, parsed.path.len)); |
690 EXPECT_EQ(WideToUTF16(L"b=c"), | 689 EXPECT_EQ(WideToUTF16(L"b=c"), |
691 formatted.substr(parsed.query.begin, parsed.query.len)); | 690 formatted.substr(parsed.query.begin, parsed.query.len)); |
692 EXPECT_EQ(WideToUTF16(L"d"), | 691 EXPECT_EQ(WideToUTF16(L"d"), |
693 formatted.substr(parsed.ref.begin, parsed.ref.len)); | 692 formatted.substr(parsed.ref.begin, parsed.ref.len)); |
694 | 693 |
695 // omit http starts with 'f' case. | 694 // omit http starts with 'f' case. |
696 formatted = FormatUrl(GURL("http://f/"), std::string(), kFormatUrlOmitHTTP, | 695 formatted = FormatUrl(GURL("http://f/"), kFormatUrlOmitHTTP, |
697 net::UnescapeRule::NORMAL, &parsed, NULL, NULL); | 696 net::UnescapeRule::NORMAL, &parsed, nullptr, nullptr); |
698 EXPECT_EQ(WideToUTF16(L"f/"), formatted); | 697 EXPECT_EQ(WideToUTF16(L"f/"), formatted); |
699 EXPECT_FALSE(parsed.scheme.is_valid()); | 698 EXPECT_FALSE(parsed.scheme.is_valid()); |
700 EXPECT_FALSE(parsed.username.is_valid()); | 699 EXPECT_FALSE(parsed.username.is_valid()); |
701 EXPECT_FALSE(parsed.password.is_valid()); | 700 EXPECT_FALSE(parsed.password.is_valid()); |
702 EXPECT_FALSE(parsed.port.is_valid()); | 701 EXPECT_FALSE(parsed.port.is_valid()); |
703 EXPECT_TRUE(parsed.path.is_valid()); | 702 EXPECT_TRUE(parsed.path.is_valid()); |
704 EXPECT_FALSE(parsed.query.is_valid()); | 703 EXPECT_FALSE(parsed.query.is_valid()); |
705 EXPECT_FALSE(parsed.ref.is_valid()); | 704 EXPECT_FALSE(parsed.ref.is_valid()); |
706 EXPECT_EQ(WideToUTF16(L"f"), | 705 EXPECT_EQ(WideToUTF16(L"f"), |
707 formatted.substr(parsed.host.begin, parsed.host.len)); | 706 formatted.substr(parsed.host.begin, parsed.host.len)); |
708 EXPECT_EQ(WideToUTF16(L"/"), | 707 EXPECT_EQ(WideToUTF16(L"/"), |
709 formatted.substr(parsed.path.begin, parsed.path.len)); | 708 formatted.substr(parsed.path.begin, parsed.path.len)); |
710 } | 709 } |
711 | 710 |
712 // Make sure that calling FormatUrl on a GURL and then converting back to a GURL | 711 // Make sure that calling FormatUrl on a GURL and then converting back to a GURL |
713 // results in the original GURL, for each ASCII character in the path. | 712 // results in the original GURL, for each ASCII character in the path. |
714 TEST(UrlFormatterTest, FormatUrlRoundTripPathASCII) { | 713 TEST(UrlFormatterTest, FormatUrlRoundTripPathASCII) { |
715 for (unsigned char test_char = 32; test_char < 128; ++test_char) { | 714 for (unsigned char test_char = 32; test_char < 128; ++test_char) { |
716 GURL url(std::string("http://www.google.com/") + | 715 GURL url(std::string("http://www.google.com/") + |
717 static_cast<char>(test_char)); | 716 static_cast<char>(test_char)); |
718 size_t prefix_len; | 717 size_t prefix_len; |
719 base::string16 formatted = | 718 base::string16 formatted = |
720 FormatUrl(url, std::string(), kFormatUrlOmitUsernamePassword, | 719 FormatUrl(url, kFormatUrlOmitUsernamePassword, |
721 net::UnescapeRule::NORMAL, NULL, &prefix_len, NULL); | 720 net::UnescapeRule::NORMAL, nullptr, &prefix_len, nullptr); |
722 EXPECT_EQ(url.spec(), GURL(formatted).spec()); | 721 EXPECT_EQ(url.spec(), GURL(formatted).spec()); |
723 } | 722 } |
724 } | 723 } |
725 | 724 |
726 // Make sure that calling FormatUrl on a GURL and then converting back to a GURL | 725 // Make sure that calling FormatUrl on a GURL and then converting back to a GURL |
727 // results in the original GURL, for each escaped ASCII character in the path. | 726 // results in the original GURL, for each escaped ASCII character in the path. |
728 TEST(UrlFormatterTest, FormatUrlRoundTripPathEscaped) { | 727 TEST(UrlFormatterTest, FormatUrlRoundTripPathEscaped) { |
729 for (unsigned char test_char = 32; test_char < 128; ++test_char) { | 728 for (unsigned char test_char = 32; test_char < 128; ++test_char) { |
730 std::string original_url("http://www.google.com/"); | 729 std::string original_url("http://www.google.com/"); |
731 original_url.push_back('%'); | 730 original_url.push_back('%'); |
732 original_url.append(base::HexEncode(&test_char, 1)); | 731 original_url.append(base::HexEncode(&test_char, 1)); |
733 | 732 |
734 GURL url(original_url); | 733 GURL url(original_url); |
735 size_t prefix_len; | 734 size_t prefix_len; |
736 base::string16 formatted = | 735 base::string16 formatted = FormatUrl(url, kFormatUrlOmitUsernamePassword, |
737 FormatUrl(url, std::string(), kFormatUrlOmitUsernamePassword, | 736 net::UnescapeRule::NORMAL, nullptr, &prefix_len, nullptr); |
738 net::UnescapeRule::NORMAL, NULL, &prefix_len, NULL); | |
739 EXPECT_EQ(url.spec(), GURL(formatted).spec()); | 737 EXPECT_EQ(url.spec(), GURL(formatted).spec()); |
740 } | 738 } |
741 } | 739 } |
742 | 740 |
743 // Make sure that calling FormatUrl on a GURL and then converting back to a GURL | 741 // Make sure that calling FormatUrl on a GURL and then converting back to a GURL |
744 // results in the original GURL, for each ASCII character in the query. | 742 // results in the original GURL, for each ASCII character in the query. |
745 TEST(UrlFormatterTest, FormatUrlRoundTripQueryASCII) { | 743 TEST(UrlFormatterTest, FormatUrlRoundTripQueryASCII) { |
746 for (unsigned char test_char = 32; test_char < 128; ++test_char) { | 744 for (unsigned char test_char = 32; test_char < 128; ++test_char) { |
747 GURL url(std::string("http://www.google.com/?") + | 745 GURL url(std::string("http://www.google.com/?") + |
748 static_cast<char>(test_char)); | 746 static_cast<char>(test_char)); |
749 size_t prefix_len; | 747 size_t prefix_len; |
750 base::string16 formatted = | 748 base::string16 formatted = |
751 FormatUrl(url, std::string(), kFormatUrlOmitUsernamePassword, | 749 FormatUrl(url, kFormatUrlOmitUsernamePassword, |
752 net::UnescapeRule::NORMAL, NULL, &prefix_len, NULL); | 750 net::UnescapeRule::NORMAL, nullptr, &prefix_len, nullptr); |
753 EXPECT_EQ(url.spec(), GURL(formatted).spec()); | 751 EXPECT_EQ(url.spec(), GURL(formatted).spec()); |
754 } | 752 } |
755 } | 753 } |
756 | 754 |
757 // Make sure that calling FormatUrl on a GURL and then converting back to a GURL | 755 // Make sure that calling FormatUrl on a GURL and then converting back to a GURL |
758 // only results in a different GURL for certain characters. | 756 // only results in a different GURL for certain characters. |
759 TEST(UrlFormatterTest, FormatUrlRoundTripQueryEscaped) { | 757 TEST(UrlFormatterTest, FormatUrlRoundTripQueryEscaped) { |
760 // A full list of characters which FormatURL should unescape and GURL should | 758 // A full list of characters which FormatURL should unescape and GURL should |
761 // not escape again, when they appear in a query string. | 759 // not escape again, when they appear in a query string. |
762 const char kUnescapedCharacters[] = | 760 const char kUnescapedCharacters[] = |
763 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_~"; | 761 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_~"; |
764 for (unsigned char test_char = 0; test_char < 128; ++test_char) { | 762 for (unsigned char test_char = 0; test_char < 128; ++test_char) { |
765 std::string original_url("http://www.google.com/?"); | 763 std::string original_url("http://www.google.com/?"); |
766 original_url.push_back('%'); | 764 original_url.push_back('%'); |
767 original_url.append(base::HexEncode(&test_char, 1)); | 765 original_url.append(base::HexEncode(&test_char, 1)); |
768 | 766 |
769 GURL url(original_url); | 767 GURL url(original_url); |
770 size_t prefix_len; | 768 size_t prefix_len; |
771 base::string16 formatted = | 769 base::string16 formatted = |
772 FormatUrl(url, std::string(), kFormatUrlOmitUsernamePassword, | 770 FormatUrl(url, kFormatUrlOmitUsernamePassword, |
773 net::UnescapeRule::NORMAL, NULL, &prefix_len, NULL); | 771 net::UnescapeRule::NORMAL, nullptr, &prefix_len, nullptr); |
774 | 772 |
775 if (test_char && | 773 if (test_char && |
776 strchr(kUnescapedCharacters, static_cast<char>(test_char))) { | 774 strchr(kUnescapedCharacters, static_cast<char>(test_char))) { |
777 EXPECT_NE(url.spec(), GURL(formatted).spec()); | 775 EXPECT_NE(url.spec(), GURL(formatted).spec()); |
778 } else { | 776 } else { |
779 EXPECT_EQ(url.spec(), GURL(formatted).spec()); | 777 EXPECT_EQ(url.spec(), GURL(formatted).spec()); |
780 } | 778 } |
781 } | 779 } |
782 } | 780 } |
783 | 781 |
784 TEST(UrlFormatterTest, FormatUrlWithOffsets) { | 782 TEST(UrlFormatterTest, FormatUrlWithOffsets) { |
785 CheckAdjustedOffsets(std::string(), kFormatUrlOmitNothing, | 783 CheckAdjustedOffsets(std::string(), kFormatUrlOmitNothing, |
786 net::UnescapeRule::NORMAL, NULL); | 784 net::UnescapeRule::NORMAL, nullptr); |
787 | 785 |
788 const size_t basic_offsets[] = { | 786 const size_t basic_offsets[] = { |
789 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, | 787 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, |
790 21, 22, 23, 24, 25 | 788 21, 22, 23, 24, 25 |
791 }; | 789 }; |
792 CheckAdjustedOffsets("http://www.google.com/foo/", | 790 CheckAdjustedOffsets("http://www.google.com/foo/", |
793 kFormatUrlOmitNothing, net::UnescapeRule::NORMAL, | 791 kFormatUrlOmitNothing, net::UnescapeRule::NORMAL, |
794 basic_offsets); | 792 basic_offsets); |
795 | 793 |
796 const size_t omit_auth_offsets_1[] = { | 794 const size_t omit_auth_offsets_1[] = { |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
890 0, kNpos, kNpos, kNpos, kNpos, kNpos, kNpos, 0, kNpos, kNpos, kNpos, kNpos, | 888 0, kNpos, kNpos, kNpos, kNpos, kNpos, kNpos, 0, kNpos, kNpos, kNpos, kNpos, |
891 0, 1, 2, 3, 4, 5, 6, 7 | 889 0, 1, 2, 3, 4, 5, 6, 7 |
892 }; | 890 }; |
893 CheckAdjustedOffsets("http://user@foo.com/", kFormatUrlOmitAll, | 891 CheckAdjustedOffsets("http://user@foo.com/", kFormatUrlOmitAll, |
894 net::UnescapeRule::NORMAL, omit_all_offsets); | 892 net::UnescapeRule::NORMAL, omit_all_offsets); |
895 } | 893 } |
896 | 894 |
897 } // namespace | 895 } // namespace |
898 | 896 |
899 } // namespace url_formatter | 897 } // namespace url_formatter |
OLD | NEW |