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

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

Issue 2352173004: Mojoify FetchEvent of Service Worker. (Closed)
Patch Set: fix public_deps Created 4 years, 2 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/fetch_event_dispatcher.mojom.h"
24 #include "content/common/service_worker/service_worker_messages.h" 25 #include "content/common/service_worker/service_worker_messages.h"
25 #include "content/public/common/push_event_payload.h" 26 #include "content/public/common/push_event_payload.h"
26 #include "content/public/test/mock_render_process_host.h" 27 #include "content/public/test/mock_render_process_host.h"
27 #include "content/public/test/test_browser_context.h" 28 #include "content/public/test/test_browser_context.h"
28 #include "mojo/public/cpp/bindings/interface_request.h" 29 #include "mojo/public/cpp/bindings/interface_request.h"
29 #include "mojo/public/cpp/bindings/strong_binding.h" 30 #include "mojo/public/cpp/bindings/strong_binding.h"
30 #include "services/shell/public/cpp/interface_provider.h" 31 #include "services/shell/public/cpp/interface_provider.h"
31 #include "services/shell/public/cpp/interface_registry.h" 32 #include "services/shell/public/cpp/interface_registry.h"
32 #include "testing/gtest/include/gtest/gtest.h" 33 #include "testing/gtest/include/gtest/gtest.h"
33 34
(...skipping 17 matching lines...) Expand all
51 ~MockMessagePortMessageFilter() override {} 52 ~MockMessagePortMessageFilter() override {}
52 base::AtomicSequenceNumber next_routing_id_; 53 base::AtomicSequenceNumber next_routing_id_;
53 ScopedVector<IPC::Message> message_queue_; 54 ScopedVector<IPC::Message> message_queue_;
54 }; 55 };
55 56
56 } // namespace 57 } // namespace
57 58
58 class EmbeddedWorkerTestHelper::MockEmbeddedWorkerSetup 59 class EmbeddedWorkerTestHelper::MockEmbeddedWorkerSetup
59 : public mojom::EmbeddedWorkerSetup { 60 : public mojom::EmbeddedWorkerSetup {
60 public: 61 public:
61 explicit MockEmbeddedWorkerSetup(
62 const base::WeakPtr<EmbeddedWorkerTestHelper>& helper)
63 : helper_(helper) {}
64
65 static void Create(const base::WeakPtr<EmbeddedWorkerTestHelper>& helper, 62 static void Create(const base::WeakPtr<EmbeddedWorkerTestHelper>& helper,
66 mojom::EmbeddedWorkerSetupRequest request) { 63 mojom::EmbeddedWorkerSetupRequest request) {
67 mojo::MakeStrongBinding(base::MakeUnique<MockEmbeddedWorkerSetup>(helper), 64 mojo::MakeStrongBinding(base::MakeUnique<MockEmbeddedWorkerSetup>(helper),
68 std::move(request)); 65 std::move(request));
69 } 66 }
70 67
68 explicit MockEmbeddedWorkerSetup(
69 const base::WeakPtr<EmbeddedWorkerTestHelper>& helper)
70 : helper_(helper) {}
71
72 ~MockEmbeddedWorkerSetup() override {}
73
71 void ExchangeInterfaceProviders( 74 void ExchangeInterfaceProviders(
72 int32_t thread_id, 75 int32_t thread_id,
73 shell::mojom::InterfaceProviderRequest request, 76 shell::mojom::InterfaceProviderRequest request,
74 shell::mojom::InterfaceProviderPtr remote_interfaces) override { 77 shell::mojom::InterfaceProviderPtr remote_interfaces) override {
75 if (!helper_) 78 if (!helper_)
76 return; 79 return;
77 helper_->OnSetupMojoStub(thread_id, std::move(request), 80 helper_->OnSetupMojoStub(thread_id, std::move(request),
78 std::move(remote_interfaces)); 81 std::move(remote_interfaces));
79 } 82 }
80 83
81 private: 84 private:
82 base::WeakPtr<EmbeddedWorkerTestHelper> helper_; 85 base::WeakPtr<EmbeddedWorkerTestHelper> helper_;
83 }; 86 };
84 87
88 class EmbeddedWorkerTestHelper::MockFetchEventDispatcher
89 : public NON_EXPORTED_BASE(mojom::FetchEventDispatcher) {
90 public:
91 static void Create(const base::WeakPtr<EmbeddedWorkerTestHelper>& helper,
92 int thread_id,
93 mojom::FetchEventDispatcherRequest request) {
94 mojo::MakeStrongBinding(
95 base::MakeUnique<MockFetchEventDispatcher>(helper, thread_id),
96 std::move(request));
97 }
98
99 MockFetchEventDispatcher(
100 const base::WeakPtr<EmbeddedWorkerTestHelper>& helper,
101 int thread_id)
102 : helper_(helper), thread_id_(thread_id) {}
103
104 ~MockFetchEventDispatcher() override {}
105
106 void DispatchFetchEvent(int response_id,
107 const ServiceWorkerFetchRequest& request,
108 const DispatchFetchEventCallback& callback) override {
109 if (!helper_)
110 return;
111 helper_->OnFetchEventStub(thread_id_, response_id, request, callback);
112 }
113
114 private:
115 base::WeakPtr<EmbeddedWorkerTestHelper> helper_;
116 const int thread_id_;
117 };
118
85 EmbeddedWorkerTestHelper::EmbeddedWorkerTestHelper( 119 EmbeddedWorkerTestHelper::EmbeddedWorkerTestHelper(
86 const base::FilePath& user_data_directory) 120 const base::FilePath& user_data_directory)
87 : browser_context_(new TestBrowserContext), 121 : browser_context_(new TestBrowserContext),
88 render_process_host_(new MockRenderProcessHost(browser_context_.get())), 122 render_process_host_(new MockRenderProcessHost(browser_context_.get())),
89 wrapper_(new ServiceWorkerContextWrapper(browser_context_.get())), 123 wrapper_(new ServiceWorkerContextWrapper(browser_context_.get())),
90 next_thread_id_(0), 124 next_thread_id_(0),
91 mock_render_process_id_(render_process_host_->GetID()), 125 mock_render_process_id_(render_process_host_->GetID()),
92 weak_factory_(this) { 126 weak_factory_(this) {
93 std::unique_ptr<MockServiceWorkerDatabaseTaskManager> database_task_manager( 127 std::unique_ptr<MockServiceWorkerDatabaseTaskManager> database_task_manager(
94 new MockServiceWorkerDatabaseTaskManager( 128 new MockServiceWorkerDatabaseTaskManager(
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 bool EmbeddedWorkerTestHelper::OnMessageToWorker(int thread_id, 222 bool EmbeddedWorkerTestHelper::OnMessageToWorker(int thread_id,
189 int embedded_worker_id, 223 int embedded_worker_id,
190 const IPC::Message& message) { 224 const IPC::Message& message) {
191 bool handled = true; 225 bool handled = true;
192 current_embedded_worker_id_ = embedded_worker_id; 226 current_embedded_worker_id_ = embedded_worker_id;
193 IPC_BEGIN_MESSAGE_MAP(EmbeddedWorkerTestHelper, message) 227 IPC_BEGIN_MESSAGE_MAP(EmbeddedWorkerTestHelper, message)
194 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ActivateEvent, OnActivateEventStub) 228 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ActivateEvent, OnActivateEventStub)
195 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ExtendableMessageEvent, 229 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ExtendableMessageEvent,
196 OnExtendableMessageEventStub) 230 OnExtendableMessageEventStub)
197 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_InstallEvent, OnInstallEventStub) 231 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_InstallEvent, OnInstallEventStub)
198 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FetchEvent, OnFetchEventStub)
199 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEventStub) 232 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEventStub)
200 IPC_MESSAGE_UNHANDLED(handled = false) 233 IPC_MESSAGE_UNHANDLED(handled = false)
201 IPC_END_MESSAGE_MAP() 234 IPC_END_MESSAGE_MAP()
202 // Record all messages directed to inner script context. 235 // Record all messages directed to inner script context.
203 inner_sink_.OnMessageReceived(message); 236 inner_sink_.OnMessageReceived(message);
204 return handled; 237 return handled;
205 } 238 }
206 239
207 void EmbeddedWorkerTestHelper::OnSetupMojo( 240 void EmbeddedWorkerTestHelper::OnSetupMojo(
208 shell::InterfaceRegistry* interface_registry) {} 241 int thread_id,
242 shell::InterfaceRegistry* interface_registry) {
243 interface_registry->AddInterface(base::Bind(&MockFetchEventDispatcher::Create,
244 weak_factory_.GetWeakPtr(),
245 thread_id));
246 }
209 247
210 void EmbeddedWorkerTestHelper::OnActivateEvent(int embedded_worker_id, 248 void EmbeddedWorkerTestHelper::OnActivateEvent(int embedded_worker_id,
211 int request_id) { 249 int request_id) {
212 SimulateSend(new ServiceWorkerHostMsg_ActivateEventFinished( 250 SimulateSend(new ServiceWorkerHostMsg_ActivateEventFinished(
213 embedded_worker_id, request_id, 251 embedded_worker_id, request_id,
214 blink::WebServiceWorkerEventResultCompleted, base::Time::Now())); 252 blink::WebServiceWorkerEventResultCompleted, base::Time::Now()));
215 } 253 }
216 254
217 void EmbeddedWorkerTestHelper::OnExtendableMessageEvent(int embedded_worker_id, 255 void EmbeddedWorkerTestHelper::OnExtendableMessageEvent(int embedded_worker_id,
218 int request_id) { 256 int request_id) {
219 SimulateSend(new ServiceWorkerHostMsg_ExtendableMessageEventFinished( 257 SimulateSend(new ServiceWorkerHostMsg_ExtendableMessageEventFinished(
220 embedded_worker_id, request_id, 258 embedded_worker_id, request_id,
221 blink::WebServiceWorkerEventResultCompleted, base::Time::Now())); 259 blink::WebServiceWorkerEventResultCompleted, base::Time::Now()));
222 } 260 }
223 261
224 void EmbeddedWorkerTestHelper::OnInstallEvent(int embedded_worker_id, 262 void EmbeddedWorkerTestHelper::OnInstallEvent(int embedded_worker_id,
225 int request_id) { 263 int request_id) {
226 // The installing worker may have been doomed and terminated. 264 // The installing worker may have been doomed and terminated.
227 if (!registry()->GetWorker(embedded_worker_id)) 265 if (!registry()->GetWorker(embedded_worker_id))
228 return; 266 return;
229 SimulateSend(new ServiceWorkerHostMsg_InstallEventFinished( 267 SimulateSend(new ServiceWorkerHostMsg_InstallEventFinished(
230 embedded_worker_id, request_id, 268 embedded_worker_id, request_id,
231 blink::WebServiceWorkerEventResultCompleted, true, base::Time::Now())); 269 blink::WebServiceWorkerEventResultCompleted, true, base::Time::Now()));
232 } 270 }
233 271
234 void EmbeddedWorkerTestHelper::OnFetchEvent( 272 void EmbeddedWorkerTestHelper::OnFetchEvent(
235 int embedded_worker_id, 273 int embedded_worker_id,
236 int response_id, 274 int response_id,
237 int event_finish_id, 275 const ServiceWorkerFetchRequest& request,
238 const ServiceWorkerFetchRequest& request) { 276 const FetchCallback& callback) {
239 SimulateSend(new ServiceWorkerHostMsg_FetchEventResponse( 277 SimulateSend(new ServiceWorkerHostMsg_FetchEventResponse(
240 embedded_worker_id, response_id, 278 embedded_worker_id, response_id,
241 SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, 279 SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE,
242 ServiceWorkerResponse( 280 ServiceWorkerResponse(
243 GURL(), 200, "OK", blink::WebServiceWorkerResponseTypeDefault, 281 GURL(), 200, "OK", blink::WebServiceWorkerResponseTypeDefault,
244 ServiceWorkerHeaderMap(), std::string(), 0, GURL(), 282 ServiceWorkerHeaderMap(), std::string(), 0, GURL(),
245 blink::WebServiceWorkerResponseErrorUnknown, base::Time(), 283 blink::WebServiceWorkerResponseErrorUnknown, base::Time(),
246 false /* is_in_cache_storage */, 284 false /* is_in_cache_storage */,
247 std::string() /* cache_storage_cache_name */, 285 std::string() /* cache_storage_cache_name */,
248 ServiceWorkerHeaderList() /* cors_exposed_header_names */), 286 ServiceWorkerHeaderList() /* cors_exposed_header_names */),
249 base::Time::Now())); 287 base::Time::Now()));
250 SimulateSend(new ServiceWorkerHostMsg_FetchEventFinished( 288 callback.Run(blink::mojom::ServiceWorkerEventStatus::COMPLETED,
251 embedded_worker_id, event_finish_id, 289 base::Time::Now());
252 blink::WebServiceWorkerEventResultCompleted, base::Time::Now()));
253 } 290 }
254 291
255 void EmbeddedWorkerTestHelper::OnPushEvent(int embedded_worker_id, 292 void EmbeddedWorkerTestHelper::OnPushEvent(int embedded_worker_id,
256 int request_id, 293 int request_id,
257 const PushEventPayload& payload) { 294 const PushEventPayload& payload) {
258 SimulateSend(new ServiceWorkerHostMsg_PushEventFinished( 295 SimulateSend(new ServiceWorkerHostMsg_PushEventFinished(
259 embedded_worker_id, request_id, 296 embedded_worker_id, request_id,
260 blink::WebServiceWorkerEventResultCompleted, base::Time::Now())); 297 blink::WebServiceWorkerEventResultCompleted, base::Time::Now()));
261 } 298 }
262 299
(...skipping 24 matching lines...) Expand all
287 void EmbeddedWorkerTestHelper::SimulateWorkerScriptLoaded( 324 void EmbeddedWorkerTestHelper::SimulateWorkerScriptLoaded(
288 int embedded_worker_id) { 325 int embedded_worker_id) {
289 EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id); 326 EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
290 ASSERT_TRUE(worker != NULL); 327 ASSERT_TRUE(worker != NULL);
291 registry()->OnWorkerScriptLoaded(worker->process_id(), embedded_worker_id); 328 registry()->OnWorkerScriptLoaded(worker->process_id(), embedded_worker_id);
292 } 329 }
293 330
294 void EmbeddedWorkerTestHelper::SimulateWorkerThreadStarted( 331 void EmbeddedWorkerTestHelper::SimulateWorkerThreadStarted(
295 int thread_id, 332 int thread_id,
296 int embedded_worker_id) { 333 int embedded_worker_id) {
334 thread_id_embedded_worker_id_map_[thread_id] = embedded_worker_id;
297 EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id); 335 EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
298 ASSERT_TRUE(worker != NULL); 336 ASSERT_TRUE(worker != NULL);
299 registry()->OnWorkerThreadStarted(worker->process_id(), thread_id, 337 registry()->OnWorkerThreadStarted(worker->process_id(), thread_id,
300 embedded_worker_id); 338 embedded_worker_id);
301 } 339 }
302 340
303 void EmbeddedWorkerTestHelper::SimulateWorkerScriptEvaluated( 341 void EmbeddedWorkerTestHelper::SimulateWorkerScriptEvaluated(
304 int embedded_worker_id, 342 int embedded_worker_id,
305 bool success) { 343 bool success) {
306 EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id); 344 EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 } 426 }
389 427
390 void EmbeddedWorkerTestHelper::OnInstallEventStub(int request_id) { 428 void EmbeddedWorkerTestHelper::OnInstallEventStub(int request_id) {
391 base::ThreadTaskRunnerHandle::Get()->PostTask( 429 base::ThreadTaskRunnerHandle::Get()->PostTask(
392 FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnInstallEvent, 430 FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnInstallEvent,
393 weak_factory_.GetWeakPtr(), 431 weak_factory_.GetWeakPtr(),
394 current_embedded_worker_id_, request_id)); 432 current_embedded_worker_id_, request_id));
395 } 433 }
396 434
397 void EmbeddedWorkerTestHelper::OnFetchEventStub( 435 void EmbeddedWorkerTestHelper::OnFetchEventStub(
436 int thread_id,
398 int response_id, 437 int response_id,
399 int event_finish_id, 438 const ServiceWorkerFetchRequest& request,
400 const ServiceWorkerFetchRequest& request) { 439 const FetchCallback& callback) {
401 base::ThreadTaskRunnerHandle::Get()->PostTask( 440 base::ThreadTaskRunnerHandle::Get()->PostTask(
402 FROM_HERE, 441 FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnFetchEvent,
403 base::Bind(&EmbeddedWorkerTestHelper::OnFetchEvent, 442 weak_factory_.GetWeakPtr(),
404 weak_factory_.GetWeakPtr(), current_embedded_worker_id_, 443 thread_id_embedded_worker_id_map_[thread_id],
405 response_id, event_finish_id, request)); 444 response_id, request, callback));
406 } 445 }
407 446
408 void EmbeddedWorkerTestHelper::OnPushEventStub( 447 void EmbeddedWorkerTestHelper::OnPushEventStub(
409 int request_id, 448 int request_id,
410 const PushEventPayload& payload) { 449 const PushEventPayload& payload) {
411 base::ThreadTaskRunnerHandle::Get()->PostTask( 450 base::ThreadTaskRunnerHandle::Get()->PostTask(
412 FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnPushEvent, 451 FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnPushEvent,
413 weak_factory_.GetWeakPtr(), 452 weak_factory_.GetWeakPtr(),
414 current_embedded_worker_id_, request_id, payload)); 453 current_embedded_worker_id_, request_id, payload));
415 } 454 }
416 455
417 void EmbeddedWorkerTestHelper::OnSetupMojoStub( 456 void EmbeddedWorkerTestHelper::OnSetupMojoStub(
418 int thread_id, 457 int thread_id,
419 shell::mojom::InterfaceProviderRequest request, 458 shell::mojom::InterfaceProviderRequest request,
420 shell::mojom::InterfaceProviderPtr remote_interfaces) { 459 shell::mojom::InterfaceProviderPtr remote_interfaces) {
421 std::unique_ptr<shell::InterfaceRegistry> local( 460 std::unique_ptr<shell::InterfaceRegistry> local(
422 new shell::InterfaceRegistry); 461 new shell::InterfaceRegistry);
423 local->Bind(std::move(request)); 462 local->Bind(std::move(request));
424 463
425 std::unique_ptr<shell::InterfaceProvider> remote( 464 std::unique_ptr<shell::InterfaceProvider> remote(
426 new shell::InterfaceProvider); 465 new shell::InterfaceProvider);
427 remote->Bind(std::move(remote_interfaces)); 466 remote->Bind(std::move(remote_interfaces));
428 467
429 OnSetupMojo(local.get()); 468 OnSetupMojo(thread_id, local.get());
430 InterfaceRegistryAndProvider pair(std::move(local), std::move(remote)); 469 InterfaceRegistryAndProvider pair(std::move(local), std::move(remote));
431 thread_id_service_registry_map_[thread_id] = std::move(pair); 470 thread_id_service_registry_map_[thread_id] = std::move(pair);
432 } 471 }
433 472
434 EmbeddedWorkerRegistry* EmbeddedWorkerTestHelper::registry() { 473 EmbeddedWorkerRegistry* EmbeddedWorkerTestHelper::registry() {
435 DCHECK(context()); 474 DCHECK(context());
436 return context()->embedded_worker_registry(); 475 return context()->embedded_worker_registry();
437 } 476 }
438 477
439 MessagePortMessageFilter* 478 MessagePortMessageFilter*
440 EmbeddedWorkerTestHelper::NewMessagePortMessageFilter() { 479 EmbeddedWorkerTestHelper::NewMessagePortMessageFilter() {
441 scoped_refptr<MessagePortMessageFilter> filter( 480 scoped_refptr<MessagePortMessageFilter> filter(
442 new MockMessagePortMessageFilter); 481 new MockMessagePortMessageFilter);
443 message_port_message_filters_.push_back(filter); 482 message_port_message_filters_.push_back(filter);
444 return filter.get(); 483 return filter.get();
445 } 484 }
446 485
447 } // namespace content 486 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698