| Index: content/browser/service_worker/service_worker_navigation_handle.h
|
| diff --git a/content/browser/service_worker/service_worker_navigation_handle.h b/content/browser/service_worker/service_worker_navigation_handle.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c5c69388cf7105ec3d4dbd5d33eb4566142ea6eb
|
| --- /dev/null
|
| +++ b/content/browser/service_worker/service_worker_navigation_handle.h
|
| @@ -0,0 +1,78 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_NAVIGATION_HANDLE_H_
|
| +#define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_NAVIGATION_HANDLE_H_
|
| +
|
| +#include "base/macros.h"
|
| +#include "base/memory/weak_ptr.h"
|
| +
|
| +namespace content {
|
| +
|
| +class ServiceWorkerContextWrapper;
|
| +class ServiceWorkerNavigationHandleCore;
|
| +
|
| +// This class is used to manage the lifetime of ServiceWorkerProviderHosts
|
| +// created during navigation. This is a UI thread class, with a pendant class
|
| +// on the IO thread, the ServiceWorkerNavigationHandleCore.
|
| +//
|
| +// The lifetime of the ServiceWorkerNavigationHandle, the
|
| +// ServiceWorkerNavigationHandleCore and the ServiceWorkerProviderHost are the
|
| +// following :
|
| +// 1) We create a ServiceWorkerNavigationHandle on the UI thread with a
|
| +// service worker provider id of -1. This also leads to the creation of a
|
| +// ServiceWorkerNavigationHandleCore with an id of -1.
|
| +//
|
| +// 2) When the navigation request is sent to the IO thread, we include a
|
| +// pointer to the ServiceWorkerNavigationHandleCore.
|
| +//
|
| +// 3) If we pre-create a ServiceWorkerProviderHost for this navigation, its
|
| +// ownershipped is passed to the ServiceWorkerNavigationHandleCore. The
|
| +// ServiceWorkerNavigationHandleCore id is updated.
|
| +//
|
| +// 4) The ServiceWorkerNavigationHandleCore informs the
|
| +// ServiceWorkerNavigationHandle on the UI that the service worker provider
|
| +// id was updated.
|
| +//
|
| +// 5) When the navigation is ready to commit, the NavigationRequest will
|
| +// update the RequestNavigationParams based on the id from the
|
| +// ServiceWorkerNavigationHandle.
|
| +//
|
| +// 6) If the commit leads to the creation of a ServiceWorkerNetworkProvider
|
| +// in the renderer, a ServiceWorkerHostMsg_ProviderCreated will be received
|
| +// in the browser. The ServiceWorkerDispatcherHost will retrieve the
|
| +// ServiceWorkerProviderHost from the ServiceWorkerNavigationHandleCore and
|
| +// put it in the ServiceWorkerContextCore map of ServiceWorkerProviderHosts.
|
| +//
|
| +// 7) When the navigation finishes, the ServiceWorkerNavigationHandle is
|
| +// destroyed. The destructor of the ServiceWorkerNavigationHandle posts a
|
| +// task to destroy the ServiceWorkerNavigationHandleCore on the IO thread.
|
| +// This in turn leads to the destruction of an unclaimed
|
| +// ServiceWorkerProviderHost.
|
| +class ServiceWorkerNavigationHandle {
|
| + public:
|
| + explicit ServiceWorkerNavigationHandle(
|
| + ServiceWorkerContextWrapper* context_wrapper);
|
| + ~ServiceWorkerNavigationHandle();
|
| +
|
| + int service_worker_provider_host_id() const {
|
| + return service_worker_provider_host_id_;
|
| + }
|
| + ServiceWorkerNavigationHandleCore* core() const { return core_; }
|
| +
|
| + // Called after a ServiceWorkerProviderHost with id
|
| + // |service_worker_provider_host_id| was pre-created for the navigation on the
|
| + // IO thread.
|
| + void DidCreateServiceWorkerProviderHost(int service_worker_provider_host_id);
|
| +
|
| + private:
|
| + int service_worker_provider_host_id_;
|
| + ServiceWorkerNavigationHandleCore* core_;
|
| + base::WeakPtrFactory<ServiceWorkerNavigationHandle> weak_factory_;
|
| + DISALLOW_COPY_AND_ASSIGN(ServiceWorkerNavigationHandle);
|
| +};
|
| +
|
| +} // namespace content
|
| +
|
| +#endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_NAVIGATION_HANDLE_H_
|
|
|