Chromium Code Reviews| 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 #ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_PROVIDER_HOST_H_ | 5 #ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_PROVIDER_HOST_H_ |
| 6 #define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_PROVIDER_HOST_H_ | 6 #define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_PROVIDER_HOST_H_ |
| 7 | 7 |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 | 10 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 58 // resource loads made directly by the service worker. | 58 // resource loads made directly by the service worker. |
| 59 // | 59 // |
| 60 // This instance is created when navigation is started and | 60 // This instance is created when navigation is started and |
| 61 // ServiceWorkerNetworkProvider is create on the renderer process. Mojo's | 61 // ServiceWorkerNetworkProvider is create on the renderer process. Mojo's |
| 62 // connection from ServiceWorkerNetworkProvider is established on the creation | 62 // connection from ServiceWorkerNetworkProvider is established on the creation |
| 63 // time, and the instance is destroyed on disconnection from the renderer side. | 63 // time, and the instance is destroyed on disconnection from the renderer side. |
| 64 // If PlzNavigate is turned on, this instance is pre-created on the browser | 64 // If PlzNavigate is turned on, this instance is pre-created on the browser |
| 65 // before ServiceWorkerNetworkProvider is created on the renderer because | 65 // before ServiceWorkerNetworkProvider is created on the renderer because |
| 66 // navigation is possible to be initiated on the browser side. In that case, | 66 // navigation is possible to be initiated on the browser side. In that case, |
| 67 // establishment of Mojo's connection will be deferred until | 67 // establishment of Mojo's connection will be deferred until |
| 68 // ServiceWorkerNetworkProvider is created on the renderer. | 68 // ServiceWorkerNetworkProvider is created on the renderer. |
|
falken
2017/06/01 08:12:34
This comment seems to need updating now.
shimazu
2017/06/06 04:16:56
Done.
| |
| 69 class CONTENT_EXPORT ServiceWorkerProviderHost | 69 class CONTENT_EXPORT ServiceWorkerProviderHost |
| 70 : public NON_EXPORTED_BASE(ServiceWorkerRegistration::Listener), | 70 : public NON_EXPORTED_BASE(ServiceWorkerRegistration::Listener), |
| 71 public base::SupportsWeakPtr<ServiceWorkerProviderHost>, | 71 public base::SupportsWeakPtr<ServiceWorkerProviderHost>, |
| 72 public NON_EXPORTED_BASE(mojom::ServiceWorkerProviderHost) { | 72 public NON_EXPORTED_BASE(mojom::ServiceWorkerProviderHost) { |
| 73 public: | 73 public: |
| 74 using GetRegistrationForReadyCallback = | 74 using GetRegistrationForReadyCallback = |
| 75 base::Callback<void(ServiceWorkerRegistration* reigstration)>; | 75 base::Callback<void(ServiceWorkerRegistration* reigstration)>; |
| 76 | 76 |
| 77 using WebContentsGetter = base::Callback<WebContents*(void)>; | 77 using WebContentsGetter = base::Callback<WebContents*(void)>; |
| 78 | 78 |
| 79 // PlzNavigate | 79 // PlzNavigate |
| 80 // Used to pre-create a ServiceWorkerProviderHost for a navigation. The | 80 // Used to pre-create a ServiceWorkerProviderHost for a navigation. The |
| 81 // ServiceWorkerNetworkProvider will later be created in the renderer, should | 81 // ServiceWorkerNetworkProvider will later be created in the renderer, should |
| 82 // the navigation succeed. |is_parent_frame_is_secure| should be true for main | 82 // the navigation succeed. |is_parent_frame_is_secure| should be true for main |
| 83 // frames. Otherwise it is true iff all ancestor frames of this frame have a | 83 // frames. Otherwise it is true iff all ancestor frames of this frame have a |
| 84 // secure origin. |web_contents_getter| indicates the tab where the navigation | 84 // secure origin. |web_contents_getter| indicates the tab where the navigation |
| 85 // is occurring. | 85 // is occurring. |
| 86 static std::unique_ptr<ServiceWorkerProviderHost> PreCreateNavigationHost( | 86 static std::unique_ptr<ServiceWorkerProviderHost> PreCreateNavigationHost( |
| 87 base::WeakPtr<ServiceWorkerContextCore> context, | 87 base::WeakPtr<ServiceWorkerContextCore> context, |
| 88 bool are_ancestors_secure, | 88 bool are_ancestors_secure, |
| 89 const WebContentsGetter& web_contents_getter); | 89 const WebContentsGetter& web_contents_getter); |
| 90 | 90 |
| 91 // Creates ServiceWorkerProviderHost for the worker's context. Information | |
| 92 // about the ServiceWorkerProviderHost is passed with the StartWorker message. | |
| 93 static std::unique_ptr<ServiceWorkerProviderHost> PreCreateForWorkerContext( | |
| 94 ServiceWorkerVersion* hosted_version, | |
| 95 base::WeakPtr<ServiceWorkerContextCore> context); | |
| 96 | |
| 91 // Used to create a ServiceWorkerProviderHost when the renderer-side provider | 97 // Used to create a ServiceWorkerProviderHost when the renderer-side provider |
| 92 // is created. This ProviderHost will be created for the process specified by | 98 // is created. This ProviderHost will be created for the process specified by |
| 93 // |process_id|. | 99 // |process_id|. |
| 94 static std::unique_ptr<ServiceWorkerProviderHost> Create( | 100 static std::unique_ptr<ServiceWorkerProviderHost> Create( |
| 95 int process_id, | 101 int process_id, |
| 96 ServiceWorkerProviderHostInfo info, | 102 ServiceWorkerProviderHostInfo info, |
| 97 base::WeakPtr<ServiceWorkerContextCore> context, | 103 base::WeakPtr<ServiceWorkerContextCore> context, |
| 98 ServiceWorkerDispatcherHost* dispatcher_host); | 104 ServiceWorkerDispatcherHost* dispatcher_host); |
| 99 | 105 |
| 100 ~ServiceWorkerProviderHost() override; | 106 ~ServiceWorkerProviderHost() override; |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 189 | 195 |
| 190 // Associates to |registration| to listen for its version change events and | 196 // Associates to |registration| to listen for its version change events and |
| 191 // sets the controller. If |notify_controllerchange| is true, instructs the | 197 // sets the controller. If |notify_controllerchange| is true, instructs the |
| 192 // renderer to dispatch a 'controllerchange' event. | 198 // renderer to dispatch a 'controllerchange' event. |
| 193 void AssociateRegistration(ServiceWorkerRegistration* registration, | 199 void AssociateRegistration(ServiceWorkerRegistration* registration, |
| 194 bool notify_controllerchange); | 200 bool notify_controllerchange); |
| 195 | 201 |
| 196 // Clears the associated registration and stop listening to it. | 202 // Clears the associated registration and stop listening to it. |
| 197 void DisassociateRegistration(); | 203 void DisassociateRegistration(); |
| 198 | 204 |
| 199 void SetHostedVersion(ServiceWorkerVersion* version); | |
| 200 | |
| 201 // Returns a handler for a request, the handler may return NULL if | 205 // Returns a handler for a request, the handler may return NULL if |
| 202 // the request doesn't require special handling. | 206 // the request doesn't require special handling. |
| 203 std::unique_ptr<ServiceWorkerRequestHandler> CreateRequestHandler( | 207 std::unique_ptr<ServiceWorkerRequestHandler> CreateRequestHandler( |
| 204 FetchRequestMode request_mode, | 208 FetchRequestMode request_mode, |
| 205 FetchCredentialsMode credentials_mode, | 209 FetchCredentialsMode credentials_mode, |
| 206 FetchRedirectMode redirect_mode, | 210 FetchRedirectMode redirect_mode, |
| 207 ResourceType resource_type, | 211 ResourceType resource_type, |
| 208 RequestContextType request_context_type, | 212 RequestContextType request_context_type, |
| 209 RequestContextFrameType frame_type, | 213 RequestContextFrameType frame_type, |
| 210 base::WeakPtr<storage::BlobStorageContext> blob_storage_context, | 214 base::WeakPtr<storage::BlobStorageContext> blob_storage_context, |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 259 return dispatcher_host_; | 263 return dispatcher_host_; |
| 260 } | 264 } |
| 261 | 265 |
| 262 // PlzNavigate | 266 // PlzNavigate |
| 263 // Completes initialization of provider hosts used for navigation requests. | 267 // Completes initialization of provider hosts used for navigation requests. |
| 264 void CompleteNavigationInitialized( | 268 void CompleteNavigationInitialized( |
| 265 int process_id, | 269 int process_id, |
| 266 ServiceWorkerProviderHostInfo info, | 270 ServiceWorkerProviderHostInfo info, |
| 267 ServiceWorkerDispatcherHost* dispatcher_host); | 271 ServiceWorkerDispatcherHost* dispatcher_host); |
| 268 | 272 |
| 273 // Completes initialization of provider hosts used for the service worker's | |
| 274 // context. | |
|
falken
2017/06/01 08:12:34
It's pretty lame but this class historically calls
shimazu
2017/06/06 04:16:56
Done.
| |
| 275 virtual void CompleteStartWorkerPreparation( | |
| 276 int process_id, | |
| 277 mojom::ServiceWorkerProviderClientInfoPtr* provider_client_info); | |
| 278 | |
| 269 // Sends event messages to the renderer. Events for the worker are queued up | 279 // Sends event messages to the renderer. Events for the worker are queued up |
| 270 // until the worker thread id is known via SetReadyToSendMessagesToWorker(). | 280 // until the worker thread id is known via SetReadyToSendMessagesToWorker(). |
| 271 void SendUpdateFoundMessage( | 281 void SendUpdateFoundMessage( |
| 272 int registration_handle_id); | 282 int registration_handle_id); |
| 273 void SendSetVersionAttributesMessage( | 283 void SendSetVersionAttributesMessage( |
| 274 int registration_handle_id, | 284 int registration_handle_id, |
| 275 ChangedVersionAttributesMask changed_mask, | 285 ChangedVersionAttributesMask changed_mask, |
| 276 ServiceWorkerVersion* installing_version, | 286 ServiceWorkerVersion* installing_version, |
| 277 ServiceWorkerVersion* waiting_version, | 287 ServiceWorkerVersion* waiting_version, |
| 278 ServiceWorkerVersion* active_version); | 288 ServiceWorkerVersion* active_version); |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 294 // exceptional condition like it could no longer be read from the script | 304 // exceptional condition like it could no longer be read from the script |
| 295 // cache. | 305 // cache. |
| 296 void NotifyControllerLost(); | 306 void NotifyControllerLost(); |
| 297 | 307 |
| 298 // Binds the ServiceWorkerWorkerClient of a dedicated (or shared) worker to | 308 // Binds the ServiceWorkerWorkerClient of a dedicated (or shared) worker to |
| 299 // the parent frame's ServiceWorkerProviderHost. (This is used only when | 309 // the parent frame's ServiceWorkerProviderHost. (This is used only when |
| 300 // off-main-thread-fetch is enabled.) | 310 // off-main-thread-fetch is enabled.) |
| 301 void BindWorkerFetchContext( | 311 void BindWorkerFetchContext( |
| 302 mojom::ServiceWorkerWorkerClientAssociatedPtrInfo client_ptr_info); | 312 mojom::ServiceWorkerWorkerClientAssociatedPtrInfo client_ptr_info); |
| 303 | 313 |
| 314 protected: | |
| 315 ServiceWorkerProviderHost(int process_id, | |
| 316 ServiceWorkerProviderHostInfo info, | |
| 317 base::WeakPtr<ServiceWorkerContextCore> context, | |
| 318 ServiceWorkerDispatcherHost* dispatcher_host); | |
| 319 | |
| 304 private: | 320 private: |
| 305 friend class ForeignFetchRequestHandlerTest; | 321 friend class ForeignFetchRequestHandlerTest; |
| 306 friend class LinkHeaderServiceWorkerTest; | 322 friend class LinkHeaderServiceWorkerTest; |
| 307 friend class ServiceWorkerProviderHostTest; | 323 friend class ServiceWorkerProviderHostTest; |
| 308 friend class ServiceWorkerWriteToCacheJobTest; | 324 friend class ServiceWorkerWriteToCacheJobTest; |
| 309 friend class ServiceWorkerContextRequestHandlerTest; | 325 friend class ServiceWorkerContextRequestHandlerTest; |
| 310 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerWriteToCacheJobTest, Update_SameScript); | 326 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerWriteToCacheJobTest, Update_SameScript); |
| 311 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerWriteToCacheJobTest, | 327 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerWriteToCacheJobTest, |
| 312 Update_SameSizeScript); | 328 Update_SameSizeScript); |
| 313 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerWriteToCacheJobTest, | 329 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerWriteToCacheJobTest, |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 324 | 340 |
| 325 struct OneShotGetReadyCallback { | 341 struct OneShotGetReadyCallback { |
| 326 GetRegistrationForReadyCallback callback; | 342 GetRegistrationForReadyCallback callback; |
| 327 bool called; | 343 bool called; |
| 328 | 344 |
| 329 explicit OneShotGetReadyCallback( | 345 explicit OneShotGetReadyCallback( |
| 330 const GetRegistrationForReadyCallback& callback); | 346 const GetRegistrationForReadyCallback& callback); |
| 331 ~OneShotGetReadyCallback(); | 347 ~OneShotGetReadyCallback(); |
| 332 }; | 348 }; |
| 333 | 349 |
| 334 ServiceWorkerProviderHost(int process_id, | |
| 335 ServiceWorkerProviderHostInfo info, | |
| 336 base::WeakPtr<ServiceWorkerContextCore> context, | |
| 337 ServiceWorkerDispatcherHost* dispatcher_host); | |
| 338 | |
| 339 // ServiceWorkerRegistration::Listener overrides. | 350 // ServiceWorkerRegistration::Listener overrides. |
| 340 void OnVersionAttributesChanged( | 351 void OnVersionAttributesChanged( |
| 341 ServiceWorkerRegistration* registration, | 352 ServiceWorkerRegistration* registration, |
| 342 ChangedVersionAttributesMask changed_mask, | 353 ChangedVersionAttributesMask changed_mask, |
| 343 const ServiceWorkerRegistrationInfo& info) override; | 354 const ServiceWorkerRegistrationInfo& info) override; |
| 344 void OnRegistrationFailed(ServiceWorkerRegistration* registration) override; | 355 void OnRegistrationFailed(ServiceWorkerRegistration* registration) override; |
| 345 void OnRegistrationFinishedUninstalling( | 356 void OnRegistrationFinishedUninstalling( |
| 346 ServiceWorkerRegistration* registration) override; | 357 ServiceWorkerRegistration* registration) override; |
| 347 void OnSkippedWaiting(ServiceWorkerRegistration* registration) override; | 358 void OnSkippedWaiting(ServiceWorkerRegistration* registration) override; |
| 348 | 359 |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 362 | 373 |
| 363 // Increase/decrease this host's process reference for |pattern|. | 374 // Increase/decrease this host's process reference for |pattern|. |
| 364 void IncreaseProcessReference(const GURL& pattern); | 375 void IncreaseProcessReference(const GURL& pattern); |
| 365 void DecreaseProcessReference(const GURL& pattern); | 376 void DecreaseProcessReference(const GURL& pattern); |
| 366 | 377 |
| 367 void ReturnRegistrationForReadyIfNeeded(); | 378 void ReturnRegistrationForReadyIfNeeded(); |
| 368 | 379 |
| 369 bool IsReadyToSendMessages() const; | 380 bool IsReadyToSendMessages() const; |
| 370 void Send(IPC::Message* message) const; | 381 void Send(IPC::Message* message) const; |
| 371 | 382 |
| 383 // Sets the version hosted by this provider. This method should be used only | |
| 384 // for providers for service worker contexts. | |
|
falken
2017/06/01 08:12:34
ditto
shimazu
2017/06/06 04:16:56
Done.
| |
| 385 void SetHostedVersion(ServiceWorkerVersion* version); | |
| 386 | |
| 372 // Finalizes cross-site transfers and navigation-initalized hosts. | 387 // Finalizes cross-site transfers and navigation-initalized hosts. |
| 373 void FinalizeInitialization(int process_id, | 388 void FinalizeInitialization(int process_id, |
| 374 ServiceWorkerDispatcherHost* dispatcher_host); | 389 ServiceWorkerDispatcherHost* dispatcher_host); |
| 375 | 390 |
| 376 // Clears the information of the ServiceWorkerWorkerClient of dedicated (or | 391 // Clears the information of the ServiceWorkerWorkerClient of dedicated (or |
| 377 // shared) worker, when the connection to the worker is disconnected. | 392 // shared) worker, when the connection to the worker is disconnected. |
| 378 void UnregisterWorkerFetchContext(mojom::ServiceWorkerWorkerClient*); | 393 void UnregisterWorkerFetchContext(mojom::ServiceWorkerWorkerClient*); |
| 379 | 394 |
| 380 std::string client_uuid_; | 395 std::string client_uuid_; |
| 381 int render_process_id_; | 396 int render_process_id_; |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 430 std::unordered_map<mojom::ServiceWorkerWorkerClient*, | 445 std::unordered_map<mojom::ServiceWorkerWorkerClient*, |
| 431 mojom::ServiceWorkerWorkerClientAssociatedPtr> | 446 mojom::ServiceWorkerWorkerClientAssociatedPtr> |
| 432 worker_clients_; | 447 worker_clients_; |
| 433 | 448 |
| 434 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerProviderHost); | 449 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerProviderHost); |
| 435 }; | 450 }; |
| 436 | 451 |
| 437 } // namespace content | 452 } // namespace content |
| 438 | 453 |
| 439 #endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_PROVIDER_HOST_H_ | 454 #endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_PROVIDER_HOST_H_ |
| OLD | NEW |