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

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

Issue 2307543002: ServiceWorker: Mojofication of EWInstance::StopWorker (Closed)
Patch Set: Added a check of the status when detached 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/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/fetch_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_status_code.h"
28 #include "content/public/common/push_event_payload.h" 27 #include "content/public/common/push_event_payload.h"
29 #include "content/public/test/mock_render_process_host.h" 28 #include "content/public/test/mock_render_process_host.h"
30 #include "content/public/test/test_browser_context.h" 29 #include "content/public/test/test_browser_context.h"
31 #include "mojo/public/cpp/bindings/interface_request.h" 30 #include "mojo/public/cpp/bindings/interface_request.h"
32 #include "mojo/public/cpp/bindings/strong_binding.h" 31 #include "mojo/public/cpp/bindings/strong_binding.h"
33 #include "services/shell/public/cpp/interface_provider.h" 32 #include "services/shell/public/cpp/interface_provider.h"
34 #include "services/shell/public/cpp/interface_registry.h" 33 #include "services/shell/public/cpp/interface_registry.h"
35 #include "testing/gtest/include/gtest/gtest.h" 34 #include "testing/gtest/include/gtest/gtest.h"
36 35
37 namespace content { 36 namespace content {
(...skipping 16 matching lines...) Expand all
54 ~MockMessagePortMessageFilter() override {} 53 ~MockMessagePortMessageFilter() override {}
55 base::AtomicSequenceNumber next_routing_id_; 54 base::AtomicSequenceNumber next_routing_id_;
56 ScopedVector<IPC::Message> message_queue_; 55 ScopedVector<IPC::Message> message_queue_;
57 }; 56 };
58 57
59 } // namespace 58 } // namespace
60 59
61 class EmbeddedWorkerTestHelper::MockEmbeddedWorkerSetup 60 class EmbeddedWorkerTestHelper::MockEmbeddedWorkerSetup
62 : public mojom::EmbeddedWorkerSetup { 61 : public mojom::EmbeddedWorkerSetup {
63 public: 62 public:
63 explicit MockEmbeddedWorkerSetup(
64 const base::WeakPtr<EmbeddedWorkerTestHelper>& helper)
65 : helper_(helper) {}
66
64 static void Create(const base::WeakPtr<EmbeddedWorkerTestHelper>& helper, 67 static void Create(const base::WeakPtr<EmbeddedWorkerTestHelper>& helper,
65 mojom::EmbeddedWorkerSetupRequest request) { 68 mojom::EmbeddedWorkerSetupRequest request) {
66 mojo::MakeStrongBinding(base::MakeUnique<MockEmbeddedWorkerSetup>(helper), 69 mojo::MakeStrongBinding(base::MakeUnique<MockEmbeddedWorkerSetup>(helper),
67 std::move(request)); 70 std::move(request));
68 } 71 }
69 72
70 explicit MockEmbeddedWorkerSetup(
71 const base::WeakPtr<EmbeddedWorkerTestHelper>& helper)
72 : helper_(helper) {}
73
74 ~MockEmbeddedWorkerSetup() override {}
75
76 void ExchangeInterfaceProviders( 73 void ExchangeInterfaceProviders(
77 int32_t thread_id, 74 int32_t thread_id,
78 shell::mojom::InterfaceProviderRequest request, 75 shell::mojom::InterfaceProviderRequest request,
79 shell::mojom::InterfaceProviderPtr remote_interfaces) override { 76 shell::mojom::InterfaceProviderPtr remote_interfaces) override {
80 if (!helper_) 77 if (!helper_)
81 return; 78 return;
82 helper_->OnSetupMojoStub(thread_id, std::move(request), 79 helper_->OnSetupMojoStub(thread_id, std::move(request),
83 std::move(remote_interfaces)); 80 std::move(remote_interfaces));
84 } 81 }
85 82
(...skipping 16 matching lines...) Expand all
102 99
103 embedded_worker_id_ = params.embedded_worker_id; 100 embedded_worker_id_ = params.embedded_worker_id;
104 101
105 EmbeddedWorkerInstance* worker = 102 EmbeddedWorkerInstance* worker =
106 helper_->registry()->GetWorker(params.embedded_worker_id); 103 helper_->registry()->GetWorker(params.embedded_worker_id);
107 ASSERT_TRUE(worker != NULL); 104 ASSERT_TRUE(worker != NULL);
108 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status()); 105 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status());
109 106
110 base::ThreadTaskRunnerHandle::Get()->PostTask( 107 base::ThreadTaskRunnerHandle::Get()->PostTask(
111 FROM_HERE, 108 FROM_HERE,
112 base::Bind(&EmbeddedWorkerTestHelper::OnStartWorker, 109 base::Bind(&EmbeddedWorkerTestHelper::OnStartWorker, helper_->AsWeakPtr(),
113 helper_->weak_factory_.GetWeakPtr(), params.embedded_worker_id, 110 params.embedded_worker_id, params.service_worker_version_id,
114 params.service_worker_version_id, params.scope, 111 params.scope, params.script_url, params.pause_after_download));
115 params.script_url, params.pause_after_download)); 112 }
113
114 void EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::StopWorker(
115 const StopWorkerCallback& callback) {
116 if (!helper_)
117 return;
118
119 ASSERT_TRUE(embedded_worker_id_);
120 EmbeddedWorkerInstance* worker =
121 helper_->registry()->GetWorker(embedded_worker_id_.value());
122 ASSERT_TRUE(worker != NULL);
123 EXPECT_EQ(EmbeddedWorkerStatus::STOPPING, worker->status());
124
125 callback.Run();
116 } 126 }
117 127
118 // static 128 // static
119 void EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::Bind( 129 void EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::Bind(
120 const base::WeakPtr<EmbeddedWorkerTestHelper>& helper, 130 const base::WeakPtr<EmbeddedWorkerTestHelper>& helper,
121 mojom::EmbeddedWorkerInstanceClientRequest request) { 131 mojom::EmbeddedWorkerInstanceClientRequest request) {
122 std::vector<std::unique_ptr<MockEmbeddedWorkerInstanceClient>>* clients = 132 std::vector<std::unique_ptr<MockEmbeddedWorkerInstanceClient>>* clients =
123 helper->mock_instance_clients(); 133 helper->mock_instance_clients();
124 size_t next_client_index = helper->mock_instance_clients_next_index_; 134 size_t next_client_index = helper->mock_instance_clients_next_index_;
125 135
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 IPC_MESSAGE_UNHANDLED(handled = false) 237 IPC_MESSAGE_UNHANDLED(handled = false)
228 IPC_END_MESSAGE_MAP() 238 IPC_END_MESSAGE_MAP()
229 239
230 // IPC::TestSink only records messages that are not handled by filters, 240 // IPC::TestSink only records messages that are not handled by filters,
231 // so we just forward all messages to the separate sink. 241 // so we just forward all messages to the separate sink.
232 sink_.OnMessageReceived(message); 242 sink_.OnMessageReceived(message);
233 243
234 return handled; 244 return handled;
235 } 245 }
236 246
247 void EmbeddedWorkerTestHelper::RegisterMockInstanceClient(
248 std::unique_ptr<MockEmbeddedWorkerInstanceClient> client) {
249 mock_instance_clients_.push_back(std::move(client));
250 }
251
237 ServiceWorkerContextCore* EmbeddedWorkerTestHelper::context() { 252 ServiceWorkerContextCore* EmbeddedWorkerTestHelper::context() {
238 return wrapper_->context(); 253 return wrapper_->context();
239 } 254 }
240 255
241 void EmbeddedWorkerTestHelper::ShutdownContext() { 256 void EmbeddedWorkerTestHelper::ShutdownContext() {
242 wrapper_->Shutdown(); 257 wrapper_->Shutdown();
243 wrapper_ = NULL; 258 wrapper_ = NULL;
244 } 259 }
245 260
246 void EmbeddedWorkerTestHelper::OnStartWorker(int embedded_worker_id, 261 void EmbeddedWorkerTestHelper::OnStartWorker(int embedded_worker_id,
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 } 428 }
414 429
415 void EmbeddedWorkerTestHelper::OnStartWorkerStub( 430 void EmbeddedWorkerTestHelper::OnStartWorkerStub(
416 const EmbeddedWorkerStartParams& params) { 431 const EmbeddedWorkerStartParams& params) {
417 EmbeddedWorkerInstance* worker = 432 EmbeddedWorkerInstance* worker =
418 registry()->GetWorker(params.embedded_worker_id); 433 registry()->GetWorker(params.embedded_worker_id);
419 ASSERT_TRUE(worker != NULL); 434 ASSERT_TRUE(worker != NULL);
420 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status()); 435 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status());
421 base::ThreadTaskRunnerHandle::Get()->PostTask( 436 base::ThreadTaskRunnerHandle::Get()->PostTask(
422 FROM_HERE, 437 FROM_HERE,
423 base::Bind(&EmbeddedWorkerTestHelper::OnStartWorker, 438 base::Bind(&EmbeddedWorkerTestHelper::OnStartWorker, AsWeakPtr(),
424 weak_factory_.GetWeakPtr(), params.embedded_worker_id, 439 params.embedded_worker_id, params.service_worker_version_id,
425 params.service_worker_version_id, params.scope, 440 params.scope, params.script_url, params.pause_after_download));
426 params.script_url, params.pause_after_download));
427 } 441 }
428 442
429 void EmbeddedWorkerTestHelper::OnResumeAfterDownloadStub( 443 void EmbeddedWorkerTestHelper::OnResumeAfterDownloadStub(
430 int embedded_worker_id) { 444 int embedded_worker_id) {
431 EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id); 445 EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
432 ASSERT_TRUE(worker); 446 ASSERT_TRUE(worker);
433 base::ThreadTaskRunnerHandle::Get()->PostTask( 447 base::ThreadTaskRunnerHandle::Get()->PostTask(
434 FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnResumeAfterDownload, 448 FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnResumeAfterDownload,
435 weak_factory_.GetWeakPtr(), embedded_worker_id)); 449 AsWeakPtr(), embedded_worker_id));
436 } 450 }
437 451
438 void EmbeddedWorkerTestHelper::OnStopWorkerStub(int embedded_worker_id) { 452 void EmbeddedWorkerTestHelper::OnStopWorkerStub(int embedded_worker_id) {
439 EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id); 453 EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
440 ASSERT_TRUE(worker != NULL); 454 ASSERT_TRUE(worker != NULL);
441 base::ThreadTaskRunnerHandle::Get()->PostTask( 455 base::ThreadTaskRunnerHandle::Get()->PostTask(
442 FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnStopWorker, 456 FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnStopWorker,
443 weak_factory_.GetWeakPtr(), embedded_worker_id)); 457 AsWeakPtr(), embedded_worker_id));
444 } 458 }
445 459
446 void EmbeddedWorkerTestHelper::OnMessageToWorkerStub( 460 void EmbeddedWorkerTestHelper::OnMessageToWorkerStub(
447 int thread_id, 461 int thread_id,
448 int embedded_worker_id, 462 int embedded_worker_id,
449 const IPC::Message& message) { 463 const IPC::Message& message) {
450 EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id); 464 EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
451 ASSERT_TRUE(worker != NULL); 465 ASSERT_TRUE(worker != NULL);
452 EXPECT_EQ(worker->thread_id(), thread_id); 466 EXPECT_EQ(worker->thread_id(), thread_id);
453 base::ThreadTaskRunnerHandle::Get()->PostTask( 467 base::ThreadTaskRunnerHandle::Get()->PostTask(
454 FROM_HERE, 468 FROM_HERE,
455 base::Bind( 469 base::Bind(
456 base::IgnoreResult(&EmbeddedWorkerTestHelper::OnMessageToWorker), 470 base::IgnoreResult(&EmbeddedWorkerTestHelper::OnMessageToWorker),
457 weak_factory_.GetWeakPtr(), thread_id, embedded_worker_id, message)); 471 AsWeakPtr(), thread_id, embedded_worker_id, message));
458 } 472 }
459 473
460 void EmbeddedWorkerTestHelper::OnActivateEventStub(int request_id) { 474 void EmbeddedWorkerTestHelper::OnActivateEventStub(int request_id) {
461 base::ThreadTaskRunnerHandle::Get()->PostTask( 475 base::ThreadTaskRunnerHandle::Get()->PostTask(
462 FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnActivateEvent, 476 FROM_HERE,
463 weak_factory_.GetWeakPtr(), 477 base::Bind(&EmbeddedWorkerTestHelper::OnActivateEvent, AsWeakPtr(),
464 current_embedded_worker_id_, request_id)); 478 current_embedded_worker_id_, request_id));
465 } 479 }
466 480
467 void EmbeddedWorkerTestHelper::OnExtendableMessageEventStub( 481 void EmbeddedWorkerTestHelper::OnExtendableMessageEventStub(
468 int request_id, 482 int request_id,
469 const ServiceWorkerMsg_ExtendableMessageEvent_Params& params) { 483 const ServiceWorkerMsg_ExtendableMessageEvent_Params& params) {
470 base::ThreadTaskRunnerHandle::Get()->PostTask( 484 base::ThreadTaskRunnerHandle::Get()->PostTask(
471 FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnExtendableMessageEvent, 485 FROM_HERE,
472 weak_factory_.GetWeakPtr(), 486 base::Bind(&EmbeddedWorkerTestHelper::OnExtendableMessageEvent,
473 current_embedded_worker_id_, request_id)); 487 AsWeakPtr(), current_embedded_worker_id_, request_id));
474 } 488 }
475 489
476 void EmbeddedWorkerTestHelper::OnInstallEventStub(int request_id) { 490 void EmbeddedWorkerTestHelper::OnInstallEventStub(int request_id) {
477 base::ThreadTaskRunnerHandle::Get()->PostTask( 491 base::ThreadTaskRunnerHandle::Get()->PostTask(
478 FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnInstallEvent, 492 FROM_HERE,
479 weak_factory_.GetWeakPtr(), 493 base::Bind(&EmbeddedWorkerTestHelper::OnInstallEvent, AsWeakPtr(),
480 current_embedded_worker_id_, request_id)); 494 current_embedded_worker_id_, request_id));
481 } 495 }
482 496
483 void EmbeddedWorkerTestHelper::OnFetchEventStub( 497 void EmbeddedWorkerTestHelper::OnFetchEventStub(
484 int thread_id, 498 int thread_id,
485 int response_id, 499 int response_id,
486 const ServiceWorkerFetchRequest& request, 500 const ServiceWorkerFetchRequest& request,
487 const FetchCallback& callback) { 501 const FetchCallback& callback) {
488 base::ThreadTaskRunnerHandle::Get()->PostTask( 502 base::ThreadTaskRunnerHandle::Get()->PostTask(
489 FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnFetchEvent, 503 FROM_HERE,
490 weak_factory_.GetWeakPtr(), 504 base::Bind(&EmbeddedWorkerTestHelper::OnFetchEvent, AsWeakPtr(),
491 thread_id_embedded_worker_id_map_[thread_id], 505 thread_id_embedded_worker_id_map_[thread_id], response_id,
492 response_id, request, callback)); 506 request, callback));
493 } 507 }
494 508
495 void EmbeddedWorkerTestHelper::OnPushEventStub( 509 void EmbeddedWorkerTestHelper::OnPushEventStub(
496 int request_id, 510 int request_id,
497 const PushEventPayload& payload) { 511 const PushEventPayload& payload) {
498 base::ThreadTaskRunnerHandle::Get()->PostTask( 512 base::ThreadTaskRunnerHandle::Get()->PostTask(
499 FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnPushEvent, 513 FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnPushEvent, AsWeakPtr(),
500 weak_factory_.GetWeakPtr(),
501 current_embedded_worker_id_, request_id, payload)); 514 current_embedded_worker_id_, request_id, payload));
502 } 515 }
503 516
504 void EmbeddedWorkerTestHelper::OnSetupMojoStub( 517 void EmbeddedWorkerTestHelper::OnSetupMojoStub(
505 int thread_id, 518 int thread_id,
506 shell::mojom::InterfaceProviderRequest request, 519 shell::mojom::InterfaceProviderRequest request,
507 shell::mojom::InterfaceProviderPtr remote_interfaces) { 520 shell::mojom::InterfaceProviderPtr remote_interfaces) {
508 std::unique_ptr<shell::InterfaceRegistry> local( 521 std::unique_ptr<shell::InterfaceRegistry> local(
509 new shell::InterfaceRegistry); 522 new shell::InterfaceRegistry);
510 local->Bind(std::move(request)); 523 local->Bind(std::move(request));
(...skipping 18 matching lines...) Expand all
529 new MockMessagePortMessageFilter); 542 new MockMessagePortMessageFilter);
530 message_port_message_filters_.push_back(filter); 543 message_port_message_filters_.push_back(filter);
531 return filter.get(); 544 return filter.get();
532 } 545 }
533 546
534 std::unique_ptr<shell::InterfaceRegistry> 547 std::unique_ptr<shell::InterfaceRegistry>
535 EmbeddedWorkerTestHelper::CreateInterfaceRegistry(MockRenderProcessHost* rph) { 548 EmbeddedWorkerTestHelper::CreateInterfaceRegistry(MockRenderProcessHost* rph) {
536 std::unique_ptr<shell::InterfaceRegistry> registry( 549 std::unique_ptr<shell::InterfaceRegistry> registry(
537 new shell::InterfaceRegistry); 550 new shell::InterfaceRegistry);
538 registry->AddInterface( 551 registry->AddInterface(
539 base::Bind(&MockEmbeddedWorkerSetup::Create, weak_factory_.GetWeakPtr())); 552 base::Bind(&MockEmbeddedWorkerSetup::Create, AsWeakPtr()));
540 registry->AddInterface(base::Bind(&MockEmbeddedWorkerInstanceClient::Bind, 553 registry->AddInterface(
541 weak_factory_.GetWeakPtr())); 554 base::Bind(&MockEmbeddedWorkerInstanceClient::Bind, AsWeakPtr()));
542 555
543 shell::mojom::InterfaceProviderPtr interfaces; 556 shell::mojom::InterfaceProviderPtr interfaces;
544 registry->Bind(mojo::GetProxy(&interfaces)); 557 registry->Bind(mojo::GetProxy(&interfaces));
545 558
546 std::unique_ptr<shell::InterfaceProvider> remote_interfaces( 559 std::unique_ptr<shell::InterfaceProvider> remote_interfaces(
547 new shell::InterfaceProvider); 560 new shell::InterfaceProvider);
548 remote_interfaces->Bind(std::move(interfaces)); 561 remote_interfaces->Bind(std::move(interfaces));
549 rph->SetRemoteInterfaces(std::move(remote_interfaces)); 562 rph->SetRemoteInterfaces(std::move(remote_interfaces));
550 return registry; 563 return registry;
551 } 564 }
552 565
553 } // namespace content 566 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/service_worker/embedded_worker_test_helper.h ('k') | content/common/service_worker/embedded_worker.mojom » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698