Index: content/browser/appcache/appcache_storage_impl_unittest.cc |
diff --git a/content/browser/appcache/appcache_storage_impl_unittest.cc b/content/browser/appcache/appcache_storage_impl_unittest.cc |
index 3ccba135cd3fbc9b4c0d2d8b15bf3d34f5a6f746..4752d8f9e8957ad8439345745fa9f876664cb7ed 100644 |
--- a/content/browser/appcache/appcache_storage_impl_unittest.cc |
+++ b/content/browser/appcache/appcache_storage_impl_unittest.cc |
@@ -21,8 +21,9 @@ |
#include "base/message_loop/message_loop.h" |
#include "base/single_thread_task_runner.h" |
#include "base/synchronization/waitable_event.h" |
+#include "base/test/scoped_task_environment.h" |
+#include "base/threading/sequenced_task_runner_handle.h" |
#include "base/threading/thread.h" |
-#include "base/threading/thread_task_runner_handle.h" |
#include "content/browser/appcache/appcache.h" |
#include "content/browser/appcache/appcache_backend_impl.h" |
#include "content/browser/appcache/appcache_database.h" |
@@ -187,8 +188,9 @@ class IOThread : public base::Thread { |
std::unique_ptr<net::URLRequestContext> request_context_; |
}; |
+std::unique_ptr<base::test::ScopedTaskEnvironment> scoped_task_environment; |
std::unique_ptr<IOThread> io_thread; |
-std::unique_ptr<base::Thread> db_thread; |
+std::unique_ptr<base::Thread> background_thread; |
} // namespace |
@@ -278,7 +280,7 @@ class AppCacheStorageImplTest : public testing::Test { |
: QuotaManager(true /* is_incognito */, |
base::FilePath(), |
io_thread->task_runner().get(), |
- db_thread->task_runner().get(), |
+ background_thread->task_runner().get(), |
nullptr, |
storage::GetQuotaSettingsFunc()), |
async_(false) {} |
@@ -288,7 +290,7 @@ class AppCacheStorageImplTest : public testing::Test { |
const UsageAndQuotaCallback& callback) override { |
EXPECT_EQ(storage::kStorageTypeTemporary, type); |
if (async_) { |
- base::ThreadTaskRunnerHandle::Get()->PostTask( |
+ base::SequencedTaskRunnerHandle::Get()->PostTask( |
FROM_HERE, base::Bind(&MockQuotaManager::CallCallback, |
base::Unretained(this), callback)); |
return; |
@@ -372,29 +374,32 @@ class AppCacheStorageImplTest : public testing::Test { |
SetUpTest(); |
// Ensure InitTask execution prior to conducting a test. |
- FlushDbThreadTasks(); |
+ FlushAllTasks(); |
// We also have to wait for InitTask completion call to be performed |
// on the IO thread prior to running the test. Its guaranteed to be |
// queued by this time. |
- base::ThreadTaskRunnerHandle::Get()->PostTask( |
+ base::SequencedTaskRunnerHandle::Get()->PostTask( |
FROM_HERE, base::Bind(&AppCacheStorageImplTest::RunMethod<Method>, |
base::Unretained(this), method)); |
} |
static void SetUpTestCase() { |
+ scoped_task_environment.reset(new base::test::ScopedTaskEnvironment()); |
+ |
// We start both threads as TYPE_IO because we also use the db_thead |
// for the disk_cache which needs to be of TYPE_IO. |
base::Thread::Options options(base::MessageLoop::TYPE_IO, 0); |
io_thread.reset(new IOThread("AppCacheTest.IOThread")); |
ASSERT_TRUE(io_thread->StartWithOptions(options)); |
- db_thread.reset(new base::Thread("AppCacheTest::DBThread")); |
- ASSERT_TRUE(db_thread->StartWithOptions(options)); |
+ background_thread.reset(new base::Thread("AppCacheTest::BackgroundThread")); |
+ ASSERT_TRUE(background_thread->StartWithOptions(options)); |
} |
static void TearDownTestCase() { |
- io_thread.reset(NULL); |
- db_thread.reset(NULL); |
+ io_thread.reset(); |
+ background_thread.reset(); |
+ scoped_task_environment.reset(); |
} |
// Test harness -------------------------------------------------- |
@@ -414,8 +419,8 @@ class AppCacheStorageImplTest : public testing::Test { |
void SetUpTest() { |
DCHECK(io_thread->task_runner()->BelongsToCurrentThread()); |
- service_.reset(new AppCacheServiceImpl(NULL)); |
- service_->Initialize(base::FilePath(), db_thread->task_runner(), NULL); |
+ service_.reset(new AppCacheServiceImpl(nullptr)); |
+ service_->Initialize(base::FilePath(), background_thread->task_runner()); |
mock_quota_manager_proxy_ = new MockQuotaManagerProxy(); |
service_->quota_manager_proxy_ = mock_quota_manager_proxy_; |
delegate_.reset(new MockStorageDelegate(this)); |
@@ -423,6 +428,8 @@ class AppCacheStorageImplTest : public testing::Test { |
void TearDownTest() { |
DCHECK(io_thread->task_runner()->BelongsToCurrentThread()); |
+ scoped_refptr<base::SequencedTaskRunner> db_runner = |
+ storage()->db_task_runner_; |
storage()->CancelDelegateCallbacks(delegate()); |
group_ = NULL; |
cache_ = NULL; |
@@ -430,14 +437,16 @@ class AppCacheStorageImplTest : public testing::Test { |
mock_quota_manager_proxy_ = NULL; |
delegate_.reset(); |
service_.reset(); |
- FlushDbThreadTasks(); |
+ FlushTasks(db_runner.get()); |
+ FlushTasks(background_thread->task_runner().get()); |
+ FlushTasks(db_runner.get()); |
} |
void TestFinished() { |
// We unwind the stack prior to finishing up to let stack |
// based objects get deleted. |
DCHECK(io_thread->task_runner()->BelongsToCurrentThread()); |
- base::ThreadTaskRunnerHandle::Get()->PostTask( |
+ base::SequencedTaskRunnerHandle::Get()->PostTask( |
FROM_HERE, base::Bind(&AppCacheStorageImplTest::TestFinishedUnwound, |
base::Unretained(this))); |
} |
@@ -456,7 +465,8 @@ class AppCacheStorageImplTest : public testing::Test { |
if (task_stack_.empty()) { |
return; |
} |
- base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, task_stack_.top()); |
+ base::SequencedTaskRunnerHandle::Get()->PostTask(FROM_HERE, |
+ task_stack_.top()); |
task_stack_.pop(); |
} |
@@ -464,13 +474,19 @@ class AppCacheStorageImplTest : public testing::Test { |
event->Signal(); |
} |
- void FlushDbThreadTasks() { |
+ void FlushAllTasks() { |
+ FlushTasks(storage()->db_task_runner_.get()); |
+ FlushTasks(background_thread->task_runner().get()); |
+ FlushTasks(storage()->db_task_runner_.get()); |
+ } |
+ |
+ void FlushTasks(base::SequencedTaskRunner* runner) { |
// We pump a task thru the db thread to ensure any tasks previously |
// scheduled on that thread have been performed prior to return. |
base::WaitableEvent event(base::WaitableEvent::ResetPolicy::AUTOMATIC, |
base::WaitableEvent::InitialState::NOT_SIGNALED); |
- db_thread->task_runner()->PostTask( |
- FROM_HERE, base::Bind(&AppCacheStorageImplTest::SignalEvent, &event)); |
+ runner->PostTask(FROM_HERE, |
+ base::Bind(&AppCacheStorageImplTest::SignalEvent, &event)); |
event.Wait(); |
} |
@@ -899,7 +915,7 @@ class AppCacheStorageImplTest : public testing::Test { |
// And the entry in storage should also be updated, but that |
// happens asynchronously on the db thread. |
- FlushDbThreadTasks(); |
+ FlushAllTasks(); |
AppCacheDatabase::EntryRecord entry_record2; |
EXPECT_TRUE(database()->FindEntry(1, kEntryUrl, &entry_record2)); |
EXPECT_EQ(AppCacheEntry::EXPLICIT | AppCacheEntry::FOREIGN, |
@@ -944,7 +960,7 @@ class AppCacheStorageImplTest : public testing::Test { |
EXPECT_TRUE(delegate()->loaded_cache_->GetEntry(kEntryUrl)->IsExplicit()); |
// And the entry in storage should also be updated. |
- FlushDbThreadTasks(); |
+ FlushAllTasks(); |
AppCacheDatabase::EntryRecord entry_record; |
EXPECT_TRUE(database()->FindEntry(1, kEntryUrl, &entry_record)); |
EXPECT_EQ(AppCacheEntry::EXPLICIT | AppCacheEntry::FOREIGN, |
@@ -1724,8 +1740,8 @@ class AppCacheStorageImplTest : public testing::Test { |
// Recreate the service to point at the db and corruption on disk. |
service_.reset(new AppCacheServiceImpl(NULL)); |
service_->set_request_context(io_thread->request_context()); |
- service_->Initialize(temp_directory_.GetPath(), db_thread->task_runner(), |
- db_thread->task_runner()); |
+ service_->Initialize(temp_directory_.GetPath(), |
+ background_thread->task_runner()); |
mock_quota_manager_proxy_ = new MockQuotaManagerProxy(); |
service_->quota_manager_proxy_ = mock_quota_manager_proxy_; |
delegate_.reset(new MockStorageDelegate(this)); |
@@ -1736,8 +1752,8 @@ class AppCacheStorageImplTest : public testing::Test { |
// We continue after the init task is complete including the callback |
// on the current thread. |
- FlushDbThreadTasks(); |
- base::ThreadTaskRunnerHandle::Get()->PostTask( |
+ FlushAllTasks(); |
+ base::SequencedTaskRunnerHandle::Get()->PostTask( |
FROM_HERE, base::Bind(&AppCacheStorageImplTest::Continue_Reinitialize, |
base::Unretained(this), test_case)); |
} |
@@ -1814,7 +1830,6 @@ class AppCacheStorageImplTest : public testing::Test { |
} else { |
ASSERT_EQ(CORRUPT_CACHE_ON_LOAD_EXISTING, test_case); |
AppCacheHost* host2 = backend_->GetHost(2); |
- EXPECT_EQ(1, host2->main_resource_cache_->cache_id()); |
EXPECT_TRUE(host2->disabled_storage_reference_.get()); |
} |