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

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

Issue 1223193009: WIP attempt to replace StartWorker/StopWorker IPCs with a new mojo EmbeddedWorker service. Base URL: https://chromium.googlesource.com/chromium/src.git@mojo-event-dispatching-option2
Patch Set: Created 5 years, 5 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 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.mojom.h"
19 #include "content/common/service_worker/embedded_worker_messages.h" 20 #include "content/common/service_worker/embedded_worker_messages.h"
20 #include "content/common/service_worker/service_worker_messages.h" 21 #include "content/common/service_worker/service_worker_messages.h"
22 #include "content/public/test/mock_render_process_host.h"
23 #include "content/public/test/test_browser_context.h"
24 #include "mojo/common/url_type_converters.h"
21 #include "testing/gtest/include/gtest/gtest.h" 25 #include "testing/gtest/include/gtest/gtest.h"
26 #include "third_party/mojo/src/mojo/public/cpp/bindings/strong_binding.h"
22 27
23 namespace content { 28 namespace content {
24 29
30 namespace {
31
25 class MockMessagePortMessageFilter : public MessagePortMessageFilter { 32 class MockMessagePortMessageFilter : public MessagePortMessageFilter {
26 public: 33 public:
27 MockMessagePortMessageFilter() 34 MockMessagePortMessageFilter()
28 : MessagePortMessageFilter( 35 : MessagePortMessageFilter(
29 base::Bind(&base::AtomicSequenceNumber::GetNext, 36 base::Bind(&base::AtomicSequenceNumber::GetNext,
30 base::Unretained(&next_routing_id_))) {} 37 base::Unretained(&next_routing_id_))) {}
31 38
32 bool Send(IPC::Message* message) override { 39 bool Send(IPC::Message* message) override {
33 message_queue_.push_back(message); 40 message_queue_.push_back(message);
34 return true; 41 return true;
35 } 42 }
36 43
37 private: 44 private:
38 ~MockMessagePortMessageFilter() override {} 45 ~MockMessagePortMessageFilter() override {}
39 base::AtomicSequenceNumber next_routing_id_; 46 base::AtomicSequenceNumber next_routing_id_;
40 ScopedVector<IPC::Message> message_queue_; 47 ScopedVector<IPC::Message> message_queue_;
41 }; 48 };
49 }
50
51 class MockEmbeddedWorker : public EmbeddedWorker {
52 public:
53 static void Create(base::WeakPtr<EmbeddedWorkerTestHelper> helper,
54 mojo::InterfaceRequest<EmbeddedWorker> request) {
55 new MockEmbeddedWorker(helper, request.Pass());
56 }
57 ~MockEmbeddedWorker() override {
58 if (!helper_ || embedded_worker_id_ == -1)
59 return;
60 base::ThreadTaskRunnerHandle::Get()->PostTask(
61 FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnStopWorker, helper_,
62 embedded_worker_id_));
63 }
64
65 void Initialize(EmbeddedWorkerStartWorkerParamsPtr params) override {
66 if (!helper_)
67 return;
68 ASSERT_EQ(embedded_worker_id_, -1);
69 embedded_worker_id_ = params->embedded_worker_id;
70 EmbeddedWorkerInstance* worker =
71 helper_->registry()->GetWorker(params->embedded_worker_id);
72 ASSERT_TRUE(worker != NULL);
73 EXPECT_EQ(EmbeddedWorkerInstance::STARTING, worker->status());
74 base::ThreadTaskRunnerHandle::Get()->PostTask(
75 FROM_HERE,
76 base::Bind(&EmbeddedWorkerTestHelper::OnStartWorker, helper_,
77 params->embedded_worker_id,
78 params->service_worker_version_id, params->scope.To<GURL>(),
79 params->script_url.To<GURL>()));
80 }
81
82 private:
83 MockEmbeddedWorker(base::WeakPtr<EmbeddedWorkerTestHelper> helper,
84 mojo::InterfaceRequest<EmbeddedWorker> request)
85 : binding_(this, request.Pass()), helper_(helper) {}
86
87 mojo::StrongBinding<EmbeddedWorker> binding_;
88 base::WeakPtr<EmbeddedWorkerTestHelper> helper_;
89 int embedded_worker_id_ = -1;
90 };
91
92 EmbeddedWorkerTestHelper::EmbeddedWorkerTestHelper(
93 const base::FilePath& user_data_directory)
94 : wrapper_(new ServiceWorkerContextWrapper(NULL)),
95 next_thread_id_(0),
96 browser_context_(new TestBrowserContext),
97 render_process_host_(new MockRenderProcessHost(browser_context_.get())),
98 weak_factory_(this) {
99 mock_render_process_id_ = render_process_host_->GetID();
100 service_registry_.ServiceRegistry::AddService(
101 base::Bind(&MockEmbeddedWorker::Create, weak_factory_.GetWeakPtr()));
102 mojo::ServiceProviderPtr services;
103 service_registry_.Bind(mojo::GetProxy(&services));
104 static_cast<ServiceRegistryImpl*>(render_process_host_->GetServiceRegistry())
105 ->BindRemoteServiceProvider(services.Pass());
106 scoped_ptr<MockServiceWorkerDatabaseTaskManager> database_task_manager(
107 new MockServiceWorkerDatabaseTaskManager(
108 base::ThreadTaskRunnerHandle::Get()));
109 wrapper_->InitInternal(user_data_directory, database_task_manager.Pass(),
110 base::ThreadTaskRunnerHandle::Get(), NULL, NULL);
111 wrapper_->process_manager()->SetProcessIdForTest(mock_render_process_id_);
112 registry()->AddChildProcessSender(mock_render_process_id_, this,
113 NewMessagePortMessageFilter());
114 }
42 115
43 EmbeddedWorkerTestHelper::EmbeddedWorkerTestHelper( 116 EmbeddedWorkerTestHelper::EmbeddedWorkerTestHelper(
44 const base::FilePath& user_data_directory, 117 const base::FilePath& user_data_directory,
45 int mock_render_process_id) 118 int mock_render_process_id)
46 : wrapper_(new ServiceWorkerContextWrapper(NULL)), 119 : wrapper_(new ServiceWorkerContextWrapper(NULL)),
47 next_thread_id_(0), 120 next_thread_id_(0),
48 mock_render_process_id_(mock_render_process_id), 121 mock_render_process_id_(mock_render_process_id),
49 weak_factory_(this) { 122 weak_factory_(this) {
50 scoped_ptr<MockServiceWorkerDatabaseTaskManager> database_task_manager( 123 scoped_ptr<MockServiceWorkerDatabaseTaskManager> database_task_manager(
51 new MockServiceWorkerDatabaseTaskManager( 124 new MockServiceWorkerDatabaseTaskManager(
(...skipping 24 matching lines...) Expand all
76 149
77 bool EmbeddedWorkerTestHelper::Send(IPC::Message* message) { 150 bool EmbeddedWorkerTestHelper::Send(IPC::Message* message) {
78 OnMessageReceived(*message); 151 OnMessageReceived(*message);
79 delete message; 152 delete message;
80 return true; 153 return true;
81 } 154 }
82 155
83 bool EmbeddedWorkerTestHelper::OnMessageReceived(const IPC::Message& message) { 156 bool EmbeddedWorkerTestHelper::OnMessageReceived(const IPC::Message& message) {
84 bool handled = true; 157 bool handled = true;
85 IPC_BEGIN_MESSAGE_MAP(EmbeddedWorkerTestHelper, message) 158 IPC_BEGIN_MESSAGE_MAP(EmbeddedWorkerTestHelper, message)
86 IPC_MESSAGE_HANDLER(EmbeddedWorkerMsg_StartWorker, OnStartWorkerStub) 159 // IPC_MESSAGE_HANDLER(EmbeddedWorkerMsg_StartWorker, OnStartWorkerStub)
87 IPC_MESSAGE_HANDLER(EmbeddedWorkerMsg_StopWorker, OnStopWorkerStub) 160 // IPC_MESSAGE_HANDLER(EmbeddedWorkerMsg_StopWorker, OnStopWorkerStub)
88 IPC_MESSAGE_HANDLER(EmbeddedWorkerContextMsg_MessageToWorker, 161 IPC_MESSAGE_HANDLER(EmbeddedWorkerContextMsg_MessageToWorker,
89 OnMessageToWorkerStub) 162 OnMessageToWorkerStub)
90 IPC_MESSAGE_UNHANDLED(handled = false) 163 IPC_MESSAGE_UNHANDLED(handled = false)
91 IPC_END_MESSAGE_MAP() 164 IPC_END_MESSAGE_MAP()
92 165
93 // IPC::TestSink only records messages that are not handled by filters, 166 // IPC::TestSink only records messages that are not handled by filters,
94 // so we just forward all messages to the separate sink. 167 // so we just forward all messages to the separate sink.
95 sink_.OnMessageReceived(message); 168 sink_.OnMessageReceived(message);
96 169
97 return handled; 170 return handled;
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 } 320 }
248 321
249 void EmbeddedWorkerTestHelper::SimulateSend( 322 void EmbeddedWorkerTestHelper::SimulateSend(
250 IPC::Message* message) { 323 IPC::Message* message) {
251 registry()->OnMessageReceived(*message, mock_render_process_id_); 324 registry()->OnMessageReceived(*message, mock_render_process_id_);
252 delete message; 325 delete message;
253 } 326 }
254 327
255 void EmbeddedWorkerTestHelper::OnStartWorkerStub( 328 void EmbeddedWorkerTestHelper::OnStartWorkerStub(
256 const EmbeddedWorkerMsg_StartWorker_Params& params) { 329 const EmbeddedWorkerMsg_StartWorker_Params& params) {
257 EmbeddedWorkerInstance* worker = 330 /* EmbeddedWorkerInstance* worker =
258 registry()->GetWorker(params.embedded_worker_id); 331 registry()->GetWorker(params.embedded_worker_id);
259 ASSERT_TRUE(worker != NULL); 332 ASSERT_TRUE(worker != NULL);
260 EXPECT_EQ(EmbeddedWorkerInstance::STARTING, worker->status()); 333 EXPECT_EQ(EmbeddedWorkerInstance::STARTING, worker->status());
261 base::ThreadTaskRunnerHandle::Get()->PostTask( 334 base::ThreadTaskRunnerHandle::Get()->PostTask(
262 FROM_HERE, 335 FROM_HERE,
263 base::Bind(&EmbeddedWorkerTestHelper::OnStartWorker, 336 base::Bind(&EmbeddedWorkerTestHelper::OnStartWorker,
264 weak_factory_.GetWeakPtr(), params.embedded_worker_id, 337 weak_factory_.GetWeakPtr(), params.embedded_worker_id,
265 params.service_worker_version_id, params.scope, 338 params.service_worker_version_id, params.scope,
266 params.script_url)); 339 params.script_url));*/
267 } 340 }
268 341
269 void EmbeddedWorkerTestHelper::OnStopWorkerStub(int embedded_worker_id) { 342 void EmbeddedWorkerTestHelper::OnStopWorkerStub(int embedded_worker_id) {
270 EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id); 343 EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
271 ASSERT_TRUE(worker != NULL); 344 ASSERT_TRUE(worker != NULL);
272 base::ThreadTaskRunnerHandle::Get()->PostTask( 345 base::ThreadTaskRunnerHandle::Get()->PostTask(
273 FROM_HERE, 346 FROM_HERE,
274 base::Bind(&EmbeddedWorkerTestHelper::OnStopWorker, 347 base::Bind(&EmbeddedWorkerTestHelper::OnStopWorker,
275 weak_factory_.GetWeakPtr(), 348 weak_factory_.GetWeakPtr(),
276 embedded_worker_id)); 349 embedded_worker_id));
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 418
346 MessagePortMessageFilter* 419 MessagePortMessageFilter*
347 EmbeddedWorkerTestHelper::NewMessagePortMessageFilter() { 420 EmbeddedWorkerTestHelper::NewMessagePortMessageFilter() {
348 scoped_refptr<MessagePortMessageFilter> filter( 421 scoped_refptr<MessagePortMessageFilter> filter(
349 new MockMessagePortMessageFilter); 422 new MockMessagePortMessageFilter);
350 message_port_message_filters_.push_back(filter); 423 message_port_message_filters_.push_back(filter);
351 return filter.get(); 424 return filter.get();
352 } 425 }
353 426
354 } // namespace content 427 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698