Index: content/browser/service_worker/embedded_worker_instance_unittest.cc |
diff --git a/content/browser/service_worker/embedded_worker_instance_unittest.cc b/content/browser/service_worker/embedded_worker_instance_unittest.cc |
index f2df6b57612e8242b411fa28ae93d1757f9ebd2b..1253a28f20ad9084945af84e807752833ee04f2f 100644 |
--- a/content/browser/service_worker/embedded_worker_instance_unittest.cc |
+++ b/content/browser/service_worker/embedded_worker_instance_unittest.cc |
@@ -8,6 +8,7 @@ |
#include <utility> |
#include <vector> |
+#include "base/command_line.h" |
#include "base/macros.h" |
#include "base/run_loop.h" |
#include "base/stl_util.h" |
@@ -16,9 +17,13 @@ |
#include "content/browser/service_worker/embedded_worker_test_helper.h" |
#include "content/browser/service_worker/service_worker_context_core.h" |
#include "content/browser/service_worker/service_worker_context_wrapper.h" |
+#include "content/common/service_worker/embedded_worker.mojom.h" |
#include "content/common/service_worker/embedded_worker_messages.h" |
+#include "content/common/service_worker/embedded_worker_start_params.h" |
#include "content/public/common/child_process_host.h" |
+#include "content/public/common/content_switches.h" |
#include "content/public/test/test_browser_thread_bundle.h" |
+#include "mojo/public/cpp/bindings/strong_binding.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -33,14 +38,15 @@ |
callback.Run(); |
} |
-std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> |
+std::unique_ptr<EmbeddedWorkerStartParams> |
CreateStartParams(int version_id, const GURL& scope, const GURL& script_url) { |
- std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params( |
- new EmbeddedWorkerMsg_StartWorker_Params); |
+ std::unique_ptr<EmbeddedWorkerStartParams> params( |
+ new EmbeddedWorkerStartParams); |
params->service_worker_version_id = version_id; |
params->scope = scope; |
params->script_url = script_url; |
params->pause_after_download = false; |
+ params->is_installed = false; |
return params; |
} |
@@ -97,7 +103,7 @@ |
const GURL& url) { |
ServiceWorkerStatusCode status; |
base::RunLoop run_loop; |
- std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params = |
+ std::unique_ptr<EmbeddedWorkerStartParams> params = |
CreateStartParams(id, pattern, url); |
worker->Start(std::move(params), base::Bind(&SaveStatusAndCall, &status, |
run_loop.QuitClosure())); |
@@ -120,6 +126,24 @@ |
private: |
DISALLOW_COPY_AND_ASSIGN(EmbeddedWorkerInstanceTest); |
+}; |
+ |
+class EmbeddedWorkerInstanceTestP : public EmbeddedWorkerInstanceTest, |
+ public testing::WithParamInterface<bool> { |
+ protected: |
+ void SetUp() override { |
+ is_mojo_enabled_ = GetParam(); |
+ if (is_mojo_enabled()) { |
+ base::CommandLine::ForCurrentProcess()->AppendSwitch( |
+ switches::kMojoServiceWorker); |
+ } |
+ EmbeddedWorkerInstanceTest::SetUp(); |
+ } |
+ |
+ bool is_mojo_enabled() { return is_mojo_enabled_; } |
+ |
+ private: |
+ bool is_mojo_enabled_ = false; |
}; |
// A helper to simulate the start worker sequence is stalled in a worker |
@@ -162,10 +186,11 @@ |
} |
}; |
-TEST_F(EmbeddedWorkerInstanceTest, StartAndStop) { |
- std::unique_ptr<EmbeddedWorkerInstance> worker = |
- embedded_worker_registry()->CreateWorker(); |
- EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status()); |
+TEST_P(EmbeddedWorkerInstanceTestP, StartAndStop) { |
+ std::unique_ptr<EmbeddedWorkerInstance> worker = |
+ embedded_worker_registry()->CreateWorker(); |
+ EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status()); |
+ worker->AddListener(this); |
const int64_t service_worker_version_id = 55L; |
const GURL pattern("http://example.com/"); |
@@ -178,7 +203,7 @@ |
// Start should succeed. |
ServiceWorkerStatusCode status; |
base::RunLoop run_loop; |
- std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params = |
+ std::unique_ptr<EmbeddedWorkerStartParams> params = |
CreateStartParams(service_worker_version_id, pattern, url); |
worker->Start(std::move(params), base::Bind(&SaveStatusAndCall, &status, |
run_loop.QuitClosure())); |
@@ -200,11 +225,21 @@ |
// EmbeddedWorkerTestHelper. |
EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status()); |
- // Verify that we've sent two messages to start and terminate the worker. |
- ASSERT_TRUE( |
- ipc_sink()->GetUniqueMessageMatching(EmbeddedWorkerMsg_StartWorker::ID)); |
+ if (!is_mojo_enabled()) { |
+ // Verify that we've sent two messages to start and terminate the worker. |
+ ASSERT_TRUE(ipc_sink()->GetUniqueMessageMatching( |
+ EmbeddedWorkerMsg_StartWorker::ID)); |
+ } |
+ // StopWorker should be sent in either case. |
ASSERT_TRUE(ipc_sink()->GetUniqueMessageMatching( |
EmbeddedWorkerMsg_StopWorker::ID)); |
+ |
+ // Check if the IPCs are fired in expected order. |
+ ASSERT_EQ(4u, events_.size()); |
+ EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); |
+ EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); |
+ EXPECT_EQ(STARTED, events_[2].type); |
+ EXPECT_EQ(STOPPED, events_[3].type); |
} |
// Test that a worker that failed twice will use a new render process |
@@ -233,7 +268,7 @@ |
// Start once normally. |
ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; |
base::RunLoop run_loop; |
- std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params( |
+ std::unique_ptr<EmbeddedWorkerStartParams> params( |
CreateStartParams(service_worker_version_id, pattern, url)); |
worker->Start(std::move(params), base::Bind(&SaveStatusAndCall, &status, |
run_loop.QuitClosure())); |
@@ -257,7 +292,7 @@ |
// Start again. |
ServiceWorkerStatusCode status; |
base::RunLoop run_loop; |
- std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params( |
+ std::unique_ptr<EmbeddedWorkerStartParams> params( |
CreateStartParams(service_worker_version_id, pattern, url)); |
worker->Start(std::move(params), base::Bind(&SaveStatusAndCall, &status, |
run_loop.QuitClosure())); |
@@ -337,7 +372,7 @@ |
// Start worker1. |
ServiceWorkerStatusCode status; |
base::RunLoop run_loop; |
- std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params( |
+ std::unique_ptr<EmbeddedWorkerStartParams> params( |
CreateStartParams(version_id1, pattern, url)); |
worker1->Start(std::move(params), base::Bind(&SaveStatusAndCall, &status, |
run_loop.QuitClosure())); |
@@ -349,7 +384,7 @@ |
// Start worker2. |
ServiceWorkerStatusCode status; |
base::RunLoop run_loop; |
- std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params( |
+ std::unique_ptr<EmbeddedWorkerStartParams> params( |
CreateStartParams(version_id2, pattern, url)); |
worker2->Start(std::move(params), base::Bind(&SaveStatusAndCall, &status, |
run_loop.QuitClosure())); |
@@ -386,7 +421,7 @@ |
// Run the start worker sequence and detach during process allocation. |
ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; |
- std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params( |
+ std::unique_ptr<EmbeddedWorkerStartParams> params( |
CreateStartParams(version_id, scope, url)); |
worker->Start(std::move(params), base::Bind(&SaveStatusAndCall, &status, |
base::Bind(&base::DoNothing))); |
@@ -418,7 +453,7 @@ |
// Run the start worker sequence until a start worker message is sent. |
ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; |
- std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params( |
+ std::unique_ptr<EmbeddedWorkerStartParams> params( |
CreateStartParams(version_id, scope, url)); |
worker->Start(std::move(params), base::Bind(&SaveStatusAndCall, &status, |
base::Bind(&base::DoNothing))); |
@@ -457,7 +492,7 @@ |
// Stop the start worker sequence before a process is allocated. |
ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; |
- std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params( |
+ std::unique_ptr<EmbeddedWorkerStartParams> params( |
CreateStartParams(version_id, scope, url)); |
worker->Start(std::move(params), base::Bind(&SaveStatusAndCall, &status, |
base::Bind(&base::DoNothing))); |
@@ -507,7 +542,7 @@ |
// Run the start worker sequence until pause after download. |
ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; |
- std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params( |
+ std::unique_ptr<EmbeddedWorkerStartParams> params( |
CreateStartParams(version_id, scope, url)); |
params->pause_after_download = true; |
worker->Start(std::move(params), base::Bind(&SaveStatusAndCall, &status, |
@@ -538,7 +573,7 @@ |
// Run the start worker sequence until a start worker message is sent. |
ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; |
- std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params( |
+ std::unique_ptr<EmbeddedWorkerStartParams> params( |
CreateStartParams(version_id, scope, url)); |
worker->Start(std::move(params), base::Bind(&SaveStatusAndCall, &status, |
base::Bind(&base::DoNothing))); |
@@ -600,7 +635,7 @@ |
// Start the worker. |
base::RunLoop run_loop; |
- std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params( |
+ std::unique_ptr<EmbeddedWorkerStartParams> params( |
CreateStartParams(version_id, pattern, url)); |
worker->Start(std::move(params), base::Bind(&SaveStatusAndCall, &status, |
run_loop.QuitClosure())); |
@@ -635,7 +670,7 @@ |
// Attempt to start the worker. |
base::RunLoop run_loop; |
- std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params( |
+ std::unique_ptr<EmbeddedWorkerStartParams> params( |
CreateStartParams(version_id, pattern, url)); |
worker->Start(std::move(params), base::Bind(&SaveStatusAndCall, &status, |
run_loop.QuitClosure())); |
@@ -649,4 +684,8 @@ |
EXPECT_EQ(EmbeddedWorkerStatus::STARTING, events_[1].status); |
} |
+INSTANTIATE_TEST_CASE_P(EmbeddedWorkerInstanceTest, |
+ EmbeddedWorkerInstanceTestP, |
+ ::testing::Values(false, true)); |
+ |
} // namespace content |