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

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

Issue 2562523003: Set the document URL of ServiceWorkerProviderHost when redirected even if skip_service_worker is set (Closed)
Patch Set: incorporated shimazu's comment Created 4 years 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_provider_host.h" 5 #include "content/browser/service_worker/service_worker_provider_host.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/guid.h" 9 #include "base/guid.h"
10 #include "base/memory/ptr_util.h"
10 #include "base/stl_util.h" 11 #include "base/stl_util.h"
11 #include "base/time/time.h" 12 #include "base/time/time.h"
12 #include "content/browser/message_port_message_filter.h" 13 #include "content/browser/message_port_message_filter.h"
13 #include "content/browser/service_worker/embedded_worker_status.h" 14 #include "content/browser/service_worker/embedded_worker_status.h"
14 #include "content/browser/service_worker/service_worker_context_core.h" 15 #include "content/browser/service_worker/service_worker_context_core.h"
15 #include "content/browser/service_worker/service_worker_context_request_handler. h" 16 #include "content/browser/service_worker/service_worker_context_request_handler. h"
16 #include "content/browser/service_worker/service_worker_controllee_request_handl er.h" 17 #include "content/browser/service_worker/service_worker_controllee_request_handl er.h"
17 #include "content/browser/service_worker/service_worker_dispatcher_host.h" 18 #include "content/browser/service_worker/service_worker_dispatcher_host.h"
18 #include "content/browser/service_worker/service_worker_handle.h" 19 #include "content/browser/service_worker/service_worker_handle.h"
19 #include "content/browser/service_worker/service_worker_registration_handle.h" 20 #include "content/browser/service_worker/service_worker_registration_handle.h"
20 #include "content/browser/service_worker/service_worker_version.h" 21 #include "content/browser/service_worker/service_worker_version.h"
21 #include "content/common/resource_request_body_impl.h" 22 #include "content/common/resource_request_body_impl.h"
22 #include "content/common/service_worker/service_worker_messages.h" 23 #include "content/common/service_worker/service_worker_messages.h"
23 #include "content/common/service_worker/service_worker_types.h" 24 #include "content/common/service_worker/service_worker_types.h"
24 #include "content/common/service_worker/service_worker_utils.h" 25 #include "content/common/service_worker/service_worker_utils.h"
25 #include "content/public/browser/content_browser_client.h" 26 #include "content/public/browser/content_browser_client.h"
26 #include "content/public/common/browser_side_navigation_policy.h" 27 #include "content/public/common/browser_side_navigation_policy.h"
27 #include "content/public/common/child_process_host.h" 28 #include "content/public/common/child_process_host.h"
28 #include "content/public/common/content_client.h" 29 #include "content/public/common/content_client.h"
29 #include "content/public/common/origin_util.h" 30 #include "content/public/common/origin_util.h"
31 #include "net/base/url_util.h"
30 32
31 namespace content { 33 namespace content {
32 34
33 namespace { 35 namespace {
34 36
35 // PlzNavigate 37 // PlzNavigate
36 // Next ServiceWorkerProviderHost ID for navigations, starts at -2 and keeps 38 // Next ServiceWorkerProviderHost ID for navigations, starts at -2 and keeps
37 // going down. 39 // going down.
38 int g_next_navigation_provider_id = -2; 40 int g_next_navigation_provider_id = -2;
39 41
42 // A request handler derivative used to handle navigation requests when
43 // skip_service_worker flag is set. It tracks the document URL and sets the url
44 // to the provider host.
45 class ServiceWorkerURLTrackingRequestHandler
46 : public ServiceWorkerRequestHandler {
47 public:
48 ServiceWorkerURLTrackingRequestHandler(
49 base::WeakPtr<ServiceWorkerContextCore> context,
50 base::WeakPtr<ServiceWorkerProviderHost> provider_host,
51 base::WeakPtr<storage::BlobStorageContext> blob_storage_context,
52 ResourceType resource_type)
53 : ServiceWorkerRequestHandler(context,
54 provider_host,
55 blob_storage_context,
56 resource_type) {}
57 ~ServiceWorkerURLTrackingRequestHandler() override {}
58
59 // Called via custom URLRequestJobFactory.
60 net::URLRequestJob* MaybeCreateJob(
61 net::URLRequest* request,
62 net::NetworkDelegate* network_delegate,
63 ResourceContext* resource_context) override {
64 const GURL stripped_url = net::SimplifyUrlForRequest(request->url());
65 provider_host_->SetDocumentUrl(stripped_url);
66 provider_host_->SetTopmostFrameUrl(request->first_party_for_cookies());
67 return nullptr;
68 }
69
70 private:
71 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerURLTrackingRequestHandler);
72 };
73
40 } // anonymous namespace 74 } // anonymous namespace
41 75
42 ServiceWorkerProviderHost::OneShotGetReadyCallback::OneShotGetReadyCallback( 76 ServiceWorkerProviderHost::OneShotGetReadyCallback::OneShotGetReadyCallback(
43 const GetRegistrationForReadyCallback& callback) 77 const GetRegistrationForReadyCallback& callback)
44 : callback(callback), 78 : callback(callback),
45 called(false) { 79 called(false) {
46 } 80 }
47 81
48 ServiceWorkerProviderHost::OneShotGetReadyCallback::~OneShotGetReadyCallback() { 82 ServiceWorkerProviderHost::OneShotGetReadyCallback::~OneShotGetReadyCallback() {
49 } 83 }
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 360
327 std::unique_ptr<ServiceWorkerRequestHandler> 361 std::unique_ptr<ServiceWorkerRequestHandler>
328 ServiceWorkerProviderHost::CreateRequestHandler( 362 ServiceWorkerProviderHost::CreateRequestHandler(
329 FetchRequestMode request_mode, 363 FetchRequestMode request_mode,
330 FetchCredentialsMode credentials_mode, 364 FetchCredentialsMode credentials_mode,
331 FetchRedirectMode redirect_mode, 365 FetchRedirectMode redirect_mode,
332 ResourceType resource_type, 366 ResourceType resource_type,
333 RequestContextType request_context_type, 367 RequestContextType request_context_type,
334 RequestContextFrameType frame_type, 368 RequestContextFrameType frame_type,
335 base::WeakPtr<storage::BlobStorageContext> blob_storage_context, 369 base::WeakPtr<storage::BlobStorageContext> blob_storage_context,
336 scoped_refptr<ResourceRequestBodyImpl> body) { 370 scoped_refptr<ResourceRequestBodyImpl> body,
371 bool skip_service_worker) {
372 if (skip_service_worker) {
373 if (!ServiceWorkerUtils::IsMainResourceType(resource_type))
374 return std::unique_ptr<ServiceWorkerRequestHandler>();
375 return base::MakeUnique<ServiceWorkerURLTrackingRequestHandler>(
376 context_, AsWeakPtr(), blob_storage_context, resource_type);
377 }
337 if (IsHostToRunningServiceWorker()) { 378 if (IsHostToRunningServiceWorker()) {
338 return std::unique_ptr<ServiceWorkerRequestHandler>( 379 return base::MakeUnique<ServiceWorkerContextRequestHandler>(
339 new ServiceWorkerContextRequestHandler( 380 context_, AsWeakPtr(), blob_storage_context, resource_type);
340 context_, AsWeakPtr(), blob_storage_context, resource_type));
341 } 381 }
342 if (ServiceWorkerUtils::IsMainResourceType(resource_type) || 382 if (ServiceWorkerUtils::IsMainResourceType(resource_type) ||
343 controlling_version()) { 383 controlling_version()) {
344 return std::unique_ptr<ServiceWorkerRequestHandler>( 384 return base::MakeUnique<ServiceWorkerControlleeRequestHandler>(
345 new ServiceWorkerControlleeRequestHandler( 385 context_, AsWeakPtr(), blob_storage_context, request_mode,
346 context_, AsWeakPtr(), blob_storage_context, request_mode, 386 credentials_mode, redirect_mode, resource_type, request_context_type,
347 credentials_mode, redirect_mode, resource_type, 387 frame_type, body);
348 request_context_type, frame_type, body));
349 } 388 }
350 return std::unique_ptr<ServiceWorkerRequestHandler>(); 389 return std::unique_ptr<ServiceWorkerRequestHandler>();
351 } 390 }
352 391
353 ServiceWorkerObjectInfo 392 ServiceWorkerObjectInfo
354 ServiceWorkerProviderHost::GetOrCreateServiceWorkerHandle( 393 ServiceWorkerProviderHost::GetOrCreateServiceWorkerHandle(
355 ServiceWorkerVersion* version) { 394 ServiceWorkerVersion* version) {
356 DCHECK(dispatcher_host_); 395 DCHECK(dispatcher_host_);
357 if (!context_ || !version) 396 if (!context_ || !version)
358 return ServiceWorkerObjectInfo(); 397 return ServiceWorkerObjectInfo();
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
674 Send(new ServiceWorkerMsg_SetControllerServiceWorker( 713 Send(new ServiceWorkerMsg_SetControllerServiceWorker(
675 render_thread_id_, provider_id(), 714 render_thread_id_, provider_id(),
676 GetOrCreateServiceWorkerHandle( 715 GetOrCreateServiceWorkerHandle(
677 associated_registration_->active_version()), 716 associated_registration_->active_version()),
678 false /* shouldNotifyControllerChange */)); 717 false /* shouldNotifyControllerChange */));
679 } 718 }
680 } 719 }
681 } 720 }
682 721
683 } // namespace content 722 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698