| Index: content/browser/service_worker/service_worker_version.cc
|
| diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc
|
| index 46237101d755621167608438b99d5d04f8c14bf3..af4192d9c4d8e352404a571bcf8ec725195923d2 100644
|
| --- a/content/browser/service_worker/service_worker_version.cc
|
| +++ b/content/browser/service_worker/service_worker_version.cc
|
| @@ -545,6 +545,9 @@ bool ServiceWorkerVersion::FinishRequest(int request_id, bool was_handled) {
|
| TRACE_EVENT_ASYNC_END1("ServiceWorker", "ServiceWorkerVersion::Request",
|
| request, "Handled", was_handled);
|
| pending_requests_.Remove(request_id);
|
| + if (!HasInflightRequests())
|
| + FOR_EACH_OBSERVER(Listener, listeners_, OnNoInflightRequests(this));
|
| +
|
| return true;
|
| }
|
|
|
| @@ -601,9 +604,8 @@ void ServiceWorkerVersion::RemoveControllee(
|
| controllee_map_.erase(uuid);
|
| FOR_EACH_OBSERVER(Listener, listeners_,
|
| OnControlleeRemoved(this, provider_host));
|
| - if (HasControllee())
|
| - return;
|
| - FOR_EACH_OBSERVER(Listener, listeners_, OnNoControllees(this));
|
| + if (!HasControllee())
|
| + FOR_EACH_OBSERVER(Listener, listeners_, OnNoControllees(this));
|
| }
|
|
|
| void ServiceWorkerVersion::AddStreamingURLRequestJob(
|
| @@ -616,6 +618,8 @@ void ServiceWorkerVersion::AddStreamingURLRequestJob(
|
| void ServiceWorkerVersion::RemoveStreamingURLRequestJob(
|
| const ServiceWorkerURLRequestJob* request_job) {
|
| streaming_url_request_jobs_.erase(request_job);
|
| + if (!HasInflightRequests())
|
| + FOR_EACH_OBSERVER(Listener, listeners_, OnNoInflightRequests(this));
|
| }
|
|
|
| void ServiceWorkerVersion::AddListener(Listener* listener) {
|
| @@ -1716,8 +1720,9 @@ void ServiceWorkerVersion::OnStoppedInternal(EmbeddedWorkerStatus old_status) {
|
| streaming_url_request_jobs_.clear();
|
|
|
| FOR_EACH_OBSERVER(Listener, listeners_, OnRunningStateChanged(this));
|
| -
|
| - if (should_restart)
|
| + if (!HasInflightRequests() && !should_restart)
|
| + FOR_EACH_OBSERVER(Listener, listeners_, OnNoInflightRequests(this));
|
| + else if (should_restart)
|
| StartWorkerInternal();
|
| }
|
|
|
|
|