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

Side by Side Diff: content/browser/service_worker/service_worker_dispatcher_host.cc

Issue 2771823002: Implement updateViaCache flag and no-cache by default for main service worker scripts
Patch Set: fix tests Created 3 years, 8 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/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
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 GURL& script_url,
302 const GURL& script_url) { 302 const ServiceWorkerRegistrationOptions& options) {
303 TRACE_EVENT0("ServiceWorker", 303 TRACE_EVENT0("ServiceWorker",
304 "ServiceWorkerDispatcherHost::OnRegisterServiceWorker"); 304 "ServiceWorkerDispatcherHost::OnRegisterServiceWorker");
305 ProviderStatus provider_status; 305 ProviderStatus provider_status;
306 ServiceWorkerProviderHost* provider_host = 306 ServiceWorkerProviderHost* provider_host =
307 GetProviderHostForRequest(&provider_status, provider_id); 307 GetProviderHostForRequest(&provider_status, provider_id);
308 switch (provider_status) { 308 switch (provider_status) {
309 case ProviderStatus::NO_CONTEXT: // fallthrough 309 case ProviderStatus::NO_CONTEXT: // fallthrough
310 case ProviderStatus::DEAD_HOST: 310 case ProviderStatus::DEAD_HOST:
311 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( 311 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
312 thread_id, request_id, WebServiceWorkerError::ErrorTypeAbort, 312 thread_id, request_id, WebServiceWorkerError::ErrorTypeAbort,
313 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + 313 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) +
314 base::ASCIIToUTF16(kShutdownErrorMessage))); 314 base::ASCIIToUTF16(kShutdownErrorMessage)));
315 return; 315 return;
316 case ProviderStatus::NO_HOST: 316 case ProviderStatus::NO_HOST:
317 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_NO_HOST); 317 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_NO_HOST);
318 return; 318 return;
319 case ProviderStatus::NO_URL: 319 case ProviderStatus::NO_URL:
320 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( 320 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
321 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity, 321 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity,
322 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + 322 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) +
323 base::ASCIIToUTF16(kNoDocumentURLErrorMessage))); 323 base::ASCIIToUTF16(kNoDocumentURLErrorMessage)));
324 return; 324 return;
325 case ProviderStatus::OK: 325 case ProviderStatus::OK:
326 break; 326 break;
327 } 327 }
328 328
329 if (!pattern.is_valid() || !script_url.is_valid()) { 329 if (!options.scope.is_valid() || !script_url.is_valid()) {
330 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_BAD_URL); 330 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_BAD_URL);
331 return; 331 return;
332 } 332 }
333 333
334 std::string error_message; 334 std::string error_message;
335 if (ServiceWorkerUtils::ContainsDisallowedCharacter(pattern, script_url, 335 if (ServiceWorkerUtils::ContainsDisallowedCharacter(options.scope, script_url,
336 &error_message)) { 336 &error_message)) {
337 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_CANNOT); 337 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_CANNOT);
338 return; 338 return;
339 } 339 }
340 340
341 std::vector<GURL> urls = {provider_host->document_url(), pattern, script_url}; 341 std::vector<GURL> urls = {provider_host->document_url(), options.scope,
342 script_url};
342 if (!ServiceWorkerUtils::AllOriginsMatchAndCanAccessServiceWorkers(urls)) { 343 if (!ServiceWorkerUtils::AllOriginsMatchAndCanAccessServiceWorkers(urls)) {
343 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_CANNOT); 344 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_CANNOT);
344 return; 345 return;
345 } 346 }
346 347
347 if (!GetContentClient()->browser()->AllowServiceWorker( 348 if (!GetContentClient()->browser()->AllowServiceWorker(
348 pattern, provider_host->topmost_frame_url(), resource_context_, 349 options.scope, provider_host->topmost_frame_url(), resource_context_,
349 base::Bind(&GetWebContents, render_process_id_, 350 base::Bind(&GetWebContents, render_process_id_,
350 provider_host->frame_id()))) { 351 provider_host->frame_id()))) {
351 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( 352 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
352 thread_id, request_id, WebServiceWorkerError::ErrorTypeDisabled, 353 thread_id, request_id, WebServiceWorkerError::ErrorTypeDisabled,
353 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + 354 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) +
354 base::ASCIIToUTF16(kUserDeniedPermissionMessage))); 355 base::ASCIIToUTF16(kUserDeniedPermissionMessage)));
355 return; 356 return;
356 } 357 }
357 358
358 TRACE_EVENT_ASYNC_BEGIN2( 359 TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker",
359 "ServiceWorker", "ServiceWorkerDispatcherHost::RegisterServiceWorker", 360 "ServiceWorkerDispatcherHost::RegisterServiceWorker",
360 request_id, "Scope", pattern.spec(), "Script URL", script_url.spec()); 361 request_id, "Scope", options.scope.spec(),
362 "Script URL", script_url.spec());
361 GetContext()->RegisterServiceWorker( 363 GetContext()->RegisterServiceWorker(
362 pattern, 364 script_url, options, provider_host,
363 script_url, 365 base::Bind(&ServiceWorkerDispatcherHost::RegistrationComplete, this,
364 provider_host, 366 thread_id, provider_id, request_id));
365 base::Bind(&ServiceWorkerDispatcherHost::RegistrationComplete,
366 this,
367 thread_id,
368 provider_id,
369 request_id));
370 } 367 }
371 368
372 void ServiceWorkerDispatcherHost::OnUpdateServiceWorker( 369 void ServiceWorkerDispatcherHost::OnUpdateServiceWorker(
373 int thread_id, 370 int thread_id,
374 int request_id, 371 int request_id,
375 int provider_id, 372 int provider_id,
376 int64_t registration_id) { 373 int64_t registration_id) {
377 TRACE_EVENT0("ServiceWorker", 374 TRACE_EVENT0("ServiceWorker",
378 "ServiceWorkerDispatcherHost::OnUpdateServiceWorker"); 375 "ServiceWorkerDispatcherHost::OnUpdateServiceWorker");
379 ProviderStatus provider_status; 376 ProviderStatus provider_status;
(...skipping 1400 matching lines...) Expand 10 before | Expand all | Expand 10 after
1780 if (!handle) { 1777 if (!handle) {
1781 bad_message::ReceivedBadMessage(this, 1778 bad_message::ReceivedBadMessage(this,
1782 bad_message::SWDH_TERMINATE_BAD_HANDLE); 1779 bad_message::SWDH_TERMINATE_BAD_HANDLE);
1783 return; 1780 return;
1784 } 1781 }
1785 handle->version()->StopWorker( 1782 handle->version()->StopWorker(
1786 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 1783 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
1787 } 1784 }
1788 1785
1789 } // namespace content 1786 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698