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

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

Issue 2779763004: Create ServiceWorkerProviderHost before starting worker (Closed)
Patch Set: Removed unnecessary CONTENT_EXPORT Created 3 years, 6 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_instance.h" 5 #include "content/browser/service_worker/embedded_worker_instance.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 26 matching lines...) Expand all
37 37
38 void SaveStatusAndCall(ServiceWorkerStatusCode* out, 38 void SaveStatusAndCall(ServiceWorkerStatusCode* out,
39 const base::Closure& callback, 39 const base::Closure& callback,
40 ServiceWorkerStatusCode status) { 40 ServiceWorkerStatusCode status) {
41 *out = status; 41 *out = status;
42 callback.Run(); 42 callback.Run();
43 } 43 }
44 44
45 } // namespace 45 } // namespace
46 46
47 class ProviderHostEndpoints : public mojom::ServiceWorkerProviderHost {
48 public:
49 ProviderHostEndpoints() : binding_(this) {}
50
51 ~ProviderHostEndpoints() override {}
52
53 mojom::ServiceWorkerProviderClientInfoPtr CreateProviderClientInfoPtr() {
54 DCHECK(!binding_.is_bound());
55 DCHECK(!client_.is_bound());
56 // Just keep the endpoints.
57 mojom::ServiceWorkerProviderClientInfoPtr provider_client_info =
58 mojom::ServiceWorkerProviderClientInfo::New();
59 binding_.Bind(mojo::MakeRequest(&provider_client_info->host_ptr_info));
60 provider_client_info->client_request = mojo::MakeRequest(&client_);
61 return provider_client_info;
62 }
63
64 private:
65 mojom::ServiceWorkerProviderAssociatedPtr client_;
66 mojo::AssociatedBinding<mojom::ServiceWorkerProviderHost> binding_;
67
68 DISALLOW_COPY_AND_ASSIGN(ProviderHostEndpoints);
69 };
70
47 class EmbeddedWorkerInstanceTest : public testing::Test, 71 class EmbeddedWorkerInstanceTest : public testing::Test,
48 public EmbeddedWorkerInstance::Listener { 72 public EmbeddedWorkerInstance::Listener {
49 protected: 73 protected:
50 EmbeddedWorkerInstanceTest() 74 EmbeddedWorkerInstanceTest()
51 : thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP) {} 75 : thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP) {}
52 76
53 enum EventType { 77 enum EventType {
54 PROCESS_ALLOCATED, 78 PROCESS_ALLOCATED,
55 START_WORKER_MESSAGE_SENT, 79 START_WORKER_MESSAGE_SENT,
56 STARTED, 80 STARTED,
(...skipping 18 matching lines...) Expand all
75 RecordEvent(START_WORKER_MESSAGE_SENT); 99 RecordEvent(START_WORKER_MESSAGE_SENT);
76 } 100 }
77 void OnStarted() override { RecordEvent(STARTED); } 101 void OnStarted() override { RecordEvent(STARTED); }
78 void OnStopped(EmbeddedWorkerStatus old_status) override { 102 void OnStopped(EmbeddedWorkerStatus old_status) override {
79 RecordEvent(STOPPED, old_status); 103 RecordEvent(STOPPED, old_status);
80 } 104 }
81 void OnDetached(EmbeddedWorkerStatus old_status) override { 105 void OnDetached(EmbeddedWorkerStatus old_status) override {
82 RecordEvent(DETACHED, old_status); 106 RecordEvent(DETACHED, old_status);
83 } 107 }
84 108
85 bool OnMessageReceived(const IPC::Message& message) override { return false; } 109 bool OnMessageReceived(const IPC::Message&) override { return false; }
86 110
87 void SetUp() override { 111 void SetUp() override {
88 helper_.reset(new EmbeddedWorkerTestHelper(base::FilePath())); 112 helper_.reset(new EmbeddedWorkerTestHelper(base::FilePath()));
89 } 113 }
90 114
91 void TearDown() override { helper_.reset(); } 115 void TearDown() override { helper_.reset(); }
92 116
93 ServiceWorkerStatusCode StartWorker(EmbeddedWorkerInstance* worker, 117 ServiceWorkerStatusCode StartWorker(EmbeddedWorkerInstance* worker,
94 int id, const GURL& pattern, 118 int id, const GURL& pattern,
95 const GURL& url) { 119 const GURL& url) {
96 ServiceWorkerStatusCode status; 120 ServiceWorkerStatusCode status;
97 base::RunLoop run_loop; 121 base::RunLoop run_loop;
98 std::unique_ptr<EmbeddedWorkerStartParams> params = 122 std::unique_ptr<EmbeddedWorkerStartParams> params =
99 CreateStartParams(id, pattern, url); 123 CreateStartParams(id, pattern, url);
100 worker->Start( 124 worker->Start(
101 std::move(params), CreateEventDispatcher(), 125 std::move(params), CreateProviderClientInfoGetter(),
126 CreateEventDispatcher(),
102 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure())); 127 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure()));
103 run_loop.Run(); 128 run_loop.Run();
104 return status; 129 return status;
105 } 130 }
106 131
107 std::unique_ptr<EmbeddedWorkerStartParams> 132 std::unique_ptr<EmbeddedWorkerStartParams>
108 CreateStartParams(int version_id, const GURL& scope, const GURL& script_url) { 133 CreateStartParams(int version_id, const GURL& scope, const GURL& script_url) {
109 std::unique_ptr<EmbeddedWorkerStartParams> params = 134 std::unique_ptr<EmbeddedWorkerStartParams> params =
110 base::MakeUnique<EmbeddedWorkerStartParams>(); 135 base::MakeUnique<EmbeddedWorkerStartParams>();
111 params->service_worker_version_id = version_id; 136 params->service_worker_version_id = version_id;
112 params->scope = scope; 137 params->scope = scope;
113 params->script_url = script_url; 138 params->script_url = script_url;
114 params->pause_after_download = false; 139 params->pause_after_download = false;
115 params->is_installed = false; 140 params->is_installed = false;
116 return params; 141 return params;
117 } 142 }
118 143
144 mojom::ServiceWorkerProviderClientInfoPtr CreateProviderClientInfo(
145 int /* process_id */) {
146 provider_host_endpoints_.emplace_back(
147 base::MakeUnique<ProviderHostEndpoints>());
148 return provider_host_endpoints_.back()->CreateProviderClientInfoPtr();
149 }
150
151 EmbeddedWorkerInstance::ProviderClientInfoGetter
152 CreateProviderClientInfoGetter() {
153 return base::BindOnce(&EmbeddedWorkerInstanceTest::CreateProviderClientInfo,
154 base::Unretained(this));
155 }
156
119 mojom::ServiceWorkerEventDispatcherRequest CreateEventDispatcher() { 157 mojom::ServiceWorkerEventDispatcherRequest CreateEventDispatcher() {
120 dispatchers_.emplace_back(); 158 dispatchers_.emplace_back();
121 return mojo::MakeRequest(&dispatchers_.back()); 159 return mojo::MakeRequest(&dispatchers_.back());
122 } 160 }
123 161
124 ServiceWorkerContextCore* context() { return helper_->context(); } 162 ServiceWorkerContextCore* context() { return helper_->context(); }
125 163
126 EmbeddedWorkerRegistry* embedded_worker_registry() { 164 EmbeddedWorkerRegistry* embedded_worker_registry() {
127 DCHECK(context()); 165 DCHECK(context());
128 return context()->embedded_worker_registry(); 166 return context()->embedded_worker_registry();
129 } 167 }
130 168
131 IPC::TestSink* ipc_sink() { return helper_->ipc_sink(); } 169 IPC::TestSink* ipc_sink() { return helper_->ipc_sink(); }
132 170
133 std::vector<std::unique_ptr< 171 std::vector<std::unique_ptr<
134 EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient>>* 172 EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient>>*
135 mock_instance_clients() { 173 mock_instance_clients() {
136 return helper_->mock_instance_clients(); 174 return helper_->mock_instance_clients();
137 } 175 }
138 176
139 std::vector<mojom::ServiceWorkerEventDispatcherPtr> dispatchers_; 177 std::vector<mojom::ServiceWorkerEventDispatcherPtr> dispatchers_;
178 std::vector<std::unique_ptr<ProviderHostEndpoints>> provider_host_endpoints_;
140 179
141 TestBrowserThreadBundle thread_bundle_; 180 TestBrowserThreadBundle thread_bundle_;
142 std::unique_ptr<EmbeddedWorkerTestHelper> helper_; 181 std::unique_ptr<EmbeddedWorkerTestHelper> helper_;
143 std::vector<EventLog> events_; 182 std::vector<EventLog> events_;
144 183
145 private: 184 private:
146 DISALLOW_COPY_AND_ASSIGN(EmbeddedWorkerInstanceTest); 185 DISALLOW_COPY_AND_ASSIGN(EmbeddedWorkerInstanceTest);
147 }; 186 };
148 187
149 // A helper to simulate the start worker sequence is stalled in a worker 188 // A helper to simulate the start worker sequence is stalled in a worker
150 // process. 189 // process.
151 class StalledInStartWorkerHelper : public EmbeddedWorkerTestHelper { 190 class StalledInStartWorkerHelper : public EmbeddedWorkerTestHelper {
152 public: 191 public:
153 StalledInStartWorkerHelper() : EmbeddedWorkerTestHelper(base::FilePath()) {} 192 StalledInStartWorkerHelper() : EmbeddedWorkerTestHelper(base::FilePath()) {}
154 ~StalledInStartWorkerHelper() override {} 193 ~StalledInStartWorkerHelper() override {}
155 194
156 void OnStartWorker(int embedded_worker_id, 195 void OnStartWorker(
157 int64_t service_worker_version_id, 196 int embedded_worker_id,
158 const GURL& scope, 197 int64_t service_worker_version_id,
159 const GURL& script_url, 198 const GURL& scope,
160 bool pause_after_download, 199 const GURL& script_url,
161 mojom::ServiceWorkerEventDispatcherRequest request, 200 bool pause_after_download,
162 mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo 201 mojom::ServiceWorkerEventDispatcherRequest request,
163 instance_host) override { 202 mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo instance_host,
203 mojom::ServiceWorkerProviderClientInfoPtr provider_client_info) override {
164 if (force_stall_in_start_) { 204 if (force_stall_in_start_) {
165 // Prepare for OnStopWorker(). 205 // Prepare for OnStopWorker().
166 instance_host_ptr_map_[embedded_worker_id].Bind(std::move(instance_host)); 206 instance_host_ptr_map_[embedded_worker_id].Bind(std::move(instance_host));
167 // Do nothing to simulate a stall in the worker process. 207 // Do nothing to simulate a stall in the worker process.
168 return; 208 return;
169 } 209 }
170 EmbeddedWorkerTestHelper::OnStartWorker( 210 EmbeddedWorkerTestHelper::OnStartWorker(
171 embedded_worker_id, service_worker_version_id, scope, script_url, 211 embedded_worker_id, service_worker_version_id, scope, script_url,
172 pause_after_download, std::move(request), std::move(instance_host)); 212 pause_after_download, std::move(request), std::move(instance_host),
213 std::move(provider_client_info));
173 } 214 }
174 215
175 void OnStopWorker(int embedded_worker_id) override { 216 void OnStopWorker(int embedded_worker_id) override {
176 if (instance_host_ptr_map_[embedded_worker_id]) { 217 if (instance_host_ptr_map_[embedded_worker_id]) {
177 instance_host_ptr_map_[embedded_worker_id]->OnStopped(); 218 instance_host_ptr_map_[embedded_worker_id]->OnStopped();
178 base::RunLoop().RunUntilIdle(); 219 base::RunLoop().RunUntilIdle();
179 return; 220 return;
180 } 221 }
181 EmbeddedWorkerTestHelper::OnStopWorker(embedded_worker_id); 222 EmbeddedWorkerTestHelper::OnStopWorker(embedded_worker_id);
182 } 223 }
(...skipping 24 matching lines...) Expand all
207 // Simulate adding one process to the pattern. 248 // Simulate adding one process to the pattern.
208 helper_->SimulateAddProcessToPattern(pattern, 249 helper_->SimulateAddProcessToPattern(pattern,
209 helper_->mock_render_process_id()); 250 helper_->mock_render_process_id());
210 251
211 // Start should succeed. 252 // Start should succeed.
212 ServiceWorkerStatusCode status; 253 ServiceWorkerStatusCode status;
213 base::RunLoop run_loop; 254 base::RunLoop run_loop;
214 std::unique_ptr<EmbeddedWorkerStartParams> params = 255 std::unique_ptr<EmbeddedWorkerStartParams> params =
215 CreateStartParams(service_worker_version_id, pattern, url); 256 CreateStartParams(service_worker_version_id, pattern, url);
216 worker->Start( 257 worker->Start(
217 std::move(params), CreateEventDispatcher(), 258 std::move(params), CreateProviderClientInfoGetter(),
259 CreateEventDispatcher(),
218 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure())); 260 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure()));
219 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status()); 261 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status());
220 run_loop.Run(); 262 run_loop.Run();
221 EXPECT_EQ(SERVICE_WORKER_OK, status); 263 EXPECT_EQ(SERVICE_WORKER_OK, status);
222 264
223 // The 'WorkerStarted' message should have been sent by 265 // The 'WorkerStarted' message should have been sent by
224 // EmbeddedWorkerTestHelper. 266 // EmbeddedWorkerTestHelper.
225 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status()); 267 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status());
226 EXPECT_EQ(helper_->mock_render_process_id(), worker->process_id()); 268 EXPECT_EQ(helper_->mock_render_process_id(), worker->process_id());
227 269
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 helper_->SimulateAddProcessToPattern(pattern, 306 helper_->SimulateAddProcessToPattern(pattern,
265 helper_->new_render_process_id()); 307 helper_->new_render_process_id());
266 308
267 { 309 {
268 // Start once normally. 310 // Start once normally.
269 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; 311 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE;
270 base::RunLoop run_loop; 312 base::RunLoop run_loop;
271 std::unique_ptr<EmbeddedWorkerStartParams> params = 313 std::unique_ptr<EmbeddedWorkerStartParams> params =
272 CreateStartParams(service_worker_version_id, pattern, url); 314 CreateStartParams(service_worker_version_id, pattern, url);
273 worker->Start( 315 worker->Start(
274 std::move(params), CreateEventDispatcher(), 316 std::move(params), CreateProviderClientInfoGetter(),
317 CreateEventDispatcher(),
275 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure())); 318 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure()));
276 run_loop.Run(); 319 run_loop.Run();
277 EXPECT_EQ(SERVICE_WORKER_OK, status); 320 EXPECT_EQ(SERVICE_WORKER_OK, status);
278 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status()); 321 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status());
279 // The worker should be using the default render process. 322 // The worker should be using the default render process.
280 EXPECT_EQ(helper_->mock_render_process_id(), worker->process_id()); 323 EXPECT_EQ(helper_->mock_render_process_id(), worker->process_id());
281 324
282 EXPECT_TRUE(worker->Stop()); 325 EXPECT_TRUE(worker->Stop());
283 base::RunLoop().RunUntilIdle(); 326 base::RunLoop().RunUntilIdle();
284 } 327 }
285 328
286 // Fail twice. 329 // Fail twice.
287 context()->UpdateVersionFailureCount(service_worker_version_id, 330 context()->UpdateVersionFailureCount(service_worker_version_id,
288 SERVICE_WORKER_ERROR_FAILED); 331 SERVICE_WORKER_ERROR_FAILED);
289 context()->UpdateVersionFailureCount(service_worker_version_id, 332 context()->UpdateVersionFailureCount(service_worker_version_id,
290 SERVICE_WORKER_ERROR_FAILED); 333 SERVICE_WORKER_ERROR_FAILED);
291 334
292 { 335 {
293 // Start again. 336 // Start again.
294 ServiceWorkerStatusCode status; 337 ServiceWorkerStatusCode status;
295 base::RunLoop run_loop; 338 base::RunLoop run_loop;
296 std::unique_ptr<EmbeddedWorkerStartParams> params = 339 std::unique_ptr<EmbeddedWorkerStartParams> params =
297 CreateStartParams(service_worker_version_id, pattern, url); 340 CreateStartParams(service_worker_version_id, pattern, url);
298 worker->Start( 341 worker->Start(
299 std::move(params), CreateEventDispatcher(), 342 std::move(params), CreateProviderClientInfoGetter(),
343 CreateEventDispatcher(),
300 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure())); 344 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure()));
301 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status()); 345 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status());
302 run_loop.Run(); 346 run_loop.Run();
303 EXPECT_EQ(SERVICE_WORKER_OK, status); 347 EXPECT_EQ(SERVICE_WORKER_OK, status);
304 348
305 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status()); 349 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status());
306 // The worker should be using the new render process. 350 // The worker should be using the new render process.
307 EXPECT_EQ(helper_->new_render_process_id(), worker->process_id()); 351 EXPECT_EQ(helper_->new_render_process_id(), worker->process_id());
308 EXPECT_TRUE(worker->Stop()); 352 EXPECT_TRUE(worker->Stop());
309 base::RunLoop().RunUntilIdle(); 353 base::RunLoop().RunUntilIdle();
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 int process_id = helper_->mock_render_process_id(); 414 int process_id = helper_->mock_render_process_id();
371 415
372 helper_->SimulateAddProcessToPattern(pattern, process_id); 416 helper_->SimulateAddProcessToPattern(pattern, process_id);
373 { 417 {
374 // Start worker1. 418 // Start worker1.
375 ServiceWorkerStatusCode status; 419 ServiceWorkerStatusCode status;
376 base::RunLoop run_loop; 420 base::RunLoop run_loop;
377 std::unique_ptr<EmbeddedWorkerStartParams> params = 421 std::unique_ptr<EmbeddedWorkerStartParams> params =
378 CreateStartParams(version_id1, pattern, url); 422 CreateStartParams(version_id1, pattern, url);
379 worker1->Start( 423 worker1->Start(
380 std::move(params), CreateEventDispatcher(), 424 std::move(params), CreateProviderClientInfoGetter(),
425 CreateEventDispatcher(),
381 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure())); 426 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure()));
382 run_loop.Run(); 427 run_loop.Run();
383 EXPECT_EQ(SERVICE_WORKER_OK, status); 428 EXPECT_EQ(SERVICE_WORKER_OK, status);
384 } 429 }
385 430
386 { 431 {
387 // Start worker2. 432 // Start worker2.
388 ServiceWorkerStatusCode status; 433 ServiceWorkerStatusCode status;
389 base::RunLoop run_loop; 434 base::RunLoop run_loop;
390 std::unique_ptr<EmbeddedWorkerStartParams> params = 435 std::unique_ptr<EmbeddedWorkerStartParams> params =
391 CreateStartParams(version_id2, pattern, url); 436 CreateStartParams(version_id2, pattern, url);
392 worker2->Start( 437 worker2->Start(
393 std::move(params), CreateEventDispatcher(), 438 std::move(params), CreateProviderClientInfoGetter(),
439 CreateEventDispatcher(),
394 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure())); 440 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure()));
395 run_loop.Run(); 441 run_loop.Run();
396 EXPECT_EQ(SERVICE_WORKER_OK, status); 442 EXPECT_EQ(SERVICE_WORKER_OK, status);
397 } 443 }
398 444
399 // The two workers share the same process. 445 // The two workers share the same process.
400 EXPECT_EQ(worker1->process_id(), worker2->process_id()); 446 EXPECT_EQ(worker1->process_id(), worker2->process_id());
401 447
402 // Destroy worker1. It removes itself from the registry. 448 // Destroy worker1. It removes itself from the registry.
403 int worker1_id = worker1->embedded_worker_id(); 449 int worker1_id = worker1->embedded_worker_id();
(...skipping 17 matching lines...) Expand all
421 467
422 std::unique_ptr<EmbeddedWorkerInstance> worker = 468 std::unique_ptr<EmbeddedWorkerInstance> worker =
423 embedded_worker_registry()->CreateWorker(); 469 embedded_worker_registry()->CreateWorker();
424 worker->AddListener(this); 470 worker->AddListener(this);
425 471
426 // Run the start worker sequence and detach during process allocation. 472 // Run the start worker sequence and detach during process allocation.
427 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; 473 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE;
428 std::unique_ptr<EmbeddedWorkerStartParams> params = 474 std::unique_ptr<EmbeddedWorkerStartParams> params =
429 CreateStartParams(version_id, scope, url); 475 CreateStartParams(version_id, scope, url);
430 worker->Start( 476 worker->Start(
431 std::move(params), CreateEventDispatcher(), 477 std::move(params), CreateProviderClientInfoGetter(),
478 CreateEventDispatcher(),
432 base::Bind(&SaveStatusAndCall, &status, base::Bind(&base::DoNothing))); 479 base::Bind(&SaveStatusAndCall, &status, base::Bind(&base::DoNothing)));
433 worker->Detach(); 480 worker->Detach();
434 base::RunLoop().RunUntilIdle(); 481 base::RunLoop().RunUntilIdle();
435 482
436 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status()); 483 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status());
437 EXPECT_EQ(ChildProcessHost::kInvalidUniqueID, worker->process_id()); 484 EXPECT_EQ(ChildProcessHost::kInvalidUniqueID, worker->process_id());
438 485
439 // The start callback should not be aborted by detach (see a comment on the 486 // The start callback should not be aborted by detach (see a comment on the
440 // dtor of EmbeddedWorkerInstance::StartTask). 487 // dtor of EmbeddedWorkerInstance::StartTask).
441 EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status); 488 EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status);
(...skipping 12 matching lines...) Expand all
454 helper_.reset(new StalledInStartWorkerHelper()); 501 helper_.reset(new StalledInStartWorkerHelper());
455 std::unique_ptr<EmbeddedWorkerInstance> worker = 502 std::unique_ptr<EmbeddedWorkerInstance> worker =
456 embedded_worker_registry()->CreateWorker(); 503 embedded_worker_registry()->CreateWorker();
457 worker->AddListener(this); 504 worker->AddListener(this);
458 505
459 // Run the start worker sequence until a start worker message is sent. 506 // Run the start worker sequence until a start worker message is sent.
460 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; 507 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE;
461 std::unique_ptr<EmbeddedWorkerStartParams> params = 508 std::unique_ptr<EmbeddedWorkerStartParams> params =
462 CreateStartParams(version_id, scope, url); 509 CreateStartParams(version_id, scope, url);
463 worker->Start( 510 worker->Start(
464 std::move(params), CreateEventDispatcher(), 511 std::move(params), CreateProviderClientInfoGetter(),
512 CreateEventDispatcher(),
465 base::Bind(&SaveStatusAndCall, &status, base::Bind(&base::DoNothing))); 513 base::Bind(&SaveStatusAndCall, &status, base::Bind(&base::DoNothing)));
466 base::RunLoop().RunUntilIdle(); 514 base::RunLoop().RunUntilIdle();
467 515
468 ASSERT_EQ(2u, events_.size()); 516 ASSERT_EQ(2u, events_.size());
469 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); 517 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type);
470 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); 518 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type);
471 events_.clear(); 519 events_.clear();
472 520
473 worker->Detach(); 521 worker->Detach();
474 base::RunLoop().RunUntilIdle(); 522 base::RunLoop().RunUntilIdle();
(...skipping 19 matching lines...) Expand all
494 std::unique_ptr<EmbeddedWorkerInstance> worker = 542 std::unique_ptr<EmbeddedWorkerInstance> worker =
495 embedded_worker_registry()->CreateWorker(); 543 embedded_worker_registry()->CreateWorker();
496 worker->AddListener(this); 544 worker->AddListener(this);
497 545
498 // Stop the start worker sequence before a process is allocated. 546 // Stop the start worker sequence before a process is allocated.
499 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; 547 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE;
500 548
501 std::unique_ptr<EmbeddedWorkerStartParams> params = 549 std::unique_ptr<EmbeddedWorkerStartParams> params =
502 CreateStartParams(version_id, scope, url); 550 CreateStartParams(version_id, scope, url);
503 worker->Start( 551 worker->Start(
504 std::move(params), CreateEventDispatcher(), 552 std::move(params), CreateProviderClientInfoGetter(),
553 CreateEventDispatcher(),
505 base::Bind(&SaveStatusAndCall, &status, base::Bind(&base::DoNothing))); 554 base::Bind(&SaveStatusAndCall, &status, base::Bind(&base::DoNothing)));
506 worker->Stop(); 555 worker->Stop();
507 base::RunLoop().RunUntilIdle(); 556 base::RunLoop().RunUntilIdle();
508 557
509 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status()); 558 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status());
510 EXPECT_EQ(ChildProcessHost::kInvalidUniqueID, worker->process_id()); 559 EXPECT_EQ(ChildProcessHost::kInvalidUniqueID, worker->process_id());
511 560
512 // The start callback should not be aborted by stop (see a comment on the dtor 561 // The start callback should not be aborted by stop (see a comment on the dtor
513 // of EmbeddedWorkerInstance::StartTask). 562 // of EmbeddedWorkerInstance::StartTask).
514 EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status); 563 EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status);
515 564
516 // "PROCESS_ALLOCATED" event should not be recorded. 565 // "PROCESS_ALLOCATED" event should not be recorded.
517 ASSERT_EQ(1u, events_.size()); 566 ASSERT_EQ(1u, events_.size());
518 EXPECT_EQ(DETACHED, events_[0].type); 567 EXPECT_EQ(DETACHED, events_[0].type);
519 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, events_[0].status); 568 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, events_[0].status);
520 events_.clear(); 569 events_.clear();
521 570
522 // Restart the worker. 571 // Restart the worker.
523 status = SERVICE_WORKER_ERROR_MAX_VALUE; 572 status = SERVICE_WORKER_ERROR_MAX_VALUE;
524 std::unique_ptr<base::RunLoop> run_loop(new base::RunLoop); 573 std::unique_ptr<base::RunLoop> run_loop(new base::RunLoop);
525 params = CreateStartParams(version_id, scope, url); 574 params = CreateStartParams(version_id, scope, url);
526 worker->Start( 575 worker->Start(
527 std::move(params), CreateEventDispatcher(), 576 std::move(params), CreateProviderClientInfoGetter(),
577 CreateEventDispatcher(),
528 base::Bind(&SaveStatusAndCall, &status, run_loop->QuitClosure())); 578 base::Bind(&SaveStatusAndCall, &status, run_loop->QuitClosure()));
529 run_loop->Run(); 579 run_loop->Run();
530 580
531 EXPECT_EQ(SERVICE_WORKER_OK, status); 581 EXPECT_EQ(SERVICE_WORKER_OK, status);
532 ASSERT_EQ(3u, events_.size()); 582 ASSERT_EQ(3u, events_.size());
533 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); 583 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type);
534 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); 584 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type);
535 EXPECT_EQ(STARTED, events_[2].type); 585 EXPECT_EQ(STARTED, events_[2].type);
536 586
537 // Tear down the worker. 587 // Tear down the worker.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
569 embedded_worker_registry()->CreateWorker(); 619 embedded_worker_registry()->CreateWorker();
570 worker->AddListener(this); 620 worker->AddListener(this);
571 621
572 // Run the start worker sequence until pause after download. 622 // Run the start worker sequence until pause after download.
573 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; 623 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE;
574 624
575 std::unique_ptr<EmbeddedWorkerStartParams> params = 625 std::unique_ptr<EmbeddedWorkerStartParams> params =
576 CreateStartParams(version_id, scope, url); 626 CreateStartParams(version_id, scope, url);
577 params->pause_after_download = true; 627 params->pause_after_download = true;
578 worker->Start( 628 worker->Start(
579 std::move(params), CreateEventDispatcher(), 629 std::move(params), CreateProviderClientInfoGetter(),
630 CreateEventDispatcher(),
580 base::Bind(&SaveStatusAndCall, &status, base::Bind(&base::DoNothing))); 631 base::Bind(&SaveStatusAndCall, &status, base::Bind(&base::DoNothing)));
581 base::RunLoop().RunUntilIdle(); 632 base::RunLoop().RunUntilIdle();
582 633
583 // Make the worker stopping and attempt to send a resume after download 634 // Make the worker stopping and attempt to send a resume after download
584 // message. 635 // message.
585 worker->Stop(); 636 worker->Stop();
586 worker->ResumeAfterDownload(); 637 worker->ResumeAfterDownload();
587 base::RunLoop().RunUntilIdle(); 638 base::RunLoop().RunUntilIdle();
588 639
589 // The resume after download message should not have been sent. 640 // The resume after download message should not have been sent.
590 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status()); 641 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status());
591 EXPECT_FALSE(was_resume_after_download_called); 642 EXPECT_FALSE(was_resume_after_download_called);
592 } 643 }
593 644
594 TEST_F(EmbeddedWorkerInstanceTest, StopAfterSendingStartWorkerMessage) { 645 TEST_F(EmbeddedWorkerInstanceTest, StopAfterSendingStartWorkerMessage) {
595 const int64_t version_id = 55L; 646 const int64_t version_id = 55L;
596 const GURL scope("http://example.com/"); 647 const GURL scope("http://example.com/");
597 const GURL url("http://example.com/worker.js"); 648 const GURL url("http://example.com/worker.js");
598 649
599 helper_.reset(new StalledInStartWorkerHelper); 650 helper_.reset(new StalledInStartWorkerHelper);
600 std::unique_ptr<EmbeddedWorkerInstance> worker = 651 std::unique_ptr<EmbeddedWorkerInstance> worker =
601 embedded_worker_registry()->CreateWorker(); 652 embedded_worker_registry()->CreateWorker();
602 worker->AddListener(this); 653 worker->AddListener(this);
603 654
604 // Run the start worker sequence until a start worker message is sent. 655 // Run the start worker sequence until a start worker message is sent.
605 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; 656 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE;
606 std::unique_ptr<EmbeddedWorkerStartParams> params = 657 std::unique_ptr<EmbeddedWorkerStartParams> params =
607 CreateStartParams(version_id, scope, url); 658 CreateStartParams(version_id, scope, url);
608 worker->Start( 659 worker->Start(
609 std::move(params), CreateEventDispatcher(), 660 std::move(params), CreateProviderClientInfoGetter(),
661 CreateEventDispatcher(),
610 base::Bind(&SaveStatusAndCall, &status, base::Bind(&base::DoNothing))); 662 base::Bind(&SaveStatusAndCall, &status, base::Bind(&base::DoNothing)));
611 base::RunLoop().RunUntilIdle(); 663 base::RunLoop().RunUntilIdle();
612 664
613 ASSERT_EQ(2u, events_.size()); 665 ASSERT_EQ(2u, events_.size());
614 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); 666 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type);
615 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); 667 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type);
616 events_.clear(); 668 events_.clear();
617 669
618 worker->Stop(); 670 worker->Stop();
619 base::RunLoop().RunUntilIdle(); 671 base::RunLoop().RunUntilIdle();
(...skipping 12 matching lines...) Expand all
632 events_.clear(); 684 events_.clear();
633 685
634 // Restart the worker. 686 // Restart the worker.
635 static_cast<StalledInStartWorkerHelper*>(helper_.get()) 687 static_cast<StalledInStartWorkerHelper*>(helper_.get())
636 ->set_force_stall_in_start(false); 688 ->set_force_stall_in_start(false);
637 status = SERVICE_WORKER_ERROR_MAX_VALUE; 689 status = SERVICE_WORKER_ERROR_MAX_VALUE;
638 std::unique_ptr<base::RunLoop> run_loop(new base::RunLoop); 690 std::unique_ptr<base::RunLoop> run_loop(new base::RunLoop);
639 691
640 params = CreateStartParams(version_id, scope, url); 692 params = CreateStartParams(version_id, scope, url);
641 worker->Start( 693 worker->Start(
642 std::move(params), CreateEventDispatcher(), 694 std::move(params), CreateProviderClientInfoGetter(),
695 CreateEventDispatcher(),
643 base::Bind(&SaveStatusAndCall, &status, run_loop->QuitClosure())); 696 base::Bind(&SaveStatusAndCall, &status, run_loop->QuitClosure()));
644 run_loop->Run(); 697 run_loop->Run();
645 698
646 // The worker should be started. 699 // The worker should be started.
647 EXPECT_EQ(SERVICE_WORKER_OK, status); 700 EXPECT_EQ(SERVICE_WORKER_OK, status);
648 ASSERT_EQ(3u, events_.size()); 701 ASSERT_EQ(3u, events_.size());
649 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); 702 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type);
650 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); 703 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type);
651 EXPECT_EQ(STARTED, events_[2].type); 704 EXPECT_EQ(STARTED, events_[2].type);
652 705
(...skipping 10 matching lines...) Expand all
663 helper_->SimulateAddProcessToPattern(pattern, 716 helper_->SimulateAddProcessToPattern(pattern,
664 helper_->mock_render_process_id()); 717 helper_->mock_render_process_id());
665 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 718 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
666 worker->AddListener(this); 719 worker->AddListener(this);
667 720
668 // Start the worker. 721 // Start the worker.
669 base::RunLoop run_loop; 722 base::RunLoop run_loop;
670 std::unique_ptr<EmbeddedWorkerStartParams> params = 723 std::unique_ptr<EmbeddedWorkerStartParams> params =
671 CreateStartParams(version_id, pattern, url); 724 CreateStartParams(version_id, pattern, url);
672 worker->Start( 725 worker->Start(
673 std::move(params), CreateEventDispatcher(), 726 std::move(params), CreateProviderClientInfoGetter(),
727 CreateEventDispatcher(),
674 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure())); 728 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure()));
675 run_loop.Run(); 729 run_loop.Run();
676 730
677 // Detach. 731 // Detach.
678 int process_id = worker->process_id(); 732 int process_id = worker->process_id();
679 worker->Detach(); 733 worker->Detach();
680 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status()); 734 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status());
681 735
682 // Send the registry a message from the detached worker. Nothing should 736 // Send the registry a message from the detached worker. Nothing should
683 // happen. 737 // happen.
(...skipping 13 matching lines...) Expand all
697 751
698 std::unique_ptr<EmbeddedWorkerInstance> worker = 752 std::unique_ptr<EmbeddedWorkerInstance> worker =
699 embedded_worker_registry()->CreateWorker(); 753 embedded_worker_registry()->CreateWorker();
700 helper_->SimulateAddProcessToPattern(pattern, 754 helper_->SimulateAddProcessToPattern(pattern,
701 helper_->mock_render_process_id()); 755 helper_->mock_render_process_id());
702 worker->AddListener(this); 756 worker->AddListener(this);
703 757
704 // Attempt to start the worker. 758 // Attempt to start the worker.
705 std::unique_ptr<EmbeddedWorkerStartParams> params = 759 std::unique_ptr<EmbeddedWorkerStartParams> params =
706 CreateStartParams(version_id, pattern, url); 760 CreateStartParams(version_id, pattern, url);
707 worker->Start(std::move(params), CreateEventDispatcher(), 761 worker->Start(std::move(params), CreateProviderClientInfoGetter(),
762 CreateEventDispatcher(),
708 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 763 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
709 base::RunLoop().RunUntilIdle(); 764 base::RunLoop().RunUntilIdle();
710 765
711 // Worker should handle the failure of binding as detach. 766 // Worker should handle the failure of binding as detach.
712 ASSERT_EQ(2u, events_.size()); 767 ASSERT_EQ(2u, events_.size());
713 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); 768 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type);
714 EXPECT_EQ(DETACHED, events_[1].type); 769 EXPECT_EQ(DETACHED, events_[1].type);
715 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, events_[1].status); 770 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, events_[1].status);
716 } 771 }
717 772
718 class FailEmbeddedWorkerInstanceClientImpl 773 class FailEmbeddedWorkerInstanceClientImpl
719 : public EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient { 774 : public EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient {
720 public: 775 public:
721 explicit FailEmbeddedWorkerInstanceClientImpl( 776 explicit FailEmbeddedWorkerInstanceClientImpl(
722 base::WeakPtr<EmbeddedWorkerTestHelper> helper) 777 base::WeakPtr<EmbeddedWorkerTestHelper> helper)
723 : EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient(helper) {} 778 : EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient(helper) {}
724 779
725 private: 780 private:
726 void StartWorker( 781 void StartWorker(const EmbeddedWorkerStartParams&,
727 const EmbeddedWorkerStartParams& /* unused */, 782 mojom::ServiceWorkerEventDispatcherRequest,
728 mojom::ServiceWorkerEventDispatcherRequest /* unused */, 783 mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo,
729 mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo /* unused */) 784 mojom::ServiceWorkerProviderClientInfoPtr) override {
730 override {
731 helper_->mock_instance_clients()->clear(); 785 helper_->mock_instance_clients()->clear();
732 } 786 }
733 }; 787 };
734 788
735 TEST_F(EmbeddedWorkerInstanceTest, RemoveRemoteInterface) { 789 TEST_F(EmbeddedWorkerInstanceTest, RemoveRemoteInterface) {
736 const int64_t version_id = 55L; 790 const int64_t version_id = 55L;
737 const GURL pattern("http://example.com/"); 791 const GURL pattern("http://example.com/");
738 const GURL url("http://example.com/worker.js"); 792 const GURL url("http://example.com/worker.js");
739 793
740 // Let StartWorker fail; binding is discarded in the middle of IPC 794 // Let StartWorker fail; binding is discarded in the middle of IPC
741 helper_->RegisterMockInstanceClient( 795 helper_->RegisterMockInstanceClient(
742 base::MakeUnique<FailEmbeddedWorkerInstanceClientImpl>( 796 base::MakeUnique<FailEmbeddedWorkerInstanceClientImpl>(
743 helper_->AsWeakPtr())); 797 helper_->AsWeakPtr()));
744 ASSERT_EQ(mock_instance_clients()->size(), 1UL); 798 ASSERT_EQ(mock_instance_clients()->size(), 1UL);
745 799
746 std::unique_ptr<EmbeddedWorkerInstance> worker = 800 std::unique_ptr<EmbeddedWorkerInstance> worker =
747 embedded_worker_registry()->CreateWorker(); 801 embedded_worker_registry()->CreateWorker();
748 helper_->SimulateAddProcessToPattern(pattern, 802 helper_->SimulateAddProcessToPattern(pattern,
749 helper_->mock_render_process_id()); 803 helper_->mock_render_process_id());
750 worker->AddListener(this); 804 worker->AddListener(this);
751 805
752 // Attempt to start the worker. 806 // Attempt to start the worker.
753 std::unique_ptr<EmbeddedWorkerStartParams> params = 807 std::unique_ptr<EmbeddedWorkerStartParams> params =
754 CreateStartParams(version_id, pattern, url); 808 CreateStartParams(version_id, pattern, url);
755 worker->Start(std::move(params), CreateEventDispatcher(), 809 worker->Start(std::move(params), CreateProviderClientInfoGetter(),
810 CreateEventDispatcher(),
756 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 811 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
757 base::RunLoop().RunUntilIdle(); 812 base::RunLoop().RunUntilIdle();
758 813
759 // Worker should handle the sudden shutdown as detach. 814 // Worker should handle the sudden shutdown as detach.
760 ASSERT_EQ(3u, events_.size()); 815 ASSERT_EQ(3u, events_.size());
761 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); 816 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type);
762 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); 817 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type);
763 EXPECT_EQ(DETACHED, events_[2].type); 818 EXPECT_EQ(DETACHED, events_[2].type);
764 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, events_[2].status); 819 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, events_[2].status);
765 } 820 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
801 helper_->SimulateAddProcessToPattern(pattern, 856 helper_->SimulateAddProcessToPattern(pattern,
802 helper_->mock_render_process_id()); 857 helper_->mock_render_process_id());
803 worker->AddListener(this); 858 worker->AddListener(this);
804 859
805 // Attempt to start the worker and immediate AddMessageToConsole should not 860 // Attempt to start the worker and immediate AddMessageToConsole should not
806 // cause a crash. 861 // cause a crash.
807 std::pair<blink::WebConsoleMessage::Level, std::string> test_message = 862 std::pair<blink::WebConsoleMessage::Level, std::string> test_message =
808 std::make_pair(blink::WebConsoleMessage::kLevelVerbose, ""); 863 std::make_pair(blink::WebConsoleMessage::kLevelVerbose, "");
809 std::unique_ptr<EmbeddedWorkerStartParams> params = 864 std::unique_ptr<EmbeddedWorkerStartParams> params =
810 CreateStartParams(version_id, pattern, url); 865 CreateStartParams(version_id, pattern, url);
811 worker->Start(std::move(params), CreateEventDispatcher(), 866 worker->Start(std::move(params), CreateProviderClientInfoGetter(),
867 CreateEventDispatcher(),
812 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 868 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
813 worker->AddMessageToConsole(test_message.first, test_message.second); 869 worker->AddMessageToConsole(test_message.first, test_message.second);
814 base::RunLoop().RunUntilIdle(); 870 base::RunLoop().RunUntilIdle();
815 871
816 // Messages sent before sending StartWorker message won't be dispatched. 872 // Messages sent before sending StartWorker message won't be dispatched.
817 ASSERT_EQ(0UL, instance_client_rawptr->message().size()); 873 ASSERT_EQ(0UL, instance_client_rawptr->message().size());
818 ASSERT_EQ(3UL, events_.size()); 874 ASSERT_EQ(3UL, events_.size());
819 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); 875 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type);
820 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); 876 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type);
821 EXPECT_EQ(STARTED, events_[2].type); 877 EXPECT_EQ(STARTED, events_[2].type);
822 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status()); 878 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status());
823 879
824 worker->AddMessageToConsole(test_message.first, test_message.second); 880 worker->AddMessageToConsole(test_message.first, test_message.second);
825 base::RunLoop().RunUntilIdle(); 881 base::RunLoop().RunUntilIdle();
826 882
827 // Messages sent after sending StartWorker message should be reached to 883 // Messages sent after sending StartWorker message should be reached to
828 // the renderer. 884 // the renderer.
829 ASSERT_EQ(1UL, instance_client_rawptr->message().size()); 885 ASSERT_EQ(1UL, instance_client_rawptr->message().size());
830 EXPECT_EQ(test_message, instance_client_rawptr->message()[0]); 886 EXPECT_EQ(test_message, instance_client_rawptr->message()[0]);
831 887
832 // Ensure the worker is stopped. 888 // Ensure the worker is stopped.
833 worker->Stop(); 889 worker->Stop();
834 base::RunLoop().RunUntilIdle(); 890 base::RunLoop().RunUntilIdle();
835 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status()); 891 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status());
836 } 892 }
837 893
838 } // namespace content 894 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698