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/debug/dump_without_crashing.h" | 10 #include "base/debug/dump_without_crashing.h" |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 provider_host, registration)); | 291 provider_host, registration)); |
292 ServiceWorkerRegistrationHandle* new_handle_ptr = new_handle.get(); | 292 ServiceWorkerRegistrationHandle* new_handle_ptr = new_handle.get(); |
293 RegisterServiceWorkerRegistrationHandle(std::move(new_handle)); | 293 RegisterServiceWorkerRegistrationHandle(std::move(new_handle)); |
294 return new_handle_ptr; | 294 return new_handle_ptr; |
295 } | 295 } |
296 | 296 |
297 void ServiceWorkerDispatcherHost::OnRegisterServiceWorker( | 297 void ServiceWorkerDispatcherHost::OnRegisterServiceWorker( |
298 int thread_id, | 298 int thread_id, |
299 int request_id, | 299 int request_id, |
300 int provider_id, | 300 int provider_id, |
301 const GURL& pattern, | 301 const ServiceWorkerRegistrationAttributes& attrs) { |
302 const GURL& script_url) { | |
303 TRACE_EVENT0("ServiceWorker", | 302 TRACE_EVENT0("ServiceWorker", |
304 "ServiceWorkerDispatcherHost::OnRegisterServiceWorker"); | 303 "ServiceWorkerDispatcherHost::OnRegisterServiceWorker"); |
305 ProviderStatus provider_status; | 304 ProviderStatus provider_status; |
306 ServiceWorkerProviderHost* provider_host = | 305 ServiceWorkerProviderHost* provider_host = |
307 GetProviderHostForRequest(&provider_status, provider_id); | 306 GetProviderHostForRequest(&provider_status, provider_id); |
308 switch (provider_status) { | 307 switch (provider_status) { |
309 case ProviderStatus::NO_CONTEXT: // fallthrough | 308 case ProviderStatus::NO_CONTEXT: // fallthrough |
310 case ProviderStatus::DEAD_HOST: | 309 case ProviderStatus::DEAD_HOST: |
311 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( | 310 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( |
312 thread_id, request_id, WebServiceWorkerError::ErrorTypeAbort, | 311 thread_id, request_id, WebServiceWorkerError::ErrorTypeAbort, |
313 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + | 312 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + |
314 base::ASCIIToUTF16(kShutdownErrorMessage))); | 313 base::ASCIIToUTF16(kShutdownErrorMessage))); |
315 return; | 314 return; |
316 case ProviderStatus::NO_HOST: | 315 case ProviderStatus::NO_HOST: |
317 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_NO_HOST); | 316 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_NO_HOST); |
318 return; | 317 return; |
319 case ProviderStatus::NO_URL: | 318 case ProviderStatus::NO_URL: |
320 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( | 319 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( |
321 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity, | 320 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity, |
322 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + | 321 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + |
323 base::ASCIIToUTF16(kNoDocumentURLErrorMessage))); | 322 base::ASCIIToUTF16(kNoDocumentURLErrorMessage))); |
324 return; | 323 return; |
325 case ProviderStatus::OK: | 324 case ProviderStatus::OK: |
326 break; | 325 break; |
327 } | 326 } |
328 | 327 |
329 if (!pattern.is_valid() || !script_url.is_valid()) { | 328 if (!attrs.pattern.is_valid() || !attrs.script_url.is_valid()) { |
330 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_BAD_URL); | 329 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_BAD_URL); |
331 return; | 330 return; |
332 } | 331 } |
333 | 332 |
334 std::string error_message; | 333 std::string error_message; |
335 if (ServiceWorkerUtils::ContainsDisallowedCharacter(pattern, script_url, | 334 if (ServiceWorkerUtils::ContainsDisallowedCharacter( |
336 &error_message)) { | 335 attrs.pattern, attrs.script_url, &error_message)) { |
337 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_CANNOT); | 336 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_CANNOT); |
338 return; | 337 return; |
339 } | 338 } |
340 | 339 |
341 std::vector<GURL> urls = {provider_host->document_url(), pattern, script_url}; | 340 std::vector<GURL> urls = {provider_host->document_url(), attrs.pattern, |
| 341 attrs.script_url}; |
342 if (!ServiceWorkerUtils::AllOriginsMatchAndCanAccessServiceWorkers(urls)) { | 342 if (!ServiceWorkerUtils::AllOriginsMatchAndCanAccessServiceWorkers(urls)) { |
343 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_CANNOT); | 343 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_CANNOT); |
344 return; | 344 return; |
345 } | 345 } |
346 | 346 |
347 if (!GetContentClient()->browser()->AllowServiceWorker( | 347 if (!GetContentClient()->browser()->AllowServiceWorker( |
348 pattern, provider_host->topmost_frame_url(), resource_context_, | 348 attrs.pattern, provider_host->topmost_frame_url(), resource_context_, |
349 base::Bind(&GetWebContents, render_process_id_, | 349 base::Bind(&GetWebContents, render_process_id_, |
350 provider_host->frame_id()))) { | 350 provider_host->frame_id()))) { |
351 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( | 351 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( |
352 thread_id, request_id, WebServiceWorkerError::ErrorTypeDisabled, | 352 thread_id, request_id, WebServiceWorkerError::ErrorTypeDisabled, |
353 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + | 353 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + |
354 base::ASCIIToUTF16(kUserDeniedPermissionMessage))); | 354 base::ASCIIToUTF16(kUserDeniedPermissionMessage))); |
355 return; | 355 return; |
356 } | 356 } |
357 | 357 |
358 TRACE_EVENT_ASYNC_BEGIN2( | 358 TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker", |
359 "ServiceWorker", "ServiceWorkerDispatcherHost::RegisterServiceWorker", | 359 "ServiceWorkerDispatcherHost::RegisterServiceWorker", |
360 request_id, "Scope", pattern.spec(), "Script URL", script_url.spec()); | 360 request_id, "Scope", attrs.pattern.spec(), |
| 361 "Script URL", attrs.script_url.spec()); |
361 GetContext()->RegisterServiceWorker( | 362 GetContext()->RegisterServiceWorker( |
362 pattern, | 363 attrs.pattern, attrs.script_url, attrs.use_cache, provider_host, |
363 script_url, | 364 base::Bind(&ServiceWorkerDispatcherHost::RegistrationComplete, this, |
364 provider_host, | 365 thread_id, provider_id, request_id)); |
365 base::Bind(&ServiceWorkerDispatcherHost::RegistrationComplete, | |
366 this, | |
367 thread_id, | |
368 provider_id, | |
369 request_id)); | |
370 } | 366 } |
371 | 367 |
372 void ServiceWorkerDispatcherHost::OnUpdateServiceWorker( | 368 void ServiceWorkerDispatcherHost::OnUpdateServiceWorker( |
373 int thread_id, | 369 int thread_id, |
374 int request_id, | 370 int request_id, |
375 int provider_id, | 371 int provider_id, |
376 int64_t registration_id) { | 372 int64_t registration_id) { |
377 TRACE_EVENT0("ServiceWorker", | 373 TRACE_EVENT0("ServiceWorker", |
378 "ServiceWorkerDispatcherHost::OnUpdateServiceWorker"); | 374 "ServiceWorkerDispatcherHost::OnUpdateServiceWorker"); |
379 ProviderStatus provider_status; | 375 ProviderStatus provider_status; |
(...skipping 1400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1780 if (!handle) { | 1776 if (!handle) { |
1781 bad_message::ReceivedBadMessage(this, | 1777 bad_message::ReceivedBadMessage(this, |
1782 bad_message::SWDH_TERMINATE_BAD_HANDLE); | 1778 bad_message::SWDH_TERMINATE_BAD_HANDLE); |
1783 return; | 1779 return; |
1784 } | 1780 } |
1785 handle->version()->StopWorker( | 1781 handle->version()->StopWorker( |
1786 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); | 1782 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
1787 } | 1783 } |
1788 | 1784 |
1789 } // namespace content | 1785 } // namespace content |
OLD | NEW |