Chromium Code Reviews| 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..5767d34d25615d775182407703ecc349fcfc4500 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" |
| @@ -71,7 +74,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 +86,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 +279,7 @@ EmbeddedWorkerTestHelper::EmbeddedWorkerTestHelper( |
| wrapper_(new ServiceWorkerContextWrapper(browser_context_.get())), |
| mock_instance_clients_next_index_(0), |
| next_thread_id_(0), |
| + next_provider_id_(1000), |
|
shimazu
2017/04/06 05:01:36
Do you have any reason to use 1000 as the default?
leonhsl(Using Gerrit)
2017/04/06 09:58:55
It's possible that other test files create/add pro
|
| mock_render_process_id_(render_process_host_->GetID()), |
| new_mock_render_process_id_(new_render_process_host_->GetID()), |
| weak_factory_(this) { |
| @@ -371,7 +377,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 +386,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 +397,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 +539,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(); |
| + base::RunLoop().RunUntilIdle(); |
|
leonhsl(Using Gerrit)
2017/04/06 02:49:52
Seems in such cases it's not necessary to let EWIn
shimazu
2017/04/06 05:01:36
It makes sense.
|
| } |
| void EmbeddedWorkerTestHelper::SimulateWorkerScriptCached( |
| @@ -556,17 +569,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(); |
| + base::RunLoop().RunUntilIdle(); |
| } |
| 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(). |
|
shimazu
2017/04/06 05:01:36
following?
leonhsl(Using Gerrit)
2017/04/06 09:58:55
Done.
|
| + 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); |
| + base::RunLoop().RunUntilIdle(); |
| } |
| void EmbeddedWorkerTestHelper::SimulateWorkerScriptEvaluated( |
| @@ -574,20 +598,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); |
| + base::RunLoop().RunUntilIdle(); |
| } |
| 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(); |
| + base::RunLoop().RunUntilIdle(); |
| } |
| 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(); |
| + base::RunLoop().RunUntilIdle(); |
| + } |
| } |
| void EmbeddedWorkerTestHelper::SimulateSend(IPC::Message* message) { |
| @@ -597,7 +628,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 +639,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( |