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

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

Issue 369063004: ServiceWorker: SWRegisterJob should manage status of SWVersion (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix ServiceWorkerVersionBrowserTest Created 6 years, 5 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 | Annotate | Revision Log
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/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
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.
nhiroki 2014/07/07 08:26:41 As I mentioned above, this code path will reach Se
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698