Commit b2bec813 authored by xunjieli's avatar xunjieli Committed by Commit bot

Convert CookieMonster tests to use base::RunLoop

CookieMonster tests post a
base::MessageLoop::QuitWhenIdleClosure task which
could be run at the start of some other test, since
the unit tests are invoked in the same fixture on
Android. This CL converts these CookieMonster tests
to use base::RunLoop so they don't influence other
tests.

BUG=568282

Review URL: https://codereview.chromium.org/1634803004

Cr-Commit-Position: refs/heads/master@{#371908}
parent 72d9ed4e
......@@ -115,7 +115,6 @@ INSTANTIATE_TYPED_TEST_CASE_P(CookieMonsterStrictSecure,
template <typename T>
class CookieMonsterTestBase : public CookieStoreTest<T> {
public:
using CookieStoreTest<T>::RunFor;
using CookieStoreTest<T>::SetCookie;
protected:
......@@ -127,8 +126,7 @@ class CookieMonsterTestBase : public CookieStoreTest<T> {
GetCookieListCallback callback;
cm->GetAllCookiesForURLAsync(url, base::Bind(&GetCookieListCallback::Run,
base::Unretained(&callback)));
RunFor(kTimeout);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
return callback.cookies();
}
......@@ -140,8 +138,7 @@ class CookieMonsterTestBase : public CookieStoreTest<T> {
cm->GetAllCookiesForURLWithOptionsAsync(
url, options,
base::Bind(&GetCookieListCallback::Run, base::Unretained(&callback)));
RunFor(kTimeout);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
return callback.cookies();
}
......@@ -164,8 +161,7 @@ class CookieMonsterTestBase : public CookieStoreTest<T> {
false /* enforces strict secure cookies */, priority,
base::Bind(&ResultSavingCookieCallback<bool>::Run,
base::Unretained(&callback)));
RunFor(kTimeout);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
return callback.result();
}
......@@ -175,8 +171,7 @@ class CookieMonsterTestBase : public CookieStoreTest<T> {
cm->SetAllCookiesAsync(list,
base::Bind(&ResultSavingCookieCallback<bool>::Run,
base::Unretained(&callback)));
RunFor(kTimeout);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
return callback.result();
}
......@@ -185,8 +180,7 @@ class CookieMonsterTestBase : public CookieStoreTest<T> {
ResultSavingCookieCallback<int> callback;
cm->DeleteAllAsync(base::Bind(&ResultSavingCookieCallback<int>::Run,
base::Unretained(&callback)));
RunFor(kTimeout);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
return callback.result();
}
......@@ -199,8 +193,7 @@ class CookieMonsterTestBase : public CookieStoreTest<T> {
delete_begin, delete_end,
base::Bind(&ResultSavingCookieCallback<int>::Run,
base::Unretained(&callback)));
RunFor(kTimeout);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
return callback.result();
}
......@@ -214,8 +207,7 @@ class CookieMonsterTestBase : public CookieStoreTest<T> {
delete_begin, delete_end, url,
base::Bind(&ResultSavingCookieCallback<int>::Run,
base::Unretained(&callback)));
RunFor(kTimeout);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
return callback.result();
}
......@@ -225,8 +217,7 @@ class CookieMonsterTestBase : public CookieStoreTest<T> {
cm->DeleteAllForHostAsync(url,
base::Bind(&ResultSavingCookieCallback<int>::Run,
base::Unretained(&callback)));
RunFor(kTimeout);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
return callback.result();
}
......@@ -236,8 +227,7 @@ class CookieMonsterTestBase : public CookieStoreTest<T> {
cm->DeleteCanonicalCookieAsync(
cookie, base::Bind(&ResultSavingCookieCallback<bool>::Run,
base::Unretained(&callback)));
RunFor(kTimeout);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
return callback.result();
}
......@@ -705,9 +695,8 @@ struct CookiesInputInfo {
CookiePriority priority;
};
ACTION(QuitCurrentMessageLoop) {
base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::MessageLoop::QuitWhenIdleClosure());
ACTION_P(QuitRunLoop, run_loop) {
run_loop->Quit();
}
// TODO(erikwright): When the synchronous helpers 'GetCookies' etc. are removed,
......@@ -786,7 +775,7 @@ ACTION_P2(DeleteSessionCookiesAction, cookie_monster, callback) {
// 3. Invocations after the loading has completed complete immediately.
class DeferredCookieTaskTest : public CookieMonsterTest {
protected:
DeferredCookieTaskTest() {
DeferredCookieTaskTest() : expect_load_called_(false) {
persistent_store_ = new NewMockPersistentCookieStore();
cookie_monster_ = new CookieMonster(persistent_store_.get(), NULL);
}
......@@ -799,26 +788,23 @@ class DeferredCookieTaskTest : public CookieMonsterTest {
}
// Runs the message loop, waiting until PersistentCookieStore::Load is called.
// Call CompleteLoadingAndWait to cause the load to complete.
// Call CompleteLoading to cause the load to complete.
void WaitForLoadCall() {
RunFor(kTimeout);
load_run_loop_.Run();
// Verify that PeristentStore::Load was called.
testing::Mock::VerifyAndClear(persistent_store_.get());
}
// Invokes the PersistentCookieStore::LoadCookiesForKey completion callbacks
// and PersistentCookieStore::Load completion callback and waits
// until the message loop is quit.
void CompleteLoadingAndWait() {
// and PersistentCookieStore::Load completion callback.
void CompleteLoading() {
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);
}
// Performs the provided action, expecting it to cause a call to
......@@ -834,30 +820,26 @@ class DeferredCookieTaskTest : public CookieMonsterTest {
testing::Action<void(void)> action) {
EXPECT_CALL(*this, Begin()).WillOnce(action);
ExpectLoadCall();
ExpectLoadForKeyCall(key, false);
ExpectLoadForKeyCall(key);
Begin();
}
// Declares an expectation that PersistentCookieStore::Load will be called,
// saving the provided callback and sending a quit to the message loop.
// saving the provided callback and sending a quit to |load_run_loop_|.
void ExpectLoadCall() {
// Make sure the |load_run_loop_| is not reused.
CHECK(!expect_load_called_);
expect_load_called_ = true;
EXPECT_CALL(*persistent_store_.get(), Load(testing::_))
.WillOnce(testing::DoAll(testing::SaveArg<0>(&loaded_callback_),
QuitCurrentMessageLoop()));
QuitRunLoop(&load_run_loop_)));
}
// Declares an expectation that PersistentCookieStore::LoadCookiesForKey
// will be called, saving the provided callback and sending a quit to the
// message loop.
void ExpectLoadForKeyCall(const std::string& key, bool quit_queue) {
if (quit_queue)
EXPECT_CALL(*persistent_store_.get(), LoadCookiesForKey(key, testing::_))
.WillOnce(
testing::DoAll(PushCallbackAction(&loaded_for_key_callbacks_),
QuitCurrentMessageLoop()));
else
EXPECT_CALL(*persistent_store_.get(), LoadCookiesForKey(key, testing::_))
.WillOnce(PushCallbackAction(&loaded_for_key_callbacks_));
// will be called, saving the provided callback.
void ExpectLoadForKeyCall(const std::string& key) {
EXPECT_CALL(*persistent_store_.get(), LoadCookiesForKey(key, testing::_))
.WillOnce(PushCallbackAction(&loaded_for_key_callbacks_));
}
// Invokes the initial action.
......@@ -879,7 +861,10 @@ class DeferredCookieTaskTest : public CookieMonsterTest {
// PersistentCookieStore::LoadCookiesForKey
std::queue<CookieMonster::PersistentCookieStore::LoadedCallback>
loaded_for_key_callbacks_;
// base::RunLoop used to wait for PersistentCookieStore::Load to be called.
base::RunLoop load_run_loop_;
// Indicates whether ExpectLoadCall() has been called.
bool expect_load_called_;
// Stores the CookieMonster under test.
scoped_refptr<CookieMonster> cookie_monster_;
// Stores the mock PersistentCookieStore.
......@@ -903,10 +888,11 @@ TEST_F(DeferredCookieTaskTest, DeferredGetCookies) {
EXPECT_CALL(get_cookies_callback, Invoke("X=1"))
.WillOnce(GetCookiesAction(&cookie_monster(), http_www_google_.url(),
&get_cookies_callback));
EXPECT_CALL(get_cookies_callback, Invoke("X=1"))
.WillOnce(QuitCurrentMessageLoop());
base::RunLoop loop;
EXPECT_CALL(get_cookies_callback, Invoke("X=1")).WillOnce(QuitRunLoop(&loop));
CompleteLoadingAndWait();
CompleteLoading();
loop.Run();
}
TEST_F(DeferredCookieTaskTest, DeferredSetCookie) {
......@@ -922,10 +908,11 @@ TEST_F(DeferredCookieTaskTest, DeferredSetCookie) {
EXPECT_CALL(set_cookies_callback, Invoke(true))
.WillOnce(SetCookieAction(&cookie_monster(), http_www_google_.url(),
"X=Y", &set_cookies_callback));
EXPECT_CALL(set_cookies_callback, Invoke(true))
.WillOnce(QuitCurrentMessageLoop());
base::RunLoop loop;
EXPECT_CALL(set_cookies_callback, Invoke(true)).WillOnce(QuitRunLoop(&loop));
CompleteLoadingAndWait();
CompleteLoading();
loop.Run();
}
TEST_F(DeferredCookieTaskTest, DeferredSetAllCookies) {
......@@ -948,10 +935,11 @@ TEST_F(DeferredCookieTaskTest, DeferredSetAllCookies) {
EXPECT_CALL(set_cookies_callback, Invoke(true))
.WillOnce(
SetAllCookiesAction(&cookie_monster(), list, &set_cookies_callback));
EXPECT_CALL(set_cookies_callback, Invoke(true))
.WillOnce(QuitCurrentMessageLoop());
base::RunLoop loop;
EXPECT_CALL(set_cookies_callback, Invoke(true)).WillOnce(QuitRunLoop(&loop));
CompleteLoadingAndWait();
CompleteLoading();
loop.Run();
}
TEST_F(DeferredCookieTaskTest, DeferredDeleteCookie) {
......@@ -967,10 +955,11 @@ TEST_F(DeferredCookieTaskTest, DeferredDeleteCookie) {
EXPECT_CALL(delete_cookie_callback, Invoke())
.WillOnce(DeleteCookieAction(&cookie_monster(), http_www_google_.url(),
"X", &delete_cookie_callback));
EXPECT_CALL(delete_cookie_callback, Invoke())
.WillOnce(QuitCurrentMessageLoop());
base::RunLoop loop;
EXPECT_CALL(delete_cookie_callback, Invoke()).WillOnce(QuitRunLoop(&loop));
CompleteLoadingAndWait();
CompleteLoading();
loop.Run();
}
TEST_F(DeferredCookieTaskTest, DeferredSetCookieWithDetails) {
......@@ -1006,10 +995,11 @@ TEST_F(DeferredCookieTaskTest, DeferredSetCookieWithDetails) {
EXPECT_CALL(set_cookies_callback, Invoke(true))
.WillOnce(SetCookieWithDetailsAction(&cookie_monster(), cookie_info_exp,
&set_cookies_callback));
EXPECT_CALL(set_cookies_callback, Invoke(true))
.WillOnce(QuitCurrentMessageLoop());
base::RunLoop loop;
EXPECT_CALL(set_cookies_callback, Invoke(true)).WillOnce(QuitRunLoop(&loop));
CompleteLoadingAndWait();
CompleteLoading();
loop.Run();
}
TEST_F(DeferredCookieTaskTest, DeferredGetAllCookies) {
......@@ -1026,10 +1016,12 @@ TEST_F(DeferredCookieTaskTest, DeferredGetAllCookies) {
EXPECT_CALL(get_cookie_list_callback, Invoke(testing::_))
.WillOnce(
GetAllCookiesAction(&cookie_monster(), &get_cookie_list_callback));
base::RunLoop loop;
EXPECT_CALL(get_cookie_list_callback, Invoke(testing::_))
.WillOnce(QuitCurrentMessageLoop());
.WillOnce(QuitRunLoop(&loop));
CompleteLoadingAndWait();
CompleteLoading();
loop.Run();
}
TEST_F(DeferredCookieTaskTest, DeferredGetAllForUrlCookies) {
......@@ -1050,10 +1042,12 @@ TEST_F(DeferredCookieTaskTest, DeferredGetAllForUrlCookies) {
.WillOnce(GetAllCookiesForUrlAction(&cookie_monster(),
http_www_google_.url(),
&get_cookie_list_callback));
base::RunLoop loop;
EXPECT_CALL(get_cookie_list_callback, Invoke(testing::_))
.WillOnce(QuitCurrentMessageLoop());
.WillOnce(QuitRunLoop(&loop));
CompleteLoadingAndWait();
CompleteLoading();
loop.Run();
}
TEST_F(DeferredCookieTaskTest, DeferredGetAllForUrlWithOptionsCookies) {
......@@ -1074,10 +1068,12 @@ TEST_F(DeferredCookieTaskTest, DeferredGetAllForUrlWithOptionsCookies) {
.WillOnce(GetAllCookiesForUrlWithOptionsAction(
&cookie_monster(), http_www_google_.url(),
&get_cookie_list_callback));
base::RunLoop loop;
EXPECT_CALL(get_cookie_list_callback, Invoke(testing::_))
.WillOnce(QuitCurrentMessageLoop());
.WillOnce(QuitRunLoop(&loop));
CompleteLoadingAndWait();
CompleteLoading();
loop.Run();
}
TEST_F(DeferredCookieTaskTest, DeferredDeleteAllCookies) {
......@@ -1089,10 +1085,12 @@ TEST_F(DeferredCookieTaskTest, DeferredDeleteAllCookies) {
EXPECT_CALL(delete_callback, Invoke(false))
.WillOnce(DeleteAllAction(&cookie_monster(), &delete_callback));
EXPECT_CALL(delete_callback, Invoke(false))
.WillOnce(QuitCurrentMessageLoop());
CompleteLoadingAndWait();
base::RunLoop loop;
EXPECT_CALL(delete_callback, Invoke(false)).WillOnce(QuitRunLoop(&loop));
CompleteLoading();
loop.Run();
}
TEST_F(DeferredCookieTaskTest, DeferredDeleteAllCreatedBetweenCookies) {
......@@ -1107,10 +1105,11 @@ TEST_F(DeferredCookieTaskTest, DeferredDeleteAllCreatedBetweenCookies) {
.WillOnce(DeleteAllCreatedBetweenAction(&cookie_monster(), base::Time(),
base::Time::Now(),
&delete_callback));
EXPECT_CALL(delete_callback, Invoke(false))
.WillOnce(QuitCurrentMessageLoop());
base::RunLoop loop;
EXPECT_CALL(delete_callback, Invoke(false)).WillOnce(QuitRunLoop(&loop));
CompleteLoadingAndWait();
CompleteLoading();
loop.Run();
}
TEST_F(DeferredCookieTaskTest, DeferredDeleteAllForHostCookies) {
......@@ -1126,10 +1125,11 @@ TEST_F(DeferredCookieTaskTest, DeferredDeleteAllForHostCookies) {
EXPECT_CALL(delete_callback, Invoke(false))
.WillOnce(DeleteAllForHostAction(
&cookie_monster(), http_www_google_.url(), &delete_callback));
EXPECT_CALL(delete_callback, Invoke(false))
.WillOnce(QuitCurrentMessageLoop());
base::RunLoop loop;
EXPECT_CALL(delete_callback, Invoke(false)).WillOnce(QuitRunLoop(&loop));
CompleteLoadingAndWait();
CompleteLoading();
loop.Run();
}
TEST_F(DeferredCookieTaskTest, DeferredDeleteCanonicalCookie) {
......@@ -1147,10 +1147,12 @@ TEST_F(DeferredCookieTaskTest, DeferredDeleteCanonicalCookie) {
EXPECT_CALL(delete_cookie_callback, Invoke(false))
.WillOnce(DeleteCanonicalCookieAction(&cookie_monster(), cookie,
&delete_cookie_callback));
base::RunLoop loop;
EXPECT_CALL(delete_cookie_callback, Invoke(false))
.WillOnce(QuitCurrentMessageLoop());
.WillOnce(QuitRunLoop(&loop));
CompleteLoadingAndWait();
CompleteLoading();
loop.Run();
}
TEST_F(DeferredCookieTaskTest, DeferredDeleteSessionCookies) {
......@@ -1163,10 +1165,11 @@ TEST_F(DeferredCookieTaskTest, DeferredDeleteSessionCookies) {
EXPECT_CALL(delete_callback, Invoke(false))
.WillOnce(
DeleteSessionCookiesAction(&cookie_monster(), &delete_callback));
EXPECT_CALL(delete_callback, Invoke(false))
.WillOnce(QuitCurrentMessageLoop());
base::RunLoop loop;
EXPECT_CALL(delete_callback, Invoke(false)).WillOnce(QuitRunLoop(&loop));
CompleteLoadingAndWait();
CompleteLoading();
loop.Run();
}
// Verify that a series of queued tasks are executed in order upon loading of
......@@ -1188,7 +1191,7 @@ TEST_F(DeferredCookieTaskTest, DeferredTaskOrder) {
SetCookieAction(&cookie_monster(), http_www_google_.url(), "A=B",
&set_cookies_callback)));
ExpectLoadCall();
ExpectLoadForKeyCall(http_www_google_.domain(), false);
ExpectLoadForKeyCall(http_www_google_.domain());
Begin();
WaitForLoadCall();
......@@ -1196,10 +1199,12 @@ TEST_F(DeferredCookieTaskTest, DeferredTaskOrder) {
.WillOnce(GetCookiesAction(&cookie_monster(), http_www_google_.url(),
&get_cookies_callback_deferred));
EXPECT_CALL(set_cookies_callback, Invoke(true));
base::RunLoop loop;
EXPECT_CALL(get_cookies_callback_deferred, Invoke("A=B; X=1"))
.WillOnce(QuitCurrentMessageLoop());
.WillOnce(QuitRunLoop(&loop));
CompleteLoadingAndWait();
CompleteLoading();
loop.Run();
}
TEST_F(CookieMonsterTest, TestCookieDeleteAll) {
......@@ -2591,7 +2596,6 @@ class MultiThreadedCookieMonsterTest : public CookieMonsterTest {
void RunOnOtherThread(const base::Closure& task) {
other_thread_.Start();
other_thread_.task_runner()->PostTask(FROM_HERE, task);
RunFor(kTimeout);
other_thread_.Stop();
}
......@@ -2614,7 +2618,7 @@ TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckGetAllCookies) {
base::Bind(&MultiThreadedCookieMonsterTest::GetAllCookiesTask,
base::Unretained(this), cm, &callback);
RunOnOtherThread(task);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
it = callback.cookies().begin();
ASSERT_TRUE(it != callback.cookies().end());
EXPECT_EQ(http_www_google_.host(), it->Domain());
......@@ -2636,7 +2640,7 @@ TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckGetAllCookiesForURL) {
base::Bind(&MultiThreadedCookieMonsterTest::GetAllCookiesForURLTask,
base::Unretained(this), cm, http_www_google_.url(), &callback);
RunOnOtherThread(task);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
it = callback.cookies().begin();
ASSERT_TRUE(it != callback.cookies().end());
EXPECT_EQ(http_www_google_.host(), it->Domain());
......@@ -2660,7 +2664,7 @@ TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckGetAllCookiesForURLWithOpt) {
&MultiThreadedCookieMonsterTest::GetAllCookiesForURLWithOptionsTask,
base::Unretained(this), cm, http_www_google_.url(), options, &callback);
RunOnOtherThread(task);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
it = callback.cookies().begin();
ASSERT_TRUE(it != callback.cookies().end());
EXPECT_EQ(http_www_google_.host(), it->Domain());
......@@ -2678,7 +2682,7 @@ TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckSetCookieWithDetails) {
base::Bind(&MultiThreadedCookieMonsterTest::SetCookieWithDetailsTask,
base::Unretained(this), cm, www_google_foo_.url(), &callback);
RunOnOtherThread(task);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
EXPECT_TRUE(callback.result());
}
......@@ -2698,7 +2702,7 @@ TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckDeleteAllCreatedBetween) {
base::Unretained(this), cm, now - TimeDelta::FromDays(99),
Time(), &callback);
RunOnOtherThread(task);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
EXPECT_EQ(1, callback.result());
}
......@@ -2715,7 +2719,7 @@ TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckDeleteAllForHost) {
base::Bind(&MultiThreadedCookieMonsterTest::DeleteAllForHostTask,
base::Unretained(this), cm, http_www_google_.url(), &callback);
RunOnOtherThread(task);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
EXPECT_EQ(1, callback.result());
}
......@@ -2762,7 +2766,7 @@ TEST_F(MultiThreadedCookieMonsterTest,
base::Unretained(this), cm, ago1, Time(), http_www_google_.url(),
&callback);
RunOnOtherThread(task);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
EXPECT_EQ(2, callback.result()); // Deletes A=B, G=H.
}
......@@ -2784,7 +2788,7 @@ TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckDeleteCanonicalCookie) {
base::Bind(&MultiThreadedCookieMonsterTest::DeleteCanonicalCookieTask,
base::Unretained(this), cm, *it, &callback);
RunOnOtherThread(task);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
EXPECT_TRUE(callback.result());
}
......@@ -2822,11 +2826,10 @@ TEST_F(MultiThreadedCookieMonsterTest, GetAllCookiesForURLEffectiveDomain) {
checkpoint.Call(0);
GetAllCookiesForURLTask(cm.get(), http_www_google_.url(), &callback);
checkpoint.Call(1);
ASSERT_FALSE(callback.did_run());
// Pass the cookies to the CookieMonster.
loaded_callback.Run(cookies);
// Now GetAllCookiesForURLTask is done.
ASSERT_TRUE(callback.did_run());
callback.WaitUntilDone();
// See that the callback was called with the cookies.
ASSERT_EQ(1u, callback.cookies().size());
EXPECT_TRUE(cookie->IsEquivalent(callback.cookies()[0]));
......@@ -2841,7 +2844,7 @@ TEST_F(MultiThreadedCookieMonsterTest, GetAllCookiesForURLEffectiveDomain) {
// calling LoadCookiesForKey.
GetCookieListCallback callback;
GetAllCookiesForURLTask(cm.get(), url, &callback);
ASSERT_TRUE(callback.did_run());
callback.WaitUntilDone();
ASSERT_EQ(1u, callback.cookies().size());
EXPECT_TRUE(cookie->IsEquivalent(callback.cookies()[0]));
}
......
......@@ -13,18 +13,12 @@
namespace net {
CookieCallback::CookieCallback(base::Thread* run_in_thread)
: did_run_(false),
run_in_thread_(run_in_thread),
run_in_loop_(NULL),
parent_loop_(base::MessageLoop::current()),
loop_to_quit_(base::MessageLoop::current()) {}
: run_in_thread_(run_in_thread), run_in_loop_(NULL) {}
CookieCallback::CookieCallback()
: did_run_(false),
run_in_thread_(NULL),
run_in_loop_(base::MessageLoop::current()),
parent_loop_(NULL),
loop_to_quit_(base::MessageLoop::current()) {}
: run_in_thread_(NULL), run_in_loop_(base::MessageLoop::current()) {}
CookieCallback::~CookieCallback() {}
void CookieCallback::CallbackEpilogue() {
base::MessageLoop* expected_loop = NULL;
......@@ -36,10 +30,12 @@ void CookieCallback::CallbackEpilogue() {
}
ASSERT_TRUE(expected_loop != NULL);
did_run_ = true;
EXPECT_EQ(expected_loop, base::MessageLoop::current());
loop_to_quit_->task_runner()->PostTask(
FROM_HERE, base::MessageLoop::QuitWhenIdleClosure());
loop_to_quit_.Quit();
}
void CookieCallback::WaitUntilDone() {
loop_to_quit_.Run();
}
StringResultCookieCallback::StringResultCookieCallback() {}
......
......@@ -8,6 +8,7 @@
#include <string>
#include <vector>
#include "base/run_loop.h"
#include "net/cookies/canonical_cookie.h"
#include "net/cookies/cookie_store.h"
......@@ -23,28 +24,27 @@ namespace net {
// quit to the thread in which it was constructed.
class CookieCallback {
public:
// Indicates whether the callback has been called.
bool did_run() { return did_run_; }
// Waits until the callback is invoked.
void WaitUntilDone();
protected:
// Constructs a callback that expects to be called in the given thread and
// will, upon execution, send a QUIT to the constructing thread.
// Constructs a callback that expects to be called in the given thread.
explicit CookieCallback(base::Thread* run_in_thread);
// Constructs a callback that expects to be called in current thread and will
// send a QUIT to the constructing thread.
CookieCallback();
~CookieCallback();
// Tests whether the current thread was the caller's thread.
// Sends a QUIT to the constructing thread.
void CallbackEpilogue();
private:
bool did_run_;
base::Thread* run_in_thread_;
base::MessageLoop* run_in_loop_;
base::MessageLoop* parent_loop_;
base::MessageLoop* loop_to_quit_;
base::RunLoop loop_to_quit_;
};
// Callback implementations for the asynchronous CookieStore methods.
......
......@@ -109,8 +109,7 @@ class CookieStoreTest : public testing::Test {
url, options,
base::Bind(&StringResultCookieCallback::Run,
base::Unretained(&callback)));
RunFor(kTimeout);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
return callback.result();
}
......@@ -122,8 +121,7 @@ class CookieStoreTest : public testing::Test {
cs->GetCookiesWithOptionsAsync(
url, options, base::Bind(&StringResultCookieCallback::Run,
base::Unretained(&callback)));
RunFor(kTimeout);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
return callback.result();
}
......@@ -132,8 +130,7 @@ class CookieStoreTest : public testing::Test {
GetCookieListCallback callback;
cs->GetAllCookiesAsync(
base::Bind(&GetCookieListCallback::Run, base::Unretained(&callback)));
RunFor(kTimeout);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
return callback.cookies();
}
......@@ -148,8 +145,7 @@ class CookieStoreTest : public testing::Test {
base::Bind(
&ResultSavingCookieCallback<bool>::Run,
base::Unretained(&callback)));
RunFor(kTimeout);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
return callback.result();
}
......@@ -183,8 +179,7 @@ class CookieStoreTest : public testing::Test {
cs->DeleteCookieAsync(
url, cookie_name,
base::Bind(&NoResultCookieCallback::Run, base::Unretained(&callback)));
RunFor(kTimeout);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
}
int DeleteCreatedBetween(CookieStore* cs,
......@@ -197,8 +192,7 @@ class CookieStoreTest : public testing::Test {
base::Bind(
&ResultSavingCookieCallback<int>::Run,
base::Unretained(&callback)));
RunFor(kTimeout);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
return callback.result();
}
......@@ -213,8 +207,7 @@ class CookieStoreTest : public testing::Test {
base::Bind(
&ResultSavingCookieCallback<int>::Run,
base::Unretained(&callback)));
RunFor(kTimeout);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
return callback.result();
}
......@@ -225,21 +218,10 @@ class CookieStoreTest : public testing::Test {
base::Bind(
&ResultSavingCookieCallback<int>::Run,
base::Unretained(&callback)));
RunFor(kTimeout);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
return callback.result();
}
void RunFor(int ms) {
// Runs the test thread message loop for up to |ms| milliseconds.
base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
FROM_HERE, base::Bind(&base::MessageLoop::QuitWhenIdle,
weak_factory_->GetWeakPtr()),
base::TimeDelta::FromMilliseconds(ms));
base::MessageLoop::current()->Run();
weak_factory_->InvalidateWeakPtrs();
}
scoped_refptr<CookieStore> GetCookieStore() {
return CookieStoreTestTraits::Create();
}
......@@ -1218,7 +1200,6 @@ class MultiThreadedCookieStoreTest :
void RunOnOtherThread(const base::Closure& task) {
other_thread_.Start();
other_thread_.task_runner()->PostTask(FROM_HERE, task);
CookieStoreTest<CookieStoreTestTraits>::RunFor(kTimeout);
other_thread_.Stop();
}
......@@ -1240,7 +1221,7 @@ TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckGetCookies) {
&MultiThreadedCookieStoreTest<TypeParam>::GetCookiesTask,
base::Unretained(this), cs, this->http_www_google_.url(), &callback);
this->RunOnOtherThread(task);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
EXPECT_EQ("A=B", callback.result());
}
......@@ -1259,7 +1240,7 @@ TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckGetCookiesWithOptions) {
base::Unretained(this), cs, this->http_www_google_.url(), options,
&callback);
this->RunOnOtherThread(task);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
EXPECT_EQ("A=B", callback.result());
}
......@@ -1276,7 +1257,7 @@ TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckSetCookieWithOptions) {
base::Unretained(this), cs, this->http_www_google_.url(), "A=B", options,
&callback);
this->RunOnOtherThread(task);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
EXPECT_TRUE(callback.result());
}
......@@ -1295,7 +1276,7 @@ TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckDeleteCookie) {
&MultiThreadedCookieStoreTest<TypeParam>::DeleteCookieTask,
base::Unretained(this), cs, this->http_www_google_.url(), "A", &callback);
this->RunOnOtherThread(task);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
}
TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckDeleteSessionCookies) {
......@@ -1317,7 +1298,7 @@ TYPED_TEST_P(MultiThreadedCookieStoreTest, ThreadCheckDeleteSessionCookies) {
&MultiThreadedCookieStoreTest<TypeParam>::DeleteSessionCookiesTask,
base::Unretained(this), cs, &callback);
this->RunOnOtherThread(task);
EXPECT_TRUE(callback.did_run());
callback.WaitUntilDone();
EXPECT_EQ(1, callback.result());
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment