summaryrefslogtreecommitdiffstats
path: root/net/base/cookie_monster_unittest.cc
diff options
context:
space:
mode:
authorguohui@google.com <guohui@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-17 17:35:04 +0000
committerguohui@google.com <guohui@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-17 17:35:04 +0000
commit8562034e402a7a8e778896f817d1fdcfb3d934c9 (patch)
tree7e209a3b76da5d81981363b39e2867edbf84b54c /net/base/cookie_monster_unittest.cc
parentf5796891ec99f4977eb1761166a33a6b22f459fd (diff)
downloadchromium_src-8562034e402a7a8e778896f817d1fdcfb3d934c9.zip
chromium_src-8562034e402a7a8e778896f817d1fdcfb3d934c9.tar.gz
chromium_src-8562034e402a7a8e778896f817d1fdcfb3d934c9.tar.bz2
The change list splits loading of cookies from DB by the domain key(eTLD+1).
BUG=52909 TEST=NONE TBR=rdsmith@chromium.org Review URL: http://codereview.chromium.org/8318006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@105836 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base/cookie_monster_unittest.cc')
-rw-r--r--net/base/cookie_monster_unittest.cc88
1 files changed, 67 insertions, 21 deletions
diff --git a/net/base/cookie_monster_unittest.cc b/net/base/cookie_monster_unittest.cc
index fac72f8..7b53397 100644
--- a/net/base/cookie_monster_unittest.cc
+++ b/net/base/cookie_monster_unittest.cc
@@ -37,7 +37,9 @@ namespace {
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));
@@ -1008,12 +1010,16 @@ ACTION_P3(GetAllCookiesForUrlAction, cookie_monster, url, callback) {
cookie_monster->GetAllCookiesForURLAsync(url, callback->AsCallback());
}
+ACTION_P(PushCallbackAction, callback_vector) {
+ callback_vector->push(arg1);
+}
} // namespace
// This test suite verifies the task deferral behaviour of the CookieMonster.
// Specifically, for each asynchronous method, verify that:
// 1. invoking it on an uninitialized cookie store causes the store to begin
-// loading its backing data.
+// chain-loading its backing data or loading data for a specific domain key
+// (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,9 +1045,16 @@ class DeferredCookieTaskTest : public CookieMonsterTest {
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() {
+ while (!loaded_for_key_callbacks_.empty()) {
+ loaded_for_key_callbacks_.front().Run(loaded_cookies_);
+ loaded_cookies_.clear();
+ loaded_for_key_callbacks_.pop();
+ }
+
loaded_callback_.Run(loaded_cookies_);
RunFor(kTimeout);
}
@@ -1055,13 +1068,34 @@ class DeferredCookieTaskTest : public CookieMonsterTest {
Begin();
}
+ void BeginWithForDomainKey(std::string key,
+ testing::Action<void(void)> action) {
+ EXPECT_CALL(*this, Begin()).WillOnce(action);
+ ExpectLoadCall();
+ ExpectLoadForKeyCall(key, false);
+ 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(std::string key, bool quit_queue) {
+ if (quit_queue)
+ EXPECT_CALL(*persistent_store_, LoadCookiesForKey(key, testing::_)).
+ WillOnce(testing::DoAll(
+ PushCallbackAction(&loaded_for_key_callbacks_),
+ QuitCurrentMessageLoop()));
+ else
+ EXPECT_CALL(*persistent_store_, LoadCookiesForKey(key, testing::_)).
+ WillOnce(PushCallbackAction(&loaded_for_key_callbacks_));
}
// Invokes the initial action.
@@ -1073,11 +1107,17 @@ class DeferredCookieTaskTest : public CookieMonsterTest {
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::queue<CookieMonster::PersistentCookieStore::LoadedCallback>
+ loaded_for_key_callbacks_;
+
// Stores the CookieMonster under test.
scoped_refptr<CookieMonster> cookie_monster_;
// Stores the mock PersistentCookieStore.
@@ -1091,7 +1131,7 @@ TEST_F(DeferredCookieTaskTest, DeferredGetCookies) {
MockGetCookiesCallback get_cookies_callback;
- BeginWith(GetCookiesAction(
+ BeginWithForDomainKey("google.izzle", GetCookiesAction(
&cookie_monster(), url_google_, &get_cookies_callback));
WaitForLoadCall();
@@ -1111,7 +1151,7 @@ TEST_F(DeferredCookieTaskTest, DeferredGetCookiesWithInfo) {
MockGetCookieInfoCallback get_cookie_info_callback;
- BeginWith(GetCookiesWithInfoAction(
+ BeginWithForDomainKey("google.izzle", GetCookiesWithInfoAction(
&cookie_monster(), url_google_, &get_cookie_info_callback));
WaitForLoadCall();
@@ -1128,7 +1168,7 @@ TEST_F(DeferredCookieTaskTest, DeferredGetCookiesWithInfo) {
TEST_F(DeferredCookieTaskTest, DeferredSetCookie) {
MockSetCookiesCallback set_cookies_callback;
- BeginWith(SetCookieAction(
+ BeginWithForDomainKey("google.izzle", SetCookieAction(
&cookie_monster(), url_google_, "A=B", &set_cookies_callback));
WaitForLoadCall();
@@ -1145,7 +1185,7 @@ TEST_F(DeferredCookieTaskTest, DeferredSetCookie) {
TEST_F(DeferredCookieTaskTest, DeferredDeleteCookie) {
MockClosure delete_cookie_callback;
- BeginWith(DeleteCookieAction(
+ BeginWithForDomainKey("google.izzle", DeleteCookieAction(
&cookie_monster(), url_google_, "A", &delete_cookie_callback));
WaitForLoadCall();
@@ -1162,7 +1202,7 @@ TEST_F(DeferredCookieTaskTest, DeferredDeleteCookie) {
TEST_F(DeferredCookieTaskTest, DeferredSetCookieWithDetails) {
MockSetCookiesCallback set_cookies_callback;
- BeginWith(SetCookieWithDetailsAction(
+ BeginWithForDomainKey("google.izzle", SetCookieWithDetailsAction(
&cookie_monster(), url_google_foo_, "A", "B", std::string(), "/foo",
base::Time(), false, false, &set_cookies_callback));
@@ -1205,7 +1245,7 @@ TEST_F(DeferredCookieTaskTest, DeferredGetAllForUrlCookies) {
MockGetCookieListCallback get_cookie_list_callback;
- BeginWith(GetAllCookiesForUrlAction(
+ BeginWithForDomainKey("google.izzle", GetAllCookiesForUrlAction(
&cookie_monster(), url_google_, &get_cookie_list_callback));
WaitForLoadCall();
@@ -1227,7 +1267,7 @@ TEST_F(DeferredCookieTaskTest, DeferredGetAllForUrlWithOptionsCookies) {
MockGetCookieListCallback get_cookie_list_callback;
- BeginWith(GetAllCookiesForUrlWithOptionsAction(
+ BeginWithForDomainKey("google.izzle", GetAllCookiesForUrlWithOptionsAction(
&cookie_monster(), url_google_, &get_cookie_list_callback));
WaitForLoadCall();
@@ -1278,7 +1318,7 @@ TEST_F(DeferredCookieTaskTest, DeferredDeleteAllCreatedBetweenCookies) {
TEST_F(DeferredCookieTaskTest, DeferredDeleteAllForHostCookies) {
MockDeleteCallback delete_callback;
- BeginWith(DeleteAllForHostAction(
+ BeginWithForDomainKey("google.izzle", DeleteAllForHostAction(
&cookie_monster(), url_google_, &delete_callback));
WaitForLoadCall();
@@ -1334,17 +1374,17 @@ TEST_F(DeferredCookieTaskTest, DeferredTaskOrder) {
DeleteCookieAction(
&cookie_monster(), url_google_, "A", &delete_cookie_callback)));
ExpectLoadCall();
+ ExpectLoadForKeyCall("google.izzle", false);
Begin();
WaitForLoadCall();
EXPECT_CALL(get_cookies_callback, Invoke("X=1")).WillOnce(
GetCookiesWithInfoAction(
&cookie_monster(), url_google_, &get_cookie_info_callback));
-
- 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());
+ EXPECT_CALL(set_cookies_callback, Invoke(true));
+ EXPECT_CALL(delete_cookie_callback, Invoke());
CompleteLoadingAndWait();
}
@@ -2970,10 +3010,16 @@ class FlushablePersistentStore : public CookieMonster::PersistentCookieStore {
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;
+ MessageLoop::current()->PostTask(FROM_HERE,
+ base::Bind(&net::LoadedCallbackTask::Run,
+ new net::LoadedCallbackTask(loaded_callback, out_cookies)));
+ }
+
+ void LoadCookiesForKey(const std::string& key,
+ const LoadedCallback& loaded_callback) {
+ Load(loaded_callback);
}
void AddCookie(const CookieMonster::CanonicalCookie&) {}