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

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

Issue 992353003: Decouple Cache Storage messaging from Service Worker/Embedded Worker (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 5 years, 9 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/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/memory/ref_counted.h" 8 #include "base/memory/ref_counted.h"
9 #include "base/metrics/histogram_macros.h" 9 #include "base/metrics/histogram_macros.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
(...skipping 798 matching lines...) Expand 10 before | Expand all | Expand 10 after
809 // Activate ping/pong now that JavaScript execution will start. 809 // Activate ping/pong now that JavaScript execution will start.
810 ping_state_ = PINGING; 810 ping_state_ = PINGING;
811 } 811 }
812 812
813 void ServiceWorkerVersion::OnStarting() { 813 void ServiceWorkerVersion::OnStarting() {
814 FOR_EACH_OBSERVER(Listener, listeners_, OnRunningStateChanged(this)); 814 FOR_EACH_OBSERVER(Listener, listeners_, OnRunningStateChanged(this));
815 } 815 }
816 816
817 void ServiceWorkerVersion::OnStarted() { 817 void ServiceWorkerVersion::OnStarted() {
818 DCHECK_EQ(RUNNING, running_status()); 818 DCHECK_EQ(RUNNING, running_status());
819 DCHECK(cache_listener_.get());
820 RestartTick(&idle_time_); 819 RestartTick(&idle_time_);
821 820
822 // Fire all start callbacks. 821 // Fire all start callbacks.
823 scoped_refptr<ServiceWorkerVersion> protect(this); 822 scoped_refptr<ServiceWorkerVersion> protect(this);
824 RunCallbacks(this, &start_callbacks_, SERVICE_WORKER_OK); 823 RunCallbacks(this, &start_callbacks_, SERVICE_WORKER_OK);
825 FOR_EACH_OBSERVER(Listener, listeners_, OnRunningStateChanged(this)); 824 FOR_EACH_OBSERVER(Listener, listeners_, OnRunningStateChanged(this));
826 } 825 }
827 826
828 void ServiceWorkerVersion::OnStopping() { 827 void ServiceWorkerVersion::OnStopping() {
829 FOR_EACH_OBSERVER(Listener, listeners_, OnRunningStateChanged(this)); 828 FOR_EACH_OBSERVER(Listener, listeners_, OnRunningStateChanged(this));
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
870 RunIDMapCallbacks(&geofencing_callbacks_, 869 RunIDMapCallbacks(&geofencing_callbacks_,
871 SERVICE_WORKER_ERROR_FAILED); 870 SERVICE_WORKER_ERROR_FAILED);
872 RunIDMapCallbacks(&cross_origin_connect_callbacks_, 871 RunIDMapCallbacks(&cross_origin_connect_callbacks_,
873 SERVICE_WORKER_ERROR_FAILED, 872 SERVICE_WORKER_ERROR_FAILED,
874 false); 873 false);
875 874
876 streaming_url_request_jobs_.clear(); 875 streaming_url_request_jobs_.clear();
877 876
878 FOR_EACH_OBSERVER(Listener, listeners_, OnRunningStateChanged(this)); 877 FOR_EACH_OBSERVER(Listener, listeners_, OnRunningStateChanged(this));
879 878
880 // There should be no more communication from/to a stopped worker. Deleting
881 // the listener prevents any pending completion callbacks from causing
882 // messages to be sent to the stopped worker.
883 cache_listener_.reset();
884
885 // Restart worker if we have any start callbacks and the worker isn't doomed. 879 // Restart worker if we have any start callbacks and the worker isn't doomed.
886 if (should_restart) 880 if (should_restart)
887 StartWorkerInternal(false /* pause_after_download */); 881 StartWorkerInternal(false /* pause_after_download */);
888 } 882 }
889 883
890 void ServiceWorkerVersion::OnReportException( 884 void ServiceWorkerVersion::OnReportException(
891 const base::string16& error_message, 885 const base::string16& error_message,
892 int line_number, 886 int line_number,
893 int column_number, 887 int column_number,
894 const GURL& source_url) { 888 const GURL& source_url) {
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after
1454 base::Bind(&RunStartWorkerCallback, callback, protect)); 1448 base::Bind(&RunStartWorkerCallback, callback, protect));
1455 StartWorkerInternal(pause_after_download); 1449 StartWorkerInternal(pause_after_download);
1456 return; 1450 return;
1457 } 1451 }
1458 } 1452 }
1459 1453
1460 void ServiceWorkerVersion::StartWorkerInternal(bool pause_after_download) { 1454 void ServiceWorkerVersion::StartWorkerInternal(bool pause_after_download) {
1461 if (!timeout_timer_.IsRunning()) 1455 if (!timeout_timer_.IsRunning())
1462 StartTimeoutTimer(); 1456 StartTimeoutTimer();
1463 if (running_status() == STOPPED) { 1457 if (running_status() == STOPPED) {
1464 DCHECK(!cache_listener_.get());
1465 cache_listener_.reset(new ServiceWorkerCacheListener(this, context_));
1466 embedded_worker_->Start( 1458 embedded_worker_->Start(
1467 version_id_, scope_, script_url_, pause_after_download, 1459 version_id_, scope_, script_url_, pause_after_download,
1468 base::Bind(&ServiceWorkerVersion::OnStartSentAndScriptEvaluated, 1460 base::Bind(&ServiceWorkerVersion::OnStartSentAndScriptEvaluated,
1469 weak_factory_.GetWeakPtr())); 1461 weak_factory_.GetWeakPtr()));
1470 } 1462 }
1471 } 1463 }
1472 1464
1473 void ServiceWorkerVersion::DidClaimClients( 1465 void ServiceWorkerVersion::DidClaimClients(
1474 int request_id, ServiceWorkerStatusCode status) { 1466 int request_id, ServiceWorkerStatusCode status) {
1475 if (status == SERVICE_WORKER_ERROR_STATE) { 1467 if (status == SERVICE_WORKER_ERROR_STATE) {
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
1675 int request_id) { 1667 int request_id) {
1676 callbacks->Remove(request_id); 1668 callbacks->Remove(request_id);
1677 if (is_doomed_) { 1669 if (is_doomed_) {
1678 // The stop should be already scheduled, but try to stop immediately, in 1670 // The stop should be already scheduled, but try to stop immediately, in
1679 // order to release worker resources soon. 1671 // order to release worker resources soon.
1680 StopWorkerIfIdle(); 1672 StopWorkerIfIdle();
1681 } 1673 }
1682 } 1674 }
1683 1675
1684 } // namespace content 1676 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698