Index: net/cookies/cookie_monster_unittest.cc |
diff --git a/net/cookies/cookie_monster_unittest.cc b/net/cookies/cookie_monster_unittest.cc |
index 8e84af4fe69efc87c57de43e9e9365475a57702b..4f64b2f00c23d9ff86a5526c2dffa8b40541a684 100644 |
--- a/net/cookies/cookie_monster_unittest.cc |
+++ b/net/cookies/cookie_monster_unittest.cc |
@@ -102,10 +102,6 @@ INSTANTIATE_TYPED_TEST_CASE_P(CookieMonster, |
CookieStoreTest, |
CookieMonsterTestTraits); |
-INSTANTIATE_TYPED_TEST_CASE_P(CookieMonster, |
- MultiThreadedCookieStoreTest, |
- CookieMonsterTestTraits); |
- |
INSTANTIATE_TYPED_TEST_CASE_P(CookieMonsterStrictSecure, |
CookieStoreTest, |
CookieMonsterEnforcingStrictSecure); |
@@ -2465,330 +2461,6 @@ TEST_F(CookieMonsterTest, HistogramCheck) { |
EXPECT_EQ(samples2->TotalCount(), samples3->TotalCount()); |
} |
-namespace { |
- |
-class MultiThreadedCookieMonsterTest : public CookieMonsterTest { |
- public: |
- MultiThreadedCookieMonsterTest() : other_thread_("CMTthread") {} |
- |
- // Helper methods for calling the asynchronous CookieMonster methods |
- // from a different thread. |
- |
- void GetAllCookiesTask(CookieMonster* cm, GetCookieListCallback* callback) { |
- cm->GetAllCookiesAsync( |
- base::Bind(&GetCookieListCallback::Run, base::Unretained(callback))); |
- } |
- |
- void GetAllCookiesForURLTask(CookieMonster* cm, |
- const GURL& url, |
- GetCookieListCallback* callback) { |
- cm->GetAllCookiesForURLAsync(url, base::Bind(&GetCookieListCallback::Run, |
- base::Unretained(callback))); |
- } |
- |
- void GetAllCookiesForURLWithOptionsTask(CookieMonster* cm, |
- const GURL& url, |
- const CookieOptions& options, |
- GetCookieListCallback* callback) { |
- cm->GetCookieListWithOptionsAsync( |
- url, options, |
- base::Bind(&GetCookieListCallback::Run, base::Unretained(callback))); |
- } |
- |
- void SetCookieWithDetailsTask(CookieMonster* cm, |
- const GURL& url, |
- ResultSavingCookieCallback<bool>* callback) { |
- // Define the parameters here instead of in the calling fucntion. |
- // The maximum number of parameters for Bind function is 6. |
- std::string name = "A"; |
- std::string value = "B"; |
- std::string domain = std::string(); |
- std::string path = "/foo"; |
- base::Time expiration_time = base::Time(); |
- bool secure = false; |
- bool http_only = false; |
- bool same_site = false; |
- CookiePriority priority = COOKIE_PRIORITY_DEFAULT; |
- cm->SetCookieWithDetailsAsync( |
- url, name, value, domain, path, base::Time(), expiration_time, |
- base::Time(), secure, http_only, same_site, |
- false /* enforces strict secure cookies */, priority, |
- base::Bind(&ResultSavingCookieCallback<bool>::Run, |
- base::Unretained(callback))); |
- } |
- |
- void DeleteAllCreatedBetweenTask(CookieMonster* cm, |
- const base::Time& delete_begin, |
- const base::Time& delete_end, |
- ResultSavingCookieCallback<int>* callback) { |
- cm->DeleteAllCreatedBetweenAsync( |
- delete_begin, delete_end, |
- base::Bind(&ResultSavingCookieCallback<int>::Run, |
- base::Unretained(callback))); |
- } |
- |
- void DeleteAllCreatedBetweenForHostTask( |
- CookieMonster* cm, |
- const base::Time delete_begin, |
- const base::Time delete_end, |
- const GURL& url, |
- ResultSavingCookieCallback<int>* callback) { |
- cm->DeleteAllCreatedBetweenForHostAsync( |
- delete_begin, delete_end, url, |
- base::Bind(&ResultSavingCookieCallback<int>::Run, |
- base::Unretained(callback))); |
- } |
- |
- void DeleteCanonicalCookieTask(CookieMonster* cm, |
- const CanonicalCookie& cookie, |
- ResultSavingCookieCallback<int>* callback) { |
- cm->DeleteCanonicalCookieAsync( |
- cookie, base::Bind(&ResultSavingCookieCallback<int>::Run, |
- base::Unretained(callback))); |
- } |
- |
- protected: |
- void RunOnOtherThread(const base::Closure& task) { |
- other_thread_.Start(); |
- other_thread_.task_runner()->PostTask(FROM_HERE, task); |
- other_thread_.Stop(); |
- } |
- |
- Thread other_thread_; |
-}; |
- |
-} // namespace |
- |
-TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckGetAllCookies) { |
- scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
- EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=B")); |
- CookieList cookies = GetAllCookies(cm.get()); |
- CookieList::const_iterator it = cookies.begin(); |
- ASSERT_TRUE(it != cookies.end()); |
- EXPECT_EQ(http_www_google_.host(), it->Domain()); |
- EXPECT_EQ("A", it->Name()); |
- ASSERT_TRUE(++it == cookies.end()); |
- GetCookieListCallback callback(&other_thread_); |
- base::Closure task = |
- base::Bind(&MultiThreadedCookieMonsterTest::GetAllCookiesTask, |
- base::Unretained(this), cm, &callback); |
- RunOnOtherThread(task); |
- callback.WaitUntilDone(); |
- it = callback.cookies().begin(); |
- ASSERT_TRUE(it != callback.cookies().end()); |
- EXPECT_EQ(http_www_google_.host(), it->Domain()); |
- EXPECT_EQ("A", it->Name()); |
- ASSERT_TRUE(++it == callback.cookies().end()); |
-} |
- |
-TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckGetAllCookiesForURL) { |
- scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
- EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=B")); |
- CookieList cookies = GetAllCookiesForURL(cm.get(), http_www_google_.url()); |
- CookieList::const_iterator it = cookies.begin(); |
- ASSERT_TRUE(it != cookies.end()); |
- EXPECT_EQ(http_www_google_.host(), it->Domain()); |
- EXPECT_EQ("A", it->Name()); |
- ASSERT_TRUE(++it == cookies.end()); |
- GetCookieListCallback callback(&other_thread_); |
- base::Closure task = |
- base::Bind(&MultiThreadedCookieMonsterTest::GetAllCookiesForURLTask, |
- base::Unretained(this), cm, http_www_google_.url(), &callback); |
- RunOnOtherThread(task); |
- callback.WaitUntilDone(); |
- it = callback.cookies().begin(); |
- ASSERT_TRUE(it != callback.cookies().end()); |
- EXPECT_EQ(http_www_google_.host(), it->Domain()); |
- EXPECT_EQ("A", it->Name()); |
- ASSERT_TRUE(++it == callback.cookies().end()); |
-} |
- |
-TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckGetAllCookiesForURLWithOpt) { |
- scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
- EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "A=B")); |
- CookieOptions options; |
- CookieList cookies = |
- GetAllCookiesForURLWithOptions(cm.get(), http_www_google_.url(), options); |
- CookieList::const_iterator it = cookies.begin(); |
- ASSERT_TRUE(it != cookies.end()); |
- EXPECT_EQ(http_www_google_.host(), it->Domain()); |
- EXPECT_EQ("A", it->Name()); |
- ASSERT_TRUE(++it == cookies.end()); |
- GetCookieListCallback callback(&other_thread_); |
- base::Closure task = base::Bind( |
- &MultiThreadedCookieMonsterTest::GetAllCookiesForURLWithOptionsTask, |
- base::Unretained(this), cm, http_www_google_.url(), options, &callback); |
- RunOnOtherThread(task); |
- callback.WaitUntilDone(); |
- it = callback.cookies().begin(); |
- ASSERT_TRUE(it != callback.cookies().end()); |
- EXPECT_EQ(http_www_google_.host(), it->Domain()); |
- EXPECT_EQ("A", it->Name()); |
- ASSERT_TRUE(++it == callback.cookies().end()); |
-} |
- |
-TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckSetCookieWithDetails) { |
- scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
- EXPECT_TRUE(SetCookieWithDetails(cm.get(), www_google_foo_.url(), "A", "B", |
- std::string(), "/foo", base::Time(), |
- base::Time(), base::Time(), false, false, |
- false, COOKIE_PRIORITY_DEFAULT)); |
- ResultSavingCookieCallback<bool> callback(&other_thread_); |
- base::Closure task = |
- base::Bind(&MultiThreadedCookieMonsterTest::SetCookieWithDetailsTask, |
- base::Unretained(this), cm, www_google_foo_.url(), &callback); |
- RunOnOtherThread(task); |
- callback.WaitUntilDone(); |
- EXPECT_TRUE(callback.result()); |
-} |
- |
-TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckDeleteAllCreatedBetween) { |
- scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
- CookieOptions options; |
- Time now = Time::Now(); |
- EXPECT_TRUE( |
- SetCookieWithOptions(cm.get(), http_www_google_.url(), "A=B", options)); |
- EXPECT_EQ(1, DeleteAllCreatedBetween(cm.get(), now - TimeDelta::FromDays(99), |
- Time())); |
- EXPECT_TRUE( |
- SetCookieWithOptions(cm.get(), http_www_google_.url(), "A=B", options)); |
- ResultSavingCookieCallback<int> callback(&other_thread_); |
- base::Closure task = |
- base::Bind(&MultiThreadedCookieMonsterTest::DeleteAllCreatedBetweenTask, |
- base::Unretained(this), cm, now - TimeDelta::FromDays(99), |
- Time(), &callback); |
- RunOnOtherThread(task); |
- callback.WaitUntilDone(); |
- EXPECT_EQ(1, callback.result()); |
-} |
- |
-TEST_F(MultiThreadedCookieMonsterTest, |
- ThreadCheckDeleteAllCreatedBetweenForHost) { |
- scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
- GURL url_not_google("http://www.notgoogle.com"); |
- |
- CookieOptions options; |
- Time now = Time::Now(); |
- // ago1 < ago2 < ago3 < now. |
- Time ago1 = now - TimeDelta::FromDays(101); |
- Time ago2 = now - TimeDelta::FromDays(100); |
- Time ago3 = now - TimeDelta::FromDays(99); |
- |
- // These 3 cookies match the first deletion. |
- EXPECT_TRUE( |
- SetCookieWithOptions(cm.get(), http_www_google_.url(), "A=B", options)); |
- EXPECT_TRUE( |
- SetCookieWithOptions(cm.get(), http_www_google_.url(), "C=D", options)); |
- EXPECT_TRUE( |
- SetCookieWithOptions(cm.get(), http_www_google_.url(), "Y=Z", options)); |
- |
- // This cookie does not match host. |
- EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_not_google, "E=F", options)); |
- |
- // This cookie does not match time range: [ago3, inf], for first deletion, but |
- // matches for the second deletion. |
- EXPECT_TRUE( |
- cm->SetCookieWithCreationTime(http_www_google_.url(), "G=H", ago2)); |
- |
- // 1. First set of deletions. |
- EXPECT_EQ(3, // Deletes A=B, C=D, Y=Z |
- DeleteAllCreatedBetweenForHost(cm.get(), ago3, Time::Max(), |
- http_www_google_.url())); |
- |
- EXPECT_TRUE( |
- SetCookieWithOptions(cm.get(), http_www_google_.url(), "A=B", options)); |
- ResultSavingCookieCallback<int> callback(&other_thread_); |
- |
- // 2. Second set of deletions. |
- base::Closure task = base::Bind( |
- &MultiThreadedCookieMonsterTest::DeleteAllCreatedBetweenForHostTask, |
- base::Unretained(this), cm, ago1, Time(), http_www_google_.url(), |
- &callback); |
- RunOnOtherThread(task); |
- callback.WaitUntilDone(); |
- EXPECT_EQ(2, callback.result()); // Deletes A=B, G=H. |
-} |
- |
-TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckDeleteCanonicalCookie) { |
- scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
- CookieOptions options; |
- EXPECT_TRUE( |
- SetCookieWithOptions(cm.get(), http_www_google_.url(), "A=B", options)); |
- CookieList cookies = GetAllCookies(cm.get()); |
- CookieList::iterator it = cookies.begin(); |
- EXPECT_TRUE(DeleteCanonicalCookie(cm.get(), *it)); |
- |
- EXPECT_TRUE( |
- SetCookieWithOptions(cm.get(), http_www_google_.url(), "A=B", options)); |
- ResultSavingCookieCallback<int> callback(&other_thread_); |
- cookies = GetAllCookies(cm.get()); |
- it = cookies.begin(); |
- base::Closure task = |
- base::Bind(&MultiThreadedCookieMonsterTest::DeleteCanonicalCookieTask, |
- base::Unretained(this), cm, *it, &callback); |
- RunOnOtherThread(task); |
- callback.WaitUntilDone(); |
- EXPECT_EQ(1, callback.result()); |
-} |
- |
-// Ensure that cookies for http, https, ws, and wss all share the same storage |
-// and policies when GetAllCookiesForURLAsync is used. This test is part of |
-// MultiThreadedCookieMonsterTest in order to test and use |
-// GetAllCookiesForURLAsync, but it does not use any additional threads. |
-TEST_F(MultiThreadedCookieMonsterTest, GetAllCookiesForURLEffectiveDomain) { |
- scoped_ptr<CanonicalCookie> cookie(CanonicalCookie::Create( |
- http_www_google_.url(), kValidCookieLine, Time::Now(), CookieOptions())); |
- |
- // This cookie will be freed by the CookieMonster. |
- std::vector<CanonicalCookie*> cookies = {new CanonicalCookie(*cookie)}; |
- scoped_refptr<NewMockPersistentCookieStore> store( |
- new NewMockPersistentCookieStore); |
- scoped_refptr<CookieMonster> cm(new CookieMonster(store.get(), NULL)); |
- |
- CookieMonster::PersistentCookieStore::LoadedCallback loaded_callback; |
- ::testing::StrictMock<::testing::MockFunction<void(int)>> checkpoint; |
- const std::string key = cookie_util::GetEffectiveDomain( |
- http_www_google_.url().scheme(), http_www_google_.url().host()); |
- |
- ::testing::InSequence s; |
- EXPECT_CALL(checkpoint, Call(0)); |
- EXPECT_CALL(*store, Load(::testing::_)); |
- EXPECT_CALL(*store, LoadCookiesForKey(key, ::testing::_)) |
- .WillOnce(::testing::SaveArg<1>(&loaded_callback)); |
- EXPECT_CALL(checkpoint, Call(1)); |
- // LoadCookiesForKey will never be called after checkpoint.Call(1) although |
- // we will call GetAllCookiesForURLAsync again, because all URLs below share |
- // the same key. |
- EXPECT_CALL(*store, LoadCookiesForKey(::testing::_, ::testing::_)).Times(0); |
- |
- GetCookieListCallback callback; |
- checkpoint.Call(0); |
- GetAllCookiesForURLTask(cm.get(), http_www_google_.url(), &callback); |
- checkpoint.Call(1); |
- // Pass the cookies to the CookieMonster. |
- loaded_callback.Run(cookies); |
- // Now GetAllCookiesForURLTask is done. |
- callback.WaitUntilDone(); |
- // See that the callback was called with the cookies. |
- ASSERT_EQ(1u, callback.cookies().size()); |
- EXPECT_TRUE(cookie->IsEquivalent(callback.cookies()[0])); |
- |
- // All urls in |urls| should share the same cookie domain. |
- const GURL kUrls[] = { |
- http_www_google_.url(), https_www_google_.url(), ws_www_google_.url(), |
- wss_www_google_.url(), |
- }; |
- for (const GURL& url : kUrls) { |
- // Call the function with |url| and verify it is done synchronously without |
- // calling LoadCookiesForKey. |
- GetCookieListCallback callback; |
- GetAllCookiesForURLTask(cm.get(), url, &callback); |
- callback.WaitUntilDone(); |
- ASSERT_EQ(1u, callback.cookies().size()); |
- EXPECT_TRUE(cookie->IsEquivalent(callback.cookies()[0])); |
- } |
-} |
- |
TEST_F(CookieMonsterTest, InvalidExpiryTime) { |
std::string cookie_line = |
std::string(kValidCookieLine) + "; expires=Blarg arg arg"; |