Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(463)

Side by Side Diff: content/browser/service_worker/embedded_worker_test_helper.cc

Issue 2606593002: [ServiceWorker] Associate interfaces.
Patch Set: Fix unit tests Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/service_worker/embedded_worker_test_helper.h" 5 #include "content/browser/service_worker/embedded_worker_test_helper.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/atomic_sequence_num.h" 11 #include "base/atomic_sequence_num.h"
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/memory/scoped_vector.h" 13 #include "base/memory/scoped_vector.h"
14 #include "base/threading/thread_task_runner_handle.h" 14 #include "base/threading/thread_task_runner_handle.h"
15 #include "base/time/time.h" 15 #include "base/time/time.h"
16 #include "content/browser/message_port_message_filter.h" 16 #include "content/browser/message_port_message_filter.h"
17 #include "content/browser/service_worker/embedded_worker_instance.h" 17 #include "content/browser/service_worker/embedded_worker_instance.h"
18 #include "content/browser/service_worker/embedded_worker_registry.h" 18 #include "content/browser/service_worker/embedded_worker_registry.h"
19 #include "content/browser/service_worker/embedded_worker_status.h" 19 #include "content/browser/service_worker/embedded_worker_status.h"
20 #include "content/browser/service_worker/service_worker_context_core.h" 20 #include "content/browser/service_worker/service_worker_context_core.h"
21 #include "content/browser/service_worker/service_worker_context_wrapper.h" 21 #include "content/browser/service_worker/service_worker_context_wrapper.h"
22 #include "content/common/service_worker/embedded_worker_messages.h" 22 #include "content/common/service_worker/embedded_worker_messages.h"
23 #include "content/common/service_worker/embedded_worker_setup.mojom.h" 23 #include "content/common/service_worker/embedded_worker_setup.mojom.h"
24 #include "content/common/service_worker/embedded_worker_start_params.h" 24 #include "content/common/service_worker/embedded_worker_start_params.h"
25 #include "content/common/service_worker/service_worker_event_dispatcher.mojom.h" 25 #include "content/common/service_worker/service_worker_event_dispatcher.mojom.h"
26 #include "content/common/service_worker/service_worker_messages.h" 26 #include "content/common/service_worker/service_worker_messages.h"
27 #include "content/common/service_worker/service_worker_utils.h" 27 #include "content/common/service_worker/service_worker_utils.h"
28 #include "content/public/common/push_event_payload.h" 28 #include "content/public/common/push_event_payload.h"
29 #include "content/public/test/fake_associated_interface_provider_impl.h"
29 #include "content/public/test/mock_render_process_host.h" 30 #include "content/public/test/mock_render_process_host.h"
30 #include "content/public/test/test_browser_context.h" 31 #include "content/public/test/test_browser_context.h"
31 #include "mojo/public/cpp/bindings/interface_request.h" 32 #include "mojo/public/cpp/bindings/interface_request.h"
33 #include "mojo/public/cpp/bindings/strong_associated_binding.h"
32 #include "mojo/public/cpp/bindings/strong_binding.h" 34 #include "mojo/public/cpp/bindings/strong_binding.h"
33 #include "services/service_manager/public/cpp/interface_provider.h" 35 #include "services/service_manager/public/cpp/interface_provider.h"
34 #include "services/service_manager/public/cpp/interface_registry.h" 36 #include "services/service_manager/public/cpp/interface_registry.h"
35 #include "testing/gtest/include/gtest/gtest.h" 37 #include "testing/gtest/include/gtest/gtest.h"
36 38
37 namespace content { 39 namespace content {
38 40
39 namespace { 41 namespace {
40 42
41 class MockMessagePortMessageFilter : public MessagePortMessageFilter { 43 class MockMessagePortMessageFilter : public MessagePortMessageFilter {
(...skipping 17 matching lines...) Expand all
59 } // namespace 61 } // namespace
60 62
61 class EmbeddedWorkerTestHelper::MockEmbeddedWorkerSetup 63 class EmbeddedWorkerTestHelper::MockEmbeddedWorkerSetup
62 : public mojom::EmbeddedWorkerSetup { 64 : public mojom::EmbeddedWorkerSetup {
63 public: 65 public:
64 explicit MockEmbeddedWorkerSetup( 66 explicit MockEmbeddedWorkerSetup(
65 const base::WeakPtr<EmbeddedWorkerTestHelper>& helper) 67 const base::WeakPtr<EmbeddedWorkerTestHelper>& helper)
66 : helper_(helper) {} 68 : helper_(helper) {}
67 69
68 static void Create(const base::WeakPtr<EmbeddedWorkerTestHelper>& helper, 70 static void Create(const base::WeakPtr<EmbeddedWorkerTestHelper>& helper,
69 mojom::EmbeddedWorkerSetupRequest request) { 71 mojo::ScopedInterfaceEndpointHandle handle) {
70 mojo::MakeStrongBinding(base::MakeUnique<MockEmbeddedWorkerSetup>(helper), 72 mojo::MakeStrongAssociatedBinding(
71 std::move(request)); 73 base::MakeUnique<MockEmbeddedWorkerSetup>(helper),
74 mojo::MakeAssociatedRequest<mojom::EmbeddedWorkerSetup>(
75 std::move(handle)));
72 } 76 }
73 77
74 void AttachServiceWorkerEventDispatcher( 78 void AttachServiceWorkerEventDispatcher(
75 int32_t thread_id, 79 int32_t thread_id,
76 mojom::ServiceWorkerEventDispatcherRequest request) override { 80 mojom::ServiceWorkerEventDispatcherRequest request) override {
77 if (!helper_) 81 if (!helper_)
78 return; 82 return;
79 helper_->OnSetupMojo(thread_id, std::move(request)); 83 helper_->OnSetupMojo(thread_id, std::move(request));
80 } 84 }
81 85
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 // |worker| is possible to be null when corresponding EmbeddedWorkerInstance 130 // |worker| is possible to be null when corresponding EmbeddedWorkerInstance
127 // is removed right after sending StopWorker. 131 // is removed right after sending StopWorker.
128 if (worker) 132 if (worker)
129 EXPECT_EQ(EmbeddedWorkerStatus::STOPPING, worker->status()); 133 EXPECT_EQ(EmbeddedWorkerStatus::STOPPING, worker->status());
130 callback.Run(); 134 callback.Run();
131 } 135 }
132 136
133 // static 137 // static
134 void EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::Bind( 138 void EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::Bind(
135 const base::WeakPtr<EmbeddedWorkerTestHelper>& helper, 139 const base::WeakPtr<EmbeddedWorkerTestHelper>& helper,
136 mojom::EmbeddedWorkerInstanceClientRequest request) { 140 mojo::ScopedInterfaceEndpointHandle handle) {
137 std::vector<std::unique_ptr<MockEmbeddedWorkerInstanceClient>>* clients = 141 std::vector<std::unique_ptr<MockEmbeddedWorkerInstanceClient>>* clients =
138 helper->mock_instance_clients(); 142 helper->mock_instance_clients();
139 size_t next_client_index = helper->mock_instance_clients_next_index_; 143 size_t next_client_index = helper->mock_instance_clients_next_index_;
140 144
141 ASSERT_GE(clients->size(), next_client_index); 145 ASSERT_GE(clients->size(), next_client_index);
142 if (clients->size() == next_client_index) { 146 if (clients->size() == next_client_index) {
143 clients->push_back( 147 clients->push_back(
144 base::MakeUnique<MockEmbeddedWorkerInstanceClient>(helper)); 148 base::MakeUnique<MockEmbeddedWorkerInstanceClient>(helper));
145 } 149 }
146 150
147 std::unique_ptr<MockEmbeddedWorkerInstanceClient>& client = 151 std::unique_ptr<MockEmbeddedWorkerInstanceClient>& client =
148 clients->at(next_client_index); 152 clients->at(next_client_index);
149 helper->mock_instance_clients_next_index_ = next_client_index + 1; 153 helper->mock_instance_clients_next_index_ = next_client_index + 1;
150 if (client) 154 if (client)
151 client->binding_.Bind(std::move(request)); 155 client->binding_.Bind(
156 mojo::MakeAssociatedRequest<mojom::EmbeddedWorkerInstanceClient>(
157 std::move(handle)));
152 } 158 }
153 159
154 class EmbeddedWorkerTestHelper::MockServiceWorkerEventDispatcher 160 class EmbeddedWorkerTestHelper::MockServiceWorkerEventDispatcher
155 : public NON_EXPORTED_BASE(mojom::ServiceWorkerEventDispatcher) { 161 : public NON_EXPORTED_BASE(mojom::ServiceWorkerEventDispatcher) {
156 public: 162 public:
157 static void Create(const base::WeakPtr<EmbeddedWorkerTestHelper>& helper, 163 static void Create(const base::WeakPtr<EmbeddedWorkerTestHelper>& helper,
158 int thread_id, 164 int thread_id,
159 mojom::ServiceWorkerEventDispatcherRequest request) { 165 mojom::ServiceWorkerEventDispatcherRequest request) {
160 mojo::MakeStrongBinding( 166 mojo::MakeStrongBinding(
161 base::MakeUnique<MockServiceWorkerEventDispatcher>(helper, thread_id), 167 base::MakeUnique<MockServiceWorkerEventDispatcher>(helper, thread_id),
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 std::unique_ptr<MockServiceWorkerDatabaseTaskManager> database_task_manager( 227 std::unique_ptr<MockServiceWorkerDatabaseTaskManager> database_task_manager(
222 new MockServiceWorkerDatabaseTaskManager( 228 new MockServiceWorkerDatabaseTaskManager(
223 base::ThreadTaskRunnerHandle::Get())); 229 base::ThreadTaskRunnerHandle::Get()));
224 wrapper_->InitInternal(user_data_directory, std::move(database_task_manager), 230 wrapper_->InitInternal(user_data_directory, std::move(database_task_manager),
225 base::ThreadTaskRunnerHandle::Get(), nullptr, nullptr); 231 base::ThreadTaskRunnerHandle::Get(), nullptr, nullptr);
226 wrapper_->process_manager()->SetProcessIdForTest(mock_render_process_id()); 232 wrapper_->process_manager()->SetProcessIdForTest(mock_render_process_id());
227 wrapper_->process_manager()->SetNewProcessIdForTest(new_render_process_id()); 233 wrapper_->process_manager()->SetNewProcessIdForTest(new_render_process_id());
228 registry()->AddChildProcessSender(mock_render_process_id_, this, 234 registry()->AddChildProcessSender(mock_render_process_id_, this,
229 NewMessagePortMessageFilter()); 235 NewMessagePortMessageFilter());
230 236
231 // Setup process level interface registry. 237 // Override process level remote associated interfaces.
232 render_process_interface_registry_ = 238 OverrideRemoteAssociatedInterfaces(render_process_host_.get());
233 CreateInterfaceRegistry(render_process_host_.get()); 239 OverrideRemoteAssociatedInterfaces(new_render_process_host_.get());
234 new_render_process_interface_registry_ =
235 CreateInterfaceRegistry(new_render_process_host_.get());
236 } 240 }
237 241
238 EmbeddedWorkerTestHelper::~EmbeddedWorkerTestHelper() { 242 EmbeddedWorkerTestHelper::~EmbeddedWorkerTestHelper() {
239 if (wrapper_.get()) 243 if (wrapper_.get())
240 wrapper_->Shutdown(); 244 wrapper_->Shutdown();
241 } 245 }
242 246
243 void EmbeddedWorkerTestHelper::SimulateAddProcessToPattern(const GURL& pattern, 247 void EmbeddedWorkerTestHelper::SimulateAddProcessToPattern(const GURL& pattern,
244 int process_id) { 248 int process_id) {
245 registry()->AddChildProcessSender(process_id, this, 249 registry()->AddChildProcessSender(process_id, this,
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 } 566 }
563 567
564 MessagePortMessageFilter* 568 MessagePortMessageFilter*
565 EmbeddedWorkerTestHelper::NewMessagePortMessageFilter() { 569 EmbeddedWorkerTestHelper::NewMessagePortMessageFilter() {
566 scoped_refptr<MessagePortMessageFilter> filter( 570 scoped_refptr<MessagePortMessageFilter> filter(
567 new MockMessagePortMessageFilter); 571 new MockMessagePortMessageFilter);
568 message_port_message_filters_.push_back(filter); 572 message_port_message_filters_.push_back(filter);
569 return filter.get(); 573 return filter.get();
570 } 574 }
571 575
572 std::unique_ptr<service_manager::InterfaceRegistry> 576 void EmbeddedWorkerTestHelper::OverrideRemoteAssociatedInterfaces(
573 EmbeddedWorkerTestHelper::CreateInterfaceRegistry(MockRenderProcessHost* rph) { 577 MockRenderProcessHost* rph) {
574 auto registry = 578 AssociatedInterfaceProvider* provider =
575 base::MakeUnique<service_manager::InterfaceRegistry>(std::string()); 579 rph->GetAssociatedInterfaceProviderForTesting();
576 registry->AddInterface( 580
581 provider->OverrideBinderForTesting(
582 mojom::EmbeddedWorkerInstanceClient::Name_,
583 base::Bind(&MockEmbeddedWorkerInstanceClient::Bind, AsWeakPtr()));
584 provider->OverrideBinderForTesting(
585 mojom::EmbeddedWorkerSetup::Name_,
577 base::Bind(&MockEmbeddedWorkerSetup::Create, AsWeakPtr())); 586 base::Bind(&MockEmbeddedWorkerSetup::Create, AsWeakPtr()));
578 registry->AddInterface(
579 base::Bind(&MockEmbeddedWorkerInstanceClient::Bind, AsWeakPtr()));
580
581 service_manager::mojom::InterfaceProviderPtr interfaces;
582 registry->Bind(mojo::MakeRequest(&interfaces), service_manager::Identity(),
583 service_manager::InterfaceProviderSpec(),
584 service_manager::Identity(),
585 service_manager::InterfaceProviderSpec());
586
587 std::unique_ptr<service_manager::InterfaceProvider> remote_interfaces(
588 new service_manager::InterfaceProvider);
589 remote_interfaces->Bind(std::move(interfaces));
590 rph->SetRemoteInterfaces(std::move(remote_interfaces));
591 return registry;
592 } 587 }
593 588
594 } // namespace content 589 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/service_worker/embedded_worker_test_helper.h ('k') | content/public/browser/render_process_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698