| Index: net/cookies/parsed_cookie_unittest.cc
|
| diff --git a/net/cookies/parsed_cookie_unittest.cc b/net/cookies/parsed_cookie_unittest.cc
|
| index 7b6d562263d8e4a3cb097c99f90b9ba0536e5aa9..68ead27cfb303eed80b9c34c3673170fb6d6554a 100644
|
| --- a/net/cookies/parsed_cookie_unittest.cc
|
| +++ b/net/cookies/parsed_cookie_unittest.cc
|
| @@ -275,4 +275,142 @@ TEST(ParsedCookieTest, ParseTokensAndValues) {
|
| ParsedCookie::ParseValueString("A=B=C;D=E"));
|
| }
|
|
|
| +TEST(ParsedCookieTest, SerializeCookieLine) {
|
| + const char input[] = "ANCUUID=zohNumRKgI0oxyhSsV3Z7D ; "
|
| + "expires=Sun, 18-Apr-2027 21:06:29 GMT ; "
|
| + "path=/ ; ";
|
| + const char output[] = "ANCUUID=zohNumRKgI0oxyhSsV3Z7D; "
|
| + "expires=Sun, 18-Apr-2027 21:06:29 GMT; "
|
| + "path=/";
|
| + ParsedCookie pc(input);
|
| + EXPECT_EQ(output, pc.ToCookieLine());
|
| +}
|
| +
|
| +
|
| +TEST(ParsedCookieTest, SetNameAndValue) {
|
| + ParsedCookie empty("");
|
| + EXPECT_FALSE(empty.IsValid());
|
| + EXPECT_FALSE(empty.SetDomain("foobar.com"));
|
| + EXPECT_TRUE(empty.SetName("name"));
|
| + EXPECT_TRUE(empty.SetValue("value"));
|
| + EXPECT_EQ("name=value", empty.ToCookieLine());
|
| + EXPECT_TRUE(empty.IsValid());
|
| +
|
| + // We don't test
|
| + // ParsedCookie invalid("@foo=bar");
|
| + // EXPECT_FALSE(invalid.IsValid());
|
| + // here because we are slightly more tolerant to invalid cookie names and
|
| + // values that are set by webservers. We only enforce a correct name and
|
| + // value if set via SetName() and SetValue().
|
| +
|
| + ParsedCookie pc("name=value");
|
| + EXPECT_TRUE(pc.IsValid());
|
| +
|
| + // Set invalid name / value.
|
| + EXPECT_FALSE(pc.SetName("@foobar"));
|
| + EXPECT_EQ("name=value", pc.ToCookieLine());
|
| + EXPECT_TRUE(pc.IsValid());
|
| +
|
| + EXPECT_FALSE(pc.SetName(""));
|
| + 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());
|
| +
|
| + EXPECT_FALSE(pc.SetValue("\"foobar"));
|
| + EXPECT_EQ("name=value", pc.ToCookieLine());
|
| + EXPECT_TRUE(pc.IsValid());
|
| +
|
| + // Set valid name / value
|
| + EXPECT_TRUE(pc.SetName("test"));
|
| + EXPECT_EQ("test=value", pc.ToCookieLine());
|
| + EXPECT_TRUE(pc.IsValid());
|
| +
|
| + EXPECT_TRUE(pc.SetValue("\"foobar\""));
|
| + EXPECT_EQ("test=\"foobar\"", pc.ToCookieLine());
|
| + EXPECT_TRUE(pc.IsValid());
|
| +
|
| + EXPECT_TRUE(pc.SetValue(""));
|
| + EXPECT_EQ("test=", pc.ToCookieLine());
|
| + EXPECT_TRUE(pc.IsValid());
|
| +}
|
| +
|
| +TEST(ParsedCookieTest, SetAttributes) {
|
| + ParsedCookie pc("name=value");
|
| + EXPECT_TRUE(pc.IsValid());
|
| +
|
| + // Clear an unset attribute.
|
| + EXPECT_TRUE(pc.SetDomain(""));
|
| + EXPECT_FALSE(pc.HasDomain());
|
| + EXPECT_EQ("name=value", pc.ToCookieLine());
|
| + EXPECT_TRUE(pc.IsValid());
|
| +
|
| + // Set a string containing an invalid character
|
| + EXPECT_FALSE(pc.SetDomain("foo;bar"));
|
| + EXPECT_FALSE(pc.HasDomain());
|
| + EXPECT_EQ("name=value", pc.ToCookieLine());
|
| + EXPECT_TRUE(pc.IsValid());
|
| +
|
| + // Set all other attributes and check that they are appended in order.
|
| + EXPECT_TRUE(pc.SetDomain("domain.com"));
|
| + EXPECT_TRUE(pc.SetPath("/"));
|
| + EXPECT_TRUE(pc.SetMACKey("mackey"));
|
| + EXPECT_TRUE(pc.SetMACAlgorithm("\"macalgorithm\""));
|
| + EXPECT_TRUE(pc.SetExpires("Sun, 18-Apr-2027 21:06:29 GMT"));
|
| + EXPECT_TRUE(pc.SetMaxAge("12345"));
|
| + EXPECT_TRUE(pc.SetIsSecure(true));
|
| + EXPECT_TRUE(pc.SetIsHttpOnly(true));
|
| + EXPECT_EQ("name=value; domain=domain.com; path=/; mac-key=mackey; "
|
| + "mac-algorithm=\"macalgorithm\"; "
|
| + "expires=Sun, 18-Apr-2027 21:06:29 GMT; max-age=12345; secure; "
|
| + "httponly",
|
| + pc.ToCookieLine());
|
| + EXPECT_TRUE(pc.HasDomain());
|
| + EXPECT_TRUE(pc.HasPath());
|
| + EXPECT_TRUE(pc.HasMACKey());
|
| + EXPECT_TRUE(pc.HasMACAlgorithm());
|
| + EXPECT_TRUE(pc.HasExpires());
|
| + EXPECT_TRUE(pc.HasMaxAge());
|
| + EXPECT_TRUE(pc.IsSecure());
|
| + EXPECT_TRUE(pc.IsHttpOnly());
|
| +
|
| + // Clear one attribute from the middle.
|
| + EXPECT_TRUE(pc.SetMACAlgorithm(""));
|
| + EXPECT_TRUE(pc.HasDomain());
|
| + EXPECT_TRUE(pc.HasPath());
|
| + EXPECT_TRUE(pc.HasMACKey());
|
| + EXPECT_FALSE(pc.HasMACAlgorithm());
|
| + EXPECT_TRUE(pc.HasExpires());
|
| + EXPECT_TRUE(pc.HasMaxAge());
|
| + EXPECT_TRUE(pc.IsSecure());
|
| + EXPECT_TRUE(pc.IsHttpOnly());
|
| + EXPECT_EQ("name=value; domain=domain.com; path=/; mac-key=mackey; "
|
| + "expires=Sun, 18-Apr-2027 21:06:29 GMT; max-age=12345; secure; "
|
| + "httponly",
|
| + pc.ToCookieLine());
|
| +
|
| + // Clear the rest and change the name and value.
|
| + EXPECT_TRUE(pc.SetDomain(""));
|
| + EXPECT_TRUE(pc.SetPath(""));
|
| + EXPECT_TRUE(pc.SetMACKey(""));
|
| + EXPECT_TRUE(pc.SetMACAlgorithm(""));
|
| + EXPECT_TRUE(pc.SetExpires(""));
|
| + EXPECT_TRUE(pc.SetMaxAge(""));
|
| + EXPECT_TRUE(pc.SetIsSecure(false));
|
| + EXPECT_TRUE(pc.SetIsHttpOnly(false));
|
| + EXPECT_TRUE(pc.SetName("name2"));
|
| + EXPECT_TRUE(pc.SetValue("value2"));
|
| + EXPECT_FALSE(pc.HasDomain());
|
| + EXPECT_FALSE(pc.HasPath());
|
| + EXPECT_FALSE(pc.HasMACKey());
|
| + EXPECT_FALSE(pc.HasMACAlgorithm());
|
| + EXPECT_FALSE(pc.HasExpires());
|
| + EXPECT_FALSE(pc.HasMaxAge());
|
| + EXPECT_FALSE(pc.IsSecure());
|
| + EXPECT_FALSE(pc.IsHttpOnly());
|
| + EXPECT_EQ("name2=value2", pc.ToCookieLine());
|
| +}
|
| +
|
| } // namespace net
|
|
|