mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-23 12:51:06 +00:00
d6e6375a87
This is a fairly significant patch, however it would be difficult to break it down into smaller patches: 1) The various mechanisms used to manage ContentParent lifecycles have been merged together into a common "KeepAlive" system. A process will begin shutdown when its keepalive count reaches 0. (though it will still wait for all BrowserParents to also be dead before sending the actual shutdown message as before). This replaces a number of bespoke systems for tracking BrowserParent instances in different lifecycle states, remote workers, ongoing process switches, and preallocated processes. 2) KeepAlives are now managed automatically by a UniquePtr variant (Unique[Threadsafe]ContentParentKeepAlive). This makes the hand-off over KeepAlive lifecycles explicit, even for workers. 3) All KeepAlives are now keyed by a BrowserId, which will be 0 for keepalives not associated with a specific tab. This allows the new process selection logic to count all tabs other than the one being navigated when deciding which process to use. 4) The process switching logic now tracks it's KeepAlive with a BrowserId, meaning that ongoing process switches are considered when performing process selection, even if the BrowserParent hasn't been created yet. Differential Revision: https://phabricator.services.mozilla.com/D213338
67 lines
2.0 KiB
C++
67 lines
2.0 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef mozilla_dom_RemoteWorkerParent_h
|
|
#define mozilla_dom_RemoteWorkerParent_h
|
|
|
|
#include "mozilla/dom/PRemoteWorkerParent.h"
|
|
#include "mozilla/dom/UniqueContentParentKeepAlive.h"
|
|
|
|
namespace mozilla::dom {
|
|
|
|
class RemoteWorkerController;
|
|
class RemoteWorkerServiceParent;
|
|
|
|
/**
|
|
* PBackground-managed parent actor that is mutually associated with a single
|
|
* RemoteWorkerController. Relays error/close events to the controller and in
|
|
* turns is told life-cycle events.
|
|
*/
|
|
class RemoteWorkerParent final : public PRemoteWorkerParent {
|
|
friend class PRemoteWorkerParent;
|
|
|
|
public:
|
|
NS_INLINE_DECL_REFCOUNTING(RemoteWorkerParent, override);
|
|
|
|
explicit RemoteWorkerParent(
|
|
UniqueThreadsafeContentParentKeepAlive aKeepAlive);
|
|
|
|
void SetController(RemoteWorkerController* aController);
|
|
|
|
void MaybeSendDelete();
|
|
|
|
RemoteWorkerServiceParent* Manager() const;
|
|
|
|
private:
|
|
~RemoteWorkerParent();
|
|
|
|
already_AddRefed<PFetchEventOpProxyParent> AllocPFetchEventOpProxyParent(
|
|
const ParentToChildServiceWorkerFetchEventOpArgs& aArgs);
|
|
|
|
void ActorDestroy(mozilla::ipc::IProtocol::ActorDestroyReason) override;
|
|
|
|
mozilla::ipc::IPCResult RecvError(const ErrorValue& aValue);
|
|
|
|
mozilla::ipc::IPCResult RecvNotifyLock(const bool& aCreated);
|
|
|
|
mozilla::ipc::IPCResult RecvNotifyWebTransport(const bool& aCreated);
|
|
|
|
mozilla::ipc::IPCResult RecvClose();
|
|
|
|
mozilla::ipc::IPCResult RecvCreated(const bool& aStatus);
|
|
|
|
mozilla::ipc::IPCResult RecvSetServiceWorkerSkipWaitingFlag(
|
|
SetServiceWorkerSkipWaitingFlagResolver&& aResolve);
|
|
|
|
bool mDeleteSent = false;
|
|
RefPtr<RemoteWorkerController> mController;
|
|
UniqueThreadsafeContentParentKeepAlive mContentParentKeepAlive;
|
|
};
|
|
|
|
} // namespace mozilla::dom
|
|
|
|
#endif // mozilla_dom_RemoteWorkerParent_h
|