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

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

Issue 2703343002: ServiceWorker: Use mojo's data pipe for respondWith(stream) (Closed)
Patch Set: Addressed comments from kinuko and haraken Created 3 years, 8 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 <map>
7 #include <memory> 8 #include <memory>
8 #include <utility> 9 #include <utility>
9 10
10 #include "base/lazy_instance.h" 11 #include "base/lazy_instance.h"
11 #include "base/logging.h" 12 #include "base/logging.h"
12 #include "base/memory/ptr_util.h" 13 #include "base/memory/ptr_util.h"
13 #include "base/metrics/histogram_macros.h" 14 #include "base/metrics/histogram_macros.h"
14 #include "base/strings/utf_string_conversions.h" 15 #include "base/strings/utf_string_conversions.h"
15 #include "base/threading/thread_checker.h" 16 #include "base/threading/thread_checker.h"
16 #include "base/threading/thread_local.h" 17 #include "base/threading/thread_local.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 // Service workers are only available in secure contexts, so all requests 95 // Service workers are only available in secure contexts, so all requests
95 // are initiated in a secure context. 96 // are initiated in a secure context.
96 extra_data->set_initiated_in_secure_context(true); 97 extra_data->set_initiated_in_secure_context(true);
97 request.SetExtraData(extra_data.release()); 98 request.SetExtraData(extra_data.release());
98 } 99 }
99 100
100 private: 101 private:
101 std::unique_ptr<ServiceWorkerNetworkProvider> provider_; 102 std::unique_ptr<ServiceWorkerNetworkProvider> provider_;
102 }; 103 };
103 104
105 class StreamHandleListener
106 : public blink::WebServiceWorkerStreamHandle::Listener {
107 public:
108 StreamHandleListener(
109 blink::mojom::ServiceWorkerStreamCallbackPtr callback_ptr)
110 : callback_ptr_(std::move(callback_ptr)) {}
111
112 ~StreamHandleListener() override {}
113
114 void OnAborted() override { callback_ptr_->OnAborted(); }
115 void OnCompleted() override { callback_ptr_->OnCompleted(); }
116
117 private:
118 blink::mojom::ServiceWorkerStreamCallbackPtr callback_ptr_;
119 };
120
104 ServiceWorkerStatusCode EventResultToStatus( 121 ServiceWorkerStatusCode EventResultToStatus(
105 blink::WebServiceWorkerEventResult result) { 122 blink::WebServiceWorkerEventResult result) {
106 switch (result) { 123 switch (result) {
107 case blink::kWebServiceWorkerEventResultCompleted: 124 case blink::kWebServiceWorkerEventResultCompleted:
108 return SERVICE_WORKER_OK; 125 return SERVICE_WORKER_OK;
109 case blink::kWebServiceWorkerEventResultRejected: 126 case blink::kWebServiceWorkerEventResultRejected:
110 return SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED; 127 return SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED;
111 } 128 }
112 NOTREACHED() << "Got invalid result: " << result; 129 NOTREACHED() << "Got invalid result: " << result;
113 return SERVICE_WORKER_ERROR_FAILED; 130 return SERVICE_WORKER_ERROR_FAILED;
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 web_response->SetStatusText(blink::WebString::FromUTF8(response.status_text)); 220 web_response->SetStatusText(blink::WebString::FromUTF8(response.status_text));
204 web_response->SetResponseType(response.response_type); 221 web_response->SetResponseType(response.response_type);
205 for (const auto& pair : response.headers) { 222 for (const auto& pair : response.headers) {
206 web_response->SetHeader(blink::WebString::FromUTF8(pair.first), 223 web_response->SetHeader(blink::WebString::FromUTF8(pair.first),
207 blink::WebString::FromUTF8(pair.second)); 224 blink::WebString::FromUTF8(pair.second));
208 } 225 }
209 if (!response.blob_uuid.empty()) { 226 if (!response.blob_uuid.empty()) {
210 web_response->SetBlob(blink::WebString::FromASCII(response.blob_uuid), 227 web_response->SetBlob(blink::WebString::FromASCII(response.blob_uuid),
211 response.blob_size); 228 response.blob_size);
212 } 229 }
213 web_response->SetStreamURL(blink::WebURL(response.stream_url));
214 web_response->SetError(response.error); 230 web_response->SetError(response.error);
215 web_response->SetResponseTime(response.response_time.ToInternalValue()); 231 web_response->SetResponseTime(response.response_time.ToInternalValue());
216 if (response.is_in_cache_storage) { 232 if (response.is_in_cache_storage) {
217 web_response->SetCacheStorageCacheName( 233 web_response->SetCacheStorageCacheName(
218 blink::WebString::FromUTF8(response.cache_storage_cache_name)); 234 blink::WebString::FromUTF8(response.cache_storage_cache_name));
219 } 235 }
220 236
221 std::vector<blink::WebString> cors_exposed_header_names; 237 std::vector<blink::WebString> cors_exposed_header_names;
222 for (const auto& name : response.cors_exposed_header_names) 238 for (const auto& name : response.cors_exposed_header_names)
223 cors_exposed_header_names.push_back(blink::WebString::FromUTF8(name)); 239 cors_exposed_header_names.push_back(blink::WebString::FromUTF8(name));
224 240
225 web_response->SetCorsExposedHeaderNames( 241 web_response->SetCorsExposedHeaderNames(
226 blink::WebVector<blink::WebString>(cors_exposed_header_names)); 242 blink::WebVector<blink::WebString>(cors_exposed_header_names));
227 } 243 }
228 244
229 // Use this template in willDestroyWorkerContext to abort all the pending 245 // Use this template in willDestroyWorkerContext to abort all the pending
230 // events callbacks. 246 // events callbacks.
231 template <typename T> 247 template <typename T>
232 void AbortPendingEventCallbacks(T& callbacks) { 248 void AbortPendingEventCallbacks(T& callbacks) {
233 for (typename T::iterator it(&callbacks); !it.IsAtEnd(); it.Advance()) { 249 for (typename T::iterator it(&callbacks); !it.IsAtEnd(); it.Advance()) {
234 it.GetCurrentValue()->Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now()); 250 it.GetCurrentValue()->Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now());
235 } 251 }
236 } 252 }
237 253
254 template <typename Key, typename Callback>
255 void AbortPendingEventCallbacks(std::map<Key, Callback>& callbacks) {
256 for (const auto& it : callbacks)
257 it.second.Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now());
258 }
259
238 } // namespace 260 } // namespace
239 261
240 // Holding data that needs to be bound to the worker context on the 262 // Holding data that needs to be bound to the worker context on the
241 // worker thread. 263 // worker thread.
242 struct ServiceWorkerContextClient::WorkerContextData { 264 struct ServiceWorkerContextClient::WorkerContextData {
265 using SimpleEventCallback =
266 base::Callback<void(ServiceWorkerStatusCode, base::Time)>;
243 using ClientsCallbacksMap = 267 using ClientsCallbacksMap =
244 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsCallbacks>>; 268 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsCallbacks>>;
245 using ClaimClientsCallbacksMap = 269 using ClaimClientsCallbacksMap =
246 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsClaimCallbacks>>; 270 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsClaimCallbacks>>;
247 using ClientCallbacksMap = 271 using ClientCallbacksMap =
248 IDMap<std::unique_ptr<blink::WebServiceWorkerClientCallbacks>>; 272 IDMap<std::unique_ptr<blink::WebServiceWorkerClientCallbacks>>;
249 using SkipWaitingCallbacksMap = 273 using SkipWaitingCallbacksMap =
250 IDMap<std::unique_ptr<blink::WebServiceWorkerSkipWaitingCallbacks>>; 274 IDMap<std::unique_ptr<blink::WebServiceWorkerSkipWaitingCallbacks>>;
251 using ActivateEventCallbacksMap = 275 using ActivateEventCallbacksMap =
252 IDMap<std::unique_ptr<const DispatchActivateEventCallback>>; 276 IDMap<std::unique_ptr<const DispatchActivateEventCallback>>;
253 using BackgroundFetchAbortEventCallbacksMap = 277 using BackgroundFetchAbortEventCallbacksMap =
254 IDMap<std::unique_ptr<const DispatchBackgroundFetchAbortEventCallback>>; 278 IDMap<std::unique_ptr<const DispatchBackgroundFetchAbortEventCallback>>;
255 using BackgroundFetchClickEventCallbacksMap = 279 using BackgroundFetchClickEventCallbacksMap =
256 IDMap<std::unique_ptr<const DispatchBackgroundFetchClickEventCallback>>; 280 IDMap<std::unique_ptr<const DispatchBackgroundFetchClickEventCallback>>;
257 using BackgroundFetchFailEventCallbacksMap = 281 using BackgroundFetchFailEventCallbacksMap =
258 IDMap<std::unique_ptr<const DispatchBackgroundFetchFailEventCallback>>; 282 IDMap<std::unique_ptr<const DispatchBackgroundFetchFailEventCallback>>;
259 using BackgroundFetchedEventCallbacksMap = 283 using BackgroundFetchedEventCallbacksMap =
260 IDMap<std::unique_ptr<const DispatchBackgroundFetchedEventCallback>>; 284 IDMap<std::unique_ptr<const DispatchBackgroundFetchedEventCallback>>;
261 using SyncEventCallbacksMap = IDMap<std::unique_ptr<const SyncCallback>>; 285 using SyncEventCallbacksMap = IDMap<std::unique_ptr<const SyncCallback>>;
262 using NotificationClickEventCallbacksMap = 286 using NotificationClickEventCallbacksMap =
263 IDMap<std::unique_ptr<const DispatchNotificationClickEventCallback>>; 287 IDMap<std::unique_ptr<const DispatchNotificationClickEventCallback>>;
264 using NotificationCloseEventCallbacksMap = 288 using NotificationCloseEventCallbacksMap =
265 IDMap<std::unique_ptr<const DispatchNotificationCloseEventCallback>>; 289 IDMap<std::unique_ptr<const DispatchNotificationCloseEventCallback>>;
266 using PushEventCallbacksMap = 290 using PushEventCallbacksMap =
267 IDMap<std::unique_ptr<const DispatchPushEventCallback>>; 291 IDMap<std::unique_ptr<const DispatchPushEventCallback>>;
268 using FetchEventCallbacksMap = IDMap<std::unique_ptr<const FetchCallback>>;
269 using ExtendableMessageEventCallbacksMap = 292 using ExtendableMessageEventCallbacksMap =
270 IDMap<std::unique_ptr<const DispatchExtendableMessageEventCallback>>; 293 IDMap<std::unique_ptr<const DispatchExtendableMessageEventCallback>>;
271 using NavigationPreloadRequestsMap = IDMap< 294 using NavigationPreloadRequestsMap = IDMap<
272 std::unique_ptr<ServiceWorkerContextClient::NavigationPreloadRequest>>; 295 std::unique_ptr<ServiceWorkerContextClient::NavigationPreloadRequest>>;
273 296
274 explicit WorkerContextData(ServiceWorkerContextClient* owner) 297 explicit WorkerContextData(ServiceWorkerContextClient* owner)
275 : event_dispatcher_binding(owner), 298 : event_dispatcher_binding(owner),
276 weak_factory(owner), 299 weak_factory(owner),
277 proxy_weak_factory(owner->proxy_) {} 300 proxy_weak_factory(owner->proxy_) {}
278 301
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 // Pending callbacks for Notification Click Events. 348 // Pending callbacks for Notification Click Events.
326 NotificationClickEventCallbacksMap notification_click_event_callbacks; 349 NotificationClickEventCallbacksMap notification_click_event_callbacks;
327 350
328 // Pending callbacks for Notification Close Events. 351 // Pending callbacks for Notification Close Events.
329 NotificationCloseEventCallbacksMap notification_close_event_callbacks; 352 NotificationCloseEventCallbacksMap notification_close_event_callbacks;
330 353
331 // Pending callbacks for Push Events. 354 // Pending callbacks for Push Events.
332 PushEventCallbacksMap push_event_callbacks; 355 PushEventCallbacksMap push_event_callbacks;
333 356
334 // Pending callbacks for Fetch Events. 357 // Pending callbacks for Fetch Events.
335 FetchEventCallbacksMap fetch_event_callbacks; 358 std::map<int /* fetch_event_id */, SimpleEventCallback> fetch_event_callbacks;
359
360 // Pending callbacks for respondWith on each fetch event.
361 std::map<int /* fetch_event_id */,
362 mojom::ServiceWorkerFetchResponseCallbackPtr>
363 fetch_response_callbacks;
336 364
337 // Pending callbacks for Extendable Message Events. 365 // Pending callbacks for Extendable Message Events.
338 ExtendableMessageEventCallbacksMap message_event_callbacks; 366 ExtendableMessageEventCallbacksMap message_event_callbacks;
339 367
340 // Pending navigation preload requests. 368 // Pending navigation preload requests.
341 NavigationPreloadRequestsMap preload_requests; 369 NavigationPreloadRequestsMap preload_requests;
342 370
343 base::ThreadChecker thread_checker; 371 base::ThreadChecker thread_checker;
344 base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory; 372 base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory;
345 base::WeakPtrFactory<blink::WebServiceWorkerContextProxy> proxy_weak_factory; 373 base::WeakPtrFactory<blink::WebServiceWorkerContextProxy> proxy_weak_factory;
(...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after
865 893
866 void ServiceWorkerContextClient::DidHandleInstallEvent( 894 void ServiceWorkerContextClient::DidHandleInstallEvent(
867 int request_id, 895 int request_id,
868 blink::WebServiceWorkerEventResult result, 896 blink::WebServiceWorkerEventResult result,
869 double event_dispatch_time) { 897 double event_dispatch_time) {
870 Send(new ServiceWorkerHostMsg_InstallEventFinished( 898 Send(new ServiceWorkerHostMsg_InstallEventFinished(
871 GetRoutingID(), request_id, result, proxy_->HasFetchEventHandler(), 899 GetRoutingID(), request_id, result, proxy_->HasFetchEventHandler(),
872 base::Time::FromDoubleT(event_dispatch_time))); 900 base::Time::FromDoubleT(event_dispatch_time)));
873 } 901 }
874 902
875 void ServiceWorkerContextClient::RespondToFetchEvent( 903 void ServiceWorkerContextClient::RespondToFetchEventWithNoResponse(
876 int fetch_event_id, 904 int fetch_event_id,
877 double event_dispatch_time) { 905 double event_dispatch_time) {
878 Send(new ServiceWorkerHostMsg_FetchEventResponse( 906 const mojom::ServiceWorkerFetchResponseCallbackPtr& response_callback =
879 GetRoutingID(), fetch_event_id, 907 context_->fetch_response_callbacks[fetch_event_id];
880 SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, ServiceWorkerResponse(), 908 DCHECK(response_callback.is_bound());
881 base::Time::FromDoubleT(event_dispatch_time))); 909 response_callback->OnFallback(base::Time::FromDoubleT(event_dispatch_time));
910 context_->fetch_response_callbacks.erase(fetch_event_id);
882 } 911 }
883 912
884 void ServiceWorkerContextClient::RespondToFetchEvent( 913 void ServiceWorkerContextClient::RespondToFetchEvent(
885 int fetch_event_id, 914 int fetch_event_id,
886 const blink::WebServiceWorkerResponse& web_response, 915 const blink::WebServiceWorkerResponse& web_response,
887 double event_dispatch_time) { 916 double event_dispatch_time) {
888 Send(new ServiceWorkerHostMsg_FetchEventResponse( 917 ServiceWorkerResponse response(
889 GetRoutingID(), fetch_event_id, 918 GetServiceWorkerResponseFromWebResponse(web_response));
890 SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, 919 const mojom::ServiceWorkerFetchResponseCallbackPtr& response_callback =
891 GetServiceWorkerResponseFromWebResponse(web_response), 920 context_->fetch_response_callbacks[fetch_event_id];
892 base::Time::FromDoubleT(event_dispatch_time))); 921 if (response.blob_uuid.size()) {
922 // Send the legacy IPC due to the ordering issue between respondWith and
923 // blob.
924 // TODO(shimazu): mojofy this IPC after blob starts using sync IPC for
925 // creation or is mojofied: https://crbug.com/611935.
926 Send(new ServiceWorkerHostMsg_FetchEventResponse(
927 GetRoutingID(), fetch_event_id, response,
928 base::Time::FromDoubleT(event_dispatch_time)));
929 } else {
930 response_callback->OnResponse(response,
931 base::Time::FromDoubleT(event_dispatch_time));
932 }
933 context_->fetch_response_callbacks.erase(fetch_event_id);
934 }
935
936 void ServiceWorkerContextClient::RespondToFetchEventWithResponseStream(
937 int fetch_event_id,
938 const blink::WebServiceWorkerResponse& web_response,
939 blink::WebServiceWorkerStreamHandle* web_body_as_stream,
940 double event_dispatch_time) {
941 ServiceWorkerResponse response(
942 GetServiceWorkerResponseFromWebResponse(web_response));
943 const mojom::ServiceWorkerFetchResponseCallbackPtr& response_callback =
944 context_->fetch_response_callbacks[fetch_event_id];
945 blink::mojom::ServiceWorkerStreamHandlePtr body_as_stream =
946 blink::mojom::ServiceWorkerStreamHandle::New();
947 blink::mojom::ServiceWorkerStreamCallbackPtr callback_ptr;
948 body_as_stream->callback_request = mojo::MakeRequest(&callback_ptr);
949 body_as_stream->stream = web_body_as_stream->DrainStreamDataPipe();
950
951 web_body_as_stream->SetListener(
952 base::MakeUnique<StreamHandleListener>(std::move(callback_ptr)));
953
954 response_callback->OnResponseStream(
955 response, std::move(body_as_stream),
956 base::Time::FromDoubleT(event_dispatch_time));
957 context_->fetch_response_callbacks.erase(fetch_event_id);
893 } 958 }
894 959
895 void ServiceWorkerContextClient::DidHandleFetchEvent( 960 void ServiceWorkerContextClient::DidHandleFetchEvent(
896 int fetch_event_id, 961 int fetch_event_id,
897 blink::WebServiceWorkerEventResult result, 962 blink::WebServiceWorkerEventResult result,
898 double event_dispatch_time) { 963 double event_dispatch_time) {
899 const FetchCallback* callback = 964 const WorkerContextData::SimpleEventCallback& callback =
900 context_->fetch_event_callbacks.Lookup(fetch_event_id); 965 context_->fetch_event_callbacks[fetch_event_id];
901 DCHECK(callback); 966 DCHECK(callback);
902 callback->Run(EventResultToStatus(result), 967 callback.Run(EventResultToStatus(result),
903 base::Time::FromDoubleT(event_dispatch_time)); 968 base::Time::FromDoubleT(event_dispatch_time));
904 context_->fetch_event_callbacks.Remove(fetch_event_id); 969 context_->fetch_event_callbacks.erase(fetch_event_id);
905 } 970 }
906 971
907 void ServiceWorkerContextClient::DidHandleNotificationClickEvent( 972 void ServiceWorkerContextClient::DidHandleNotificationClickEvent(
908 int request_id, 973 int request_id,
909 blink::WebServiceWorkerEventResult result, 974 blink::WebServiceWorkerEventResult result,
910 double event_dispatch_time) { 975 double event_dispatch_time) {
911 const DispatchNotificationClickEventCallback* callback = 976 const DispatchNotificationClickEventCallback* callback =
912 context_->notification_click_event_callbacks.Lookup(request_id); 977 context_->notification_click_event_callbacks.Lookup(request_id);
913 DCHECK(callback); 978 DCHECK(callback);
914 979
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
1244 void ServiceWorkerContextClient::OnInstallEvent(int request_id) { 1309 void ServiceWorkerContextClient::OnInstallEvent(int request_id) {
1245 TRACE_EVENT0("ServiceWorker", 1310 TRACE_EVENT0("ServiceWorker",
1246 "ServiceWorkerContextClient::OnInstallEvent"); 1311 "ServiceWorkerContextClient::OnInstallEvent");
1247 proxy_->DispatchInstallEvent(request_id); 1312 proxy_->DispatchInstallEvent(request_id);
1248 } 1313 }
1249 1314
1250 void ServiceWorkerContextClient::DispatchFetchEvent( 1315 void ServiceWorkerContextClient::DispatchFetchEvent(
1251 int fetch_event_id, 1316 int fetch_event_id,
1252 const ServiceWorkerFetchRequest& request, 1317 const ServiceWorkerFetchRequest& request,
1253 mojom::FetchEventPreloadHandlePtr preload_handle, 1318 mojom::FetchEventPreloadHandlePtr preload_handle,
1319 mojom::ServiceWorkerFetchResponseCallbackPtr response_callback,
1254 const DispatchFetchEventCallback& callback) { 1320 const DispatchFetchEventCallback& callback) {
1255 std::unique_ptr<NavigationPreloadRequest> preload_request = 1321 std::unique_ptr<NavigationPreloadRequest> preload_request =
1256 preload_handle 1322 preload_handle
1257 ? base::MakeUnique<NavigationPreloadRequest>( 1323 ? base::MakeUnique<NavigationPreloadRequest>(
1258 fetch_event_id, request.url, std::move(preload_handle)) 1324 fetch_event_id, request.url, std::move(preload_handle))
1259 : nullptr; 1325 : nullptr;
1260 const bool navigation_preload_sent = !!preload_request; 1326 const bool navigation_preload_sent = !!preload_request;
1261 TRACE_EVENT0("ServiceWorker", 1327 TRACE_EVENT0("ServiceWorker",
1262 "ServiceWorkerContextClient::DispatchFetchEvent"); 1328 "ServiceWorkerContextClient::DispatchFetchEvent");
1263 context_->fetch_event_callbacks.AddWithID( 1329 context_->fetch_response_callbacks.insert(
1264 base::MakeUnique<FetchCallback>(callback), fetch_event_id); 1330 std::make_pair(fetch_event_id, std::move(response_callback)));
1331 context_->fetch_event_callbacks.insert(
1332 std::make_pair(fetch_event_id, std::move(callback)));
1265 if (preload_request) { 1333 if (preload_request) {
1266 context_->preload_requests.AddWithID(std::move(preload_request), 1334 context_->preload_requests.AddWithID(std::move(preload_request),
1267 fetch_event_id); 1335 fetch_event_id);
1268 } 1336 }
1269 1337
1270 blink::WebServiceWorkerRequest web_request; 1338 blink::WebServiceWorkerRequest web_request;
1271 ToWebServiceWorkerRequest(request, &web_request); 1339 ToWebServiceWorkerRequest(request, &web_request);
1272 1340
1273 if (request.fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) { 1341 if (request.fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) {
1274 proxy_->DispatchForeignFetchEvent(fetch_event_id, web_request); 1342 proxy_->DispatchForeignFetchEvent(fetch_event_id, web_request);
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
1538 } 1606 }
1539 1607
1540 base::WeakPtr<ServiceWorkerContextClient> 1608 base::WeakPtr<ServiceWorkerContextClient>
1541 ServiceWorkerContextClient::GetWeakPtr() { 1609 ServiceWorkerContextClient::GetWeakPtr() {
1542 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); 1610 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread());
1543 DCHECK(context_); 1611 DCHECK(context_);
1544 return context_->weak_factory.GetWeakPtr(); 1612 return context_->weak_factory.GetWeakPtr();
1545 } 1613 }
1546 1614
1547 } // namespace content 1615 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698