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

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: IFRAME_URL -> SCOPE 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 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 // Service workers are only available in secure contexts, so all requests 104 // Service workers are only available in secure contexts, so all requests
104 // are initiated in a secure context. 105 // are initiated in a secure context.
105 extra_data->set_initiated_in_secure_context(true); 106 extra_data->set_initiated_in_secure_context(true);
106 request.SetExtraData(extra_data.release()); 107 request.SetExtraData(extra_data.release());
107 } 108 }
108 109
109 private: 110 private:
110 std::unique_ptr<ServiceWorkerNetworkProvider> provider_; 111 std::unique_ptr<ServiceWorkerNetworkProvider> provider_;
111 }; 112 };
112 113
114 class StreamHandleListener
115 : public blink::WebServiceWorkerStreamHandle::Listener {
116 public:
117 StreamHandleListener(
118 blink::mojom::ServiceWorkerStreamCallbackPtr callback_ptr)
119 : callback_ptr_(std::move(callback_ptr)) {}
120
121 ~StreamHandleListener() override {}
122
123 void OnAborted() override { callback_ptr_->OnAborted(); }
124 void OnCompleted() override { callback_ptr_->OnCompleted(); }
125
126 private:
127 blink::mojom::ServiceWorkerStreamCallbackPtr callback_ptr_;
128 };
129
113 ServiceWorkerStatusCode EventResultToStatus( 130 ServiceWorkerStatusCode EventResultToStatus(
114 blink::WebServiceWorkerEventResult result) { 131 blink::WebServiceWorkerEventResult result) {
115 switch (result) { 132 switch (result) {
116 case blink::kWebServiceWorkerEventResultCompleted: 133 case blink::kWebServiceWorkerEventResultCompleted:
117 return SERVICE_WORKER_OK; 134 return SERVICE_WORKER_OK;
118 case blink::kWebServiceWorkerEventResultRejected: 135 case blink::kWebServiceWorkerEventResultRejected:
119 return SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED; 136 return SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED;
120 } 137 }
121 NOTREACHED() << "Got invalid result: " << result; 138 NOTREACHED() << "Got invalid result: " << result;
122 return SERVICE_WORKER_ERROR_FAILED; 139 return SERVICE_WORKER_ERROR_FAILED;
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 web_response->SetStatusText(blink::WebString::FromUTF8(response.status_text)); 229 web_response->SetStatusText(blink::WebString::FromUTF8(response.status_text));
213 web_response->SetResponseType(response.response_type); 230 web_response->SetResponseType(response.response_type);
214 for (const auto& pair : response.headers) { 231 for (const auto& pair : response.headers) {
215 web_response->SetHeader(blink::WebString::FromUTF8(pair.first), 232 web_response->SetHeader(blink::WebString::FromUTF8(pair.first),
216 blink::WebString::FromUTF8(pair.second)); 233 blink::WebString::FromUTF8(pair.second));
217 } 234 }
218 if (!response.blob_uuid.empty()) { 235 if (!response.blob_uuid.empty()) {
219 web_response->SetBlob(blink::WebString::FromASCII(response.blob_uuid), 236 web_response->SetBlob(blink::WebString::FromASCII(response.blob_uuid),
220 response.blob_size); 237 response.blob_size);
221 } 238 }
222 web_response->SetStreamURL(blink::WebURL(response.stream_url));
223 web_response->SetError(response.error); 239 web_response->SetError(response.error);
224 web_response->SetResponseTime(response.response_time.ToInternalValue()); 240 web_response->SetResponseTime(response.response_time.ToInternalValue());
225 if (response.is_in_cache_storage) { 241 if (response.is_in_cache_storage) {
226 web_response->SetCacheStorageCacheName( 242 web_response->SetCacheStorageCacheName(
227 blink::WebString::FromUTF8(response.cache_storage_cache_name)); 243 blink::WebString::FromUTF8(response.cache_storage_cache_name));
228 } 244 }
229 245
230 std::vector<blink::WebString> cors_exposed_header_names; 246 std::vector<blink::WebString> cors_exposed_header_names;
231 for (const auto& name : response.cors_exposed_header_names) 247 for (const auto& name : response.cors_exposed_header_names)
232 cors_exposed_header_names.push_back(blink::WebString::FromUTF8(name)); 248 cors_exposed_header_names.push_back(blink::WebString::FromUTF8(name));
233 249
234 web_response->SetCorsExposedHeaderNames( 250 web_response->SetCorsExposedHeaderNames(
235 blink::WebVector<blink::WebString>(cors_exposed_header_names)); 251 blink::WebVector<blink::WebString>(cors_exposed_header_names));
236 } 252 }
237 253
238 // Use this template in willDestroyWorkerContext to abort all the pending 254 // Use this template in willDestroyWorkerContext to abort all the pending
239 // events callbacks. 255 // events callbacks.
240 template <typename T> 256 template <typename T>
241 void AbortPendingEventCallbacks(T& callbacks) { 257 void AbortPendingEventCallbacks(T& callbacks) {
242 for (typename T::iterator it(&callbacks); !it.IsAtEnd(); it.Advance()) { 258 for (typename T::iterator it(&callbacks); !it.IsAtEnd(); it.Advance()) {
243 it.GetCurrentValue()->Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now()); 259 it.GetCurrentValue()->Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now());
244 } 260 }
245 } 261 }
246 262
263 template <typename Key, typename Callback>
264 void AbortPendingEventCallbacks(std::map<Key, Callback>& callbacks) {
265 for (const auto& it : callbacks)
266 it.second.Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now());
267 }
268
247 } // namespace 269 } // namespace
248 270
249 // Holding data that needs to be bound to the worker context on the 271 // Holding data that needs to be bound to the worker context on the
250 // worker thread. 272 // worker thread.
251 struct ServiceWorkerContextClient::WorkerContextData { 273 struct ServiceWorkerContextClient::WorkerContextData {
274 using SimpleEventCallback =
275 base::Callback<void(ServiceWorkerStatusCode, base::Time)>;
252 using ClientsCallbacksMap = 276 using ClientsCallbacksMap =
253 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsCallbacks>>; 277 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsCallbacks>>;
254 using ClaimClientsCallbacksMap = 278 using ClaimClientsCallbacksMap =
255 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsClaimCallbacks>>; 279 IDMap<std::unique_ptr<blink::WebServiceWorkerClientsClaimCallbacks>>;
256 using ClientCallbacksMap = 280 using ClientCallbacksMap =
257 IDMap<std::unique_ptr<blink::WebServiceWorkerClientCallbacks>>; 281 IDMap<std::unique_ptr<blink::WebServiceWorkerClientCallbacks>>;
258 using SkipWaitingCallbacksMap = 282 using SkipWaitingCallbacksMap =
259 IDMap<std::unique_ptr<blink::WebServiceWorkerSkipWaitingCallbacks>>; 283 IDMap<std::unique_ptr<blink::WebServiceWorkerSkipWaitingCallbacks>>;
260 using ActivateEventCallbacksMap = 284 using ActivateEventCallbacksMap =
261 IDMap<std::unique_ptr<const DispatchActivateEventCallback>>; 285 IDMap<std::unique_ptr<const DispatchActivateEventCallback>>;
262 using BackgroundFetchAbortEventCallbacksMap = 286 using BackgroundFetchAbortEventCallbacksMap =
263 IDMap<std::unique_ptr<const DispatchBackgroundFetchAbortEventCallback>>; 287 IDMap<std::unique_ptr<const DispatchBackgroundFetchAbortEventCallback>>;
264 using BackgroundFetchClickEventCallbacksMap = 288 using BackgroundFetchClickEventCallbacksMap =
265 IDMap<std::unique_ptr<const DispatchBackgroundFetchClickEventCallback>>; 289 IDMap<std::unique_ptr<const DispatchBackgroundFetchClickEventCallback>>;
266 using BackgroundFetchFailEventCallbacksMap = 290 using BackgroundFetchFailEventCallbacksMap =
267 IDMap<std::unique_ptr<const DispatchBackgroundFetchFailEventCallback>>; 291 IDMap<std::unique_ptr<const DispatchBackgroundFetchFailEventCallback>>;
268 using BackgroundFetchedEventCallbacksMap = 292 using BackgroundFetchedEventCallbacksMap =
269 IDMap<std::unique_ptr<const DispatchBackgroundFetchedEventCallback>>; 293 IDMap<std::unique_ptr<const DispatchBackgroundFetchedEventCallback>>;
270 using SyncEventCallbacksMap = IDMap<std::unique_ptr<const SyncCallback>>; 294 using SyncEventCallbacksMap = IDMap<std::unique_ptr<const SyncCallback>>;
271 using NotificationClickEventCallbacksMap = 295 using NotificationClickEventCallbacksMap =
272 IDMap<std::unique_ptr<const DispatchNotificationClickEventCallback>>; 296 IDMap<std::unique_ptr<const DispatchNotificationClickEventCallback>>;
273 using NotificationCloseEventCallbacksMap = 297 using NotificationCloseEventCallbacksMap =
274 IDMap<std::unique_ptr<const DispatchNotificationCloseEventCallback>>; 298 IDMap<std::unique_ptr<const DispatchNotificationCloseEventCallback>>;
275 using PushEventCallbacksMap = 299 using PushEventCallbacksMap =
276 IDMap<std::unique_ptr<const DispatchPushEventCallback>>; 300 IDMap<std::unique_ptr<const DispatchPushEventCallback>>;
277 using FetchEventCallbacksMap = IDMap<std::unique_ptr<const FetchCallback>>;
278 using ExtendableMessageEventCallbacksMap = 301 using ExtendableMessageEventCallbacksMap =
279 IDMap<std::unique_ptr<const DispatchExtendableMessageEventCallback>>; 302 IDMap<std::unique_ptr<const DispatchExtendableMessageEventCallback>>;
280 using NavigationPreloadRequestsMap = IDMap< 303 using NavigationPreloadRequestsMap = IDMap<
281 std::unique_ptr<ServiceWorkerContextClient::NavigationPreloadRequest>>; 304 std::unique_ptr<ServiceWorkerContextClient::NavigationPreloadRequest>>;
282 305
283 explicit WorkerContextData(ServiceWorkerContextClient* owner) 306 explicit WorkerContextData(ServiceWorkerContextClient* owner)
284 : event_dispatcher_binding(owner), 307 : event_dispatcher_binding(owner),
285 weak_factory(owner), 308 weak_factory(owner),
286 proxy_weak_factory(owner->proxy_) {} 309 proxy_weak_factory(owner->proxy_) {}
287 310
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 // Pending callbacks for Notification Click Events. 357 // Pending callbacks for Notification Click Events.
335 NotificationClickEventCallbacksMap notification_click_event_callbacks; 358 NotificationClickEventCallbacksMap notification_click_event_callbacks;
336 359
337 // Pending callbacks for Notification Close Events. 360 // Pending callbacks for Notification Close Events.
338 NotificationCloseEventCallbacksMap notification_close_event_callbacks; 361 NotificationCloseEventCallbacksMap notification_close_event_callbacks;
339 362
340 // Pending callbacks for Push Events. 363 // Pending callbacks for Push Events.
341 PushEventCallbacksMap push_event_callbacks; 364 PushEventCallbacksMap push_event_callbacks;
342 365
343 // Pending callbacks for Fetch Events. 366 // Pending callbacks for Fetch Events.
344 FetchEventCallbacksMap fetch_event_callbacks; 367 std::map<int /* fetch_event_id */, SimpleEventCallback> fetch_event_callbacks;
368
369 // Pending callbacks for respondWith on each fetch event.
370 std::map<int /* fetch_event_id */,
371 mojom::ServiceWorkerFetchResponseCallbackPtr>
372 fetch_response_callbacks;
345 373
346 // Pending callbacks for Extendable Message Events. 374 // Pending callbacks for Extendable Message Events.
347 ExtendableMessageEventCallbacksMap message_event_callbacks; 375 ExtendableMessageEventCallbacksMap message_event_callbacks;
348 376
349 // Pending navigation preload requests. 377 // Pending navigation preload requests.
350 NavigationPreloadRequestsMap preload_requests; 378 NavigationPreloadRequestsMap preload_requests;
351 379
352 base::ThreadChecker thread_checker; 380 base::ThreadChecker thread_checker;
353 base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory; 381 base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory;
354 base::WeakPtrFactory<blink::WebServiceWorkerContextProxy> proxy_weak_factory; 382 base::WeakPtrFactory<blink::WebServiceWorkerContextProxy> proxy_weak_factory;
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after
851 blink::WebServiceWorkerEventResult result, 879 blink::WebServiceWorkerEventResult result,
852 double event_dispatch_time) { 880 double event_dispatch_time) {
853 Send(new ServiceWorkerHostMsg_InstallEventFinished( 881 Send(new ServiceWorkerHostMsg_InstallEventFinished(
854 GetRoutingID(), request_id, result, proxy_->HasFetchEventHandler(), 882 GetRoutingID(), request_id, result, proxy_->HasFetchEventHandler(),
855 base::Time::FromDoubleT(event_dispatch_time))); 883 base::Time::FromDoubleT(event_dispatch_time)));
856 } 884 }
857 885
858 void ServiceWorkerContextClient::RespondToFetchEvent( 886 void ServiceWorkerContextClient::RespondToFetchEvent(
859 int fetch_event_id, 887 int fetch_event_id,
860 double event_dispatch_time) { 888 double event_dispatch_time) {
861 Send(new ServiceWorkerHostMsg_FetchEventResponse( 889 const mojom::ServiceWorkerFetchResponseCallbackPtr& response_callback =
862 GetRoutingID(), fetch_event_id, 890 context_->fetch_response_callbacks[fetch_event_id];
863 SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, ServiceWorkerResponse(), 891 DCHECK(response_callback.is_bound());
864 base::Time::FromDoubleT(event_dispatch_time))); 892 response_callback->OnFallback(base::Time::FromDoubleT(event_dispatch_time));
893 context_->fetch_response_callbacks.erase(fetch_event_id);
865 } 894 }
866 895
867 void ServiceWorkerContextClient::RespondToFetchEvent( 896 void ServiceWorkerContextClient::RespondToFetchEventWithResponse(
868 int fetch_event_id, 897 int fetch_event_id,
869 const blink::WebServiceWorkerResponse& web_response, 898 const blink::WebServiceWorkerResponse& web_response,
870 double event_dispatch_time) { 899 double event_dispatch_time) {
871 Send(new ServiceWorkerHostMsg_FetchEventResponse( 900 ServiceWorkerResponse response(
872 GetRoutingID(), fetch_event_id, 901 GetServiceWorkerResponseFromWebResponse(web_response));
873 SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, 902 const mojom::ServiceWorkerFetchResponseCallbackPtr& response_callback =
874 GetServiceWorkerResponseFromWebResponse(web_response), 903 context_->fetch_response_callbacks[fetch_event_id];
875 base::Time::FromDoubleT(event_dispatch_time))); 904 if (response.blob_uuid.size()) {
905 // Send the legacy IPC due to the ordering issue between respondWith and
906 // blob.
907 // TODO(shimazu): mojofy this IPC after blob starts using sync IPC for
908 // creation or is mojofied: https://crbug.com/611935.
909 Send(new ServiceWorkerHostMsg_FetchEventResponse(
910 GetRoutingID(), fetch_event_id, response,
911 base::Time::FromDoubleT(event_dispatch_time)));
912 } else {
913 response_callback->OnResponse(response,
914 base::Time::FromDoubleT(event_dispatch_time));
915 }
916 context_->fetch_response_callbacks.erase(fetch_event_id);
917 }
918
919 void ServiceWorkerContextClient::RespondToFetchEventWithResponseStream(
920 int fetch_event_id,
921 const blink::WebServiceWorkerResponse& web_response,
922 blink::WebServiceWorkerStreamHandle* web_stream_handle,
923 double event_dispatch_time) {
924 ServiceWorkerResponse response(
925 GetServiceWorkerResponseFromWebResponse(web_response));
926 const mojom::ServiceWorkerFetchResponseCallbackPtr& response_callback =
927 context_->fetch_response_callbacks[fetch_event_id];
928 blink::mojom::ServiceWorkerStreamHandlePtr stream_handle =
929 blink::mojom::ServiceWorkerStreamHandle::New();
930 blink::mojom::ServiceWorkerStreamCallbackPtr callback_ptr;
931 stream_handle->callback_request = mojo::MakeRequest(&callback_ptr);
932 stream_handle->stream = web_stream_handle->DrainStreamDataPipe();
933
934 web_stream_handle->SetListener(
935 base::MakeUnique<StreamHandleListener>(std::move(callback_ptr)));
936
937 response_callback->OnResponseStream(
938 response, std::move(stream_handle),
939 base::Time::FromDoubleT(event_dispatch_time));
940 context_->fetch_response_callbacks.erase(fetch_event_id);
876 } 941 }
877 942
878 void ServiceWorkerContextClient::DidHandleFetchEvent( 943 void ServiceWorkerContextClient::DidHandleFetchEvent(
879 int fetch_event_id, 944 int fetch_event_id,
880 blink::WebServiceWorkerEventResult result, 945 blink::WebServiceWorkerEventResult result,
881 double event_dispatch_time) { 946 double event_dispatch_time) {
882 const FetchCallback* callback = 947 const WorkerContextData::SimpleEventCallback& callback =
883 context_->fetch_event_callbacks.Lookup(fetch_event_id); 948 context_->fetch_event_callbacks[fetch_event_id];
884 DCHECK(callback); 949 DCHECK(callback);
885 callback->Run(EventResultToStatus(result), 950 callback.Run(EventResultToStatus(result),
886 base::Time::FromDoubleT(event_dispatch_time)); 951 base::Time::FromDoubleT(event_dispatch_time));
887 context_->fetch_event_callbacks.Remove(fetch_event_id); 952 context_->fetch_event_callbacks.erase(fetch_event_id);
888 } 953 }
889 954
890 void ServiceWorkerContextClient::DidHandleNotificationClickEvent( 955 void ServiceWorkerContextClient::DidHandleNotificationClickEvent(
891 int request_id, 956 int request_id,
892 blink::WebServiceWorkerEventResult result, 957 blink::WebServiceWorkerEventResult result,
893 double event_dispatch_time) { 958 double event_dispatch_time) {
894 const DispatchNotificationClickEventCallback* callback = 959 const DispatchNotificationClickEventCallback* callback =
895 context_->notification_click_event_callbacks.Lookup(request_id); 960 context_->notification_click_event_callbacks.Lookup(request_id);
896 DCHECK(callback); 961 DCHECK(callback);
897 962
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
1227 void ServiceWorkerContextClient::OnInstallEvent(int request_id) { 1292 void ServiceWorkerContextClient::OnInstallEvent(int request_id) {
1228 TRACE_EVENT0("ServiceWorker", 1293 TRACE_EVENT0("ServiceWorker",
1229 "ServiceWorkerContextClient::OnInstallEvent"); 1294 "ServiceWorkerContextClient::OnInstallEvent");
1230 proxy_->DispatchInstallEvent(request_id); 1295 proxy_->DispatchInstallEvent(request_id);
1231 } 1296 }
1232 1297
1233 void ServiceWorkerContextClient::DispatchFetchEvent( 1298 void ServiceWorkerContextClient::DispatchFetchEvent(
1234 int fetch_event_id, 1299 int fetch_event_id,
1235 const ServiceWorkerFetchRequest& request, 1300 const ServiceWorkerFetchRequest& request,
1236 mojom::FetchEventPreloadHandlePtr preload_handle, 1301 mojom::FetchEventPreloadHandlePtr preload_handle,
1302 mojom::ServiceWorkerFetchResponseCallbackPtr response_callback,
1237 const DispatchFetchEventCallback& callback) { 1303 const DispatchFetchEventCallback& callback) {
1238 std::unique_ptr<NavigationPreloadRequest> preload_request = 1304 std::unique_ptr<NavigationPreloadRequest> preload_request =
1239 preload_handle 1305 preload_handle
1240 ? base::MakeUnique<NavigationPreloadRequest>( 1306 ? base::MakeUnique<NavigationPreloadRequest>(
1241 fetch_event_id, request.url, std::move(preload_handle)) 1307 fetch_event_id, request.url, std::move(preload_handle))
1242 : nullptr; 1308 : nullptr;
1243 const bool navigation_preload_sent = !!preload_request; 1309 const bool navigation_preload_sent = !!preload_request;
1244 TRACE_EVENT0("ServiceWorker", 1310 TRACE_EVENT0("ServiceWorker",
1245 "ServiceWorkerContextClient::DispatchFetchEvent"); 1311 "ServiceWorkerContextClient::DispatchFetchEvent");
1246 context_->fetch_event_callbacks.AddWithID( 1312 context_->fetch_response_callbacks.insert(
1247 base::MakeUnique<FetchCallback>(callback), fetch_event_id); 1313 std::make_pair(fetch_event_id, std::move(response_callback)));
1314 context_->fetch_event_callbacks.insert(
1315 std::make_pair(fetch_event_id, std::move(callback)));
1248 if (preload_request) { 1316 if (preload_request) {
1249 context_->preload_requests.AddWithID(std::move(preload_request), 1317 context_->preload_requests.AddWithID(std::move(preload_request),
1250 fetch_event_id); 1318 fetch_event_id);
1251 } 1319 }
1252 1320
1253 blink::WebServiceWorkerRequest web_request; 1321 blink::WebServiceWorkerRequest web_request;
1254 ToWebServiceWorkerRequest(request, &web_request); 1322 ToWebServiceWorkerRequest(request, &web_request);
1255 1323
1256 if (request.fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) { 1324 if (request.fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) {
1257 proxy_->DispatchForeignFetchEvent(fetch_event_id, web_request); 1325 proxy_->DispatchForeignFetchEvent(fetch_event_id, web_request);
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
1521 } 1589 }
1522 1590
1523 base::WeakPtr<ServiceWorkerContextClient> 1591 base::WeakPtr<ServiceWorkerContextClient>
1524 ServiceWorkerContextClient::GetWeakPtr() { 1592 ServiceWorkerContextClient::GetWeakPtr() {
1525 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); 1593 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread());
1526 DCHECK(context_); 1594 DCHECK(context_);
1527 return context_->weak_factory.GetWeakPtr(); 1595 return context_->weak_factory.GetWeakPtr();
1528 } 1596 }
1529 1597
1530 } // namespace content 1598 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698