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

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

Issue 2227593002: ServiceWorker: Implement StartWorker by using mojo (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Incorporated with the comments Created 4 years, 3 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/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 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 private: 78 private:
78 MockEmbeddedWorkerSetup( 79 MockEmbeddedWorkerSetup(
79 const base::WeakPtr<EmbeddedWorkerTestHelper>& helper, 80 const base::WeakPtr<EmbeddedWorkerTestHelper>& helper,
80 mojo::InterfaceRequest<mojom::EmbeddedWorkerSetup> request) 81 mojo::InterfaceRequest<mojom::EmbeddedWorkerSetup> request)
81 : helper_(helper), binding_(this, std::move(request)) {} 82 : helper_(helper), binding_(this, std::move(request)) {}
82 83
83 base::WeakPtr<EmbeddedWorkerTestHelper> helper_; 84 base::WeakPtr<EmbeddedWorkerTestHelper> helper_;
84 mojo::StrongBinding<mojom::EmbeddedWorkerSetup> binding_; 85 mojo::StrongBinding<mojom::EmbeddedWorkerSetup> binding_;
85 }; 86 };
86 87
88 EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::
89 MockEmbeddedWorkerInstanceClient(
90 base::WeakPtr<EmbeddedWorkerTestHelper> helper)
91 : helper_(helper), binding_(this) {}
92
93 EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::
94 ~MockEmbeddedWorkerInstanceClient() {}
95
96 void EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::StartWorker(
97 const EmbeddedWorkerStartParams& params) {
98 if (!helper_)
99 return;
100
101 embedded_worker_id_ = params.embedded_worker_id;
102
103 EmbeddedWorkerInstance* worker =
104 helper_->registry()->GetWorker(params.embedded_worker_id);
105 ASSERT_TRUE(worker != NULL);
106 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status());
107
108 base::ThreadTaskRunnerHandle::Get()->PostTask(
109 FROM_HERE,
110 base::Bind(&EmbeddedWorkerTestHelper::OnStartWorker,
111 helper_->weak_factory_.GetWeakPtr(), params.embedded_worker_id,
112 params.service_worker_version_id, params.scope,
113 params.script_url, params.pause_after_download));
114 }
115
116 // static
117 void EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::Bind(
118 const base::WeakPtr<EmbeddedWorkerTestHelper>& helper,
119 mojom::EmbeddedWorkerInstanceClientRequest request) {
120 std::vector<std::unique_ptr<MockEmbeddedWorkerInstanceClient>>* clients =
121 helper->mock_instance_clients();
122 size_t next_client_index = helper->mock_instance_clients_next_index_;
123
124 ASSERT_GE(clients->size(), next_client_index);
125 if (clients->size() == next_client_index) {
126 clients->push_back(
127 base::MakeUnique<MockEmbeddedWorkerInstanceClient>(helper));
128 }
129
130 std::unique_ptr<MockEmbeddedWorkerInstanceClient>& client =
131 clients->at(next_client_index);
132 helper->mock_instance_clients_next_index_ = next_client_index + 1;
133 if (client)
134 client->binding_.Bind(std::move(request));
135 }
136
87 EmbeddedWorkerTestHelper::EmbeddedWorkerTestHelper( 137 EmbeddedWorkerTestHelper::EmbeddedWorkerTestHelper(
88 const base::FilePath& user_data_directory) 138 const base::FilePath& user_data_directory)
89 : browser_context_(new TestBrowserContext), 139 : browser_context_(new TestBrowserContext),
90 render_process_host_(new MockRenderProcessHost(browser_context_.get())), 140 render_process_host_(new MockRenderProcessHost(browser_context_.get())),
141 new_render_process_host_(
142 new MockRenderProcessHost(browser_context_.get())),
91 wrapper_(new ServiceWorkerContextWrapper(browser_context_.get())), 143 wrapper_(new ServiceWorkerContextWrapper(browser_context_.get())),
144 mock_instance_clients_next_index_(0),
92 next_thread_id_(0), 145 next_thread_id_(0),
93 mock_render_process_id_(render_process_host_->GetID()), 146 mock_render_process_id_(render_process_host_->GetID()),
147 new_mock_render_process_id_(new_render_process_host_->GetID()),
94 weak_factory_(this) { 148 weak_factory_(this) {
95 std::unique_ptr<MockServiceWorkerDatabaseTaskManager> database_task_manager( 149 std::unique_ptr<MockServiceWorkerDatabaseTaskManager> database_task_manager(
96 new MockServiceWorkerDatabaseTaskManager( 150 new MockServiceWorkerDatabaseTaskManager(
97 base::ThreadTaskRunnerHandle::Get())); 151 base::ThreadTaskRunnerHandle::Get()));
98 wrapper_->InitInternal(user_data_directory, std::move(database_task_manager), 152 wrapper_->InitInternal(user_data_directory, std::move(database_task_manager),
99 base::ThreadTaskRunnerHandle::Get(), nullptr, nullptr); 153 base::ThreadTaskRunnerHandle::Get(), nullptr, nullptr);
100 wrapper_->process_manager()->SetProcessIdForTest(mock_render_process_id()); 154 wrapper_->process_manager()->SetProcessIdForTest(mock_render_process_id());
101 wrapper_->process_manager()->SetNewProcessIdForTest(new_render_process_id()); 155 wrapper_->process_manager()->SetNewProcessIdForTest(new_render_process_id());
102 registry()->AddChildProcessSender(mock_render_process_id_, this, 156 registry()->AddChildProcessSender(mock_render_process_id_, this,
103 NewMessagePortMessageFilter()); 157 NewMessagePortMessageFilter());
104 158
105 // Setup process level interface registry. 159 // Setup process level interface registry.
106 render_process_interface_registry_.reset(new shell::InterfaceRegistry); 160 render_process_interface_registry_ =
107 render_process_interface_registry_->AddInterface( 161 CreateInterfaceRegistry(render_process_host_.get());
108 base::Bind(&MockEmbeddedWorkerSetup::Create, weak_factory_.GetWeakPtr())); 162 new_render_process_interface_registry_ =
109 shell::mojom::InterfaceProviderPtr interfaces; 163 CreateInterfaceRegistry(new_render_process_host_.get());
110 render_process_interface_registry_->Bind(mojo::GetProxy(&interfaces));
111
112 std::unique_ptr<shell::InterfaceProvider> host_remote_interfaces(
113 new shell::InterfaceProvider);
114 host_remote_interfaces->Bind(std::move(interfaces));
115 render_process_host_->SetRemoteInterfaces(std::move(host_remote_interfaces));
116 } 164 }
117 165
118 EmbeddedWorkerTestHelper::~EmbeddedWorkerTestHelper() { 166 EmbeddedWorkerTestHelper::~EmbeddedWorkerTestHelper() {
119 if (wrapper_.get()) 167 if (wrapper_.get())
120 wrapper_->Shutdown(); 168 wrapper_->Shutdown();
121 } 169 }
122 170
123 void EmbeddedWorkerTestHelper::SimulateAddProcessToPattern(const GURL& pattern, 171 void EmbeddedWorkerTestHelper::SimulateAddProcessToPattern(const GURL& pattern,
124 int process_id) { 172 int process_id) {
125 registry()->AddChildProcessSender(process_id, this, 173 registry()->AddChildProcessSender(process_id, this,
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 if (worker != NULL) 370 if (worker != NULL)
323 registry()->OnWorkerStopped(worker->process_id(), embedded_worker_id); 371 registry()->OnWorkerStopped(worker->process_id(), embedded_worker_id);
324 } 372 }
325 373
326 void EmbeddedWorkerTestHelper::SimulateSend(IPC::Message* message) { 374 void EmbeddedWorkerTestHelper::SimulateSend(IPC::Message* message) {
327 registry()->OnMessageReceived(*message, mock_render_process_id_); 375 registry()->OnMessageReceived(*message, mock_render_process_id_);
328 delete message; 376 delete message;
329 } 377 }
330 378
331 void EmbeddedWorkerTestHelper::OnStartWorkerStub( 379 void EmbeddedWorkerTestHelper::OnStartWorkerStub(
332 const EmbeddedWorkerMsg_StartWorker_Params& params) { 380 const EmbeddedWorkerStartParams& params) {
333 EmbeddedWorkerInstance* worker = 381 EmbeddedWorkerInstance* worker =
334 registry()->GetWorker(params.embedded_worker_id); 382 registry()->GetWorker(params.embedded_worker_id);
335 ASSERT_TRUE(worker != NULL); 383 ASSERT_TRUE(worker != NULL);
336 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status()); 384 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status());
337 base::ThreadTaskRunnerHandle::Get()->PostTask( 385 base::ThreadTaskRunnerHandle::Get()->PostTask(
338 FROM_HERE, 386 FROM_HERE,
339 base::Bind(&EmbeddedWorkerTestHelper::OnStartWorker, 387 base::Bind(&EmbeddedWorkerTestHelper::OnStartWorker,
340 weak_factory_.GetWeakPtr(), params.embedded_worker_id, 388 weak_factory_.GetWeakPtr(), params.embedded_worker_id,
341 params.service_worker_version_id, params.scope, 389 params.service_worker_version_id, params.scope,
342 params.script_url, params.pause_after_download)); 390 params.script_url, params.pause_after_download));
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 } 487 }
440 488
441 MessagePortMessageFilter* 489 MessagePortMessageFilter*
442 EmbeddedWorkerTestHelper::NewMessagePortMessageFilter() { 490 EmbeddedWorkerTestHelper::NewMessagePortMessageFilter() {
443 scoped_refptr<MessagePortMessageFilter> filter( 491 scoped_refptr<MessagePortMessageFilter> filter(
444 new MockMessagePortMessageFilter); 492 new MockMessagePortMessageFilter);
445 message_port_message_filters_.push_back(filter); 493 message_port_message_filters_.push_back(filter);
446 return filter.get(); 494 return filter.get();
447 } 495 }
448 496
497 std::unique_ptr<shell::InterfaceRegistry>
498 EmbeddedWorkerTestHelper::CreateInterfaceRegistry(MockRenderProcessHost* rph) {
499 std::unique_ptr<shell::InterfaceRegistry> registry(
500 new shell::InterfaceRegistry);
501 registry->AddInterface(
502 base::Bind(&MockEmbeddedWorkerSetup::Create, weak_factory_.GetWeakPtr()));
503 registry->AddInterface(base::Bind(&MockEmbeddedWorkerInstanceClient::Bind,
504 weak_factory_.GetWeakPtr()));
505
506 shell::mojom::InterfaceProviderPtr interfaces;
507 registry->Bind(mojo::GetProxy(&interfaces));
508
509 std::unique_ptr<shell::InterfaceProvider> remote_interfaces(
510 new shell::InterfaceProvider);
511 remote_interfaces->Bind(std::move(interfaces));
512 rph->SetRemoteInterfaces(std::move(remote_interfaces));
513 return registry;
514 }
515
449 } // namespace content 516 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698