| OLD | NEW |
| 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 <algorithm> | 7 #include <algorithm> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| 11 #include "base/metrics/histogram_macros.h" | 11 #include "base/metrics/histogram_macros.h" |
| 12 #include "base/threading/non_thread_safe.h" | 12 #include "base/threading/non_thread_safe.h" |
| 13 #include "base/trace_event/trace_event.h" | 13 #include "base/trace_event/trace_event.h" |
| 14 #include "content/browser/devtools/service_worker_devtools_manager.h" | 14 #include "content/browser/devtools/service_worker_devtools_manager.h" |
| 15 #include "content/browser/service_worker/embedded_worker_registry.h" | 15 #include "content/browser/service_worker/embedded_worker_registry.h" |
| 16 #include "content/browser/service_worker/service_worker_context_core.h" | 16 #include "content/browser/service_worker/service_worker_context_core.h" |
| 17 #include "content/common/content_switches_internal.h" | 17 #include "content/common/content_switches_internal.h" |
| 18 #include "content/common/mojo/service_registry_impl.h" | 18 #include "content/common/mojo/service_registry_impl.h" |
| 19 #include "content/common/service_worker/embedded_worker_messages.h" | 19 #include "content/common/service_worker/embedded_worker_messages.h" |
| 20 #include "content/common/service_worker/embedded_worker_setup.mojom.h" | 20 #include "content/common/service_worker/embedded_worker_setup.mojom.h" |
| 21 #include "content/common/service_worker/service_worker_types.h" | 21 #include "content/common/service_worker/service_worker_types.h" |
| 22 #include "content/public/browser/browser_thread.h" | 22 #include "content/public/browser/browser_thread.h" |
| 23 #include "content/public/browser/render_process_host.h" | 23 #include "content/public/browser/render_process_host.h" |
| 24 #include "ipc/ipc_message.h" | 24 #include "ipc/ipc_message.h" |
| 25 #include "mojo/common/url_type_converters.h" |
| 25 #include "url/gurl.h" | 26 #include "url/gurl.h" |
| 26 | 27 |
| 27 namespace content { | 28 namespace content { |
| 28 | 29 |
| 29 namespace { | 30 namespace { |
| 30 | 31 |
| 31 // Functor to sort by the .second element of a struct. | 32 // Functor to sort by the .second element of a struct. |
| 32 struct SecondGreater { | 33 struct SecondGreater { |
| 33 template <typename Value> | 34 template <typename Value> |
| 34 bool operator()(const Value& lhs, const Value& rhs) { | 35 bool operator()(const Value& lhs, const Value& rhs) { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 48 ServiceWorkerDevToolsManager::GetInstance()->WorkerDestroyed( | 49 ServiceWorkerDevToolsManager::GetInstance()->WorkerDestroyed( |
| 49 worker_process_id, worker_route_id); | 50 worker_process_id, worker_route_id); |
| 50 } | 51 } |
| 51 | 52 |
| 52 void NotifyWorkerStopIgnoredOnUI(int worker_process_id, int worker_route_id) { | 53 void NotifyWorkerStopIgnoredOnUI(int worker_process_id, int worker_route_id) { |
| 53 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 54 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 54 ServiceWorkerDevToolsManager::GetInstance()->WorkerStopIgnored( | 55 ServiceWorkerDevToolsManager::GetInstance()->WorkerStopIgnored( |
| 55 worker_process_id, worker_route_id); | 56 worker_process_id, worker_route_id); |
| 56 } | 57 } |
| 57 | 58 |
| 58 void RegisterToWorkerDevToolsManagerOnUI( | 59 /*void RegisterToWorkerDevToolsManagerOnUI( |
| 59 int process_id, | 60 int process_id, |
| 60 const ServiceWorkerContextCore* service_worker_context, | 61 const ServiceWorkerContextCore* service_worker_context, |
| 61 const base::WeakPtr<ServiceWorkerContextCore>& service_worker_context_weak, | 62 const base::WeakPtr<ServiceWorkerContextCore>& service_worker_context_weak, |
| 62 int64 service_worker_version_id, | 63 int64 service_worker_version_id, |
| 63 const GURL& url, | 64 const GURL& url, |
| 64 const base::Callback<void(int worker_devtools_agent_route_id, | 65 const base::Callback<void(int worker_devtools_agent_route_id, |
| 65 bool wait_for_debugger)>& callback) { | 66 bool wait_for_debugger)>& callback) { |
| 66 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 67 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 67 int worker_devtools_agent_route_id = MSG_ROUTING_NONE; | 68 int worker_devtools_agent_route_id = MSG_ROUTING_NONE; |
| 68 bool wait_for_debugger = false; | 69 bool wait_for_debugger = false; |
| 69 if (RenderProcessHost* rph = RenderProcessHost::FromID(process_id)) { | 70 if (RenderProcessHost* rph = RenderProcessHost::FromID(process_id)) { |
| 70 // |rph| may be NULL in unit tests. | 71 // |rph| may be NULL in unit tests. |
| 71 worker_devtools_agent_route_id = rph->GetNextRoutingID(); | 72 worker_devtools_agent_route_id = rph->GetNextRoutingID(); |
| 72 wait_for_debugger = | 73 wait_for_debugger = |
| 73 ServiceWorkerDevToolsManager::GetInstance()->WorkerCreated( | 74 ServiceWorkerDevToolsManager::GetInstance()->WorkerCreated( |
| 74 process_id, | 75 process_id, |
| 75 worker_devtools_agent_route_id, | 76 worker_devtools_agent_route_id, |
| 76 ServiceWorkerDevToolsManager::ServiceWorkerIdentifier( | 77 ServiceWorkerDevToolsManager::ServiceWorkerIdentifier( |
| 77 service_worker_context, | 78 service_worker_context, |
| 78 service_worker_context_weak, | 79 service_worker_context_weak, |
| 79 service_worker_version_id, | 80 service_worker_version_id, |
| 80 url)); | 81 url)); |
| 81 } | 82 } |
| 82 BrowserThread::PostTask( | 83 BrowserThread::PostTask( |
| 83 BrowserThread::IO, | 84 BrowserThread::IO, |
| 84 FROM_HERE, | 85 FROM_HERE, |
| 85 base::Bind(callback, worker_devtools_agent_route_id, wait_for_debugger)); | 86 base::Bind(callback, worker_devtools_agent_route_id, wait_for_debugger)); |
| 86 } | 87 } |
| 88 */ |
| 89 void RegisterToWorkerDevToolsManagerAndConnectToWorkerOnUI( |
| 90 int process_id, |
| 91 const ServiceWorkerContextCore* service_worker_context, |
| 92 const base::WeakPtr<ServiceWorkerContextCore>& service_worker_context_weak, |
| 93 int64 service_worker_version_id, |
| 94 const GURL& url, |
| 95 mojo::InterfaceRequest<EmbeddedWorker> embedded_worker, |
| 96 const base::Callback<void(int worker_devtools_agent_route_id, |
| 97 bool wait_for_debugger)>& callback) { |
| 98 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 99 int worker_devtools_agent_route_id = MSG_ROUTING_NONE; |
| 100 bool wait_for_debugger = false; |
| 101 if (RenderProcessHost* rph = RenderProcessHost::FromID(process_id)) { |
| 102 // |rph| may be NULL in unit tests. |
| 103 worker_devtools_agent_route_id = rph->GetNextRoutingID(); |
| 104 wait_for_debugger = |
| 105 ServiceWorkerDevToolsManager::GetInstance()->WorkerCreated( |
| 106 process_id, worker_devtools_agent_route_id, |
| 107 ServiceWorkerDevToolsManager::ServiceWorkerIdentifier( |
| 108 service_worker_context, service_worker_context_weak, |
| 109 service_worker_version_id, url)); |
| 110 rph->GetServiceRegistry()->ConnectToRemoteService(embedded_worker.Pass()); |
| 111 } |
| 112 BrowserThread::PostTask( |
| 113 BrowserThread::IO, FROM_HERE, |
| 114 base::Bind(callback, worker_devtools_agent_route_id, wait_for_debugger)); |
| 115 } |
| 87 | 116 |
| 88 void SetupMojoOnUIThread(int process_id, | 117 void SetupMojoOnUIThread(int process_id, |
| 89 int thread_id, | 118 int thread_id, |
| 90 mojo::InterfaceRequest<mojo::ServiceProvider> services, | 119 mojo::InterfaceRequest<mojo::ServiceProvider> services, |
| 91 mojo::ServiceProviderPtr exposed_services) { | 120 mojo::ServiceProviderPtr exposed_services) { |
| 92 RenderProcessHost* rph = RenderProcessHost::FromID(process_id); | 121 RenderProcessHost* rph = RenderProcessHost::FromID(process_id); |
| 93 // |rph| may be NULL in unit tests. | 122 // |rph| may be NULL in unit tests. |
| 94 if (!rph) | 123 if (!rph) |
| 95 return; | 124 return; |
| 96 EmbeddedWorkerSetupPtr setup; | 125 EmbeddedWorkerSetupPtr setup; |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 if (!context_) { | 184 if (!context_) { |
| 156 callback.Run(SERVICE_WORKER_ERROR_ABORT); | 185 callback.Run(SERVICE_WORKER_ERROR_ABORT); |
| 157 return; | 186 return; |
| 158 } | 187 } |
| 159 DCHECK(status_ == STOPPED); | 188 DCHECK(status_ == STOPPED); |
| 160 start_timing_ = base::TimeTicks::Now(); | 189 start_timing_ = base::TimeTicks::Now(); |
| 161 status_ = STARTING; | 190 status_ = STARTING; |
| 162 starting_phase_ = ALLOCATING_PROCESS; | 191 starting_phase_ = ALLOCATING_PROCESS; |
| 163 network_accessed_for_script_ = false; | 192 network_accessed_for_script_ = false; |
| 164 FOR_EACH_OBSERVER(Listener, listener_list_, OnStarting()); | 193 FOR_EACH_OBSERVER(Listener, listener_list_, OnStarting()); |
| 165 scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params( | 194 EmbeddedWorkerStartWorkerParamsPtr params = |
| 166 new EmbeddedWorkerMsg_StartWorker_Params()); | 195 EmbeddedWorkerStartWorkerParams::New(); |
| 167 TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker", | 196 TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker", |
| 168 "EmbeddedWorkerInstance::ProcessAllocate", | 197 "EmbeddedWorkerInstance::ProcessAllocate", |
| 169 params.get(), | 198 params.get(), |
| 170 "Scope", scope.spec(), | 199 "Scope", scope.spec(), |
| 171 "Script URL", script_url.spec()); | 200 "Script URL", script_url.spec()); |
| 172 params->embedded_worker_id = embedded_worker_id_; | 201 params->embedded_worker_id = embedded_worker_id_; |
| 173 params->service_worker_version_id = service_worker_version_id; | 202 params->service_worker_version_id = service_worker_version_id; |
| 174 params->scope = scope; | 203 params->scope = mojo::String::From(scope); |
| 175 params->script_url = script_url; | 204 params->script_url = mojo::String::From(script_url); |
| 176 params->worker_devtools_agent_route_id = MSG_ROUTING_NONE; | 205 params->worker_devtools_agent_route_id = MSG_ROUTING_NONE; |
| 177 params->wait_for_debugger = false; | 206 params->wait_for_debugger = false; |
| 178 params->v8_cache_options = GetV8CacheOptions(); | 207 params->v8_cache_options = GetV8CacheOptions(); |
| 179 context_->process_manager()->AllocateWorkerProcess( | 208 context_->process_manager()->AllocateWorkerProcess( |
| 180 embedded_worker_id_, | 209 embedded_worker_id_, scope, script_url, |
| 181 scope, | |
| 182 script_url, | |
| 183 base::Bind(&EmbeddedWorkerInstance::RunProcessAllocated, | 210 base::Bind(&EmbeddedWorkerInstance::RunProcessAllocated, |
| 184 weak_factory_.GetWeakPtr(), | 211 weak_factory_.GetWeakPtr(), context_, base::Passed(¶ms), |
| 185 context_, | |
| 186 base::Passed(¶ms), | |
| 187 callback)); | 212 callback)); |
| 188 } | 213 } |
| 189 | 214 |
| 190 ServiceWorkerStatusCode EmbeddedWorkerInstance::Stop() { | 215 ServiceWorkerStatusCode EmbeddedWorkerInstance::Stop() { |
| 191 DCHECK(status_ == STARTING || status_ == RUNNING) << status_; | 216 DCHECK(status_ == STARTING || status_ == RUNNING) << status_; |
| 192 ServiceWorkerStatusCode status = | 217 ServiceWorkerStatusCode status = SERVICE_WORKER_OK; |
| 193 registry_->StopWorker(process_id_, embedded_worker_id_); | 218 // registry_->StopWorker(process_id_, embedded_worker_id_); |
| 219 worker_.reset(); |
| 194 // StopWorker could fail if we can't talk to the worker, which should | 220 // StopWorker could fail if we can't talk to the worker, which should |
| 195 // basically means it's being terminated, so unconditionally change | 221 // basically means it's being terminated, so unconditionally change |
| 196 // the status to STOPPING. | 222 // the status to STOPPING. |
| 197 status_ = STOPPING; | 223 status_ = STOPPING; |
| 198 FOR_EACH_OBSERVER(Listener, listener_list_, OnStopping()); | 224 FOR_EACH_OBSERVER(Listener, listener_list_, OnStopping()); |
| 199 return status; | 225 return status; |
| 200 } | 226 } |
| 201 | 227 |
| 202 void EmbeddedWorkerInstance::StopIfIdle() { | 228 void EmbeddedWorkerInstance::StopIfIdle() { |
| 203 if (devtools_attached_) { | 229 if (devtools_attached_) { |
| (...skipping 30 matching lines...) Expand all Loading... |
| 234 thread_id_(kInvalidEmbeddedWorkerThreadId), | 260 thread_id_(kInvalidEmbeddedWorkerThreadId), |
| 235 devtools_attached_(false), | 261 devtools_attached_(false), |
| 236 network_accessed_for_script_(false), | 262 network_accessed_for_script_(false), |
| 237 weak_factory_(this) { | 263 weak_factory_(this) { |
| 238 } | 264 } |
| 239 | 265 |
| 240 // static | 266 // static |
| 241 void EmbeddedWorkerInstance::RunProcessAllocated( | 267 void EmbeddedWorkerInstance::RunProcessAllocated( |
| 242 base::WeakPtr<EmbeddedWorkerInstance> instance, | 268 base::WeakPtr<EmbeddedWorkerInstance> instance, |
| 243 base::WeakPtr<ServiceWorkerContextCore> context, | 269 base::WeakPtr<ServiceWorkerContextCore> context, |
| 244 scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params, | 270 EmbeddedWorkerStartWorkerParamsPtr params, |
| 245 const EmbeddedWorkerInstance::StatusCallback& callback, | 271 const EmbeddedWorkerInstance::StatusCallback& callback, |
| 246 ServiceWorkerStatusCode status, | 272 ServiceWorkerStatusCode status, |
| 247 int process_id, | 273 int process_id, |
| 248 bool is_new_process) { | 274 bool is_new_process) { |
| 249 if (!context) { | 275 if (!context) { |
| 250 callback.Run(SERVICE_WORKER_ERROR_ABORT); | 276 callback.Run(SERVICE_WORKER_ERROR_ABORT); |
| 251 return; | 277 return; |
| 252 } | 278 } |
| 253 if (!instance) { | 279 if (!instance) { |
| 254 if (status == SERVICE_WORKER_OK) { | 280 if (status == SERVICE_WORKER_OK) { |
| 255 // We only have a process allocated if the status is OK. | 281 // We only have a process allocated if the status is OK. |
| 256 context->process_manager()->ReleaseWorkerProcess( | 282 context->process_manager()->ReleaseWorkerProcess( |
| 257 params->embedded_worker_id); | 283 params->embedded_worker_id); |
| 258 } | 284 } |
| 259 callback.Run(SERVICE_WORKER_ERROR_ABORT); | 285 callback.Run(SERVICE_WORKER_ERROR_ABORT); |
| 260 return; | 286 return; |
| 261 } | 287 } |
| 262 instance->ProcessAllocated(params.Pass(), callback, process_id, | 288 instance->ProcessAllocated(params.Pass(), callback, process_id, |
| 263 is_new_process, status); | 289 is_new_process, status); |
| 264 } | 290 } |
| 265 | 291 |
| 266 void EmbeddedWorkerInstance::ProcessAllocated( | 292 void EmbeddedWorkerInstance::ProcessAllocated( |
| 267 scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params, | 293 EmbeddedWorkerStartWorkerParamsPtr params, |
| 268 const StatusCallback& callback, | 294 const StatusCallback& callback, |
| 269 int process_id, | 295 int process_id, |
| 270 bool is_new_process, | 296 bool is_new_process, |
| 271 ServiceWorkerStatusCode status) { | 297 ServiceWorkerStatusCode status) { |
| 272 DCHECK_EQ(process_id_, -1); | 298 DCHECK_EQ(process_id_, -1); |
| 273 TRACE_EVENT_ASYNC_END1("ServiceWorker", | 299 TRACE_EVENT_ASYNC_END1("ServiceWorker", |
| 274 "EmbeddedWorkerInstance::ProcessAllocate", | 300 "EmbeddedWorkerInstance::ProcessAllocate", |
| 275 params.get(), | 301 params.get(), |
| 276 "Status", status); | 302 "Status", status); |
| 277 if (status != SERVICE_WORKER_OK) { | 303 if (status != SERVICE_WORKER_OK) { |
| 278 Status old_status = status_; | 304 Status old_status = status_; |
| 279 status_ = STOPPED; | 305 status_ = STOPPED; |
| 280 callback.Run(status); | 306 callback.Run(status); |
| 281 FOR_EACH_OBSERVER(Listener, listener_list_, OnStopped(old_status)); | 307 FOR_EACH_OBSERVER(Listener, listener_list_, OnStopped(old_status)); |
| 282 return; | 308 return; |
| 283 } | 309 } |
| 284 const int64 service_worker_version_id = params->service_worker_version_id; | 310 const int64 service_worker_version_id = params->service_worker_version_id; |
| 285 process_id_ = process_id; | 311 process_id_ = process_id; |
| 286 GURL script_url(params->script_url); | 312 GURL script_url(params->script_url); |
| 287 | 313 |
| 288 // Register this worker to DevToolsManager on UI thread, then continue to | 314 // Register this worker to DevToolsManager on UI thread, then continue to |
| 289 // call SendStartWorker on IO thread. | 315 // call SendStartWorker on IO thread. |
| 290 starting_phase_ = REGISTERING_TO_DEVTOOLS; | 316 starting_phase_ = REGISTERING_TO_DEVTOOLS; |
| 317 mojo::InterfaceRequest<EmbeddedWorker> request = mojo::GetProxy(&worker_); |
| 291 BrowserThread::PostTask( | 318 BrowserThread::PostTask( |
| 292 BrowserThread::UI, FROM_HERE, | 319 BrowserThread::UI, FROM_HERE, |
| 293 base::Bind(RegisterToWorkerDevToolsManagerOnUI, process_id_, | 320 base::Bind(RegisterToWorkerDevToolsManagerAndConnectToWorkerOnUI, |
| 294 context_.get(), context_, service_worker_version_id, | 321 process_id_, context_.get(), context_, |
| 295 script_url, | 322 service_worker_version_id, script_url, base::Passed(&request), |
| 296 base::Bind(&EmbeddedWorkerInstance::SendStartWorker, | 323 base::Bind(&EmbeddedWorkerInstance::SendStartWorker, |
| 297 weak_factory_.GetWeakPtr(), base::Passed(¶ms), | 324 weak_factory_.GetWeakPtr(), base::Passed(¶ms), |
| 298 callback, is_new_process))); | 325 callback, is_new_process))); |
| 299 } | 326 } |
| 300 | 327 |
| 301 void EmbeddedWorkerInstance::SendStartWorker( | 328 void EmbeddedWorkerInstance::SendStartWorker( |
| 302 scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params, | 329 EmbeddedWorkerStartWorkerParamsPtr params, |
| 303 const StatusCallback& callback, | 330 const StatusCallback& callback, |
| 304 bool is_new_process, | 331 bool is_new_process, |
| 305 int worker_devtools_agent_route_id, | 332 int worker_devtools_agent_route_id, |
| 306 bool wait_for_debugger) { | 333 bool wait_for_debugger) { |
| 307 if (worker_devtools_agent_route_id != MSG_ROUTING_NONE) { | 334 if (worker_devtools_agent_route_id != MSG_ROUTING_NONE) { |
| 308 DCHECK(!devtools_proxy_); | 335 DCHECK(!devtools_proxy_); |
| 309 devtools_proxy_.reset(new DevToolsProxy(process_id_, | 336 devtools_proxy_.reset( |
| 310 worker_devtools_agent_route_id)); | 337 new DevToolsProxy(process_id_, worker_devtools_agent_route_id)); |
| 311 } | 338 } |
| 312 params->worker_devtools_agent_route_id = worker_devtools_agent_route_id; | 339 params->worker_devtools_agent_route_id = worker_devtools_agent_route_id; |
| 313 params->wait_for_debugger = wait_for_debugger; | 340 params->wait_for_debugger = wait_for_debugger; |
| 314 if (params->wait_for_debugger) { | 341 if (params->wait_for_debugger) { |
| 315 // We don't measure the start time when wait_for_debugger flag is set. So we | 342 // We don't measure the start time when wait_for_debugger flag is set. So we |
| 316 // set the NULL time here. | 343 // set the NULL time here. |
| 317 start_timing_ = base::TimeTicks(); | 344 start_timing_ = base::TimeTicks(); |
| 318 } else { | 345 } else { |
| 319 DCHECK(!start_timing_.is_null()); | 346 DCHECK(!start_timing_.is_null()); |
| 320 if (is_new_process) { | 347 if (is_new_process) { |
| 321 UMA_HISTOGRAM_TIMES("EmbeddedWorkerInstance.NewProcessAllocation", | 348 UMA_HISTOGRAM_TIMES("EmbeddedWorkerInstance.NewProcessAllocation", |
| 322 base::TimeTicks::Now() - start_timing_); | 349 base::TimeTicks::Now() - start_timing_); |
| 323 } else { | 350 } else { |
| 324 UMA_HISTOGRAM_TIMES("EmbeddedWorkerInstance.ExistingProcessAllocation", | 351 UMA_HISTOGRAM_TIMES("EmbeddedWorkerInstance.ExistingProcessAllocation", |
| 325 base::TimeTicks::Now() - start_timing_); | 352 base::TimeTicks::Now() - start_timing_); |
| 326 } | 353 } |
| 327 UMA_HISTOGRAM_BOOLEAN("EmbeddedWorkerInstance.ProcessCreated", | 354 UMA_HISTOGRAM_BOOLEAN("EmbeddedWorkerInstance.ProcessCreated", |
| 328 is_new_process); | 355 is_new_process); |
| 329 // Reset |start_timing_| to measure the time excluding the process | 356 // Reset |start_timing_| to measure the time excluding the process |
| 330 // allocation time. | 357 // allocation time. |
| 331 start_timing_ = base::TimeTicks::Now(); | 358 start_timing_ = base::TimeTicks::Now(); |
| 332 } | 359 } |
| 333 | 360 |
| 334 starting_phase_ = SENT_START_WORKER; | 361 starting_phase_ = SENT_START_WORKER; |
| 335 ServiceWorkerStatusCode status = | 362 registry_->WorkerStarting(embedded_worker_id_, process_id_); |
| 336 registry_->SendStartWorker(params.Pass(), process_id_); | 363 worker_->Initialize(params.Pass()); |
| 337 if (status != SERVICE_WORKER_OK) { | |
| 338 callback.Run(status); | |
| 339 return; | |
| 340 } | |
| 341 DCHECK(start_callback_.is_null()); | 364 DCHECK(start_callback_.is_null()); |
| 342 start_callback_ = callback; | 365 start_callback_ = callback; |
| 343 } | 366 } |
| 344 | 367 |
| 345 void EmbeddedWorkerInstance::OnReadyForInspection() { | 368 void EmbeddedWorkerInstance::OnReadyForInspection() { |
| 346 if (devtools_proxy_) | 369 if (devtools_proxy_) |
| 347 devtools_proxy_->NotifyWorkerReadyForInspection(); | 370 devtools_proxy_->NotifyWorkerReadyForInspection(); |
| 348 } | 371 } |
| 349 | 372 |
| 350 void EmbeddedWorkerInstance::OnScriptLoaded(int thread_id) { | 373 void EmbeddedWorkerInstance::OnScriptLoaded(int thread_id) { |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 520 case SCRIPT_EVALUATED: | 543 case SCRIPT_EVALUATED: |
| 521 return "Script evaluated"; | 544 return "Script evaluated"; |
| 522 case STARTING_PHASE_MAX_VALUE: | 545 case STARTING_PHASE_MAX_VALUE: |
| 523 NOTREACHED(); | 546 NOTREACHED(); |
| 524 } | 547 } |
| 525 NOTREACHED() << phase; | 548 NOTREACHED() << phase; |
| 526 return std::string(); | 549 return std::string(); |
| 527 } | 550 } |
| 528 | 551 |
| 529 } // namespace content | 552 } // namespace content |
| OLD | NEW |