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

Side by Side Diff: content/browser/service_worker/service_worker_fetch_dispatcher.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: Fix the name of variables and comments 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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_fetch_dispatcher.h" 5 #include "content/browser/service_worker/service_worker_fetch_dispatcher.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/trace_event/trace_event.h" 10 #include "base/trace_event/trace_event.h"
11 #include "content/browser/service_worker/service_worker_version.h" 11 #include "content/browser/service_worker/service_worker_version.h"
12 #include "content/common/service_worker/service_worker_messages.h" 12 #include "content/common/service_worker/service_worker_messages.h"
13 #include "content/common/service_worker/service_worker_utils.h"
13 14
14 namespace content { 15 namespace content {
15 16
16 namespace { 17 namespace {
17 using EventType = ServiceWorkerMetrics::EventType; 18 using EventType = ServiceWorkerMetrics::EventType;
18 EventType ResourceTypeToEventType(ResourceType resource_type) { 19 EventType ResourceTypeToEventType(ResourceType resource_type) {
19 switch (resource_type) { 20 switch (resource_type) {
20 case RESOURCE_TYPE_MAIN_FRAME: 21 case RESOURCE_TYPE_MAIN_FRAME:
21 return EventType::FETCH_MAIN_FRAME; 22 return EventType::FETCH_MAIN_FRAME;
22 case RESOURCE_TYPE_SUB_FRAME: 23 case RESOURCE_TYPE_SUB_FRAME:
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 } 88 }
88 89
89 void ServiceWorkerFetchDispatcher::DispatchFetchEvent() { 90 void ServiceWorkerFetchDispatcher::DispatchFetchEvent() {
90 DCHECK_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()) 91 DCHECK_EQ(ServiceWorkerVersion::RUNNING, version_->running_status())
91 << "Worker stopped too soon after it was started."; 92 << "Worker stopped too soon after it was started.";
92 93
93 DCHECK(!prepare_callback_.is_null()); 94 DCHECK(!prepare_callback_.is_null());
94 base::Closure prepare_callback = prepare_callback_; 95 base::Closure prepare_callback = prepare_callback_;
95 prepare_callback.Run(); 96 prepare_callback.Run();
96 97
97 int request_id = version_->StartRequest( 98 int response_id = version_->StartRequest(
98 GetEventType(), base::Bind(&ServiceWorkerFetchDispatcher::DidFail, 99 GetEventType(), base::Bind(&ServiceWorkerFetchDispatcher::DidFail,
99 weak_factory_.GetWeakPtr())); 100 weak_factory_.GetWeakPtr()));
100 version_->DispatchEvent<ServiceWorkerHostMsg_FetchEventFinished>( 101 int event_finish_id = version_->StartRequest(
101 request_id, ServiceWorkerMsg_FetchEvent(request_id, *request_.get()), 102 ServiceWorkerMetrics::EventType::FETCH_WAITUNTIL,
Marijn Kruisselbrink 2016/06/15 12:37:07 There should probably be separate FETCH_WAITUNTIL
shimazu 2016/06/21 02:43:37 Done.
102 base::Bind(&ServiceWorkerFetchDispatcher::DidFinish, 103 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
103 weak_factory_.GetWeakPtr())); 104
105 version_->RegisterRequestCallback<ServiceWorkerHostMsg_FetchEventResponse>(
106 response_id, base::Bind(&ServiceWorkerFetchDispatcher::DidFinish,
107 weak_factory_.GetWeakPtr()));
108 version_->RegisterSimpleRequest<ServiceWorkerHostMsg_FetchEventFinished>(
109 event_finish_id);
110 version_->DispatchEvent({response_id, event_finish_id},
111 ServiceWorkerMsg_FetchEvent(
112 response_id, event_finish_id, *request_.get()));
104 } 113 }
105 114
106 void ServiceWorkerFetchDispatcher::DidPrepare() { 115 void ServiceWorkerFetchDispatcher::DidPrepare() {
107 DCHECK(!prepare_callback_.is_null()); 116 DCHECK(!prepare_callback_.is_null());
108 base::Closure prepare_callback = prepare_callback_; 117 base::Closure prepare_callback = prepare_callback_;
109 prepare_callback.Run(); 118 prepare_callback.Run();
110 } 119 }
111 120
112 void ServiceWorkerFetchDispatcher::DidFail(ServiceWorkerStatusCode status) { 121 void ServiceWorkerFetchDispatcher::DidFail(ServiceWorkerStatusCode status) {
113 DCHECK(!fetch_callback_.is_null()); 122 DCHECK(!fetch_callback_.is_null());
(...skipping 19 matching lines...) Expand all
133 } 142 }
134 143
135 ServiceWorkerMetrics::EventType ServiceWorkerFetchDispatcher::GetEventType() 144 ServiceWorkerMetrics::EventType ServiceWorkerFetchDispatcher::GetEventType()
136 const { 145 const {
137 if (request_->fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) 146 if (request_->fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH)
138 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH; 147 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH;
139 return ResourceTypeToEventType(resource_type_); 148 return ResourceTypeToEventType(resource_type_);
140 } 149 }
141 150
142 } // namespace content 151 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698