| 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/service_worker_version.h" | 5 #include "content/browser/service_worker/service_worker_version.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
| 9 #include "base/strings/string16.h" | 9 #include "base/strings/string16.h" |
| 10 #include "content/browser/service_worker/embedded_worker_instance.h" | 10 #include "content/browser/service_worker/embedded_worker_instance.h" |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 231 return; | 231 return; |
| 232 } | 232 } |
| 233 | 233 |
| 234 ServiceWorkerStatusCode status = embedded_worker_->SendMessage(message); | 234 ServiceWorkerStatusCode status = embedded_worker_->SendMessage(message); |
| 235 RunSoon(base::Bind(callback, status)); | 235 RunSoon(base::Bind(callback, status)); |
| 236 } | 236 } |
| 237 | 237 |
| 238 void ServiceWorkerVersion::DispatchInstallEvent( | 238 void ServiceWorkerVersion::DispatchInstallEvent( |
| 239 int active_version_id, | 239 int active_version_id, |
| 240 const StatusCallback& callback) { | 240 const StatusCallback& callback) { |
| 241 DCHECK_EQ(NEW, status()) << status(); | 241 DCHECK_EQ(INSTALLING, status()) << status(); |
| 242 | 242 |
| 243 if (running_status() != RUNNING) { | 243 if (running_status() != RUNNING) { |
| 244 // Schedule calling this method after starting the worker. | 244 // Schedule calling this method after starting the worker. |
| 245 StartWorker( | 245 StartWorker( |
| 246 base::Bind(&RunTaskAfterStartWorker, | 246 base::Bind(&RunTaskAfterStartWorker, |
| 247 weak_factory_.GetWeakPtr(), | 247 weak_factory_.GetWeakPtr(), |
| 248 callback, | 248 callback, |
| 249 base::Bind(&self::DispatchInstallEventAfterStartWorker, | 249 base::Bind(&self::DispatchInstallEventAfterStartWorker, |
| 250 weak_factory_.GetWeakPtr(), | 250 weak_factory_.GetWeakPtr(), |
| 251 active_version_id, | 251 active_version_id, |
| 252 callback))); | 252 callback))); |
| 253 } else { | 253 } else { |
| 254 DispatchInstallEventAfterStartWorker(active_version_id, callback); | 254 DispatchInstallEventAfterStartWorker(active_version_id, callback); |
| 255 } | 255 } |
| 256 } | 256 } |
| 257 | 257 |
| 258 void ServiceWorkerVersion::DispatchActivateEvent( | 258 void ServiceWorkerVersion::DispatchActivateEvent( |
| 259 const StatusCallback& callback) { | 259 const StatusCallback& callback) { |
| 260 DCHECK_EQ(INSTALLED, status()) << status(); | 260 DCHECK_EQ(ACTIVATING, status()) << status(); |
| 261 SetStatus(ACTIVATING); | |
| 262 | 261 |
| 263 if (running_status() != RUNNING) { | 262 if (running_status() != RUNNING) { |
| 264 // Schedule calling this method after starting the worker. | 263 // Schedule calling this method after starting the worker. |
| 265 StartWorker( | 264 StartWorker( |
| 266 base::Bind(&RunTaskAfterStartWorker, | 265 base::Bind(&RunTaskAfterStartWorker, |
| 267 weak_factory_.GetWeakPtr(), | 266 weak_factory_.GetWeakPtr(), |
| 268 callback, | 267 callback, |
| 269 base::Bind(&self::DispatchActivateEventAfterStartWorker, | 268 base::Bind(&self::DispatchActivateEventAfterStartWorker, |
| 270 weak_factory_.GetWeakPtr(), | 269 weak_factory_.GetWeakPtr(), |
| 271 callback))); | 270 callback))); |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 506 ServiceWorkerStatusCode status) { | 505 ServiceWorkerStatusCode status) { |
| 507 if (status != SERVICE_WORKER_OK) | 506 if (status != SERVICE_WORKER_OK) |
| 508 RunCallbacks(this, &start_callbacks_, status); | 507 RunCallbacks(this, &start_callbacks_, status); |
| 509 } | 508 } |
| 510 | 509 |
| 511 void ServiceWorkerVersion::DispatchInstallEventAfterStartWorker( | 510 void ServiceWorkerVersion::DispatchInstallEventAfterStartWorker( |
| 512 int active_version_id, | 511 int active_version_id, |
| 513 const StatusCallback& callback) { | 512 const StatusCallback& callback) { |
| 514 DCHECK_EQ(RUNNING, running_status()) | 513 DCHECK_EQ(RUNNING, running_status()) |
| 515 << "Worker stopped too soon after it was started."; | 514 << "Worker stopped too soon after it was started."; |
| 516 SetStatus(INSTALLING); | |
| 517 | 515 |
| 518 int request_id = install_callbacks_.Add(new StatusCallback(callback)); | 516 int request_id = install_callbacks_.Add(new StatusCallback(callback)); |
| 519 ServiceWorkerStatusCode status = embedded_worker_->SendMessage( | 517 ServiceWorkerStatusCode status = embedded_worker_->SendMessage( |
| 520 ServiceWorkerMsg_InstallEvent(request_id, active_version_id)); | 518 ServiceWorkerMsg_InstallEvent(request_id, active_version_id)); |
| 521 if (status != SERVICE_WORKER_OK) { | 519 if (status != SERVICE_WORKER_OK) { |
| 522 install_callbacks_.Remove(request_id); | 520 install_callbacks_.Remove(request_id); |
| 523 RunSoon(base::Bind(callback, status)); | 521 RunSoon(base::Bind(callback, status)); |
| 524 } | 522 } |
| 525 } | 523 } |
| 526 | 524 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 548 // Don't bother if it's no longer running. | 546 // Don't bother if it's no longer running. |
| 549 if (running_status() == RUNNING) { | 547 if (running_status() == RUNNING) { |
| 550 embedded_worker_->SendMessage( | 548 embedded_worker_->SendMessage( |
| 551 ServiceWorkerMsg_DidGetClientDocuments(request_id, client_ids)); | 549 ServiceWorkerMsg_DidGetClientDocuments(request_id, client_ids)); |
| 552 } | 550 } |
| 553 } | 551 } |
| 554 | 552 |
| 555 void ServiceWorkerVersion::OnActivateEventFinished( | 553 void ServiceWorkerVersion::OnActivateEventFinished( |
| 556 int request_id, | 554 int request_id, |
| 557 blink::WebServiceWorkerEventResult result) { | 555 blink::WebServiceWorkerEventResult result) { |
| 556 DCHECK_EQ(ACTIVATING, status()) << status(); |
| 557 |
| 558 StatusCallback* callback = activate_callbacks_.Lookup(request_id); | 558 StatusCallback* callback = activate_callbacks_.Lookup(request_id); |
| 559 if (!callback) { | 559 if (!callback) { |
| 560 NOTREACHED() << "Got unexpected message: " << request_id; | 560 NOTREACHED() << "Got unexpected message: " << request_id; |
| 561 return; | 561 return; |
| 562 } | 562 } |
| 563 ServiceWorkerStatusCode status = SERVICE_WORKER_OK; | 563 ServiceWorkerStatusCode status = SERVICE_WORKER_OK; |
| 564 if (result == blink::WebServiceWorkerEventResultRejected) { | 564 if (result == blink::WebServiceWorkerEventResultRejected) |
| 565 status = SERVICE_WORKER_ERROR_ACTIVATE_WORKER_FAILED; | 565 status = SERVICE_WORKER_ERROR_ACTIVATE_WORKER_FAILED; |
| 566 SetStatus(REDUNDANT); | |
| 567 } else { | |
| 568 SetStatus(ACTIVE); | |
| 569 } | |
| 570 | 566 |
| 571 scoped_refptr<ServiceWorkerVersion> protect(this); | 567 scoped_refptr<ServiceWorkerVersion> protect(this); |
| 572 callback->Run(status); | 568 callback->Run(status); |
| 573 activate_callbacks_.Remove(request_id); | 569 activate_callbacks_.Remove(request_id); |
| 574 } | 570 } |
| 575 | 571 |
| 576 void ServiceWorkerVersion::OnInstallEventFinished( | 572 void ServiceWorkerVersion::OnInstallEventFinished( |
| 577 int request_id, | 573 int request_id, |
| 578 blink::WebServiceWorkerEventResult result) { | 574 blink::WebServiceWorkerEventResult result) { |
| 575 DCHECK_EQ(INSTALLING, status()) << status(); |
| 576 |
| 579 StatusCallback* callback = install_callbacks_.Lookup(request_id); | 577 StatusCallback* callback = install_callbacks_.Lookup(request_id); |
| 580 if (!callback) { | 578 if (!callback) { |
| 581 NOTREACHED() << "Got unexpected message: " << request_id; | 579 NOTREACHED() << "Got unexpected message: " << request_id; |
| 582 return; | 580 return; |
| 583 } | 581 } |
| 584 ServiceWorkerStatusCode status = SERVICE_WORKER_OK; | 582 ServiceWorkerStatusCode status = SERVICE_WORKER_OK; |
| 585 if (result == blink::WebServiceWorkerEventResultRejected) { | 583 if (result == blink::WebServiceWorkerEventResultRejected) |
| 586 status = SERVICE_WORKER_ERROR_INSTALL_WORKER_FAILED; | 584 status = SERVICE_WORKER_ERROR_INSTALL_WORKER_FAILED; |
| 587 SetStatus(REDUNDANT); | |
| 588 } else { | |
| 589 SetStatus(INSTALLED); | |
| 590 } | |
| 591 | 585 |
| 592 scoped_refptr<ServiceWorkerVersion> protect(this); | 586 scoped_refptr<ServiceWorkerVersion> protect(this); |
| 593 callback->Run(status); | 587 callback->Run(status); |
| 594 install_callbacks_.Remove(request_id); | 588 install_callbacks_.Remove(request_id); |
| 595 } | 589 } |
| 596 | 590 |
| 597 void ServiceWorkerVersion::OnFetchEventFinished( | 591 void ServiceWorkerVersion::OnFetchEventFinished( |
| 598 int request_id, | 592 int request_id, |
| 599 ServiceWorkerFetchEventResult result, | 593 ServiceWorkerFetchEventResult result, |
| 600 const ServiceWorkerResponse& response) { | 594 const ServiceWorkerResponse& response) { |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 656 return; | 650 return; |
| 657 } | 651 } |
| 658 stop_worker_timer_.Start( | 652 stop_worker_timer_.Start( |
| 659 FROM_HERE, base::TimeDelta::FromSeconds(kStopWorkerDelay), | 653 FROM_HERE, base::TimeDelta::FromSeconds(kStopWorkerDelay), |
| 660 base::Bind(&ServiceWorkerVersion::StopWorker, | 654 base::Bind(&ServiceWorkerVersion::StopWorker, |
| 661 weak_factory_.GetWeakPtr(), | 655 weak_factory_.GetWeakPtr(), |
| 662 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback))); | 656 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback))); |
| 663 } | 657 } |
| 664 | 658 |
| 665 } // namespace content | 659 } // namespace content |
| OLD | NEW |