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

Side by Side Diff: content/browser/service_worker/embedded_worker_instance.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 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 <utility> 7 #include <utility>
8 8
9 #include "base/bind_helpers.h" 9 #include "base/bind_helpers.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
11 #include "base/memory/ptr_util.h" 11 #include "base/memory/ptr_util.h"
12 #include "base/metrics/histogram_macros.h" 12 #include "base/metrics/histogram_macros.h"
13 #include "base/threading/non_thread_safe.h" 13 #include "base/threading/non_thread_safe.h"
14 #include "base/trace_event/trace_event.h" 14 #include "base/trace_event/trace_event.h"
15 #include "content/browser/devtools/service_worker_devtools_manager.h" 15 #include "content/browser/devtools/service_worker_devtools_manager.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/embedded_worker_status.h" 17 #include "content/browser/service_worker/embedded_worker_status.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/common/content_switches_internal.h" 19 #include "content/common/content_switches_internal.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_settings.h" 21 #include "content/common/service_worker/embedded_worker_settings.h"
22 #include "content/common/service_worker/embedded_worker_setup.mojom.h" 22 #include "content/common/service_worker/embedded_worker_setup.mojom.h"
23 #include "content/common/service_worker/embedded_worker_start_params.h"
24 #include "content/common/service_worker/service_worker_types.h" 23 #include "content/common/service_worker/service_worker_types.h"
25 #include "content/common/service_worker/service_worker_utils.h"
26 #include "content/public/browser/browser_thread.h" 24 #include "content/public/browser/browser_thread.h"
27 #include "content/public/browser/content_browser_client.h" 25 #include "content/public/browser/content_browser_client.h"
28 #include "content/public/browser/render_process_host.h" 26 #include "content/public/browser/render_process_host.h"
29 #include "content/public/common/child_process_host.h" 27 #include "content/public/common/child_process_host.h"
30 #include "content/public/common/content_switches.h"
31 #include "ipc/ipc_message.h" 28 #include "ipc/ipc_message.h"
32 #include "services/shell/public/cpp/interface_provider.h" 29 #include "services/shell/public/cpp/interface_provider.h"
33 #include "services/shell/public/cpp/interface_registry.h" 30 #include "services/shell/public/cpp/interface_registry.h"
34 #include "url/gurl.h" 31 #include "url/gurl.h"
35 32
36 namespace content { 33 namespace content {
37 34
38 namespace { 35 namespace {
39 36
40 // When a service worker version's failure count exceeds 37 // When a service worker version's failure count exceeds
(...skipping 24 matching lines...) Expand all
65 ServiceWorkerDevToolsManager::GetInstance()->WorkerVersionInstalled( 62 ServiceWorkerDevToolsManager::GetInstance()->WorkerVersionInstalled(
66 worker_process_id, worker_route_id); 63 worker_process_id, worker_route_id);
67 } 64 }
68 65
69 void NotifyWorkerVersionDoomedOnUI(int worker_process_id, int worker_route_id) { 66 void NotifyWorkerVersionDoomedOnUI(int worker_process_id, int worker_route_id) {
70 DCHECK_CURRENTLY_ON(BrowserThread::UI); 67 DCHECK_CURRENTLY_ON(BrowserThread::UI);
71 ServiceWorkerDevToolsManager::GetInstance()->WorkerVersionDoomed( 68 ServiceWorkerDevToolsManager::GetInstance()->WorkerVersionDoomed(
72 worker_process_id, worker_route_id); 69 worker_process_id, worker_route_id);
73 } 70 }
74 71
75 void SetupOnUI( 72 void RegisterToWorkerDevToolsManagerOnUI(
76 int process_id, 73 int process_id,
77 const ServiceWorkerContextCore* service_worker_context, 74 const ServiceWorkerContextCore* service_worker_context,
78 const base::WeakPtr<ServiceWorkerContextCore>& service_worker_context_weak, 75 const base::WeakPtr<ServiceWorkerContextCore>& service_worker_context_weak,
79 int64_t service_worker_version_id, 76 int64_t service_worker_version_id,
80 const GURL& url, 77 const GURL& url,
81 const GURL& scope, 78 const GURL& scope,
82 bool is_installed, 79 bool is_installed,
83 mojom::EmbeddedWorkerInstanceClientRequest request,
84 const base::Callback<void(int worker_devtools_agent_route_id, 80 const base::Callback<void(int worker_devtools_agent_route_id,
85 bool wait_for_debugger)>& callback) { 81 bool wait_for_debugger)>& callback) {
86 DCHECK_CURRENTLY_ON(BrowserThread::UI); 82 DCHECK_CURRENTLY_ON(BrowserThread::UI);
87 int worker_devtools_agent_route_id = MSG_ROUTING_NONE; 83 int worker_devtools_agent_route_id = MSG_ROUTING_NONE;
88 bool wait_for_debugger = false; 84 bool wait_for_debugger = false;
89 if (RenderProcessHost* rph = RenderProcessHost::FromID(process_id)) { 85 if (RenderProcessHost* rph = RenderProcessHost::FromID(process_id)) {
90 // |rph| may be NULL in unit tests. 86 // |rph| may be NULL in unit tests.
91 worker_devtools_agent_route_id = rph->GetNextRoutingID(); 87 worker_devtools_agent_route_id = rph->GetNextRoutingID();
92 wait_for_debugger = 88 wait_for_debugger =
93 ServiceWorkerDevToolsManager::GetInstance()->WorkerCreated( 89 ServiceWorkerDevToolsManager::GetInstance()->WorkerCreated(
94 process_id, worker_devtools_agent_route_id, 90 process_id, worker_devtools_agent_route_id,
95 ServiceWorkerDevToolsManager::ServiceWorkerIdentifier( 91 ServiceWorkerDevToolsManager::ServiceWorkerIdentifier(
96 service_worker_context, service_worker_context_weak, 92 service_worker_context, service_worker_context_weak,
97 service_worker_version_id, url, scope), 93 service_worker_version_id, url, scope),
98 is_installed); 94 is_installed);
99 if (request.is_pending())
100 rph->GetRemoteInterfaces()->GetInterface(std::move(request));
101 } 95 }
102 BrowserThread::PostTask( 96 BrowserThread::PostTask(
103 BrowserThread::IO, 97 BrowserThread::IO,
104 FROM_HERE, 98 FROM_HERE,
105 base::Bind(callback, worker_devtools_agent_route_id, wait_for_debugger)); 99 base::Bind(callback, worker_devtools_agent_route_id, wait_for_debugger));
106 } 100 }
107 101
108 void SetupMojoOnUIThread( 102 void SetupMojoOnUIThread(
109 int process_id, 103 int process_id,
110 int thread_id, 104 int thread_id,
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 204
211 // A task to allocate a worker process and to send a start worker message. This 205 // A task to allocate a worker process and to send a start worker message. This
212 // is created on EmbeddedWorkerInstance::Start(), owned by the instance and 206 // is created on EmbeddedWorkerInstance::Start(), owned by the instance and
213 // destroyed on EmbeddedWorkerInstance::OnScriptEvaluated(). 207 // destroyed on EmbeddedWorkerInstance::OnScriptEvaluated().
214 // We can abort starting worker by destroying this task anytime during the 208 // We can abort starting worker by destroying this task anytime during the
215 // sequence. 209 // sequence.
216 class EmbeddedWorkerInstance::StartTask { 210 class EmbeddedWorkerInstance::StartTask {
217 public: 211 public:
218 enum class ProcessAllocationState { NOT_ALLOCATED, ALLOCATING, ALLOCATED }; 212 enum class ProcessAllocationState { NOT_ALLOCATED, ALLOCATING, ALLOCATED };
219 213
220 StartTask(EmbeddedWorkerInstance* instance, 214 StartTask(EmbeddedWorkerInstance* instance, const GURL& script_url)
221 const GURL& script_url,
222 mojom::EmbeddedWorkerInstanceClientRequest request)
223 : instance_(instance), 215 : instance_(instance),
224 request_(std::move(request)),
225 state_(ProcessAllocationState::NOT_ALLOCATED), 216 state_(ProcessAllocationState::NOT_ALLOCATED),
226 is_installed_(false), 217 is_installed_(false),
227 started_during_browser_startup_(false), 218 started_during_browser_startup_(false),
228 weak_factory_(this) { 219 weak_factory_(this) {
229 TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker", "EmbeddedWorkerInstance::Start", 220 TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker", "EmbeddedWorkerInstance::Start",
230 this, "Script", script_url.spec()); 221 this, "Script", script_url.spec());
231 } 222 }
232 223
233 ~StartTask() { 224 ~StartTask() {
234 DCHECK_CURRENTLY_ON(BrowserThread::IO); 225 DCHECK_CURRENTLY_ON(BrowserThread::IO);
(...skipping 21 matching lines...) Expand all
256 // EmbeddedWorkerInstance::Start(), that is, ServiceWorkerVersion does not 247 // EmbeddedWorkerInstance::Start(), that is, ServiceWorkerVersion does not
257 // expect it when the start worker sequence is canceled by Stop() because 248 // expect it when the start worker sequence is canceled by Stop() because
258 // the callback, ServiceWorkerVersion::OnStartSentAndScriptEvaluated(), 249 // the callback, ServiceWorkerVersion::OnStartSentAndScriptEvaluated(),
259 // could drain valid start requests queued in the version. After the worker 250 // could drain valid start requests queued in the version. After the worker
260 // is stopped, the version attempts to restart the worker if there are 251 // is stopped, the version attempts to restart the worker if there are
261 // requests in the queue. See ServiceWorkerVersion::OnStoppedInternal() for 252 // requests in the queue. See ServiceWorkerVersion::OnStoppedInternal() for
262 // details. 253 // details.
263 // TODO(nhiroki): Reconsider this bizarre layering. 254 // TODO(nhiroki): Reconsider this bizarre layering.
264 } 255 }
265 256
266 void Start(std::unique_ptr<EmbeddedWorkerStartParams> params, 257 void Start(std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params,
267 const StatusCallback& callback) { 258 const StatusCallback& callback) {
268 DCHECK_CURRENTLY_ON(BrowserThread::IO); 259 DCHECK_CURRENTLY_ON(BrowserThread::IO);
269 state_ = ProcessAllocationState::ALLOCATING; 260 state_ = ProcessAllocationState::ALLOCATING;
270 start_callback_ = callback; 261 start_callback_ = callback;
271 is_installed_ = params->is_installed; 262 is_installed_ = params->is_installed;
272 263
273 if (!GetContentClient()->browser()->IsBrowserStartupComplete()) 264 if (!GetContentClient()->browser()->IsBrowserStartupComplete())
274 started_during_browser_startup_ = true; 265 started_during_browser_startup_ = true;
275 266
276 GURL scope(params->scope); 267 GURL scope(params->scope);
(...skipping 14 matching lines...) Expand all
291 DCHECK_CURRENTLY_ON(BrowserThread::IO); 282 DCHECK_CURRENTLY_ON(BrowserThread::IO);
292 StatusCallback callback = task->start_callback_; 283 StatusCallback callback = task->start_callback_;
293 task->start_callback_.Reset(); 284 task->start_callback_.Reset();
294 callback.Run(status); 285 callback.Run(status);
295 // |task| may be destroyed. 286 // |task| may be destroyed.
296 } 287 }
297 288
298 bool is_installed() const { return is_installed_; } 289 bool is_installed() const { return is_installed_; }
299 290
300 private: 291 private:
301 void OnProcessAllocated(std::unique_ptr<EmbeddedWorkerStartParams> params, 292 void OnProcessAllocated(
302 ServiceWorkerStatusCode status, 293 std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params,
303 int process_id, 294 ServiceWorkerStatusCode status,
304 bool is_new_process, 295 int process_id,
305 const EmbeddedWorkerSettings& settings) { 296 bool is_new_process,
297 const EmbeddedWorkerSettings& settings) {
306 DCHECK_CURRENTLY_ON(BrowserThread::IO); 298 DCHECK_CURRENTLY_ON(BrowserThread::IO);
307 299
308 if (status != SERVICE_WORKER_OK) { 300 if (status != SERVICE_WORKER_OK) {
309 TRACE_EVENT_ASYNC_STEP_PAST1( 301 TRACE_EVENT_ASYNC_STEP_PAST1(
310 "ServiceWorker", "EmbeddedWorkerInstance::Start", this, 302 "ServiceWorker", "EmbeddedWorkerInstance::Start", this,
311 "OnProcessAllocated", "Error", ServiceWorkerStatusToString(status)); 303 "OnProcessAllocated", "Error", ServiceWorkerStatusToString(status));
312 DCHECK_EQ(ChildProcessHost::kInvalidUniqueID, process_id); 304 DCHECK_EQ(ChildProcessHost::kInvalidUniqueID, process_id);
313 StatusCallback callback = start_callback_; 305 StatusCallback callback = start_callback_;
314 start_callback_.Reset(); 306 start_callback_.Reset();
315 instance_->OnStartFailed(callback, status); 307 instance_->OnStartFailed(callback, status);
(...skipping 27 matching lines...) Expand all
343 // TODO(bengr): Support changes to this setting while the worker 335 // TODO(bengr): Support changes to this setting while the worker
344 // is running. 336 // is running.
345 params->settings.data_saver_enabled = settings.data_saver_enabled; 337 params->settings.data_saver_enabled = settings.data_saver_enabled;
346 338
347 // Register the instance to DevToolsManager on UI thread. 339 // Register the instance to DevToolsManager on UI thread.
348 const int64_t service_worker_version_id = params->service_worker_version_id; 340 const int64_t service_worker_version_id = params->service_worker_version_id;
349 const GURL& scope = params->scope; 341 const GURL& scope = params->scope;
350 GURL script_url(params->script_url); 342 GURL script_url(params->script_url);
351 BrowserThread::PostTask( 343 BrowserThread::PostTask(
352 BrowserThread::UI, FROM_HERE, 344 BrowserThread::UI, FROM_HERE,
353 base::Bind(&SetupOnUI, process_id, instance_->context_.get(), 345 base::Bind(RegisterToWorkerDevToolsManagerOnUI, process_id,
354 instance_->context_, service_worker_version_id, script_url, 346 instance_->context_.get(), instance_->context_,
355 scope, is_installed_, base::Passed(&request_), 347 service_worker_version_id, script_url, scope, is_installed_,
356 base::Bind(&StartTask::OnSetupOnUICompleted, 348 base::Bind(&StartTask::OnRegisteredToDevToolsManager,
357 weak_factory_.GetWeakPtr(), base::Passed(&params), 349 weak_factory_.GetWeakPtr(), base::Passed(&params),
358 is_new_process))); 350 is_new_process)));
359 } 351 }
360 352
361 void OnSetupOnUICompleted(std::unique_ptr<EmbeddedWorkerStartParams> params, 353 void OnRegisteredToDevToolsManager(
362 bool is_new_process, 354 std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params,
363 int worker_devtools_agent_route_id, 355 bool is_new_process,
364 bool wait_for_debugger) { 356 int worker_devtools_agent_route_id,
357 bool wait_for_debugger) {
365 DCHECK_CURRENTLY_ON(BrowserThread::IO); 358 DCHECK_CURRENTLY_ON(BrowserThread::IO);
366 TRACE_EVENT_ASYNC_STEP_PAST0("ServiceWorker", 359 TRACE_EVENT_ASYNC_STEP_PAST0("ServiceWorker",
367 "EmbeddedWorkerInstance::Start", this, 360 "EmbeddedWorkerInstance::Start", this,
368 "OnSetupOnUICompleted"); 361 "OnRegisteredToDevToolsManager");
369 362
370 // Notify the instance that it is registered to the devtools manager. 363 // Notify the instance that it is registered to the devtools manager.
371 instance_->OnRegisteredToDevToolsManager( 364 instance_->OnRegisteredToDevToolsManager(
372 is_new_process, worker_devtools_agent_route_id, wait_for_debugger); 365 is_new_process, worker_devtools_agent_route_id, wait_for_debugger);
373 366
374 params->worker_devtools_agent_route_id = worker_devtools_agent_route_id; 367 params->worker_devtools_agent_route_id = worker_devtools_agent_route_id;
375 params->wait_for_debugger = wait_for_debugger; 368 params->wait_for_debugger = wait_for_debugger;
376 369 SendStartWorker(std::move(params));
377 if (ServiceWorkerUtils::IsMojoForServiceWorkerEnabled())
378 instance_->SendMojoStartWorker(std::move(params));
379 else
380 SendStartWorker(std::move(params));
381 } 370 }
382 371
383 void SendStartWorker(std::unique_ptr<EmbeddedWorkerStartParams> params) { 372 void SendStartWorker(
373 std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params) {
384 DCHECK_CURRENTLY_ON(BrowserThread::IO); 374 DCHECK_CURRENTLY_ON(BrowserThread::IO);
385 ServiceWorkerStatusCode status = instance_->registry_->SendStartWorker( 375 ServiceWorkerStatusCode status = instance_->registry_->SendStartWorker(
386 std::move(params), instance_->process_id()); 376 std::move(params), instance_->process_id());
387 TRACE_EVENT_ASYNC_STEP_PAST1( 377 TRACE_EVENT_ASYNC_STEP_PAST1(
388 "ServiceWorker", "EmbeddedWorkerInstance::Start", this, 378 "ServiceWorker", "EmbeddedWorkerInstance::Start", this,
389 "SendStartWorker", "Status", ServiceWorkerStatusToString(status)); 379 "SendStartWorker", "Status", ServiceWorkerStatusToString(status));
390 if (status != SERVICE_WORKER_OK) { 380 if (status != SERVICE_WORKER_OK) {
391 StatusCallback callback = start_callback_; 381 StatusCallback callback = start_callback_;
392 start_callback_.Reset(); 382 start_callback_.Reset();
393 instance_->OnStartFailed(callback, status); 383 instance_->OnStartFailed(callback, status);
394 // |this| may be destroyed. 384 // |this| may be destroyed.
395 return; 385 return;
396 } 386 }
397 instance_->OnStartWorkerMessageSent(); 387 instance_->OnStartWorkerMessageSent();
398 388
399 // |start_callback_| will be called via RunStartCallback() when the script 389 // |start_callback_| will be called via RunStartCallback() when the script
400 // is evaluated. 390 // is evaluated.
401 } 391 }
402 392
403 // |instance_| must outlive |this|. 393 // |instance_| must outlive |this|.
404 EmbeddedWorkerInstance* instance_; 394 EmbeddedWorkerInstance* instance_;
405 395
406 // Ownership is transferred by base::Passed() to a task after process
407 // allocation.
408 mojom::EmbeddedWorkerInstanceClientRequest request_;
409
410 StatusCallback start_callback_; 396 StatusCallback start_callback_;
411 ProcessAllocationState state_; 397 ProcessAllocationState state_;
412 398
413 // Used for UMA. 399 // Used for UMA.
414 bool is_installed_; 400 bool is_installed_;
415 bool started_during_browser_startup_; 401 bool started_during_browser_startup_;
416 402
417 base::WeakPtrFactory<StartTask> weak_factory_; 403 base::WeakPtrFactory<StartTask> weak_factory_;
418 404
419 DISALLOW_COPY_AND_ASSIGN(StartTask); 405 DISALLOW_COPY_AND_ASSIGN(StartTask);
420 }; 406 };
421 407
422 bool EmbeddedWorkerInstance::Listener::OnMessageReceived( 408 bool EmbeddedWorkerInstance::Listener::OnMessageReceived(
423 const IPC::Message& message) { 409 const IPC::Message& message) {
424 return false; 410 return false;
425 } 411 }
426 412
427 EmbeddedWorkerInstance::~EmbeddedWorkerInstance() { 413 EmbeddedWorkerInstance::~EmbeddedWorkerInstance() {
428 DCHECK(status_ == EmbeddedWorkerStatus::STOPPING || 414 DCHECK(status_ == EmbeddedWorkerStatus::STOPPING ||
429 status_ == EmbeddedWorkerStatus::STOPPED) 415 status_ == EmbeddedWorkerStatus::STOPPED)
430 << static_cast<int>(status_); 416 << static_cast<int>(status_);
431 devtools_proxy_.reset(); 417 devtools_proxy_.reset();
432 if (registry_->GetWorker(embedded_worker_id_)) 418 if (registry_->GetWorker(embedded_worker_id_))
433 registry_->RemoveWorker(process_id(), embedded_worker_id_); 419 registry_->RemoveWorker(process_id(), embedded_worker_id_);
434 process_handle_.reset(); 420 process_handle_.reset();
435 } 421 }
436 422
437 void EmbeddedWorkerInstance::Start( 423 void EmbeddedWorkerInstance::Start(
438 std::unique_ptr<EmbeddedWorkerStartParams> params, 424 std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params,
439 const StatusCallback& callback) { 425 const StatusCallback& callback) {
440 if (!context_) { 426 if (!context_) {
441 callback.Run(SERVICE_WORKER_ERROR_ABORT); 427 callback.Run(SERVICE_WORKER_ERROR_ABORT);
442 // |this| may be destroyed by the callback. 428 // |this| may be destroyed by the callback.
443 return; 429 return;
444 } 430 }
445 DCHECK(status_ == EmbeddedWorkerStatus::STOPPED); 431 DCHECK(status_ == EmbeddedWorkerStatus::STOPPED);
446 432
447 DCHECK(!params->pause_after_download || !params->is_installed); 433 DCHECK(!params->pause_after_download || !params->is_installed);
448 DCHECK_NE(kInvalidServiceWorkerVersionId, params->service_worker_version_id); 434 DCHECK_NE(kInvalidServiceWorkerVersionId, params->service_worker_version_id);
449 step_time_ = base::TimeTicks::Now(); 435 step_time_ = base::TimeTicks::Now();
450 status_ = EmbeddedWorkerStatus::STARTING; 436 status_ = EmbeddedWorkerStatus::STARTING;
451 starting_phase_ = ALLOCATING_PROCESS; 437 starting_phase_ = ALLOCATING_PROCESS;
452 network_accessed_for_script_ = false; 438 network_accessed_for_script_ = false;
453 interface_registry_.reset(new shell::InterfaceRegistry); 439 interface_registry_.reset(new shell::InterfaceRegistry);
454 remote_interfaces_.reset(new shell::InterfaceProvider); 440 remote_interfaces_.reset(new shell::InterfaceProvider);
455 FOR_EACH_OBSERVER(Listener, listener_list_, OnStarting()); 441 FOR_EACH_OBSERVER(Listener, listener_list_, OnStarting());
456 442
457 params->embedded_worker_id = embedded_worker_id_; 443 params->embedded_worker_id = embedded_worker_id_;
458 params->worker_devtools_agent_route_id = MSG_ROUTING_NONE; 444 params->worker_devtools_agent_route_id = MSG_ROUTING_NONE;
459 params->wait_for_debugger = false; 445 params->wait_for_debugger = false;
460 params->settings.v8_cache_options = GetV8CacheOptions(); 446 params->settings.v8_cache_options = GetV8CacheOptions();
461 447
462 mojom::EmbeddedWorkerInstanceClientRequest request; 448 inflight_start_task_.reset(new StartTask(this, params->script_url));
463 if (ServiceWorkerUtils::IsMojoForServiceWorkerEnabled())
464 request = mojo::GetProxy(&client_);
465
466 inflight_start_task_.reset(
467 new StartTask(this, params->script_url, std::move(request)));
468 inflight_start_task_->Start(std::move(params), callback); 449 inflight_start_task_->Start(std::move(params), callback);
469 } 450 }
470 451
471 ServiceWorkerStatusCode EmbeddedWorkerInstance::Stop() { 452 ServiceWorkerStatusCode EmbeddedWorkerInstance::Stop() {
472 DCHECK(status_ == EmbeddedWorkerStatus::STARTING || 453 DCHECK(status_ == EmbeddedWorkerStatus::STARTING ||
473 status_ == EmbeddedWorkerStatus::RUNNING) 454 status_ == EmbeddedWorkerStatus::RUNNING)
474 << static_cast<int>(status_); 455 << static_cast<int>(status_);
475 456
476 // Abort an inflight start task. 457 // Abort an inflight start task.
477 inflight_start_task_.reset(); 458 inflight_start_task_.reset();
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
577 devtools_proxy_.reset( 558 devtools_proxy_.reset(
578 new DevToolsProxy(process_id(), worker_devtools_agent_route_id)); 559 new DevToolsProxy(process_id(), worker_devtools_agent_route_id));
579 } 560 }
580 if (wait_for_debugger) { 561 if (wait_for_debugger) {
581 // We don't measure the start time when wait_for_debugger flag is set. So 562 // We don't measure the start time when wait_for_debugger flag is set. So
582 // we set the NULL time here. 563 // we set the NULL time here.
583 step_time_ = base::TimeTicks(); 564 step_time_ = base::TimeTicks();
584 } 565 }
585 } 566 }
586 567
587 void EmbeddedWorkerInstance::SendMojoStartWorker(
588 std::unique_ptr<EmbeddedWorkerStartParams> params) {
589 client_->StartWorker(*params);
590 registry_->BindWorkerToProcess(process_id(), embedded_worker_id());
591 TRACE_EVENT_ASYNC_STEP_PAST1("ServiceWorker", "EmbeddedWorkerInstance::Start",
592 this, "SendStartWorker", "Status", "mojo");
593 OnStartWorkerMessageSent();
594 }
595
596 void EmbeddedWorkerInstance::OnStartWorkerMessageSent() { 568 void EmbeddedWorkerInstance::OnStartWorkerMessageSent() {
597 if (!step_time_.is_null()) { 569 if (!step_time_.is_null()) {
598 base::TimeDelta duration = UpdateStepTime(); 570 base::TimeDelta duration = UpdateStepTime();
599 if (inflight_start_task_->is_installed()) { 571 if (inflight_start_task_->is_installed()) {
600 ServiceWorkerMetrics::RecordTimeToSendStartWorker(duration, 572 ServiceWorkerMetrics::RecordTimeToSendStartWorker(duration,
601 start_situation_); 573 start_situation_);
602 } 574 }
603 } 575 }
604 576
605 starting_phase_ = SENT_START_WORKER; 577 starting_phase_ = SENT_START_WORKER;
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
680 if (!step_time_.is_null()) { 652 if (!step_time_.is_null()) {
681 base::TimeDelta duration = UpdateStepTime(); 653 base::TimeDelta duration = UpdateStepTime();
682 if (inflight_start_task_->is_installed()) 654 if (inflight_start_task_->is_installed())
683 ServiceWorkerMetrics::RecordTimeToStartThread(duration, start_situation_); 655 ServiceWorkerMetrics::RecordTimeToStartThread(duration, start_situation_);
684 } 656 }
685 657
686 thread_id_ = thread_id; 658 thread_id_ = thread_id;
687 FOR_EACH_OBSERVER(Listener, listener_list_, OnThreadStarted()); 659 FOR_EACH_OBSERVER(Listener, listener_list_, OnThreadStarted());
688 660
689 shell::mojom::InterfaceProviderPtr exposed_interfaces; 661 shell::mojom::InterfaceProviderPtr exposed_interfaces;
690 interface_registry_->Bind(mojo::GetProxy(&exposed_interfaces)); 662 interface_registry_->Bind(GetProxy(&exposed_interfaces));
691 shell::mojom::InterfaceProviderPtr remote_interfaces; 663 shell::mojom::InterfaceProviderPtr remote_interfaces;
692 shell::mojom::InterfaceProviderRequest request = 664 shell::mojom::InterfaceProviderRequest request = GetProxy(&remote_interfaces);
693 mojo::GetProxy(&remote_interfaces);
694 remote_interfaces_->Bind(std::move(remote_interfaces)); 665 remote_interfaces_->Bind(std::move(remote_interfaces));
695 BrowserThread::PostTask( 666 BrowserThread::PostTask(
696 BrowserThread::UI, FROM_HERE, 667 BrowserThread::UI, FROM_HERE,
697 base::Bind(SetupMojoOnUIThread, process_id(), thread_id_, 668 base::Bind(SetupMojoOnUIThread, process_id(), thread_id_,
698 base::Passed(&request), 669 base::Passed(&request),
699 base::Passed(exposed_interfaces.PassInterface()))); 670 base::Passed(exposed_interfaces.PassInterface())));
700 } 671 }
701 672
702 void EmbeddedWorkerInstance::OnScriptLoadFailed() { 673 void EmbeddedWorkerInstance::OnScriptLoadFailed() {
703 if (!inflight_start_task_) 674 if (!inflight_start_task_)
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
914 case SCRIPT_READ_FINISHED: 885 case SCRIPT_READ_FINISHED:
915 return "Script read finished"; 886 return "Script read finished";
916 case STARTING_PHASE_MAX_VALUE: 887 case STARTING_PHASE_MAX_VALUE:
917 NOTREACHED(); 888 NOTREACHED();
918 } 889 }
919 NOTREACHED() << phase; 890 NOTREACHED() << phase;
920 return std::string(); 891 return std::string();
921 } 892 }
922 893
923 } // namespace content 894 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698