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 e8cbe2df76b7c6e1dc0c545501092361eb8c516c..3f57292339134cf458818b82d30770576d69569f 100644 |
--- a/content/browser/service_worker/embedded_worker_test_helper.cc |
+++ b/content/browser/service_worker/embedded_worker_test_helper.cc |
@@ -18,9 +18,11 @@ |
#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_messages.h" |
+#include "content/common/service_worker/embedded_worker_setup.mojom.h" |
#include "content/common/service_worker/service_worker_messages.h" |
#include "content/public/test/mock_render_process_host.h" |
#include "content/public/test/test_browser_context.h" |
+#include "mojo/public/cpp/bindings/strong_binding.h" |
#include "testing/gtest/include/gtest/gtest.h" |
namespace content { |
@@ -47,6 +49,33 @@ class MockMessagePortMessageFilter : public MessagePortMessageFilter { |
} // namespace |
+class EmbeddedWorkerTestHelper::MockEmbeddedWorkerSetup |
+ : public EmbeddedWorkerSetup { |
+ public: |
+ static void Create(const base::WeakPtr<EmbeddedWorkerTestHelper>& helper, |
+ mojo::InterfaceRequest<EmbeddedWorkerSetup> request) { |
+ new MockEmbeddedWorkerSetup(helper, std::move(request)); |
+ } |
+ |
+ void ExchangeServiceProviders( |
+ int32_t thread_id, |
+ mojo::InterfaceRequest<mojo::ServiceProvider> services, |
+ mojo::ServiceProviderPtr exposed_services) override { |
+ if (!helper_) |
+ return; |
+ helper_->OnSetupMojoStub(thread_id, std::move(services), |
+ std::move(exposed_services)); |
+ } |
+ |
+ private: |
+ MockEmbeddedWorkerSetup(const base::WeakPtr<EmbeddedWorkerTestHelper>& helper, |
+ mojo::InterfaceRequest<EmbeddedWorkerSetup> request) |
+ : helper_(helper), binding_(this, std::move(request)) {} |
+ |
+ base::WeakPtr<EmbeddedWorkerTestHelper> helper_; |
+ mojo::StrongBinding<EmbeddedWorkerSetup> binding_; |
+}; |
+ |
EmbeddedWorkerTestHelper::EmbeddedWorkerTestHelper( |
const base::FilePath& user_data_directory) |
: browser_context_(new TestBrowserContext), |
@@ -63,6 +92,16 @@ EmbeddedWorkerTestHelper::EmbeddedWorkerTestHelper( |
wrapper_->process_manager()->SetProcessIdForTest(mock_render_process_id_); |
registry()->AddChildProcessSender(mock_render_process_id_, this, |
NewMessagePortMessageFilter()); |
+ |
+ // Setup process level mojo service registry pair. |
+ scoped_ptr<ServiceRegistryImpl> host_service_registry( |
+ new ServiceRegistryImpl); |
+ render_process_service_registry_.ServiceRegistry::AddService( |
+ base::Bind(&MockEmbeddedWorkerSetup::Create, weak_factory_.GetWeakPtr())); |
+ mojo::ServiceProviderPtr services; |
+ render_process_service_registry_.Bind(mojo::GetProxy(&services)); |
+ host_service_registry->BindRemoteServiceProvider(std::move(services)); |
+ render_process_host_->SetServiceRegistry(std::move(host_service_registry)); |
} |
EmbeddedWorkerTestHelper::~EmbeddedWorkerTestHelper() { |
@@ -148,6 +187,8 @@ bool EmbeddedWorkerTestHelper::OnMessageToWorker( |
return handled; |
} |
+void EmbeddedWorkerTestHelper::OnSetupMojo(ServiceRegistry* service_registry) {} |
+ |
void EmbeddedWorkerTestHelper::OnActivateEvent(int embedded_worker_id, |
int request_id) { |
SimulateSend( |
@@ -337,6 +378,17 @@ void EmbeddedWorkerTestHelper::OnPushEventStub(int request_id, |
current_embedded_worker_id_, request_id, data)); |
} |
+void EmbeddedWorkerTestHelper::OnSetupMojoStub( |
+ int thread_id, |
+ mojo::InterfaceRequest<mojo::ServiceProvider> services, |
+ mojo::ServiceProviderPtr exposed_services) { |
+ scoped_ptr<ServiceRegistryImpl> new_registry(new ServiceRegistryImpl); |
+ new_registry->Bind(std::move(services)); |
+ new_registry->BindRemoteServiceProvider(std::move(exposed_services)); |
+ OnSetupMojo(new_registry.get()); |
+ thread_id_service_registry_map_.add(thread_id, std::move(new_registry)); |
+} |
+ |
EmbeddedWorkerRegistry* EmbeddedWorkerTestHelper::registry() { |
DCHECK(context()); |
return context()->embedded_worker_registry(); |