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

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

Issue 2034663002: ServiceWorker: Keep the worker alive until FetchEvent.waitUntil settles (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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 548 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 if (running_status() == RUNNING) { 559 if (running_status() == RUNNING) {
560 DCHECK(start_callbacks_.empty()); 560 DCHECK(start_callbacks_.empty());
561 task.Run(); 561 task.Run();
562 return; 562 return;
563 } 563 }
564 StartWorker(purpose, 564 StartWorker(purpose,
565 base::Bind(&RunTaskAfterStartWorker, weak_factory_.GetWeakPtr(), 565 base::Bind(&RunTaskAfterStartWorker, weak_factory_.GetWeakPtr(),
566 error_callback, task)); 566 error_callback, task));
567 } 567 }
568 568
569 void ServiceWorkerVersion::DispatchFetchEvent(
570 int response_request_id,
571 int finish_request_id,
572 const ServiceWorkerFetchRequest& fetch_request,
573 const FetchResponseCallback& response_callback) {
574 ServiceWorkerMsg_FetchEvent message(response_request_id, finish_request_id,
575 fetch_request);
576
577 DCHECK_EQ(RUNNING, running_status());
578 PendingRequest<StatusCallback>* response_request =
579 custom_requests_.Lookup(response_request_id);
580 PendingRequest<StatusCallback>* finish_request =
581 custom_requests_.Lookup(finish_request_id);
582 DCHECK(response_request) << "Invalid request id for response request";
583 DCHECK(!response_request->listener)
584 << "Request already dispatched an IPC for response request";
585 DCHECK(finish_request) << "Invalid request id for finish request";
586 DCHECK(!finish_request->listener)
587 << "Request already dispatched an IPC for finish request";
588
589 ServiceWorkerStatusCode status = embedded_worker_->SendMessage(message);
590 if (status != SERVICE_WORKER_OK) {
591 base::ThreadTaskRunnerHandle::Get()->PostTask(
592 FROM_HERE, base::Bind(response_request->callback, status));
593 base::ThreadTaskRunnerHandle::Get()->PostTask(
594 FROM_HERE, base::Bind(finish_request->callback, status));
595 custom_requests_.Remove(response_request_id);
596 custom_requests_.Remove(finish_request_id);
597 return;
598 }
599
600 response_request->listener.reset(
601 new EventResponseHandler<ServiceWorkerHostMsg_FetchEventResponse,
602 FetchResponseCallback>(
603 embedded_worker()->AsWeakPtr(), response_request_id,
604 response_callback));
605 finish_request->listener.reset(
606 new EventResponseHandler<ServiceWorkerHostMsg_FetchEventFinished,
607 WebStatusCallback>(
608 embedded_worker()->AsWeakPtr(), finish_request_id,
609 base::Bind(&ServiceWorkerVersion::OnSimpleEventResponse, this)));
610 }
611
569 void ServiceWorkerVersion::AddControllee( 612 void ServiceWorkerVersion::AddControllee(
570 ServiceWorkerProviderHost* provider_host) { 613 ServiceWorkerProviderHost* provider_host) {
571 const std::string& uuid = provider_host->client_uuid(); 614 const std::string& uuid = provider_host->client_uuid();
572 CHECK(!provider_host->client_uuid().empty()); 615 CHECK(!provider_host->client_uuid().empty());
573 DCHECK(!ContainsKey(controllee_map_, uuid)); 616 DCHECK(!ContainsKey(controllee_map_, uuid));
574 controllee_map_[uuid] = provider_host; 617 controllee_map_[uuid] = provider_host;
575 // Keep the worker alive a bit longer right after a new controllee is added. 618 // Keep the worker alive a bit longer right after a new controllee is added.
576 RestartTick(&idle_time_); 619 RestartTick(&idle_time_);
577 FOR_EACH_OBSERVER(Listener, listeners_, 620 FOR_EACH_OBSERVER(Listener, listeners_,
578 OnControlleeAdded(this, provider_host)); 621 OnControlleeAdded(this, provider_host));
(...skipping 1124 matching lines...) Expand 10 before | Expand all | Expand 10 after
1703 void ServiceWorkerVersion::OnBeginEvent() { 1746 void ServiceWorkerVersion::OnBeginEvent() {
1704 if (should_exclude_from_uma_ || running_status() != RUNNING || 1747 if (should_exclude_from_uma_ || running_status() != RUNNING ||
1705 idle_time_.is_null()) { 1748 idle_time_.is_null()) {
1706 return; 1749 return;
1707 } 1750 }
1708 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() - 1751 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() -
1709 idle_time_); 1752 idle_time_);
1710 } 1753 }
1711 1754
1712 } // namespace content 1755 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698