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

Side by Side Diff: content/renderer/service_worker/service_worker_context_client.cc

Issue 2416843002: Implement FetchEvent.navigationPreload (Closed)
Patch Set: incorporated falken'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 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"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/metrics/histogram_macros.h" 12 #include "base/metrics/histogram_macros.h"
13 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
14 #include "base/threading/thread_checker.h" 14 #include "base/threading/thread_checker.h"
15 #include "base/threading/thread_local.h" 15 #include "base/threading/thread_local.h"
16 #include "base/threading/thread_task_runner_handle.h" 16 #include "base/threading/thread_task_runner_handle.h"
17 #include "base/time/time.h" 17 #include "base/time/time.h"
18 #include "base/trace_event/trace_event.h" 18 #include "base/trace_event/trace_event.h"
19 #include "content/child/notifications/notification_data_conversions.h" 19 #include "content/child/notifications/notification_data_conversions.h"
20 #include "content/child/request_extra_data.h" 20 #include "content/child/request_extra_data.h"
21 #include "content/child/service_worker/service_worker_dispatcher.h" 21 #include "content/child/service_worker/service_worker_dispatcher.h"
22 #include "content/child/service_worker/service_worker_handle_reference.h" 22 #include "content/child/service_worker/service_worker_handle_reference.h"
23 #include "content/child/service_worker/service_worker_network_provider.h" 23 #include "content/child/service_worker/service_worker_network_provider.h"
24 #include "content/child/service_worker/service_worker_provider_context.h" 24 #include "content/child/service_worker/service_worker_provider_context.h"
25 #include "content/child/service_worker/service_worker_registration_handle_refere nce.h" 25 #include "content/child/service_worker/service_worker_registration_handle_refere nce.h"
26 #include "content/child/service_worker/web_service_worker_impl.h" 26 #include "content/child/service_worker/web_service_worker_impl.h"
27 #include "content/child/service_worker/web_service_worker_provider_impl.h" 27 #include "content/child/service_worker/web_service_worker_provider_impl.h"
28 #include "content/child/service_worker/web_service_worker_registration_impl.h" 28 #include "content/child/service_worker/web_service_worker_registration_impl.h"
29 #include "content/child/thread_safe_sender.h" 29 #include "content/child/thread_safe_sender.h"
30 #include "content/child/web_data_consumer_handle_impl.h"
30 #include "content/child/webmessageportchannel_impl.h" 31 #include "content/child/webmessageportchannel_impl.h"
31 #include "content/common/devtools_messages.h" 32 #include "content/common/devtools_messages.h"
32 #include "content/common/message_port_messages.h" 33 #include "content/common/message_port_messages.h"
33 #include "content/common/service_worker/embedded_worker_messages.h" 34 #include "content/common/service_worker/embedded_worker_messages.h"
34 #include "content/common/service_worker/fetch_event_dispatcher.mojom.h" 35 #include "content/common/service_worker/fetch_event_dispatcher.mojom.h"
35 #include "content/common/service_worker/service_worker_messages.h" 36 #include "content/common/service_worker/service_worker_messages.h"
36 #include "content/common/service_worker/service_worker_status_code.h" 37 #include "content/common/service_worker/service_worker_status_code.h"
37 #include "content/common/service_worker/service_worker_utils.h" 38 #include "content/common/service_worker/service_worker_utils.h"
38 #include "content/public/common/push_event_payload.h" 39 #include "content/public/common/push_event_payload.h"
39 #include "content/public/common/referrer.h" 40 #include "content/public/common/referrer.h"
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 using SkipWaitingCallbacksMap = 183 using SkipWaitingCallbacksMap =
183 IDMap<blink::WebServiceWorkerSkipWaitingCallbacks, IDMapOwnPointer>; 184 IDMap<blink::WebServiceWorkerSkipWaitingCallbacks, IDMapOwnPointer>;
184 using SyncEventCallbacksMap = 185 using SyncEventCallbacksMap =
185 IDMap<const base::Callback<void(blink::mojom::ServiceWorkerEventStatus, 186 IDMap<const base::Callback<void(blink::mojom::ServiceWorkerEventStatus,
186 base::Time /* dispatch_event_time */)>, 187 base::Time /* dispatch_event_time */)>,
187 IDMapOwnPointer>; 188 IDMapOwnPointer>;
188 using FetchEventCallbacksMap = 189 using FetchEventCallbacksMap =
189 IDMap<const base::Callback<void(ServiceWorkerStatusCode, 190 IDMap<const base::Callback<void(ServiceWorkerStatusCode,
190 base::Time /* dispatch_event_time */)>, 191 base::Time /* dispatch_event_time */)>,
191 IDMapOwnPointer>; 192 IDMapOwnPointer>;
193 using NavigationPreloadRequestsMap =
194 IDMap<ServiceWorkerContextClient::NavigationPreloadRequest,
195 IDMapOwnPointer>;
192 196
193 explicit WorkerContextData(ServiceWorkerContextClient* owner) 197 explicit WorkerContextData(ServiceWorkerContextClient* owner)
194 : weak_factory(owner), proxy_weak_factory(owner->proxy_) {} 198 : weak_factory(owner), proxy_weak_factory(owner->proxy_) {}
195 199
196 ~WorkerContextData() { 200 ~WorkerContextData() {
197 DCHECK(thread_checker.CalledOnValidThread()); 201 DCHECK(thread_checker.CalledOnValidThread());
198 } 202 }
199 203
200 // Pending callbacks for GetClientDocuments(). 204 // Pending callbacks for GetClientDocuments().
201 ClientsCallbacksMap clients_callbacks; 205 ClientsCallbacksMap clients_callbacks;
202 206
203 // Pending callbacks for OpenWindow() and FocusClient(). 207 // Pending callbacks for OpenWindow() and FocusClient().
204 ClientCallbacksMap client_callbacks; 208 ClientCallbacksMap client_callbacks;
205 209
206 // Pending callbacks for SkipWaiting(). 210 // Pending callbacks for SkipWaiting().
207 SkipWaitingCallbacksMap skip_waiting_callbacks; 211 SkipWaitingCallbacksMap skip_waiting_callbacks;
208 212
209 // Pending callbacks for ClaimClients(). 213 // Pending callbacks for ClaimClients().
210 ClaimClientsCallbacksMap claim_clients_callbacks; 214 ClaimClientsCallbacksMap claim_clients_callbacks;
211 215
212 // Pending callbacks for Background Sync Events. 216 // Pending callbacks for Background Sync Events.
213 SyncEventCallbacksMap sync_event_callbacks; 217 SyncEventCallbacksMap sync_event_callbacks;
214 218
215 // Pending callbacks for Fetch Events. 219 // Pending callbacks for Fetch Events.
216 FetchEventCallbacksMap fetch_event_callbacks; 220 FetchEventCallbacksMap fetch_event_callbacks;
217 221
222 // Pending navigation preload requests.
223 NavigationPreloadRequestsMap preload_requests;
224
218 service_manager::InterfaceRegistry interface_registry; 225 service_manager::InterfaceRegistry interface_registry;
219 // This is not used when mojo for the service workers is enabled. At that 226 // This is not used when mojo for the service workers is enabled. At that
220 // time, remote interfaces are stored in EmbeddedWorkerInstanceClientImpl. 227 // time, remote interfaces are stored in EmbeddedWorkerInstanceClientImpl.
221 service_manager::InterfaceProvider remote_interfaces; 228 service_manager::InterfaceProvider remote_interfaces;
222 229
223 base::ThreadChecker thread_checker; 230 base::ThreadChecker thread_checker;
224 base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory; 231 base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory;
225 base::WeakPtrFactory<blink::WebServiceWorkerContextProxy> proxy_weak_factory; 232 base::WeakPtrFactory<blink::WebServiceWorkerContextProxy> proxy_weak_factory;
226 }; 233 };
227 234
235 class ServiceWorkerContextClient::NavigationPreloadRequest final
236 : public mojom::URLLoaderClient {
237 public:
238 NavigationPreloadRequest(const GURL& url,
239 mojom::FetchEventPreloadHandlePtr preload_handle)
240 : url_loader_(std::move(preload_handle->url_loader)),
241 binding_(this, std::move(preload_handle->url_loader_client_request)),
242 response_(base::MakeUnique<blink::WebServiceWorkerResponse>()) {
243 response_->setURL(url);
244 }
245
246 ~NavigationPreloadRequest() override {
247 if (callback_) {
248 callback_->onError(blink::WebServiceWorkerError(
249 blink::WebServiceWorkerError::ErrorTypeAbort,
250 blink::WebString::fromUTF8(
251 "Service Worker navigation preload aborted. Need to guard with "
252 "respondWith or waitUntil.")));
253 }
254 }
255
256 void RegisterCallback(
257 std::unique_ptr<blink::WebServiceWorkerPreloadResponseCallbacks>
258 callback) {
259 callback_ = std::move(callback);
260 }
261
262 void OnReceiveResponse(const ResourceResponseHead& response_head) override {
263 DCHECK(response_);
264 DCHECK(response_head.headers);
265 response_->setStatus(response_head.headers->response_code());
266 response_->setStatusText(
267 blink::WebString::fromUTF8(response_head.headers->GetStatusText()));
268 response_->setResponseType(blink::WebServiceWorkerResponseTypeBasic);
269 size_t iter = 0;
270 std::string header_name;
271 std::string header_value;
272 while (response_head.headers->EnumerateHeaderLines(&iter, &header_name,
273 &header_value)) {
274 response_->appendHeader(blink::WebString::fromUTF8(header_name),
275 blink::WebString::fromUTF8(header_value));
276 }
277 response_->setResponseTime(response_head.response_time.ToInternalValue());
278 }
279
280 void OnStartLoadingResponseBody(
281 mojo::ScopedDataPipeConsumerHandle body) override {
282 std::unique_ptr<blink::WebServiceWorkerPreloadResponseCallbacks> callback(
283 std::move(callback_));
284 DCHECK(callback);
285 blink::WebServiceWorkerPreloadResponseCallbacksResult result;
286 result.handle =
287 base::MakeUnique<WebDataConsumerHandleImpl>(std::move(body));
288 result.response = std::move(response_);
289 callback->onSuccess(&result);
290 }
291
292 void OnComplete(const ResourceRequestCompletionStatus& status) override {
293 if (!callback_)
dcheng 2016/10/21 06:44:23 Just to help me understand: why does this need to
horo 2016/10/21 10:56:39 If an error happens before receiving the HTTP resp
294 return;
295 DCHECK_NE(0, status.error_code);
296 std::unique_ptr<blink::WebServiceWorkerPreloadResponseCallbacks> callback(
297 std::move(callback_));
298 callback->onError(blink::WebServiceWorkerError(
299 blink::WebServiceWorkerError::ErrorTypeNetwork,
300 blink::WebString::fromUTF8(
301 "Service Worker navigation preload network error.")));
302 }
303
304 private:
305 mojom::URLLoaderPtr url_loader_;
306 mojo::Binding<mojom::URLLoaderClient> binding_;
307 std::unique_ptr<blink::WebServiceWorkerResponse> response_;
308 std::unique_ptr<blink::WebServiceWorkerPreloadResponseCallbacks> callback_;
309 };
310
228 class ServiceWorkerContextClient::FetchEventDispatcherImpl 311 class ServiceWorkerContextClient::FetchEventDispatcherImpl
229 : public NON_EXPORTED_BASE(mojom::FetchEventDispatcher) { 312 : public NON_EXPORTED_BASE(mojom::FetchEventDispatcher) {
230 public: 313 public:
231 static void Create(mojom::FetchEventDispatcherRequest request) { 314 static void Create(mojom::FetchEventDispatcherRequest request) {
232 mojo::MakeStrongBinding(base::MakeUnique<FetchEventDispatcherImpl>(), 315 mojo::MakeStrongBinding(base::MakeUnique<FetchEventDispatcherImpl>(),
233 std::move(request)); 316 std::move(request));
234 } 317 }
235 318
236 FetchEventDispatcherImpl() {} 319 FetchEventDispatcherImpl() {}
237 320
238 ~FetchEventDispatcherImpl() override {} 321 ~FetchEventDispatcherImpl() override {}
239 322
240 void DispatchFetchEvent(int fetch_event_id, 323 void DispatchFetchEvent(int fetch_event_id,
241 const ServiceWorkerFetchRequest& request, 324 const ServiceWorkerFetchRequest& request,
242 mojom::FetchEventPreloadHandlePtr preload_handle, 325 mojom::FetchEventPreloadHandlePtr preload_handle,
243 const DispatchFetchEventCallback& callback) override { 326 const DispatchFetchEventCallback& callback) override {
244 ServiceWorkerContextClient* client = 327 ServiceWorkerContextClient* client =
245 ServiceWorkerContextClient::ThreadSpecificInstance(); 328 ServiceWorkerContextClient::ThreadSpecificInstance();
246 if (!client) { 329 if (!client) {
247 callback.Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now()); 330 callback.Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now());
248 return; 331 return;
249 } 332 }
250 if (preload_handle) { 333 client->DispatchFetchEvent(fetch_event_id, request,
251 // TODO(horo): Implement this to pass |preload_handle| to FetchEvent. 334 preload_handle
252 NOTIMPLEMENTED(); 335 ? base::MakeUnique<NavigationPreloadRequest>(
253 return; 336 request.url, std::move(preload_handle))
254 } 337 : nullptr,
255 client->DispatchFetchEvent(fetch_event_id, request, callback); 338 callback);
256 } 339 }
257 340
258 private: 341 private:
259 DISALLOW_COPY_AND_ASSIGN(FetchEventDispatcherImpl); 342 DISALLOW_COPY_AND_ASSIGN(FetchEventDispatcherImpl);
260 }; 343 };
261 344
262 ServiceWorkerContextClient* 345 ServiceWorkerContextClient*
263 ServiceWorkerContextClient::ThreadSpecificInstance() { 346 ServiceWorkerContextClient::ThreadSpecificInstance() {
264 return g_worker_client_tls.Pointer()->Get(); 347 return g_worker_client_tls.Pointer()->Get();
265 } 348 }
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 Send(new ServiceWorkerHostMsg_FetchEventResponse( 711 Send(new ServiceWorkerHostMsg_FetchEventResponse(
629 GetRoutingID(), fetch_event_id, 712 GetRoutingID(), fetch_event_id,
630 SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, response, 713 SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, response,
631 base::Time::FromDoubleT(event_dispatch_time))); 714 base::Time::FromDoubleT(event_dispatch_time)));
632 } 715 }
633 716
634 void ServiceWorkerContextClient::didHandleFetchEvent( 717 void ServiceWorkerContextClient::didHandleFetchEvent(
635 int fetch_event_id, 718 int fetch_event_id,
636 blink::WebServiceWorkerEventResult result, 719 blink::WebServiceWorkerEventResult result,
637 double event_dispatch_time) { 720 double event_dispatch_time) {
721 if (context_->preload_requests.Lookup(fetch_event_id)) {
722 // Deletes NavigationPreloadRequest. If the network request is ongoing, it
723 // will be canceled by deleting the mojom::URLLoaderPtr in the
724 // NavigationPreloadRequest.
725 context_->preload_requests.Remove(fetch_event_id);
726 }
638 const FetchCallback* callback = 727 const FetchCallback* callback =
639 context_->fetch_event_callbacks.Lookup(fetch_event_id); 728 context_->fetch_event_callbacks.Lookup(fetch_event_id);
640 if (!callback) 729 if (!callback)
641 return; 730 return;
642 731
643 callback->Run(result == blink::WebServiceWorkerEventResultCompleted 732 callback->Run(result == blink::WebServiceWorkerEventResultCompleted
644 ? SERVICE_WORKER_OK 733 ? SERVICE_WORKER_OK
645 : SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, 734 : SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED,
646 base::Time::FromDoubleT(event_dispatch_time)); 735 base::Time::FromDoubleT(event_dispatch_time));
647 context_->fetch_event_callbacks.Remove(fetch_event_id); 736 context_->fetch_event_callbacks.Remove(fetch_event_id);
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
790 } 879 }
791 880
792 void ServiceWorkerContextClient::registerForeignFetchScopes( 881 void ServiceWorkerContextClient::registerForeignFetchScopes(
793 const blink::WebVector<blink::WebURL>& sub_scopes, 882 const blink::WebVector<blink::WebURL>& sub_scopes,
794 const blink::WebVector<blink::WebSecurityOrigin>& origins) { 883 const blink::WebVector<blink::WebSecurityOrigin>& origins) {
795 Send(new ServiceWorkerHostMsg_RegisterForeignFetchScopes( 884 Send(new ServiceWorkerHostMsg_RegisterForeignFetchScopes(
796 GetRoutingID(), std::vector<GURL>(sub_scopes.begin(), sub_scopes.end()), 885 GetRoutingID(), std::vector<GURL>(sub_scopes.begin(), sub_scopes.end()),
797 std::vector<url::Origin>(origins.begin(), origins.end()))); 886 std::vector<url::Origin>(origins.begin(), origins.end())));
798 } 887 }
799 888
889 void ServiceWorkerContextClient::registerPreloadResponseCallback(
890 int eventID,
891 std::unique_ptr<blink::WebServiceWorkerPreloadResponseCallbacks> callback) {
892 ServiceWorkerContextClient::NavigationPreloadRequest* preload_request =
893 context_->preload_requests.Lookup(eventID);
894 preload_request->RegisterCallback(std::move(callback));
895 }
896
800 void ServiceWorkerContextClient::DispatchSyncEvent( 897 void ServiceWorkerContextClient::DispatchSyncEvent(
801 const std::string& tag, 898 const std::string& tag,
802 blink::WebServiceWorkerContextProxy::LastChanceOption last_chance, 899 blink::WebServiceWorkerContextProxy::LastChanceOption last_chance,
803 const SyncCallback& callback) { 900 const SyncCallback& callback) {
804 TRACE_EVENT0("ServiceWorker", 901 TRACE_EVENT0("ServiceWorker",
805 "ServiceWorkerContextClient::DispatchSyncEvent"); 902 "ServiceWorkerContextClient::DispatchSyncEvent");
806 int request_id = 903 int request_id =
807 context_->sync_event_callbacks.Add(new SyncCallback(callback)); 904 context_->sync_event_callbacks.Add(new SyncCallback(callback));
808 905
809 // TODO(jkarlin): Make this blink::WebString::FromUTF8Lenient once 906 // TODO(jkarlin): Make this blink::WebString::FromUTF8Lenient once
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
880 977
881 void ServiceWorkerContextClient::OnInstallEvent(int request_id) { 978 void ServiceWorkerContextClient::OnInstallEvent(int request_id) {
882 TRACE_EVENT0("ServiceWorker", 979 TRACE_EVENT0("ServiceWorker",
883 "ServiceWorkerContextClient::OnInstallEvent"); 980 "ServiceWorkerContextClient::OnInstallEvent");
884 proxy_->dispatchInstallEvent(request_id); 981 proxy_->dispatchInstallEvent(request_id);
885 } 982 }
886 983
887 void ServiceWorkerContextClient::DispatchFetchEvent( 984 void ServiceWorkerContextClient::DispatchFetchEvent(
888 int fetch_event_id, 985 int fetch_event_id,
889 const ServiceWorkerFetchRequest& request, 986 const ServiceWorkerFetchRequest& request,
987 std::unique_ptr<NavigationPreloadRequest> preload_request,
890 const FetchCallback& callback) { 988 const FetchCallback& callback) {
989 const bool navigation_preload_sent = !!preload_request;
891 blink::WebServiceWorkerRequest webRequest; 990 blink::WebServiceWorkerRequest webRequest;
892 TRACE_EVENT0("ServiceWorker", 991 TRACE_EVENT0("ServiceWorker",
893 "ServiceWorkerContextClient::DispatchFetchEvent"); 992 "ServiceWorkerContextClient::DispatchFetchEvent");
894 context_->fetch_event_callbacks.AddWithID(new FetchCallback(callback), 993 context_->fetch_event_callbacks.AddWithID(new FetchCallback(callback),
895 fetch_event_id); 994 fetch_event_id);
995 if (preload_request) {
996 context_->preload_requests.AddWithID(std::move(preload_request),
997 fetch_event_id);
998 }
896 999
897 webRequest.setURL(blink::WebURL(request.url)); 1000 webRequest.setURL(blink::WebURL(request.url));
898 webRequest.setMethod(blink::WebString::fromUTF8(request.method)); 1001 webRequest.setMethod(blink::WebString::fromUTF8(request.method));
899 for (ServiceWorkerHeaderMap::const_iterator it = request.headers.begin(); 1002 for (ServiceWorkerHeaderMap::const_iterator it = request.headers.begin();
900 it != request.headers.end(); 1003 it != request.headers.end();
901 ++it) { 1004 ++it) {
902 webRequest.setHeader(blink::WebString::fromUTF8(it->first), 1005 webRequest.setHeader(blink::WebString::fromUTF8(it->first),
903 blink::WebString::fromUTF8(it->second)); 1006 blink::WebString::fromUTF8(it->second));
904 } 1007 }
905 if (!request.blob_uuid.empty()) { 1008 if (!request.blob_uuid.empty()) {
906 webRequest.setBlob(blink::WebString::fromUTF8(request.blob_uuid), 1009 webRequest.setBlob(blink::WebString::fromUTF8(request.blob_uuid),
907 request.blob_size); 1010 request.blob_size);
908 } 1011 }
909 webRequest.setReferrer( 1012 webRequest.setReferrer(
910 blink::WebString::fromUTF8(request.referrer.url.spec()), 1013 blink::WebString::fromUTF8(request.referrer.url.spec()),
911 request.referrer.policy); 1014 request.referrer.policy);
912 webRequest.setMode(GetBlinkFetchRequestMode(request.mode)); 1015 webRequest.setMode(GetBlinkFetchRequestMode(request.mode));
913 webRequest.setIsMainResourceLoad(request.is_main_resource_load); 1016 webRequest.setIsMainResourceLoad(request.is_main_resource_load);
914 webRequest.setCredentialsMode( 1017 webRequest.setCredentialsMode(
915 GetBlinkFetchCredentialsMode(request.credentials_mode)); 1018 GetBlinkFetchCredentialsMode(request.credentials_mode));
916 webRequest.setRedirectMode(GetBlinkFetchRedirectMode(request.redirect_mode)); 1019 webRequest.setRedirectMode(GetBlinkFetchRedirectMode(request.redirect_mode));
917 webRequest.setRequestContext( 1020 webRequest.setRequestContext(
918 GetBlinkRequestContext(request.request_context_type)); 1021 GetBlinkRequestContext(request.request_context_type));
919 webRequest.setFrameType(GetBlinkFrameType(request.frame_type)); 1022 webRequest.setFrameType(GetBlinkFrameType(request.frame_type));
920 webRequest.setClientId(blink::WebString::fromUTF8(request.client_id)); 1023 webRequest.setClientId(blink::WebString::fromUTF8(request.client_id));
921 webRequest.setIsReload(request.is_reload); 1024 webRequest.setIsReload(request.is_reload);
922 if (request.fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) { 1025 if (request.fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) {
923 proxy_->dispatchForeignFetchEvent(fetch_event_id, webRequest); 1026 proxy_->dispatchForeignFetchEvent(fetch_event_id, webRequest);
924 } else { 1027 } else {
925 proxy_->dispatchFetchEvent(fetch_event_id, webRequest); 1028 proxy_->dispatchFetchEvent(fetch_event_id, webRequest,
1029 navigation_preload_sent);
926 } 1030 }
927 } 1031 }
928 1032
929 void ServiceWorkerContextClient::OnNotificationClickEvent( 1033 void ServiceWorkerContextClient::OnNotificationClickEvent(
930 int request_id, 1034 int request_id,
931 const std::string& notification_id, 1035 const std::string& notification_id,
932 const PlatformNotificationData& notification_data, 1036 const PlatformNotificationData& notification_data,
933 int action_index, 1037 int action_index,
934 const base::NullableString16& reply) { 1038 const base::NullableString16& reply) {
935 TRACE_EVENT0("ServiceWorker", 1039 TRACE_EVENT0("ServiceWorker",
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
1150 } 1254 }
1151 1255
1152 base::WeakPtr<ServiceWorkerContextClient> 1256 base::WeakPtr<ServiceWorkerContextClient>
1153 ServiceWorkerContextClient::GetWeakPtr() { 1257 ServiceWorkerContextClient::GetWeakPtr() {
1154 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); 1258 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread());
1155 DCHECK(context_); 1259 DCHECK(context_);
1156 return context_->weak_factory.GetWeakPtr(); 1260 return context_->weak_factory.GetWeakPtr();
1157 } 1261 }
1158 1262
1159 } // namespace content 1263 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698