Chromium Code Reviews| Index: chrome/browser/net/sqlite_persistent_cookie_store_unittest.cc |
| diff --git a/chrome/browser/net/sqlite_persistent_cookie_store_unittest.cc b/chrome/browser/net/sqlite_persistent_cookie_store_unittest.cc |
| index 11d1cfecf8c0be4130b612014b7fb49bd24c03f6..8e83d4b83681cea1a22ea52300113ffd43cf1931 100644 |
| --- a/chrome/browser/net/sqlite_persistent_cookie_store_unittest.cc |
| +++ b/chrome/browser/net/sqlite_persistent_cookie_store_unittest.cc |
| @@ -19,6 +19,7 @@ |
| #include "sql/connection.h" |
| #include "sql/meta_table.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| +#include "webkit/quota/mock_special_storage_policy.h" |
| using content::BrowserThread; |
| @@ -67,7 +68,8 @@ class SQLitePersistentCookieStoreTest : public testing::Test { |
| std::vector<net::CookieMonster::CanonicalCookie*>* cookies) { |
| store_ = new SQLitePersistentCookieStore( |
| temp_dir_.path().Append(chrome::kCookieFilename), |
| - restore_old_session_cookies); |
| + restore_old_session_cookies, |
| + NULL); |
| Load(cookies); |
| } |
| @@ -118,7 +120,7 @@ class SQLitePersistentCookieStoreTest : public testing::Test { |
| TEST_F(SQLitePersistentCookieStoreTest, KeepOnDestruction) { |
| InitializeStore(false); |
| // Put some data - any data - on disk, to have something to keep. |
| - AddCookie("A", "B", "http://foo.bar", "/", base::Time::Now()); |
|
jochen (gone - plz use gerrit)
2012/05/24 11:04:03
the domain key of a cookie doesn't have a scheme.
|
| + AddCookie("A", "B", "foo.bar", "/", base::Time::Now()); |
| store_->SetClearLocalStateOnExit(false); |
| DestroyStore(); |
| @@ -131,7 +133,7 @@ TEST_F(SQLitePersistentCookieStoreTest, KeepOnDestruction) { |
| TEST_F(SQLitePersistentCookieStoreTest, RemoveOnDestruction) { |
| InitializeStore(false); |
| // Put some data - any data - on disk, to have something to remove. |
| - AddCookie("A", "B", "http://foo.bar", "/", base::Time::Now()); |
| + AddCookie("A", "B", "foo.bar", "/", base::Time::Now()); |
| store_->SetClearLocalStateOnExit(true); |
| DestroyStore(); |
| @@ -141,14 +143,14 @@ TEST_F(SQLitePersistentCookieStoreTest, RemoveOnDestruction) { |
| TEST_F(SQLitePersistentCookieStoreTest, TestInvalidMetaTableRecovery) { |
| InitializeStore(false); |
| - AddCookie("A", "B", "http://foo.bar", "/", base::Time::Now()); |
| + AddCookie("A", "B", "foo.bar", "/", base::Time::Now()); |
| DestroyStore(); |
| // Load up the store and verify that it has good data in it. |
| std::vector<net::CookieMonster::CanonicalCookie*> cookies; |
| CreateAndLoad(false, &cookies); |
| ASSERT_EQ(1U, cookies.size()); |
| - ASSERT_STREQ("http://foo.bar", cookies[0]->Domain().c_str()); |
| + ASSERT_STREQ("foo.bar", cookies[0]->Domain().c_str()); |
| ASSERT_STREQ("A", cookies[0]->Name().c_str()); |
| ASSERT_STREQ("B", cookies[0]->Value().c_str()); |
| DestroyStore(); |
| @@ -170,11 +172,11 @@ TEST_F(SQLitePersistentCookieStoreTest, TestInvalidMetaTableRecovery) { |
| ASSERT_EQ(0U, cookies.size()); |
| // Verify that, after, recovery, the database persists properly. |
| - AddCookie("X", "Y", "http://foo.bar", "/", base::Time::Now()); |
| + AddCookie("X", "Y", "foo.bar", "/", base::Time::Now()); |
| DestroyStore(); |
| CreateAndLoad(false, &cookies); |
| ASSERT_EQ(1U, cookies.size()); |
| - ASSERT_STREQ("http://foo.bar", cookies[0]->Domain().c_str()); |
| + ASSERT_STREQ("foo.bar", cookies[0]->Domain().c_str()); |
| ASSERT_STREQ("X", cookies[0]->Name().c_str()); |
| ASSERT_STREQ("Y", cookies[0]->Value().c_str()); |
| STLDeleteContainerPointers(cookies.begin(), cookies.end()); |
| @@ -184,7 +186,7 @@ TEST_F(SQLitePersistentCookieStoreTest, TestInvalidMetaTableRecovery) { |
| // Test if data is stored as expected in the SQLite database. |
| TEST_F(SQLitePersistentCookieStoreTest, TestPersistance) { |
| InitializeStore(false); |
| - AddCookie("A", "B", "http://foo.bar", "/", base::Time::Now()); |
| + AddCookie("A", "B", "foo.bar", "/", base::Time::Now()); |
| // Replace the store effectively destroying the current one and forcing it |
| // to write its data to disk. Then we can see if after loading it again it |
| // is still there. |
| @@ -193,7 +195,7 @@ TEST_F(SQLitePersistentCookieStoreTest, TestPersistance) { |
| std::vector<net::CookieMonster::CanonicalCookie*> cookies; |
| CreateAndLoad(false, &cookies); |
| ASSERT_EQ(1U, cookies.size()); |
| - ASSERT_STREQ("http://foo.bar", cookies[0]->Domain().c_str()); |
| + ASSERT_STREQ("foo.bar", cookies[0]->Domain().c_str()); |
| ASSERT_STREQ("A", cookies[0]->Name().c_str()); |
| ASSERT_STREQ("B", cookies[0]->Value().c_str()); |
| @@ -213,7 +215,7 @@ TEST_F(SQLitePersistentCookieStoreTest, TestPersistance) { |
| TEST_F(SQLitePersistentCookieStoreTest, TestLoadCookiesForKey) { |
| InitializeStore(false); |
| base::Time t = base::Time::Now(); |
| - AddCookie("A", "B", "http://foo.bar", "/", t); |
| + AddCookie("A", "B", "foo.bar", "/", t); |
| t += base::TimeDelta::FromInternalValue(10); |
| AddCookie("A", "B", "www.aaa.com", "/", t); |
| t += base::TimeDelta::FromInternalValue(10); |
| @@ -223,7 +225,7 @@ TEST_F(SQLitePersistentCookieStoreTest, TestLoadCookiesForKey) { |
| DestroyStore(); |
| store_ = new SQLitePersistentCookieStore( |
| - temp_dir_.path().Append(chrome::kCookieFilename), false); |
| + temp_dir_.path().Append(chrome::kCookieFilename), false, NULL); |
| // Posting a blocking task to db_thread_ makes sure that the DB thread waits |
| // until both Load and LoadCookiesForKey have been posted to its task queue. |
| BrowserThread::PostTask( |
| @@ -265,7 +267,7 @@ TEST_F(SQLitePersistentCookieStoreTest, TestLoadCookiesForKey) { |
| it = cookies_.begin(); it != cookies_.end(); ++it) |
| cookies_loaded.insert((*it)->Domain().c_str()); |
| ASSERT_EQ(4U, cookies_loaded.size()); |
| - ASSERT_EQ(cookies_loaded.find("http://foo.bar") != cookies_loaded.end(), |
| + ASSERT_EQ(cookies_loaded.find("foo.bar") != cookies_loaded.end(), |
| true); |
| ASSERT_EQ(cookies_loaded.find("www.bbb.com") != cookies_loaded.end(), true); |
| } |
| @@ -286,7 +288,7 @@ TEST_F(SQLitePersistentCookieStoreTest, TestFlush) { |
| base::Time t = base::Time::Now() + base::TimeDelta::FromMicroseconds(c); |
| std::string name(1, c); |
| std::string value(1000, c); |
| - AddCookie(name, value, "http://foo.bar", "/", t); |
| + AddCookie(name, value, "foo.bar", "/", t); |
| } |
| // Call Flush() and wait until the DB thread is idle. |
| @@ -325,7 +327,7 @@ class CallbackCounter : public base::RefCountedThreadSafe<CallbackCounter> { |
| TEST_F(SQLitePersistentCookieStoreTest, TestFlushCompletionCallback) { |
| InitializeStore(false); |
| // Put some data - any data - on disk, so that Flush is not a no-op. |
| - AddCookie("A", "B", "http://foo.bar", "/", base::Time::Now()); |
| + AddCookie("A", "B", "foo.bar", "/", base::Time::Now()); |
| scoped_refptr<CallbackCounter> counter(new CallbackCounter()); |
| @@ -349,7 +351,7 @@ TEST_F(SQLitePersistentCookieStoreTest, TestLoadOldSessionCookies) { |
| // Add a session cookie. |
| store_->AddCookie( |
| net::CookieMonster::CanonicalCookie( |
| - GURL(), "C", "D", "http://sessioncookie.com", "/", std::string(), |
| + GURL(), "C", "D", "sessioncookie.com", "/", std::string(), |
| std::string(), base::Time::Now(), base::Time::Now(), |
| base::Time::Now(), false, false, true, false /*is_persistent*/)); |
| @@ -362,7 +364,7 @@ TEST_F(SQLitePersistentCookieStoreTest, TestLoadOldSessionCookies) { |
| CreateAndLoad(true, &cookies); |
| ASSERT_EQ(1U, cookies.size()); |
| - ASSERT_STREQ("http://sessioncookie.com", cookies[0]->Domain().c_str()); |
| + ASSERT_STREQ("sessioncookie.com", cookies[0]->Domain().c_str()); |
| ASSERT_STREQ("C", cookies[0]->Name().c_str()); |
| ASSERT_STREQ("D", cookies[0]->Value().c_str()); |
| @@ -377,7 +379,7 @@ TEST_F(SQLitePersistentCookieStoreTest, TestDontLoadOldSessionCookies) { |
| // Add a session cookie. |
| store_->AddCookie( |
| net::CookieMonster::CanonicalCookie( |
| - GURL(), "C", "D", "http://sessioncookie.com", "/", std::string(), |
| + GURL(), "C", "D", "sessioncookie.com", "/", std::string(), |
| std::string(), base::Time::Now(), base::Time::Now(), |
| base::Time::Now(), false, false, true, false /*is_persistent*/)); |
| @@ -407,14 +409,14 @@ TEST_F(SQLitePersistentCookieStoreTest, PersistHasExpiresAndIsPersistent) { |
| // with has_expires = true. |
| store_->AddCookie( |
| net::CookieMonster::CanonicalCookie( |
| - GURL(), "session-hasexpires", "val", "http://sessioncookie.com", "/", |
| + GURL(), "session-hasexpires", "val", "sessioncookie.com", "/", |
| std::string(), std::string(), |
| base::Time::Now() - base::TimeDelta::FromDays(3), base::Time::Now(), |
| base::Time::Now(), false, false, true /* has_expires */, |
| false /* is_persistent */)); |
| store_->AddCookie( |
| net::CookieMonster::CanonicalCookie( |
| - GURL(), "session-noexpires", "val", "http://sessioncookie.com", "/", |
| + GURL(), "session-noexpires", "val", "sessioncookie.com", "/", |
| std::string(), std::string(), |
| base::Time::Now() - base::TimeDelta::FromDays(2), base::Time::Now(), |
| base::Time::Now(), false, false, false /* has_expires */, |
| @@ -422,7 +424,7 @@ TEST_F(SQLitePersistentCookieStoreTest, PersistHasExpiresAndIsPersistent) { |
| // Add a persistent cookie. |
| store_->AddCookie( |
| net::CookieMonster::CanonicalCookie( |
| - GURL(), "persistent", "val", "http://sessioncookie.com", "/", |
| + GURL(), "persistent", "val", "sessioncookie.com", "/", |
| std::string(), std::string(), |
| base::Time::Now() - base::TimeDelta::FromDays(1), base::Time::Now(), |
| base::Time::Now(), false, false, true /* has_expires */, |
| @@ -454,3 +456,59 @@ TEST_F(SQLitePersistentCookieStoreTest, PersistHasExpiresAndIsPersistent) { |
| STLDeleteContainerPointers(cookies.begin(), cookies.end()); |
| cookies.clear(); |
| } |
| + |
| +// Test deleting cookies as mandated by the storage policy on shutdown. |
| +TEST_F(SQLitePersistentCookieStoreTest, TestSpecialStoragePolicy) { |
| + std::string protected_origin("protected.com"); |
| + std::string session_origin("session.com"); |
| + std::string other_origin("other.com"); |
| + scoped_refptr<quota::MockSpecialStoragePolicy> storage_policy = |
| + new quota::MockSpecialStoragePolicy; |
| + storage_policy->AddProtected(GURL(std::string("http://") + protected_origin)); |
| + storage_policy->AddSessionOnly( |
| + GURL(std::string("http://") + protected_origin)); |
| + storage_policy->AddSessionOnly( |
| + GURL(std::string("http://") + session_origin)); |
| + std::vector<net::CookieMonster::CanonicalCookie*> cookies; |
| + store_ = new SQLitePersistentCookieStore( |
| + temp_dir_.path().Append(chrome::kCookieFilename), |
| + false, |
| + storage_policy.get()); |
| + Load(&cookies); |
| + ASSERT_EQ(0U, cookies.size()); |
| + |
| + // Add some cookies. |
| + base::Time t = base::Time::Now(); |
| + AddCookie("A", "1", protected_origin, "/", t); |
| + t += base::TimeDelta::FromInternalValue(10); |
| + AddCookie("B", "2", session_origin, "/", t); |
| + t += base::TimeDelta::FromInternalValue(10); |
| + AddCookie("C", "3", other_origin, "/", t); |
| + |
| + // Force the store to write its data to the disk. |
| + DestroyStore(); |
| + |
| + // Create a store test that the cookie on session_origin does not exist. |
| + store_ = new SQLitePersistentCookieStore( |
| + temp_dir_.path().Append(chrome::kCookieFilename), |
| + false, |
| + storage_policy.get()); |
| + Load(&cookies); |
| + |
| + ASSERT_EQ(2U, cookies.size()); |
| + int index = 0; |
| + if (cookies[0]->Domain() != protected_origin); |
| + index = 1; |
| + |
| + ASSERT_EQ(protected_origin, cookies[index]->Domain()); |
| + ASSERT_EQ("A", cookies[index]->Name()); |
| + ASSERT_EQ("1", cookies[index]->Value()); |
| + |
| + index = 1 - index; |
| + |
| + ASSERT_EQ(other_origin, cookies[index]->Domain()); |
| + ASSERT_EQ("C", cookies[index]->Name()); |
| + ASSERT_EQ("3", cookies[index]->Value()); |
| + |
| + DestroyStore(); |
| +} |