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

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

Issue 2446553002: Support Service Worker NavigationPreload with PlzNavigate. (Closed)
Patch Set: remove unnecessary comment Created 4 years, 1 month 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/stl_util.h" 10 #include "base/stl_util.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 called(false) { 45 called(false) {
46 } 46 }
47 47
48 ServiceWorkerProviderHost::OneShotGetReadyCallback::~OneShotGetReadyCallback() { 48 ServiceWorkerProviderHost::OneShotGetReadyCallback::~OneShotGetReadyCallback() {
49 } 49 }
50 50
51 // static 51 // static
52 std::unique_ptr<ServiceWorkerProviderHost> 52 std::unique_ptr<ServiceWorkerProviderHost>
53 ServiceWorkerProviderHost::PreCreateNavigationHost( 53 ServiceWorkerProviderHost::PreCreateNavigationHost(
54 base::WeakPtr<ServiceWorkerContextCore> context, 54 base::WeakPtr<ServiceWorkerContextCore> context,
55 const MojoURLLoaderFactoryGetter& url_loader_factory_getter,
55 bool are_ancestors_secure) { 56 bool are_ancestors_secure) {
56 CHECK(IsBrowserSideNavigationEnabled()); 57 CHECK(IsBrowserSideNavigationEnabled());
57 // Generate a new browser-assigned id for the host. 58 // Generate a new browser-assigned id for the host.
58 int provider_id = g_next_navigation_provider_id--; 59 int provider_id = g_next_navigation_provider_id--;
59 return std::unique_ptr<ServiceWorkerProviderHost>( 60 std::unique_ptr<ServiceWorkerProviderHost> host(
60 new ServiceWorkerProviderHost( 61 base::MakeUnique<ServiceWorkerProviderHost>(
61 ChildProcessHost::kInvalidUniqueID, MSG_ROUTING_NONE, provider_id, 62 ChildProcessHost::kInvalidUniqueID, MSG_ROUTING_NONE, provider_id,
62 SERVICE_WORKER_PROVIDER_FOR_WINDOW, 63 SERVICE_WORKER_PROVIDER_FOR_WINDOW,
63 are_ancestors_secure ? FrameSecurityLevel::SECURE 64 are_ancestors_secure ? FrameSecurityLevel::SECURE
64 : FrameSecurityLevel::INSECURE, 65 : FrameSecurityLevel::INSECURE,
65 context, nullptr)); 66 context, nullptr));
67 host->url_loader_factory_getter_ = url_loader_factory_getter;
68 return host;
66 } 69 }
67 70
68 ServiceWorkerProviderHost::ServiceWorkerProviderHost( 71 ServiceWorkerProviderHost::ServiceWorkerProviderHost(
69 int render_process_id, 72 int render_process_id,
70 int route_id, 73 int route_id,
71 int provider_id, 74 int provider_id,
72 ServiceWorkerProviderType provider_type, 75 ServiceWorkerProviderType provider_type,
73 FrameSecurityLevel parent_frame_security_level, 76 FrameSecurityLevel parent_frame_security_level,
74 base::WeakPtr<ServiceWorkerContextCore> context, 77 base::WeakPtr<ServiceWorkerContextCore> context,
75 ServiceWorkerDispatcherHost* dispatcher_host) 78 ServiceWorkerDispatcherHost* dispatcher_host)
76 : client_uuid_(base::GenerateGUID()), 79 : client_uuid_(base::GenerateGUID()),
77 render_process_id_(render_process_id), 80 render_process_id_(render_process_id),
78 route_id_(route_id), 81 route_id_(route_id),
79 render_thread_id_(kDocumentMainThreadId), 82 render_thread_id_(kDocumentMainThreadId),
80 provider_id_(provider_id), 83 provider_id_(provider_id),
81 provider_type_(provider_type), 84 provider_type_(provider_type),
82 parent_frame_security_level_(parent_frame_security_level), 85 parent_frame_security_level_(parent_frame_security_level),
83 context_(context), 86 context_(context),
84 dispatcher_host_(dispatcher_host), 87 dispatcher_host_(dispatcher_host),
85 allow_association_(true) { 88 allow_association_(true),
89 url_loader_factory_getter_(
90 dispatcher_host_ ? dispatcher_host_->url_loader_factory_getter()
91 : MojoURLLoaderFactoryGetter()) {
86 DCHECK_NE(SERVICE_WORKER_PROVIDER_UNKNOWN, provider_type_); 92 DCHECK_NE(SERVICE_WORKER_PROVIDER_UNKNOWN, provider_type_);
87 93
88 // PlzNavigate 94 // PlzNavigate
89 CHECK(render_process_id != ChildProcessHost::kInvalidUniqueID || 95 CHECK(render_process_id != ChildProcessHost::kInvalidUniqueID ||
90 IsBrowserSideNavigationEnabled()); 96 IsBrowserSideNavigationEnabled());
91 97
92 if (provider_type_ == SERVICE_WORKER_PROVIDER_FOR_CONTROLLER) { 98 if (provider_type_ == SERVICE_WORKER_PROVIDER_FOR_CONTROLLER) {
93 // Actual thread id is set when the service worker context gets started. 99 // Actual thread id is set when the service worker context gets started.
94 render_thread_id_ = kInvalidEmbeddedWorkerThreadId; 100 render_thread_id_ = kInvalidEmbeddedWorkerThreadId;
95 } 101 }
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 RequestContextFrameType frame_type, 340 RequestContextFrameType frame_type,
335 base::WeakPtr<storage::BlobStorageContext> blob_storage_context, 341 base::WeakPtr<storage::BlobStorageContext> blob_storage_context,
336 scoped_refptr<ResourceRequestBodyImpl> body) { 342 scoped_refptr<ResourceRequestBodyImpl> body) {
337 if (IsHostToRunningServiceWorker()) { 343 if (IsHostToRunningServiceWorker()) {
338 return std::unique_ptr<ServiceWorkerRequestHandler>( 344 return std::unique_ptr<ServiceWorkerRequestHandler>(
339 new ServiceWorkerContextRequestHandler( 345 new ServiceWorkerContextRequestHandler(
340 context_, AsWeakPtr(), blob_storage_context, resource_type)); 346 context_, AsWeakPtr(), blob_storage_context, resource_type));
341 } 347 }
342 if (ServiceWorkerUtils::IsMainResourceType(resource_type) || 348 if (ServiceWorkerUtils::IsMainResourceType(resource_type) ||
343 controlling_version()) { 349 controlling_version()) {
344 // |dispatcher_host_| may be null in some unittests.
345 return std::unique_ptr<ServiceWorkerRequestHandler>( 350 return std::unique_ptr<ServiceWorkerRequestHandler>(
346 new ServiceWorkerControlleeRequestHandler( 351 new ServiceWorkerControlleeRequestHandler(
347 context_, AsWeakPtr(), blob_storage_context, request_mode, 352 context_, AsWeakPtr(), blob_storage_context, request_mode,
348 credentials_mode, redirect_mode, resource_type, 353 credentials_mode, redirect_mode, resource_type,
349 request_context_type, frame_type, body, 354 request_context_type, frame_type, body,
350 dispatcher_host_ ? dispatcher_host_->url_loader_factory_getter() 355 url_loader_factory_getter_));
351 : MojoURLLoaderFactoryGetter()));
352 } 356 }
353 return std::unique_ptr<ServiceWorkerRequestHandler>(); 357 return std::unique_ptr<ServiceWorkerRequestHandler>();
354 } 358 }
355 359
356 ServiceWorkerObjectInfo 360 ServiceWorkerObjectInfo
357 ServiceWorkerProviderHost::GetOrCreateServiceWorkerHandle( 361 ServiceWorkerProviderHost::GetOrCreateServiceWorkerHandle(
358 ServiceWorkerVersion* version) { 362 ServiceWorkerVersion* version) {
359 DCHECK(dispatcher_host_); 363 DCHECK(dispatcher_host_);
360 if (!context_ || !version) 364 if (!context_ || !version)
361 return ServiceWorkerObjectInfo(); 365 return ServiceWorkerObjectInfo();
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 render_thread_id_, provider_id())); 455 render_thread_id_, provider_id()));
452 } 456 }
453 } 457 }
454 458
455 render_process_id_ = ChildProcessHost::kInvalidUniqueID; 459 render_process_id_ = ChildProcessHost::kInvalidUniqueID;
456 route_id_ = MSG_ROUTING_NONE; 460 route_id_ = MSG_ROUTING_NONE;
457 render_thread_id_ = kInvalidEmbeddedWorkerThreadId; 461 render_thread_id_ = kInvalidEmbeddedWorkerThreadId;
458 provider_id_ = kInvalidServiceWorkerProviderId; 462 provider_id_ = kInvalidServiceWorkerProviderId;
459 provider_type_ = SERVICE_WORKER_PROVIDER_UNKNOWN; 463 provider_type_ = SERVICE_WORKER_PROVIDER_UNKNOWN;
460 dispatcher_host_ = nullptr; 464 dispatcher_host_ = nullptr;
465 url_loader_factory_getter_ = MojoURLLoaderFactoryGetter();
461 } 466 }
462 467
463 void ServiceWorkerProviderHost::CompleteCrossSiteTransfer( 468 void ServiceWorkerProviderHost::CompleteCrossSiteTransfer(
464 int new_process_id, 469 int new_process_id,
465 int new_frame_id, 470 int new_frame_id,
466 int new_provider_id, 471 int new_provider_id,
467 ServiceWorkerProviderType new_provider_type, 472 ServiceWorkerProviderType new_provider_type,
468 ServiceWorkerDispatcherHost* new_dispatcher_host) { 473 ServiceWorkerDispatcherHost* new_dispatcher_host) {
469 DCHECK_EQ(ChildProcessHost::kInvalidUniqueID, render_process_id_); 474 DCHECK_EQ(ChildProcessHost::kInvalidUniqueID, render_process_id_);
470 DCHECK_NE(ChildProcessHost::kInvalidUniqueID, new_process_id); 475 DCHECK_NE(ChildProcessHost::kInvalidUniqueID, new_process_id);
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
654 void ServiceWorkerProviderHost::Send(IPC::Message* message) const { 659 void ServiceWorkerProviderHost::Send(IPC::Message* message) const {
655 DCHECK(dispatcher_host_); 660 DCHECK(dispatcher_host_);
656 DCHECK(IsReadyToSendMessages()); 661 DCHECK(IsReadyToSendMessages());
657 dispatcher_host_->Send(message); 662 dispatcher_host_->Send(message);
658 } 663 }
659 664
660 void ServiceWorkerProviderHost::FinalizeInitialization( 665 void ServiceWorkerProviderHost::FinalizeInitialization(
661 int process_id, 666 int process_id,
662 int frame_routing_id, 667 int frame_routing_id,
663 ServiceWorkerDispatcherHost* dispatcher_host) { 668 ServiceWorkerDispatcherHost* dispatcher_host) {
669 DCHECK(dispatcher_host);
664 render_process_id_ = process_id; 670 render_process_id_ = process_id;
665 route_id_ = frame_routing_id; 671 route_id_ = frame_routing_id;
666 dispatcher_host_ = dispatcher_host; 672 dispatcher_host_ = dispatcher_host;
673 url_loader_factory_getter_ = dispatcher_host_->url_loader_factory_getter();
667 674
668 for (const GURL& pattern : associated_patterns_) 675 for (const GURL& pattern : associated_patterns_)
669 IncreaseProcessReference(pattern); 676 IncreaseProcessReference(pattern);
670 677
671 for (auto& key_registration : matching_registrations_) 678 for (auto& key_registration : matching_registrations_)
672 IncreaseProcessReference(key_registration.second->pattern()); 679 IncreaseProcessReference(key_registration.second->pattern());
673 680
674 if (associated_registration_.get()) { 681 if (associated_registration_.get()) {
675 SendAssociateRegistrationMessage(); 682 SendAssociateRegistrationMessage();
676 if (dispatcher_host_ && associated_registration_->active_version()) { 683 if (associated_registration_->active_version()) {
677 Send(new ServiceWorkerMsg_SetControllerServiceWorker( 684 Send(new ServiceWorkerMsg_SetControllerServiceWorker(
678 render_thread_id_, provider_id(), 685 render_thread_id_, provider_id(),
679 GetOrCreateServiceWorkerHandle( 686 GetOrCreateServiceWorkerHandle(
680 associated_registration_->active_version()), 687 associated_registration_->active_version()),
681 false /* shouldNotifyControllerChange */)); 688 false /* shouldNotifyControllerChange */));
682 } 689 }
683 } 690 }
684 } 691 }
685 692
686 } // namespace content 693 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698