Chromium Code Reviews| Index: net/cookies/cookie_monster_unittest.cc |
| diff --git a/net/cookies/cookie_monster_unittest.cc b/net/cookies/cookie_monster_unittest.cc |
| index 7ca99a3327d7af318196b920614a3dac1e3d62ab..60caa67ea6ad7533b3b7071a332b0af0dbc4874d 100644 |
| --- a/net/cookies/cookie_monster_unittest.cc |
| +++ b/net/cookies/cookie_monster_unittest.cc |
| @@ -166,6 +166,17 @@ class CookieMonsterTest : public CookieStoreTest<CookieMonsterTestTraits> { |
| return callback.result(); |
| } |
| + bool SetAllCookies(CookieMonster* cm, const CookieList& list) { |
| + DCHECK(cm); |
| + ResultSavingCookieCallback<bool> callback; |
| + cm->SetAllCookiesAsync(list, |
| + base::Bind(&ResultSavingCookieCallback<bool>::Run, |
| + base::Unretained(&callback))); |
| + RunFor(kTimeout); |
| + EXPECT_TRUE(callback.did_run()); |
| + return callback.result(); |
| + } |
| + |
| int DeleteAll(CookieMonster* cm) { |
| DCHECK(cm); |
| ResultSavingCookieCallback<int> callback; |
| @@ -542,6 +553,24 @@ class CookieMonsterTest : public CookieStoreTest<CookieMonsterTestTraits> { |
| } |
| return cm; |
| } |
| + |
| + bool IsCookieInList(const CanonicalCookie& cookie, const CookieList& list) { |
| + for (CookieList::const_iterator it = list.begin(); it != list.end(); ++it) { |
| + if (it->Source() == cookie.Source() && it->Name() == cookie.Name() && |
| + it->Value() == cookie.Value() && it->Domain() == cookie.Domain() && |
| + it->Path() == cookie.Path() && |
| + it->CreationDate() == cookie.CreationDate() && |
| + it->ExpiryDate() == cookie.ExpiryDate() && |
| + it->LastAccessDate() == cookie.LastAccessDate() && |
| + it->IsSecure() == cookie.IsSecure() && |
| + it->IsHttpOnly() == cookie.IsHttpOnly() && |
| + it->Priority() == cookie.Priority()) { |
| + return true; |
| + } |
| + } |
| + |
| + return false; |
| + } |
| }; |
| // TODO(erikwright): Replace the other callbacks and synchronous helper methods |
| @@ -625,6 +654,9 @@ ACTION_P4(SetCookieAction, cookie_monster, url, cookie_line, callback) { |
| cookie_monster->SetCookieWithOptionsAsync(url, cookie_line, CookieOptions(), |
| callback->AsCallback()); |
| } |
| +ACTION_P3(SetAllCookiesAction, cookie_monster, list, callback) { |
| + cookie_monster->SetAllCookiesAsync(list, callback->AsCallback()); |
| +} |
| ACTION_P4(DeleteAllCreatedBetweenAction, |
| cookie_monster, |
| delete_begin, |
| @@ -824,6 +856,30 @@ TEST_F(DeferredCookieTaskTest, DeferredSetCookie) { |
| CompleteLoadingAndWait(); |
| } |
| +TEST_F(DeferredCookieTaskTest, DeferredSetAllCookies) { |
| + MockSetCookiesCallback set_cookies_callback; |
| + CookieList list; |
| + list.push_back(CanonicalCookie(url_google_, "A", "B", "google.izzle", "/", |
| + base::Time::Now(), base::Time(), base::Time(), |
| + false, true, false, COOKIE_PRIORITY_DEFAULT)); |
| + list.push_back(CanonicalCookie(url_google_, "C", "D", "google.izzle", "/", |
| + base::Time::Now(), base::Time(), base::Time(), |
| + false, true, false, COOKIE_PRIORITY_DEFAULT)); |
| + |
| + BeginWith( |
| + SetAllCookiesAction(&cookie_monster(), list, &set_cookies_callback)); |
| + |
| + WaitForLoadCall(); |
| + |
| + EXPECT_CALL(set_cookies_callback, Invoke(true)) |
| + .WillOnce( |
| + SetAllCookiesAction(&cookie_monster(), list, &set_cookies_callback)); |
| + EXPECT_CALL(set_cookies_callback, Invoke(true)) |
| + .WillOnce(QuitCurrentMessageLoop()); |
| + |
| + CompleteLoadingAndWait(); |
| +} |
| + |
| TEST_F(DeferredCookieTaskTest, DeferredDeleteCookie) { |
| MockClosure delete_cookie_callback; |
| @@ -2106,6 +2162,155 @@ TEST_F(CookieMonsterTest, FlushStore) { |
| ASSERT_EQ(3, counter->callback_count()); |
| } |
| +TEST_F(CookieMonsterTest, SetAllCookies) { |
| + scoped_refptr<FlushablePersistentStore> store(new FlushablePersistentStore()); |
| + scoped_refptr<CookieMonster> cm(new CookieMonster(store.get(), NULL)); |
| + cm->SetPersistSessionCookies(true); |
| + |
| + EXPECT_TRUE(SetCookie(cm.get(), url_google_, "U=V; path=/")); |
| + EXPECT_TRUE(SetCookie(cm.get(), url_google_, "W=X; path=/foo")); |
| + EXPECT_TRUE(SetCookie(cm.get(), url_google_, "Y=Z; path=/")); |
| + |
| + CookieList list; |
| + list.push_back(CanonicalCookie(url_google_, "A", "B", url_google_.host(), "/", |
| + base::Time::Now(), base::Time(), base::Time(), |
| + false, false, false, COOKIE_PRIORITY_DEFAULT)); |
| + list.push_back(CanonicalCookie(url_google_, "W", "X", url_google_.host(), |
| + "/bar", base::Time::Now(), base::Time(), |
| + base::Time(), false, false, false, |
| + COOKIE_PRIORITY_DEFAULT)); |
| + list.push_back(CanonicalCookie(url_google_, "Y", "Z", url_google_.host(), "/", |
| + base::Time::Now(), base::Time(), base::Time(), |
| + false, false, false, COOKIE_PRIORITY_DEFAULT)); |
| + |
| + // SetAllCookies must not flush. |
|
erikwright (departed)
2015/03/17 17:46:16
It should, presumably, still update the backend, n
droger
2015/03/17 17:48:57
Yes.
|
| + ASSERT_EQ(0, store->flush_count()); |
| + EXPECT_TRUE(SetAllCookies(cm.get(), list)); |
| + EXPECT_EQ(0, store->flush_count()); |
| + |
| + CookieList cookies = GetAllCookies(cm.get()); |
| + size_t expected_size = 3; // "A", "W" and "Y". "U" is gone. |
| + EXPECT_EQ(expected_size, cookies.size()); |
| + CookieList::iterator it = cookies.begin(); |
| + |
| + ASSERT_TRUE(it != cookies.end()); |
| + EXPECT_EQ("W", it->Name()); |
| + EXPECT_EQ("X", it->Value()); |
| + EXPECT_EQ("/bar", it->Path()); // The path has been updated. |
| + |
| + ASSERT_TRUE(++it != cookies.end()); |
| + EXPECT_EQ("A", it->Name()); |
| + EXPECT_EQ("B", it->Value()); |
| + |
| + ASSERT_TRUE(++it != cookies.end()); |
| + EXPECT_EQ("Y", it->Name()); |
| + EXPECT_EQ("Z", it->Value()); |
| +} |
| + |
| +TEST_F(CookieMonsterTest, ComputeCookieDiff) { |
| + scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
| + |
| + base::Time now = base::Time::Now(); |
| + base::Time creation_time = now - base::TimeDelta::FromSeconds(1); |
| + |
| + CanonicalCookie cookie1(url_google_, "A", "B", url_google_.host(), "/", |
| + creation_time, base::Time(), base::Time(), false, |
| + false, false, COOKIE_PRIORITY_DEFAULT); |
| + CanonicalCookie cookie2(url_google_, "C", "D", url_google_.host(), "/", |
| + creation_time, base::Time(), base::Time(), false, |
| + false, false, COOKIE_PRIORITY_DEFAULT); |
| + CanonicalCookie cookie3(url_google_, "E", "F", url_google_.host(), "/", |
| + creation_time, base::Time(), base::Time(), false, |
| + false, false, COOKIE_PRIORITY_DEFAULT); |
| + CanonicalCookie cookie4(url_google_, "G", "H", url_google_.host(), "/", |
| + creation_time, base::Time(), base::Time(), false, |
| + false, false, COOKIE_PRIORITY_DEFAULT); |
| + CanonicalCookie cookie4_with_new_value( |
| + url_google_, "G", "iamnew", url_google_.host(), "/", creation_time, |
| + base::Time(), base::Time(), false, false, false, COOKIE_PRIORITY_DEFAULT); |
| + CanonicalCookie cookie5(url_google_, "I", "J", url_google_.host(), "/", |
| + creation_time, base::Time(), base::Time(), false, |
| + false, false, COOKIE_PRIORITY_DEFAULT); |
| + CanonicalCookie cookie5_with_new_creation_time( |
| + url_google_, "I", "J", url_google_.host(), "/", now, base::Time(), |
| + base::Time(), false, false, false, COOKIE_PRIORITY_DEFAULT); |
| + CanonicalCookie cookie6(url_google_, "K", "L", url_google_.host(), "/foo", |
| + creation_time, base::Time(), base::Time(), false, |
| + false, false, COOKIE_PRIORITY_DEFAULT); |
| + CanonicalCookie cookie6_with_new_path( |
| + url_google_, "K", "L", url_google_.host(), "/bar", creation_time, |
| + base::Time(), base::Time(), false, false, false, COOKIE_PRIORITY_DEFAULT); |
| + CanonicalCookie cookie7(url_google_, "M", "N", url_google_.host(), "/foo", |
| + creation_time, base::Time(), base::Time(), false, |
| + false, false, COOKIE_PRIORITY_DEFAULT); |
| + CanonicalCookie cookie7_with_new_path( |
| + url_google_, "M", "N", url_google_.host(), "/bar", creation_time, |
| + base::Time(), base::Time(), false, false, false, COOKIE_PRIORITY_DEFAULT); |
| + |
| + CookieList old_cookies; |
| + old_cookies.push_back(cookie1); |
| + old_cookies.push_back(cookie2); |
| + old_cookies.push_back(cookie4); |
| + old_cookies.push_back(cookie5); |
| + old_cookies.push_back(cookie6); |
| + old_cookies.push_back(cookie7); |
| + |
| + CookieList new_cookies; |
| + new_cookies.push_back(cookie1); |
| + new_cookies.push_back(cookie3); |
| + new_cookies.push_back(cookie4_with_new_value); |
| + new_cookies.push_back(cookie5_with_new_creation_time); |
| + new_cookies.push_back(cookie6_with_new_path); |
| + new_cookies.push_back(cookie7); |
| + new_cookies.push_back(cookie7_with_new_path); |
| + |
| + CookieList cookies_to_add; |
| + CookieList cookies_to_delete; |
| + |
| + cm->ComputeCookieDiff(&old_cookies, &new_cookies, &cookies_to_add, |
| + &cookies_to_delete); |
| + |
| + // |cookie1| has not changed. |
| + EXPECT_FALSE(IsCookieInList(cookie1, cookies_to_add)); |
| + EXPECT_FALSE(IsCookieInList(cookie1, cookies_to_delete)); |
| + |
| + // |cookie2| has been deleted. |
| + EXPECT_FALSE(IsCookieInList(cookie2, cookies_to_add)); |
| + EXPECT_TRUE(IsCookieInList(cookie2, cookies_to_delete)); |
| + |
| + // |cookie3| has been added. |
| + EXPECT_TRUE(IsCookieInList(cookie3, cookies_to_add)); |
| + EXPECT_FALSE(IsCookieInList(cookie3, cookies_to_delete)); |
| + |
| + // |cookie4| has a new value: new cookie overrides the old one (which does not |
| + // need to be explicitly removed). |
| + EXPECT_FALSE(IsCookieInList(cookie4, cookies_to_add)); |
| + EXPECT_FALSE(IsCookieInList(cookie4, cookies_to_delete)); |
| + EXPECT_TRUE(IsCookieInList(cookie4_with_new_value, cookies_to_add)); |
| + EXPECT_FALSE(IsCookieInList(cookie4_with_new_value, cookies_to_delete)); |
| + |
| + // |cookie5| has a new creation time: new cookie overrides the old one (which |
| + // does not need to be explicitly removed). |
| + EXPECT_FALSE(IsCookieInList(cookie5, cookies_to_add)); |
| + EXPECT_FALSE(IsCookieInList(cookie5, cookies_to_delete)); |
| + EXPECT_TRUE(IsCookieInList(cookie5_with_new_creation_time, cookies_to_add)); |
| + EXPECT_FALSE( |
| + IsCookieInList(cookie5_with_new_creation_time, cookies_to_delete)); |
| + |
| + // |cookie6| has a new path: the new cookie does not overrides the old one, |
| + // which needs to be explicitly removed. |
| + EXPECT_FALSE(IsCookieInList(cookie6, cookies_to_add)); |
| + EXPECT_TRUE(IsCookieInList(cookie6, cookies_to_delete)); |
| + EXPECT_TRUE(IsCookieInList(cookie6_with_new_path, cookies_to_add)); |
| + EXPECT_FALSE(IsCookieInList(cookie6_with_new_path, cookies_to_delete)); |
| + |
| + // |cookie7| is kept and |cookie7_with_new_path| is added as a new cookie. |
| + EXPECT_FALSE(IsCookieInList(cookie7, cookies_to_add)); |
| + EXPECT_FALSE(IsCookieInList(cookie7, cookies_to_delete)); |
| + EXPECT_TRUE(IsCookieInList(cookie7_with_new_path, cookies_to_add)); |
| + EXPECT_FALSE(IsCookieInList(cookie7_with_new_path, cookies_to_delete)); |
| +} |
| + |
| TEST_F(CookieMonsterTest, HistogramCheck) { |
| scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); |
| // Should match call in InitializeHistograms, but doesn't really matter |