Index: net/cookies/cookie_store_unittest.h |
diff --git a/net/cookies/cookie_store_unittest.h b/net/cookies/cookie_store_unittest.h |
deleted file mode 100644 |
index 8a666c935c2a375c931b60dbd7ce76493a78877c..0000000000000000000000000000000000000000 |
--- a/net/cookies/cookie_store_unittest.h |
+++ /dev/null |
@@ -1,1208 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef NET_COOKIES_COOKIE_STORE_UNITTEST_H_ |
-#define NET_COOKIES_COOKIE_STORE_UNITTEST_H_ |
- |
-#include "base/bind.h" |
-#include "base/message_loop/message_loop.h" |
-#include "base/strings/string_tokenizer.h" |
-#include "base/threading/thread.h" |
-#include "net/cookies/cookie_monster.h" |
-#include "net/cookies/cookie_store.h" |
-#include "net/cookies/cookie_store_test_callbacks.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "url/gurl.h" |
- |
-// This file declares unittest templates that can be used to test common |
-// behavior of any CookieStore implementation. |
-// See cookie_monster_unittest.cc for an example of an implementation. |
- |
-namespace net { |
- |
-using base::Thread; |
- |
-const int kTimeout = 1000; |
- |
-const char kUrlFtp[] = "ftp://ftp.google.izzle/"; |
-const char kUrlGoogle[] = "http://www.google.izzle"; |
-const char kUrlGoogleFoo[] = "http://www.google.izzle/foo"; |
-const char kUrlGoogleBar[] = "http://www.google.izzle/bar"; |
-const char kUrlGoogleSecure[] = "https://www.google.izzle"; |
-const char kUrlGoogleWebSocket[] = "ws://www.google.izzle"; |
-const char kUrlGoogleWebSocketSecure[] = "wss://www.google.izzle"; |
-const char kValidCookieLine[] = "A=B; path=/"; |
-const char kValidDomainCookieLine[] = "A=B; path=/; domain=google.izzle"; |
- |
-// The CookieStoreTestTraits must have the following members: |
-// struct CookieStoreTestTraits { |
-// // Factory function. |
-// static scoped_refptr<CookieStore> Create(); |
-// |
-// // The cookie store is a CookieMonster. Only used to test |
-// // GetCookieMonster(). |
-// static const bool is_cookie_monster; |
-// |
-// // The cookie store supports cookies with the exclude_httponly() option. |
-// static const bool supports_http_only; |
-// |
-// // The cookie store is able to make the difference between the ".com" |
-// // and the "com" domains. |
-// static const bool supports_non_dotted_domains; |
-// |
-// // The cookie store handles the domains with trailing dots (such as "com.") |
-// // correctly. |
-// static const bool supports_trailing_dots; |
-// |
-// // The cookie store rejects cookies for invalid schemes such as ftp. |
-// static const bool filters_schemes; |
-// |
-// // The cookie store has a bug happening when a path is a substring of |
-// // another. |
-// static const bool has_path_prefix_bug; |
-// |
-// // Time to wait between two cookie insertions to ensure that cookies have |
-// // different creation times. |
-// static const int creation_time_granularity_in_ms; |
-// }; |
- |
-template <class CookieStoreTestTraits> |
-class CookieStoreTest : public testing::Test { |
- protected: |
- CookieStoreTest() |
- : url_google_(kUrlGoogle), |
- url_google_secure_(kUrlGoogleSecure), |
- url_google_foo_(kUrlGoogleFoo), |
- url_google_bar_(kUrlGoogleBar) { |
- // This test may be used outside of the net test suite, and thus may not |
- // have a message loop. |
- if (!base::MessageLoop::current()) |
- message_loop_.reset(new base::MessageLoop); |
- weak_factory_.reset(new base::WeakPtrFactory<base::MessageLoop>( |
- base::MessageLoop::current())); |
- } |
- |
- // Helper methods for the asynchronous Cookie Store API that call the |
- // asynchronous method and then pump the loop until the callback is invoked, |
- // finally returning the value. |
- |
- std::string GetCookies(CookieStore* cs, const GURL& url) { |
- DCHECK(cs); |
- CookieOptions options; |
- if (!CookieStoreTestTraits::supports_http_only) |
- options.set_include_httponly(); |
- StringResultCookieCallback callback; |
- cs->GetCookiesWithOptionsAsync( |
- url, options, |
- base::Bind(&StringResultCookieCallback::Run, |
- base::Unretained(&callback))); |
- RunFor(kTimeout); |
- EXPECT_TRUE(callback.did_run()); |
- return callback.result(); |
- } |
- |
- std::string GetCookiesWithOptions(CookieStore* cs, |
- const GURL& url, |
- const CookieOptions& options) { |
- DCHECK(cs); |
- StringResultCookieCallback callback; |
- cs->GetCookiesWithOptionsAsync( |
- url, options, base::Bind(&StringResultCookieCallback::Run, |
- base::Unretained(&callback))); |
- RunFor(kTimeout); |
- EXPECT_TRUE(callback.did_run()); |
- return callback.result(); |
- } |
- |
- bool SetCookieWithOptions(CookieStore* cs, |
- const GURL& url, |
- const std::string& cookie_line, |
- const CookieOptions& options) { |
- DCHECK(cs); |
- ResultSavingCookieCallback<bool> callback; |
- cs->SetCookieWithOptionsAsync( |
- url, cookie_line, options, |
- base::Bind( |
- &ResultSavingCookieCallback<bool>::Run, |
- base::Unretained(&callback))); |
- RunFor(kTimeout); |
- EXPECT_TRUE(callback.did_run()); |
- return callback.result(); |
- } |
- |
- bool SetCookieWithServerTime(CookieStore* cs, |
- const GURL& url, |
- const std::string& cookie_line, |
- const base::Time& server_time) { |
- CookieOptions options; |
- if (!CookieStoreTestTraits::supports_http_only) |
- options.set_include_httponly(); |
- options.set_server_time(server_time); |
- return SetCookieWithOptions(cs, url, cookie_line, options); |
- } |
- |
- bool SetCookie(CookieStore* cs, |
- const GURL& url, |
- const std::string& cookie_line) { |
- CookieOptions options; |
- if (!CookieStoreTestTraits::supports_http_only) |
- options.set_include_httponly(); |
- return SetCookieWithOptions(cs, url, cookie_line, options); |
- } |
- |
- void DeleteCookie(CookieStore* cs, |
- const GURL& url, |
- const std::string& cookie_name) { |
- DCHECK(cs); |
- NoResultCookieCallback callback; |
- cs->DeleteCookieAsync( |
- url, cookie_name, |
- base::Bind(&NoResultCookieCallback::Run, base::Unretained(&callback))); |
- RunFor(kTimeout); |
- EXPECT_TRUE(callback.did_run()); |
- } |
- |
- int DeleteCreatedBetween(CookieStore* cs, |
- const base::Time& delete_begin, |
- const base::Time& delete_end) { |
- DCHECK(cs); |
- ResultSavingCookieCallback<int> callback; |
- cs->DeleteAllCreatedBetweenAsync( |
- delete_begin, delete_end, |
- base::Bind( |
- &ResultSavingCookieCallback<int>::Run, |
- base::Unretained(&callback))); |
- RunFor(kTimeout); |
- EXPECT_TRUE(callback.did_run()); |
- return callback.result(); |
- } |
- |
- int DeleteAllCreatedBetweenForHost(CookieStore* cs, |
- const base::Time delete_begin, |
- const base::Time delete_end, |
- const GURL& url) { |
- DCHECK(cs); |
- ResultSavingCookieCallback<int> callback; |
- cs->DeleteAllCreatedBetweenForHostAsync( |
- delete_begin, delete_end, url, |
- base::Bind( |
- &ResultSavingCookieCallback<int>::Run, |
- base::Unretained(&callback))); |
- RunFor(kTimeout); |
- EXPECT_TRUE(callback.did_run()); |
- return callback.result(); |
- } |
- |
- int DeleteSessionCookies(CookieStore* cs) { |
- DCHECK(cs); |
- ResultSavingCookieCallback<int> callback; |
- cs->DeleteSessionCookiesAsync( |
- base::Bind( |
- &ResultSavingCookieCallback<int>::Run, |
- base::Unretained(&callback))); |
- RunFor(kTimeout); |
- EXPECT_TRUE(callback.did_run()); |
- return callback.result(); |
- } |
- |
- void RunFor(int ms) { |
- // Runs the test thread message loop for up to |ms| milliseconds. |
- base::MessageLoop::current()->PostDelayedTask( |
- FROM_HERE, |
- base::Bind(&base::MessageLoop::Quit, weak_factory_->GetWeakPtr()), |
- base::TimeDelta::FromMilliseconds(ms)); |
- base::MessageLoop::current()->Run(); |
- weak_factory_->InvalidateWeakPtrs(); |
- } |
- |
- scoped_refptr<CookieStore> GetCookieStore() { |
- return CookieStoreTestTraits::Create(); |
- } |
- |
- // Compares two cookie lines. |
- void MatchCookieLines(const std::string& line1, const std::string& line2) { |
- EXPECT_EQ(TokenizeCookieLine(line1), TokenizeCookieLine(line2)); |
- } |
- |
- // Check the cookie line by polling until equality or a timeout is reached. |
- void MatchCookieLineWithTimeout(CookieStore* cs, |
- const GURL& url, |
- const std::string& line) { |
- std::string cookies = GetCookies(cs, url); |
- bool matched = (TokenizeCookieLine(line) == TokenizeCookieLine(cookies)); |
- base::Time polling_end_date = base::Time::Now() + |
- base::TimeDelta::FromMilliseconds( |
- CookieStoreTestTraits::creation_time_granularity_in_ms); |
- |
- while (!matched && base::Time::Now() <= polling_end_date) { |
- base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10)); |
- cookies = GetCookies(cs, url); |
- matched = (TokenizeCookieLine(line) == TokenizeCookieLine(cookies)); |
- } |
- |
- EXPECT_TRUE(matched) << "\"" << cookies |
- << "\" does not match \"" << line << "\""; |
- } |
- |
- GURL url_google_; |
- GURL url_google_secure_; |
- GURL url_google_foo_; |
- GURL url_google_bar_; |
- |
- scoped_ptr<base::WeakPtrFactory<base::MessageLoop> > weak_factory_; |
- scoped_ptr<base::MessageLoop> message_loop_; |
- |
- private: |
- // Returns a set of strings of type "name=value". Fails in case of duplicate. |
- std::set<std::string> TokenizeCookieLine(const std::string& line) { |
- std::set<std::string> tokens; |
- base::StringTokenizer tokenizer(line, " ;"); |
- while (tokenizer.GetNext()) |
- EXPECT_TRUE(tokens.insert(tokenizer.token()).second); |
- return tokens; |
- } |
-}; |
- |
-TYPED_TEST_CASE_P(CookieStoreTest); |
- |
-TYPED_TEST_P(CookieStoreTest, TypeTest) { |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- EXPECT_EQ(cs->GetCookieMonster(), |
- (TypeParam::is_cookie_monster) ? |
- static_cast<CookieMonster*>(cs.get()) : NULL); |
-} |
- |
-TYPED_TEST_P(CookieStoreTest, DomainTest) { |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "A=B")); |
- this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); |
- EXPECT_TRUE(this->SetCookie( |
- cs.get(), this->url_google_, "C=D; domain=.google.izzle")); |
- this->MatchCookieLines("A=B; C=D", |
- this->GetCookies(cs.get(), this->url_google_)); |
- |
- // Verify that A=B was set as a host cookie rather than a domain |
- // cookie -- should not be accessible from a sub sub-domain. |
- this->MatchCookieLines( |
- "C=D", this->GetCookies(cs.get(), GURL("http://foo.www.google.izzle"))); |
- |
- // Test and make sure we find domain cookies on the same domain. |
- EXPECT_TRUE(this->SetCookie( |
- cs.get(), this->url_google_, "E=F; domain=.www.google.izzle")); |
- this->MatchCookieLines("A=B; C=D; E=F", |
- this->GetCookies(cs.get(), this->url_google_)); |
- |
- // Test setting a domain= that doesn't start w/ a dot, should |
- // treat it as a domain cookie, as if there was a pre-pended dot. |
- EXPECT_TRUE(this->SetCookie( |
- cs.get(), this->url_google_, "G=H; domain=www.google.izzle")); |
- this->MatchCookieLines("A=B; C=D; E=F; G=H", |
- this->GetCookies(cs.get(), this->url_google_)); |
- |
- // Test domain enforcement, should fail on a sub-domain or something too deep. |
- EXPECT_FALSE( |
- this->SetCookie(cs.get(), this->url_google_, "I=J; domain=.izzle")); |
- this->MatchCookieLines(std::string(), |
- this->GetCookies(cs.get(), GURL("http://a.izzle"))); |
- EXPECT_FALSE(this->SetCookie( |
- cs.get(), this->url_google_, "K=L; domain=.bla.www.google.izzle")); |
- this->MatchCookieLines( |
- "C=D; E=F; G=H", |
- this->GetCookies(cs.get(), GURL("http://bla.www.google.izzle"))); |
- this->MatchCookieLines("A=B; C=D; E=F; G=H", |
- this->GetCookies(cs.get(), this->url_google_)); |
-} |
- |
-// FireFox recognizes domains containing trailing periods as valid. |
-// IE and Safari do not. Assert the expected policy here. |
-TYPED_TEST_P(CookieStoreTest, DomainWithTrailingDotTest) { |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- EXPECT_FALSE(this->SetCookie( |
- cs.get(), this->url_google_, "a=1; domain=.www.google.com.")); |
- EXPECT_FALSE(this->SetCookie( |
- cs.get(), this->url_google_, "b=2; domain=.www.google.com..")); |
- this->MatchCookieLines(std::string(), |
- this->GetCookies(cs.get(), this->url_google_)); |
-} |
- |
-// Test that cookies can bet set on higher level domains. |
-// http://b/issue?id=896491 |
-TYPED_TEST_P(CookieStoreTest, ValidSubdomainTest) { |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- GURL url_abcd("http://a.b.c.d.com"); |
- GURL url_bcd("http://b.c.d.com"); |
- GURL url_cd("http://c.d.com"); |
- GURL url_d("http://d.com"); |
- |
- EXPECT_TRUE(this->SetCookie(cs.get(), url_abcd, "a=1; domain=.a.b.c.d.com")); |
- EXPECT_TRUE(this->SetCookie(cs.get(), url_abcd, "b=2; domain=.b.c.d.com")); |
- EXPECT_TRUE(this->SetCookie(cs.get(), url_abcd, "c=3; domain=.c.d.com")); |
- EXPECT_TRUE(this->SetCookie(cs.get(), url_abcd, "d=4; domain=.d.com")); |
- |
- this->MatchCookieLines("a=1; b=2; c=3; d=4", |
- this->GetCookies(cs.get(), url_abcd)); |
- this->MatchCookieLines("b=2; c=3; d=4", this->GetCookies(cs.get(), url_bcd)); |
- this->MatchCookieLines("c=3; d=4", this->GetCookies(cs.get(), url_cd)); |
- this->MatchCookieLines("d=4", this->GetCookies(cs.get(), url_d)); |
- |
- // Check that the same cookie can exist on different sub-domains. |
- EXPECT_TRUE(this->SetCookie(cs.get(), url_bcd, "X=bcd; domain=.b.c.d.com")); |
- EXPECT_TRUE(this->SetCookie(cs.get(), url_bcd, "X=cd; domain=.c.d.com")); |
- this->MatchCookieLines("b=2; c=3; d=4; X=bcd; X=cd", |
- this->GetCookies(cs.get(), url_bcd)); |
- this->MatchCookieLines("c=3; d=4; X=cd", this->GetCookies(cs.get(), url_cd)); |
-} |
- |
-// Test that setting a cookie which specifies an invalid domain has |
-// no side-effect. An invalid domain in this context is one which does |
-// not match the originating domain. |
-// http://b/issue?id=896472 |
-TYPED_TEST_P(CookieStoreTest, InvalidDomainTest) { |
- { |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- GURL url_foobar("http://foo.bar.com"); |
- |
- // More specific sub-domain than allowed. |
- EXPECT_FALSE( |
- this->SetCookie(cs.get(), url_foobar, "a=1; domain=.yo.foo.bar.com")); |
- |
- EXPECT_FALSE(this->SetCookie(cs.get(), url_foobar, "b=2; domain=.foo.com")); |
- EXPECT_FALSE( |
- this->SetCookie(cs.get(), url_foobar, "c=3; domain=.bar.foo.com")); |
- |
- // Different TLD, but the rest is a substring. |
- EXPECT_FALSE( |
- this->SetCookie(cs.get(), url_foobar, "d=4; domain=.foo.bar.com.net")); |
- |
- // A substring that isn't really a parent domain. |
- EXPECT_FALSE(this->SetCookie(cs.get(), url_foobar, "e=5; domain=ar.com")); |
- |
- // Completely invalid domains: |
- EXPECT_FALSE(this->SetCookie(cs.get(), url_foobar, "f=6; domain=.")); |
- EXPECT_FALSE(this->SetCookie(cs.get(), url_foobar, "g=7; domain=/")); |
- EXPECT_FALSE(this->SetCookie( |
- cs.get(), url_foobar, "h=8; domain=http://foo.bar.com")); |
- EXPECT_FALSE( |
- this->SetCookie(cs.get(), url_foobar, "i=9; domain=..foo.bar.com")); |
- EXPECT_FALSE( |
- this->SetCookie(cs.get(), url_foobar, "j=10; domain=..bar.com")); |
- |
- // Make sure there isn't something quirky in the domain canonicalization |
- // that supports full URL semantics. |
- EXPECT_FALSE(this->SetCookie( |
- cs.get(), url_foobar, "k=11; domain=.foo.bar.com?blah")); |
- EXPECT_FALSE(this->SetCookie( |
- cs.get(), url_foobar, "l=12; domain=.foo.bar.com/blah")); |
- EXPECT_FALSE( |
- this->SetCookie(cs.get(), url_foobar, "m=13; domain=.foo.bar.com:80")); |
- EXPECT_FALSE( |
- this->SetCookie(cs.get(), url_foobar, "n=14; domain=.foo.bar.com:")); |
- EXPECT_FALSE( |
- this->SetCookie(cs.get(), url_foobar, "o=15; domain=.foo.bar.com#sup")); |
- |
- this->MatchCookieLines(std::string(), |
- this->GetCookies(cs.get(), url_foobar)); |
- } |
- |
- { |
- // Make sure the cookie code hasn't gotten its subdomain string handling |
- // reversed, missed a suffix check, etc. It's important here that the two |
- // hosts below have the same domain + registry. |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- GURL url_foocom("http://foo.com.com"); |
- EXPECT_FALSE( |
- this->SetCookie(cs.get(), url_foocom, "a=1; domain=.foo.com.com.com")); |
- this->MatchCookieLines(std::string(), |
- this->GetCookies(cs.get(), url_foocom)); |
- } |
-} |
- |
-// Test the behavior of omitting dot prefix from domain, should |
-// function the same as FireFox. |
-// http://b/issue?id=889898 |
-TYPED_TEST_P(CookieStoreTest, DomainWithoutLeadingDotTest) { |
- { // The omission of dot results in setting a domain cookie. |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- GURL url_hosted("http://manage.hosted.filefront.com"); |
- GURL url_filefront("http://www.filefront.com"); |
- EXPECT_TRUE( |
- this->SetCookie(cs.get(), url_hosted, "sawAd=1; domain=filefront.com")); |
- this->MatchCookieLines("sawAd=1", this->GetCookies(cs.get(), url_hosted)); |
- this->MatchCookieLines("sawAd=1", |
- this->GetCookies(cs.get(), url_filefront)); |
- } |
- |
- { // Even when the domains match exactly, don't consider it host cookie. |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- GURL url("http://www.google.com"); |
- EXPECT_TRUE(this->SetCookie(cs.get(), url, "a=1; domain=www.google.com")); |
- this->MatchCookieLines("a=1", this->GetCookies(cs.get(), url)); |
- this->MatchCookieLines( |
- "a=1", this->GetCookies(cs.get(), GURL("http://sub.www.google.com"))); |
- this->MatchCookieLines( |
- std::string(), |
- this->GetCookies(cs.get(), GURL("http://something-else.com"))); |
- } |
-} |
- |
-// Test that the domain specified in cookie string is treated case-insensitive |
-// http://b/issue?id=896475. |
-TYPED_TEST_P(CookieStoreTest, CaseInsensitiveDomainTest) { |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- GURL url("http://www.google.com"); |
- EXPECT_TRUE(this->SetCookie(cs.get(), url, "a=1; domain=.GOOGLE.COM")); |
- EXPECT_TRUE(this->SetCookie(cs.get(), url, "b=2; domain=.wWw.gOOgLE.coM")); |
- this->MatchCookieLines("a=1; b=2", this->GetCookies(cs.get(), url)); |
-} |
- |
-TYPED_TEST_P(CookieStoreTest, TestIpAddress) { |
- GURL url_ip("http://1.2.3.4/weee"); |
- { |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- EXPECT_TRUE(this->SetCookie(cs.get(), url_ip, kValidCookieLine)); |
- this->MatchCookieLines("A=B", this->GetCookies(cs.get(), url_ip)); |
- } |
- |
- { // IP addresses should not be able to set domain cookies. |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- EXPECT_FALSE(this->SetCookie(cs.get(), url_ip, "b=2; domain=.1.2.3.4")); |
- EXPECT_FALSE(this->SetCookie(cs.get(), url_ip, "c=3; domain=.3.4")); |
- this->MatchCookieLines(std::string(), this->GetCookies(cs.get(), url_ip)); |
- // It should be allowed to set a cookie if domain= matches the IP address |
- // exactly. This matches IE/Firefox, even though it seems a bit wrong. |
- EXPECT_FALSE(this->SetCookie(cs.get(), url_ip, "b=2; domain=1.2.3.3")); |
- this->MatchCookieLines(std::string(), this->GetCookies(cs.get(), url_ip)); |
- EXPECT_TRUE(this->SetCookie(cs.get(), url_ip, "b=2; domain=1.2.3.4")); |
- this->MatchCookieLines("b=2", this->GetCookies(cs.get(), url_ip)); |
- } |
-} |
- |
-// Test host cookies, and setting of cookies on TLD. |
-TYPED_TEST_P(CookieStoreTest, TestNonDottedAndTLD) { |
- { |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- GURL url("http://com/"); |
- // Allow setting on "com", (but only as a host cookie). |
- EXPECT_TRUE(this->SetCookie(cs.get(), url, "a=1")); |
- EXPECT_FALSE(this->SetCookie(cs.get(), url, "b=2; domain=.com")); |
- EXPECT_FALSE(this->SetCookie(cs.get(), url, "c=3; domain=com")); |
- this->MatchCookieLines("a=1", this->GetCookies(cs.get(), url)); |
- // Make sure it doesn't show up for a normal .com, it should be a host |
- // not a domain cookie. |
- this->MatchCookieLines( |
- std::string(), |
- this->GetCookies(cs.get(), GURL("http://hopefully-no-cookies.com/"))); |
- if (TypeParam::supports_non_dotted_domains) { |
- this->MatchCookieLines(std::string(), |
- this->GetCookies(cs.get(), GURL("http://.com/"))); |
- } |
- } |
- |
- { |
- // http://com. should be treated the same as http://com. |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- GURL url("http://com./index.html"); |
- if (TypeParam::supports_trailing_dots) { |
- EXPECT_TRUE(this->SetCookie(cs.get(), url, "a=1")); |
- this->MatchCookieLines("a=1", this->GetCookies(cs.get(), url)); |
- this->MatchCookieLines( |
- std::string(), |
- this->GetCookies(cs.get(), |
- GURL("http://hopefully-no-cookies.com./"))); |
- } else { |
- EXPECT_FALSE(this->SetCookie(cs.get(), url, "a=1")); |
- } |
- } |
- |
- { // Should not be able to set host cookie from a subdomain. |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- GURL url("http://a.b"); |
- EXPECT_FALSE(this->SetCookie(cs.get(), url, "a=1; domain=.b")); |
- EXPECT_FALSE(this->SetCookie(cs.get(), url, "b=2; domain=b")); |
- this->MatchCookieLines(std::string(), this->GetCookies(cs.get(), url)); |
- } |
- |
- { // Same test as above, but explicitly on a known TLD (com). |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- GURL url("http://google.com"); |
- EXPECT_FALSE(this->SetCookie(cs.get(), url, "a=1; domain=.com")); |
- EXPECT_FALSE(this->SetCookie(cs.get(), url, "b=2; domain=com")); |
- this->MatchCookieLines(std::string(), this->GetCookies(cs.get(), url)); |
- } |
- |
- { // Make sure can't set cookie on TLD which is dotted. |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- GURL url("http://google.co.uk"); |
- EXPECT_FALSE(this->SetCookie(cs.get(), url, "a=1; domain=.co.uk")); |
- EXPECT_FALSE(this->SetCookie(cs.get(), url, "b=2; domain=.uk")); |
- this->MatchCookieLines(std::string(), this->GetCookies(cs.get(), url)); |
- this->MatchCookieLines( |
- std::string(), |
- this->GetCookies(cs.get(), GURL("http://something-else.co.uk"))); |
- this->MatchCookieLines( |
- std::string(), |
- this->GetCookies(cs.get(), GURL("http://something-else.uk"))); |
- } |
- |
- { // Intranet URLs should only be able to set host cookies. |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- GURL url("http://b"); |
- EXPECT_TRUE(this->SetCookie(cs.get(), url, "a=1")); |
- EXPECT_FALSE(this->SetCookie(cs.get(), url, "b=2; domain=.b")); |
- EXPECT_FALSE(this->SetCookie(cs.get(), url, "c=3; domain=b")); |
- this->MatchCookieLines("a=1", this->GetCookies(cs.get(), url)); |
- } |
-} |
- |
-// Test reading/writing cookies when the domain ends with a period, |
-// as in "www.google.com." |
-TYPED_TEST_P(CookieStoreTest, TestHostEndsWithDot) { |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- GURL url("http://www.google.com"); |
- GURL url_with_dot("http://www.google.com."); |
- EXPECT_TRUE(this->SetCookie(cs.get(), url, "a=1")); |
- this->MatchCookieLines("a=1", this->GetCookies(cs.get(), url)); |
- |
- if (TypeParam::supports_trailing_dots) { |
- // Do not share cookie space with the dot version of domain. |
- // Note: this is not what FireFox does, but it _is_ what IE+Safari do. |
- EXPECT_FALSE( |
- this->SetCookie(cs.get(), url, "b=2; domain=.www.google.com.")); |
- this->MatchCookieLines("a=1", this->GetCookies(cs.get(), url)); |
- |
- EXPECT_TRUE( |
- this->SetCookie(cs.get(), url_with_dot, "b=2; domain=.google.com.")); |
- this->MatchCookieLines("b=2", this->GetCookies(cs.get(), url_with_dot)); |
- } else { |
- EXPECT_TRUE(this->SetCookie(cs.get(), url, "b=2; domain=.www.google.com.")); |
- EXPECT_FALSE( |
- this->SetCookie(cs.get(), url_with_dot, "b=2; domain=.google.com.")); |
- } |
- |
- // Make sure there weren't any side effects. |
- this->MatchCookieLines( |
- std::string(), |
- this->GetCookies(cs.get(), GURL("http://hopefully-no-cookies.com/"))); |
- this->MatchCookieLines(std::string(), |
- this->GetCookies(cs.get(), GURL("http://.com/"))); |
-} |
- |
-TYPED_TEST_P(CookieStoreTest, InvalidScheme) { |
- if (!TypeParam::filters_schemes) |
- return; |
- |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- EXPECT_FALSE(this->SetCookie(cs.get(), GURL(kUrlFtp), kValidCookieLine)); |
-} |
- |
-TYPED_TEST_P(CookieStoreTest, InvalidScheme_Read) { |
- if (!TypeParam::filters_schemes) |
- return; |
- |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- EXPECT_TRUE( |
- this->SetCookie(cs.get(), GURL(kUrlGoogle), kValidDomainCookieLine)); |
- this->MatchCookieLines(std::string(), |
- this->GetCookies(cs.get(), GURL(kUrlFtp))); |
-} |
- |
-TYPED_TEST_P(CookieStoreTest, PathTest) { |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- std::string url("http://www.google.izzle"); |
- EXPECT_TRUE(this->SetCookie(cs.get(), GURL(url), "A=B; path=/wee")); |
- this->MatchCookieLines("A=B", this->GetCookies(cs.get(), GURL(url + "/wee"))); |
- this->MatchCookieLines("A=B", |
- this->GetCookies(cs.get(), GURL(url + "/wee/"))); |
- this->MatchCookieLines("A=B", |
- this->GetCookies(cs.get(), GURL(url + "/wee/war"))); |
- this->MatchCookieLines( |
- "A=B", this->GetCookies(cs.get(), GURL(url + "/wee/war/more/more"))); |
- if (!TypeParam::has_path_prefix_bug) |
- this->MatchCookieLines(std::string(), |
- this->GetCookies(cs.get(), GURL(url + "/weehee"))); |
- this->MatchCookieLines(std::string(), |
- this->GetCookies(cs.get(), GURL(url + "/"))); |
- |
- // If we add a 0 length path, it should default to / |
- EXPECT_TRUE(this->SetCookie(cs.get(), GURL(url), "A=C; path=")); |
- this->MatchCookieLines("A=B; A=C", |
- this->GetCookies(cs.get(), GURL(url + "/wee"))); |
- this->MatchCookieLines("A=C", this->GetCookies(cs.get(), GURL(url + "/"))); |
-} |
- |
-TYPED_TEST_P(CookieStoreTest, EmptyExpires) { |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- CookieOptions options; |
- if (!TypeParam::supports_http_only) |
- options.set_include_httponly(); |
- GURL url("http://www7.ipdl.inpit.go.jp/Tokujitu/tjkta.ipdl?N0000=108"); |
- std::string set_cookie_line = |
- "ACSTM=20130308043820420042; path=/; domain=ipdl.inpit.go.jp; Expires="; |
- std::string cookie_line = "ACSTM=20130308043820420042"; |
- |
- this->SetCookieWithOptions(cs.get(), url, set_cookie_line, options); |
- this->MatchCookieLines(cookie_line, |
- this->GetCookiesWithOptions(cs.get(), url, options)); |
- |
- options.set_server_time(base::Time::Now() - base::TimeDelta::FromHours(1)); |
- this->SetCookieWithOptions(cs.get(), url, set_cookie_line, options); |
- this->MatchCookieLines(cookie_line, |
- this->GetCookiesWithOptions(cs.get(), url, options)); |
- |
- options.set_server_time(base::Time::Now() + base::TimeDelta::FromHours(1)); |
- this->SetCookieWithOptions(cs.get(), url, set_cookie_line, options); |
- this->MatchCookieLines(cookie_line, |
- this->GetCookiesWithOptions(cs.get(), url, options)); |
-} |
- |
-TYPED_TEST_P(CookieStoreTest, HttpOnlyTest) { |
- if (!TypeParam::supports_http_only) |
- return; |
- |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- CookieOptions options; |
- options.set_include_httponly(); |
- |
- // Create a httponly cookie. |
- EXPECT_TRUE(this->SetCookieWithOptions( |
- cs.get(), this->url_google_, "A=B; httponly", options)); |
- |
- // Check httponly read protection. |
- this->MatchCookieLines(std::string(), |
- this->GetCookies(cs.get(), this->url_google_)); |
- this->MatchCookieLines( |
- "A=B", this->GetCookiesWithOptions(cs.get(), this->url_google_, options)); |
- |
- // Check httponly overwrite protection. |
- EXPECT_FALSE(this->SetCookie(cs.get(), this->url_google_, "A=C")); |
- this->MatchCookieLines(std::string(), |
- this->GetCookies(cs.get(), this->url_google_)); |
- this->MatchCookieLines( |
- "A=B", this->GetCookiesWithOptions(cs.get(), this->url_google_, options)); |
- EXPECT_TRUE( |
- this->SetCookieWithOptions(cs.get(), this->url_google_, "A=C", options)); |
- this->MatchCookieLines("A=C", this->GetCookies(cs.get(), this->url_google_)); |
- |
- // Check httponly create protection. |
- EXPECT_FALSE(this->SetCookie(cs.get(), this->url_google_, "B=A; httponly")); |
- this->MatchCookieLines( |
- "A=C", this->GetCookiesWithOptions(cs.get(), this->url_google_, options)); |
- EXPECT_TRUE(this->SetCookieWithOptions( |
- cs.get(), this->url_google_, "B=A; httponly", options)); |
- this->MatchCookieLines( |
- "A=C; B=A", |
- this->GetCookiesWithOptions(cs.get(), this->url_google_, options)); |
- this->MatchCookieLines("A=C", this->GetCookies(cs.get(), this->url_google_)); |
-} |
- |
-TYPED_TEST_P(CookieStoreTest, TestCookieDeletion) { |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- |
- // Create a session cookie. |
- EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, kValidCookieLine)); |
- this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); |
- // Delete it via Max-Age. |
- EXPECT_TRUE(this->SetCookie(cs.get(), |
- this->url_google_, |
- std::string(kValidCookieLine) + "; max-age=0")); |
- this->MatchCookieLineWithTimeout(cs.get(), this->url_google_, std::string()); |
- |
- // Create a session cookie. |
- EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, kValidCookieLine)); |
- this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); |
- // Delete it via Expires. |
- EXPECT_TRUE(this->SetCookie(cs.get(), |
- this->url_google_, |
- std::string(kValidCookieLine) + |
- "; expires=Mon, 18-Apr-1977 22:50:13 GMT")); |
- this->MatchCookieLines(std::string(), |
- this->GetCookies(cs.get(), this->url_google_)); |
- |
- // Create a persistent cookie. |
- EXPECT_TRUE(this->SetCookie( |
- cs.get(), |
- this->url_google_, |
- std::string(kValidCookieLine) + "; expires=Mon, 18-Apr-22 22:50:13 GMT")); |
- |
- this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); |
- // Delete it via Max-Age. |
- EXPECT_TRUE(this->SetCookie(cs.get(), |
- this->url_google_, |
- std::string(kValidCookieLine) + "; max-age=0")); |
- this->MatchCookieLineWithTimeout(cs.get(), this->url_google_, std::string()); |
- |
- // Create a persistent cookie. |
- EXPECT_TRUE(this->SetCookie( |
- cs.get(), |
- this->url_google_, |
- std::string(kValidCookieLine) + "; expires=Mon, 18-Apr-22 22:50:13 GMT")); |
- this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); |
- // Delete it via Expires. |
- EXPECT_TRUE(this->SetCookie(cs.get(), |
- this->url_google_, |
- std::string(kValidCookieLine) + |
- "; expires=Mon, 18-Apr-1977 22:50:13 GMT")); |
- this->MatchCookieLines(std::string(), |
- this->GetCookies(cs.get(), this->url_google_)); |
- |
- // Create a persistent cookie. |
- EXPECT_TRUE(this->SetCookie( |
- cs.get(), |
- this->url_google_, |
- std::string(kValidCookieLine) + "; expires=Mon, 18-Apr-22 22:50:13 GMT")); |
- this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); |
- // Check that it is not deleted with significant enough clock skew. |
- base::Time server_time; |
- EXPECT_TRUE(base::Time::FromString("Sun, 17-Apr-1977 22:50:13 GMT", |
- &server_time)); |
- EXPECT_TRUE(this->SetCookieWithServerTime( |
- cs.get(), |
- this->url_google_, |
- std::string(kValidCookieLine) + "; expires=Mon, 18-Apr-1977 22:50:13 GMT", |
- server_time)); |
- this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); |
- |
- // Create a persistent cookie. |
- EXPECT_TRUE(this->SetCookie( |
- cs.get(), |
- this->url_google_, |
- std::string(kValidCookieLine) + "; expires=Mon, 18-Apr-22 22:50:13 GMT")); |
- this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); |
- // Delete it via Expires, with a unix epoch of 0. |
- EXPECT_TRUE(this->SetCookie(cs.get(), |
- this->url_google_, |
- std::string(kValidCookieLine) + |
- "; expires=Thu, 1-Jan-1970 00:00:00 GMT")); |
- this->MatchCookieLines(std::string(), |
- this->GetCookies(cs.get(), this->url_google_)); |
-} |
- |
-TYPED_TEST_P(CookieStoreTest, TestDeleteAllCreatedBetween) { |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- const base::Time last_month = base::Time::Now() - |
- base::TimeDelta::FromDays(30); |
- const base::Time last_minute = base::Time::Now() - |
- base::TimeDelta::FromMinutes(1); |
- const base::Time next_minute = base::Time::Now() + |
- base::TimeDelta::FromMinutes(1); |
- const base::Time next_month = base::Time::Now() + |
- base::TimeDelta::FromDays(30); |
- |
- // Add a cookie. |
- EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "A=B")); |
- // Check that the cookie is in the store. |
- this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); |
- |
- // Remove cookies in empty intervals. |
- EXPECT_EQ(0, this->DeleteCreatedBetween(cs.get(), last_month, last_minute)); |
- EXPECT_EQ(0, this->DeleteCreatedBetween(cs.get(), next_minute, next_month)); |
- // Check that the cookie is still there. |
- this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); |
- |
- // Remove the cookie with an interval defined by two dates. |
- EXPECT_EQ(1, this->DeleteCreatedBetween(cs.get(), last_minute, next_minute)); |
- // Check that the cookie disappeared. |
- this->MatchCookieLines(std::string(), |
- this->GetCookies(cs.get(), this->url_google_)); |
- |
- // Add another cookie. |
- EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "C=D")); |
- // Check that the cookie is in the store. |
- this->MatchCookieLines("C=D", this->GetCookies(cs.get(), this->url_google_)); |
- |
- // Remove the cookie with a null ending time. |
- EXPECT_EQ(1, this->DeleteCreatedBetween(cs.get(), last_minute, base::Time())); |
- // Check that the cookie disappeared. |
- this->MatchCookieLines(std::string(), |
- this->GetCookies(cs.get(), this->url_google_)); |
-} |
- |
-TYPED_TEST_P(CookieStoreTest, TestDeleteAllCreatedBetweenForHost) { |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- GURL url_not_google("http://www.notgoogle.com"); |
- base::Time now = base::Time::Now(); |
- |
- // These 3 cookies match the time range and host. |
- EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "A=B")); |
- EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "C=D")); |
- EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "Y=Z")); |
- |
- // This cookie does not match host. |
- EXPECT_TRUE(this->SetCookie(cs.get(), url_not_google, "E=F")); |
- |
- // Delete cookies. |
- EXPECT_EQ( |
- 3, // Deletes A=B, C=D, Y=Z |
- this->DeleteAllCreatedBetweenForHost( |
- cs.get(), now, base::Time::Max(), this->url_google_)); |
-} |
- |
-TYPED_TEST_P(CookieStoreTest, TestSecure) { |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- |
- EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "A=B")); |
- this->MatchCookieLines("A=B", |
- this->GetCookies(cs.get(), this->url_google_)); |
- this->MatchCookieLines( |
- "A=B", this->GetCookies(cs.get(), this->url_google_secure_)); |
- |
- EXPECT_TRUE( |
- this->SetCookie(cs.get(), this->url_google_secure_, "A=B; secure")); |
- // The secure should overwrite the non-secure. |
- this->MatchCookieLines(std::string(), |
- this->GetCookies(cs.get(), this->url_google_)); |
- this->MatchCookieLines("A=B", |
- this->GetCookies(cs.get(), this->url_google_secure_)); |
- |
- EXPECT_TRUE( |
- this->SetCookie(cs.get(), this->url_google_secure_, "D=E; secure")); |
- this->MatchCookieLines(std::string(), |
- this->GetCookies(cs.get(), this->url_google_)); |
- this->MatchCookieLines("A=B; D=E", |
- this->GetCookies(cs.get(), this->url_google_secure_)); |
- |
- EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_secure_, "A=B")); |
- // The non-secure should overwrite the secure. |
- this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); |
- this->MatchCookieLines("D=E; A=B", |
- this->GetCookies(cs.get(), this->url_google_secure_)); |
-} |
- |
-static const int kLastAccessThresholdMilliseconds = 200; |
- |
-// Formerly NetUtilTest.CookieTest back when we used wininet's cookie handling. |
-TYPED_TEST_P(CookieStoreTest, NetUtilCookieTest) { |
- const GURL test_url("http://mojo.jojo.google.izzle/"); |
- |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- |
- EXPECT_TRUE(this->SetCookie(cs.get(), test_url, "foo=bar")); |
- std::string value = this->GetCookies(cs.get(), test_url); |
- this->MatchCookieLines("foo=bar", value); |
- |
- // test that we can retrieve all cookies: |
- EXPECT_TRUE(this->SetCookie(cs.get(), test_url, "x=1")); |
- EXPECT_TRUE(this->SetCookie(cs.get(), test_url, "y=2")); |
- |
- std::string result = this->GetCookies(cs.get(), test_url); |
- EXPECT_FALSE(result.empty()); |
- EXPECT_NE(result.find("x=1"), std::string::npos) << result; |
- EXPECT_NE(result.find("y=2"), std::string::npos) << result; |
-} |
- |
-TYPED_TEST_P(CookieStoreTest, OverwritePersistentCookie) { |
- GURL url_google("http://www.google.com/"); |
- GURL url_chromium("http://chromium.org"); |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- |
- // Insert a cookie "a" for path "/path1" |
- EXPECT_TRUE(this->SetCookie(cs.get(), |
- url_google, |
- "a=val1; path=/path1; " |
- "expires=Mon, 18-Apr-22 22:50:13 GMT")); |
- |
- // Insert a cookie "b" for path "/path1" |
- EXPECT_TRUE(this->SetCookie(cs.get(), |
- url_google, |
- "b=val1; path=/path1; " |
- "expires=Mon, 18-Apr-22 22:50:14 GMT")); |
- |
- // Insert a cookie "b" for path "/path1", that is httponly. This should |
- // overwrite the non-http-only version. |
- CookieOptions allow_httponly; |
- allow_httponly.set_include_httponly(); |
- EXPECT_TRUE(this->SetCookieWithOptions(cs.get(), |
- url_google, |
- "b=val2; path=/path1; httponly; " |
- "expires=Mon, 18-Apr-22 22:50:14 GMT", |
- allow_httponly)); |
- |
- // Insert a cookie "a" for path "/path1". This should overwrite. |
- EXPECT_TRUE(this->SetCookie(cs.get(), |
- url_google, |
- "a=val33; path=/path1; " |
- "expires=Mon, 18-Apr-22 22:50:14 GMT")); |
- |
- // Insert a cookie "a" for path "/path2". This should NOT overwrite |
- // cookie "a", since the path is different. |
- EXPECT_TRUE(this->SetCookie(cs.get(), |
- url_google, |
- "a=val9; path=/path2; " |
- "expires=Mon, 18-Apr-22 22:50:14 GMT")); |
- |
- // Insert a cookie "a" for path "/path1", but this time for "chromium.org". |
- // Although the name and path match, the hostnames do not, so shouldn't |
- // overwrite. |
- EXPECT_TRUE(this->SetCookie(cs.get(), |
- url_chromium, |
- "a=val99; path=/path1; " |
- "expires=Mon, 18-Apr-22 22:50:14 GMT")); |
- |
- if (TypeParam::supports_http_only) { |
- this->MatchCookieLines( |
- "a=val33", |
- this->GetCookies(cs.get(), GURL("http://www.google.com/path1"))); |
- } else { |
- this->MatchCookieLines( |
- "a=val33; b=val2", |
- this->GetCookies(cs.get(), GURL("http://www.google.com/path1"))); |
- } |
- this->MatchCookieLines( |
- "a=val9", |
- this->GetCookies(cs.get(), GURL("http://www.google.com/path2"))); |
- this->MatchCookieLines( |
- "a=val99", this->GetCookies(cs.get(), GURL("http://chromium.org/path1"))); |
-} |
- |
-TYPED_TEST_P(CookieStoreTest, CookieOrdering) { |
- // Put a random set of cookies into a store and make sure they're returned in |
- // the right order. |
- // Cookies should be sorted by path length and creation time, as per RFC6265. |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- EXPECT_TRUE(this->SetCookie( |
- cs.get(), GURL("http://d.c.b.a.google.com/aa/x.html"), "c=1")); |
- EXPECT_TRUE(this->SetCookie(cs.get(), |
- GURL("http://b.a.google.com/aa/bb/cc/x.html"), |
- "d=1; domain=b.a.google.com")); |
- base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds( |
- TypeParam::creation_time_granularity_in_ms)); |
- EXPECT_TRUE(this->SetCookie(cs.get(), |
- GURL("http://b.a.google.com/aa/bb/cc/x.html"), |
- "a=4; domain=b.a.google.com")); |
- base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds( |
- TypeParam::creation_time_granularity_in_ms)); |
- EXPECT_TRUE(this->SetCookie(cs.get(), |
- GURL("http://c.b.a.google.com/aa/bb/cc/x.html"), |
- "e=1; domain=c.b.a.google.com")); |
- EXPECT_TRUE(this->SetCookie( |
- cs.get(), GURL("http://d.c.b.a.google.com/aa/bb/x.html"), "b=1")); |
- EXPECT_TRUE(this->SetCookie( |
- cs.get(), GURL("http://news.bbc.co.uk/midpath/x.html"), "g=10")); |
- EXPECT_EQ("d=1; a=4; e=1; b=1; c=1", |
- this->GetCookies(cs.get(), |
- GURL("http://d.c.b.a.google.com/aa/bb/cc/dd"))); |
-} |
- |
-TYPED_TEST_P(CookieStoreTest, DeleteSessionCookie) { |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- // Create a session cookie and a persistent cookie. |
- EXPECT_TRUE(this->SetCookie( |
- cs.get(), this->url_google_, std::string(kValidCookieLine))); |
- EXPECT_TRUE(this->SetCookie(cs.get(), |
- this->url_google_, |
- "C=D; path=/; domain=google.izzle;" |
- "expires=Mon, 18-Apr-22 22:50:13 GMT")); |
- this->MatchCookieLines("A=B; C=D", |
- this->GetCookies(cs.get(), this->url_google_)); |
- // Delete the session cookie. |
- this->DeleteSessionCookies(cs.get()); |
- // Check that the session cookie has been deleted but not the persistent one. |
- EXPECT_EQ("C=D", this->GetCookies(cs.get(), this->url_google_)); |
-} |
- |
-REGISTER_TYPED_TEST_CASE_P(CookieStoreTest, |
- TypeTest, |
- DomainTest, |
- DomainWithTrailingDotTest, |
- ValidSubdomainTest, |
- InvalidDomainTest, |
- DomainWithoutLeadingDotTest, |
- CaseInsensitiveDomainTest, |
- TestIpAddress, |
- TestNonDottedAndTLD, |
- TestHostEndsWithDot, |
- InvalidScheme, |
- InvalidScheme_Read, |
- PathTest, |
- EmptyExpires, |
- HttpOnlyTest, |
- TestCookieDeletion, |
- TestDeleteAllCreatedBetween, |
- TestDeleteAllCreatedBetweenForHost, |
- TestSecure, |
- NetUtilCookieTest, |
- OverwritePersistentCookie, |
- CookieOrdering, |
- DeleteSessionCookie); |
- |
-template<class CookieStoreTestTraits> |
-class MultiThreadedCookieStoreTest : |
- public CookieStoreTest<CookieStoreTestTraits> { |
- public: |
- MultiThreadedCookieStoreTest() : other_thread_("CMTthread") {} |
- |
- // Helper methods for calling the asynchronous CookieStore methods |
- // from a different thread. |
- |
- void GetCookiesTask(CookieStore* cs, |
- const GURL& url, |
- StringResultCookieCallback* callback) { |
- CookieOptions options; |
- if (!CookieStoreTestTraits::supports_http_only) |
- options.set_include_httponly(); |
- cs->GetCookiesWithOptionsAsync( |
- url, options, |
- base::Bind(&StringResultCookieCallback::Run, |
- base::Unretained(callback))); |
- } |
- |
- void GetCookiesWithOptionsTask(CookieStore* cs, |
- const GURL& url, |
- const CookieOptions& options, |
- StringResultCookieCallback* callback) { |
- cs->GetCookiesWithOptionsAsync( |
- url, options, |
- base::Bind(&StringResultCookieCallback::Run, |
- base::Unretained(callback))); |
- } |
- |
- void SetCookieWithOptionsTask(CookieStore* cs, |
- const GURL& url, |
- const std::string& cookie_line, |
- const CookieOptions& options, |
- ResultSavingCookieCallback<bool>* callback) { |
- cs->SetCookieWithOptionsAsync( |
- url, cookie_line, options, |
- base::Bind( |
- &ResultSavingCookieCallback<bool>::Run, |
- base::Unretained(callback))); |
- } |
- |
- void DeleteCookieTask(CookieStore* cs, |
- const GURL& url, |
- const std::string& cookie_name, |
- NoResultCookieCallback* callback) { |
- cs->DeleteCookieAsync( |
- url, cookie_name, |
- base::Bind(&NoResultCookieCallback::Run, base::Unretained(callback))); |
- } |
- |
- void DeleteSessionCookiesTask(CookieStore* cs, |
- ResultSavingCookieCallback<int>* callback) { |
- cs->DeleteSessionCookiesAsync( |
- base::Bind( |
- &ResultSavingCookieCallback<int>::Run, |
- base::Unretained(callback))); |
- } |
- |
- protected: |
- void RunOnOtherThread(const base::Closure& task) { |
- other_thread_.Start(); |
- other_thread_.message_loop()->PostTask(FROM_HERE, task); |
- CookieStoreTest<CookieStoreTestTraits>::RunFor(kTimeout); |
- other_thread_.Stop(); |
- } |
- |
- Thread other_thread_; |
-}; |
- |
-TYPED_TEST_CASE_P(MultiThreadedCookieStoreTest); |
- |
-// TODO(ycxiao): Eventually, we will need to create a separate thread, create |
-// the cookie store on that thread (or at least its store, i.e., the DB |
-// thread). |
-TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckGetCookies) { |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "A=B")); |
- this->MatchCookieLines("A=B", this->GetCookies(cs.get(), this->url_google_)); |
- StringResultCookieCallback callback(&this->other_thread_); |
- base::Closure task = base::Bind( |
- &net::MultiThreadedCookieStoreTest<TypeParam>::GetCookiesTask, |
- base::Unretained(this), |
- cs, this->url_google_, &callback); |
- this->RunOnOtherThread(task); |
- EXPECT_TRUE(callback.did_run()); |
- EXPECT_EQ("A=B", callback.result()); |
-} |
- |
-TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckGetCookiesWithOptions) { |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- CookieOptions options; |
- if (!TypeParam::supports_http_only) |
- options.set_include_httponly(); |
- EXPECT_TRUE(this->SetCookie(cs.get(), this->url_google_, "A=B")); |
- this->MatchCookieLines( |
- "A=B", this->GetCookiesWithOptions(cs.get(), this->url_google_, options)); |
- StringResultCookieCallback callback(&this->other_thread_); |
- base::Closure task = base::Bind( |
- &net::MultiThreadedCookieStoreTest<TypeParam>::GetCookiesWithOptionsTask, |
- base::Unretained(this), |
- cs, this->url_google_, options, &callback); |
- this->RunOnOtherThread(task); |
- EXPECT_TRUE(callback.did_run()); |
- EXPECT_EQ("A=B", callback.result()); |
-} |
- |
-TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckSetCookieWithOptions) { |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- CookieOptions options; |
- if (!TypeParam::supports_http_only) |
- options.set_include_httponly(); |
- EXPECT_TRUE( |
- this->SetCookieWithOptions(cs.get(), this->url_google_, "A=B", options)); |
- ResultSavingCookieCallback<bool> callback(&this->other_thread_); |
- base::Closure task = base::Bind( |
- &net::MultiThreadedCookieStoreTest<TypeParam>::SetCookieWithOptionsTask, |
- base::Unretained(this), |
- cs, this->url_google_, "A=B", options, &callback); |
- this->RunOnOtherThread(task); |
- EXPECT_TRUE(callback.did_run()); |
- EXPECT_TRUE(callback.result()); |
-} |
- |
-TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckDeleteCookie) { |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- CookieOptions options; |
- if (!TypeParam::supports_http_only) |
- options.set_include_httponly(); |
- EXPECT_TRUE( |
- this->SetCookieWithOptions(cs.get(), this->url_google_, "A=B", options)); |
- this->DeleteCookie(cs.get(), this->url_google_, "A"); |
- EXPECT_TRUE( |
- this->SetCookieWithOptions(cs.get(), this->url_google_, "A=B", options)); |
- NoResultCookieCallback callback(&this->other_thread_); |
- base::Closure task = base::Bind( |
- &net::MultiThreadedCookieStoreTest<TypeParam>::DeleteCookieTask, |
- base::Unretained(this), |
- cs, this->url_google_, "A", &callback); |
- this->RunOnOtherThread(task); |
- EXPECT_TRUE(callback.did_run()); |
-} |
- |
-TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckDeleteSessionCookies) { |
- scoped_refptr<CookieStore> cs(this->GetCookieStore()); |
- CookieOptions options; |
- if (!TypeParam::supports_http_only) |
- options.set_include_httponly(); |
- EXPECT_TRUE( |
- this->SetCookieWithOptions(cs.get(), this->url_google_, "A=B", options)); |
- EXPECT_TRUE( |
- this->SetCookieWithOptions(cs.get(), |
- this->url_google_, |
- "B=C; expires=Mon, 18-Apr-22 22:50:13 GMT", |
- options)); |
- EXPECT_EQ(1, this->DeleteSessionCookies(cs.get())); |
- EXPECT_EQ(0, this->DeleteSessionCookies(cs.get())); |
- EXPECT_TRUE( |
- this->SetCookieWithOptions(cs.get(), this->url_google_, "A=B", options)); |
- ResultSavingCookieCallback<int> callback(&this->other_thread_); |
- base::Closure task = base::Bind( |
- &net::MultiThreadedCookieStoreTest<TypeParam>::DeleteSessionCookiesTask, |
- base::Unretained(this), |
- cs, &callback); |
- this->RunOnOtherThread(task); |
- EXPECT_TRUE(callback.did_run()); |
- EXPECT_EQ(1, callback.result()); |
-} |
- |
-REGISTER_TYPED_TEST_CASE_P(MultiThreadedCookieStoreTest, |
- ThreadCheckGetCookies, |
- ThreadCheckGetCookiesWithOptions, |
- ThreadCheckSetCookieWithOptions, |
- ThreadCheckDeleteCookie, |
- ThreadCheckDeleteSessionCookies); |
- |
-} // namespace net |
- |
-#endif // NET_COOKIES_COOKIE_STORE_UNITTEST_H_ |