| 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..aaa9c69d8f5f5162789878b4ee9351086d948b9d 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, SpaceInName) {
|
| + 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,264 @@ 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());
|
| +
|
| + // Garbage in domain.
|
| + EXPECT_FALSE(CanonicalCookie("A", "B", "@:&", "/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(), true, false,
|
| + CookieSameSite::NO_RESTRICTION,
|
| + COOKIE_PRIORITY_LOW)
|
| + .IsCanonical());
|
| +
|
| + // Insecure host cookie.
|
| + EXPECT_FALSE(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(), true, 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(), true, 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(), true, false,
|
| + CookieSameSite::NO_RESTRICTION,
|
| + COOKIE_PRIORITY_LOW)
|
| + .IsCanonical());
|
| +
|
| + // Properly formatted secure cookie.
|
| + EXPECT_TRUE(CanonicalCookie("__Secure-A", "B", "x.y", "/", base::Time(),
|
| + base::Time(), base::Time(), true, false,
|
| + CookieSameSite::NO_RESTRICTION,
|
| + COOKIE_PRIORITY_LOW)
|
| + .IsCanonical());
|
| +
|
| + // Insecure secure cookie.
|
| + EXPECT_FALSE(CanonicalCookie("__Secure-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";
|
|
|