Chromium Code Reviews| Index: net/cookies/canonical_cookie_unittest.cc |
| diff --git a/net/cookies/canonical_cookie_unittest.cc b/net/cookies/canonical_cookie_unittest.cc |
| index 402846db30f8de12f427021b36be7a35d4ddd519..47b296de3e4aa319d2dfb274e88dcd7dca0e9048 100644 |
| --- a/net/cookies/canonical_cookie_unittest.cc |
| +++ b/net/cookies/canonical_cookie_unittest.cc |
| @@ -44,6 +44,16 @@ TEST(CanonicalCookieTest, Constructor) { |
| EXPECT_EQ(CookieSameSite::NO_RESTRICTION, cookie2->SameSite()); |
| } |
| +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
|
| + GURL url("http://www.example.com/test/foo.html"); |
| + base::Time creation_time = base::Time::Now(); |
| + CookieOptions options; |
| + std::unique_ptr<CanonicalCookie> cookie( |
| + CanonicalCookie::Create(url, "A C=2", creation_time, options)); |
| + EXPECT_TRUE(cookie.get()); |
| + EXPECT_EQ("A C", cookie->Name()); |
| +} |
| + |
| TEST(CanonicalCookieTest, Create) { |
| // Test creating cookies from a cookie string. |
| GURL url("http://www.example.com/test/foo.html"); |
| @@ -596,6 +606,236 @@ TEST(CanonicalCookieTest, EnforceSecureCookiesRequireSecureScheme) { |
| EXPECT_TRUE(https_cookie_secure.get()); |
| } |
| +TEST(CanonicalCookieTest, IsCanonical) { |
| + // Base correct template. |
| + EXPECT_TRUE(CanonicalCookie("A", "B", "x.y", "/path", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Newline in name. |
| + EXPECT_FALSE(CanonicalCookie("A\n", "B", "x.y", "/path", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Carriage return in name. |
| + EXPECT_FALSE(CanonicalCookie("A\r", "B", "x.y", "/path", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Null character in name. |
| + EXPECT_FALSE(CanonicalCookie(std::string("A\0Z", 3), "B", "x.y", "/path", |
| + base::Time(), base::Time(), base::Time(), false, |
| + false, CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Name begins with whitespace. |
| + EXPECT_FALSE(CanonicalCookie(" A", "B", "x.y", "/path", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Name ends with whitespace. |
| + EXPECT_FALSE(CanonicalCookie("A ", "B", "x.y", "/path", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Empty name. (Note this is against the spec but compatible with other |
| + // browsers.) |
| + EXPECT_TRUE(CanonicalCookie("", "B", "x.y", "/path", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Space in name |
| + EXPECT_TRUE(CanonicalCookie("A C", "B", "x.y", "/path", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Extra space suffixing name. |
| + EXPECT_FALSE(CanonicalCookie("A ", "B", "x.y", "/path", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // '=' character in name. |
| + EXPECT_FALSE(CanonicalCookie("A=", "B", "x.y", "/path", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Separator in name. |
| + EXPECT_FALSE(CanonicalCookie("A;", "B", "x.y", "/path", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // '=' character in value. |
| + EXPECT_TRUE(CanonicalCookie("A", "B=", "x.y", "/path", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Separator in value. |
| + EXPECT_FALSE(CanonicalCookie("A", "B;", "x.y", "/path", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Separator in domain. |
| + EXPECT_FALSE(CanonicalCookie("A", "B", ";x.y", "/path", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Space in domain. |
| + EXPECT_FALSE(CanonicalCookie("A", "B", "x.y ", "/path", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Empty domain. (This is against cookie spec, but needed for Chrome's |
| + // out-of-spec use of cookies for extensions; see http://crbug.com/730633. |
| + EXPECT_TRUE(CanonicalCookie("A", "B", "", "/path", base::Time(), base::Time(), |
| + base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Path does not start with a "/". |
| + EXPECT_FALSE(CanonicalCookie("A", "B", "x.y", "path", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Empty path. |
| + EXPECT_FALSE(CanonicalCookie("A", "B", "x.y", "", base::Time(), base::Time(), |
| + base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Path suffixed with a space. |
| + EXPECT_FALSE(CanonicalCookie("A", "B", "x.y", "/path ", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Path suffixed with separator. |
| + EXPECT_FALSE(CanonicalCookie("A", "B", "x.y", "/path;", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Simple IPv4 address as domain. |
| + EXPECT_TRUE(CanonicalCookie("A", "B", "1.2.3.4", "/path", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // NOn-canonical IPv4 address as domain. |
| + EXPECT_FALSE(CanonicalCookie("A", "B", "01.2.03.4", "/path", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Null IPv6 address as domain. |
| + EXPECT_TRUE(CanonicalCookie("A", "B", "[::]", "/path", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Localhost IPv6 address as domain. |
| + EXPECT_TRUE(CanonicalCookie("A", "B", "[::1]", "/path", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Fully speced IPv6 address as domain. |
| + EXPECT_FALSE(CanonicalCookie( |
| + "A", "B", "[2001:0DB8:AC10:FE01:0000:0000:0000:0000]", |
| + "/path", base::Time(), base::Time(), base::Time(), false, |
| + false, CookieSameSite::NO_RESTRICTION, COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Zero abbreviated IPv6 address as domain. Not canonical because of leading |
| + // zeros & uppercase hex letters. |
| + EXPECT_FALSE(CanonicalCookie("A", "B", "[2001:0DB8:AC10:FE01::]", "/path", |
| + base::Time(), base::Time(), base::Time(), false, |
| + false, CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Zero prefixes removed IPv6 address as domain. Not canoncial because of |
| + // uppercase hex letters. |
| + EXPECT_FALSE(CanonicalCookie("A", "B", "[2001:DB8:AC10:FE01::]", "/path", |
| + base::Time(), base::Time(), base::Time(), false, |
| + false, CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Lowercased hex IPv6 address as domain. |
| + EXPECT_TRUE(CanonicalCookie("A", "B", "[2001:db8:ac10:fe01::]", "/path", |
| + base::Time(), base::Time(), base::Time(), false, |
| + false, CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Properly formatted host cookie. |
| + EXPECT_TRUE(CanonicalCookie("__Host-A", "B", "x.y", "/", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Host cookie with non-null path. |
| + EXPECT_FALSE(CanonicalCookie("__Host-A", "B", "x.y", "/path", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Host cookie with empty domain. |
| + EXPECT_FALSE(CanonicalCookie("__Host-A", "B", "", "/", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| + |
| + // Host cookie with period prefixed domain. |
| + EXPECT_FALSE(CanonicalCookie("__Host-A", "B", ".x.y", "/", base::Time(), |
| + base::Time(), base::Time(), false, false, |
| + CookieSameSite::NO_RESTRICTION, |
| + COOKIE_PRIORITY_LOW) |
| + .IsCanonical()); |
| +} |
| + |
| TEST(CanonicalCookieTest, TestPrefixHistograms) { |
| base::HistogramTester histograms; |
| const char kCookiePrefixHistogram[] = "Cookie.CookiePrefix"; |