Chromium Code Reviews| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <limits> | 9 #include <limits> |
| 10 #include <map> | 10 #include <map> |
| (...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 538 // TODO(kinuko): Record other event statuses too. | 538 // TODO(kinuko): Record other event statuses too. |
| 539 metrics_->RecordEventHandledStatus(request->event_type, was_handled); | 539 metrics_->RecordEventHandledStatus(request->event_type, was_handled); |
| 540 ServiceWorkerMetrics::RecordEventDuration( | 540 ServiceWorkerMetrics::RecordEventDuration( |
| 541 request->event_type, base::TimeTicks::Now() - request->start_time, | 541 request->event_type, base::TimeTicks::Now() - request->start_time, |
| 542 was_handled); | 542 was_handled); |
| 543 | 543 |
| 544 RestartTick(&idle_time_); | 544 RestartTick(&idle_time_); |
| 545 TRACE_EVENT_ASYNC_END1("ServiceWorker", "ServiceWorkerVersion::Request", | 545 TRACE_EVENT_ASYNC_END1("ServiceWorker", "ServiceWorkerVersion::Request", |
| 546 request, "Handled", was_handled); | 546 request, "Handled", was_handled); |
| 547 pending_requests_.Remove(request_id); | 547 pending_requests_.Remove(request_id); |
| 548 if (!HasInflightRequests()) | |
| 549 FOR_EACH_OBSERVER(Listener, listeners_, OnNoInflightRequests(this)); | |
| 550 | |
| 548 return true; | 551 return true; |
| 549 } | 552 } |
| 550 | 553 |
| 551 void ServiceWorkerVersion::RunAfterStartWorker( | 554 void ServiceWorkerVersion::RunAfterStartWorker( |
| 552 ServiceWorkerMetrics::EventType purpose, | 555 ServiceWorkerMetrics::EventType purpose, |
| 553 const base::Closure& task, | 556 const base::Closure& task, |
| 554 const StatusCallback& error_callback) { | 557 const StatusCallback& error_callback) { |
| 555 if (running_status() == EmbeddedWorkerStatus::RUNNING) { | 558 if (running_status() == EmbeddedWorkerStatus::RUNNING) { |
| 556 DCHECK(start_callbacks_.empty()); | 559 DCHECK(start_callbacks_.empty()); |
| 557 task.Run(); | 560 task.Run(); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 594 OnControlleeAdded(this, provider_host)); | 597 OnControlleeAdded(this, provider_host)); |
| 595 } | 598 } |
| 596 | 599 |
| 597 void ServiceWorkerVersion::RemoveControllee( | 600 void ServiceWorkerVersion::RemoveControllee( |
| 598 ServiceWorkerProviderHost* provider_host) { | 601 ServiceWorkerProviderHost* provider_host) { |
| 599 const std::string& uuid = provider_host->client_uuid(); | 602 const std::string& uuid = provider_host->client_uuid(); |
| 600 DCHECK(ContainsKey(controllee_map_, uuid)); | 603 DCHECK(ContainsKey(controllee_map_, uuid)); |
| 601 controllee_map_.erase(uuid); | 604 controllee_map_.erase(uuid); |
| 602 FOR_EACH_OBSERVER(Listener, listeners_, | 605 FOR_EACH_OBSERVER(Listener, listeners_, |
| 603 OnControlleeRemoved(this, provider_host)); | 606 OnControlleeRemoved(this, provider_host)); |
| 604 if (HasControllee()) | 607 if (!HasControllee()) |
| 605 return; | 608 FOR_EACH_OBSERVER(Listener, listeners_, OnNoControllees(this)); |
| 606 FOR_EACH_OBSERVER(Listener, listeners_, OnNoControllees(this)); | |
| 607 } | 609 } |
| 608 | 610 |
| 609 void ServiceWorkerVersion::AddStreamingURLRequestJob( | 611 void ServiceWorkerVersion::AddStreamingURLRequestJob( |
| 610 const ServiceWorkerURLRequestJob* request_job) { | 612 const ServiceWorkerURLRequestJob* request_job) { |
| 611 DCHECK(streaming_url_request_jobs_.find(request_job) == | 613 DCHECK(streaming_url_request_jobs_.find(request_job) == |
| 612 streaming_url_request_jobs_.end()); | 614 streaming_url_request_jobs_.end()); |
| 613 streaming_url_request_jobs_.insert(request_job); | 615 streaming_url_request_jobs_.insert(request_job); |
| 614 } | 616 } |
| 615 | 617 |
| 616 void ServiceWorkerVersion::RemoveStreamingURLRequestJob( | 618 void ServiceWorkerVersion::RemoveStreamingURLRequestJob( |
| 617 const ServiceWorkerURLRequestJob* request_job) { | 619 const ServiceWorkerURLRequestJob* request_job) { |
| 618 streaming_url_request_jobs_.erase(request_job); | 620 streaming_url_request_jobs_.erase(request_job); |
| 621 if (!HasInflightRequests()) | |
| 622 FOR_EACH_OBSERVER(Listener, listeners_, OnNoInflightRequests(this)); | |
| 619 } | 623 } |
| 620 | 624 |
| 621 void ServiceWorkerVersion::AddListener(Listener* listener) { | 625 void ServiceWorkerVersion::AddListener(Listener* listener) { |
| 622 listeners_.AddObserver(listener); | 626 listeners_.AddObserver(listener); |
| 623 } | 627 } |
| 624 | 628 |
| 625 void ServiceWorkerVersion::RemoveListener(Listener* listener) { | 629 void ServiceWorkerVersion::RemoveListener(Listener* listener) { |
| 626 listeners_.RemoveObserver(listener); | 630 listeners_.RemoveObserver(listener); |
| 627 } | 631 } |
| 628 | 632 |
| (...skipping 1080 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1709 pending_requests_.Clear(); | 1713 pending_requests_.Clear(); |
| 1710 | 1714 |
| 1711 // Close all mojo services. This will also fire and clear all callbacks | 1715 // Close all mojo services. This will also fire and clear all callbacks |
| 1712 // for messages that are still outstanding for those services. | 1716 // for messages that are still outstanding for those services. |
| 1713 mojo_services_.clear(); | 1717 mojo_services_.clear(); |
| 1714 | 1718 |
| 1715 // TODO(falken): Call SWURLRequestJob::ClearStream here? | 1719 // TODO(falken): Call SWURLRequestJob::ClearStream here? |
| 1716 streaming_url_request_jobs_.clear(); | 1720 streaming_url_request_jobs_.clear(); |
| 1717 | 1721 |
| 1718 FOR_EACH_OBSERVER(Listener, listeners_, OnRunningStateChanged(this)); | 1722 FOR_EACH_OBSERVER(Listener, listeners_, OnRunningStateChanged(this)); |
| 1719 | 1723 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
| |
| 1720 if (should_restart) | 1724 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 |
| |
| 1725 else if (should_restart) | |
| 1721 StartWorkerInternal(); | 1726 StartWorkerInternal(); |
|
nhiroki
2016/07/13 04:29:30
if (should_restart)
StartWorkerIntenal();
else i
falken
2016/07/14 13:52:07
Done.
| |
| 1722 } | 1727 } |
| 1723 | 1728 |
| 1724 void ServiceWorkerVersion::OnMojoConnectionError(const char* service_name) { | 1729 void ServiceWorkerVersion::OnMojoConnectionError(const char* service_name) { |
| 1725 // Simply deleting the service will cause error callbacks to be called from | 1730 // Simply deleting the service will cause error callbacks to be called from |
| 1726 // the destructor of the MojoServiceWrapper instance. | 1731 // the destructor of the MojoServiceWrapper instance. |
| 1727 mojo_services_.erase(service_name); | 1732 mojo_services_.erase(service_name); |
| 1728 } | 1733 } |
| 1729 | 1734 |
| 1730 void ServiceWorkerVersion::OnBeginEvent() { | 1735 void ServiceWorkerVersion::OnBeginEvent() { |
| 1731 if (should_exclude_from_uma_ || | 1736 if (should_exclude_from_uma_ || |
| 1732 running_status() != EmbeddedWorkerStatus::RUNNING || | 1737 running_status() != EmbeddedWorkerStatus::RUNNING || |
| 1733 idle_time_.is_null()) { | 1738 idle_time_.is_null()) { |
| 1734 return; | 1739 return; |
| 1735 } | 1740 } |
| 1736 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() - | 1741 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() - |
| 1737 idle_time_); | 1742 idle_time_); |
| 1738 } | 1743 } |
| 1739 | 1744 |
| 1740 } // namespace content | 1745 } // namespace content |
| OLD | NEW |