Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1818)

Side by Side Diff: content/browser/service_worker/service_worker_version.cc

Issue 2166523003: Add ref count to service workers for extension API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address comments from Devlin + MichaelN Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698