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" |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
240 } | 240 } |
241 | 241 |
242 void EmbeddedWorkerInstance::SendStartWorker( | 242 void EmbeddedWorkerInstance::SendStartWorker( |
243 scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params, | 243 scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params, |
244 const StatusCallback& callback, | 244 const StatusCallback& callback, |
245 int worker_devtools_agent_route_id, | 245 int worker_devtools_agent_route_id, |
246 bool wait_for_debugger) { | 246 bool wait_for_debugger) { |
247 worker_devtools_agent_route_id_ = worker_devtools_agent_route_id; | 247 worker_devtools_agent_route_id_ = worker_devtools_agent_route_id; |
248 params->worker_devtools_agent_route_id = worker_devtools_agent_route_id; | 248 params->worker_devtools_agent_route_id = worker_devtools_agent_route_id; |
249 params->wait_for_debugger = wait_for_debugger; | 249 params->wait_for_debugger = wait_for_debugger; |
250 registry_->SendStartWorker(params.Pass(), callback, process_id_); | 250 ServiceWorkerStatusCode status = |
| 251 registry_->SendStartWorker(params.Pass(), process_id_); |
| 252 if (status != SERVICE_WORKER_OK) { |
| 253 callback.Run(status); |
| 254 return; |
| 255 } |
| 256 DCHECK(start_callback_.is_null()); |
| 257 start_callback_ = callback; |
251 } | 258 } |
252 | 259 |
253 void EmbeddedWorkerInstance::OnReadyForInspection() { | 260 void EmbeddedWorkerInstance::OnReadyForInspection() { |
254 if (worker_devtools_agent_route_id_ != MSG_ROUTING_NONE) | 261 if (worker_devtools_agent_route_id_ != MSG_ROUTING_NONE) |
255 NotifyWorkerReadyForInspection(process_id_, | 262 NotifyWorkerReadyForInspection(process_id_, |
256 worker_devtools_agent_route_id_); | 263 worker_devtools_agent_route_id_); |
257 } | 264 } |
258 | 265 |
259 void EmbeddedWorkerInstance::OnScriptLoaded(int thread_id) { | 266 void EmbeddedWorkerInstance::OnScriptLoaded(int thread_id) { |
260 thread_id_ = thread_id; | 267 thread_id_ = thread_id; |
261 } | 268 } |
262 | 269 |
263 void EmbeddedWorkerInstance::OnScriptLoadFailed() { | 270 void EmbeddedWorkerInstance::OnScriptLoadFailed() { |
264 } | 271 } |
265 | 272 |
| 273 void EmbeddedWorkerInstance::OnScriptEvaluated(bool success) { |
| 274 DCHECK(!start_callback_.is_null()); |
| 275 start_callback_.Run(success ? SERVICE_WORKER_OK |
| 276 : SERVICE_WORKER_ERROR_START_WORKER_FAILED); |
| 277 start_callback_.Reset(); |
| 278 } |
| 279 |
266 void EmbeddedWorkerInstance::OnStarted() { | 280 void EmbeddedWorkerInstance::OnStarted() { |
267 // Stop is requested before OnStarted is sent back from the worker. | 281 // Stop is requested before OnStarted is sent back from the worker. |
268 if (status_ == STOPPING) | 282 if (status_ == STOPPING) |
269 return; | 283 return; |
270 DCHECK(status_ == STARTING); | 284 DCHECK(status_ == STARTING); |
271 status_ = RUNNING; | 285 status_ = RUNNING; |
272 FOR_EACH_OBSERVER(Listener, listener_list_, OnStarted()); | 286 FOR_EACH_OBSERVER(Listener, listener_list_, OnStarted()); |
273 } | 287 } |
274 | 288 |
275 void EmbeddedWorkerInstance::OnStopped() { | 289 void EmbeddedWorkerInstance::OnStopped() { |
276 if (worker_devtools_agent_route_id_ != MSG_ROUTING_NONE) | 290 if (worker_devtools_agent_route_id_ != MSG_ROUTING_NONE) |
277 NotifyWorkerDestroyed(process_id_, worker_devtools_agent_route_id_); | 291 NotifyWorkerDestroyed(process_id_, worker_devtools_agent_route_id_); |
278 if (context_) | 292 if (context_) |
279 context_->process_manager()->ReleaseWorkerProcess(embedded_worker_id_); | 293 context_->process_manager()->ReleaseWorkerProcess(embedded_worker_id_); |
280 status_ = STOPPED; | 294 status_ = STOPPED; |
281 process_id_ = -1; | 295 process_id_ = -1; |
282 thread_id_ = -1; | 296 thread_id_ = -1; |
283 worker_devtools_agent_route_id_ = MSG_ROUTING_NONE; | 297 worker_devtools_agent_route_id_ = MSG_ROUTING_NONE; |
| 298 start_callback_.Reset(); |
284 FOR_EACH_OBSERVER(Listener, listener_list_, OnStopped()); | 299 FOR_EACH_OBSERVER(Listener, listener_list_, OnStopped()); |
285 } | 300 } |
286 | 301 |
287 void EmbeddedWorkerInstance::OnPausedAfterDownload() { | 302 void EmbeddedWorkerInstance::OnPausedAfterDownload() { |
288 // Stop can be requested before getting this far. | 303 // Stop can be requested before getting this far. |
289 if (status_ == STOPPING) | 304 if (status_ == STOPPING) |
290 return; | 305 return; |
291 DCHECK(status_ == STARTING); | 306 DCHECK(status_ == STARTING); |
292 FOR_EACH_OBSERVER(Listener, listener_list_, OnPausedAfterDownload()); | 307 FOR_EACH_OBSERVER(Listener, listener_list_, OnPausedAfterDownload()); |
293 } | 308 } |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 | 342 |
328 void EmbeddedWorkerInstance::AddListener(Listener* listener) { | 343 void EmbeddedWorkerInstance::AddListener(Listener* listener) { |
329 listener_list_.AddObserver(listener); | 344 listener_list_.AddObserver(listener); |
330 } | 345 } |
331 | 346 |
332 void EmbeddedWorkerInstance::RemoveListener(Listener* listener) { | 347 void EmbeddedWorkerInstance::RemoveListener(Listener* listener) { |
333 listener_list_.RemoveObserver(listener); | 348 listener_list_.RemoveObserver(listener); |
334 } | 349 } |
335 | 350 |
336 } // namespace content | 351 } // namespace content |
OLD | NEW |