OLD | NEW |
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/browser/service_worker/service_worker_dispatcher_host.h" | 5 #include "content/browser/service_worker/service_worker_dispatcher_host.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/debug/crash_logging.h" | 9 #include "base/debug/crash_logging.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
241 provider_host, registration)); | 241 provider_host, registration)); |
242 ServiceWorkerRegistrationHandle* new_handle_ptr = new_handle.get(); | 242 ServiceWorkerRegistrationHandle* new_handle_ptr = new_handle.get(); |
243 RegisterServiceWorkerRegistrationHandle(std::move(new_handle)); | 243 RegisterServiceWorkerRegistrationHandle(std::move(new_handle)); |
244 return new_handle_ptr; | 244 return new_handle_ptr; |
245 } | 245 } |
246 | 246 |
247 void ServiceWorkerDispatcherHost::OnRegisterServiceWorker( | 247 void ServiceWorkerDispatcherHost::OnRegisterServiceWorker( |
248 int thread_id, | 248 int thread_id, |
249 int request_id, | 249 int request_id, |
250 int provider_id, | 250 int provider_id, |
251 const GURL& pattern, | 251 const GURL& script_url, |
252 const GURL& script_url) { | 252 const ServiceWorkerRegistrationOptions& options) { |
253 TRACE_EVENT0("ServiceWorker", | 253 TRACE_EVENT0("ServiceWorker", |
254 "ServiceWorkerDispatcherHost::OnRegisterServiceWorker"); | 254 "ServiceWorkerDispatcherHost::OnRegisterServiceWorker"); |
255 ProviderStatus provider_status; | 255 ProviderStatus provider_status; |
256 ServiceWorkerProviderHost* provider_host = | 256 ServiceWorkerProviderHost* provider_host = |
257 GetProviderHostForRequest(&provider_status, provider_id); | 257 GetProviderHostForRequest(&provider_status, provider_id); |
258 switch (provider_status) { | 258 switch (provider_status) { |
259 case ProviderStatus::NO_CONTEXT: // fallthrough | 259 case ProviderStatus::NO_CONTEXT: // fallthrough |
260 case ProviderStatus::DEAD_HOST: | 260 case ProviderStatus::DEAD_HOST: |
261 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( | 261 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( |
262 thread_id, request_id, WebServiceWorkerError::kErrorTypeAbort, | 262 thread_id, request_id, WebServiceWorkerError::kErrorTypeAbort, |
263 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + | 263 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + |
264 base::ASCIIToUTF16(kShutdownErrorMessage))); | 264 base::ASCIIToUTF16(kShutdownErrorMessage))); |
265 return; | 265 return; |
266 case ProviderStatus::NO_HOST: | 266 case ProviderStatus::NO_HOST: |
267 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_NO_HOST); | 267 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_NO_HOST); |
268 return; | 268 return; |
269 case ProviderStatus::NO_URL: | 269 case ProviderStatus::NO_URL: |
270 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( | 270 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( |
271 thread_id, request_id, WebServiceWorkerError::kErrorTypeSecurity, | 271 thread_id, request_id, WebServiceWorkerError::kErrorTypeSecurity, |
272 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + | 272 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + |
273 base::ASCIIToUTF16(kNoDocumentURLErrorMessage))); | 273 base::ASCIIToUTF16(kNoDocumentURLErrorMessage))); |
274 return; | 274 return; |
275 case ProviderStatus::OK: | 275 case ProviderStatus::OK: |
276 break; | 276 break; |
277 } | 277 } |
278 | 278 |
279 if (!pattern.is_valid() || !script_url.is_valid()) { | 279 if (!options.scope.is_valid() || !script_url.is_valid()) { |
280 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_BAD_URL); | 280 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_BAD_URL); |
281 return; | 281 return; |
282 } | 282 } |
283 | 283 |
284 std::string error_message; | 284 std::string error_message; |
285 if (ServiceWorkerUtils::ContainsDisallowedCharacter(pattern, script_url, | 285 if (ServiceWorkerUtils::ContainsDisallowedCharacter(options.scope, script_url, |
286 &error_message)) { | 286 &error_message)) { |
287 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_CANNOT); | 287 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_CANNOT); |
288 return; | 288 return; |
289 } | 289 } |
290 | 290 |
291 std::vector<GURL> urls = {provider_host->document_url(), pattern, script_url}; | 291 std::vector<GURL> urls = {provider_host->document_url(), options.scope, |
| 292 script_url}; |
292 if (!ServiceWorkerUtils::AllOriginsMatchAndCanAccessServiceWorkers(urls)) { | 293 if (!ServiceWorkerUtils::AllOriginsMatchAndCanAccessServiceWorkers(urls)) { |
293 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_CANNOT); | 294 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_CANNOT); |
294 return; | 295 return; |
295 } | 296 } |
296 | 297 |
297 if (!GetContentClient()->browser()->AllowServiceWorker( | 298 if (!GetContentClient()->browser()->AllowServiceWorker( |
298 pattern, provider_host->topmost_frame_url(), resource_context_, | 299 options.scope, provider_host->topmost_frame_url(), resource_context_, |
299 base::Bind(&GetWebContents, render_process_id_, | 300 base::Bind(&GetWebContents, render_process_id_, |
300 provider_host->frame_id()))) { | 301 provider_host->frame_id()))) { |
301 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( | 302 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( |
302 thread_id, request_id, WebServiceWorkerError::kErrorTypeDisabled, | 303 thread_id, request_id, WebServiceWorkerError::kErrorTypeDisabled, |
303 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + | 304 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + |
304 base::ASCIIToUTF16(kUserDeniedPermissionMessage))); | 305 base::ASCIIToUTF16(kUserDeniedPermissionMessage))); |
305 return; | 306 return; |
306 } | 307 } |
307 | 308 |
308 TRACE_EVENT_ASYNC_BEGIN2( | 309 TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker", |
309 "ServiceWorker", "ServiceWorkerDispatcherHost::RegisterServiceWorker", | 310 "ServiceWorkerDispatcherHost::RegisterServiceWorker", |
310 request_id, "Scope", pattern.spec(), "Script URL", script_url.spec()); | 311 request_id, "Scope", options.scope.spec(), |
| 312 "Script URL", script_url.spec()); |
311 GetContext()->RegisterServiceWorker( | 313 GetContext()->RegisterServiceWorker( |
312 pattern, | 314 script_url, options, provider_host, |
313 script_url, | 315 base::Bind(&ServiceWorkerDispatcherHost::RegistrationComplete, this, |
314 provider_host, | 316 thread_id, provider_id, request_id)); |
315 base::Bind(&ServiceWorkerDispatcherHost::RegistrationComplete, | |
316 this, | |
317 thread_id, | |
318 provider_id, | |
319 request_id)); | |
320 } | 317 } |
321 | 318 |
322 void ServiceWorkerDispatcherHost::OnUpdateServiceWorker( | 319 void ServiceWorkerDispatcherHost::OnUpdateServiceWorker( |
323 int thread_id, | 320 int thread_id, |
324 int request_id, | 321 int request_id, |
325 int provider_id, | 322 int provider_id, |
326 int64_t registration_id) { | 323 int64_t registration_id) { |
327 TRACE_EVENT0("ServiceWorker", | 324 TRACE_EVENT0("ServiceWorker", |
328 "ServiceWorkerDispatcherHost::OnUpdateServiceWorker"); | 325 "ServiceWorkerDispatcherHost::OnUpdateServiceWorker"); |
329 ProviderStatus provider_status; | 326 ProviderStatus provider_status; |
(...skipping 1233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1563 if (!handle) { | 1560 if (!handle) { |
1564 bad_message::ReceivedBadMessage(this, | 1561 bad_message::ReceivedBadMessage(this, |
1565 bad_message::SWDH_TERMINATE_BAD_HANDLE); | 1562 bad_message::SWDH_TERMINATE_BAD_HANDLE); |
1566 return; | 1563 return; |
1567 } | 1564 } |
1568 handle->version()->StopWorker( | 1565 handle->version()->StopWorker( |
1569 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); | 1566 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
1570 } | 1567 } |
1571 | 1568 |
1572 } // namespace content | 1569 } // namespace content |
OLD | NEW |