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

Side by Side Diff: content/child/service_worker/service_worker_dispatcher.cc

Issue 1011643002: ServiceWorker: Introduce SWMessageSender in order to mock IPC messaging (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add header comment Created 5 years, 9 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/child/service_worker/service_worker_dispatcher.h" 5 #include "content/child/service_worker/service_worker_dispatcher.h"
6 6
7 #include "base/lazy_instance.h" 7 #include "base/lazy_instance.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "base/threading/thread_local.h" 9 #include "base/threading/thread_local.h"
10 #include "base/trace_event/trace_event.h" 10 #include "base/trace_event/trace_event.h"
11 #include "content/child/child_thread_impl.h" 11 #include "content/child/child_thread_impl.h"
12 #include "content/child/service_worker/service_worker_handle_reference.h" 12 #include "content/child/service_worker/service_worker_handle_reference.h"
13 #include "content/child/service_worker/service_worker_message_sender.h"
13 #include "content/child/service_worker/service_worker_provider_context.h" 14 #include "content/child/service_worker/service_worker_provider_context.h"
14 #include "content/child/service_worker/service_worker_registration_handle_refere nce.h" 15 #include "content/child/service_worker/service_worker_registration_handle_refere nce.h"
15 #include "content/child/service_worker/web_service_worker_impl.h" 16 #include "content/child/service_worker/web_service_worker_impl.h"
16 #include "content/child/service_worker/web_service_worker_registration_impl.h" 17 #include "content/child/service_worker/web_service_worker_registration_impl.h"
17 #include "content/child/thread_safe_sender.h" 18 #include "content/child/thread_safe_sender.h"
18 #include "content/child/webmessageportchannel_impl.h" 19 #include "content/child/webmessageportchannel_impl.h"
19 #include "content/common/service_worker/service_worker_messages.h" 20 #include "content/common/service_worker/service_worker_messages.h"
20 #include "content/common/service_worker/service_worker_types.h" 21 #include "content/common/service_worker/service_worker_types.h"
21 #include "content/public/common/url_utils.h" 22 #include "content/public/common/url_utils.h"
22 #include "third_party/WebKit/public/platform/WebServiceWorkerClientsInfo.h" 23 #include "third_party/WebKit/public/platform/WebServiceWorkerClientsInfo.h"
(...skipping 15 matching lines...) Expand all
38 ServiceWorkerDispatcher* const kHasBeenDeleted = 39 ServiceWorkerDispatcher* const kHasBeenDeleted =
39 reinterpret_cast<ServiceWorkerDispatcher*>(0x1); 40 reinterpret_cast<ServiceWorkerDispatcher*>(0x1);
40 41
41 int CurrentWorkerId() { 42 int CurrentWorkerId() {
42 return WorkerTaskRunner::Instance()->CurrentWorkerId(); 43 return WorkerTaskRunner::Instance()->CurrentWorkerId();
43 } 44 }
44 45
45 } // namespace 46 } // namespace
46 47
47 ServiceWorkerDispatcher::ServiceWorkerDispatcher( 48 ServiceWorkerDispatcher::ServiceWorkerDispatcher(
48 ThreadSafeSender* thread_safe_sender) 49 ServiceWorkerMessageSender* sender)
49 : thread_safe_sender_(thread_safe_sender) { 50 : sender_(sender) {
50 g_dispatcher_tls.Pointer()->Set(this); 51 g_dispatcher_tls.Pointer()->Set(this);
51 } 52 }
52 53
53 ServiceWorkerDispatcher::~ServiceWorkerDispatcher() { 54 ServiceWorkerDispatcher::~ServiceWorkerDispatcher() {
54 g_dispatcher_tls.Pointer()->Set(kHasBeenDeleted); 55 g_dispatcher_tls.Pointer()->Set(kHasBeenDeleted);
55 } 56 }
56 57
57 void ServiceWorkerDispatcher::OnMessageReceived(const IPC::Message& msg) { 58 void ServiceWorkerDispatcher::OnMessageReceived(const IPC::Message& msg) {
58 bool handled = true; 59 bool handled = true;
59 IPC_BEGIN_MESSAGE_MAP(ServiceWorkerDispatcher, msg) 60 IPC_BEGIN_MESSAGE_MAP(ServiceWorkerDispatcher, msg)
(...skipping 24 matching lines...) Expand all
84 OnUpdateFound) 85 OnUpdateFound)
85 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetControllerServiceWorker, 86 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetControllerServiceWorker,
86 OnSetControllerServiceWorker) 87 OnSetControllerServiceWorker)
87 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToDocument, 88 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToDocument,
88 OnPostMessage) 89 OnPostMessage)
89 IPC_MESSAGE_UNHANDLED(handled = false) 90 IPC_MESSAGE_UNHANDLED(handled = false)
90 IPC_END_MESSAGE_MAP() 91 IPC_END_MESSAGE_MAP()
91 DCHECK(handled) << "Unhandled message:" << msg.type(); 92 DCHECK(handled) << "Unhandled message:" << msg.type();
92 } 93 }
93 94
94 bool ServiceWorkerDispatcher::Send(IPC::Message* msg) {
95 return thread_safe_sender_->Send(msg);
96 }
97
98 void ServiceWorkerDispatcher::RegisterServiceWorker( 95 void ServiceWorkerDispatcher::RegisterServiceWorker(
99 int provider_id, 96 int provider_id,
100 const GURL& pattern, 97 const GURL& pattern,
101 const GURL& script_url, 98 const GURL& script_url,
102 WebServiceWorkerRegistrationCallbacks* callbacks) { 99 WebServiceWorkerRegistrationCallbacks* callbacks) {
103 DCHECK(callbacks); 100 DCHECK(callbacks);
104 101
105 if (pattern.possibly_invalid_spec().size() > GetMaxURLChars() || 102 if (pattern.possibly_invalid_spec().size() > GetMaxURLChars() ||
106 script_url.possibly_invalid_spec().size() > GetMaxURLChars()) { 103 script_url.possibly_invalid_spec().size() > GetMaxURLChars()) {
107 scoped_ptr<WebServiceWorkerRegistrationCallbacks> 104 scoped_ptr<WebServiceWorkerRegistrationCallbacks>
108 owned_callbacks(callbacks); 105 owned_callbacks(callbacks);
109 std::string error_message(kServiceWorkerRegisterErrorPrefix); 106 std::string error_message(kServiceWorkerRegisterErrorPrefix);
110 error_message += "The provided scriptURL or scope is too long."; 107 error_message += "The provided scriptURL or scope is too long.";
111 scoped_ptr<WebServiceWorkerError> error( 108 scoped_ptr<WebServiceWorkerError> error(
112 new WebServiceWorkerError(WebServiceWorkerError::ErrorTypeSecurity, 109 new WebServiceWorkerError(WebServiceWorkerError::ErrorTypeSecurity,
113 blink::WebString::fromUTF8(error_message))); 110 blink::WebString::fromUTF8(error_message)));
114 callbacks->onError(error.release()); 111 callbacks->onError(error.release());
115 return; 112 return;
116 } 113 }
117 114
118 int request_id = pending_registration_callbacks_.Add(callbacks); 115 int request_id = pending_registration_callbacks_.Add(callbacks);
119 TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker", 116 TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker",
120 "ServiceWorkerDispatcher::RegisterServiceWorker", 117 "ServiceWorkerDispatcher::RegisterServiceWorker",
121 request_id, 118 request_id,
122 "Scope", pattern.spec(), 119 "Scope", pattern.spec(),
123 "Script URL", script_url.spec()); 120 "Script URL", script_url.spec());
124 thread_safe_sender_->Send(new ServiceWorkerHostMsg_RegisterServiceWorker( 121 sender_->Send(new ServiceWorkerHostMsg_RegisterServiceWorker(
125 CurrentWorkerId(), request_id, provider_id, pattern, script_url)); 122 CurrentWorkerId(), request_id, provider_id, pattern, script_url));
126 } 123 }
127 124
128 void ServiceWorkerDispatcher::UnregisterServiceWorker( 125 void ServiceWorkerDispatcher::UnregisterServiceWorker(
129 int provider_id, 126 int provider_id,
130 const GURL& pattern, 127 const GURL& pattern,
131 WebServiceWorkerUnregistrationCallbacks* callbacks) { 128 WebServiceWorkerUnregistrationCallbacks* callbacks) {
132 DCHECK(callbacks); 129 DCHECK(callbacks);
133 130
134 if (pattern.possibly_invalid_spec().size() > GetMaxURLChars()) { 131 if (pattern.possibly_invalid_spec().size() > GetMaxURLChars()) {
135 scoped_ptr<WebServiceWorkerUnregistrationCallbacks> 132 scoped_ptr<WebServiceWorkerUnregistrationCallbacks>
136 owned_callbacks(callbacks); 133 owned_callbacks(callbacks);
137 std::string error_message(kServiceWorkerUnregisterErrorPrefix); 134 std::string error_message(kServiceWorkerUnregisterErrorPrefix);
138 error_message += "The provided scope is too long."; 135 error_message += "The provided scope is too long.";
139 scoped_ptr<WebServiceWorkerError> error( 136 scoped_ptr<WebServiceWorkerError> error(
140 new WebServiceWorkerError(WebServiceWorkerError::ErrorTypeSecurity, 137 new WebServiceWorkerError(WebServiceWorkerError::ErrorTypeSecurity,
141 blink::WebString::fromUTF8(error_message))); 138 blink::WebString::fromUTF8(error_message)));
142 callbacks->onError(error.release()); 139 callbacks->onError(error.release());
143 return; 140 return;
144 } 141 }
145 142
146 int request_id = pending_unregistration_callbacks_.Add(callbacks); 143 int request_id = pending_unregistration_callbacks_.Add(callbacks);
147 TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker", 144 TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker",
148 "ServiceWorkerDispatcher::UnregisterServiceWorker", 145 "ServiceWorkerDispatcher::UnregisterServiceWorker",
149 request_id, 146 request_id,
150 "Scope", pattern.spec()); 147 "Scope", pattern.spec());
151 thread_safe_sender_->Send(new ServiceWorkerHostMsg_UnregisterServiceWorker( 148 sender_->Send(new ServiceWorkerHostMsg_UnregisterServiceWorker(
152 CurrentWorkerId(), request_id, provider_id, pattern)); 149 CurrentWorkerId(), request_id, provider_id, pattern));
153 } 150 }
154 151
155 void ServiceWorkerDispatcher::GetRegistration( 152 void ServiceWorkerDispatcher::GetRegistration(
156 int provider_id, 153 int provider_id,
157 const GURL& document_url, 154 const GURL& document_url,
158 WebServiceWorkerRegistrationCallbacks* callbacks) { 155 WebServiceWorkerRegistrationCallbacks* callbacks) {
159 DCHECK(callbacks); 156 DCHECK(callbacks);
160 157
161 if (document_url.possibly_invalid_spec().size() > GetMaxURLChars()) { 158 if (document_url.possibly_invalid_spec().size() > GetMaxURLChars()) {
162 scoped_ptr<WebServiceWorkerRegistrationCallbacks> 159 scoped_ptr<WebServiceWorkerRegistrationCallbacks>
163 owned_callbacks(callbacks); 160 owned_callbacks(callbacks);
164 std::string error_message(kServiceWorkerGetRegistrationErrorPrefix); 161 std::string error_message(kServiceWorkerGetRegistrationErrorPrefix);
165 error_message += "The provided documentURL is too long."; 162 error_message += "The provided documentURL is too long.";
166 scoped_ptr<WebServiceWorkerError> error( 163 scoped_ptr<WebServiceWorkerError> error(
167 new WebServiceWorkerError(WebServiceWorkerError::ErrorTypeSecurity, 164 new WebServiceWorkerError(WebServiceWorkerError::ErrorTypeSecurity,
168 blink::WebString::fromUTF8(error_message))); 165 blink::WebString::fromUTF8(error_message)));
169 callbacks->onError(error.release()); 166 callbacks->onError(error.release());
170 return; 167 return;
171 } 168 }
172 169
173 int request_id = pending_get_registration_callbacks_.Add(callbacks); 170 int request_id = pending_get_registration_callbacks_.Add(callbacks);
174 TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker", 171 TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker",
175 "ServiceWorkerDispatcher::GetRegistration", 172 "ServiceWorkerDispatcher::GetRegistration",
176 request_id, 173 request_id,
177 "Document URL", document_url.spec()); 174 "Document URL", document_url.spec());
178 thread_safe_sender_->Send(new ServiceWorkerHostMsg_GetRegistration( 175 sender_->Send(new ServiceWorkerHostMsg_GetRegistration(
179 CurrentWorkerId(), request_id, provider_id, document_url)); 176 CurrentWorkerId(), request_id, provider_id, document_url));
180 } 177 }
181 178
182 void ServiceWorkerDispatcher::GetRegistrationForReady( 179 void ServiceWorkerDispatcher::GetRegistrationForReady(
183 int provider_id, 180 int provider_id,
184 WebServiceWorkerGetRegistrationForReadyCallbacks* callbacks) { 181 WebServiceWorkerGetRegistrationForReadyCallbacks* callbacks) {
185 int request_id = get_for_ready_callbacks_.Add(callbacks); 182 int request_id = get_for_ready_callbacks_.Add(callbacks);
186 TRACE_EVENT_ASYNC_BEGIN0("ServiceWorker", 183 TRACE_EVENT_ASYNC_BEGIN0("ServiceWorker",
187 "ServiceWorkerDispatcher::GetRegistrationForReady", 184 "ServiceWorkerDispatcher::GetRegistrationForReady",
188 request_id); 185 request_id);
189 thread_safe_sender_->Send(new ServiceWorkerHostMsg_GetRegistrationForReady( 186 sender_->Send(new ServiceWorkerHostMsg_GetRegistrationForReady(
190 CurrentWorkerId(), request_id, provider_id)); 187 CurrentWorkerId(), request_id, provider_id));
191 } 188 }
192 189
193 void ServiceWorkerDispatcher::AddProviderContext( 190 void ServiceWorkerDispatcher::AddProviderContext(
194 ServiceWorkerProviderContext* provider_context) { 191 ServiceWorkerProviderContext* provider_context) {
195 DCHECK(provider_context); 192 DCHECK(provider_context);
196 int provider_id = provider_context->provider_id(); 193 int provider_id = provider_context->provider_id();
197 DCHECK(!ContainsKey(provider_contexts_, provider_id)); 194 DCHECK(!ContainsKey(provider_contexts_, provider_id));
198 provider_contexts_[provider_id] = provider_context; 195 provider_contexts_[provider_id] = provider_context;
199 } 196 }
(...skipping 18 matching lines...) Expand all
218 } 215 }
219 216
220 void ServiceWorkerDispatcher::RemoveProviderClient(int provider_id) { 217 void ServiceWorkerDispatcher::RemoveProviderClient(int provider_id) {
221 // This could be possibly called multiple times to ensure termination. 218 // This could be possibly called multiple times to ensure termination.
222 if (ContainsKey(provider_clients_, provider_id)) 219 if (ContainsKey(provider_clients_, provider_id))
223 provider_clients_.erase(provider_id); 220 provider_clients_.erase(provider_id);
224 } 221 }
225 222
226 ServiceWorkerDispatcher* 223 ServiceWorkerDispatcher*
227 ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance( 224 ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance(
228 ThreadSafeSender* thread_safe_sender) { 225 ServiceWorkerMessageSender* sender) {
229 if (g_dispatcher_tls.Pointer()->Get() == kHasBeenDeleted) { 226 if (g_dispatcher_tls.Pointer()->Get() == kHasBeenDeleted) {
230 NOTREACHED() << "Re-instantiating TLS ServiceWorkerDispatcher."; 227 NOTREACHED() << "Re-instantiating TLS ServiceWorkerDispatcher.";
231 g_dispatcher_tls.Pointer()->Set(NULL); 228 g_dispatcher_tls.Pointer()->Set(NULL);
232 } 229 }
233 if (g_dispatcher_tls.Pointer()->Get()) 230 if (g_dispatcher_tls.Pointer()->Get())
234 return g_dispatcher_tls.Pointer()->Get(); 231 return g_dispatcher_tls.Pointer()->Get();
235 232
236 ServiceWorkerDispatcher* dispatcher = 233 ServiceWorkerDispatcher* dispatcher =
237 new ServiceWorkerDispatcher(thread_safe_sender); 234 new ServiceWorkerDispatcher(sender);
238 if (WorkerTaskRunner::Instance()->CurrentWorkerId()) 235 if (WorkerTaskRunner::Instance()->CurrentWorkerId())
239 WorkerTaskRunner::Instance()->AddStopObserver(dispatcher); 236 WorkerTaskRunner::Instance()->AddStopObserver(dispatcher);
240 return dispatcher; 237 return dispatcher;
241 } 238 }
242 239
243 ServiceWorkerDispatcher* ServiceWorkerDispatcher::GetThreadSpecificInstance() { 240 ServiceWorkerDispatcher* ServiceWorkerDispatcher::GetThreadSpecificInstance() {
244 if (g_dispatcher_tls.Pointer()->Get() == kHasBeenDeleted) 241 if (g_dispatcher_tls.Pointer()->Get() == kHasBeenDeleted)
245 return NULL; 242 return NULL;
246 return g_dispatcher_tls.Pointer()->Get(); 243 return g_dispatcher_tls.Pointer()->Get();
247 } 244 }
248 245
249 void ServiceWorkerDispatcher::OnWorkerRunLoopStopped() { 246 void ServiceWorkerDispatcher::OnWorkerRunLoopStopped() {
250 delete this; 247 delete this;
251 } 248 }
252 249
253 WebServiceWorkerImpl* ServiceWorkerDispatcher::GetServiceWorker( 250 WebServiceWorkerImpl* ServiceWorkerDispatcher::GetServiceWorker(
254 const ServiceWorkerObjectInfo& info, 251 const ServiceWorkerObjectInfo& info,
255 bool adopt_handle) { 252 bool adopt_handle) {
256 if (info.handle_id == kInvalidServiceWorkerHandleId) 253 if (info.handle_id == kInvalidServiceWorkerHandleId)
257 return NULL; 254 return NULL;
258 255
259 WorkerObjectMap::iterator existing_worker = 256 WorkerObjectMap::iterator existing_worker =
260 service_workers_.find(info.handle_id); 257 service_workers_.find(info.handle_id);
261 258
262 if (existing_worker != service_workers_.end()) { 259 if (existing_worker != service_workers_.end()) {
263 if (adopt_handle) { 260 if (adopt_handle) {
264 // We are instructed to adopt a handle but we already have one, so 261 // We are instructed to adopt a handle but we already have one, so
265 // adopt and destroy a handle ref. 262 // adopt and destroy a handle ref.
266 ServiceWorkerHandleReference::Adopt(info, thread_safe_sender_.get()); 263 ServiceWorkerHandleReference::Adopt(info, sender_.get());
267 } 264 }
268 return existing_worker->second; 265 return existing_worker->second;
269 } 266 }
270 267
271 scoped_ptr<ServiceWorkerHandleReference> handle_ref = 268 scoped_ptr<ServiceWorkerHandleReference> handle_ref =
272 adopt_handle 269 adopt_handle
273 ? ServiceWorkerHandleReference::Adopt(info, thread_safe_sender_.get()) 270 ? ServiceWorkerHandleReference::Adopt(info, sender_.get())
274 : ServiceWorkerHandleReference::Create(info, 271 : ServiceWorkerHandleReference::Create(info, sender_.get());
275 thread_safe_sender_.get());
276 // WebServiceWorkerImpl constructor calls AddServiceWorker. 272 // WebServiceWorkerImpl constructor calls AddServiceWorker.
277 return new WebServiceWorkerImpl(handle_ref.Pass(), thread_safe_sender_.get()); 273 return new WebServiceWorkerImpl(handle_ref.Pass(), sender_.get());
278 } 274 }
279 275
280 WebServiceWorkerRegistrationImpl* 276 WebServiceWorkerRegistrationImpl*
281 ServiceWorkerDispatcher::FindServiceWorkerRegistration( 277 ServiceWorkerDispatcher::FindServiceWorkerRegistration(
282 const ServiceWorkerRegistrationObjectInfo& info, 278 const ServiceWorkerRegistrationObjectInfo& info,
283 bool adopt_handle) { 279 bool adopt_handle) {
284 RegistrationObjectMap::iterator registration = 280 RegistrationObjectMap::iterator registration =
285 registrations_.find(info.handle_id); 281 registrations_.find(info.handle_id);
286 if (registration == registrations_.end()) 282 if (registration == registrations_.end())
287 return NULL; 283 return NULL;
288 if (adopt_handle) { 284 if (adopt_handle) {
289 // We are instructed to adopt a handle but we already have one, so 285 // We are instructed to adopt a handle but we already have one, so
290 // adopt and destroy a handle ref. 286 // adopt and destroy a handle ref.
291 ServiceWorkerRegistrationHandleReference::Adopt( 287 ServiceWorkerRegistrationHandleReference::Adopt(info, sender_.get());
292 info, thread_safe_sender_.get());
293 } 288 }
294 return registration->second; 289 return registration->second;
295 } 290 }
296 291
297 WebServiceWorkerRegistrationImpl* 292 WebServiceWorkerRegistrationImpl*
298 ServiceWorkerDispatcher::CreateServiceWorkerRegistration( 293 ServiceWorkerDispatcher::CreateServiceWorkerRegistration(
299 const ServiceWorkerRegistrationObjectInfo& info, 294 const ServiceWorkerRegistrationObjectInfo& info,
300 bool adopt_handle) { 295 bool adopt_handle) {
301 DCHECK(!FindServiceWorkerRegistration(info, adopt_handle)); 296 DCHECK(!FindServiceWorkerRegistration(info, adopt_handle));
302 if (info.handle_id == kInvalidServiceWorkerRegistrationHandleId) 297 if (info.handle_id == kInvalidServiceWorkerRegistrationHandleId)
303 return NULL; 298 return NULL;
304 299
305 scoped_ptr<ServiceWorkerRegistrationHandleReference> handle_ref = 300 scoped_ptr<ServiceWorkerRegistrationHandleReference> handle_ref =
306 adopt_handle ? ServiceWorkerRegistrationHandleReference::Adopt( 301 adopt_handle ? ServiceWorkerRegistrationHandleReference::Adopt(
307 info, thread_safe_sender_.get()) 302 info, sender_.get())
308 : ServiceWorkerRegistrationHandleReference::Create( 303 : ServiceWorkerRegistrationHandleReference::Create(
309 info, thread_safe_sender_.get()); 304 info, sender_.get());
310 305
311 // WebServiceWorkerRegistrationImpl constructor calls 306 // WebServiceWorkerRegistrationImpl constructor calls
312 // AddServiceWorkerRegistration. 307 // AddServiceWorkerRegistration.
313 return new WebServiceWorkerRegistrationImpl(handle_ref.Pass()); 308 return new WebServiceWorkerRegistrationImpl(handle_ref.Pass());
314 } 309 }
315 310
316 // We can assume that this message handler is called before the worker context 311 // We can assume that this message handler is called before the worker context
317 // starts because script loading happens after this association. 312 // starts because script loading happens after this association.
318 // TODO(nhiroki): This association information could be pushed into 313 // TODO(nhiroki): This association information could be pushed into
319 // EmbeddedWorkerMsg_StartWorker message and handed over to the worker thread 314 // EmbeddedWorkerMsg_StartWorker message and handed over to the worker thread
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after
691 WebServiceWorkerRegistrationImpl* registration = 686 WebServiceWorkerRegistrationImpl* registration =
692 FindServiceWorkerRegistration(info, true); 687 FindServiceWorkerRegistration(info, true);
693 if (!registration) { 688 if (!registration) {
694 registration = CreateServiceWorkerRegistration(info, true); 689 registration = CreateServiceWorkerRegistration(info, true);
695 registration->SetInstalling(GetServiceWorker(attrs.installing, true)); 690 registration->SetInstalling(GetServiceWorker(attrs.installing, true));
696 registration->SetWaiting(GetServiceWorker(attrs.waiting, true)); 691 registration->SetWaiting(GetServiceWorker(attrs.waiting, true));
697 registration->SetActive(GetServiceWorker(attrs.active, true)); 692 registration->SetActive(GetServiceWorker(attrs.active, true));
698 } else { 693 } else {
699 // |registration| must already have version attributes, so adopt and destroy 694 // |registration| must already have version attributes, so adopt and destroy
700 // handle refs for them. 695 // handle refs for them.
701 ServiceWorkerHandleReference::Adopt( 696 ServiceWorkerHandleReference::Adopt(attrs.installing, sender_.get());
702 attrs.installing, thread_safe_sender_.get()); 697 ServiceWorkerHandleReference::Adopt(attrs.waiting, sender_.get());
703 ServiceWorkerHandleReference::Adopt( 698 ServiceWorkerHandleReference::Adopt(attrs.active, sender_.get());
704 attrs.waiting, thread_safe_sender_.get());
705 ServiceWorkerHandleReference::Adopt(
706 attrs.active, thread_safe_sender_.get());
707 } 699 }
708 return registration; 700 return registration;
709 } 701 }
710 702
711 } // namespace content 703 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698