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 |