| Index: chrome/browser/chrome_thread_unittest.cc
|
| ===================================================================
|
| --- chrome/browser/chrome_thread_unittest.cc (revision 45861)
|
| +++ chrome/browser/chrome_thread_unittest.cc (working copy)
|
| @@ -3,6 +3,7 @@
|
| // found in the LICENSE file.
|
|
|
| #include "base/message_loop.h"
|
| +#include "base/message_loop_proxy.h"
|
| #include "chrome/browser/chrome_thread.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "testing/platform_test.h"
|
| @@ -10,25 +11,25 @@
|
| class ChromeThreadTest : public testing::Test {
|
| public:
|
| void Release() {
|
| - CHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
|
| + CHECK(ChromeThread::CurrentlyOn(ChromeThread::UI));
|
| loop_.PostTask(FROM_HERE, new MessageLoop::QuitTask);
|
| }
|
|
|
| protected:
|
| virtual void SetUp() {
|
| + ui_thread_.reset(new ChromeThread(ChromeThread::UI));
|
| file_thread_.reset(new ChromeThread(ChromeThread::FILE));
|
| - io_thread_.reset(new ChromeThread(ChromeThread::IO));
|
| + ui_thread_->Start();
|
| file_thread_->Start();
|
| - io_thread_->Start();
|
| }
|
|
|
| virtual void TearDown() {
|
| + ui_thread_->Stop();
|
| file_thread_->Stop();
|
| - io_thread_->Stop();
|
| }
|
|
|
| static void BasicFunction(MessageLoop* message_loop) {
|
| - CHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
|
| + CHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
|
| message_loop->PostTask(FROM_HERE, new MessageLoop::QuitTask);
|
| }
|
|
|
| @@ -47,15 +48,15 @@
|
| bool* deleted_;
|
| };
|
|
|
| - class DeletedOnIO
|
| + class DeletedOnFile
|
| : public base::RefCountedThreadSafe<
|
| - DeletedOnIO, ChromeThread::DeleteOnIOThread> {
|
| + DeletedOnFile, ChromeThread::DeleteOnFileThread> {
|
| public:
|
| - explicit DeletedOnIO(MessageLoop* message_loop)
|
| + explicit DeletedOnFile(MessageLoop* message_loop)
|
| : message_loop_(message_loop) { }
|
|
|
| - ~DeletedOnIO() {
|
| - CHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
|
| + ~DeletedOnFile() {
|
| + CHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
|
| message_loop_->PostTask(FROM_HERE, new MessageLoop::QuitTask());
|
| }
|
|
|
| @@ -73,20 +74,20 @@
|
| };
|
|
|
| private:
|
| + scoped_ptr<ChromeThread> ui_thread_;
|
| scoped_ptr<ChromeThread> file_thread_;
|
| - scoped_ptr<ChromeThread> io_thread_;
|
| MessageLoop loop_;
|
| };
|
|
|
| TEST_F(ChromeThreadTest, PostTask) {
|
| ChromeThread::PostTask(
|
| - ChromeThread::IO, FROM_HERE,
|
| + ChromeThread::FILE, FROM_HERE,
|
| NewRunnableFunction(&BasicFunction, MessageLoop::current()));
|
| MessageLoop::current()->Run();
|
| }
|
|
|
| TEST_F(ChromeThreadTest, Release) {
|
| - ChromeThread::ReleaseSoon(ChromeThread::FILE, FROM_HERE, this);
|
| + ChromeThread::ReleaseSoon(ChromeThread::UI, FROM_HERE, this);
|
| MessageLoop::current()->Run();
|
| }
|
|
|
| @@ -100,7 +101,8 @@
|
|
|
| TEST_F(ChromeThreadTest, ReleasedOnCorrectThread) {
|
| {
|
| - scoped_refptr<DeletedOnIO> test(new DeletedOnIO(MessageLoop::current()));
|
| + scoped_refptr<DeletedOnFile> test(
|
| + new DeletedOnFile(MessageLoop::current()));
|
| }
|
| MessageLoop::current()->Run();
|
| }
|
| @@ -108,3 +110,54 @@
|
| TEST_F(ChromeThreadTest, NotReleasedIfTargetThreadNonExistent) {
|
| scoped_refptr<NeverDeleted> test(new NeverDeleted());
|
| }
|
| +
|
| +TEST_F(ChromeThreadTest, PostTaskViaMessageLoopProxy) {
|
| + scoped_refptr<MessageLoopProxy> message_loop_proxy =
|
| + ChromeThread::GetMessageLoopProxyForThread(ChromeThread::FILE);
|
| + message_loop_proxy->PostTask(FROM_HERE,
|
| + NewRunnableFunction(&BasicFunction,
|
| + MessageLoop::current()));
|
| + MessageLoop::current()->Run();
|
| +}
|
| +
|
| +TEST_F(ChromeThreadTest, ReleaseViaMessageLoopProxy) {
|
| + scoped_refptr<MessageLoopProxy> message_loop_proxy =
|
| + ChromeThread::GetMessageLoopProxyForThread(ChromeThread::UI);
|
| + message_loop_proxy->ReleaseSoon(FROM_HERE, this);
|
| + MessageLoop::current()->Run();
|
| +}
|
| +
|
| +TEST_F(ChromeThreadTest, TaskToNonExistentThreadIsDeletedViaMessageLoopProxy) {
|
| + bool deleted = false;
|
| + scoped_refptr<MessageLoopProxy> message_loop_proxy =
|
| + ChromeThread::GetMessageLoopProxyForThread(ChromeThread::WEBKIT);
|
| + message_loop_proxy->PostTask(FROM_HERE, new DummyTask(&deleted));
|
| + EXPECT_TRUE(deleted);
|
| +}
|
| +
|
| +TEST_F(ChromeThreadTest, PostTaskViaMessageLoopProxyAfterThreadExits) {
|
| + scoped_ptr<ChromeThread> io_thread(new ChromeThread(ChromeThread::IO));
|
| + io_thread->Start();
|
| + io_thread->Stop();
|
| +
|
| + bool deleted = false;
|
| + scoped_refptr<MessageLoopProxy> message_loop_proxy =
|
| + ChromeThread::GetMessageLoopProxyForThread(ChromeThread::IO);
|
| + bool ret = message_loop_proxy->PostTask(FROM_HERE, new DummyTask(&deleted));
|
| + EXPECT_FALSE(ret);
|
| + EXPECT_TRUE(deleted);
|
| +}
|
| +
|
| +TEST_F(ChromeThreadTest, PostTaskViaMessageLoopProxyAfterThreadIsDeleted) {
|
| + {
|
| + scoped_ptr<ChromeThread> io_thread(new ChromeThread(ChromeThread::IO));
|
| + io_thread->Start();
|
| + }
|
| + bool deleted = false;
|
| + scoped_refptr<MessageLoopProxy> message_loop_proxy =
|
| + ChromeThread::GetMessageLoopProxyForThread(ChromeThread::IO);
|
| + bool ret = message_loop_proxy->PostTask(FROM_HERE, new DummyTask(&deleted));
|
| + EXPECT_FALSE(ret);
|
| + EXPECT_TRUE(deleted);
|
| +}
|
| +
|
|
|