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

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

Issue 2490623005: Remove InterfaceRegistry/Provider from service workers (Closed)
Patch Set: rebase/fix comment Created 4 years 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/fetch_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/public/common/push_event_payload.h" 28 #include "content/public/common/push_event_payload.h"
28 #include "content/public/test/mock_render_process_host.h" 29 #include "content/public/test/mock_render_process_host.h"
29 #include "content/public/test/test_browser_context.h" 30 #include "content/public/test/test_browser_context.h"
30 #include "mojo/public/cpp/bindings/interface_request.h" 31 #include "mojo/public/cpp/bindings/interface_request.h"
31 #include "mojo/public/cpp/bindings/strong_binding.h" 32 #include "mojo/public/cpp/bindings/strong_binding.h"
32 #include "services/service_manager/public/cpp/interface_provider.h" 33 #include "services/service_manager/public/cpp/interface_provider.h"
33 #include "services/service_manager/public/cpp/interface_registry.h" 34 #include "services/service_manager/public/cpp/interface_registry.h"
34 #include "testing/gtest/include/gtest/gtest.h" 35 #include "testing/gtest/include/gtest/gtest.h"
35 36
36 namespace content { 37 namespace content {
(...skipping 26 matching lines...) Expand all
63 explicit MockEmbeddedWorkerSetup( 64 explicit MockEmbeddedWorkerSetup(
64 const base::WeakPtr<EmbeddedWorkerTestHelper>& helper) 65 const base::WeakPtr<EmbeddedWorkerTestHelper>& helper)
65 : helper_(helper) {} 66 : helper_(helper) {}
66 67
67 static void Create(const base::WeakPtr<EmbeddedWorkerTestHelper>& helper, 68 static void Create(const base::WeakPtr<EmbeddedWorkerTestHelper>& helper,
68 mojom::EmbeddedWorkerSetupRequest request) { 69 mojom::EmbeddedWorkerSetupRequest request) {
69 mojo::MakeStrongBinding(base::MakeUnique<MockEmbeddedWorkerSetup>(helper), 70 mojo::MakeStrongBinding(base::MakeUnique<MockEmbeddedWorkerSetup>(helper),
70 std::move(request)); 71 std::move(request));
71 } 72 }
72 73
73 void ExchangeInterfaceProviders( 74 void AttachServiceWorkerEventDispatcher(
74 int32_t thread_id, 75 int32_t thread_id,
75 service_manager::mojom::InterfaceProviderRequest request, 76 mojom::ServiceWorkerEventDispatcherRequest request) override {
76 service_manager::mojom::InterfaceProviderPtr remote_interfaces) override {
77 if (!helper_) 77 if (!helper_)
78 return; 78 return;
79 helper_->OnSetupMojoStub(thread_id, std::move(request), 79 helper_->OnSetupMojo(thread_id, std::move(request));
80 std::move(remote_interfaces));
81 } 80 }
82 81
83 private: 82 private:
84 base::WeakPtr<EmbeddedWorkerTestHelper> helper_; 83 base::WeakPtr<EmbeddedWorkerTestHelper> helper_;
85 }; 84 };
86 85
87 EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient:: 86 EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::
88 MockEmbeddedWorkerInstanceClient( 87 MockEmbeddedWorkerInstanceClient(
89 base::WeakPtr<EmbeddedWorkerTestHelper> helper) 88 base::WeakPtr<EmbeddedWorkerTestHelper> helper)
90 : helper_(helper), binding_(this) {} 89 : helper_(helper), binding_(this) {}
91 90
92 EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient:: 91 EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::
93 ~MockEmbeddedWorkerInstanceClient() {} 92 ~MockEmbeddedWorkerInstanceClient() {}
94 93
95 void EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::StartWorker( 94 void EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::StartWorker(
96 const EmbeddedWorkerStartParams& params, 95 const EmbeddedWorkerStartParams& params,
97 service_manager::mojom::InterfaceProviderPtr browser_interfaces, 96 mojom::ServiceWorkerEventDispatcherRequest dispatcher_request) {
98 service_manager::mojom::InterfaceProviderRequest renderer_request) {
99 if (!helper_) 97 if (!helper_)
100 return; 98 return;
101 99
102 embedded_worker_id_ = params.embedded_worker_id; 100 embedded_worker_id_ = params.embedded_worker_id;
103 101
104 EmbeddedWorkerInstance* worker = 102 EmbeddedWorkerInstance* worker =
105 helper_->registry()->GetWorker(params.embedded_worker_id); 103 helper_->registry()->GetWorker(params.embedded_worker_id);
106 ASSERT_TRUE(worker != NULL); 104 ASSERT_TRUE(worker != NULL);
107 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status()); 105 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status());
108 106
109 base::ThreadTaskRunnerHandle::Get()->PostTask( 107 base::ThreadTaskRunnerHandle::Get()->PostTask(
110 FROM_HERE, 108 FROM_HERE,
111 base::Bind(&EmbeddedWorkerTestHelper::OnStartWorker, helper_->AsWeakPtr(), 109 base::Bind(&EmbeddedWorkerTestHelper::OnStartWorker, helper_->AsWeakPtr(),
112 params.embedded_worker_id, params.service_worker_version_id, 110 params.embedded_worker_id, params.service_worker_version_id,
113 params.scope, params.script_url, params.pause_after_download)); 111 params.scope, params.script_url, params.pause_after_download));
114 base::ThreadTaskRunnerHandle::Get()->PostTask( 112 base::ThreadTaskRunnerHandle::Get()->PostTask(
115 FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnSetupMojoStub, 113 FROM_HERE,
116 helper_->AsWeakPtr(), worker->thread_id(), 114 base::Bind(&EmbeddedWorkerTestHelper::OnSetupMojo, helper_->AsWeakPtr(),
117 base::Passed(&renderer_request), 115 worker->thread_id(), base::Passed(&dispatcher_request)));
118 base::Passed(&browser_interfaces)));
119 } 116 }
120 117
121 void EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::StopWorker( 118 void EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::StopWorker(
122 const StopWorkerCallback& callback) { 119 const StopWorkerCallback& callback) {
123 if (!helper_) 120 if (!helper_)
124 return; 121 return;
125 122
126 ASSERT_TRUE(embedded_worker_id_); 123 ASSERT_TRUE(embedded_worker_id_);
127 EmbeddedWorkerInstance* worker = 124 EmbeddedWorkerInstance* worker =
128 helper_->registry()->GetWorker(embedded_worker_id_.value()); 125 helper_->registry()->GetWorker(embedded_worker_id_.value());
(...skipping 18 matching lines...) Expand all
147 base::MakeUnique<MockEmbeddedWorkerInstanceClient>(helper)); 144 base::MakeUnique<MockEmbeddedWorkerInstanceClient>(helper));
148 } 145 }
149 146
150 std::unique_ptr<MockEmbeddedWorkerInstanceClient>& client = 147 std::unique_ptr<MockEmbeddedWorkerInstanceClient>& client =
151 clients->at(next_client_index); 148 clients->at(next_client_index);
152 helper->mock_instance_clients_next_index_ = next_client_index + 1; 149 helper->mock_instance_clients_next_index_ = next_client_index + 1;
153 if (client) 150 if (client)
154 client->binding_.Bind(std::move(request)); 151 client->binding_.Bind(std::move(request));
155 } 152 }
156 153
157 class EmbeddedWorkerTestHelper::MockFetchEventDispatcher 154 class EmbeddedWorkerTestHelper::MockServiceWorkerEventDispatcher
158 : public NON_EXPORTED_BASE(mojom::FetchEventDispatcher) { 155 : public NON_EXPORTED_BASE(mojom::ServiceWorkerEventDispatcher) {
159 public: 156 public:
160 static void Create(const base::WeakPtr<EmbeddedWorkerTestHelper>& helper, 157 static void Create(const base::WeakPtr<EmbeddedWorkerTestHelper>& helper,
161 int thread_id, 158 int thread_id,
162 mojom::FetchEventDispatcherRequest request) { 159 mojom::ServiceWorkerEventDispatcherRequest request) {
163 mojo::MakeStrongBinding( 160 mojo::MakeStrongBinding(
164 base::MakeUnique<MockFetchEventDispatcher>(helper, thread_id), 161 base::MakeUnique<MockServiceWorkerEventDispatcher>(helper, thread_id),
165 std::move(request)); 162 std::move(request));
166 } 163 }
167 164
168 MockFetchEventDispatcher( 165 MockServiceWorkerEventDispatcher(
169 const base::WeakPtr<EmbeddedWorkerTestHelper>& helper, 166 const base::WeakPtr<EmbeddedWorkerTestHelper>& helper,
170 int thread_id) 167 int thread_id)
171 : helper_(helper), thread_id_(thread_id) {} 168 : helper_(helper), thread_id_(thread_id) {}
172 169
173 ~MockFetchEventDispatcher() override {} 170 ~MockServiceWorkerEventDispatcher() override {}
174 171
175 void DispatchFetchEvent(int fetch_event_id, 172 void DispatchFetchEvent(int fetch_event_id,
176 const ServiceWorkerFetchRequest& request, 173 const ServiceWorkerFetchRequest& request,
177 mojom::FetchEventPreloadHandlePtr preload_handle, 174 mojom::FetchEventPreloadHandlePtr preload_handle,
178 const DispatchFetchEventCallback& callback) override { 175 const DispatchFetchEventCallback& callback) override {
179 if (!helper_) 176 if (!helper_)
180 return; 177 return;
181 helper_->OnFetchEventStub(thread_id_, fetch_event_id, request, 178 helper_->OnFetchEventStub(thread_id_, fetch_event_id, request,
182 std::move(preload_handle), callback); 179 std::move(preload_handle), callback);
183 } 180 }
184 181
182 void DispatchSyncEvent(
183 const std::string& tag,
184 blink::mojom::BackgroundSyncEventLastChance last_chance,
185 const DispatchSyncEventCallback& callback) override {
186 NOTIMPLEMENTED();
187 }
188
185 private: 189 private:
186 base::WeakPtr<EmbeddedWorkerTestHelper> helper_; 190 base::WeakPtr<EmbeddedWorkerTestHelper> helper_;
187 const int thread_id_; 191 const int thread_id_;
188 }; 192 };
189 193
190 EmbeddedWorkerTestHelper::EmbeddedWorkerTestHelper( 194 EmbeddedWorkerTestHelper::EmbeddedWorkerTestHelper(
191 const base::FilePath& user_data_directory) 195 const base::FilePath& user_data_directory)
192 : browser_context_(new TestBrowserContext), 196 : browser_context_(new TestBrowserContext),
193 render_process_host_(new MockRenderProcessHost(browser_context_.get())), 197 render_process_host_(new MockRenderProcessHost(browser_context_.get())),
194 new_render_process_host_( 198 new_render_process_host_(
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEventStub) 310 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEventStub)
307 IPC_MESSAGE_UNHANDLED(handled = false) 311 IPC_MESSAGE_UNHANDLED(handled = false)
308 IPC_END_MESSAGE_MAP() 312 IPC_END_MESSAGE_MAP()
309 // Record all messages directed to inner script context. 313 // Record all messages directed to inner script context.
310 inner_sink_.OnMessageReceived(message); 314 inner_sink_.OnMessageReceived(message);
311 return handled; 315 return handled;
312 } 316 }
313 317
314 void EmbeddedWorkerTestHelper::OnSetupMojo( 318 void EmbeddedWorkerTestHelper::OnSetupMojo(
315 int thread_id, 319 int thread_id,
316 service_manager::InterfaceRegistry* interface_registry) { 320 mojom::ServiceWorkerEventDispatcherRequest dispatcher_request) {
317 interface_registry->AddInterface(base::Bind(&MockFetchEventDispatcher::Create, 321 MockServiceWorkerEventDispatcher::Create(AsWeakPtr(), thread_id,
318 weak_factory_.GetWeakPtr(), 322 std::move(dispatcher_request));
319 thread_id));
320 } 323 }
321 324
322 void EmbeddedWorkerTestHelper::OnActivateEvent(int embedded_worker_id, 325 void EmbeddedWorkerTestHelper::OnActivateEvent(int embedded_worker_id,
323 int request_id) { 326 int request_id) {
324 SimulateSend(new ServiceWorkerHostMsg_ActivateEventFinished( 327 SimulateSend(new ServiceWorkerHostMsg_ActivateEventFinished(
325 embedded_worker_id, request_id, 328 embedded_worker_id, request_id,
326 blink::WebServiceWorkerEventResultCompleted, base::Time::Now())); 329 blink::WebServiceWorkerEventResultCompleted, base::Time::Now()));
327 } 330 }
328 331
329 void EmbeddedWorkerTestHelper::OnExtendableMessageEvent(int embedded_worker_id, 332 void EmbeddedWorkerTestHelper::OnExtendableMessageEvent(int embedded_worker_id,
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 } 522 }
520 523
521 void EmbeddedWorkerTestHelper::OnPushEventStub( 524 void EmbeddedWorkerTestHelper::OnPushEventStub(
522 int request_id, 525 int request_id,
523 const PushEventPayload& payload) { 526 const PushEventPayload& payload) {
524 base::ThreadTaskRunnerHandle::Get()->PostTask( 527 base::ThreadTaskRunnerHandle::Get()->PostTask(
525 FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnPushEvent, AsWeakPtr(), 528 FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnPushEvent, AsWeakPtr(),
526 current_embedded_worker_id_, request_id, payload)); 529 current_embedded_worker_id_, request_id, payload));
527 } 530 }
528 531
529 void EmbeddedWorkerTestHelper::OnSetupMojoStub(
530 int thread_id,
531 service_manager::mojom::InterfaceProviderRequest request,
532 service_manager::mojom::InterfaceProviderPtr remote_interfaces) {
533 auto local =
534 base::MakeUnique<service_manager::InterfaceRegistry>(std::string());
535 local->Bind(std::move(request), service_manager::Identity(),
536 service_manager::InterfaceProviderSpec(),
537 service_manager::Identity(),
538 service_manager::InterfaceProviderSpec());
539
540 std::unique_ptr<service_manager::InterfaceProvider> remote(
541 new service_manager::InterfaceProvider);
542 remote->Bind(std::move(remote_interfaces));
543
544 OnSetupMojo(thread_id, local.get());
545 InterfaceRegistryAndProvider pair(std::move(local), std::move(remote));
546 thread_id_service_registry_map_[thread_id] = std::move(pair);
547 }
548
549 EmbeddedWorkerRegistry* EmbeddedWorkerTestHelper::registry() { 532 EmbeddedWorkerRegistry* EmbeddedWorkerTestHelper::registry() {
550 DCHECK(context()); 533 DCHECK(context());
551 return context()->embedded_worker_registry(); 534 return context()->embedded_worker_registry();
552 } 535 }
553 536
554 MessagePortMessageFilter* 537 MessagePortMessageFilter*
555 EmbeddedWorkerTestHelper::NewMessagePortMessageFilter() { 538 EmbeddedWorkerTestHelper::NewMessagePortMessageFilter() {
556 scoped_refptr<MessagePortMessageFilter> filter( 539 scoped_refptr<MessagePortMessageFilter> filter(
557 new MockMessagePortMessageFilter); 540 new MockMessagePortMessageFilter);
558 message_port_message_filters_.push_back(filter); 541 message_port_message_filters_.push_back(filter);
(...skipping 16 matching lines...) Expand all
575 service_manager::InterfaceProviderSpec()); 558 service_manager::InterfaceProviderSpec());
576 559
577 std::unique_ptr<service_manager::InterfaceProvider> remote_interfaces( 560 std::unique_ptr<service_manager::InterfaceProvider> remote_interfaces(
578 new service_manager::InterfaceProvider); 561 new service_manager::InterfaceProvider);
579 remote_interfaces->Bind(std::move(interfaces)); 562 remote_interfaces->Bind(std::move(interfaces));
580 rph->SetRemoteInterfaces(std::move(remote_interfaces)); 563 rph->SetRemoteInterfaces(std::move(remote_interfaces));
581 return registry; 564 return registry;
582 } 565 }
583 566
584 } // namespace content 567 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698