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

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: 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 class ServiceWorkerURLTrackingRequestHandler
shimazu 2016/12/09 05:00:46 I feel it's better to add a brief comment to expla
horo 2016/12/09 05:21:21 Done.
43 : public ServiceWorkerRequestHandler {
44 public:
45 ServiceWorkerURLTrackingRequestHandler(
46 base::WeakPtr<ServiceWorkerContextCore> context,
47 base::WeakPtr<ServiceWorkerProviderHost> provider_host,
48 base::WeakPtr<storage::BlobStorageContext> blob_storage_context,
49 ResourceType resource_type)
50 : ServiceWorkerRequestHandler(context,
51 provider_host,
52 blob_storage_context,
53 resource_type) {}
54 ~ServiceWorkerURLTrackingRequestHandler() override {}
55
56 // Called via custom URLRequestJobFactory.
57 net::URLRequestJob* MaybeCreateJob(
58 net::URLRequest* request,
59 net::NetworkDelegate* network_delegate,
60 ResourceContext* resource_context) override {
61 const GURL stripped_url = net::SimplifyUrlForRequest(request->url());
62 provider_host_->SetDocumentUrl(stripped_url);
63 provider_host_->SetTopmostFrameUrl(request->first_party_for_cookies());
64 return nullptr;
65 }
66
67 private:
68 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerURLTrackingRequestHandler);
69 };
70
40 } // anonymous namespace 71 } // anonymous namespace
41 72
42 ServiceWorkerProviderHost::OneShotGetReadyCallback::OneShotGetReadyCallback( 73 ServiceWorkerProviderHost::OneShotGetReadyCallback::OneShotGetReadyCallback(
43 const GetRegistrationForReadyCallback& callback) 74 const GetRegistrationForReadyCallback& callback)
44 : callback(callback), 75 : callback(callback),
45 called(false) { 76 called(false) {
46 } 77 }
47 78
48 ServiceWorkerProviderHost::OneShotGetReadyCallback::~OneShotGetReadyCallback() { 79 ServiceWorkerProviderHost::OneShotGetReadyCallback::~OneShotGetReadyCallback() {
49 } 80 }
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 357
327 std::unique_ptr<ServiceWorkerRequestHandler> 358 std::unique_ptr<ServiceWorkerRequestHandler>
328 ServiceWorkerProviderHost::CreateRequestHandler( 359 ServiceWorkerProviderHost::CreateRequestHandler(
329 FetchRequestMode request_mode, 360 FetchRequestMode request_mode,
330 FetchCredentialsMode credentials_mode, 361 FetchCredentialsMode credentials_mode,
331 FetchRedirectMode redirect_mode, 362 FetchRedirectMode redirect_mode,
332 ResourceType resource_type, 363 ResourceType resource_type,
333 RequestContextType request_context_type, 364 RequestContextType request_context_type,
334 RequestContextFrameType frame_type, 365 RequestContextFrameType frame_type,
335 base::WeakPtr<storage::BlobStorageContext> blob_storage_context, 366 base::WeakPtr<storage::BlobStorageContext> blob_storage_context,
336 scoped_refptr<ResourceRequestBodyImpl> body) { 367 scoped_refptr<ResourceRequestBodyImpl> body,
368 bool skip_service_worker) {
369 if (skip_service_worker) {
370 if (!ServiceWorkerUtils::IsMainResourceType(resource_type))
371 return std::unique_ptr<ServiceWorkerRequestHandler>();
372 return base::MakeUnique<ServiceWorkerURLTrackingRequestHandler>(
373 context_, AsWeakPtr(), blob_storage_context, resource_type);
374 }
337 if (IsHostToRunningServiceWorker()) { 375 if (IsHostToRunningServiceWorker()) {
338 return std::unique_ptr<ServiceWorkerRequestHandler>( 376 return base::MakeUnique<ServiceWorkerContextRequestHandler>(
339 new ServiceWorkerContextRequestHandler( 377 context_, AsWeakPtr(), blob_storage_context, resource_type);
340 context_, AsWeakPtr(), blob_storage_context, resource_type));
341 } 378 }
342 if (ServiceWorkerUtils::IsMainResourceType(resource_type) || 379 if (ServiceWorkerUtils::IsMainResourceType(resource_type) ||
343 controlling_version()) { 380 controlling_version()) {
344 return std::unique_ptr<ServiceWorkerRequestHandler>( 381 return base::MakeUnique<ServiceWorkerControlleeRequestHandler>(
345 new ServiceWorkerControlleeRequestHandler( 382 context_, AsWeakPtr(), blob_storage_context, request_mode,
346 context_, AsWeakPtr(), blob_storage_context, request_mode, 383 credentials_mode, redirect_mode, resource_type, request_context_type,
347 credentials_mode, redirect_mode, resource_type, 384 frame_type, body);
348 request_context_type, frame_type, body));
349 } 385 }
350 return std::unique_ptr<ServiceWorkerRequestHandler>(); 386 return std::unique_ptr<ServiceWorkerRequestHandler>();
351 } 387 }
352 388
353 ServiceWorkerObjectInfo 389 ServiceWorkerObjectInfo
354 ServiceWorkerProviderHost::GetOrCreateServiceWorkerHandle( 390 ServiceWorkerProviderHost::GetOrCreateServiceWorkerHandle(
355 ServiceWorkerVersion* version) { 391 ServiceWorkerVersion* version) {
356 DCHECK(dispatcher_host_); 392 DCHECK(dispatcher_host_);
357 if (!context_ || !version) 393 if (!context_ || !version)
358 return ServiceWorkerObjectInfo(); 394 return ServiceWorkerObjectInfo();
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
674 Send(new ServiceWorkerMsg_SetControllerServiceWorker( 710 Send(new ServiceWorkerMsg_SetControllerServiceWorker(
675 render_thread_id_, provider_id(), 711 render_thread_id_, provider_id(),
676 GetOrCreateServiceWorkerHandle( 712 GetOrCreateServiceWorkerHandle(
677 associated_registration_->active_version()), 713 associated_registration_->active_version()),
678 false /* shouldNotifyControllerChange */)); 714 false /* shouldNotifyControllerChange */));
679 } 715 }
680 } 716 }
681 } 717 }
682 718
683 } // namespace content 719 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698