Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(614)

Unified Diff: chrome/browser/chrome_thread_unittest.cc

Issue 338065: Add the ability for objects which derive from RefCountedThreadSafe to specify... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/chrome_thread.h ('k') | chrome/browser/renderer_host/file_system_accessor.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chrome_thread_unittest.cc
===================================================================
--- chrome/browser/chrome_thread_unittest.cc (revision 30647)
+++ chrome/browser/chrome_thread_unittest.cc (working copy)
@@ -1,72 +1,108 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include <vector>
-
#include "chrome/browser/chrome_thread.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/platform_test.h"
-typedef PlatformTest ChromeThreadTest;
+class ChromeThreadTest : public testing::Test {
+ public:
+ void Release() {
+ CHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
+ loop_.PostTask(FROM_HERE, new MessageLoop::QuitTask);
+ }
-TEST_F(ChromeThreadTest, Get) {
- /*
- // TODO(jabdelmalek): rewrite this test when the change to delete objects on
- // a specific thread lands.
- scoped_ptr<ChromeThread> io_thread;
- scoped_ptr<ChromeThread> file_thread;
- scoped_ptr<ChromeThread> db_thread;
+ protected:
+ virtual void SetUp() {
+ file_thread_.reset(new ChromeThread(ChromeThread::FILE));
+ io_thread_.reset(new ChromeThread(ChromeThread::IO));
+ file_thread_->Start();
+ io_thread_->Start();
+ }
- EXPECT_TRUE(ChromeThread::GetMessageLoop(ChromeThread::IO) == NULL);
- EXPECT_TRUE(ChromeThread::GetMessageLoop(ChromeThread::FILE) == NULL);
- EXPECT_TRUE(ChromeThread::GetMessageLoop(ChromeThread::DB) == NULL);
+ virtual void TearDown() {
+ file_thread_->Stop();
+ io_thread_->Stop();
+ }
- // Phase 1: Create threads.
+ static void BasicFunction(MessageLoop* message_loop) {
+ CHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
+ message_loop->PostTask(FROM_HERE, new MessageLoop::QuitTask);
+ }
- io_thread.reset(new ChromeThread(ChromeThread::IO));
- file_thread.reset(new ChromeThread(ChromeThread::FILE));
- db_thread.reset(new ChromeThread(ChromeThread::DB));
+ class DummyTask : public Task {
+ public:
+ DummyTask(bool* deleted) : deleted_(deleted) { }
+ ~DummyTask() {
+ *deleted_ = true;
+ }
- EXPECT_TRUE(ChromeThread::GetMessageLoop(ChromeThread::IO) == NULL);
- EXPECT_TRUE(ChromeThread::GetMessageLoop(ChromeThread::FILE) == NULL);
- EXPECT_TRUE(ChromeThread::GetMessageLoop(ChromeThread::DB) == NULL);
+ void Run() {
+ CHECK(false);
+ }
- // Phase 2: Start the threads.
+ private:
+ bool* deleted_;
+ };
- io_thread->Start();
- file_thread->Start();
- db_thread->Start();
+ class DeletedOnIO
+ : public base::RefCountedThreadSafe<
+ DeletedOnIO, ChromeThread::DeleteOnIOThread> {
+ public:
+ DeletedOnIO(MessageLoop* message_loop) : message_loop_(message_loop) { }
- EXPECT_TRUE(io_thread->message_loop() != NULL);
- EXPECT_TRUE(file_thread->message_loop() != NULL);
- EXPECT_TRUE(db_thread->message_loop() != NULL);
+ ~DeletedOnIO() {
+ CHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
+ message_loop_->PostTask(FROM_HERE, new MessageLoop::QuitTask());
+ }
- EXPECT_TRUE(ChromeThread::GetMessageLoop(ChromeThread::IO) ==
- io_thread->message_loop());
- EXPECT_TRUE(ChromeThread::GetMessageLoop(ChromeThread::FILE) ==
- file_thread->message_loop());
- EXPECT_TRUE(ChromeThread::GetMessageLoop(ChromeThread::DB) ==
- db_thread->message_loop());
+ private:
+ MessageLoop* message_loop_;
+ };
- // Phase 3: Stop the threads.
+ class NeverDeleted
+ : public base::RefCountedThreadSafe<
+ NeverDeleted, ChromeThread::DeleteOnWebKitThread> {
+ public:
+ ~NeverDeleted() {
+ CHECK(false);
+ }
+ };
- io_thread->Stop();
- file_thread->Stop();
- db_thread->Stop();
+ private:
+ scoped_ptr<ChromeThread> file_thread_;
+ scoped_ptr<ChromeThread> io_thread_;
+ MessageLoop loop_;
+};
- EXPECT_TRUE(ChromeThread::GetMessageLoop(ChromeThread::IO) == NULL);
- EXPECT_TRUE(ChromeThread::GetMessageLoop(ChromeThread::FILE) == NULL);
- EXPECT_TRUE(ChromeThread::GetMessageLoop(ChromeThread::DB) == NULL);
+TEST_F(ChromeThreadTest, PostTask) {
+ ChromeThread::PostTask(
+ ChromeThread::IO, FROM_HERE,
+ NewRunnableFunction(&BasicFunction, MessageLoop::current()));
+ MessageLoop::current()->Run();
+}
- // Phase 4: Destroy the threads.
+TEST_F(ChromeThreadTest, Release) {
+ ChromeThread::ReleaseSoon(ChromeThread::FILE, FROM_HERE, this);
+ MessageLoop::current()->Run();
+}
- io_thread.reset();
- file_thread.reset();
- db_thread.reset();
+TEST_F(ChromeThreadTest, TaskToNonExistentThreadIsDeleted) {
+ bool deleted = false;
+ ChromeThread::PostTask(
+ ChromeThread::WEBKIT, FROM_HERE,
+ new DummyTask(&deleted));
+ EXPECT_TRUE(deleted);
+}
- EXPECT_TRUE(ChromeThread::GetMessageLoop(ChromeThread::IO) == NULL);
- EXPECT_TRUE(ChromeThread::GetMessageLoop(ChromeThread::FILE) == NULL);
- EXPECT_TRUE(ChromeThread::GetMessageLoop(ChromeThread::DB) == NULL);
- */
+TEST_F(ChromeThreadTest, ReleasedOnCorrectThread) {
+ {
+ scoped_refptr<DeletedOnIO> test(new DeletedOnIO(MessageLoop::current()));
+ }
+ MessageLoop::current()->Run();
}
+
+TEST_F(ChromeThreadTest, NotReleasedIfTargetThreadNonExistent) {
+ scoped_refptr<NeverDeleted> test(new NeverDeleted());
+}
« no previous file with comments | « chrome/browser/chrome_thread.h ('k') | chrome/browser/renderer_host/file_system_accessor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698