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

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

Issue 1264333002: First step to refactor ServiceWorkerVersion to make event dispatching more modular. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 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 9
10 #include "base/atomic_sequence_num.h" 10 #include "base/atomic_sequence_num.h"
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/memory/scoped_vector.h" 12 #include "base/memory/scoped_vector.h"
13 #include "base/thread_task_runner_handle.h" 13 #include "base/thread_task_runner_handle.h"
14 #include "content/browser/message_port_message_filter.h" 14 #include "content/browser/message_port_message_filter.h"
15 #include "content/browser/service_worker/embedded_worker_instance.h" 15 #include "content/browser/service_worker/embedded_worker_instance.h"
16 #include "content/browser/service_worker/embedded_worker_registry.h" 16 #include "content/browser/service_worker/embedded_worker_registry.h"
17 #include "content/browser/service_worker/service_worker_context_core.h" 17 #include "content/browser/service_worker/service_worker_context_core.h"
18 #include "content/browser/service_worker/service_worker_context_wrapper.h" 18 #include "content/browser/service_worker/service_worker_context_wrapper.h"
19 #include "content/common/service_worker/embedded_worker_messages.h" 19 #include "content/common/service_worker/embedded_worker_messages.h"
20 #include "content/common/service_worker/embedded_worker_setup.mojom.h"
20 #include "content/common/service_worker/service_worker_messages.h" 21 #include "content/common/service_worker/service_worker_messages.h"
21 #include "content/public/test/mock_render_process_host.h" 22 #include "content/public/test/mock_render_process_host.h"
22 #include "content/public/test/test_browser_context.h" 23 #include "content/public/test/test_browser_context.h"
24 #include "mojo/public/cpp/bindings/strong_binding.h"
23 #include "testing/gtest/include/gtest/gtest.h" 25 #include "testing/gtest/include/gtest/gtest.h"
24 26
25 namespace content { 27 namespace content {
26 28
27 namespace { 29 namespace {
28 30
29 class MockMessagePortMessageFilter : public MessagePortMessageFilter { 31 class MockMessagePortMessageFilter : public MessagePortMessageFilter {
30 public: 32 public:
31 MockMessagePortMessageFilter() 33 MockMessagePortMessageFilter()
32 : MessagePortMessageFilter( 34 : MessagePortMessageFilter(
33 base::Bind(&base::AtomicSequenceNumber::GetNext, 35 base::Bind(&base::AtomicSequenceNumber::GetNext,
34 base::Unretained(&next_routing_id_))) {} 36 base::Unretained(&next_routing_id_))) {}
35 37
36 bool Send(IPC::Message* message) override { 38 bool Send(IPC::Message* message) override {
37 message_queue_.push_back(message); 39 message_queue_.push_back(message);
38 return true; 40 return true;
39 } 41 }
40 42
41 private: 43 private:
42 ~MockMessagePortMessageFilter() override {} 44 ~MockMessagePortMessageFilter() override {}
43 base::AtomicSequenceNumber next_routing_id_; 45 base::AtomicSequenceNumber next_routing_id_;
44 ScopedVector<IPC::Message> message_queue_; 46 ScopedVector<IPC::Message> message_queue_;
45 }; 47 };
46 48
47 } // namespace 49 } // namespace
48 50
51 class EmbeddedWorkerTestHelper::MockEmbeddedWorkerSetup
52 : public EmbeddedWorkerSetup {
53 public:
54 static void Create(base::WeakPtr<EmbeddedWorkerTestHelper> helper,
55 mojo::InterfaceRequest<EmbeddedWorkerSetup> request) {
56 new MockEmbeddedWorkerSetup(helper, std::move(request));
57 }
58
59 void ExchangeServiceProviders(
60 int32_t thread_id,
61 mojo::InterfaceRequest<mojo::ServiceProvider> services,
62 mojo::ServiceProviderPtr exposed_services) override {
63 if (!helper_)
64 return;
65 helper_->OnSetupMojoStub(thread_id, std::move(services),
66 std::move(exposed_services));
67 }
68
69 private:
70 MockEmbeddedWorkerSetup(base::WeakPtr<EmbeddedWorkerTestHelper> helper,
71 mojo::InterfaceRequest<EmbeddedWorkerSetup> request)
72 : helper_(helper), binding_(this, std::move(request)) {}
73
74 base::WeakPtr<EmbeddedWorkerTestHelper> helper_;
75 mojo::StrongBinding<EmbeddedWorkerSetup> binding_;
76 };
77
49 EmbeddedWorkerTestHelper::EmbeddedWorkerTestHelper( 78 EmbeddedWorkerTestHelper::EmbeddedWorkerTestHelper(
50 const base::FilePath& user_data_directory) 79 const base::FilePath& user_data_directory)
51 : browser_context_(new TestBrowserContext), 80 : browser_context_(new TestBrowserContext),
52 render_process_host_(new MockRenderProcessHost(browser_context_.get())), 81 render_process_host_(new MockRenderProcessHost(browser_context_.get())),
53 wrapper_(new ServiceWorkerContextWrapper(browser_context_.get())), 82 wrapper_(new ServiceWorkerContextWrapper(browser_context_.get())),
54 next_thread_id_(0), 83 next_thread_id_(0),
55 mock_render_process_id_(render_process_host_->GetID()), 84 mock_render_process_id_(render_process_host_->GetID()),
56 weak_factory_(this) { 85 weak_factory_(this) {
57 scoped_ptr<MockServiceWorkerDatabaseTaskManager> database_task_manager( 86 scoped_ptr<MockServiceWorkerDatabaseTaskManager> database_task_manager(
58 new MockServiceWorkerDatabaseTaskManager( 87 new MockServiceWorkerDatabaseTaskManager(
59 base::ThreadTaskRunnerHandle::Get())); 88 base::ThreadTaskRunnerHandle::Get()));
60 wrapper_->InitInternal(user_data_directory, database_task_manager.Pass(), 89 wrapper_->InitInternal(user_data_directory, database_task_manager.Pass(),
61 base::ThreadTaskRunnerHandle::Get(), nullptr, nullptr); 90 base::ThreadTaskRunnerHandle::Get(), nullptr, nullptr);
62 wrapper_->process_manager()->SetProcessIdForTest(mock_render_process_id_); 91 wrapper_->process_manager()->SetProcessIdForTest(mock_render_process_id_);
63 registry()->AddChildProcessSender(mock_render_process_id_, this, 92 registry()->AddChildProcessSender(mock_render_process_id_, this,
64 NewMessagePortMessageFilter()); 93 NewMessagePortMessageFilter());
94
95 // Setup process level mojo service registry pair.
96 scoped_ptr<ServiceRegistryImpl> host_service_registry(
97 new ServiceRegistryImpl);
98 render_process_service_registry_.ServiceRegistry::AddService(
99 base::Bind(&MockEmbeddedWorkerSetup::Create, weak_factory_.GetWeakPtr()));
100 mojo::ServiceProviderPtr services;
101 render_process_service_registry_.Bind(mojo::GetProxy(&services));
102 host_service_registry->BindRemoteServiceProvider(std::move(services));
103 render_process_host_->SetServiceRegistry(std::move(host_service_registry));
65 } 104 }
66 105
67 EmbeddedWorkerTestHelper::~EmbeddedWorkerTestHelper() { 106 EmbeddedWorkerTestHelper::~EmbeddedWorkerTestHelper() {
68 if (wrapper_.get()) 107 if (wrapper_.get())
69 wrapper_->Shutdown(); 108 wrapper_->Shutdown();
70 } 109 }
71 110
72 void EmbeddedWorkerTestHelper::SimulateAddProcessToPattern( 111 void EmbeddedWorkerTestHelper::SimulateAddProcessToPattern(
73 const GURL& pattern, 112 const GURL& pattern,
74 int process_id) { 113 int process_id) {
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_InstallEvent, OnInstallEventStub) 179 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_InstallEvent, OnInstallEventStub)
141 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FetchEvent, OnFetchEventStub) 180 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FetchEvent, OnFetchEventStub)
142 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEventStub) 181 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEventStub)
143 IPC_MESSAGE_UNHANDLED(handled = false) 182 IPC_MESSAGE_UNHANDLED(handled = false)
144 IPC_END_MESSAGE_MAP() 183 IPC_END_MESSAGE_MAP()
145 // Record all messages directed to inner script context. 184 // Record all messages directed to inner script context.
146 inner_sink_.OnMessageReceived(message); 185 inner_sink_.OnMessageReceived(message);
147 return handled; 186 return handled;
148 } 187 }
149 188
189 void EmbeddedWorkerTestHelper::OnSetupMojo(ServiceRegistry* service_registry) {}
190
150 void EmbeddedWorkerTestHelper::OnActivateEvent(int embedded_worker_id, 191 void EmbeddedWorkerTestHelper::OnActivateEvent(int embedded_worker_id,
151 int request_id) { 192 int request_id) {
152 SimulateSend( 193 SimulateSend(
153 new ServiceWorkerHostMsg_ActivateEventFinished( 194 new ServiceWorkerHostMsg_ActivateEventFinished(
154 embedded_worker_id, request_id, 195 embedded_worker_id, request_id,
155 blink::WebServiceWorkerEventResultCompleted)); 196 blink::WebServiceWorkerEventResultCompleted));
156 } 197 }
157 198
158 void EmbeddedWorkerTestHelper::OnInstallEvent(int embedded_worker_id, 199 void EmbeddedWorkerTestHelper::OnInstallEvent(int embedded_worker_id,
159 int request_id) { 200 int request_id) {
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 } 370 }
330 371
331 void EmbeddedWorkerTestHelper::OnPushEventStub(int request_id, 372 void EmbeddedWorkerTestHelper::OnPushEventStub(int request_id,
332 const std::string& data) { 373 const std::string& data) {
333 base::ThreadTaskRunnerHandle::Get()->PostTask( 374 base::ThreadTaskRunnerHandle::Get()->PostTask(
334 FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnPushEvent, 375 FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnPushEvent,
335 weak_factory_.GetWeakPtr(), 376 weak_factory_.GetWeakPtr(),
336 current_embedded_worker_id_, request_id, data)); 377 current_embedded_worker_id_, request_id, data));
337 } 378 }
338 379
380 void EmbeddedWorkerTestHelper::OnSetupMojoStub(
381 int thread_id,
382 mojo::InterfaceRequest<mojo::ServiceProvider> services,
383 mojo::ServiceProviderPtr exposed_services) {
384 scoped_ptr<ServiceRegistryImpl> new_registry(new ServiceRegistryImpl);
385 new_registry->Bind(std::move(services));
386 new_registry->BindRemoteServiceProvider(std::move(exposed_services));
387 OnSetupMojo(new_registry.get());
388 thread_id_service_registry_map_.add(thread_id, std::move(new_registry));
389 }
390
339 EmbeddedWorkerRegistry* EmbeddedWorkerTestHelper::registry() { 391 EmbeddedWorkerRegistry* EmbeddedWorkerTestHelper::registry() {
340 DCHECK(context()); 392 DCHECK(context());
341 return context()->embedded_worker_registry(); 393 return context()->embedded_worker_registry();
342 } 394 }
343 395
344 MessagePortMessageFilter* 396 MessagePortMessageFilter*
345 EmbeddedWorkerTestHelper::NewMessagePortMessageFilter() { 397 EmbeddedWorkerTestHelper::NewMessagePortMessageFilter() {
346 scoped_refptr<MessagePortMessageFilter> filter( 398 scoped_refptr<MessagePortMessageFilter> filter(
347 new MockMessagePortMessageFilter); 399 new MockMessagePortMessageFilter);
348 message_port_message_filters_.push_back(filter); 400 message_port_message_filters_.push_back(filter);
349 return filter.get(); 401 return filter.get();
350 } 402 }
351 403
352 } // namespace content 404 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698