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