| 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 | 
|---|