Chromium Code Reviews| Index: net/base/cookie_monster_unittest.cc |
| =================================================================== |
| --- net/base/cookie_monster_unittest.cc (revision 103757) |
| +++ net/base/cookie_monster_unittest.cc (working copy) |
| @@ -37,7 +37,9 @@ |
| class NewMockPersistentCookieStore |
| : public CookieMonster::PersistentCookieStore { |
| public: |
| - MOCK_METHOD1(Load, bool(const LoadedCallback& loaded_callback)); |
| + MOCK_METHOD1(Load, void(const LoadedCallback& loaded_callback)); |
| + MOCK_METHOD2(LoadCookiesForKey, void(const std::string& key, |
| + const LoadedCallback& loaded_callback)); |
| MOCK_METHOD1(AddCookie, void(const CookieMonster::CanonicalCookie& cc)); |
| MOCK_METHOD1(UpdateCookieAccessTime, |
| void(const CookieMonster::CanonicalCookie& cc)); |
| @@ -1013,7 +1015,8 @@ |
| // This test suite verifies the task deferral behaviour of the CookieMonster. |
|
erikwright (departed)
2011/10/04 19:55:02
To avoid having a vector of raw pointers (that you
guohui
2011/10/06 15:40:00
Done.
|
| // Specifically, for each asynchronous method, verify that: |
| // 1. invoking it on an uninitialized cookie store causes the store to begin |
| -// loading its backing data. |
| +// chainlloading its backing data or loading data for a specific domain key |
|
erikwright (departed)
2011/10/04 19:55:02
chainlloading => chain-loading
guohui
2011/10/06 15:40:00
Done.
|
| +// (eTLD+1). |
| // 2. The initial invocation does not complete until the loading completes. |
| // 3. Invocations after the loading has completed complete immediately. |
| class DeferredCookieTaskTest : public CookieMonsterTest { |
| @@ -1039,31 +1042,58 @@ |
| testing::Mock::VerifyAndClear(persistent_store_.get()); |
| } |
| - // Invokes the PersistentCookieStore::Load completion callback and waits |
| + // Invokes the PersistentCookieStore::LoadCookiesForKey completion callbacks |
| + // and PersistentCookieStore::Load completion callback and waits |
| // until the message loop is quit. |
| void CompleteLoadingAndWait() { |
| + std::vector<CookieMonster::PersistentCookieStore::LoadedCallback *> |
| + ::iterator it = loaded_for_key_callbacks_.begin(); |
| + for (; it != loaded_for_key_callbacks_.end(); it++) { |
| + (*it)->Run(loaded_cookies_); |
| + loaded_cookies_.clear(); |
| + delete *it; |
| + } |
|
erikwright (departed)
2011/10/04 19:55:02
Clear the loaded_for_key_callbacks_ after line 105
guohui
2011/10/06 15:40:00
Done.
|
| loaded_callback_.Run(loaded_cookies_); |
| RunFor(kTimeout); |
| } |
| // Performs the provided action, expecting it to cause a call to |
| // PersistentCookieStore::Load. Call WaitForLoadCall to verify the load call |
| - // is received. |
| + // is receievd. |
|
erikwright (departed)
2011/10/04 19:55:02
receivd => received
guohui
2011/10/06 15:40:00
Done.
|
| void BeginWith(testing::Action<void(void)> action) { |
| EXPECT_CALL(*this, Begin()).WillOnce(action); |
| ExpectLoadCall(); |
| Begin(); |
| } |
| + void BeginWithForDomainKey(testing::Action<void(void)> action) { |
|
erikwright (departed)
2011/10/04 19:55:02
Accept a parameter for the domain key, pass it int
erikwright (departed)
2011/10/04 19:55:02
This looks unbalanced to me:
ExpectLoadCall and E
guohui
2011/10/06 15:40:00
Done.
|
| + EXPECT_CALL(*this, Begin()).WillOnce(action); |
| + ExpectLoadCall(); |
| + ExpectLoadForKeyCall(); |
| + Begin(); |
| + } |
| + |
| // Declares an expectation that PersistentCookieStore::Load will be called, |
| // saving the provided callback and sending a quit to the message loop. |
| void ExpectLoadCall() { |
| EXPECT_CALL(*persistent_store_, Load(testing::_)).WillOnce(testing::DoAll( |
| testing::SaveArg<0>(&loaded_callback_), |
| - QuitCurrentMessageLoop(), |
| - testing::Return(true))); |
| + QuitCurrentMessageLoop())); |
| } |
| + // Declares an expectation that PersistentCookieStore::LoadCookiesForKey |
| + // will be called, saving the provided callback and sending a quit to the |
| + // message loop. |
| + void ExpectLoadForKeyCall() { |
| + CookieMonster::PersistentCookieStore::LoadedCallback * |
| + callback = new CookieMonster::PersistentCookieStore::LoadedCallback(); |
| + EXPECT_CALL(*persistent_store_, LoadCookiesForKey(testing::_, testing::_)). |
| + WillOnce(testing::DoAll( |
| + testing::SaveArg<1>(callback), |
| + QuitCurrentMessageLoop())); |
| + loaded_for_key_callbacks_.push_back(callback); |
| + } |
| + |
| // Invokes the initial action. |
| MOCK_METHOD0(Begin, void(void)); |
| @@ -1073,11 +1103,17 @@ |
| private: |
| // Declares that mock expectations in this test suite are strictly ordered. |
| testing::InSequence in_sequence_; |
| - // Holds cookies to be returned from PersistentCookieStore::Load. |
| + // Holds cookies to be returned from PersistentCookieStore::Load or |
| + // PersistentCookieStore::LoadCookiesForKey. |
| std::vector<CookieMonster::CanonicalCookie*> loaded_cookies_; |
| // Stores the callback passed from the CookieMonster to the |
| - // PersistentCookieStore |
| + // PersistentCookieStore::Load |
| CookieMonster::PersistentCookieStore::LoadedCallback loaded_callback_; |
| + // Stores the callback passed from the CookieMonster to the |
| + // PersistentCookieStore::LoadCookiesForKey |
| + std::vector<CookieMonster::PersistentCookieStore::LoadedCallback*> |
| + loaded_for_key_callbacks_; |
| + |
| // Stores the CookieMonster under test. |
| scoped_refptr<CookieMonster> cookie_monster_; |
| // Stores the mock PersistentCookieStore. |
| @@ -1091,7 +1127,7 @@ |
| MockGetCookiesCallback get_cookies_callback; |
| - BeginWith(GetCookiesAction( |
| + BeginWithForDomainKey(GetCookiesAction( |
| &cookie_monster(), url_google_, &get_cookies_callback)); |
| WaitForLoadCall(); |
| @@ -1111,7 +1147,7 @@ |
| MockGetCookieInfoCallback get_cookie_info_callback; |
| - BeginWith(GetCookiesWithInfoAction( |
| + BeginWithForDomainKey(GetCookiesWithInfoAction( |
| &cookie_monster(), url_google_, &get_cookie_info_callback)); |
| WaitForLoadCall(); |
| @@ -1128,7 +1164,7 @@ |
| TEST_F(DeferredCookieTaskTest, DeferredSetCookie) { |
| MockSetCookiesCallback set_cookies_callback; |
| - BeginWith(SetCookieAction( |
| + BeginWithForDomainKey(SetCookieAction( |
| &cookie_monster(), url_google_, "A=B", &set_cookies_callback)); |
| WaitForLoadCall(); |
| @@ -1145,7 +1181,7 @@ |
| TEST_F(DeferredCookieTaskTest, DeferredDeleteCookie) { |
| MockClosure delete_cookie_callback; |
| - BeginWith(DeleteCookieAction( |
| + BeginWithForDomainKey(DeleteCookieAction( |
| &cookie_monster(), url_google_, "A", &delete_cookie_callback)); |
| WaitForLoadCall(); |
| @@ -1162,7 +1198,7 @@ |
| TEST_F(DeferredCookieTaskTest, DeferredSetCookieWithDetails) { |
| MockSetCookiesCallback set_cookies_callback; |
| - BeginWith(SetCookieWithDetailsAction( |
| + BeginWithForDomainKey(SetCookieWithDetailsAction( |
| &cookie_monster(), url_google_foo_, "A", "B", std::string(), "/foo", |
| base::Time(), false, false, &set_cookies_callback)); |
| @@ -1205,7 +1241,7 @@ |
| MockGetCookieListCallback get_cookie_list_callback; |
| - BeginWith(GetAllCookiesForUrlAction( |
| + BeginWithForDomainKey(GetAllCookiesForUrlAction( |
| &cookie_monster(), url_google_, &get_cookie_list_callback)); |
| WaitForLoadCall(); |
| @@ -1227,7 +1263,7 @@ |
| MockGetCookieListCallback get_cookie_list_callback; |
| - BeginWith(GetAllCookiesForUrlWithOptionsAction( |
| + BeginWithForDomainKey(GetAllCookiesForUrlWithOptionsAction( |
| &cookie_monster(), url_google_, &get_cookie_list_callback)); |
| WaitForLoadCall(); |
| @@ -1278,7 +1314,7 @@ |
| TEST_F(DeferredCookieTaskTest, DeferredDeleteAllForHostCookies) { |
| MockDeleteCallback delete_callback; |
| - BeginWith(DeleteAllForHostAction( |
| + BeginWithForDomainKey(DeleteAllForHostAction( |
| &cookie_monster(), url_google_, &delete_callback)); |
| WaitForLoadCall(); |
| @@ -1334,17 +1370,17 @@ |
| DeleteCookieAction( |
| &cookie_monster(), url_google_, "A", &delete_cookie_callback))); |
| ExpectLoadCall(); |
| + ExpectLoadForKeyCall(); |
| Begin(); |
| WaitForLoadCall(); |
| EXPECT_CALL(get_cookies_callback, Invoke("X=1")).WillOnce( |
| GetCookiesWithInfoAction( |
| &cookie_monster(), url_google_, &get_cookie_info_callback)); |
| - |
| + EXPECT_CALL(get_cookie_info_callback, Invoke("X=1", testing::_)).WillOnce( |
| + QuitCurrentMessageLoop()); |
| EXPECT_CALL(set_cookies_callback, Invoke(true)); |
| EXPECT_CALL(delete_cookie_callback, Invoke()); |
| - EXPECT_CALL(get_cookie_info_callback, Invoke("X=1", testing::_)).WillOnce( |
| - QuitCurrentMessageLoop()); |
| CompleteLoadingAndWait(); |
| } |
| @@ -2970,12 +3006,16 @@ |
| public: |
| FlushablePersistentStore() : flush_count_(0) {} |
| - bool Load(const LoadedCallback& loaded_callback) { |
| + void Load(const LoadedCallback& loaded_callback) { |
| std::vector<CookieMonster::CanonicalCookie*> out_cookies; |
| loaded_callback.Run(out_cookies); |
| - return false; |
| } |
| + void LoadCookiesForKey(const std::string& key, |
| + const LoadedCallback& loaded_callback) { |
| + Load(loaded_callback); |
| + } |
| + |
| void AddCookie(const CookieMonster::CanonicalCookie&) {} |
| void UpdateCookieAccessTime(const CookieMonster::CanonicalCookie&) {} |
| void DeleteCookie(const CookieMonster::CanonicalCookie&) {} |