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

Unified Diff: content/browser/service_worker/service_worker_version_unittest.cc

Issue 1223193009: WIP attempt to replace StartWorker/StopWorker IPCs with a new mojo EmbeddedWorker service. Base URL: https://chromium.googlesource.com/chromium/src.git@mojo-event-dispatching-option2
Patch Set: Created 5 years, 5 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 | « content/browser/service_worker/service_worker_url_request_job_unittest.cc ('k') | content/common/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/service_worker/service_worker_version_unittest.cc
diff --git a/content/browser/service_worker/service_worker_version_unittest.cc b/content/browser/service_worker/service_worker_version_unittest.cc
index e52f698de13e452329dfe5a3c21e25ad34c57ec4..d124999bb5efbc725599cbf242dfd69affa054ad 100644
--- a/content/browser/service_worker/service_worker_version_unittest.cc
+++ b/content/browser/service_worker/service_worker_version_unittest.cc
@@ -13,6 +13,7 @@
#include "content/browser/service_worker/service_worker_utils.h"
#include "content/browser/service_worker/service_worker_version.h"
#include "content/public/test/test_browser_thread_bundle.h"
+#include "content/public/test/test_utils.h"
#include "testing/gtest/include/gtest/gtest.h"
// IPC messages for testing ---------------------------------------------------
@@ -31,12 +32,10 @@ namespace content {
namespace {
-static const int kRenderProcessId = 1;
-
class MessageReceiver : public EmbeddedWorkerTestHelper {
public:
MessageReceiver()
- : EmbeddedWorkerTestHelper(base::FilePath(), kRenderProcessId),
+ : EmbeddedWorkerTestHelper(base::FilePath()),
current_embedded_worker_id_(0) {}
~MessageReceiver() override {}
@@ -178,7 +177,8 @@ class ServiceWorkerVersionTest : public testing::Test {
ASSERT_EQ(SERVICE_WORKER_OK, status);
// Simulate adding one process to the pattern.
- helper_->SimulateAddProcessToPattern(pattern_, kRenderProcessId);
+ helper_->SimulateAddProcessToPattern(pattern_,
+ helper_->mock_render_process_id());
ASSERT_TRUE(helper_->context()->process_manager()
->PatternHasProcessToRun(pattern_));
}
@@ -265,16 +265,23 @@ TEST_F(ServiceWorkerVersionTest, ConcurrentStartAndStop) {
ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED;
ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED;
ServiceWorkerStatusCode status3 = SERVICE_WORKER_ERROR_FAILED;
- version_->StartWorker(CreateReceiverOnCurrentThread(&status1));
- version_->StartWorker(CreateReceiverOnCurrentThread(&status2));
+ scoped_refptr<MessageLoopRunner> runner1(new MessageLoopRunner);
+ scoped_refptr<MessageLoopRunner> runner2(new MessageLoopRunner);
+ version_->StartWorker(
+ CreateReceiverOnCurrentThread(&status1, runner1->QuitClosure()));
+ version_->StartWorker(
+ CreateReceiverOnCurrentThread(&status2, runner2->QuitClosure()));
EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->running_status());
- base::RunLoop().RunUntilIdle();
+ runner1->Run();
+ runner2->Run();
EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
// Call StartWorker() after it's started.
- version_->StartWorker(CreateReceiverOnCurrentThread(&status3));
- base::RunLoop().RunUntilIdle();
+ runner1 = new MessageLoopRunner();
+ version_->StartWorker(
+ CreateReceiverOnCurrentThread(&status3, runner1->QuitClosure()));
+ runner1->Run();
// All should just succeed.
EXPECT_EQ(SERVICE_WORKER_OK, status1);
@@ -284,11 +291,16 @@ TEST_F(ServiceWorkerVersionTest, ConcurrentStartAndStop) {
// Call StopWorker() multiple times.
status1 = SERVICE_WORKER_ERROR_FAILED;
status2 = SERVICE_WORKER_ERROR_FAILED;
- version_->StopWorker(CreateReceiverOnCurrentThread(&status1));
- version_->StopWorker(CreateReceiverOnCurrentThread(&status2));
+ runner1 = new MessageLoopRunner;
+ runner2 = new MessageLoopRunner;
+ version_->StopWorker(
+ CreateReceiverOnCurrentThread(&status1, runner1->QuitClosure()));
+ version_->StopWorker(
+ CreateReceiverOnCurrentThread(&status2, runner2->QuitClosure()));
EXPECT_EQ(ServiceWorkerVersion::STOPPING, version_->running_status());
- base::RunLoop().RunUntilIdle();
+ runner1->Run();
+ runner2->Run();
EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status());
// All StopWorker should just succeed.
@@ -299,11 +311,14 @@ TEST_F(ServiceWorkerVersionTest, ConcurrentStartAndStop) {
status1 = SERVICE_WORKER_ERROR_FAILED;
status2 = SERVICE_WORKER_ERROR_FAILED;
status3 = SERVICE_WORKER_ERROR_FAILED;
+ runner1 = new MessageLoopRunner();
+ scoped_refptr<MessageLoopRunner> runner3(new MessageLoopRunner());
- version_->StartWorker(CreateReceiverOnCurrentThread(&status1));
+ version_->StartWorker(
+ CreateReceiverOnCurrentThread(&status1, runner1->QuitClosure()));
EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->running_status());
- base::RunLoop().RunUntilIdle();
+ runner1->Run();
EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
// Call StopWorker()
@@ -311,10 +326,11 @@ TEST_F(ServiceWorkerVersionTest, ConcurrentStartAndStop) {
version_->StopWorker(CreateReceiverOnCurrentThread(&status2));
// And try calling StartWorker while StopWorker is in queue.
- version_->StartWorker(CreateReceiverOnCurrentThread(&status3));
+ version_->StartWorker(
+ CreateReceiverOnCurrentThread(&status3, runner3->QuitClosure()));
EXPECT_EQ(ServiceWorkerVersion::STOPPING, version_->running_status());
- base::RunLoop().RunUntilIdle();
+ runner3->Run();
EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
// All should just succeed.
@@ -328,9 +344,11 @@ TEST_F(ServiceWorkerVersionTest, DispatchEventToStoppedWorker) {
// Dispatch an event without starting the worker.
ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
+ scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
version_->SetStatus(ServiceWorkerVersion::INSTALLING);
- version_->DispatchInstallEvent(CreateReceiverOnCurrentThread(&status));
- base::RunLoop().RunUntilIdle();
+ version_->DispatchInstallEvent(
+ CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
+ runner->Run();
EXPECT_EQ(SERVICE_WORKER_OK, status);
// The worker should be now started.
@@ -338,10 +356,12 @@ TEST_F(ServiceWorkerVersionTest, DispatchEventToStoppedWorker) {
// Stop the worker, and then dispatch an event immediately after that.
status = SERVICE_WORKER_ERROR_FAILED;
+ runner = new MessageLoopRunner;
ServiceWorkerStatusCode stop_status = SERVICE_WORKER_ERROR_FAILED;
version_->StopWorker(CreateReceiverOnCurrentThread(&stop_status));
- version_->DispatchInstallEvent(CreateReceiverOnCurrentThread(&status));
- base::RunLoop().RunUntilIdle();
+ version_->DispatchInstallEvent(
+ CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
+ runner->Run();
EXPECT_EQ(SERVICE_WORKER_OK, stop_status);
// Dispatch an event should return SERVICE_WORKER_OK since the worker
@@ -355,9 +375,11 @@ TEST_F(ServiceWorkerVersionTest, DispatchEventToStoppedWorker) {
TEST_F(ServiceWorkerVersionTest, ReceiveMessageFromWorker) {
// Start worker.
ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
- version_->StartWorker(CreateReceiverOnCurrentThread(&status));
+ scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
+ version_->StartWorker(
+ CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->running_status());
- base::RunLoop().RunUntilIdle();
+ runner->Run();
EXPECT_EQ(SERVICE_WORKER_OK, status);
EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
@@ -380,14 +402,16 @@ TEST_F(ServiceWorkerVersionTest, InstallAndWaitCompletion) {
// Dispatch an install event.
ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
- version_->DispatchInstallEvent(CreateReceiverOnCurrentThread(&status));
+ scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
+ version_->DispatchInstallEvent(
+ CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
// Wait for the completion.
bool status_change_called = false;
version_->RegisterStatusChangeCallback(
base::Bind(&VerifyCalled, &status_change_called));
- base::RunLoop().RunUntilIdle();
+ runner->Run();
// Version's status must not have changed during installation.
EXPECT_EQ(SERVICE_WORKER_OK, status);
@@ -400,14 +424,16 @@ TEST_F(ServiceWorkerVersionTest, ActivateAndWaitCompletion) {
// Dispatch an activate event.
ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
- version_->DispatchActivateEvent(CreateReceiverOnCurrentThread(&status));
+ scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
+ version_->DispatchActivateEvent(
+ CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
// Wait for the completion.
bool status_change_called = false;
version_->RegisterStatusChangeCallback(
base::Bind(&VerifyCalled, &status_change_called));
- base::RunLoop().RunUntilIdle();
+ runner->Run();
// Version's status must not have changed during activation.
EXPECT_EQ(SERVICE_WORKER_OK, status);
@@ -449,8 +475,10 @@ TEST_F(ServiceWorkerVersionTest, IdleTimeout) {
// Verify the timer is running after the worker is started.
ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
- version_->StartWorker(CreateReceiverOnCurrentThread(&status));
- base::RunLoop().RunUntilIdle();
+ scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
+ version_->StartWorker(
+ CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
+ runner->Run();
EXPECT_EQ(SERVICE_WORKER_OK, status);
EXPECT_TRUE(version_->timeout_timer_.IsRunning());
EXPECT_FALSE(version_->idle_time_.is_null());
@@ -458,14 +486,18 @@ TEST_F(ServiceWorkerVersionTest, IdleTimeout) {
// The idle time should be reset if the worker is restarted without
// controllee.
status = SERVICE_WORKER_ERROR_FAILED;
+ runner = new MessageLoopRunner;
version_->idle_time_ -= kOneSecond;
base::TimeTicks idle_time = version_->idle_time_;
- version_->StopWorker(CreateReceiverOnCurrentThread(&status));
- base::RunLoop().RunUntilIdle();
+ version_->StopWorker(
+ CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
+ runner->Run();
EXPECT_EQ(SERVICE_WORKER_OK, status);
status = SERVICE_WORKER_ERROR_FAILED;
- version_->StartWorker(CreateReceiverOnCurrentThread(&status));
- base::RunLoop().RunUntilIdle();
+ runner = new MessageLoopRunner;
+ version_->StartWorker(
+ CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
+ runner->Run();
EXPECT_EQ(SERVICE_WORKER_OK, status);
EXPECT_TRUE(version_->timeout_timer_.IsRunning());
EXPECT_LT(idle_time, version_->idle_time_);
@@ -510,7 +542,9 @@ TEST_F(ServiceWorkerVersionTest, IdleTimeout) {
TEST_F(ServiceWorkerVersionTest, SetDevToolsAttached) {
ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
- version_->StartWorker(CreateReceiverOnCurrentThread(&status));
+ scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
+ version_->StartWorker(
+ CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
ASSERT_EQ(ServiceWorkerVersion::STARTING, version_->running_status());
@@ -532,7 +566,7 @@ TEST_F(ServiceWorkerVersionTest, SetDevToolsAttached) {
EXPECT_FALSE(version_->start_time_.is_null());
EXPECT_TRUE(version_->skip_recording_startup_time_);
- base::RunLoop().RunUntilIdle();
+ runner->Run();
EXPECT_EQ(SERVICE_WORKER_OK, status);
EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
}
@@ -541,9 +575,11 @@ TEST_F(ServiceWorkerVersionTest, StoppingBeforeDestruct) {
RunningStateListener listener;
version_->AddListener(&listener);
+ scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
- version_->StartWorker(CreateReceiverOnCurrentThread(&status));
- base::RunLoop().RunUntilIdle();
+ version_->StartWorker(
+ CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
+ runner->Run();
EXPECT_EQ(SERVICE_WORKER_OK, status);
EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
EXPECT_EQ(ServiceWorkerVersion::RUNNING, listener.last_status);
@@ -556,12 +592,14 @@ TEST_F(ServiceWorkerVersionTest, StoppingBeforeDestruct) {
TEST_F(ServiceWorkerVersionTest, StaleUpdate_FreshWorker) {
ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
+ scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
registration_->SetActiveVersion(version_);
registration_->set_last_update_check(base::Time::Now());
- version_->DispatchPushEvent(CreateReceiverOnCurrentThread(&status),
- std::string());
- base::RunLoop().RunUntilIdle();
+ version_->DispatchPushEvent(
+ CreateReceiverOnCurrentThread(&status, runner->QuitClosure()),
+ std::string());
+ runner->Run();
EXPECT_EQ(SERVICE_WORKER_OK, status);
EXPECT_TRUE(version_->stale_time_.is_null());
@@ -572,11 +610,13 @@ TEST_F(ServiceWorkerVersionTest, StaleUpdate_FreshWorker) {
TEST_F(ServiceWorkerVersionTest, StaleUpdate_NonActiveWorker) {
ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
+ scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
version_->SetStatus(ServiceWorkerVersion::INSTALLING);
registration_->SetInstallingVersion(version_);
registration_->set_last_update_check(GetYesterday());
- version_->DispatchInstallEvent(CreateReceiverOnCurrentThread(&status));
- base::RunLoop().RunUntilIdle();
+ version_->DispatchInstallEvent(
+ CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
+ runner->Run();
EXPECT_EQ(SERVICE_WORKER_OK, status);
EXPECT_TRUE(version_->stale_time_.is_null());
@@ -588,19 +628,23 @@ TEST_F(ServiceWorkerVersionTest, StaleUpdate_StartWorker) {
ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
// Starting the worker marks it as stale.
+ scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
registration_->SetActiveVersion(version_);
registration_->set_last_update_check(GetYesterday());
- version_->DispatchPushEvent(CreateReceiverOnCurrentThread(&status),
- std::string());
- base::RunLoop().RunUntilIdle();
+ version_->DispatchPushEvent(
+ CreateReceiverOnCurrentThread(&status, runner->QuitClosure()),
+ std::string());
+ runner->Run();
EXPECT_EQ(SERVICE_WORKER_OK, status);
EXPECT_FALSE(version_->stale_time_.is_null());
EXPECT_FALSE(version_->update_timer_.IsRunning());
// Update is actually scheduled after the worker stops.
- version_->StopWorker(CreateReceiverOnCurrentThread(&status));
- base::RunLoop().RunUntilIdle();
+ runner = new MessageLoopRunner;
+ version_->StopWorker(
+ CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
+ runner->Run();
EXPECT_EQ(SERVICE_WORKER_OK, status);
EXPECT_TRUE(version_->stale_time_.is_null());
EXPECT_TRUE(version_->update_timer_.IsRunning());
@@ -611,12 +655,14 @@ TEST_F(ServiceWorkerVersionTest, StaleUpdate_RunningWorker) {
ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
// Start a fresh worker.
+ scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
registration_->SetActiveVersion(version_);
registration_->set_last_update_check(base::Time::Now());
- version_->DispatchPushEvent(CreateReceiverOnCurrentThread(&status),
- std::string());
- base::RunLoop().RunUntilIdle();
+ version_->DispatchPushEvent(
+ CreateReceiverOnCurrentThread(&status, runner->QuitClosure()),
+ std::string());
+ runner->Run();
EXPECT_EQ(SERVICE_WORKER_OK, status);
EXPECT_TRUE(version_->stale_time_.is_null());
« no previous file with comments | « content/browser/service_worker/service_worker_url_request_job_unittest.cc ('k') | content/common/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698