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

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

Issue 2352173004: Mojoify FetchEvent of Service Worker. (Closed)
Patch Set: pass the unretained raw pointer of |version_| to the callback 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 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 <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/time/time.h" 11 #include "base/time/time.h"
12 #include "base/trace_event/trace_event.h" 12 #include "base/trace_event/trace_event.h"
13 #include "content/browser/service_worker/embedded_worker_status.h" 13 #include "content/browser/service_worker/embedded_worker_status.h"
14 #include "content/browser/service_worker/service_worker_version.h" 14 #include "content/browser/service_worker/service_worker_version.h"
15 #include "content/common/service_worker/fetch_event_dispatcher.mojom.h"
15 #include "content/common/service_worker/service_worker_messages.h" 16 #include "content/common/service_worker/service_worker_messages.h"
17 #include "content/common/service_worker/service_worker_status_code.h"
16 #include "content/common/service_worker/service_worker_utils.h" 18 #include "content/common/service_worker/service_worker_utils.h"
17 #include "net/log/net_log_event_type.h" 19 #include "net/log/net_log_event_type.h"
18 20
19 namespace content { 21 namespace content {
20 22
21 namespace { 23 namespace {
22 24
23 using EventType = ServiceWorkerMetrics::EventType; 25 using EventType = ServiceWorkerMetrics::EventType;
24 EventType ResourceTypeToEventType(ResourceType resource_type) { 26 EventType ResourceTypeToEventType(ResourceType resource_type) {
25 switch (resource_type) { 27 switch (resource_type) {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 base::Bind(&NetLogServiceWorkerStatusCallback, status)); 66 base::Bind(&NetLogServiceWorkerStatusCallback, status));
65 } 67 }
66 68
67 ServiceWorkerMetrics::EventType FetchTypeToWaitUntilEventType( 69 ServiceWorkerMetrics::EventType FetchTypeToWaitUntilEventType(
68 ServiceWorkerFetchType type) { 70 ServiceWorkerFetchType type) {
69 if (type == ServiceWorkerFetchType::FOREIGN_FETCH) 71 if (type == ServiceWorkerFetchType::FOREIGN_FETCH)
70 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH_WAITUNTIL; 72 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH_WAITUNTIL;
71 return ServiceWorkerMetrics::EventType::FETCH_WAITUNTIL; 73 return ServiceWorkerMetrics::EventType::FETCH_WAITUNTIL;
72 } 74 }
73 75
76 void OnFetchEventFinished(ServiceWorkerVersion* version,
77 int event_finish_id,
78 ServiceWorkerStatusCode status,
79 base::Time dispatch_event_time) {
80 version->FinishRequest(event_finish_id, status != SERVICE_WORKER_ERROR_ABORT,
81 dispatch_event_time);
82 }
83
74 } // namespace 84 } // namespace
75 85
76 // Helper to receive the fetch event response even if 86 // Helper to receive the fetch event response even if
77 // ServiceWorkerFetchDispatcher has been destroyed. 87 // ServiceWorkerFetchDispatcher has been destroyed.
78 class ServiceWorkerFetchDispatcher::ResponseCallback { 88 class ServiceWorkerFetchDispatcher::ResponseCallback {
79 public: 89 public:
80 ResponseCallback(base::WeakPtr<ServiceWorkerFetchDispatcher> fetch_dispatcher, 90 ResponseCallback(base::WeakPtr<ServiceWorkerFetchDispatcher> fetch_dispatcher,
81 ServiceWorkerVersion* version) 91 ServiceWorkerVersion* version)
82 : fetch_dispatcher_(fetch_dispatcher), version_(version) {} 92 : fetch_dispatcher_(fetch_dispatcher), version_(version) {}
83 93
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 int event_finish_id = version_->StartRequest( 211 int event_finish_id = version_->StartRequest(
202 FetchTypeToWaitUntilEventType(request_->fetch_type), 212 FetchTypeToWaitUntilEventType(request_->fetch_type),
203 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 213 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
204 214
205 ResponseCallback* response_callback = 215 ResponseCallback* response_callback =
206 new ResponseCallback(weak_factory_.GetWeakPtr(), version_.get()); 216 new ResponseCallback(weak_factory_.GetWeakPtr(), version_.get());
207 version_->RegisterRequestCallback<ServiceWorkerHostMsg_FetchEventResponse>( 217 version_->RegisterRequestCallback<ServiceWorkerHostMsg_FetchEventResponse>(
208 response_id, 218 response_id,
209 base::Bind(&ServiceWorkerFetchDispatcher::ResponseCallback::Run, 219 base::Bind(&ServiceWorkerFetchDispatcher::ResponseCallback::Run,
210 base::Owned(response_callback))); 220 base::Owned(response_callback)));
211 version_->RegisterSimpleRequest<ServiceWorkerHostMsg_FetchEventFinished>( 221
212 event_finish_id); 222 base::WeakPtr<mojom::FetchEventDispatcher> dispatcher =
213 version_->DispatchEvent({response_id, event_finish_id}, 223 version_->GetMojoServiceForRequest<mojom::FetchEventDispatcher>(
214 ServiceWorkerMsg_FetchEvent( 224 event_finish_id);
215 response_id, event_finish_id, *request_.get())); 225 // |dispatcher\ is owned by |version_|. So it is safe to pass the unretained
dcheng 2016/10/04 07:19:53 Nit: \ => |
horo 2016/10/04 12:16:40 Done.
226 // raw pointer of |version_| to OnFetchEventFinished callback.
227 dispatcher->DispatchFetchEvent(
228 response_id, *request_.get(),
dcheng 2016/10/04 07:19:53 Nit: *request_.get() can be written simply as *req
horo 2016/10/04 12:16:40 Done.
229 base::Bind(&OnFetchEventFinished, base::Unretained(version_.get()),
230 event_finish_id));
216 } 231 }
217 232
218 void ServiceWorkerFetchDispatcher::DidFailToDispatch( 233 void ServiceWorkerFetchDispatcher::DidFailToDispatch(
219 ServiceWorkerStatusCode status) { 234 ServiceWorkerStatusCode status) {
220 EndNetLogEventWithServiceWorkerStatus( 235 EndNetLogEventWithServiceWorkerStatus(
221 net_log_, net::NetLogEventType::SERVICE_WORKER_FETCH_EVENT, status); 236 net_log_, net::NetLogEventType::SERVICE_WORKER_FETCH_EVENT, status);
222 DidFail(status); 237 DidFail(status);
223 } 238 }
224 239
225 void ServiceWorkerFetchDispatcher::DidFail(ServiceWorkerStatusCode status) { 240 void ServiceWorkerFetchDispatcher::DidFail(ServiceWorkerStatusCode status) {
(...skipping 27 matching lines...) Expand all
253 } 268 }
254 269
255 ServiceWorkerMetrics::EventType ServiceWorkerFetchDispatcher::GetEventType() 270 ServiceWorkerMetrics::EventType ServiceWorkerFetchDispatcher::GetEventType()
256 const { 271 const {
257 if (request_->fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) 272 if (request_->fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH)
258 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH; 273 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH;
259 return ResourceTypeToEventType(resource_type_); 274 return ResourceTypeToEventType(resource_type_);
260 } 275 }
261 276
262 } // namespace content 277 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698