| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/cookies/canonical_cookie.h" | 5 #include "net/cookies/canonical_cookie.h" |
| 6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "base/test/histogram_tester.h" | 8 #include "base/test/histogram_tester.h" |
| 9 #include "net/cookies/cookie_constants.h" | 9 #include "net/cookies/cookie_constants.h" |
| 10 #include "net/cookies/cookie_options.h" | 10 #include "net/cookies/cookie_options.h" |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 scoped_ptr<CanonicalCookie> cookie( | 51 scoped_ptr<CanonicalCookie> cookie( |
| 52 CanonicalCookie::Create(url, "A=2", creation_time, options)); | 52 CanonicalCookie::Create(url, "A=2", creation_time, options)); |
| 53 EXPECT_EQ(url.GetOrigin(), cookie->Source()); | 53 EXPECT_EQ(url.GetOrigin(), cookie->Source()); |
| 54 EXPECT_EQ("A", cookie->Name()); | 54 EXPECT_EQ("A", cookie->Name()); |
| 55 EXPECT_EQ("2", cookie->Value()); | 55 EXPECT_EQ("2", cookie->Value()); |
| 56 EXPECT_EQ("www.example.com", cookie->Domain()); | 56 EXPECT_EQ("www.example.com", cookie->Domain()); |
| 57 EXPECT_EQ("/test", cookie->Path()); | 57 EXPECT_EQ("/test", cookie->Path()); |
| 58 EXPECT_FALSE(cookie->IsSecure()); | 58 EXPECT_FALSE(cookie->IsSecure()); |
| 59 | 59 |
| 60 GURL url2("http://www.foo.com"); | 60 GURL url2("http://www.foo.com"); |
| 61 cookie.reset(CanonicalCookie::Create(url2, "B=1", creation_time, options)); | 61 cookie = CanonicalCookie::Create(url2, "B=1", creation_time, options); |
| 62 EXPECT_EQ(url2.GetOrigin(), cookie->Source()); | 62 EXPECT_EQ(url2.GetOrigin(), cookie->Source()); |
| 63 EXPECT_EQ("B", cookie->Name()); | 63 EXPECT_EQ("B", cookie->Name()); |
| 64 EXPECT_EQ("1", cookie->Value()); | 64 EXPECT_EQ("1", cookie->Value()); |
| 65 EXPECT_EQ("www.foo.com", cookie->Domain()); | 65 EXPECT_EQ("www.foo.com", cookie->Domain()); |
| 66 EXPECT_EQ("/", cookie->Path()); | 66 EXPECT_EQ("/", cookie->Path()); |
| 67 EXPECT_FALSE(cookie->IsSecure()); | 67 EXPECT_FALSE(cookie->IsSecure()); |
| 68 | 68 |
| 69 // Test creating secure cookies. RFC 6265 allows insecure urls to set secure | 69 // Test creating secure cookies. RFC 6265 allows insecure urls to set secure |
| 70 // cookies. | 70 // cookies. |
| 71 cookie.reset( | 71 cookie = CanonicalCookie::Create(url, "A=2; Secure", creation_time, options); |
| 72 CanonicalCookie::Create(url, "A=2; Secure", creation_time, options)); | |
| 73 EXPECT_TRUE(cookie.get()); | 72 EXPECT_TRUE(cookie.get()); |
| 74 EXPECT_TRUE(cookie->IsSecure()); | 73 EXPECT_TRUE(cookie->IsSecure()); |
| 75 | 74 |
| 76 // Test creating http only cookies. | 75 // Test creating http only cookies. |
| 77 cookie.reset( | 76 cookie = |
| 78 CanonicalCookie::Create(url, "A=2; HttpOnly", creation_time, options)); | 77 CanonicalCookie::Create(url, "A=2; HttpOnly", creation_time, options); |
| 79 EXPECT_FALSE(cookie.get()); | 78 EXPECT_FALSE(cookie.get()); |
| 80 CookieOptions httponly_options; | 79 CookieOptions httponly_options; |
| 81 httponly_options.set_include_httponly(); | 80 httponly_options.set_include_httponly(); |
| 82 cookie.reset(CanonicalCookie::Create(url, "A=2; HttpOnly", creation_time, | 81 cookie = CanonicalCookie::Create(url, "A=2; HttpOnly", creation_time, |
| 83 httponly_options)); | 82 httponly_options); |
| 84 EXPECT_TRUE(cookie->IsHttpOnly()); | 83 EXPECT_TRUE(cookie->IsHttpOnly()); |
| 85 | 84 |
| 86 // Test creating http only cookies. | 85 // Test creating http only cookies. |
| 87 CookieOptions first_party_options; | 86 CookieOptions first_party_options; |
| 88 first_party_options.set_include_first_party_only_cookies(); | 87 first_party_options.set_include_first_party_only_cookies(); |
| 89 cookie.reset(CanonicalCookie::Create(url, "A=2; First-Party-Only", | 88 cookie = CanonicalCookie::Create(url, "A=2; First-Party-Only", creation_time, |
| 90 creation_time, httponly_options)); | 89 httponly_options); |
| 91 EXPECT_TRUE(cookie.get()); | 90 EXPECT_TRUE(cookie.get()); |
| 92 EXPECT_TRUE(cookie->IsFirstPartyOnly()); | 91 EXPECT_TRUE(cookie->IsFirstPartyOnly()); |
| 93 | 92 |
| 94 // Test the creating cookies using specific parameter instead of a cookie | 93 // Test the creating cookies using specific parameter instead of a cookie |
| 95 // string. | 94 // string. |
| 96 cookie.reset(CanonicalCookie::Create( | 95 cookie = CanonicalCookie::Create(url, "A", "2", "www.example.com", "/test", |
| 97 url, "A", "2", "www.example.com", "/test", creation_time, base::Time(), | 96 creation_time, base::Time(), false, false, |
| 98 false, false, false, false, COOKIE_PRIORITY_DEFAULT)); | 97 false, false, COOKIE_PRIORITY_DEFAULT); |
| 99 EXPECT_EQ(url.GetOrigin(), cookie->Source()); | 98 EXPECT_EQ(url.GetOrigin(), cookie->Source()); |
| 100 EXPECT_EQ("A", cookie->Name()); | 99 EXPECT_EQ("A", cookie->Name()); |
| 101 EXPECT_EQ("2", cookie->Value()); | 100 EXPECT_EQ("2", cookie->Value()); |
| 102 EXPECT_EQ(".www.example.com", cookie->Domain()); | 101 EXPECT_EQ(".www.example.com", cookie->Domain()); |
| 103 EXPECT_EQ("/test", cookie->Path()); | 102 EXPECT_EQ("/test", cookie->Path()); |
| 104 EXPECT_FALSE(cookie->IsSecure()); | 103 EXPECT_FALSE(cookie->IsSecure()); |
| 105 EXPECT_FALSE(cookie->IsHttpOnly()); | 104 EXPECT_FALSE(cookie->IsHttpOnly()); |
| 106 EXPECT_FALSE(cookie->IsFirstPartyOnly()); | 105 EXPECT_FALSE(cookie->IsFirstPartyOnly()); |
| 107 | 106 |
| 108 cookie.reset(CanonicalCookie::Create( | 107 cookie = CanonicalCookie::Create(url, "A", "2", ".www.example.com", "/test", |
| 109 url, "A", "2", ".www.example.com", "/test", creation_time, base::Time(), | 108 creation_time, base::Time(), false, false, |
| 110 false, false, false, false, COOKIE_PRIORITY_DEFAULT)); | 109 false, false, COOKIE_PRIORITY_DEFAULT); |
| 111 EXPECT_EQ(url.GetOrigin(), cookie->Source()); | 110 EXPECT_EQ(url.GetOrigin(), cookie->Source()); |
| 112 EXPECT_EQ("A", cookie->Name()); | 111 EXPECT_EQ("A", cookie->Name()); |
| 113 EXPECT_EQ("2", cookie->Value()); | 112 EXPECT_EQ("2", cookie->Value()); |
| 114 EXPECT_EQ(".www.example.com", cookie->Domain()); | 113 EXPECT_EQ(".www.example.com", cookie->Domain()); |
| 115 EXPECT_EQ("/test", cookie->Path()); | 114 EXPECT_EQ("/test", cookie->Path()); |
| 116 EXPECT_FALSE(cookie->IsSecure()); | 115 EXPECT_FALSE(cookie->IsSecure()); |
| 117 EXPECT_FALSE(cookie->IsHttpOnly()); | 116 EXPECT_FALSE(cookie->IsHttpOnly()); |
| 118 EXPECT_FALSE(cookie->IsFirstPartyOnly()); | 117 EXPECT_FALSE(cookie->IsFirstPartyOnly()); |
| 119 } | 118 } |
| 120 | 119 |
| 121 TEST(CanonicalCookieTest, EmptyExpiry) { | 120 TEST(CanonicalCookieTest, EmptyExpiry) { |
| 122 GURL url("http://www7.ipdl.inpit.go.jp/Tokujitu/tjkta.ipdl?N0000=108"); | 121 GURL url("http://www7.ipdl.inpit.go.jp/Tokujitu/tjkta.ipdl?N0000=108"); |
| 123 base::Time creation_time = base::Time::Now(); | 122 base::Time creation_time = base::Time::Now(); |
| 124 CookieOptions options; | 123 CookieOptions options; |
| 125 | 124 |
| 126 std::string cookie_line = | 125 std::string cookie_line = |
| 127 "ACSTM=20130308043820420042; path=/; domain=ipdl.inpit.go.jp; Expires="; | 126 "ACSTM=20130308043820420042; path=/; domain=ipdl.inpit.go.jp; Expires="; |
| 128 scoped_ptr<CanonicalCookie> cookie( | 127 scoped_ptr<CanonicalCookie> cookie( |
| 129 CanonicalCookie::Create(url, cookie_line, creation_time, options)); | 128 CanonicalCookie::Create(url, cookie_line, creation_time, options)); |
| 130 EXPECT_TRUE(cookie.get()); | 129 EXPECT_TRUE(cookie.get()); |
| 131 EXPECT_FALSE(cookie->IsPersistent()); | 130 EXPECT_FALSE(cookie->IsPersistent()); |
| 132 EXPECT_FALSE(cookie->IsExpired(creation_time)); | 131 EXPECT_FALSE(cookie->IsExpired(creation_time)); |
| 133 EXPECT_EQ(base::Time(), cookie->ExpiryDate()); | 132 EXPECT_EQ(base::Time(), cookie->ExpiryDate()); |
| 134 | 133 |
| 135 // With a stale server time | 134 // With a stale server time |
| 136 options.set_server_time(creation_time - base::TimeDelta::FromHours(1)); | 135 options.set_server_time(creation_time - base::TimeDelta::FromHours(1)); |
| 137 cookie.reset( | 136 cookie = CanonicalCookie::Create(url, cookie_line, creation_time, options); |
| 138 CanonicalCookie::Create(url, cookie_line, creation_time, options)); | |
| 139 EXPECT_TRUE(cookie.get()); | 137 EXPECT_TRUE(cookie.get()); |
| 140 EXPECT_FALSE(cookie->IsPersistent()); | 138 EXPECT_FALSE(cookie->IsPersistent()); |
| 141 EXPECT_FALSE(cookie->IsExpired(creation_time)); | 139 EXPECT_FALSE(cookie->IsExpired(creation_time)); |
| 142 EXPECT_EQ(base::Time(), cookie->ExpiryDate()); | 140 EXPECT_EQ(base::Time(), cookie->ExpiryDate()); |
| 143 | 141 |
| 144 // With a future server time | 142 // With a future server time |
| 145 options.set_server_time(creation_time + base::TimeDelta::FromHours(1)); | 143 options.set_server_time(creation_time + base::TimeDelta::FromHours(1)); |
| 146 cookie.reset( | 144 cookie = CanonicalCookie::Create(url, cookie_line, creation_time, options); |
| 147 CanonicalCookie::Create(url, cookie_line, creation_time, options)); | |
| 148 EXPECT_TRUE(cookie.get()); | 145 EXPECT_TRUE(cookie.get()); |
| 149 EXPECT_FALSE(cookie->IsPersistent()); | 146 EXPECT_FALSE(cookie->IsPersistent()); |
| 150 EXPECT_FALSE(cookie->IsExpired(creation_time)); | 147 EXPECT_FALSE(cookie->IsExpired(creation_time)); |
| 151 EXPECT_EQ(base::Time(), cookie->ExpiryDate()); | 148 EXPECT_EQ(base::Time(), cookie->ExpiryDate()); |
| 152 } | 149 } |
| 153 | 150 |
| 154 TEST(CanonicalCookieTest, IsEquivalent) { | 151 TEST(CanonicalCookieTest, IsEquivalent) { |
| 155 GURL url("http://www.example.com/"); | 152 GURL url("http://www.example.com/"); |
| 156 std::string cookie_name = "A"; | 153 std::string cookie_name = "A"; |
| 157 std::string cookie_value = "2EDA-EF"; | 154 std::string cookie_value = "2EDA-EF"; |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 346 | 343 |
| 347 scoped_ptr<CanonicalCookie> cookie( | 344 scoped_ptr<CanonicalCookie> cookie( |
| 348 CanonicalCookie::Create(url, "A=2", creation_time, options)); | 345 CanonicalCookie::Create(url, "A=2", creation_time, options)); |
| 349 EXPECT_TRUE(cookie->IsHostCookie()); | 346 EXPECT_TRUE(cookie->IsHostCookie()); |
| 350 EXPECT_TRUE(cookie->IsDomainMatch("www.example.com")); | 347 EXPECT_TRUE(cookie->IsDomainMatch("www.example.com")); |
| 351 EXPECT_TRUE(cookie->IsDomainMatch("www.example.com")); | 348 EXPECT_TRUE(cookie->IsDomainMatch("www.example.com")); |
| 352 EXPECT_FALSE(cookie->IsDomainMatch("foo.www.example.com")); | 349 EXPECT_FALSE(cookie->IsDomainMatch("foo.www.example.com")); |
| 353 EXPECT_FALSE(cookie->IsDomainMatch("www0.example.com")); | 350 EXPECT_FALSE(cookie->IsDomainMatch("www0.example.com")); |
| 354 EXPECT_FALSE(cookie->IsDomainMatch("example.com")); | 351 EXPECT_FALSE(cookie->IsDomainMatch("example.com")); |
| 355 | 352 |
| 356 cookie.reset(CanonicalCookie::Create(url, "A=2; Domain=www.example.com", | 353 cookie = CanonicalCookie::Create(url, "A=2; Domain=www.example.com", |
| 357 creation_time, options)); | 354 creation_time, options); |
| 358 EXPECT_TRUE(cookie->IsDomainCookie()); | 355 EXPECT_TRUE(cookie->IsDomainCookie()); |
| 359 EXPECT_TRUE(cookie->IsDomainMatch("www.example.com")); | 356 EXPECT_TRUE(cookie->IsDomainMatch("www.example.com")); |
| 360 EXPECT_TRUE(cookie->IsDomainMatch("www.example.com")); | 357 EXPECT_TRUE(cookie->IsDomainMatch("www.example.com")); |
| 361 EXPECT_TRUE(cookie->IsDomainMatch("foo.www.example.com")); | 358 EXPECT_TRUE(cookie->IsDomainMatch("foo.www.example.com")); |
| 362 EXPECT_FALSE(cookie->IsDomainMatch("www0.example.com")); | 359 EXPECT_FALSE(cookie->IsDomainMatch("www0.example.com")); |
| 363 EXPECT_FALSE(cookie->IsDomainMatch("example.com")); | 360 EXPECT_FALSE(cookie->IsDomainMatch("example.com")); |
| 364 | 361 |
| 365 cookie.reset(CanonicalCookie::Create(url, "A=2; Domain=.www.example.com", | 362 cookie = CanonicalCookie::Create(url, "A=2; Domain=.www.example.com", |
| 366 creation_time, options)); | 363 creation_time, options); |
| 367 EXPECT_TRUE(cookie->IsDomainMatch("www.example.com")); | 364 EXPECT_TRUE(cookie->IsDomainMatch("www.example.com")); |
| 368 EXPECT_TRUE(cookie->IsDomainMatch("www.example.com")); | 365 EXPECT_TRUE(cookie->IsDomainMatch("www.example.com")); |
| 369 EXPECT_TRUE(cookie->IsDomainMatch("foo.www.example.com")); | 366 EXPECT_TRUE(cookie->IsDomainMatch("foo.www.example.com")); |
| 370 EXPECT_FALSE(cookie->IsDomainMatch("www0.example.com")); | 367 EXPECT_FALSE(cookie->IsDomainMatch("www0.example.com")); |
| 371 EXPECT_FALSE(cookie->IsDomainMatch("example.com")); | 368 EXPECT_FALSE(cookie->IsDomainMatch("example.com")); |
| 372 } | 369 } |
| 373 | 370 |
| 374 TEST(CanonicalCookieTest, IsOnPath) { | 371 TEST(CanonicalCookieTest, IsOnPath) { |
| 375 base::Time creation_time = base::Time::Now(); | 372 base::Time creation_time = base::Time::Now(); |
| 376 CookieOptions options; | 373 CookieOptions options; |
| 377 | 374 |
| 378 scoped_ptr<CanonicalCookie> cookie(CanonicalCookie::Create( | 375 scoped_ptr<CanonicalCookie> cookie(CanonicalCookie::Create( |
| 379 GURL("http://www.example.com"), "A=2", creation_time, options)); | 376 GURL("http://www.example.com"), "A=2", creation_time, options)); |
| 380 EXPECT_TRUE(cookie->IsOnPath("/")); | 377 EXPECT_TRUE(cookie->IsOnPath("/")); |
| 381 EXPECT_TRUE(cookie->IsOnPath("/test")); | 378 EXPECT_TRUE(cookie->IsOnPath("/test")); |
| 382 EXPECT_TRUE(cookie->IsOnPath("/test/bar.html")); | 379 EXPECT_TRUE(cookie->IsOnPath("/test/bar.html")); |
| 383 | 380 |
| 384 // Test the empty string edge case. | 381 // Test the empty string edge case. |
| 385 EXPECT_FALSE(cookie->IsOnPath(std::string())); | 382 EXPECT_FALSE(cookie->IsOnPath(std::string())); |
| 386 | 383 |
| 387 cookie.reset( | 384 cookie = CanonicalCookie::Create(GURL("http://www.example.com/test/foo.html"), |
| 388 CanonicalCookie::Create(GURL("http://www.example.com/test/foo.html"), | 385 "A=2", creation_time, options); |
| 389 "A=2", creation_time, options)); | |
| 390 EXPECT_FALSE(cookie->IsOnPath("/")); | 386 EXPECT_FALSE(cookie->IsOnPath("/")); |
| 391 EXPECT_TRUE(cookie->IsOnPath("/test")); | 387 EXPECT_TRUE(cookie->IsOnPath("/test")); |
| 392 EXPECT_TRUE(cookie->IsOnPath("/test/bar.html")); | 388 EXPECT_TRUE(cookie->IsOnPath("/test/bar.html")); |
| 393 EXPECT_TRUE(cookie->IsOnPath("/test/sample/bar.html")); | 389 EXPECT_TRUE(cookie->IsOnPath("/test/sample/bar.html")); |
| 394 } | 390 } |
| 395 | 391 |
| 396 TEST(CanonicalCookieTest, IncludeForRequestURL) { | 392 TEST(CanonicalCookieTest, IncludeForRequestURL) { |
| 397 GURL url("http://www.example.com"); | 393 GURL url("http://www.example.com"); |
| 398 base::Time creation_time = base::Time::Now(); | 394 base::Time creation_time = base::Time::Now(); |
| 399 CookieOptions options; | 395 CookieOptions options; |
| 400 | 396 |
| 401 scoped_ptr<CanonicalCookie> cookie( | 397 scoped_ptr<CanonicalCookie> cookie( |
| 402 CanonicalCookie::Create(url, "A=2", creation_time, options)); | 398 CanonicalCookie::Create(url, "A=2", creation_time, options)); |
| 403 EXPECT_TRUE(cookie->IncludeForRequestURL(url, options)); | 399 EXPECT_TRUE(cookie->IncludeForRequestURL(url, options)); |
| 404 EXPECT_TRUE(cookie->IncludeForRequestURL( | 400 EXPECT_TRUE(cookie->IncludeForRequestURL( |
| 405 GURL("http://www.example.com/foo/bar"), options)); | 401 GURL("http://www.example.com/foo/bar"), options)); |
| 406 EXPECT_TRUE(cookie->IncludeForRequestURL( | 402 EXPECT_TRUE(cookie->IncludeForRequestURL( |
| 407 GURL("https://www.example.com/foo/bar"), options)); | 403 GURL("https://www.example.com/foo/bar"), options)); |
| 408 EXPECT_FALSE( | 404 EXPECT_FALSE( |
| 409 cookie->IncludeForRequestURL(GURL("https://sub.example.com"), options)); | 405 cookie->IncludeForRequestURL(GURL("https://sub.example.com"), options)); |
| 410 EXPECT_FALSE(cookie->IncludeForRequestURL(GURL("https://sub.www.example.com"), | 406 EXPECT_FALSE(cookie->IncludeForRequestURL(GURL("https://sub.www.example.com"), |
| 411 options)); | 407 options)); |
| 412 | 408 |
| 413 // Test that cookie with a cookie path that does not match the url path are | 409 // Test that cookie with a cookie path that does not match the url path are |
| 414 // not included. | 410 // not included. |
| 415 cookie.reset(CanonicalCookie::Create(url, "A=2; Path=/foo/bar", creation_time, | 411 cookie = CanonicalCookie::Create(url, "A=2; Path=/foo/bar", creation_time, |
| 416 options)); | 412 options); |
| 417 EXPECT_FALSE(cookie->IncludeForRequestURL(url, options)); | 413 EXPECT_FALSE(cookie->IncludeForRequestURL(url, options)); |
| 418 EXPECT_TRUE(cookie->IncludeForRequestURL( | 414 EXPECT_TRUE(cookie->IncludeForRequestURL( |
| 419 GURL("http://www.example.com/foo/bar/index.html"), options)); | 415 GURL("http://www.example.com/foo/bar/index.html"), options)); |
| 420 | 416 |
| 421 // Test that a secure cookie is not included for a non secure URL. | 417 // Test that a secure cookie is not included for a non secure URL. |
| 422 GURL secure_url("https://www.example.com"); | 418 GURL secure_url("https://www.example.com"); |
| 423 cookie.reset(CanonicalCookie::Create(secure_url, "A=2; Secure", creation_time, | 419 cookie = CanonicalCookie::Create(secure_url, "A=2; Secure", creation_time, |
| 424 options)); | 420 options); |
| 425 EXPECT_TRUE(cookie->IsSecure()); | 421 EXPECT_TRUE(cookie->IsSecure()); |
| 426 EXPECT_TRUE(cookie->IncludeForRequestURL(secure_url, options)); | 422 EXPECT_TRUE(cookie->IncludeForRequestURL(secure_url, options)); |
| 427 EXPECT_FALSE(cookie->IncludeForRequestURL(url, options)); | 423 EXPECT_FALSE(cookie->IncludeForRequestURL(url, options)); |
| 428 | 424 |
| 429 // Test that http only cookies are only included if the include httponly flag | 425 // Test that http only cookies are only included if the include httponly flag |
| 430 // is set on the cookie options. | 426 // is set on the cookie options. |
| 431 options.set_include_httponly(); | 427 options.set_include_httponly(); |
| 432 cookie.reset( | 428 cookie = |
| 433 CanonicalCookie::Create(url, "A=2; HttpOnly", creation_time, options)); | 429 CanonicalCookie::Create(url, "A=2; HttpOnly", creation_time, options); |
| 434 EXPECT_TRUE(cookie->IsHttpOnly()); | 430 EXPECT_TRUE(cookie->IsHttpOnly()); |
| 435 EXPECT_TRUE(cookie->IncludeForRequestURL(url, options)); | 431 EXPECT_TRUE(cookie->IncludeForRequestURL(url, options)); |
| 436 options.set_exclude_httponly(); | 432 options.set_exclude_httponly(); |
| 437 EXPECT_FALSE(cookie->IncludeForRequestURL(url, options)); | 433 EXPECT_FALSE(cookie->IncludeForRequestURL(url, options)); |
| 438 } | 434 } |
| 439 | 435 |
| 440 TEST(CanonicalCookieTest, IncludeFirstPartyForFirstPartyURL) { | 436 TEST(CanonicalCookieTest, IncludeFirstPartyForFirstPartyURL) { |
| 441 GURL insecure_url("http://example.test"); | 437 GURL insecure_url("http://example.test"); |
| 442 GURL secure_url("https://example.test"); | 438 GURL secure_url("https://example.test"); |
| 443 GURL secure_url_with_path("https://example.test/foo/bar/index.html"); | 439 GURL secure_url_with_path("https://example.test/foo/bar/index.html"); |
| 444 GURL third_party_url("https://not-example.test"); | 440 GURL third_party_url("https://not-example.test"); |
| 445 base::Time creation_time = base::Time::Now(); | 441 base::Time creation_time = base::Time::Now(); |
| 446 CookieOptions options; | 442 CookieOptions options; |
| 447 scoped_ptr<CanonicalCookie> cookie; | 443 scoped_ptr<CanonicalCookie> cookie; |
| 448 | 444 |
| 449 // First-party-only cookies are not included for non-first-party requests, | 445 // First-party-only cookies are not included for non-first-party requests, |
| 450 // even if other properties match: | 446 // even if other properties match: |
| 451 cookie.reset(CanonicalCookie::Create(secure_url, "A=2; First-Party-Only", | 447 cookie = CanonicalCookie::Create(secure_url, "A=2; First-Party-Only", |
| 452 creation_time, options)); | 448 creation_time, options); |
| 453 EXPECT_TRUE(cookie->IsFirstPartyOnly()); | 449 EXPECT_TRUE(cookie->IsFirstPartyOnly()); |
| 454 EXPECT_FALSE(cookie->IncludeForRequestURL(secure_url, options)); | 450 EXPECT_FALSE(cookie->IncludeForRequestURL(secure_url, options)); |
| 455 cookie.reset(CanonicalCookie::Create( | 451 cookie = CanonicalCookie::Create(secure_url, "A=2; Secure; First-Party-Only", |
| 456 secure_url, "A=2; Secure; First-Party-Only", creation_time, options)); | 452 creation_time, options); |
| 457 EXPECT_TRUE(cookie->IsFirstPartyOnly()); | 453 EXPECT_TRUE(cookie->IsFirstPartyOnly()); |
| 458 EXPECT_FALSE(cookie->IncludeForRequestURL(secure_url, options)); | 454 EXPECT_FALSE(cookie->IncludeForRequestURL(secure_url, options)); |
| 459 cookie.reset(CanonicalCookie::Create(secure_url_with_path, | 455 cookie = CanonicalCookie::Create(secure_url_with_path, |
| 460 "A=2; First-Party-Only; path=/foo/bar", | 456 "A=2; First-Party-Only; path=/foo/bar", |
| 461 creation_time, options)); | 457 creation_time, options); |
| 462 EXPECT_TRUE(cookie->IsFirstPartyOnly()); | 458 EXPECT_TRUE(cookie->IsFirstPartyOnly()); |
| 463 EXPECT_FALSE(cookie->IncludeForRequestURL(secure_url, options)); | 459 EXPECT_FALSE(cookie->IncludeForRequestURL(secure_url, options)); |
| 464 | 460 |
| 465 // First-party-only cookies are included for first-party requests: | 461 // First-party-only cookies are included for first-party requests: |
| 466 options.set_include_first_party_only_cookies(); | 462 options.set_include_first_party_only_cookies(); |
| 467 cookie.reset(CanonicalCookie::Create(secure_url, "A=2; First-Party-Only", | 463 cookie = CanonicalCookie::Create(secure_url, "A=2; First-Party-Only", |
| 468 creation_time, options)); | 464 creation_time, options); |
| 469 EXPECT_TRUE(cookie->IsFirstPartyOnly()); | 465 EXPECT_TRUE(cookie->IsFirstPartyOnly()); |
| 470 EXPECT_TRUE(cookie->IncludeForRequestURL(secure_url, options)); | 466 EXPECT_TRUE(cookie->IncludeForRequestURL(secure_url, options)); |
| 471 cookie.reset(CanonicalCookie::Create( | 467 cookie = CanonicalCookie::Create(secure_url, "A=2; Secure; First-Party-Only", |
| 472 secure_url, "A=2; Secure; First-Party-Only", creation_time, options)); | 468 creation_time, options); |
| 473 EXPECT_TRUE(cookie->IsFirstPartyOnly()); | 469 EXPECT_TRUE(cookie->IsFirstPartyOnly()); |
| 474 EXPECT_TRUE(cookie->IncludeForRequestURL(secure_url, options)); | 470 EXPECT_TRUE(cookie->IncludeForRequestURL(secure_url, options)); |
| 475 cookie.reset(CanonicalCookie::Create(secure_url_with_path, | 471 cookie = CanonicalCookie::Create(secure_url_with_path, |
| 476 "A=2; First-Party-Only; path=/foo/bar", | 472 "A=2; First-Party-Only; path=/foo/bar", |
| 477 creation_time, options)); | 473 creation_time, options); |
| 478 EXPECT_TRUE(cookie->IsFirstPartyOnly()); | 474 EXPECT_TRUE(cookie->IsFirstPartyOnly()); |
| 479 EXPECT_TRUE(cookie->IncludeForRequestURL(secure_url_with_path, options)); | 475 EXPECT_TRUE(cookie->IncludeForRequestURL(secure_url_with_path, options)); |
| 480 } | 476 } |
| 481 | 477 |
| 482 TEST(CanonicalCookieTest, PartialCompare) { | 478 TEST(CanonicalCookieTest, PartialCompare) { |
| 483 GURL url("http://www.example.com"); | 479 GURL url("http://www.example.com"); |
| 484 base::Time creation_time = base::Time::Now(); | 480 base::Time creation_time = base::Time::Now(); |
| 485 CookieOptions options; | 481 CookieOptions options; |
| 486 scoped_ptr<CanonicalCookie> cookie( | 482 scoped_ptr<CanonicalCookie> cookie( |
| 487 CanonicalCookie::Create(url, "a=b", creation_time, options)); | 483 CanonicalCookie::Create(url, "a=b", creation_time, options)); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 542 check_consistency(*cookie_different_path, *cookie_different_value); | 538 check_consistency(*cookie_different_path, *cookie_different_value); |
| 543 } | 539 } |
| 544 | 540 |
| 545 TEST(CanonicalCookieTest, SecureCookiePrefix) { | 541 TEST(CanonicalCookieTest, SecureCookiePrefix) { |
| 546 GURL https_url("https://www.example.test"); | 542 GURL https_url("https://www.example.test"); |
| 547 GURL http_url("http://www.example.test"); | 543 GURL http_url("http://www.example.test"); |
| 548 base::Time creation_time = base::Time::Now(); | 544 base::Time creation_time = base::Time::Now(); |
| 549 CookieOptions options; | 545 CookieOptions options; |
| 550 | 546 |
| 551 // A __Secure- cookie must be Secure. | 547 // A __Secure- cookie must be Secure. |
| 552 EXPECT_EQ(nullptr, make_scoped_ptr(CanonicalCookie::Create( | 548 EXPECT_FALSE(CanonicalCookie::Create(https_url, "__Secure-A=B", creation_time, |
| 553 https_url, "__Secure-A=B", creation_time, options))); | 549 options)); |
| 554 EXPECT_EQ(nullptr, | 550 EXPECT_FALSE(CanonicalCookie::Create(https_url, "__Secure-A=B; httponly", |
| 555 make_scoped_ptr(CanonicalCookie::Create( | 551 creation_time, options)); |
| 556 https_url, "__Secure-A=B; httponly", creation_time, options))); | |
| 557 | 552 |
| 558 // A typoed prefix does not have to be Secure. | 553 // A typoed prefix does not have to be Secure. |
| 559 EXPECT_NE(nullptr, | 554 EXPECT_TRUE(CanonicalCookie::Create(https_url, "__secure-A=B; Secure", |
| 560 make_scoped_ptr(CanonicalCookie::Create( | 555 creation_time, options)); |
| 561 https_url, "__secure-A=B; Secure", creation_time, options))); | 556 EXPECT_TRUE(CanonicalCookie::Create(https_url, "__secure-A=C;", creation_time, |
| 562 EXPECT_NE(nullptr, make_scoped_ptr(CanonicalCookie::Create( | 557 options)); |
| 563 https_url, "__secure-A=C;", creation_time, options))); | 558 EXPECT_TRUE(CanonicalCookie::Create(https_url, "__SecureA=B; Secure", |
| 564 EXPECT_NE(nullptr, | 559 creation_time, options)); |
| 565 make_scoped_ptr(CanonicalCookie::Create( | 560 EXPECT_TRUE(CanonicalCookie::Create(https_url, "__SecureA=C;", creation_time, |
| 566 https_url, "__SecureA=B; Secure", creation_time, options))); | 561 options)); |
| 567 EXPECT_NE(nullptr, make_scoped_ptr(CanonicalCookie::Create( | |
| 568 https_url, "__SecureA=C;", creation_time, options))); | |
| 569 | 562 |
| 570 // A __Secure- cookie can't be set on a non-secure origin. | 563 // A __Secure- cookie can't be set on a non-secure origin. |
| 571 EXPECT_EQ(nullptr, | 564 EXPECT_FALSE(CanonicalCookie::Create(http_url, "__Secure-A=B; Secure", |
| 572 make_scoped_ptr(CanonicalCookie::Create( | 565 creation_time, options)); |
| 573 http_url, "__Secure-A=B; Secure", creation_time, options))); | |
| 574 } | 566 } |
| 575 | 567 |
| 576 TEST(CanonicalCookieTest, HostCookiePrefix) { | 568 TEST(CanonicalCookieTest, HostCookiePrefix) { |
| 577 GURL https_url("https://www.example.test"); | 569 GURL https_url("https://www.example.test"); |
| 578 GURL http_url("http://www.example.test"); | 570 GURL http_url("http://www.example.test"); |
| 579 base::Time creation_time = base::Time::Now(); | 571 base::Time creation_time = base::Time::Now(); |
| 580 CookieOptions options; | 572 CookieOptions options; |
| 581 std::string domain = https_url.host(); | 573 std::string domain = https_url.host(); |
| 582 | 574 |
| 583 // A __Host- cookie must be Secure. | 575 // A __Host- cookie must be Secure. |
| 584 EXPECT_EQ(nullptr, make_scoped_ptr(CanonicalCookie::Create( | 576 EXPECT_FALSE(CanonicalCookie::Create(https_url, "__Host-A=B;", creation_time, |
| 585 https_url, "__Host-A=B;", creation_time, options))); | 577 options)); |
| 586 EXPECT_EQ(nullptr, | 578 EXPECT_FALSE(CanonicalCookie::Create( |
| 587 make_scoped_ptr(CanonicalCookie::Create( | 579 https_url, "__Host-A=B; Domain=" + domain + "; Path=/;", creation_time, |
| 588 https_url, "__Host-A=B; Domain=" + domain + "; Path=/;", | 580 options)); |
| 589 creation_time, options))); | 581 EXPECT_TRUE(CanonicalCookie::Create(https_url, "__Host-A=B; Path=/; Secure;", |
| 590 EXPECT_NE(nullptr, make_scoped_ptr(CanonicalCookie::Create( | 582 creation_time, options)); |
| 591 https_url, "__Host-A=B; Path=/; Secure;", | |
| 592 creation_time, options))); | |
| 593 | 583 |
| 594 // A __Host- cookie must be set from a secure scheme. | 584 // A __Host- cookie must be set from a secure scheme. |
| 595 EXPECT_EQ(nullptr, | 585 EXPECT_FALSE(CanonicalCookie::Create( |
| 596 make_scoped_ptr(CanonicalCookie::Create( | 586 http_url, "__Host-A=B; Domain=" + domain + "; Path=/; Secure;", |
| 597 http_url, "__Host-A=B; Domain=" + domain + "; Path=/; Secure;", | 587 creation_time, options)); |
| 598 creation_time, options))); | 588 EXPECT_TRUE(CanonicalCookie::Create(https_url, "__Host-A=B; Path=/; Secure;", |
| 599 EXPECT_NE(nullptr, make_scoped_ptr(CanonicalCookie::Create( | 589 creation_time, options)); |
| 600 https_url, "__Host-A=B; Path=/; Secure;", | |
| 601 creation_time, options))); | |
| 602 | 590 |
| 603 // A __Host- cookie can't have a Domain. | 591 // A __Host- cookie can't have a Domain. |
| 604 EXPECT_EQ(nullptr, | 592 EXPECT_FALSE(CanonicalCookie::Create( |
| 605 make_scoped_ptr(CanonicalCookie::Create( | 593 https_url, "__Host-A=B; Domain=" + domain + "; Path=/; Secure;", |
| 606 https_url, "__Host-A=B; Domain=" + domain + "; Path=/; Secure;", | 594 creation_time, options)); |
| 607 creation_time, options))); | 595 EXPECT_FALSE(CanonicalCookie::Create( |
| 608 EXPECT_EQ(nullptr, | 596 https_url, "__Host-A=B; Domain=" + domain + "; Secure;", creation_time, |
| 609 make_scoped_ptr(CanonicalCookie::Create( | 597 options)); |
| 610 https_url, "__Host-A=B; Domain=" + domain + "; Secure;", | |
| 611 creation_time, options))); | |
| 612 | 598 |
| 613 // A __Host- cookie must have a Path of "/". | 599 // A __Host- cookie must have a Path of "/". |
| 614 EXPECT_EQ(nullptr, make_scoped_ptr(CanonicalCookie::Create( | 600 EXPECT_FALSE(CanonicalCookie::Create( |
| 615 https_url, "__Host-A=B; Path=/foo; Secure;", | 601 https_url, "__Host-A=B; Path=/foo; Secure;", creation_time, options)); |
| 616 creation_time, options))); | 602 EXPECT_FALSE(CanonicalCookie::Create(https_url, "__Host-A=B; Secure;", |
| 617 EXPECT_EQ(nullptr, | 603 creation_time, options)); |
| 618 make_scoped_ptr(CanonicalCookie::Create( | 604 EXPECT_TRUE(CanonicalCookie::Create(https_url, "__Host-A=B; Secure; Path=/;", |
| 619 https_url, "__Host-A=B; Secure;", creation_time, options))); | 605 creation_time, options)); |
| 620 EXPECT_NE(nullptr, make_scoped_ptr(CanonicalCookie::Create( | |
| 621 https_url, "__Host-A=B; Secure; Path=/;", | |
| 622 creation_time, options))); | |
| 623 | 606 |
| 624 // Rules don't apply for a typoed prefix. | 607 // Rules don't apply for a typoed prefix. |
| 625 EXPECT_NE(nullptr, | 608 EXPECT_TRUE(CanonicalCookie::Create( |
| 626 make_scoped_ptr(CanonicalCookie::Create( | 609 http_url, "__host-A=B; Domain=" + domain + "; Path=/; Secure;", |
| 627 http_url, "__host-A=B; Domain=" + domain + "; Path=/; Secure;", | 610 creation_time, options)); |
| 628 creation_time, options))); | 611 EXPECT_TRUE(CanonicalCookie::Create( |
| 629 EXPECT_NE(nullptr, make_scoped_ptr(CanonicalCookie::Create( | 612 https_url, "__HostA=B; Domain=" + domain + "; Secure;", creation_time, |
| 630 https_url, "__HostA=B; Domain=" + domain + "; Secure;", | 613 options)); |
| 631 creation_time, options))); | |
| 632 } | 614 } |
| 633 | 615 |
| 634 TEST(CanonicalCookieTest, EnforceSecureCookiesRequireSecureScheme) { | 616 TEST(CanonicalCookieTest, EnforceSecureCookiesRequireSecureScheme) { |
| 635 GURL http_url("http://www.example.com"); | 617 GURL http_url("http://www.example.com"); |
| 636 GURL https_url("https://www.example.com"); | 618 GURL https_url("https://www.example.com"); |
| 637 base::Time creation_time = base::Time::Now(); | 619 base::Time creation_time = base::Time::Now(); |
| 638 CookieOptions options; | 620 CookieOptions options; |
| 639 options.set_enforce_strict_secure(); | 621 options.set_enforce_strict_secure(); |
| 640 | 622 |
| 641 scoped_ptr<CanonicalCookie> http_cookie_no_secure( | 623 scoped_ptr<CanonicalCookie> http_cookie_no_secure( |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 676 } | 658 } |
| 677 | 659 |
| 678 TEST(CanonicalCookieTest, TestPrefixHistograms) { | 660 TEST(CanonicalCookieTest, TestPrefixHistograms) { |
| 679 base::HistogramTester histograms; | 661 base::HistogramTester histograms; |
| 680 const char kCookiePrefixHistogram[] = "Cookie.CookiePrefix"; | 662 const char kCookiePrefixHistogram[] = "Cookie.CookiePrefix"; |
| 681 const char kCookiePrefixBlockedHistogram[] = "Cookie.CookiePrefixBlocked"; | 663 const char kCookiePrefixBlockedHistogram[] = "Cookie.CookiePrefixBlocked"; |
| 682 GURL https_url("https://www.example.test"); | 664 GURL https_url("https://www.example.test"); |
| 683 base::Time creation_time = base::Time::Now(); | 665 base::Time creation_time = base::Time::Now(); |
| 684 CookieOptions options; | 666 CookieOptions options; |
| 685 | 667 |
| 686 scoped_ptr<CanonicalCookie> cookie1 = make_scoped_ptr(CanonicalCookie::Create( | 668 EXPECT_FALSE(CanonicalCookie::Create(https_url, "__Host-A=B;", creation_time, |
| 687 https_url, "__Host-A=B;", creation_time, options)); | 669 options)); |
| 688 EXPECT_EQ(nullptr, cookie1); | |
| 689 | 670 |
| 690 histograms.ExpectBucketCount(kCookiePrefixHistogram, | 671 histograms.ExpectBucketCount(kCookiePrefixHistogram, |
| 691 CanonicalCookie::COOKIE_PREFIX_HOST, 1); | 672 CanonicalCookie::COOKIE_PREFIX_HOST, 1); |
| 692 histograms.ExpectBucketCount(kCookiePrefixBlockedHistogram, | 673 histograms.ExpectBucketCount(kCookiePrefixBlockedHistogram, |
| 693 CanonicalCookie::COOKIE_PREFIX_HOST, 1); | 674 CanonicalCookie::COOKIE_PREFIX_HOST, 1); |
| 694 | 675 |
| 695 EXPECT_NE(nullptr, make_scoped_ptr(CanonicalCookie::Create( | 676 EXPECT_TRUE(CanonicalCookie::Create(https_url, "__Host-A=B; Path=/; Secure", |
| 696 https_url, "__Host-A=B; Path=/; Secure", creation_time, | 677 creation_time, options)); |
| 697 options))); | |
| 698 histograms.ExpectBucketCount(kCookiePrefixHistogram, | 678 histograms.ExpectBucketCount(kCookiePrefixHistogram, |
| 699 CanonicalCookie::COOKIE_PREFIX_HOST, 2); | 679 CanonicalCookie::COOKIE_PREFIX_HOST, 2); |
| 700 histograms.ExpectBucketCount(kCookiePrefixBlockedHistogram, | 680 histograms.ExpectBucketCount(kCookiePrefixBlockedHistogram, |
| 701 CanonicalCookie::COOKIE_PREFIX_HOST, 1); | 681 CanonicalCookie::COOKIE_PREFIX_HOST, 1); |
| 702 EXPECT_NE(nullptr, make_scoped_ptr(CanonicalCookie::Create( | 682 EXPECT_TRUE(CanonicalCookie::Create(https_url, "__HostA=B; Path=/; Secure", |
| 703 https_url, "__HostA=B; Path=/; Secure", creation_time, | 683 creation_time, options)); |
| 704 options))); | |
| 705 histograms.ExpectBucketCount(kCookiePrefixHistogram, | 684 histograms.ExpectBucketCount(kCookiePrefixHistogram, |
| 706 CanonicalCookie::COOKIE_PREFIX_HOST, 2); | 685 CanonicalCookie::COOKIE_PREFIX_HOST, 2); |
| 707 histograms.ExpectBucketCount(kCookiePrefixBlockedHistogram, | 686 histograms.ExpectBucketCount(kCookiePrefixBlockedHistogram, |
| 708 CanonicalCookie::COOKIE_PREFIX_HOST, 1); | 687 CanonicalCookie::COOKIE_PREFIX_HOST, 1); |
| 709 | 688 |
| 710 scoped_ptr<CanonicalCookie> cookie2 = make_scoped_ptr(CanonicalCookie::Create( | 689 EXPECT_FALSE(CanonicalCookie::Create(https_url, "__Secure-A=B;", |
| 711 https_url, "__Secure-A=B;", creation_time, options)); | 690 creation_time, options)); |
| 712 EXPECT_EQ(nullptr, cookie2); | |
| 713 | 691 |
| 714 histograms.ExpectBucketCount(kCookiePrefixHistogram, | 692 histograms.ExpectBucketCount(kCookiePrefixHistogram, |
| 715 CanonicalCookie::COOKIE_PREFIX_SECURE, 1); | 693 CanonicalCookie::COOKIE_PREFIX_SECURE, 1); |
| 716 histograms.ExpectBucketCount(kCookiePrefixBlockedHistogram, | 694 histograms.ExpectBucketCount(kCookiePrefixBlockedHistogram, |
| 717 CanonicalCookie::COOKIE_PREFIX_SECURE, 1); | 695 CanonicalCookie::COOKIE_PREFIX_SECURE, 1); |
| 718 EXPECT_NE(nullptr, make_scoped_ptr(CanonicalCookie::Create( | 696 EXPECT_TRUE(CanonicalCookie::Create(https_url, "__Secure-A=B; Path=/; Secure", |
| 719 https_url, "__Secure-A=B; Path=/; Secure", | 697 creation_time, options)); |
| 720 creation_time, options))); | |
| 721 histograms.ExpectBucketCount(kCookiePrefixHistogram, | 698 histograms.ExpectBucketCount(kCookiePrefixHistogram, |
| 722 CanonicalCookie::COOKIE_PREFIX_SECURE, 2); | 699 CanonicalCookie::COOKIE_PREFIX_SECURE, 2); |
| 723 histograms.ExpectBucketCount(kCookiePrefixBlockedHistogram, | 700 histograms.ExpectBucketCount(kCookiePrefixBlockedHistogram, |
| 724 CanonicalCookie::COOKIE_PREFIX_SECURE, 1); | 701 CanonicalCookie::COOKIE_PREFIX_SECURE, 1); |
| 725 EXPECT_NE(nullptr, make_scoped_ptr(CanonicalCookie::Create( | 702 EXPECT_TRUE(CanonicalCookie::Create(https_url, "__SecureA=B; Path=/; Secure", |
| 726 https_url, "__SecureA=B; Path=/; Secure", | 703 creation_time, options)); |
| 727 creation_time, options))); | |
| 728 histograms.ExpectBucketCount(kCookiePrefixHistogram, | 704 histograms.ExpectBucketCount(kCookiePrefixHistogram, |
| 729 CanonicalCookie::COOKIE_PREFIX_SECURE, 2); | 705 CanonicalCookie::COOKIE_PREFIX_SECURE, 2); |
| 730 histograms.ExpectBucketCount(kCookiePrefixBlockedHistogram, | 706 histograms.ExpectBucketCount(kCookiePrefixBlockedHistogram, |
| 731 CanonicalCookie::COOKIE_PREFIX_SECURE, 1); | 707 CanonicalCookie::COOKIE_PREFIX_SECURE, 1); |
| 732 } | 708 } |
| 733 | 709 |
| 734 } // namespace net | 710 } // namespace net |
| OLD | NEW |