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

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

Powered by Google App Engine
This is Rietveld 408576698