| 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 |