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

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: Created 3 years, 9 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 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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698