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 54a8872a93768bf12d67eed4d0d00c5ac872ab5e..08c8774940d99aa68d21c53c87a57a277d5ee4e3 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,11 +86,11 @@ 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( |
- const StopWorkerCallback& callback) { |
+void EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::StopWorker() { |
if (!helper_) |
return; |
@@ -97,7 +101,7 @@ void EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::StopWorker( |
// is removed right after sending StopWorker. |
if (worker) |
EXPECT_EQ(EmbeddedWorkerStatus::STOPPING, worker->status()); |
- helper_->OnStopWorkerStub(callback); |
+ helper_->OnStopWorkerStub(embedded_worker_id_.value()); |
} |
void EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient:: |
@@ -277,6 +281,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) { |
@@ -375,7 +380,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(), |
@@ -383,6 +389,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); |
@@ -391,15 +400,15 @@ 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); |
} |
-void EmbeddedWorkerTestHelper::OnStopWorker( |
- const mojom::EmbeddedWorkerInstanceClient::StopWorkerCallback& callback) { |
+void EmbeddedWorkerTestHelper::OnStopWorker(int embedded_worker_id) { |
// By default just notify the sender that the worker is stopped. |
- callback.Run(); |
+ SimulateWorkerStopped(embedded_worker_id); |
} |
bool EmbeddedWorkerTestHelper::OnMessageToWorker(int thread_id, |
@@ -532,8 +541,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(); |
} |
void EmbeddedWorkerTestHelper::SimulateWorkerScriptCached( |
@@ -560,17 +571,29 @@ 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 following OnThreadStarted(). |
+ std::unique_ptr<ServiceWorkerProviderHost> 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( |
@@ -578,20 +601,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) { |
@@ -601,7 +631,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); |
@@ -611,7 +642,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( |
@@ -623,11 +654,10 @@ void EmbeddedWorkerTestHelper::OnResumeAfterDownloadStub( |
AsWeakPtr(), embedded_worker_id)); |
} |
-void EmbeddedWorkerTestHelper::OnStopWorkerStub( |
- const mojom::EmbeddedWorkerInstanceClient::StopWorkerCallback& callback) { |
+void EmbeddedWorkerTestHelper::OnStopWorkerStub(int embedded_worker_id) { |
base::ThreadTaskRunnerHandle::Get()->PostTask( |
FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnStopWorker, |
- AsWeakPtr(), callback)); |
+ AsWeakPtr(), embedded_worker_id)); |
} |
void EmbeddedWorkerTestHelper::OnMessageToWorkerStub( |