OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/renderer/service_worker/service_worker_context_client.h" | 5 #include "content/renderer/service_worker/service_worker_context_client.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
50 #include "content/renderer/service_worker/service_worker_type_converters.h" | 50 #include "content/renderer/service_worker/service_worker_type_converters.h" |
51 #include "content/renderer/service_worker/service_worker_type_util.h" | 51 #include "content/renderer/service_worker/service_worker_type_util.h" |
52 #include "ipc/ipc_message.h" | 52 #include "ipc/ipc_message.h" |
53 #include "ipc/ipc_message_macros.h" | 53 #include "ipc/ipc_message_macros.h" |
54 #include "third_party/WebKit/public/platform/URLConversion.h" | 54 #include "third_party/WebKit/public/platform/URLConversion.h" |
55 #include "third_party/WebKit/public/platform/WebMessagePortChannel.h" | 55 #include "third_party/WebKit/public/platform/WebMessagePortChannel.h" |
56 #include "third_party/WebKit/public/platform/WebReferrerPolicy.h" | 56 #include "third_party/WebKit/public/platform/WebReferrerPolicy.h" |
57 #include "third_party/WebKit/public/platform/WebSecurityOrigin.h" | 57 #include "third_party/WebKit/public/platform/WebSecurityOrigin.h" |
58 #include "third_party/WebKit/public/platform/WebString.h" | 58 #include "third_party/WebKit/public/platform/WebString.h" |
59 #include "third_party/WebKit/public/platform/WebURLResponse.h" | 59 #include "third_party/WebKit/public/platform/WebURLResponse.h" |
60 #include "third_party/WebKit/public/platform/modules/background_fetch/WebBackgro undFetchSettledFetch.h" | |
60 #include "third_party/WebKit/public/platform/modules/notifications/WebNotificati onData.h" | 61 #include "third_party/WebKit/public/platform/modules/notifications/WebNotificati onData.h" |
61 #include "third_party/WebKit/public/platform/modules/payments/WebPaymentAppReque st.h" | 62 #include "third_party/WebKit/public/platform/modules/payments/WebPaymentAppReque st.h" |
62 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor kerClientQueryOptions.h" | 63 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor kerClientQueryOptions.h" |
63 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor kerError.h" | 64 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor kerError.h" |
64 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor kerNetworkProvider.h" | 65 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor kerNetworkProvider.h" |
65 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor kerRequest.h" | 66 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor kerRequest.h" |
66 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor kerResponse.h" | 67 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor kerResponse.h" |
67 #include "third_party/WebKit/public/web/modules/serviceworker/WebServiceWorkerCo ntextClient.h" | 68 #include "third_party/WebKit/public/web/modules/serviceworker/WebServiceWorkerCo ntextClient.h" |
68 #include "third_party/WebKit/public/web/modules/serviceworker/WebServiceWorkerCo ntextProxy.h" | 69 #include "third_party/WebKit/public/web/modules/serviceworker/WebServiceWorkerCo ntextProxy.h" |
69 | 70 |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
155 web_client_info.uuid = blink::WebString::fromASCII(client_info.client_uuid); | 156 web_client_info.uuid = blink::WebString::fromASCII(client_info.client_uuid); |
156 web_client_info.pageVisibilityState = client_info.page_visibility_state; | 157 web_client_info.pageVisibilityState = client_info.page_visibility_state; |
157 web_client_info.isFocused = client_info.is_focused; | 158 web_client_info.isFocused = client_info.is_focused; |
158 web_client_info.url = client_info.url; | 159 web_client_info.url = client_info.url; |
159 web_client_info.frameType = GetBlinkFrameType(client_info.frame_type); | 160 web_client_info.frameType = GetBlinkFrameType(client_info.frame_type); |
160 web_client_info.clientType = client_info.client_type; | 161 web_client_info.clientType = client_info.client_type; |
161 | 162 |
162 return web_client_info; | 163 return web_client_info; |
163 } | 164 } |
164 | 165 |
166 // Converts the |request| to its equivalent type in the Blink API. | |
167 // TODO(peter): Remove this when the Mojo FetchAPIRequest type exists. | |
168 void ToWebServiceWorkerRequest(const ServiceWorkerFetchRequest& request, | |
169 blink::WebServiceWorkerRequest* web_request) { | |
170 DCHECK(web_request); | |
171 | |
172 web_request->setURL(blink::WebURL(request.url)); | |
173 web_request->setMethod(blink::WebString::fromUTF8(request.method)); | |
174 for (const auto& pair : request.headers) { | |
175 web_request->setHeader(blink::WebString::fromUTF8(pair.first), | |
176 blink::WebString::fromUTF8(pair.second)); | |
177 } | |
178 if (!request.blob_uuid.empty()) { | |
179 web_request->setBlob(blink::WebString::fromASCII(request.blob_uuid), | |
180 request.blob_size); | |
181 } | |
182 web_request->setReferrer( | |
183 blink::WebString::fromUTF8(request.referrer.url.spec()), | |
184 request.referrer.policy); | |
185 web_request->setMode(GetBlinkFetchRequestMode(request.mode)); | |
186 web_request->setIsMainResourceLoad(request.is_main_resource_load); | |
187 web_request->setCredentialsMode( | |
188 GetBlinkFetchCredentialsMode(request.credentials_mode)); | |
189 web_request->setRedirectMode( | |
190 GetBlinkFetchRedirectMode(request.redirect_mode)); | |
191 web_request->setRequestContext( | |
192 GetBlinkRequestContext(request.request_context_type)); | |
193 web_request->setFrameType(GetBlinkFrameType(request.frame_type)); | |
194 web_request->setClientId(blink::WebString::fromUTF8(request.client_id)); | |
195 web_request->setIsReload(request.is_reload); | |
196 } | |
197 | |
198 // Converts |response| to its equivalent type in the Blink API. | |
199 // TODO(peter): Remove this when the Mojo FetchAPIResponse type exists. | |
200 void ToWebServiceWorkerResponse(const ServiceWorkerResponse& response, | |
201 blink::WebServiceWorkerResponse* web_response) { | |
kinuko
2017/03/24 04:03:59
How long do you expect before you remove this? If
Peter Beverloo
2017/03/24 14:11:09
Assuming we make progress on Mojofication of Fetch
| |
202 DCHECK(web_response); | |
203 | |
204 std::vector<blink::WebURL> url_list; | |
205 for (const GURL& url : response.url_list) | |
206 url_list.push_back(blink::WebURL(url)); | |
207 | |
208 web_response->setURLList(blink::WebVector<blink::WebURL>(url_list)); | |
209 web_response->setStatus(static_cast<unsigned short>(response.status_code)); | |
210 web_response->setStatusText(blink::WebString::fromUTF8(response.status_text)); | |
211 web_response->setResponseType(response.response_type); | |
212 for (const auto& pair : response.headers) { | |
213 web_response->setHeader(blink::WebString::fromUTF8(pair.first), | |
214 blink::WebString::fromUTF8(pair.second)); | |
215 } | |
216 if (!response.blob_uuid.empty()) { | |
217 web_response->setBlob(blink::WebString::fromASCII(response.blob_uuid), | |
218 response.blob_size); | |
219 } | |
220 web_response->setStreamURL(blink::WebURL(response.stream_url)); | |
221 web_response->setError(response.error); | |
222 | |
223 // response_time | |
shimazu
2017/03/24 00:19:27
Could you set the response time?
Peter Beverloo
2017/03/24 00:55:16
Oops! Will do first thing tomorrow :)
Peter Beverloo
2017/03/24 14:11:09
Done.
| |
224 | |
225 if (response.is_in_cache_storage) { | |
226 web_response->setCacheStorageCacheName( | |
227 blink::WebString::fromUTF8(response.cache_storage_cache_name)); | |
228 } | |
229 | |
230 std::vector<blink::WebString> cors_exposed_header_names; | |
231 for (const auto& name : response.cors_exposed_header_names) | |
232 cors_exposed_header_names.push_back(blink::WebString::fromUTF8(name)); | |
233 | |
234 web_response->setCorsExposedHeaderNames( | |
235 blink::WebVector<blink::WebString>(cors_exposed_header_names)); | |
236 } | |
237 | |
165 // Use this template in willDestroyWorkerContext to abort all the pending | 238 // Use this template in willDestroyWorkerContext to abort all the pending |
166 // events callbacks. | 239 // events callbacks. |
167 template <typename T> | 240 template <typename T> |
168 void AbortPendingEventCallbacks(T& callbacks) { | 241 void AbortPendingEventCallbacks(T& callbacks) { |
169 for (typename T::iterator it(&callbacks); !it.IsAtEnd(); it.Advance()) { | 242 for (typename T::iterator it(&callbacks); !it.IsAtEnd(); it.Advance()) { |
170 it.GetCurrentValue()->Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now()); | 243 it.GetCurrentValue()->Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now()); |
171 } | 244 } |
172 } | 245 } |
173 | 246 |
174 } // namespace | 247 } // namespace |
175 | 248 |
176 // Holding data that needs to be bound to the worker context on the | 249 // Holding data that needs to be bound to the worker context on the |
177 // worker thread. | 250 // worker thread. |
178 struct ServiceWorkerContextClient::WorkerContextData { | 251 struct ServiceWorkerContextClient::WorkerContextData { |
179 using ClientsCallbacksMap = | 252 using ClientsCallbacksMap = |
180 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsCallbacks>>; | 253 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsCallbacks>>; |
181 using ClaimClientsCallbacksMap = | 254 using ClaimClientsCallbacksMap = |
182 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsClaimCallbacks>>; | 255 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsClaimCallbacks>>; |
183 using ClientCallbacksMap = | 256 using ClientCallbacksMap = |
184 IDMap<std::unique_ptr<blink::WebServiceWorkerClientCallbacks>>; | 257 IDMap<std::unique_ptr<blink::WebServiceWorkerClientCallbacks>>; |
185 using SkipWaitingCallbacksMap = | 258 using SkipWaitingCallbacksMap = |
186 IDMap<std::unique_ptr<blink::WebServiceWorkerSkipWaitingCallbacks>>; | 259 IDMap<std::unique_ptr<blink::WebServiceWorkerSkipWaitingCallbacks>>; |
187 using ActivateEventCallbacksMap = | 260 using ActivateEventCallbacksMap = |
188 IDMap<std::unique_ptr<const DispatchActivateEventCallback>>; | 261 IDMap<std::unique_ptr<const DispatchActivateEventCallback>>; |
189 using BackgroundFetchAbortEventCallbacksMap = | 262 using BackgroundFetchAbortEventCallbacksMap = |
190 IDMap<std::unique_ptr<const DispatchBackgroundFetchAbortEventCallback>>; | 263 IDMap<std::unique_ptr<const DispatchBackgroundFetchAbortEventCallback>>; |
191 using BackgroundFetchClickEventCallbacksMap = | 264 using BackgroundFetchClickEventCallbacksMap = |
192 IDMap<std::unique_ptr<const DispatchBackgroundFetchClickEventCallback>>; | 265 IDMap<std::unique_ptr<const DispatchBackgroundFetchClickEventCallback>>; |
266 using BackgroundFetchFailEventCallbacksMap = | |
267 IDMap<std::unique_ptr<const DispatchBackgroundFetchFailEventCallback>>; | |
268 using BackgroundFetchedEventCallbacksMap = | |
269 IDMap<std::unique_ptr<const DispatchBackgroundFetchedEventCallback>>; | |
193 using SyncEventCallbacksMap = IDMap<std::unique_ptr<const SyncCallback>>; | 270 using SyncEventCallbacksMap = IDMap<std::unique_ptr<const SyncCallback>>; |
194 using PaymentRequestEventCallbacksMap = | 271 using PaymentRequestEventCallbacksMap = |
195 IDMap<std::unique_ptr<const PaymentRequestEventCallback>>; | 272 IDMap<std::unique_ptr<const PaymentRequestEventCallback>>; |
196 using NotificationClickEventCallbacksMap = | 273 using NotificationClickEventCallbacksMap = |
197 IDMap<std::unique_ptr<const DispatchNotificationClickEventCallback>>; | 274 IDMap<std::unique_ptr<const DispatchNotificationClickEventCallback>>; |
198 using NotificationCloseEventCallbacksMap = | 275 using NotificationCloseEventCallbacksMap = |
199 IDMap<std::unique_ptr<const DispatchNotificationCloseEventCallback>>; | 276 IDMap<std::unique_ptr<const DispatchNotificationCloseEventCallback>>; |
200 using PushEventCallbacksMap = | 277 using PushEventCallbacksMap = |
201 IDMap<std::unique_ptr<const DispatchPushEventCallback>>; | 278 IDMap<std::unique_ptr<const DispatchPushEventCallback>>; |
202 using FetchEventCallbacksMap = IDMap<std::unique_ptr<const FetchCallback>>; | 279 using FetchEventCallbacksMap = IDMap<std::unique_ptr<const FetchCallback>>; |
(...skipping 27 matching lines...) Expand all Loading... | |
230 | 307 |
231 // Pending callbacks for Activate Events. | 308 // Pending callbacks for Activate Events. |
232 ActivateEventCallbacksMap activate_event_callbacks; | 309 ActivateEventCallbacksMap activate_event_callbacks; |
233 | 310 |
234 // Pending callbacks for Background Fetch Abort Events. | 311 // Pending callbacks for Background Fetch Abort Events. |
235 BackgroundFetchAbortEventCallbacksMap background_fetch_abort_event_callbacks; | 312 BackgroundFetchAbortEventCallbacksMap background_fetch_abort_event_callbacks; |
236 | 313 |
237 // Pending callbacks for Background Fetch Click Events. | 314 // Pending callbacks for Background Fetch Click Events. |
238 BackgroundFetchClickEventCallbacksMap background_fetch_click_event_callbacks; | 315 BackgroundFetchClickEventCallbacksMap background_fetch_click_event_callbacks; |
239 | 316 |
317 // Pending callbacks for Background Fetch Fail Events. | |
318 BackgroundFetchFailEventCallbacksMap background_fetch_fail_event_callbacks; | |
319 | |
320 // Pending callbacks for Background Fetched Events. | |
321 BackgroundFetchedEventCallbacksMap background_fetched_event_callbacks; | |
322 | |
240 // Pending callbacks for Background Sync Events. | 323 // Pending callbacks for Background Sync Events. |
241 SyncEventCallbacksMap sync_event_callbacks; | 324 SyncEventCallbacksMap sync_event_callbacks; |
242 | 325 |
243 // Pending callbacks for Payment Request Events. | 326 // Pending callbacks for Payment Request Events. |
244 PaymentRequestEventCallbacksMap payment_request_event_callbacks; | 327 PaymentRequestEventCallbacksMap payment_request_event_callbacks; |
245 | 328 |
246 // Pending callbacks for Notification Click Events. | 329 // Pending callbacks for Notification Click Events. |
247 NotificationClickEventCallbacksMap notification_click_event_callbacks; | 330 NotificationClickEventCallbacksMap notification_click_event_callbacks; |
248 | 331 |
249 // Pending callbacks for Notification Close Events. | 332 // Pending callbacks for Notification Close Events. |
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
571 v8::Local<v8::Context> context) { | 654 v8::Local<v8::Context> context) { |
572 // At this point WillStopCurrentWorkerThread is already called, so | 655 // At this point WillStopCurrentWorkerThread is already called, so |
573 // worker_task_runner_->RunsTasksOnCurrentThread() returns false | 656 // worker_task_runner_->RunsTasksOnCurrentThread() returns false |
574 // (while we're still on the worker thread). | 657 // (while we're still on the worker thread). |
575 proxy_ = NULL; | 658 proxy_ = NULL; |
576 | 659 |
577 // Aborts all the pending events callbacks. | 660 // Aborts all the pending events callbacks. |
578 AbortPendingEventCallbacks(context_->activate_event_callbacks); | 661 AbortPendingEventCallbacks(context_->activate_event_callbacks); |
579 AbortPendingEventCallbacks(context_->background_fetch_abort_event_callbacks); | 662 AbortPendingEventCallbacks(context_->background_fetch_abort_event_callbacks); |
580 AbortPendingEventCallbacks(context_->background_fetch_click_event_callbacks); | 663 AbortPendingEventCallbacks(context_->background_fetch_click_event_callbacks); |
664 AbortPendingEventCallbacks(context_->background_fetch_fail_event_callbacks); | |
665 AbortPendingEventCallbacks(context_->background_fetched_event_callbacks); | |
581 AbortPendingEventCallbacks(context_->sync_event_callbacks); | 666 AbortPendingEventCallbacks(context_->sync_event_callbacks); |
582 AbortPendingEventCallbacks(context_->notification_click_event_callbacks); | 667 AbortPendingEventCallbacks(context_->notification_click_event_callbacks); |
583 AbortPendingEventCallbacks(context_->notification_close_event_callbacks); | 668 AbortPendingEventCallbacks(context_->notification_close_event_callbacks); |
584 AbortPendingEventCallbacks(context_->push_event_callbacks); | 669 AbortPendingEventCallbacks(context_->push_event_callbacks); |
585 AbortPendingEventCallbacks(context_->fetch_event_callbacks); | 670 AbortPendingEventCallbacks(context_->fetch_event_callbacks); |
586 AbortPendingEventCallbacks(context_->message_event_callbacks); | 671 AbortPendingEventCallbacks(context_->message_event_callbacks); |
587 | 672 |
588 // We have to clear callbacks now, as they need to be freed on the | 673 // We have to clear callbacks now, as they need to be freed on the |
589 // same thread. | 674 // same thread. |
590 context_.reset(); | 675 context_.reset(); |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
696 blink::WebServiceWorkerEventResult result, | 781 blink::WebServiceWorkerEventResult result, |
697 double event_dispatch_time) { | 782 double event_dispatch_time) { |
698 const DispatchBackgroundFetchClickEventCallback* callback = | 783 const DispatchBackgroundFetchClickEventCallback* callback = |
699 context_->background_fetch_click_event_callbacks.Lookup(request_id); | 784 context_->background_fetch_click_event_callbacks.Lookup(request_id); |
700 DCHECK(callback); | 785 DCHECK(callback); |
701 callback->Run(EventResultToStatus(result), | 786 callback->Run(EventResultToStatus(result), |
702 base::Time::FromDoubleT(event_dispatch_time)); | 787 base::Time::FromDoubleT(event_dispatch_time)); |
703 context_->background_fetch_click_event_callbacks.Remove(request_id); | 788 context_->background_fetch_click_event_callbacks.Remove(request_id); |
704 } | 789 } |
705 | 790 |
791 void ServiceWorkerContextClient::didHandleBackgroundFetchFailEvent( | |
792 int request_id, | |
793 blink::WebServiceWorkerEventResult result, | |
794 double event_dispatch_time) { | |
795 const DispatchBackgroundFetchFailEventCallback* callback = | |
796 context_->background_fetch_fail_event_callbacks.Lookup(request_id); | |
797 DCHECK(callback); | |
798 callback->Run(EventResultToStatus(result), | |
799 base::Time::FromDoubleT(event_dispatch_time)); | |
800 context_->background_fetch_fail_event_callbacks.Remove(request_id); | |
801 } | |
802 | |
803 void ServiceWorkerContextClient::didHandleBackgroundFetchedEvent( | |
804 int request_id, | |
805 blink::WebServiceWorkerEventResult result, | |
806 double event_dispatch_time) { | |
807 const DispatchBackgroundFetchedEventCallback* callback = | |
808 context_->background_fetched_event_callbacks.Lookup(request_id); | |
809 DCHECK(callback); | |
810 callback->Run(EventResultToStatus(result), | |
811 base::Time::FromDoubleT(event_dispatch_time)); | |
812 context_->background_fetched_event_callbacks.Remove(request_id); | |
813 } | |
814 | |
706 void ServiceWorkerContextClient::didHandleExtendableMessageEvent( | 815 void ServiceWorkerContextClient::didHandleExtendableMessageEvent( |
707 int request_id, | 816 int request_id, |
708 blink::WebServiceWorkerEventResult result, | 817 blink::WebServiceWorkerEventResult result, |
709 double event_dispatch_time) { | 818 double event_dispatch_time) { |
710 const DispatchExtendableMessageEventCallback* callback = | 819 const DispatchExtendableMessageEventCallback* callback = |
711 context_->message_event_callbacks.Lookup(request_id); | 820 context_->message_event_callbacks.Lookup(request_id); |
712 DCHECK(callback); | 821 DCHECK(callback); |
713 callback->Run(EventResultToStatus(result), | 822 callback->Run(EventResultToStatus(result), |
714 base::Time::FromDoubleT(event_dispatch_time)); | 823 base::Time::FromDoubleT(event_dispatch_time)); |
715 context_->message_event_callbacks.Remove(request_id); | 824 context_->message_event_callbacks.Remove(request_id); |
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
991 | 1100 |
992 // TODO(peter): Use typemap when this is moved to blink-side. | 1101 // TODO(peter): Use typemap when this is moved to blink-side. |
993 blink::WebServiceWorkerContextProxy::BackgroundFetchState web_state = | 1102 blink::WebServiceWorkerContextProxy::BackgroundFetchState web_state = |
994 mojo::ConvertTo< | 1103 mojo::ConvertTo< |
995 blink::WebServiceWorkerContextProxy::BackgroundFetchState>(state); | 1104 blink::WebServiceWorkerContextProxy::BackgroundFetchState>(state); |
996 | 1105 |
997 proxy_->dispatchBackgroundFetchClickEvent( | 1106 proxy_->dispatchBackgroundFetchClickEvent( |
998 request_id, blink::WebString::fromUTF8(tag), web_state); | 1107 request_id, blink::WebString::fromUTF8(tag), web_state); |
999 } | 1108 } |
1000 | 1109 |
1110 void ServiceWorkerContextClient::DispatchBackgroundFetchFailEvent( | |
1111 const std::string& tag, | |
1112 const std::vector<BackgroundFetchSettledFetch>& fetches, | |
1113 const DispatchBackgroundFetchFailEventCallback& callback) { | |
1114 TRACE_EVENT0("ServiceWorker", | |
1115 "ServiceWorkerContextClient::DispatchBackgroundFetchFailEvent"); | |
1116 int request_id = context_->background_fetch_fail_event_callbacks.Add( | |
1117 base::MakeUnique<DispatchBackgroundFetchFailEventCallback>(callback)); | |
1118 | |
1119 blink::WebVector<blink::WebBackgroundFetchSettledFetch> web_fetches( | |
1120 fetches.size()); | |
1121 for (size_t i = 0; i < fetches.size(); ++i) { | |
1122 ToWebServiceWorkerRequest(fetches[i].request, &web_fetches[i].request); | |
1123 ToWebServiceWorkerResponse(fetches[i].response, &web_fetches[i].response); | |
1124 } | |
1125 | |
1126 proxy_->dispatchBackgroundFetchFailEvent( | |
1127 request_id, blink::WebString::fromUTF8(tag), web_fetches); | |
1128 } | |
1129 | |
1130 void ServiceWorkerContextClient::DispatchBackgroundFetchedEvent( | |
1131 const std::string& tag, | |
1132 const std::vector<BackgroundFetchSettledFetch>& fetches, | |
1133 const DispatchBackgroundFetchedEventCallback& callback) { | |
1134 TRACE_EVENT0("ServiceWorker", | |
1135 "ServiceWorkerContextClient::DispatchBackgroundFetchedEvent"); | |
1136 int request_id = context_->background_fetched_event_callbacks.Add( | |
1137 base::MakeUnique<DispatchBackgroundFetchedEventCallback>(callback)); | |
1138 | |
1139 blink::WebVector<blink::WebBackgroundFetchSettledFetch> web_fetches( | |
1140 fetches.size()); | |
1141 for (size_t i = 0; i < fetches.size(); ++i) { | |
1142 ToWebServiceWorkerRequest(fetches[i].request, &web_fetches[i].request); | |
1143 ToWebServiceWorkerResponse(fetches[i].response, &web_fetches[i].response); | |
1144 } | |
1145 | |
1146 proxy_->dispatchBackgroundFetchedEvent( | |
1147 request_id, blink::WebString::fromUTF8(tag), web_fetches); | |
1148 } | |
1149 | |
1001 void ServiceWorkerContextClient::DispatchExtendableMessageEvent( | 1150 void ServiceWorkerContextClient::DispatchExtendableMessageEvent( |
1002 mojom::ExtendableMessageEventPtr event, | 1151 mojom::ExtendableMessageEventPtr event, |
1003 const DispatchExtendableMessageEventCallback& callback) { | 1152 const DispatchExtendableMessageEventCallback& callback) { |
1004 TRACE_EVENT0("ServiceWorker", | 1153 TRACE_EVENT0("ServiceWorker", |
1005 "ServiceWorkerContextClient::DispatchExtendableMessageEvent"); | 1154 "ServiceWorkerContextClient::DispatchExtendableMessageEvent"); |
1006 int request_id = context_->message_event_callbacks.Add( | 1155 int request_id = context_->message_event_callbacks.Add( |
1007 base::MakeUnique<DispatchExtendableMessageEventCallback>(callback)); | 1156 base::MakeUnique<DispatchExtendableMessageEventCallback>(callback)); |
1008 | 1157 |
1009 blink::WebMessagePortChannelArray ports = | 1158 blink::WebMessagePortChannelArray ports = |
1010 WebMessagePortChannelImpl::CreateFromMessagePipeHandles( | 1159 WebMessagePortChannelImpl::CreateFromMessagePipeHandles( |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1043 int fetch_event_id, | 1192 int fetch_event_id, |
1044 const ServiceWorkerFetchRequest& request, | 1193 const ServiceWorkerFetchRequest& request, |
1045 mojom::FetchEventPreloadHandlePtr preload_handle, | 1194 mojom::FetchEventPreloadHandlePtr preload_handle, |
1046 const DispatchFetchEventCallback& callback) { | 1195 const DispatchFetchEventCallback& callback) { |
1047 std::unique_ptr<NavigationPreloadRequest> preload_request = | 1196 std::unique_ptr<NavigationPreloadRequest> preload_request = |
1048 preload_handle | 1197 preload_handle |
1049 ? base::MakeUnique<NavigationPreloadRequest>( | 1198 ? base::MakeUnique<NavigationPreloadRequest>( |
1050 fetch_event_id, request.url, std::move(preload_handle)) | 1199 fetch_event_id, request.url, std::move(preload_handle)) |
1051 : nullptr; | 1200 : nullptr; |
1052 const bool navigation_preload_sent = !!preload_request; | 1201 const bool navigation_preload_sent = !!preload_request; |
1053 blink::WebServiceWorkerRequest webRequest; | |
1054 TRACE_EVENT0("ServiceWorker", | 1202 TRACE_EVENT0("ServiceWorker", |
1055 "ServiceWorkerContextClient::DispatchFetchEvent"); | 1203 "ServiceWorkerContextClient::DispatchFetchEvent"); |
1056 context_->fetch_event_callbacks.AddWithID( | 1204 context_->fetch_event_callbacks.AddWithID( |
1057 base::MakeUnique<FetchCallback>(callback), fetch_event_id); | 1205 base::MakeUnique<FetchCallback>(callback), fetch_event_id); |
1058 if (preload_request) { | 1206 if (preload_request) { |
1059 context_->preload_requests.AddWithID(std::move(preload_request), | 1207 context_->preload_requests.AddWithID(std::move(preload_request), |
1060 fetch_event_id); | 1208 fetch_event_id); |
1061 } | 1209 } |
1062 | 1210 |
1063 webRequest.setURL(blink::WebURL(request.url)); | 1211 blink::WebServiceWorkerRequest web_request; |
1064 webRequest.setMethod(blink::WebString::fromUTF8(request.method)); | 1212 ToWebServiceWorkerRequest(request, &web_request); |
1065 for (ServiceWorkerHeaderMap::const_iterator it = request.headers.begin(); | 1213 |
1066 it != request.headers.end(); | |
1067 ++it) { | |
1068 webRequest.setHeader(blink::WebString::fromUTF8(it->first), | |
1069 blink::WebString::fromUTF8(it->second)); | |
1070 } | |
1071 if (!request.blob_uuid.empty()) { | |
1072 webRequest.setBlob(blink::WebString::fromASCII(request.blob_uuid), | |
1073 request.blob_size); | |
1074 } | |
1075 webRequest.setReferrer( | |
1076 blink::WebString::fromUTF8(request.referrer.url.spec()), | |
1077 request.referrer.policy); | |
1078 webRequest.setMode(GetBlinkFetchRequestMode(request.mode)); | |
1079 webRequest.setIsMainResourceLoad(request.is_main_resource_load); | |
1080 webRequest.setCredentialsMode( | |
1081 GetBlinkFetchCredentialsMode(request.credentials_mode)); | |
1082 webRequest.setRedirectMode(GetBlinkFetchRedirectMode(request.redirect_mode)); | |
1083 webRequest.setRequestContext( | |
1084 GetBlinkRequestContext(request.request_context_type)); | |
1085 webRequest.setFrameType(GetBlinkFrameType(request.frame_type)); | |
1086 webRequest.setClientId(blink::WebString::fromUTF8(request.client_id)); | |
1087 webRequest.setIsReload(request.is_reload); | |
1088 if (request.fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) { | 1214 if (request.fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) { |
1089 proxy_->dispatchForeignFetchEvent(fetch_event_id, webRequest); | 1215 proxy_->dispatchForeignFetchEvent(fetch_event_id, web_request); |
1090 } else { | 1216 } else { |
1091 proxy_->dispatchFetchEvent(fetch_event_id, webRequest, | 1217 proxy_->dispatchFetchEvent(fetch_event_id, web_request, |
1092 navigation_preload_sent); | 1218 navigation_preload_sent); |
1093 } | 1219 } |
1094 } | 1220 } |
1095 | 1221 |
1096 void ServiceWorkerContextClient::DispatchNotificationClickEvent( | 1222 void ServiceWorkerContextClient::DispatchNotificationClickEvent( |
1097 const std::string& notification_id, | 1223 const std::string& notification_id, |
1098 const PlatformNotificationData& notification_data, | 1224 const PlatformNotificationData& notification_data, |
1099 int action_index, | 1225 int action_index, |
1100 const base::Optional<base::string16>& reply, | 1226 const base::Optional<base::string16>& reply, |
1101 const DispatchNotificationClickEventCallback& callback) { | 1227 const DispatchNotificationClickEventCallback& callback) { |
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1353 } | 1479 } |
1354 | 1480 |
1355 base::WeakPtr<ServiceWorkerContextClient> | 1481 base::WeakPtr<ServiceWorkerContextClient> |
1356 ServiceWorkerContextClient::GetWeakPtr() { | 1482 ServiceWorkerContextClient::GetWeakPtr() { |
1357 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); | 1483 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); |
1358 DCHECK(context_); | 1484 DCHECK(context_); |
1359 return context_->weak_factory.GetWeakPtr(); | 1485 return context_->weak_factory.GetWeakPtr(); |
1360 } | 1486 } |
1361 | 1487 |
1362 } // namespace content | 1488 } // namespace content |
OLD | NEW |