OLD | NEW |
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 <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 | 10 |
(...skipping 2578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2589 EXPECT_EQ(WideToUTF16(L"8080"), | 2589 EXPECT_EQ(WideToUTF16(L"8080"), |
2590 formatted.substr(parsed.port.begin, parsed.port.len)); | 2590 formatted.substr(parsed.port.begin, parsed.port.len)); |
2591 EXPECT_EQ(WideToUTF16(L"/\x30B0/"), | 2591 EXPECT_EQ(WideToUTF16(L"/\x30B0/"), |
2592 formatted.substr(parsed.path.begin, parsed.path.len)); | 2592 formatted.substr(parsed.path.begin, parsed.path.len)); |
2593 EXPECT_EQ(WideToUTF16(L"q=\x30B0"), | 2593 EXPECT_EQ(WideToUTF16(L"q=\x30B0"), |
2594 formatted.substr(parsed.query.begin, parsed.query.len)); | 2594 formatted.substr(parsed.query.begin, parsed.query.len)); |
2595 EXPECT_EQ(WideToUTF16(L"\x30B0"), | 2595 EXPECT_EQ(WideToUTF16(L"\x30B0"), |
2596 formatted.substr(parsed.ref.begin, parsed.ref.len)); | 2596 formatted.substr(parsed.ref.begin, parsed.ref.len)); |
2597 | 2597 |
2598 // View-source case. | 2598 // View-source case. |
2599 formatted = FormatUrl( | 2599 formatted = |
2600 GURL("view-source:http://user:passwd@host:81/path?query#ref"), | 2600 FormatUrl(GURL("view-source:http://user:passwd@host:81/path?query#ref"), |
2601 "", kFormatUrlOmitUsernamePassword, UnescapeRule::NORMAL, &parsed, | 2601 std::string(), |
2602 NULL, NULL); | 2602 kFormatUrlOmitUsernamePassword, |
| 2603 UnescapeRule::NORMAL, |
| 2604 &parsed, |
| 2605 NULL, |
| 2606 NULL); |
2603 EXPECT_EQ(WideToUTF16(L"view-source:http://host:81/path?query#ref"), | 2607 EXPECT_EQ(WideToUTF16(L"view-source:http://host:81/path?query#ref"), |
2604 formatted); | 2608 formatted); |
2605 EXPECT_EQ(WideToUTF16(L"view-source:http"), | 2609 EXPECT_EQ(WideToUTF16(L"view-source:http"), |
2606 formatted.substr(parsed.scheme.begin, parsed.scheme.len)); | 2610 formatted.substr(parsed.scheme.begin, parsed.scheme.len)); |
2607 EXPECT_FALSE(parsed.username.is_valid()); | 2611 EXPECT_FALSE(parsed.username.is_valid()); |
2608 EXPECT_FALSE(parsed.password.is_valid()); | 2612 EXPECT_FALSE(parsed.password.is_valid()); |
2609 EXPECT_EQ(WideToUTF16(L"host"), | 2613 EXPECT_EQ(WideToUTF16(L"host"), |
2610 formatted.substr(parsed.host.begin, parsed.host.len)); | 2614 formatted.substr(parsed.host.begin, parsed.host.len)); |
2611 EXPECT_EQ(WideToUTF16(L"81"), | 2615 EXPECT_EQ(WideToUTF16(L"81"), |
2612 formatted.substr(parsed.port.begin, parsed.port.len)); | 2616 formatted.substr(parsed.port.begin, parsed.port.len)); |
2613 EXPECT_EQ(WideToUTF16(L"/path"), | 2617 EXPECT_EQ(WideToUTF16(L"/path"), |
2614 formatted.substr(parsed.path.begin, parsed.path.len)); | 2618 formatted.substr(parsed.path.begin, parsed.path.len)); |
2615 EXPECT_EQ(WideToUTF16(L"query"), | 2619 EXPECT_EQ(WideToUTF16(L"query"), |
2616 formatted.substr(parsed.query.begin, parsed.query.len)); | 2620 formatted.substr(parsed.query.begin, parsed.query.len)); |
2617 EXPECT_EQ(WideToUTF16(L"ref"), | 2621 EXPECT_EQ(WideToUTF16(L"ref"), |
2618 formatted.substr(parsed.ref.begin, parsed.ref.len)); | 2622 formatted.substr(parsed.ref.begin, parsed.ref.len)); |
2619 | 2623 |
2620 // omit http case. | 2624 // omit http case. |
2621 formatted = FormatUrl( | 2625 formatted = FormatUrl(GURL("http://host:8000/a?b=c#d"), |
2622 GURL("http://host:8000/a?b=c#d"), | 2626 std::string(), |
2623 "", kFormatUrlOmitHTTP, UnescapeRule::NORMAL, &parsed, NULL, NULL); | 2627 kFormatUrlOmitHTTP, |
| 2628 UnescapeRule::NORMAL, |
| 2629 &parsed, |
| 2630 NULL, |
| 2631 NULL); |
2624 EXPECT_EQ(WideToUTF16(L"host:8000/a?b=c#d"), formatted); | 2632 EXPECT_EQ(WideToUTF16(L"host:8000/a?b=c#d"), formatted); |
2625 EXPECT_FALSE(parsed.scheme.is_valid()); | 2633 EXPECT_FALSE(parsed.scheme.is_valid()); |
2626 EXPECT_FALSE(parsed.username.is_valid()); | 2634 EXPECT_FALSE(parsed.username.is_valid()); |
2627 EXPECT_FALSE(parsed.password.is_valid()); | 2635 EXPECT_FALSE(parsed.password.is_valid()); |
2628 EXPECT_EQ(WideToUTF16(L"host"), | 2636 EXPECT_EQ(WideToUTF16(L"host"), |
2629 formatted.substr(parsed.host.begin, parsed.host.len)); | 2637 formatted.substr(parsed.host.begin, parsed.host.len)); |
2630 EXPECT_EQ(WideToUTF16(L"8000"), | 2638 EXPECT_EQ(WideToUTF16(L"8000"), |
2631 formatted.substr(parsed.port.begin, parsed.port.len)); | 2639 formatted.substr(parsed.port.begin, parsed.port.len)); |
2632 EXPECT_EQ(WideToUTF16(L"/a"), | 2640 EXPECT_EQ(WideToUTF16(L"/a"), |
2633 formatted.substr(parsed.path.begin, parsed.path.len)); | 2641 formatted.substr(parsed.path.begin, parsed.path.len)); |
2634 EXPECT_EQ(WideToUTF16(L"b=c"), | 2642 EXPECT_EQ(WideToUTF16(L"b=c"), |
2635 formatted.substr(parsed.query.begin, parsed.query.len)); | 2643 formatted.substr(parsed.query.begin, parsed.query.len)); |
2636 EXPECT_EQ(WideToUTF16(L"d"), | 2644 EXPECT_EQ(WideToUTF16(L"d"), |
2637 formatted.substr(parsed.ref.begin, parsed.ref.len)); | 2645 formatted.substr(parsed.ref.begin, parsed.ref.len)); |
2638 | 2646 |
2639 // omit http starts with ftp case. | 2647 // omit http starts with ftp case. |
2640 formatted = FormatUrl( | 2648 formatted = FormatUrl(GURL("http://ftp.host:8000/a?b=c#d"), |
2641 GURL("http://ftp.host:8000/a?b=c#d"), | 2649 std::string(), |
2642 "", kFormatUrlOmitHTTP, UnescapeRule::NORMAL, &parsed, NULL, NULL); | 2650 kFormatUrlOmitHTTP, |
| 2651 UnescapeRule::NORMAL, |
| 2652 &parsed, |
| 2653 NULL, |
| 2654 NULL); |
2643 EXPECT_EQ(WideToUTF16(L"http://ftp.host:8000/a?b=c#d"), formatted); | 2655 EXPECT_EQ(WideToUTF16(L"http://ftp.host:8000/a?b=c#d"), formatted); |
2644 EXPECT_TRUE(parsed.scheme.is_valid()); | 2656 EXPECT_TRUE(parsed.scheme.is_valid()); |
2645 EXPECT_FALSE(parsed.username.is_valid()); | 2657 EXPECT_FALSE(parsed.username.is_valid()); |
2646 EXPECT_FALSE(parsed.password.is_valid()); | 2658 EXPECT_FALSE(parsed.password.is_valid()); |
2647 EXPECT_EQ(WideToUTF16(L"http"), | 2659 EXPECT_EQ(WideToUTF16(L"http"), |
2648 formatted.substr(parsed.scheme.begin, parsed.scheme.len)); | 2660 formatted.substr(parsed.scheme.begin, parsed.scheme.len)); |
2649 EXPECT_EQ(WideToUTF16(L"ftp.host"), | 2661 EXPECT_EQ(WideToUTF16(L"ftp.host"), |
2650 formatted.substr(parsed.host.begin, parsed.host.len)); | 2662 formatted.substr(parsed.host.begin, parsed.host.len)); |
2651 EXPECT_EQ(WideToUTF16(L"8000"), | 2663 EXPECT_EQ(WideToUTF16(L"8000"), |
2652 formatted.substr(parsed.port.begin, parsed.port.len)); | 2664 formatted.substr(parsed.port.begin, parsed.port.len)); |
2653 EXPECT_EQ(WideToUTF16(L"/a"), | 2665 EXPECT_EQ(WideToUTF16(L"/a"), |
2654 formatted.substr(parsed.path.begin, parsed.path.len)); | 2666 formatted.substr(parsed.path.begin, parsed.path.len)); |
2655 EXPECT_EQ(WideToUTF16(L"b=c"), | 2667 EXPECT_EQ(WideToUTF16(L"b=c"), |
2656 formatted.substr(parsed.query.begin, parsed.query.len)); | 2668 formatted.substr(parsed.query.begin, parsed.query.len)); |
2657 EXPECT_EQ(WideToUTF16(L"d"), | 2669 EXPECT_EQ(WideToUTF16(L"d"), |
2658 formatted.substr(parsed.ref.begin, parsed.ref.len)); | 2670 formatted.substr(parsed.ref.begin, parsed.ref.len)); |
2659 | 2671 |
2660 // omit http starts with 'f' case. | 2672 // omit http starts with 'f' case. |
2661 formatted = FormatUrl( | 2673 formatted = FormatUrl(GURL("http://f/"), |
2662 GURL("http://f/"), | 2674 std::string(), |
2663 "", kFormatUrlOmitHTTP, UnescapeRule::NORMAL, &parsed, NULL, NULL); | 2675 kFormatUrlOmitHTTP, |
| 2676 UnescapeRule::NORMAL, |
| 2677 &parsed, |
| 2678 NULL, |
| 2679 NULL); |
2664 EXPECT_EQ(WideToUTF16(L"f/"), formatted); | 2680 EXPECT_EQ(WideToUTF16(L"f/"), formatted); |
2665 EXPECT_FALSE(parsed.scheme.is_valid()); | 2681 EXPECT_FALSE(parsed.scheme.is_valid()); |
2666 EXPECT_FALSE(parsed.username.is_valid()); | 2682 EXPECT_FALSE(parsed.username.is_valid()); |
2667 EXPECT_FALSE(parsed.password.is_valid()); | 2683 EXPECT_FALSE(parsed.password.is_valid()); |
2668 EXPECT_FALSE(parsed.port.is_valid()); | 2684 EXPECT_FALSE(parsed.port.is_valid()); |
2669 EXPECT_TRUE(parsed.path.is_valid()); | 2685 EXPECT_TRUE(parsed.path.is_valid()); |
2670 EXPECT_FALSE(parsed.query.is_valid()); | 2686 EXPECT_FALSE(parsed.query.is_valid()); |
2671 EXPECT_FALSE(parsed.ref.is_valid()); | 2687 EXPECT_FALSE(parsed.ref.is_valid()); |
2672 EXPECT_EQ(WideToUTF16(L"f"), | 2688 EXPECT_EQ(WideToUTF16(L"f"), |
2673 formatted.substr(parsed.host.begin, parsed.host.len)); | 2689 formatted.substr(parsed.host.begin, parsed.host.len)); |
2674 EXPECT_EQ(WideToUTF16(L"/"), | 2690 EXPECT_EQ(WideToUTF16(L"/"), |
2675 formatted.substr(parsed.path.begin, parsed.path.len)); | 2691 formatted.substr(parsed.path.begin, parsed.path.len)); |
2676 } | 2692 } |
2677 | 2693 |
2678 // Make sure that calling FormatUrl on a GURL and then converting back to a GURL | 2694 // Make sure that calling FormatUrl on a GURL and then converting back to a GURL |
2679 // results in the original GURL, for each ASCII character in the path. | 2695 // results in the original GURL, for each ASCII character in the path. |
2680 TEST(NetUtilTest, FormatUrlRoundTripPathASCII) { | 2696 TEST(NetUtilTest, FormatUrlRoundTripPathASCII) { |
2681 for (unsigned char test_char = 32; test_char < 128; ++test_char) { | 2697 for (unsigned char test_char = 32; test_char < 128; ++test_char) { |
2682 GURL url(std::string("http://www.google.com/") + | 2698 GURL url(std::string("http://www.google.com/") + |
2683 static_cast<char>(test_char)); | 2699 static_cast<char>(test_char)); |
2684 size_t prefix_len; | 2700 size_t prefix_len; |
2685 base::string16 formatted = FormatUrl( | 2701 base::string16 formatted = FormatUrl(url, |
2686 url, "", kFormatUrlOmitUsernamePassword, UnescapeRule::NORMAL, NULL, | 2702 std::string(), |
2687 &prefix_len, NULL); | 2703 kFormatUrlOmitUsernamePassword, |
| 2704 UnescapeRule::NORMAL, |
| 2705 NULL, |
| 2706 &prefix_len, |
| 2707 NULL); |
2688 EXPECT_EQ(url.spec(), GURL(formatted).spec()); | 2708 EXPECT_EQ(url.spec(), GURL(formatted).spec()); |
2689 } | 2709 } |
2690 } | 2710 } |
2691 | 2711 |
2692 // Make sure that calling FormatUrl on a GURL and then converting back to a GURL | 2712 // Make sure that calling FormatUrl on a GURL and then converting back to a GURL |
2693 // results in the original GURL, for each escaped ASCII character in the path. | 2713 // results in the original GURL, for each escaped ASCII character in the path. |
2694 TEST(NetUtilTest, FormatUrlRoundTripPathEscaped) { | 2714 TEST(NetUtilTest, FormatUrlRoundTripPathEscaped) { |
2695 for (unsigned char test_char = 32; test_char < 128; ++test_char) { | 2715 for (unsigned char test_char = 32; test_char < 128; ++test_char) { |
2696 std::string original_url("http://www.google.com/"); | 2716 std::string original_url("http://www.google.com/"); |
2697 original_url.push_back('%'); | 2717 original_url.push_back('%'); |
2698 original_url.append(base::HexEncode(&test_char, 1)); | 2718 original_url.append(base::HexEncode(&test_char, 1)); |
2699 | 2719 |
2700 GURL url(original_url); | 2720 GURL url(original_url); |
2701 size_t prefix_len; | 2721 size_t prefix_len; |
2702 base::string16 formatted = FormatUrl( | 2722 base::string16 formatted = FormatUrl(url, |
2703 url, "", kFormatUrlOmitUsernamePassword, UnescapeRule::NORMAL, NULL, | 2723 std::string(), |
2704 &prefix_len, NULL); | 2724 kFormatUrlOmitUsernamePassword, |
| 2725 UnescapeRule::NORMAL, |
| 2726 NULL, |
| 2727 &prefix_len, |
| 2728 NULL); |
2705 EXPECT_EQ(url.spec(), GURL(formatted).spec()); | 2729 EXPECT_EQ(url.spec(), GURL(formatted).spec()); |
2706 } | 2730 } |
2707 } | 2731 } |
2708 | 2732 |
2709 // Make sure that calling FormatUrl on a GURL and then converting back to a GURL | 2733 // Make sure that calling FormatUrl on a GURL and then converting back to a GURL |
2710 // results in the original GURL, for each ASCII character in the query. | 2734 // results in the original GURL, for each ASCII character in the query. |
2711 TEST(NetUtilTest, FormatUrlRoundTripQueryASCII) { | 2735 TEST(NetUtilTest, FormatUrlRoundTripQueryASCII) { |
2712 for (unsigned char test_char = 32; test_char < 128; ++test_char) { | 2736 for (unsigned char test_char = 32; test_char < 128; ++test_char) { |
2713 GURL url(std::string("http://www.google.com/?") + | 2737 GURL url(std::string("http://www.google.com/?") + |
2714 static_cast<char>(test_char)); | 2738 static_cast<char>(test_char)); |
2715 size_t prefix_len; | 2739 size_t prefix_len; |
2716 base::string16 formatted = FormatUrl( | 2740 base::string16 formatted = FormatUrl(url, |
2717 url, "", kFormatUrlOmitUsernamePassword, UnescapeRule::NORMAL, NULL, | 2741 std::string(), |
2718 &prefix_len, NULL); | 2742 kFormatUrlOmitUsernamePassword, |
| 2743 UnescapeRule::NORMAL, |
| 2744 NULL, |
| 2745 &prefix_len, |
| 2746 NULL); |
2719 EXPECT_EQ(url.spec(), GURL(formatted).spec()); | 2747 EXPECT_EQ(url.spec(), GURL(formatted).spec()); |
2720 } | 2748 } |
2721 } | 2749 } |
2722 | 2750 |
2723 // Make sure that calling FormatUrl on a GURL and then converting back to a GURL | 2751 // Make sure that calling FormatUrl on a GURL and then converting back to a GURL |
2724 // only results in a different GURL for certain characters. | 2752 // only results in a different GURL for certain characters. |
2725 TEST(NetUtilTest, FormatUrlRoundTripQueryEscaped) { | 2753 TEST(NetUtilTest, FormatUrlRoundTripQueryEscaped) { |
2726 // A full list of characters which FormatURL should unescape and GURL should | 2754 // A full list of characters which FormatURL should unescape and GURL should |
2727 // not escape again, when they appear in a query string. | 2755 // not escape again, when they appear in a query string. |
2728 const char* kUnescapedCharacters = | 2756 const char* kUnescapedCharacters = |
2729 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_~"; | 2757 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_~"; |
2730 for (unsigned char test_char = 0; test_char < 128; ++test_char) { | 2758 for (unsigned char test_char = 0; test_char < 128; ++test_char) { |
2731 std::string original_url("http://www.google.com/?"); | 2759 std::string original_url("http://www.google.com/?"); |
2732 original_url.push_back('%'); | 2760 original_url.push_back('%'); |
2733 original_url.append(base::HexEncode(&test_char, 1)); | 2761 original_url.append(base::HexEncode(&test_char, 1)); |
2734 | 2762 |
2735 GURL url(original_url); | 2763 GURL url(original_url); |
2736 size_t prefix_len; | 2764 size_t prefix_len; |
2737 base::string16 formatted = FormatUrl( | 2765 base::string16 formatted = FormatUrl(url, |
2738 url, "", kFormatUrlOmitUsernamePassword, UnescapeRule::NORMAL, NULL, | 2766 std::string(), |
2739 &prefix_len, NULL); | 2767 kFormatUrlOmitUsernamePassword, |
| 2768 UnescapeRule::NORMAL, |
| 2769 NULL, |
| 2770 &prefix_len, |
| 2771 NULL); |
2740 | 2772 |
2741 if (test_char && | 2773 if (test_char && |
2742 strchr(kUnescapedCharacters, static_cast<char>(test_char))) { | 2774 strchr(kUnescapedCharacters, static_cast<char>(test_char))) { |
2743 EXPECT_NE(url.spec(), GURL(formatted).spec()); | 2775 EXPECT_NE(url.spec(), GURL(formatted).spec()); |
2744 } else { | 2776 } else { |
2745 EXPECT_EQ(url.spec(), GURL(formatted).spec()); | 2777 EXPECT_EQ(url.spec(), GURL(formatted).spec()); |
2746 } | 2778 } |
2747 } | 2779 } |
2748 } | 2780 } |
2749 | 2781 |
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3029 EXPECT_EQ("file:///tmp/test.html", | 3061 EXPECT_EQ("file:///tmp/test.html", |
3030 GetHostOrSpecFromURL(GURL("file:///tmp/test.html"))); | 3062 GetHostOrSpecFromURL(GURL("file:///tmp/test.html"))); |
3031 } | 3063 } |
3032 | 3064 |
3033 // Test that invalid IP literals fail to parse. | 3065 // Test that invalid IP literals fail to parse. |
3034 TEST(NetUtilTest, ParseIPLiteralToNumber_FailParse) { | 3066 TEST(NetUtilTest, ParseIPLiteralToNumber_FailParse) { |
3035 IPAddressNumber number; | 3067 IPAddressNumber number; |
3036 | 3068 |
3037 EXPECT_FALSE(ParseIPLiteralToNumber("bad value", &number)); | 3069 EXPECT_FALSE(ParseIPLiteralToNumber("bad value", &number)); |
3038 EXPECT_FALSE(ParseIPLiteralToNumber("bad:value", &number)); | 3070 EXPECT_FALSE(ParseIPLiteralToNumber("bad:value", &number)); |
3039 EXPECT_FALSE(ParseIPLiteralToNumber("", &number)); | 3071 EXPECT_FALSE(ParseIPLiteralToNumber(std::string(), &number)); |
3040 EXPECT_FALSE(ParseIPLiteralToNumber("192.168.0.1:30", &number)); | 3072 EXPECT_FALSE(ParseIPLiteralToNumber("192.168.0.1:30", &number)); |
3041 EXPECT_FALSE(ParseIPLiteralToNumber(" 192.168.0.1 ", &number)); | 3073 EXPECT_FALSE(ParseIPLiteralToNumber(" 192.168.0.1 ", &number)); |
3042 EXPECT_FALSE(ParseIPLiteralToNumber("[::1]", &number)); | 3074 EXPECT_FALSE(ParseIPLiteralToNumber("[::1]", &number)); |
3043 } | 3075 } |
3044 | 3076 |
3045 // Test parsing an IPv4 literal. | 3077 // Test parsing an IPv4 literal. |
3046 TEST(NetUtilTest, ParseIPLiteralToNumber_IPv4) { | 3078 TEST(NetUtilTest, ParseIPLiteralToNumber_IPv4) { |
3047 IPAddressNumber number; | 3079 IPAddressNumber number; |
3048 EXPECT_TRUE(ParseIPLiteralToNumber("192.168.0.1", &number)); | 3080 EXPECT_TRUE(ParseIPLiteralToNumber("192.168.0.1", &number)); |
3049 EXPECT_EQ("192,168,0,1", DumpIPNumber(number)); | 3081 EXPECT_EQ("192,168,0,1", DumpIPNumber(number)); |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3264 if (it->address[i] != 0) { | 3296 if (it->address[i] != 0) { |
3265 all_zeroes = false; | 3297 all_zeroes = false; |
3266 break; | 3298 break; |
3267 } | 3299 } |
3268 } | 3300 } |
3269 EXPECT_FALSE(all_zeroes); | 3301 EXPECT_FALSE(all_zeroes); |
3270 } | 3302 } |
3271 } | 3303 } |
3272 | 3304 |
3273 } // namespace net | 3305 } // namespace net |
OLD | NEW |