| 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/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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |