| Index: content/browser/service_worker/embedded_worker_test_helper.cc
|
| diff --git a/content/browser/service_worker/embedded_worker_test_helper.cc b/content/browser/service_worker/embedded_worker_test_helper.cc
|
| index 8103b7451172c61d84b9638a3bdd7c1092eae4ab..78037691c8bdd2c1766ae335c444fffff8fe7654 100644
|
| --- a/content/browser/service_worker/embedded_worker_test_helper.cc
|
| +++ b/content/browser/service_worker/embedded_worker_test_helper.cc
|
| @@ -13,6 +13,8 @@
|
| #include "base/atomic_sequence_num.h"
|
| #include "base/bind.h"
|
| #include "base/memory/ptr_util.h"
|
| +#include "base/message_loop/message_loop.h"
|
| +#include "base/run_loop.h"
|
| #include "base/threading/thread_task_runner_handle.h"
|
| #include "base/time/time.h"
|
| #include "content/browser/service_worker/embedded_worker_instance.h"
|
| @@ -21,6 +23,7 @@
|
| #include "content/browser/service_worker/service_worker_context_core.h"
|
| #include "content/browser/service_worker/service_worker_context_wrapper.h"
|
| #include "content/browser/service_worker/service_worker_dispatcher_host.h"
|
| +#include "content/browser/service_worker/service_worker_test_utils.h"
|
| #include "content/common/background_fetch/background_fetch_types.h"
|
| #include "content/common/service_worker/embedded_worker_messages.h"
|
| #include "content/common/service_worker/embedded_worker_start_params.h"
|
| @@ -59,6 +62,12 @@ class MockServiceWorkerDispatcherHost : public ServiceWorkerDispatcherHost {
|
| DISALLOW_COPY_AND_ASSIGN(MockServiceWorkerDispatcherHost);
|
| };
|
|
|
| +void NestedLoopRunUntilIdle() {
|
| + base::MessageLoop::ScopedNestableTaskAllower nestable_allower(
|
| + base::MessageLoop::current());
|
| + base::RunLoop().RunUntilIdle();
|
| +}
|
| +
|
| } // namespace
|
|
|
| EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::
|
| @@ -71,7 +80,8 @@ EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::
|
|
|
| void EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::StartWorker(
|
| const EmbeddedWorkerStartParams& params,
|
| - mojom::ServiceWorkerEventDispatcherRequest dispatcher_request) {
|
| + mojom::ServiceWorkerEventDispatcherRequest dispatcher_request,
|
| + mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo instance_host) {
|
| if (!helper_)
|
| return;
|
|
|
| @@ -82,7 +92,8 @@ void EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::StartWorker(
|
| ASSERT_TRUE(worker);
|
| EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status());
|
|
|
| - helper_->OnStartWorkerStub(params, std::move(dispatcher_request));
|
| + helper_->OnStartWorkerStub(params, std::move(dispatcher_request),
|
| + std::move(instance_host));
|
| }
|
|
|
| void EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::StopWorker(
|
| @@ -274,6 +285,7 @@ EmbeddedWorkerTestHelper::EmbeddedWorkerTestHelper(
|
| wrapper_(new ServiceWorkerContextWrapper(browser_context_.get())),
|
| mock_instance_clients_next_index_(0),
|
| next_thread_id_(0),
|
| + next_provider_id_(1000),
|
| mock_render_process_id_(render_process_host_->GetID()),
|
| new_mock_render_process_id_(new_render_process_host_->GetID()),
|
| weak_factory_(this) {
|
| @@ -371,7 +383,8 @@ void EmbeddedWorkerTestHelper::OnStartWorker(
|
| const GURL& scope,
|
| const GURL& script_url,
|
| bool pause_after_download,
|
| - mojom::ServiceWorkerEventDispatcherRequest request) {
|
| + mojom::ServiceWorkerEventDispatcherRequest request,
|
| + mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo instance_host) {
|
| EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
|
| ASSERT_TRUE(worker);
|
| MockServiceWorkerEventDispatcher::Create(AsWeakPtr(), worker->thread_id(),
|
| @@ -379,6 +392,9 @@ void EmbeddedWorkerTestHelper::OnStartWorker(
|
|
|
| embedded_worker_id_service_worker_version_id_map_[embedded_worker_id] =
|
| service_worker_version_id;
|
| + embedded_worker_id_instance_host_ptr_map_[embedded_worker_id].Bind(
|
| + std::move(instance_host));
|
| +
|
| SimulateWorkerReadyForInspection(embedded_worker_id);
|
| SimulateWorkerScriptCached(embedded_worker_id);
|
| SimulateWorkerScriptLoaded(embedded_worker_id);
|
| @@ -387,7 +403,8 @@ void EmbeddedWorkerTestHelper::OnStartWorker(
|
| }
|
|
|
| void EmbeddedWorkerTestHelper::OnResumeAfterDownload(int embedded_worker_id) {
|
| - SimulateWorkerThreadStarted(GetNextThreadId(), embedded_worker_id);
|
| + SimulateWorkerThreadStarted(GetNextThreadId(), embedded_worker_id,
|
| + GetNextProviderId());
|
| SimulateWorkerScriptEvaluated(embedded_worker_id, true /* success */);
|
| SimulateWorkerStarted(embedded_worker_id);
|
| }
|
| @@ -528,8 +545,10 @@ void EmbeddedWorkerTestHelper::SimulateWorkerReadyForInspection(
|
| int embedded_worker_id) {
|
| EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
|
| ASSERT_TRUE(worker);
|
| - registry()->OnWorkerReadyForInspection(worker->process_id(),
|
| - embedded_worker_id);
|
| + ASSERT_TRUE(embedded_worker_id_instance_host_ptr_map_[embedded_worker_id]);
|
| + embedded_worker_id_instance_host_ptr_map_[embedded_worker_id]
|
| + ->OnReadyForInspection();
|
| + NestedLoopRunUntilIdle();
|
| }
|
|
|
| void EmbeddedWorkerTestHelper::SimulateWorkerScriptCached(
|
| @@ -556,17 +575,28 @@ void EmbeddedWorkerTestHelper::SimulateWorkerScriptLoaded(
|
| int embedded_worker_id) {
|
| EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
|
| ASSERT_TRUE(worker);
|
| - registry()->OnWorkerScriptLoaded(worker->process_id(), embedded_worker_id);
|
| + ASSERT_TRUE(embedded_worker_id_instance_host_ptr_map_[embedded_worker_id]);
|
| + embedded_worker_id_instance_host_ptr_map_[embedded_worker_id]
|
| + ->OnScriptLoaded();
|
| + NestedLoopRunUntilIdle();
|
| }
|
|
|
| void EmbeddedWorkerTestHelper::SimulateWorkerThreadStarted(
|
| int thread_id,
|
| - int embedded_worker_id) {
|
| - thread_id_embedded_worker_id_map_[thread_id] = embedded_worker_id;
|
| + int embedded_worker_id,
|
| + int provider_id) {
|
| EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
|
| ASSERT_TRUE(worker);
|
| - registry()->OnWorkerThreadStarted(worker->process_id(), thread_id,
|
| - embedded_worker_id);
|
| + // Prepare a provider host to be used by bellowing OnThreadStarted().
|
| + auto host = CreateProviderHostForServiceWorkerContext(
|
| + worker->process_id(), provider_id, true /* is_parent_frame_secure */,
|
| + context()->AsWeakPtr());
|
| + context()->AddProviderHost(std::move(host));
|
| +
|
| + ASSERT_TRUE(embedded_worker_id_instance_host_ptr_map_[embedded_worker_id]);
|
| + embedded_worker_id_instance_host_ptr_map_[embedded_worker_id]
|
| + ->OnThreadStarted(thread_id, provider_id);
|
| + NestedLoopRunUntilIdle();
|
| }
|
|
|
| void EmbeddedWorkerTestHelper::SimulateWorkerScriptEvaluated(
|
| @@ -574,20 +604,27 @@ void EmbeddedWorkerTestHelper::SimulateWorkerScriptEvaluated(
|
| bool success) {
|
| EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
|
| ASSERT_TRUE(worker);
|
| - registry()->OnWorkerScriptEvaluated(worker->process_id(), embedded_worker_id,
|
| - success);
|
| + ASSERT_TRUE(embedded_worker_id_instance_host_ptr_map_[embedded_worker_id]);
|
| + embedded_worker_id_instance_host_ptr_map_[embedded_worker_id]
|
| + ->OnScriptEvaluated(success);
|
| + NestedLoopRunUntilIdle();
|
| }
|
|
|
| void EmbeddedWorkerTestHelper::SimulateWorkerStarted(int embedded_worker_id) {
|
| EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
|
| ASSERT_TRUE(worker);
|
| - registry()->OnWorkerStarted(worker->process_id(), embedded_worker_id);
|
| + ASSERT_TRUE(embedded_worker_id_instance_host_ptr_map_[embedded_worker_id]);
|
| + embedded_worker_id_instance_host_ptr_map_[embedded_worker_id]->OnStarted();
|
| + NestedLoopRunUntilIdle();
|
| }
|
|
|
| void EmbeddedWorkerTestHelper::SimulateWorkerStopped(int embedded_worker_id) {
|
| EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
|
| - if (worker)
|
| - registry()->OnWorkerStopped(worker->process_id(), embedded_worker_id);
|
| + if (worker) {
|
| + ASSERT_TRUE(embedded_worker_id_instance_host_ptr_map_[embedded_worker_id]);
|
| + embedded_worker_id_instance_host_ptr_map_[embedded_worker_id]->OnStopped();
|
| + NestedLoopRunUntilIdle();
|
| + }
|
| }
|
|
|
| void EmbeddedWorkerTestHelper::SimulateSend(IPC::Message* message) {
|
| @@ -597,7 +634,8 @@ void EmbeddedWorkerTestHelper::SimulateSend(IPC::Message* message) {
|
|
|
| void EmbeddedWorkerTestHelper::OnStartWorkerStub(
|
| const EmbeddedWorkerStartParams& params,
|
| - mojom::ServiceWorkerEventDispatcherRequest request) {
|
| + mojom::ServiceWorkerEventDispatcherRequest request,
|
| + mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo instance_host) {
|
| EmbeddedWorkerInstance* worker =
|
| registry()->GetWorker(params.embedded_worker_id);
|
| ASSERT_TRUE(worker);
|
| @@ -607,7 +645,7 @@ void EmbeddedWorkerTestHelper::OnStartWorkerStub(
|
| base::Bind(&EmbeddedWorkerTestHelper::OnStartWorker, AsWeakPtr(),
|
| params.embedded_worker_id, params.service_worker_version_id,
|
| params.scope, params.script_url, params.pause_after_download,
|
| - base::Passed(&request)));
|
| + base::Passed(&request), base::Passed(&instance_host)));
|
| }
|
|
|
| void EmbeddedWorkerTestHelper::OnResumeAfterDownloadStub(
|
|
|