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/cookies/canonical_cookie.h" | 5 #include "net/cookies/canonical_cookie.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
10 #include "base/test/histogram_tester.h" | 10 #include "base/test/histogram_tester.h" |
(...skipping 26 matching lines...) Expand all Loading... | |
37 COOKIE_PRIORITY_DEFAULT)); | 37 COOKIE_PRIORITY_DEFAULT)); |
38 EXPECT_EQ("A", cookie2->Name()); | 38 EXPECT_EQ("A", cookie2->Name()); |
39 EXPECT_EQ("2", cookie2->Value()); | 39 EXPECT_EQ("2", cookie2->Value()); |
40 EXPECT_EQ(".www.example.com", cookie2->Domain()); | 40 EXPECT_EQ(".www.example.com", cookie2->Domain()); |
41 EXPECT_EQ("/", cookie2->Path()); | 41 EXPECT_EQ("/", cookie2->Path()); |
42 EXPECT_FALSE(cookie2->IsSecure()); | 42 EXPECT_FALSE(cookie2->IsSecure()); |
43 EXPECT_FALSE(cookie2->IsHttpOnly()); | 43 EXPECT_FALSE(cookie2->IsHttpOnly()); |
44 EXPECT_EQ(CookieSameSite::NO_RESTRICTION, cookie2->SameSite()); | 44 EXPECT_EQ(CookieSameSite::NO_RESTRICTION, cookie2->SameSite()); |
45 } | 45 } |
46 | 46 |
47 TEST(CanonicalCookie, CreateConstraints) { | |
mmenke
2017/06/15 21:30:24
What's this supposed to check? Space in the name?
Randy Smith (Not in Mondays)
2017/06/16 15:25:21
Changed to "SpaceInName".
(When I first wrote it
| |
48 GURL url("http://www.example.com/test/foo.html"); | |
49 base::Time creation_time = base::Time::Now(); | |
50 CookieOptions options; | |
51 std::unique_ptr<CanonicalCookie> cookie( | |
52 CanonicalCookie::Create(url, "A C=2", creation_time, options)); | |
53 EXPECT_TRUE(cookie.get()); | |
54 EXPECT_EQ("A C", cookie->Name()); | |
55 } | |
56 | |
47 TEST(CanonicalCookieTest, Create) { | 57 TEST(CanonicalCookieTest, Create) { |
48 // Test creating cookies from a cookie string. | 58 // Test creating cookies from a cookie string. |
49 GURL url("http://www.example.com/test/foo.html"); | 59 GURL url("http://www.example.com/test/foo.html"); |
50 base::Time creation_time = base::Time::Now(); | 60 base::Time creation_time = base::Time::Now(); |
51 CookieOptions options; | 61 CookieOptions options; |
52 | 62 |
53 std::unique_ptr<CanonicalCookie> cookie( | 63 std::unique_ptr<CanonicalCookie> cookie( |
54 CanonicalCookie::Create(url, "A=2", creation_time, options)); | 64 CanonicalCookie::Create(url, "A=2", creation_time, options)); |
55 EXPECT_EQ("A", cookie->Name()); | 65 EXPECT_EQ("A", cookie->Name()); |
56 EXPECT_EQ("2", cookie->Value()); | 66 EXPECT_EQ("2", cookie->Value()); |
(...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
589 CanonicalCookie::Create(https_url, "a=b", creation_time, options)); | 599 CanonicalCookie::Create(https_url, "a=b", creation_time, options)); |
590 std::unique_ptr<CanonicalCookie> https_cookie_secure(CanonicalCookie::Create( | 600 std::unique_ptr<CanonicalCookie> https_cookie_secure(CanonicalCookie::Create( |
591 https_url, "a=b; Secure", creation_time, options)); | 601 https_url, "a=b; Secure", creation_time, options)); |
592 | 602 |
593 EXPECT_TRUE(http_cookie_no_secure.get()); | 603 EXPECT_TRUE(http_cookie_no_secure.get()); |
594 EXPECT_FALSE(http_cookie_secure.get()); | 604 EXPECT_FALSE(http_cookie_secure.get()); |
595 EXPECT_TRUE(https_cookie_no_secure.get()); | 605 EXPECT_TRUE(https_cookie_no_secure.get()); |
596 EXPECT_TRUE(https_cookie_secure.get()); | 606 EXPECT_TRUE(https_cookie_secure.get()); |
597 } | 607 } |
598 | 608 |
609 TEST(CanonicalCookieTest, IsCanonical) { | |
610 // Base correct template. | |
611 EXPECT_TRUE(CanonicalCookie("A", "B", "x.y", "/path", base::Time(), | |
612 base::Time(), base::Time(), false, false, | |
613 CookieSameSite::NO_RESTRICTION, | |
614 COOKIE_PRIORITY_LOW) | |
615 .IsCanonical()); | |
616 | |
617 // Newline in name. | |
618 EXPECT_FALSE(CanonicalCookie("A\n", "B", "x.y", "/path", base::Time(), | |
619 base::Time(), base::Time(), false, false, | |
620 CookieSameSite::NO_RESTRICTION, | |
621 COOKIE_PRIORITY_LOW) | |
622 .IsCanonical()); | |
623 | |
624 // Carriage return in name. | |
625 EXPECT_FALSE(CanonicalCookie("A\r", "B", "x.y", "/path", base::Time(), | |
626 base::Time(), base::Time(), false, false, | |
627 CookieSameSite::NO_RESTRICTION, | |
628 COOKIE_PRIORITY_LOW) | |
629 .IsCanonical()); | |
630 | |
631 // Null character in name. | |
632 EXPECT_FALSE(CanonicalCookie(std::string("A\0Z", 3), "B", "x.y", "/path", | |
633 base::Time(), base::Time(), base::Time(), false, | |
634 false, CookieSameSite::NO_RESTRICTION, | |
635 COOKIE_PRIORITY_LOW) | |
636 .IsCanonical()); | |
637 | |
638 // Name begins with whitespace. | |
639 EXPECT_FALSE(CanonicalCookie(" A", "B", "x.y", "/path", base::Time(), | |
640 base::Time(), base::Time(), false, false, | |
641 CookieSameSite::NO_RESTRICTION, | |
642 COOKIE_PRIORITY_LOW) | |
643 .IsCanonical()); | |
644 | |
645 // Name ends with whitespace. | |
646 EXPECT_FALSE(CanonicalCookie("A ", "B", "x.y", "/path", base::Time(), | |
647 base::Time(), base::Time(), false, false, | |
648 CookieSameSite::NO_RESTRICTION, | |
649 COOKIE_PRIORITY_LOW) | |
650 .IsCanonical()); | |
651 | |
652 // Empty name. (Note this is against the spec but compatible with other | |
653 // browsers.) | |
654 EXPECT_TRUE(CanonicalCookie("", "B", "x.y", "/path", base::Time(), | |
655 base::Time(), base::Time(), false, false, | |
656 CookieSameSite::NO_RESTRICTION, | |
657 COOKIE_PRIORITY_LOW) | |
658 .IsCanonical()); | |
659 | |
660 // Space in name | |
661 EXPECT_TRUE(CanonicalCookie("A C", "B", "x.y", "/path", base::Time(), | |
662 base::Time(), base::Time(), false, false, | |
663 CookieSameSite::NO_RESTRICTION, | |
664 COOKIE_PRIORITY_LOW) | |
665 .IsCanonical()); | |
666 | |
667 // Extra space suffixing name. | |
668 EXPECT_FALSE(CanonicalCookie("A ", "B", "x.y", "/path", base::Time(), | |
669 base::Time(), base::Time(), false, false, | |
670 CookieSameSite::NO_RESTRICTION, | |
671 COOKIE_PRIORITY_LOW) | |
672 .IsCanonical()); | |
673 | |
674 // '=' character in name. | |
675 EXPECT_FALSE(CanonicalCookie("A=", "B", "x.y", "/path", base::Time(), | |
676 base::Time(), base::Time(), false, false, | |
677 CookieSameSite::NO_RESTRICTION, | |
678 COOKIE_PRIORITY_LOW) | |
679 .IsCanonical()); | |
680 | |
681 // Separator in name. | |
682 EXPECT_FALSE(CanonicalCookie("A;", "B", "x.y", "/path", base::Time(), | |
683 base::Time(), base::Time(), false, false, | |
684 CookieSameSite::NO_RESTRICTION, | |
685 COOKIE_PRIORITY_LOW) | |
686 .IsCanonical()); | |
687 | |
688 // '=' character in value. | |
689 EXPECT_TRUE(CanonicalCookie("A", "B=", "x.y", "/path", base::Time(), | |
690 base::Time(), base::Time(), false, false, | |
691 CookieSameSite::NO_RESTRICTION, | |
692 COOKIE_PRIORITY_LOW) | |
693 .IsCanonical()); | |
694 | |
695 // Separator in value. | |
696 EXPECT_FALSE(CanonicalCookie("A", "B;", "x.y", "/path", base::Time(), | |
697 base::Time(), base::Time(), false, false, | |
698 CookieSameSite::NO_RESTRICTION, | |
699 COOKIE_PRIORITY_LOW) | |
700 .IsCanonical()); | |
701 | |
702 // Separator in domain. | |
703 EXPECT_FALSE(CanonicalCookie("A", "B", ";x.y", "/path", base::Time(), | |
704 base::Time(), base::Time(), false, false, | |
705 CookieSameSite::NO_RESTRICTION, | |
706 COOKIE_PRIORITY_LOW) | |
707 .IsCanonical()); | |
708 | |
709 // Space in domain. | |
710 EXPECT_FALSE(CanonicalCookie("A", "B", "x.y ", "/path", base::Time(), | |
711 base::Time(), base::Time(), false, false, | |
712 CookieSameSite::NO_RESTRICTION, | |
713 COOKIE_PRIORITY_LOW) | |
714 .IsCanonical()); | |
715 | |
716 // Empty domain. (This is against cookie spec, but needed for Chrome's | |
717 // out-of-spec use of cookies for extensions; see http://crbug.com/730633. | |
718 EXPECT_TRUE(CanonicalCookie("A", "B", "", "/path", base::Time(), base::Time(), | |
719 base::Time(), false, false, | |
720 CookieSameSite::NO_RESTRICTION, | |
721 COOKIE_PRIORITY_LOW) | |
722 .IsCanonical()); | |
723 | |
724 // Path does not start with a "/". | |
725 EXPECT_FALSE(CanonicalCookie("A", "B", "x.y", "path", base::Time(), | |
726 base::Time(), base::Time(), false, false, | |
727 CookieSameSite::NO_RESTRICTION, | |
728 COOKIE_PRIORITY_LOW) | |
729 .IsCanonical()); | |
730 | |
731 // Empty path. | |
732 EXPECT_FALSE(CanonicalCookie("A", "B", "x.y", "", base::Time(), base::Time(), | |
733 base::Time(), false, false, | |
734 CookieSameSite::NO_RESTRICTION, | |
735 COOKIE_PRIORITY_LOW) | |
736 .IsCanonical()); | |
737 | |
738 // Path suffixed with a space. | |
739 EXPECT_FALSE(CanonicalCookie("A", "B", "x.y", "/path ", base::Time(), | |
740 base::Time(), base::Time(), false, false, | |
741 CookieSameSite::NO_RESTRICTION, | |
742 COOKIE_PRIORITY_LOW) | |
743 .IsCanonical()); | |
744 | |
745 // Path suffixed with separator. | |
746 EXPECT_FALSE(CanonicalCookie("A", "B", "x.y", "/path;", base::Time(), | |
747 base::Time(), base::Time(), false, false, | |
748 CookieSameSite::NO_RESTRICTION, | |
749 COOKIE_PRIORITY_LOW) | |
750 .IsCanonical()); | |
751 | |
752 // Simple IPv4 address as domain. | |
753 EXPECT_TRUE(CanonicalCookie("A", "B", "1.2.3.4", "/path", base::Time(), | |
754 base::Time(), base::Time(), false, false, | |
755 CookieSameSite::NO_RESTRICTION, | |
756 COOKIE_PRIORITY_LOW) | |
757 .IsCanonical()); | |
758 | |
759 // NOn-canonical IPv4 address as domain. | |
760 EXPECT_FALSE(CanonicalCookie("A", "B", "01.2.03.4", "/path", base::Time(), | |
761 base::Time(), base::Time(), false, false, | |
762 CookieSameSite::NO_RESTRICTION, | |
763 COOKIE_PRIORITY_LOW) | |
764 .IsCanonical()); | |
765 | |
766 // Null IPv6 address as domain. | |
767 EXPECT_TRUE(CanonicalCookie("A", "B", "[::]", "/path", base::Time(), | |
768 base::Time(), base::Time(), false, false, | |
769 CookieSameSite::NO_RESTRICTION, | |
770 COOKIE_PRIORITY_LOW) | |
771 .IsCanonical()); | |
772 | |
773 // Localhost IPv6 address as domain. | |
774 EXPECT_TRUE(CanonicalCookie("A", "B", "[::1]", "/path", base::Time(), | |
775 base::Time(), base::Time(), false, false, | |
776 CookieSameSite::NO_RESTRICTION, | |
777 COOKIE_PRIORITY_LOW) | |
778 .IsCanonical()); | |
779 | |
780 // Fully speced IPv6 address as domain. | |
781 EXPECT_FALSE(CanonicalCookie( | |
782 "A", "B", "[2001:0DB8:AC10:FE01:0000:0000:0000:0000]", | |
783 "/path", base::Time(), base::Time(), base::Time(), false, | |
784 false, CookieSameSite::NO_RESTRICTION, COOKIE_PRIORITY_LOW) | |
785 .IsCanonical()); | |
786 | |
787 // Zero abbreviated IPv6 address as domain. Not canonical because of leading | |
788 // zeros & uppercase hex letters. | |
789 EXPECT_FALSE(CanonicalCookie("A", "B", "[2001:0DB8:AC10:FE01::]", "/path", | |
790 base::Time(), base::Time(), base::Time(), false, | |
791 false, CookieSameSite::NO_RESTRICTION, | |
792 COOKIE_PRIORITY_LOW) | |
793 .IsCanonical()); | |
794 | |
795 // Zero prefixes removed IPv6 address as domain. Not canoncial because of | |
796 // uppercase hex letters. | |
797 EXPECT_FALSE(CanonicalCookie("A", "B", "[2001:DB8:AC10:FE01::]", "/path", | |
798 base::Time(), base::Time(), base::Time(), false, | |
799 false, CookieSameSite::NO_RESTRICTION, | |
800 COOKIE_PRIORITY_LOW) | |
801 .IsCanonical()); | |
802 | |
803 // Lowercased hex IPv6 address as domain. | |
804 EXPECT_TRUE(CanonicalCookie("A", "B", "[2001:db8:ac10:fe01::]", "/path", | |
805 base::Time(), base::Time(), base::Time(), false, | |
806 false, CookieSameSite::NO_RESTRICTION, | |
807 COOKIE_PRIORITY_LOW) | |
808 .IsCanonical()); | |
809 | |
810 // Properly formatted host cookie. | |
811 EXPECT_TRUE(CanonicalCookie("__Host-A", "B", "x.y", "/", base::Time(), | |
812 base::Time(), base::Time(), false, false, | |
813 CookieSameSite::NO_RESTRICTION, | |
814 COOKIE_PRIORITY_LOW) | |
815 .IsCanonical()); | |
816 | |
817 // Host cookie with non-null path. | |
818 EXPECT_FALSE(CanonicalCookie("__Host-A", "B", "x.y", "/path", base::Time(), | |
819 base::Time(), base::Time(), false, false, | |
820 CookieSameSite::NO_RESTRICTION, | |
821 COOKIE_PRIORITY_LOW) | |
822 .IsCanonical()); | |
823 | |
824 // Host cookie with empty domain. | |
825 EXPECT_FALSE(CanonicalCookie("__Host-A", "B", "", "/", base::Time(), | |
826 base::Time(), base::Time(), false, false, | |
827 CookieSameSite::NO_RESTRICTION, | |
828 COOKIE_PRIORITY_LOW) | |
829 .IsCanonical()); | |
830 | |
831 // Host cookie with period prefixed domain. | |
832 EXPECT_FALSE(CanonicalCookie("__Host-A", "B", ".x.y", "/", base::Time(), | |
833 base::Time(), base::Time(), false, false, | |
834 CookieSameSite::NO_RESTRICTION, | |
835 COOKIE_PRIORITY_LOW) | |
836 .IsCanonical()); | |
837 } | |
838 | |
599 TEST(CanonicalCookieTest, TestPrefixHistograms) { | 839 TEST(CanonicalCookieTest, TestPrefixHistograms) { |
600 base::HistogramTester histograms; | 840 base::HistogramTester histograms; |
601 const char kCookiePrefixHistogram[] = "Cookie.CookiePrefix"; | 841 const char kCookiePrefixHistogram[] = "Cookie.CookiePrefix"; |
602 const char kCookiePrefixBlockedHistogram[] = "Cookie.CookiePrefixBlocked"; | 842 const char kCookiePrefixBlockedHistogram[] = "Cookie.CookiePrefixBlocked"; |
603 GURL https_url("https://www.example.test"); | 843 GURL https_url("https://www.example.test"); |
604 base::Time creation_time = base::Time::Now(); | 844 base::Time creation_time = base::Time::Now(); |
605 CookieOptions options; | 845 CookieOptions options; |
606 | 846 |
607 EXPECT_FALSE(CanonicalCookie::Create(https_url, "__Host-A=B;", creation_time, | 847 EXPECT_FALSE(CanonicalCookie::Create(https_url, "__Host-A=B;", creation_time, |
608 options)); | 848 options)); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
640 CanonicalCookie::COOKIE_PREFIX_SECURE, 1); | 880 CanonicalCookie::COOKIE_PREFIX_SECURE, 1); |
641 EXPECT_TRUE(CanonicalCookie::Create(https_url, "__SecureA=B; Path=/; Secure", | 881 EXPECT_TRUE(CanonicalCookie::Create(https_url, "__SecureA=B; Path=/; Secure", |
642 creation_time, options)); | 882 creation_time, options)); |
643 histograms.ExpectBucketCount(kCookiePrefixHistogram, | 883 histograms.ExpectBucketCount(kCookiePrefixHistogram, |
644 CanonicalCookie::COOKIE_PREFIX_SECURE, 2); | 884 CanonicalCookie::COOKIE_PREFIX_SECURE, 2); |
645 histograms.ExpectBucketCount(kCookiePrefixBlockedHistogram, | 885 histograms.ExpectBucketCount(kCookiePrefixBlockedHistogram, |
646 CanonicalCookie::COOKIE_PREFIX_SECURE, 1); | 886 CanonicalCookie::COOKIE_PREFIX_SECURE, 1); |
647 } | 887 } |
648 | 888 |
649 } // namespace net | 889 } // namespace net |
OLD | NEW |