15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/canonical_cookie.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/cookies/cookie_constants.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/cookies/cookie_options.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(CanonicalCookieTest, GetCookieSourceFromURL) {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://example.com/",
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            CanonicalCookie::GetCookieSourceFromURL(
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                GURL("http://example.com")));
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://example.com/",
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            CanonicalCookie::GetCookieSourceFromURL(
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                GURL("http://example.com/")));
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://example.com/",
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            CanonicalCookie::GetCookieSourceFromURL(
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                GURL("http://example.com/test")));
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("file:///tmp/test.html",
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            CanonicalCookie::GetCookieSourceFromURL(
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                GURL("file:///tmp/test.html")));
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://example.com/",
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            CanonicalCookie::GetCookieSourceFromURL(
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                GURL("http://example.com:1234/")));
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://example.com/",
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            CanonicalCookie::GetCookieSourceFromURL(
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                GURL("https://example.com/")));
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://example.com/",
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            CanonicalCookie::GetCookieSourceFromURL(
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                GURL("http://user:pwd@example.com/")));
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://example.com/",
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            CanonicalCookie::GetCookieSourceFromURL(
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                GURL("http://example.com/test?foo")));
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://example.com/",
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            CanonicalCookie::GetCookieSourceFromURL(
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                GURL("http://example.com/test#foo")));
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(CanonicalCookieTest, Constructor) {
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GURL url("http://www.example.com/test");
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::Time current_time = base::Time::Now();
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CanonicalCookie cookie(url, "A", "2", "www.example.com", "/test",
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                         current_time, base::Time(), current_time, false, false,
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                         COOKIE_PRIORITY_DEFAULT);
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(url.GetOrigin().spec(), cookie.Source());
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("A", cookie.Name());
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("2", cookie.Value());
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("www.example.com", cookie.Domain());
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("/test", cookie.Path());
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie.IsSecure());
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CanonicalCookie cookie2(url,
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                          "A",
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                          "2",
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                          std::string(),
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                          std::string(),
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                          current_time,
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                          base::Time(),
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                          current_time,
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                          false,
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                          false,
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                          COOKIE_PRIORITY_DEFAULT);
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(url.GetOrigin().spec(), cookie.Source());
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("A", cookie2.Name());
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("2", cookie2.Value());
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("", cookie2.Domain());
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("", cookie2.Path());
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie2.IsSecure());
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(CanonicalCookieTest, Create) {
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Test creating cookies from a cookie string.
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GURL url("http://www.example.com/test/foo.html");
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::Time creation_time = base::Time::Now();
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CookieOptions options;
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<CanonicalCookie> cookie(
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        CanonicalCookie::Create(url, "A=2", creation_time, options));
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(url.GetOrigin().spec(), cookie->Source());
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("A", cookie->Name());
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("2", cookie->Value());
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("www.example.com", cookie->Domain());
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("/test", cookie->Path());
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IsSecure());
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GURL url2("http://www.foo.com");
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cookie.reset(CanonicalCookie::Create(url2, "B=1", creation_time, options));
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(url2.GetOrigin().spec(), cookie->Source());
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("B", cookie->Name());
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("1", cookie->Value());
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("www.foo.com", cookie->Domain());
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("/", cookie->Path());
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IsSecure());
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Test creating secure cookies. RFC 6265 allows insecure urls to set secure
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // cookies.
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cookie.reset(
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      CanonicalCookie::Create(url, "A=2; Secure", creation_time, options));
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie.get());
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsSecure());
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Test creating http only cookies.
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cookie.reset(
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      CanonicalCookie::Create(url, "A=2; HttpOnly", creation_time, options));
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie.get());
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CookieOptions httponly_options;
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  httponly_options.set_include_httponly();
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cookie.reset(
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      CanonicalCookie::Create(url, "A=2; HttpOnly", creation_time,
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              httponly_options));
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsHttpOnly());
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Test the creating cookies using specific parameter instead of a cookie
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // string.
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cookie.reset(CanonicalCookie::Create(
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      url, "A", "2", "www.example.com", "/test", creation_time, base::Time(),
125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      false, false, COOKIE_PRIORITY_DEFAULT));
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(url.GetOrigin().spec(), cookie->Source());
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("A", cookie->Name());
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("2", cookie->Value());
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(".www.example.com", cookie->Domain());
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("/test", cookie->Path());
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IsSecure());
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cookie.reset(CanonicalCookie::Create(
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      url, "A", "2", ".www.example.com", "/test", creation_time, base::Time(),
135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      false, false, COOKIE_PRIORITY_DEFAULT));
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(url.GetOrigin().spec(), cookie->Source());
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("A", cookie->Name());
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("2", cookie->Value());
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(".www.example.com", cookie->Domain());
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("/test", cookie->Path());
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IsSecure());
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(CanonicalCookieTest, EmptyExpiry) {
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GURL url("http://www7.ipdl.inpit.go.jp/Tokujitu/tjkta.ipdl?N0000=108");
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::Time creation_time = base::Time::Now();
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CookieOptions options;
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string cookie_line =
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "ACSTM=20130308043820420042; path=/; domain=ipdl.inpit.go.jp; Expires=";
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<CanonicalCookie> cookie(CanonicalCookie::Create(
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      url, cookie_line, creation_time, options));
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie.get());
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IsPersistent());
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IsExpired(creation_time));
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(base::Time(), cookie->ExpiryDate());
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // With a stale server time
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  options.set_server_time(creation_time - base::TimeDelta::FromHours(1));
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cookie.reset(CanonicalCookie::Create(
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      url, cookie_line, creation_time, options));
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie.get());
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IsPersistent());
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IsExpired(creation_time));
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(base::Time(), cookie->ExpiryDate());
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // With a future server time
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  options.set_server_time(creation_time + base::TimeDelta::FromHours(1));
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cookie.reset(CanonicalCookie::Create(
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      url, cookie_line, creation_time, options));
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie.get());
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IsPersistent());
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IsExpired(creation_time));
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(base::Time(), cookie->ExpiryDate());
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(CanonicalCookieTest, IsEquivalent) {
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GURL url("http://www.example.com/");
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string cookie_name = "A";
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string cookie_value = "2EDA-EF";
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string cookie_domain = ".www.example.com";
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string cookie_path = "/";
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::Time creation_time = base::Time::Now();
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::Time last_access_time = creation_time;
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::Time expiration_time = creation_time + base::TimeDelta::FromDays(2);
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool secure(false);
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool httponly(false);
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Test that a cookie is equivalent to itself.
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<CanonicalCookie> cookie(
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      new CanonicalCookie(url, cookie_name, cookie_value, cookie_domain,
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                          cookie_path, creation_time, expiration_time,
193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                          last_access_time, secure, httponly,
194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                          COOKIE_PRIORITY_MEDIUM));
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsEquivalent(*cookie));
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Test that two identical cookies are equivalent.
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<CanonicalCookie> other_cookie(
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      new CanonicalCookie(url, cookie_name, cookie_value, cookie_domain,
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                          cookie_path, creation_time, expiration_time,
201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                          last_access_time, secure, httponly,
202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                          COOKIE_PRIORITY_MEDIUM));
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsEquivalent(*other_cookie));
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Tests that use different variations of attribute values that
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // DON'T affect cookie equivalence.
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  other_cookie.reset(new CanonicalCookie(url, cookie_name, "2", cookie_domain,
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         cookie_path, creation_time,
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         expiration_time, last_access_time,
210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                         secure, httponly,
211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                         COOKIE_PRIORITY_HIGH));
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsEquivalent(*other_cookie));
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::Time other_creation_time =
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      creation_time + base::TimeDelta::FromMinutes(2);
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  other_cookie.reset(new CanonicalCookie(url, cookie_name, "2", cookie_domain,
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         cookie_path, other_creation_time,
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         expiration_time, last_access_time,
219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                         secure, httponly,
220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                         COOKIE_PRIORITY_MEDIUM));
2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsEquivalent(*other_cookie));
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  other_cookie.reset(new CanonicalCookie(url, cookie_name, cookie_name,
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         cookie_domain, cookie_path,
2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         creation_time, expiration_time,
226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                         last_access_time, true, httponly,
227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                         COOKIE_PRIORITY_LOW));
2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsEquivalent(*other_cookie));
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Tests that use different variations of attribute values that
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // DO affect cookie equivalence.
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  other_cookie.reset(new CanonicalCookie(url, "B", cookie_value, cookie_domain,
2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         cookie_path, creation_time,
2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         expiration_time, last_access_time,
235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                         secure, httponly,
236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                         COOKIE_PRIORITY_MEDIUM));
2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IsEquivalent(*other_cookie));
2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  other_cookie.reset(new CanonicalCookie(url, cookie_name, cookie_value,
2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         "www.example.com", cookie_path,
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         creation_time, expiration_time,
242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                         last_access_time, secure, httponly,
243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                         COOKIE_PRIORITY_MEDIUM));
2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsDomainCookie());
2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(other_cookie->IsDomainCookie());
2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IsEquivalent(*other_cookie));
2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  other_cookie.reset(new CanonicalCookie(url, cookie_name, cookie_value,
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         ".example.com", cookie_path,
2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         creation_time, expiration_time,
251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                         last_access_time, secure, httponly,
252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                         COOKIE_PRIORITY_MEDIUM));
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IsEquivalent(*other_cookie));
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  other_cookie.reset(new CanonicalCookie(url, cookie_name, cookie_value,
2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         cookie_domain, "/test/0",
2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         creation_time, expiration_time,
258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                         last_access_time, secure, httponly,
259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                         COOKIE_PRIORITY_MEDIUM));
2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IsEquivalent(*other_cookie));
2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(CanonicalCookieTest, IsDomainMatch) {
2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GURL url("http://www.example.com/test/foo.html");
2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::Time creation_time = base::Time::Now();
2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CookieOptions options;
2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<CanonicalCookie> cookie(
2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      CanonicalCookie::Create(url, "A=2", creation_time, options));
2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsHostCookie());
2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsDomainMatch("www.example.com"));
2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsDomainMatch("www.example.com"));
2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IsDomainMatch("foo.www.example.com"));
2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IsDomainMatch("www0.example.com"));
2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IsDomainMatch("example.com"));
2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cookie.reset(
2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      CanonicalCookie::Create(url, "A=2; Domain=www.example.com", creation_time,
2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              options));
2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsDomainCookie());
2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsDomainMatch("www.example.com"));
2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsDomainMatch("www.example.com"));
2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsDomainMatch("foo.www.example.com"));
2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IsDomainMatch("www0.example.com"));
2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IsDomainMatch("example.com"));
2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cookie.reset(
2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      CanonicalCookie::Create(url, "A=2; Domain=.www.example.com",
2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              creation_time, options));
2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsDomainMatch("www.example.com"));
2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsDomainMatch("www.example.com"));
2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsDomainMatch("foo.www.example.com"));
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IsDomainMatch("www0.example.com"));
2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IsDomainMatch("example.com"));
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(CanonicalCookieTest, IsOnPath) {
2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::Time creation_time = base::Time::Now();
2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CookieOptions options;
3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<CanonicalCookie> cookie(
3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      CanonicalCookie::Create(GURL("http://www.example.com"),
3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              "A=2", creation_time, options));
3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsOnPath("/"));
3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsOnPath("/test"));
3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsOnPath("/test/bar.html"));
3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Test the empty string edge case.
309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FALSE(cookie->IsOnPath(std::string()));
3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cookie.reset(
3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      CanonicalCookie::Create(GURL("http://www.example.com/test/foo.html"),
3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              "A=2", creation_time, options));
3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IsOnPath("/"));
3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsOnPath("/test"));
3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsOnPath("/test/bar.html"));
3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsOnPath("/test/sample/bar.html"));
3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(CanonicalCookieTest, IncludeForRequestURL) {
3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GURL url("http://www.example.com");
3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::Time creation_time = base::Time::Now();
3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CookieOptions options;
3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<CanonicalCookie> cookie(
3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      CanonicalCookie::Create(url, "A=2", creation_time, options));
3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IncludeForRequestURL(url, options));
3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IncludeForRequestURL(
3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GURL("http://www.example.com/foo/bar"), options));
3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IncludeForRequestURL(
3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GURL("https://www.example.com/foo/bar"), options));
3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IncludeForRequestURL(GURL("https://sub.example.com"),
3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                            options));
3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IncludeForRequestURL(GURL("https://sub.www.example.com"),
3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                            options));
3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Test that cookie with a cookie path that does not match the url path are
3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // not included.
3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cookie.reset(CanonicalCookie::Create(url, "A=2; Path=/foo/bar", creation_time,
3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                       options));
3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IncludeForRequestURL(url, options));
3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IncludeForRequestURL(
3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GURL("http://www.example.com/foo/bar/index.html"), options));
3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Test that a secure cookie is not included for a non secure URL.
3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GURL secure_url("https://www.example.com");
3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cookie.reset(CanonicalCookie::Create(secure_url, "A=2; Secure", creation_time,
3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                       options));
3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsSecure());
3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IncludeForRequestURL(secure_url, options));
3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IncludeForRequestURL(url, options));
3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Test that http only cookies are only included if the include httponly flag
3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // is set on the cookie options.
3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  options.set_include_httponly();
3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cookie.reset(
3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      CanonicalCookie::Create(url, "A=2; HttpOnly", creation_time, options));
3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IsHttpOnly());
3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(cookie->IncludeForRequestURL(url, options));
3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  options.set_exclude_httponly();
3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(cookie->IncludeForRequestURL(url, options));
3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace net
365