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) |
nhiroki
2016/07/13 04:29:30
HasInflightRequests() always returns false here be
falken
2016/07/14 13:52:07
Good point. I guess an observer can't add a pendin
|
+ FOR_EACH_OBSERVER(Listener, listeners_, OnNoInflightRequests(this)); |
nhiroki
2016/07/13 04:29:30
Is there any reason not to notify of OnNoInflightR
falken
2016/07/14 13:52:07
That's true and a good point. The reason is that |
|
+ else if (should_restart) |
StartWorkerInternal(); |
nhiroki
2016/07/13 04:29:30
if (should_restart)
StartWorkerIntenal();
else i
falken
2016/07/14 13:52:07
Done.
|
} |