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

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

Issue 2968123002: Introduce ServiceWorkerRegistrationOptions struct for service worker options (Closed)
Patch Set: address more comments Created 3 years, 5 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/logging.h" 10 #include "base/logging.h"
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 provider_host, registration)); 241 provider_host, registration));
242 ServiceWorkerRegistrationHandle* new_handle_ptr = new_handle.get(); 242 ServiceWorkerRegistrationHandle* new_handle_ptr = new_handle.get();
243 RegisterServiceWorkerRegistrationHandle(std::move(new_handle)); 243 RegisterServiceWorkerRegistrationHandle(std::move(new_handle));
244 return new_handle_ptr; 244 return new_handle_ptr;
245 } 245 }
246 246
247 void ServiceWorkerDispatcherHost::OnRegisterServiceWorker( 247 void ServiceWorkerDispatcherHost::OnRegisterServiceWorker(
248 int thread_id, 248 int thread_id,
249 int request_id, 249 int request_id,
250 int provider_id, 250 int provider_id,
251 const GURL& pattern, 251 const GURL& script_url,
252 const GURL& script_url) { 252 const ServiceWorkerRegistrationOptions& options) {
253 TRACE_EVENT0("ServiceWorker", 253 TRACE_EVENT0("ServiceWorker",
254 "ServiceWorkerDispatcherHost::OnRegisterServiceWorker"); 254 "ServiceWorkerDispatcherHost::OnRegisterServiceWorker");
255 ProviderStatus provider_status; 255 ProviderStatus provider_status;
256 ServiceWorkerProviderHost* provider_host = 256 ServiceWorkerProviderHost* provider_host =
257 GetProviderHostForRequest(&provider_status, provider_id); 257 GetProviderHostForRequest(&provider_status, provider_id);
258 switch (provider_status) { 258 switch (provider_status) {
259 case ProviderStatus::NO_CONTEXT: // fallthrough 259 case ProviderStatus::NO_CONTEXT: // fallthrough
260 case ProviderStatus::DEAD_HOST: 260 case ProviderStatus::DEAD_HOST:
261 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( 261 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
262 thread_id, request_id, WebServiceWorkerError::kErrorTypeAbort, 262 thread_id, request_id, WebServiceWorkerError::kErrorTypeAbort,
263 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + 263 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) +
264 base::ASCIIToUTF16(kShutdownErrorMessage))); 264 base::ASCIIToUTF16(kShutdownErrorMessage)));
265 return; 265 return;
266 case ProviderStatus::NO_HOST: 266 case ProviderStatus::NO_HOST:
267 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_NO_HOST); 267 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_NO_HOST);
268 return; 268 return;
269 case ProviderStatus::NO_URL: 269 case ProviderStatus::NO_URL:
270 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( 270 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
271 thread_id, request_id, WebServiceWorkerError::kErrorTypeSecurity, 271 thread_id, request_id, WebServiceWorkerError::kErrorTypeSecurity,
272 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + 272 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) +
273 base::ASCIIToUTF16(kNoDocumentURLErrorMessage))); 273 base::ASCIIToUTF16(kNoDocumentURLErrorMessage)));
274 return; 274 return;
275 case ProviderStatus::OK: 275 case ProviderStatus::OK:
276 break; 276 break;
277 } 277 }
278 278
279 if (!pattern.is_valid() || !script_url.is_valid()) { 279 if (!options.scope.is_valid() || !script_url.is_valid()) {
280 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_BAD_URL); 280 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_BAD_URL);
281 return; 281 return;
282 } 282 }
283 283
284 std::string error_message; 284 std::string error_message;
285 if (ServiceWorkerUtils::ContainsDisallowedCharacter(pattern, script_url, 285 if (ServiceWorkerUtils::ContainsDisallowedCharacter(options.scope, script_url,
286 &error_message)) { 286 &error_message)) {
287 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_CANNOT); 287 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_CANNOT);
288 return; 288 return;
289 } 289 }
290 290
291 std::vector<GURL> urls = {provider_host->document_url(), pattern, script_url}; 291 std::vector<GURL> urls = {provider_host->document_url(), options.scope,
292 script_url};
292 if (!ServiceWorkerUtils::AllOriginsMatchAndCanAccessServiceWorkers(urls)) { 293 if (!ServiceWorkerUtils::AllOriginsMatchAndCanAccessServiceWorkers(urls)) {
293 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_CANNOT); 294 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_CANNOT);
294 return; 295 return;
295 } 296 }
296 297
297 if (!GetContentClient()->browser()->AllowServiceWorker( 298 if (!GetContentClient()->browser()->AllowServiceWorker(
298 pattern, provider_host->topmost_frame_url(), resource_context_, 299 options.scope, provider_host->topmost_frame_url(), resource_context_,
299 base::Bind(&GetWebContents, render_process_id_, 300 base::Bind(&GetWebContents, render_process_id_,
300 provider_host->frame_id()))) { 301 provider_host->frame_id()))) {
301 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( 302 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
302 thread_id, request_id, WebServiceWorkerError::kErrorTypeDisabled, 303 thread_id, request_id, WebServiceWorkerError::kErrorTypeDisabled,
303 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + 304 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) +
304 base::ASCIIToUTF16(kUserDeniedPermissionMessage))); 305 base::ASCIIToUTF16(kUserDeniedPermissionMessage)));
305 return; 306 return;
306 } 307 }
307 308
308 TRACE_EVENT_ASYNC_BEGIN2( 309 TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker",
309 "ServiceWorker", "ServiceWorkerDispatcherHost::RegisterServiceWorker", 310 "ServiceWorkerDispatcherHost::RegisterServiceWorker",
310 request_id, "Scope", pattern.spec(), "Script URL", script_url.spec()); 311 request_id, "Scope", options.scope.spec(),
312 "Script URL", script_url.spec());
311 GetContext()->RegisterServiceWorker( 313 GetContext()->RegisterServiceWorker(
312 pattern, 314 script_url, options, provider_host,
313 script_url, 315 base::Bind(&ServiceWorkerDispatcherHost::RegistrationComplete, this,
314 provider_host, 316 thread_id, provider_id, request_id));
315 base::Bind(&ServiceWorkerDispatcherHost::RegistrationComplete,
316 this,
317 thread_id,
318 provider_id,
319 request_id));
320 } 317 }
321 318
322 void ServiceWorkerDispatcherHost::OnUpdateServiceWorker( 319 void ServiceWorkerDispatcherHost::OnUpdateServiceWorker(
323 int thread_id, 320 int thread_id,
324 int request_id, 321 int request_id,
325 int provider_id, 322 int provider_id,
326 int64_t registration_id) { 323 int64_t registration_id) {
327 TRACE_EVENT0("ServiceWorker", 324 TRACE_EVENT0("ServiceWorker",
328 "ServiceWorkerDispatcherHost::OnUpdateServiceWorker"); 325 "ServiceWorkerDispatcherHost::OnUpdateServiceWorker");
329 ProviderStatus provider_status; 326 ProviderStatus provider_status;
(...skipping 1233 matching lines...) Expand 10 before | Expand all | Expand 10 after
1563 if (!handle) { 1560 if (!handle) {
1564 bad_message::ReceivedBadMessage(this, 1561 bad_message::ReceivedBadMessage(this,
1565 bad_message::SWDH_TERMINATE_BAD_HANDLE); 1562 bad_message::SWDH_TERMINATE_BAD_HANDLE);
1566 return; 1563 return;
1567 } 1564 }
1568 handle->version()->StopWorker( 1565 handle->version()->StopWorker(
1569 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 1566 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
1570 } 1567 }
1571 1568
1572 } // namespace content 1569 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698