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

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

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

Powered by Google App Engine
This is Rietveld 408576698