OLD | NEW |
---|---|
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/memory/ptr_util.h" |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
84 | 84 |
85 // static | 85 // static |
86 std::unique_ptr<ServiceWorkerProviderHost> | 86 std::unique_ptr<ServiceWorkerProviderHost> |
87 ServiceWorkerProviderHost::PreCreateNavigationHost( | 87 ServiceWorkerProviderHost::PreCreateNavigationHost( |
88 base::WeakPtr<ServiceWorkerContextCore> context, | 88 base::WeakPtr<ServiceWorkerContextCore> context, |
89 bool are_ancestors_secure, | 89 bool are_ancestors_secure, |
90 const WebContentsGetter& web_contents_getter) { | 90 const WebContentsGetter& web_contents_getter) { |
91 CHECK(IsBrowserSideNavigationEnabled()); | 91 CHECK(IsBrowserSideNavigationEnabled()); |
92 // Generate a new browser-assigned id for the host. | 92 // Generate a new browser-assigned id for the host. |
93 int provider_id = g_next_navigation_provider_id--; | 93 int provider_id = g_next_navigation_provider_id--; |
94 auto host = base::MakeUnique<ServiceWorkerProviderHost>( | 94 auto host = base::WrapUnique(new ServiceWorkerProviderHost( |
95 ChildProcessHost::kInvalidUniqueID, MSG_ROUTING_NONE, provider_id, | 95 ChildProcessHost::kInvalidUniqueID, MSG_ROUTING_NONE, provider_id, |
96 SERVICE_WORKER_PROVIDER_FOR_WINDOW, | 96 SERVICE_WORKER_PROVIDER_FOR_WINDOW, |
97 are_ancestors_secure ? FrameSecurityLevel::SECURE | 97 are_ancestors_secure ? FrameSecurityLevel::SECURE |
98 : FrameSecurityLevel::INSECURE, | 98 : FrameSecurityLevel::INSECURE, |
99 context, nullptr); | 99 context, nullptr)); |
100 host->web_contents_getter_ = web_contents_getter; | 100 host->web_contents_getter_ = web_contents_getter; |
101 return host; | 101 return host; |
102 } | 102 } |
103 | 103 |
104 // static | |
105 std::unique_ptr<ServiceWorkerProviderHost> | |
106 ServiceWorkerProviderHost::CreateForTesting( | |
107 int process_id, | |
108 int provider_id, | |
109 ServiceWorkerProviderType type, | |
110 base::WeakPtr<ServiceWorkerContextCore> context, | |
111 int route_id, | |
112 ServiceWorkerDispatcherHost* dispatcher_host) { | |
113 return base::WrapUnique(new ServiceWorkerProviderHost( | |
114 process_id, route_id, provider_id, type, | |
115 FrameSecurityLevel::UNINITIALIZED, context, dispatcher_host)); | |
116 } | |
117 | |
118 // static | |
119 std::unique_ptr<ServiceWorkerProviderHost> ServiceWorkerProviderHost::Create( | |
120 int process_id, | |
121 ServiceWorkerProviderHostInfo info, | |
122 base::WeakPtr<ServiceWorkerContextCore> context, | |
123 ServiceWorkerDispatcherHost* dispatcher_host) { | |
124 return base::WrapUnique(new ServiceWorkerProviderHost( | |
falken
2017/01/26 05:15:43
MakeUnique is preferred
shimazu
2017/01/26 09:27:23
The constructor is private, so WrapUnique is used
| |
125 process_id, info.route_id, info.provider_id, info.type, | |
126 info.is_parent_frame_secure ? FrameSecurityLevel::SECURE | |
127 : FrameSecurityLevel::INSECURE, | |
128 context, dispatcher_host)); | |
129 } | |
130 | |
104 ServiceWorkerProviderHost::ServiceWorkerProviderHost( | 131 ServiceWorkerProviderHost::ServiceWorkerProviderHost( |
105 int render_process_id, | 132 int render_process_id, |
106 int route_id, | 133 int route_id, |
107 int provider_id, | 134 int provider_id, |
108 ServiceWorkerProviderType provider_type, | 135 ServiceWorkerProviderType provider_type, |
109 FrameSecurityLevel parent_frame_security_level, | 136 FrameSecurityLevel parent_frame_security_level, |
110 base::WeakPtr<ServiceWorkerContextCore> context, | 137 base::WeakPtr<ServiceWorkerContextCore> context, |
111 ServiceWorkerDispatcherHost* dispatcher_host) | 138 ServiceWorkerDispatcherHost* dispatcher_host) |
112 : client_uuid_(base::GenerateGUID()), | 139 : client_uuid_(base::GenerateGUID()), |
113 render_process_id_(render_process_id), | 140 render_process_id_(render_process_id), |
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
479 | 506 |
480 bool ServiceWorkerProviderHost::GetRegistrationForReady( | 507 bool ServiceWorkerProviderHost::GetRegistrationForReady( |
481 const GetRegistrationForReadyCallback& callback) { | 508 const GetRegistrationForReadyCallback& callback) { |
482 if (get_ready_callback_) | 509 if (get_ready_callback_) |
483 return false; | 510 return false; |
484 get_ready_callback_.reset(new OneShotGetReadyCallback(callback)); | 511 get_ready_callback_.reset(new OneShotGetReadyCallback(callback)); |
485 ReturnRegistrationForReadyIfNeeded(); | 512 ReturnRegistrationForReadyIfNeeded(); |
486 return true; | 513 return true; |
487 } | 514 } |
488 | 515 |
489 void ServiceWorkerProviderHost::PrepareForCrossSiteTransfer() { | 516 std::unique_ptr<ServiceWorkerProviderHost> |
517 ServiceWorkerProviderHost::PrepareForCrossSiteTransfer() { | |
490 DCHECK_NE(ChildProcessHost::kInvalidUniqueID, render_process_id_); | 518 DCHECK_NE(ChildProcessHost::kInvalidUniqueID, render_process_id_); |
491 DCHECK_NE(MSG_ROUTING_NONE, route_id_); | 519 DCHECK_NE(MSG_ROUTING_NONE, route_id_); |
492 DCHECK_EQ(kDocumentMainThreadId, render_thread_id_); | 520 DCHECK_EQ(kDocumentMainThreadId, render_thread_id_); |
493 DCHECK_NE(SERVICE_WORKER_PROVIDER_UNKNOWN, provider_type_); | 521 DCHECK_NE(SERVICE_WORKER_PROVIDER_UNKNOWN, provider_type_); |
494 | 522 |
523 std::unique_ptr<ServiceWorkerProviderHost> new_provider_host = | |
524 base::WrapUnique(new ServiceWorkerProviderHost( | |
525 process_id(), frame_id(), provider_id(), provider_type(), | |
526 parent_frame_security_level_, context_, dispatcher_host())); | |
527 | |
495 for (const GURL& pattern : associated_patterns_) | 528 for (const GURL& pattern : associated_patterns_) |
496 DecreaseProcessReference(pattern); | 529 DecreaseProcessReference(pattern); |
497 | 530 |
498 for (auto& key_registration : matching_registrations_) | 531 for (auto& key_registration : matching_registrations_) |
499 DecreaseProcessReference(key_registration.second->pattern()); | 532 DecreaseProcessReference(key_registration.second->pattern()); |
500 | 533 |
501 if (associated_registration_.get()) { | 534 if (associated_registration_.get()) { |
502 if (dispatcher_host_) { | 535 if (dispatcher_host_) { |
503 Send(new ServiceWorkerMsg_DisassociateRegistration( | 536 Send(new ServiceWorkerMsg_DisassociateRegistration( |
504 render_thread_id_, provider_id())); | 537 render_thread_id_, provider_id())); |
505 } | 538 } |
506 } | 539 } |
507 | 540 |
508 render_process_id_ = ChildProcessHost::kInvalidUniqueID; | 541 render_process_id_ = ChildProcessHost::kInvalidUniqueID; |
509 route_id_ = MSG_ROUTING_NONE; | 542 route_id_ = MSG_ROUTING_NONE; |
510 render_thread_id_ = kInvalidEmbeddedWorkerThreadId; | 543 render_thread_id_ = kInvalidEmbeddedWorkerThreadId; |
511 provider_id_ = kInvalidServiceWorkerProviderId; | 544 provider_id_ = kInvalidServiceWorkerProviderId; |
512 provider_type_ = SERVICE_WORKER_PROVIDER_UNKNOWN; | 545 provider_type_ = SERVICE_WORKER_PROVIDER_UNKNOWN; |
513 dispatcher_host_ = nullptr; | 546 dispatcher_host_ = nullptr; |
547 return new_provider_host; | |
514 } | 548 } |
515 | 549 |
516 void ServiceWorkerProviderHost::CompleteCrossSiteTransfer( | 550 void ServiceWorkerProviderHost::CompleteCrossSiteTransfer( |
517 int new_process_id, | 551 int new_process_id, |
518 int new_frame_id, | 552 int new_frame_id, |
519 int new_provider_id, | 553 int new_provider_id, |
520 ServiceWorkerProviderType new_provider_type, | 554 ServiceWorkerProviderType new_provider_type, |
521 ServiceWorkerDispatcherHost* new_dispatcher_host) { | 555 ServiceWorkerDispatcherHost* new_dispatcher_host) { |
522 DCHECK_EQ(ChildProcessHost::kInvalidUniqueID, render_process_id_); | 556 DCHECK_EQ(ChildProcessHost::kInvalidUniqueID, render_process_id_); |
523 DCHECK_NE(ChildProcessHost::kInvalidUniqueID, new_process_id); | 557 DCHECK_NE(ChildProcessHost::kInvalidUniqueID, new_process_id); |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
730 Send(new ServiceWorkerMsg_SetControllerServiceWorker( | 764 Send(new ServiceWorkerMsg_SetControllerServiceWorker( |
731 render_thread_id_, provider_id(), | 765 render_thread_id_, provider_id(), |
732 GetOrCreateServiceWorkerHandle( | 766 GetOrCreateServiceWorkerHandle( |
733 associated_registration_->active_version()), | 767 associated_registration_->active_version()), |
734 false /* shouldNotifyControllerChange */)); | 768 false /* shouldNotifyControllerChange */)); |
735 } | 769 } |
736 } | 770 } |
737 } | 771 } |
738 | 772 |
739 } // namespace content | 773 } // namespace content |
OLD | NEW |