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

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

Issue 2352173004: Mojoify FetchEvent of Service Worker. (Closed)
Patch Set: incorporated dcheng's comment 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.h" 19 #include "net/log/net_log.h"
18 #include "net/log/net_log_capture_mode.h" 20 #include "net/log/net_log_capture_mode.h"
19 21
20 #include "net/log/net_log_event_type.h" 22 #include "net/log/net_log_event_type.h"
21 23
22 namespace content { 24 namespace content {
23 25
24 namespace { 26 namespace {
25 27
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 base::Bind(&NetLogServiceWorkerStatusCallback, status)); 69 base::Bind(&NetLogServiceWorkerStatusCallback, status));
68 } 70 }
69 71
70 ServiceWorkerMetrics::EventType FetchTypeToWaitUntilEventType( 72 ServiceWorkerMetrics::EventType FetchTypeToWaitUntilEventType(
71 ServiceWorkerFetchType type) { 73 ServiceWorkerFetchType type) {
72 if (type == ServiceWorkerFetchType::FOREIGN_FETCH) 74 if (type == ServiceWorkerFetchType::FOREIGN_FETCH)
73 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH_WAITUNTIL; 75 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH_WAITUNTIL;
74 return ServiceWorkerMetrics::EventType::FETCH_WAITUNTIL; 76 return ServiceWorkerMetrics::EventType::FETCH_WAITUNTIL;
75 } 77 }
76 78
79 void OnFetchEventFinished(ServiceWorkerVersion* version,
80 int event_finish_id,
81 ServiceWorkerStatusCode status,
82 base::Time dispatch_event_time) {
83 version->FinishRequest(event_finish_id, status != SERVICE_WORKER_ERROR_ABORT,
84 dispatch_event_time);
85 }
86
77 } // namespace 87 } // namespace
78 88
79 // Helper to receive the fetch event response even if 89 // Helper to receive the fetch event response even if
80 // ServiceWorkerFetchDispatcher has been destroyed. 90 // ServiceWorkerFetchDispatcher has been destroyed.
81 class ServiceWorkerFetchDispatcher::ResponseCallback { 91 class ServiceWorkerFetchDispatcher::ResponseCallback {
82 public: 92 public:
83 ResponseCallback(base::WeakPtr<ServiceWorkerFetchDispatcher> fetch_dispatcher, 93 ResponseCallback(base::WeakPtr<ServiceWorkerFetchDispatcher> fetch_dispatcher,
84 ServiceWorkerVersion* version) 94 ServiceWorkerVersion* version)
85 : fetch_dispatcher_(fetch_dispatcher), version_(version) {} 95 : fetch_dispatcher_(fetch_dispatcher), version_(version) {}
86 96
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 int event_finish_id = version_->StartRequest( 214 int event_finish_id = version_->StartRequest(
205 FetchTypeToWaitUntilEventType(request_->fetch_type), 215 FetchTypeToWaitUntilEventType(request_->fetch_type),
206 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 216 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
207 217
208 ResponseCallback* response_callback = 218 ResponseCallback* response_callback =
209 new ResponseCallback(weak_factory_.GetWeakPtr(), version_.get()); 219 new ResponseCallback(weak_factory_.GetWeakPtr(), version_.get());
210 version_->RegisterRequestCallback<ServiceWorkerHostMsg_FetchEventResponse>( 220 version_->RegisterRequestCallback<ServiceWorkerHostMsg_FetchEventResponse>(
211 response_id, 221 response_id,
212 base::Bind(&ServiceWorkerFetchDispatcher::ResponseCallback::Run, 222 base::Bind(&ServiceWorkerFetchDispatcher::ResponseCallback::Run,
213 base::Owned(response_callback))); 223 base::Owned(response_callback)));
214 version_->RegisterSimpleRequest<ServiceWorkerHostMsg_FetchEventFinished>( 224
215 event_finish_id); 225 base::WeakPtr<mojom::FetchEventDispatcher> dispatcher =
216 version_->DispatchEvent({response_id, event_finish_id}, 226 version_->GetMojoServiceForRequest<mojom::FetchEventDispatcher>(
217 ServiceWorkerMsg_FetchEvent( 227 event_finish_id);
218 response_id, event_finish_id, *request_.get())); 228 // |dispatcher| is owned by |version_|. So it is safe to pass the unretained
229 // raw pointer of |version_| to OnFetchEventFinished callback.
230 dispatcher->DispatchFetchEvent(
231 response_id, *request_,
232 base::Bind(&OnFetchEventFinished, base::Unretained(version_.get()),
233 event_finish_id));
219 } 234 }
220 235
221 void ServiceWorkerFetchDispatcher::DidFailToDispatch( 236 void ServiceWorkerFetchDispatcher::DidFailToDispatch(
222 ServiceWorkerStatusCode status) { 237 ServiceWorkerStatusCode status) {
223 EndNetLogEventWithServiceWorkerStatus( 238 EndNetLogEventWithServiceWorkerStatus(
224 net_log_, net::NetLogEventType::SERVICE_WORKER_FETCH_EVENT, status); 239 net_log_, net::NetLogEventType::SERVICE_WORKER_FETCH_EVENT, status);
225 DidFail(status); 240 DidFail(status);
226 } 241 }
227 242
228 void ServiceWorkerFetchDispatcher::DidFail(ServiceWorkerStatusCode status) { 243 void ServiceWorkerFetchDispatcher::DidFail(ServiceWorkerStatusCode status) {
(...skipping 27 matching lines...) Expand all
256 } 271 }
257 272
258 ServiceWorkerMetrics::EventType ServiceWorkerFetchDispatcher::GetEventType() 273 ServiceWorkerMetrics::EventType ServiceWorkerFetchDispatcher::GetEventType()
259 const { 274 const {
260 if (request_->fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) 275 if (request_->fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH)
261 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH; 276 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH;
262 return ResourceTypeToEventType(resource_type_); 277 return ResourceTypeToEventType(resource_type_);
263 } 278 }
264 279
265 } // namespace content 280 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698