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 546 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 557 TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker", "ServiceWorkerVersion::Request", | 557 TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker", "ServiceWorkerVersion::Request", |
| 558 pending_requests_.Lookup(request_id), "Request id", | 558 pending_requests_.Lookup(request_id), "Request id", |
| 559 request_id, "Event type", | 559 request_id, "Event type", |
| 560 ServiceWorkerMetrics::EventTypeToString(event_type)); | 560 ServiceWorkerMetrics::EventTypeToString(event_type)); |
| 561 base::TimeTicks expiration_time = base::TimeTicks::Now() + timeout; | 561 base::TimeTicks expiration_time = base::TimeTicks::Now() + timeout; |
| 562 timeout_queue_.push( | 562 timeout_queue_.push( |
| 563 RequestInfo(request_id, event_type, expiration_time, timeout_behavior)); | 563 RequestInfo(request_id, event_type, expiration_time, timeout_behavior)); |
| 564 return request_id; | 564 return request_id; |
| 565 } | 565 } |
| 566 | 566 |
| 567 bool ServiceWorkerVersion::StartExternalRequest( | |
| 568 const std::string& request_uuid) { | |
| 569 // It's possible that the renderer/ is confused/lying or the version started | |
|
Devlin
2016/10/06 16:35:12
nit: renderer/ is a file path, renderer is a proce
lazyboy
2016/10/06 17:57:37
Done.
| |
| 570 // stopping right around the time of the IPC. | |
| 571 if (running_status() != EmbeddedWorkerStatus::RUNNING) | |
| 572 return false; | |
| 573 | |
| 574 ignore_result( | |
| 575 StartRequest(ServiceWorkerMetrics::EventType::EXTERNAL_REQUEST, | |
| 576 base::Bind(&ServiceWorkerVersion::CleanUpExternalRequest, | |
| 577 this, request_uuid))); | |
| 578 return true; | |
| 579 } | |
| 580 | |
| 567 bool ServiceWorkerVersion::FinishRequest(int request_id, | 581 bool ServiceWorkerVersion::FinishRequest(int request_id, |
| 568 bool was_handled, | 582 bool was_handled, |
| 569 base::Time dispatch_event_time) { | 583 base::Time dispatch_event_time) { |
| 570 PendingRequest* request = pending_requests_.Lookup(request_id); | 584 PendingRequest* request = pending_requests_.Lookup(request_id); |
| 571 if (!request) | 585 if (!request) |
| 572 return false; | 586 return false; |
| 573 // TODO(kinuko): Record other event statuses too. | 587 // TODO(kinuko): Record other event statuses too. |
| 574 metrics_->RecordEventHandledStatus(request->event_type, was_handled); | 588 metrics_->RecordEventHandledStatus(request->event_type, was_handled); |
| 575 ServiceWorkerMetrics::RecordEventDuration( | 589 ServiceWorkerMetrics::RecordEventDuration( |
| 576 request->event_type, base::TimeTicks::Now() - request->start_time_ticks, | 590 request->event_type, base::TimeTicks::Now() - request->start_time_ticks, |
| 577 was_handled); | 591 was_handled); |
| 578 ServiceWorkerMetrics::RecordEventDispatchingDelay( | 592 ServiceWorkerMetrics::RecordEventDispatchingDelay( |
| 579 request->event_type, dispatch_event_time - request->start_time, | 593 request->event_type, dispatch_event_time - request->start_time, |
| 580 site_for_uma()); | 594 site_for_uma()); |
| 581 | 595 |
| 582 RestartTick(&idle_time_); | 596 RestartTick(&idle_time_); |
| 583 TRACE_EVENT_ASYNC_END1("ServiceWorker", "ServiceWorkerVersion::Request", | 597 TRACE_EVENT_ASYNC_END1("ServiceWorker", "ServiceWorkerVersion::Request", |
| 584 request, "Handled", was_handled); | 598 request, "Handled", was_handled); |
| 585 pending_requests_.Remove(request_id); | 599 pending_requests_.Remove(request_id); |
| 586 if (!HasWork()) | 600 if (!HasWork()) |
| 587 FOR_EACH_OBSERVER(Listener, listeners_, OnNoWork(this)); | 601 FOR_EACH_OBSERVER(Listener, listeners_, OnNoWork(this)); |
| 588 | 602 |
| 589 return true; | 603 return true; |
| 590 } | 604 } |
| 591 | 605 |
| 606 bool ServiceWorkerVersion::FinishExternalRequest( | |
| 607 const std::string& request_uuid) { | |
| 608 // It's possible that the renderer/ is confused/lying or the version started | |
|
Devlin
2016/10/06 16:35:12
ditto
lazyboy
2016/10/06 17:57:37
Done.
| |
| 609 // stopping right around the time of the IPC. | |
| 610 if (running_status() != EmbeddedWorkerStatus::RUNNING) | |
| 611 return false; | |
| 612 | |
| 613 RequestUUIDToRequestIDMap::iterator iter = | |
| 614 external_request_uuid_to_request_id_.find(request_uuid); | |
| 615 if (iter != external_request_uuid_to_request_id_.end()) { | |
| 616 int request_id = iter->second; | |
| 617 external_request_uuid_to_request_id_.erase(iter); | |
| 618 return FinishRequest(request_id, true, base::Time::Now()); | |
| 619 } | |
| 620 | |
| 621 // It is possible that the request was cancelled or timed out before and we | |
| 622 // won't find it in |external_request_uuid_to_request_id_|. | |
| 623 // Return true so we don't kill the process. | |
| 624 return true; | |
| 625 } | |
| 626 | |
| 592 void ServiceWorkerVersion::RunAfterStartWorker( | 627 void ServiceWorkerVersion::RunAfterStartWorker( |
| 593 ServiceWorkerMetrics::EventType purpose, | 628 ServiceWorkerMetrics::EventType purpose, |
| 594 const base::Closure& task, | 629 const base::Closure& task, |
| 595 const StatusCallback& error_callback) { | 630 const StatusCallback& error_callback) { |
| 596 if (running_status() == EmbeddedWorkerStatus::RUNNING) { | 631 if (running_status() == EmbeddedWorkerStatus::RUNNING) { |
| 597 DCHECK(start_callbacks_.empty()); | 632 DCHECK(start_callbacks_.empty()); |
| 598 task.Run(); | 633 task.Run(); |
| 599 return; | 634 return; |
| 600 } | 635 } |
| 601 StartWorker(purpose, | 636 StartWorker(purpose, |
| (...skipping 1192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1794 } | 1829 } |
| 1795 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() - | 1830 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() - |
| 1796 idle_time_); | 1831 idle_time_); |
| 1797 } | 1832 } |
| 1798 | 1833 |
| 1799 void ServiceWorkerVersion::FinishStartWorker(ServiceWorkerStatusCode status) { | 1834 void ServiceWorkerVersion::FinishStartWorker(ServiceWorkerStatusCode status) { |
| 1800 start_worker_first_purpose_ = base::nullopt; | 1835 start_worker_first_purpose_ = base::nullopt; |
| 1801 RunCallbacks(this, &start_callbacks_, status); | 1836 RunCallbacks(this, &start_callbacks_, status); |
| 1802 } | 1837 } |
| 1803 | 1838 |
| 1839 void ServiceWorkerVersion::CleanUpExternalRequest( | |
| 1840 const std::string& request_uuid, | |
| 1841 ServiceWorkerStatusCode status) { | |
| 1842 if (status == SERVICE_WORKER_OK) | |
| 1843 return; | |
| 1844 external_request_uuid_to_request_id_.erase(request_uuid); | |
| 1845 } | |
| 1846 | |
| 1804 } // namespace content | 1847 } // namespace content |
| OLD | NEW |