Index: net/cookies/parsed_cookie_unittest.cc |
diff --git a/net/cookies/parsed_cookie_unittest.cc b/net/cookies/parsed_cookie_unittest.cc |
index 27efb99adfcea226c2a12a378b89feda74a7c408..61a7d0454d61667ef14126f082439e6153800d47 100644 |
--- a/net/cookies/parsed_cookie_unittest.cc |
+++ b/net/cookies/parsed_cookie_unittest.cc |
@@ -18,19 +18,29 @@ TEST(ParsedCookieTest, TestBasic) { |
EXPECT_EQ("b", pc.Value()); |
} |
+// De facto standard behavior, per https://crbug.com/601786. |
TEST(ParsedCookieTest, TestEmpty) { |
- ParsedCookie pc1("=; path=/; secure;"); |
- EXPECT_FALSE(pc1.IsValid()); |
- ParsedCookie pc2("= ; path=/; secure;"); |
- EXPECT_FALSE(pc2.IsValid()); |
- ParsedCookie pc3(" =; path=/; secure;"); |
- EXPECT_FALSE(pc3.IsValid()); |
- ParsedCookie pc4(" = ; path=/; secure;"); |
- EXPECT_FALSE(pc4.IsValid()); |
- ParsedCookie pc5(" ; path=/; secure;"); |
- EXPECT_FALSE(pc5.IsValid()); |
- ParsedCookie pc6("; path=/; secure;"); |
- EXPECT_FALSE(pc6.IsValid()); |
+ const struct { |
+ const char* cookie; |
+ const char* expected_path; |
+ bool expect_secure; |
+ } kTestCookieLines[]{{"", "", false}, {" ", "", false}, |
+ {"=;", "", false}, {"=; path=/; secure;", "/", true}, |
+ {"= ;", "", false}, {"= ; path=/; secure;", "/", true}, |
+ {" =;", "", false}, {" =; path=/; secure;", "/", true}, |
+ {" = ;", "", false}, {" = ; path=/; secure;", "/", true}, |
+ {" ;", "", false}, {" ; path=/; secure;", "/", true}, |
+ {";", "", false}, {"; path=/; secure;", "/", true}, |
+ {"\t;", "", false}, {"\t; path=/; secure;", "/", true}}; |
+ |
+ for (const auto& test : kTestCookieLines) { |
+ ParsedCookie pc(test.cookie); |
+ EXPECT_TRUE(pc.IsValid()); |
+ EXPECT_EQ("", pc.Name()); |
+ EXPECT_EQ("", pc.Value()); |
+ EXPECT_EQ(test.expected_path, pc.Path()); |
+ EXPECT_EQ(test.expect_secure, pc.IsSecure()); |
+ } |
} |
TEST(ParsedCookieTest, TestQuoted) { |
@@ -221,11 +231,6 @@ TEST(ParsedCookieTest, TooManyPairs) { |
} |
// TODO(erikwright): some better test cases for invalid cookies. |
-TEST(ParsedCookieTest, InvalidWhitespace) { |
- ParsedCookie pc(" "); |
- EXPECT_FALSE(pc.IsValid()); |
-} |
- |
TEST(ParsedCookieTest, InvalidTooLong) { |
std::string maxstr; |
maxstr.resize(ParsedCookie::kMaxCookieSize, 'a'); |
@@ -237,11 +242,6 @@ TEST(ParsedCookieTest, InvalidTooLong) { |
EXPECT_FALSE(pc2.IsValid()); |
} |
-TEST(ParsedCookieTest, InvalidEmpty) { |
- ParsedCookie pc((std::string())); |
- EXPECT_FALSE(pc.IsValid()); |
-} |
- |
TEST(ParsedCookieTest, EmbeddedTerminator) { |
ParsedCookie pc1("AAA=BB\0ZYX"); |
ParsedCookie pc2("AAA=BB\rZYX"); |
@@ -285,11 +285,11 @@ TEST(ParsedCookieTest, SerializeCookieLine) { |
TEST(ParsedCookieTest, SetNameAndValue) { |
ParsedCookie empty((std::string())); |
- EXPECT_FALSE(empty.IsValid()); |
- EXPECT_FALSE(empty.SetDomain("foobar.com")); |
+ EXPECT_TRUE(empty.IsValid()); |
+ EXPECT_TRUE(empty.SetDomain("foobar.com")); |
EXPECT_TRUE(empty.SetName("name")); |
EXPECT_TRUE(empty.SetValue("value")); |
- EXPECT_EQ("name=value", empty.ToCookieLine()); |
+ EXPECT_EQ("name=value; domain=foobar.com", empty.ToCookieLine()); |
EXPECT_TRUE(empty.IsValid()); |
// We don't test |
@@ -307,10 +307,6 @@ TEST(ParsedCookieTest, SetNameAndValue) { |
EXPECT_EQ("name=value", pc.ToCookieLine()); |
EXPECT_TRUE(pc.IsValid()); |
- EXPECT_FALSE(pc.SetName(std::string())); |
- EXPECT_EQ("name=value", pc.ToCookieLine()); |
- EXPECT_TRUE(pc.IsValid()); |
- |
EXPECT_FALSE(pc.SetValue("foo bar")); |
EXPECT_EQ("name=value", pc.ToCookieLine()); |
EXPECT_TRUE(pc.IsValid()); |
@@ -320,6 +316,10 @@ TEST(ParsedCookieTest, SetNameAndValue) { |
EXPECT_TRUE(pc.IsValid()); |
// Set valid name / value |
+ EXPECT_TRUE(pc.SetName(std::string())); |
+ EXPECT_EQ("=value", pc.ToCookieLine()); |
+ EXPECT_TRUE(pc.IsValid()); |
+ |
EXPECT_TRUE(pc.SetName("test")); |
EXPECT_EQ("test=value", pc.ToCookieLine()); |
EXPECT_TRUE(pc.IsValid()); |
@@ -415,6 +415,17 @@ TEST(ParsedCookieTest, SetAttributes) { |
EXPECT_EQ("name2=value2", pc.ToCookieLine()); |
} |
+// Set the domain attribute twice in a cookie line. If the second attribute's |
+// value is empty, it shoud be ignored. |
+// |
+// This is de facto standard behavior, per https://crbug.com/601786. |
+TEST(ParsedCookieTest, MultipleDomainAttributes) { |
+ ParsedCookie pc1("name=value; domain=foo.com; domain=bar.com"); |
+ EXPECT_EQ("bar.com", pc1.Domain()); |
+ ParsedCookie pc2("name=value; domain=foo.com; domain="); |
+ EXPECT_EQ("foo.com", pc2.Domain()); |
+} |
+ |
TEST(ParsedCookieTest, SetPriority) { |
ParsedCookie pc("name=value"); |
EXPECT_TRUE(pc.IsValid()); |