gecko-dev/ipc/glue/BackgroundChildImpl.h
Jan Varga 03e0a91794 Bug 1669437 - Add necessary infrastructure for independent in-memory only local storage database; r=asuth,dom-workers-and-storage-reviewers
The new infrastructure consists of a separate bridge between the content and the
parent process and a separate local storage database in the parent process.
The new infrastructure can be used for storing and sharing of private browsing
data across content processes.
This patch only creates necessary infrastructure, actual enabling of storing and
sharing of data across content processes will be done in a follow-up patch.

Differential Revision: https://phabricator.services.mozilla.com/D96562
2020-11-11 13:12:57 +00:00

289 lines
10 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_ipc_backgroundchildimpl_h__
#define mozilla_ipc_backgroundchildimpl_h__
#include "mozilla/Attributes.h"
#include "mozilla/ipc/InputStreamUtils.h"
#include "mozilla/ipc/PBackgroundChild.h"
#include "mozilla/UniquePtr.h"
#include "nsRefPtrHashtable.h"
namespace mozilla {
namespace dom {
class IDBFileHandle;
namespace indexedDB {
class ThreadLocal;
} // namespace indexedDB
} // namespace dom
namespace ipc {
// Instances of this class should never be created directly. This class is meant
// to be inherited in BackgroundImpl.
class BackgroundChildImpl : public PBackgroundChild,
public ChildToParentStreamActorManager {
public:
class ThreadLocal;
// Get the ThreadLocal for the current thread if
// BackgroundChild::GetOrCreateForCurrentThread() has been called and true was
// returned (e.g. a valid PBackgroundChild actor has been created or is in the
// process of being created). Otherwise this function returns null.
// This functions is implemented in BackgroundImpl.cpp.
static ThreadLocal* GetThreadLocalForCurrentThread();
PChildToParentStreamChild* SendPChildToParentStreamConstructor(
PChildToParentStreamChild* aActor) override;
PFileDescriptorSetChild* SendPFileDescriptorSetConstructor(
const FileDescriptor& aFD) override;
protected:
BackgroundChildImpl();
virtual ~BackgroundChildImpl();
virtual void ProcessingError(Result aCode, const char* aReason) override;
virtual void ActorDestroy(ActorDestroyReason aWhy) override;
virtual PBackgroundTestChild* AllocPBackgroundTestChild(
const nsCString& aTestArg) override;
virtual bool DeallocPBackgroundTestChild(
PBackgroundTestChild* aActor) override;
virtual PBackgroundIndexedDBUtilsChild* AllocPBackgroundIndexedDBUtilsChild()
override;
virtual bool DeallocPBackgroundIndexedDBUtilsChild(
PBackgroundIndexedDBUtilsChild* aActor) override;
virtual PBackgroundSDBConnectionChild* AllocPBackgroundSDBConnectionChild(
const PersistenceType& aPersistenceType,
const PrincipalInfo& aPrincipalInfo) override;
virtual bool DeallocPBackgroundSDBConnectionChild(
PBackgroundSDBConnectionChild* aActor) override;
virtual PBackgroundLSDatabaseChild* AllocPBackgroundLSDatabaseChild(
const PrincipalInfo& aPrincipalInfo, const uint32_t& aPrivateBrowsingId,
const uint64_t& aDatastoreId) override;
virtual bool DeallocPBackgroundLSDatabaseChild(
PBackgroundLSDatabaseChild* aActor) override;
virtual PBackgroundLSObserverChild* AllocPBackgroundLSObserverChild(
const uint64_t& aObserverId) override;
virtual bool DeallocPBackgroundLSObserverChild(
PBackgroundLSObserverChild* aActor) override;
virtual PBackgroundLSRequestChild* AllocPBackgroundLSRequestChild(
const LSRequestParams& aParams) override;
virtual bool DeallocPBackgroundLSRequestChild(
PBackgroundLSRequestChild* aActor) override;
virtual PBackgroundLSSimpleRequestChild* AllocPBackgroundLSSimpleRequestChild(
const LSSimpleRequestParams& aParams) override;
virtual bool DeallocPBackgroundLSSimpleRequestChild(
PBackgroundLSSimpleRequestChild* aActor) override;
virtual PBackgroundLocalStorageCacheChild*
AllocPBackgroundLocalStorageCacheChild(
const PrincipalInfo& aPrincipalInfo, const nsCString& aOriginKey,
const uint32_t& aPrivateBrowsingId) override;
virtual bool DeallocPBackgroundLocalStorageCacheChild(
PBackgroundLocalStorageCacheChild* aActor) override;
virtual PBackgroundStorageChild* AllocPBackgroundStorageChild(
const nsString& aProfilePath,
const uint32_t& aPrivateBrowsingId) override;
virtual bool DeallocPBackgroundStorageChild(
PBackgroundStorageChild* aActor) override;
virtual already_AddRefed<PRemoteLazyInputStreamChild>
AllocPRemoteLazyInputStreamChild(const nsID& aID,
const uint64_t& aSize) override;
virtual PTemporaryIPCBlobChild* AllocPTemporaryIPCBlobChild() override;
virtual bool DeallocPTemporaryIPCBlobChild(
PTemporaryIPCBlobChild* aActor) override;
virtual PFileCreatorChild* AllocPFileCreatorChild(
const nsString& aFullPath, const nsString& aType, const nsString& aName,
const Maybe<int64_t>& aLastModified, const bool& aExistenceCheck,
const bool& aIsFromNsIFile) override;
virtual bool DeallocPFileCreatorChild(PFileCreatorChild* aActor) override;
virtual mozilla::dom::PRemoteWorkerChild* AllocPRemoteWorkerChild(
const RemoteWorkerData& aData) override;
virtual mozilla::ipc::IPCResult RecvPRemoteWorkerConstructor(
PRemoteWorkerChild* aActor, const RemoteWorkerData& aData) override;
virtual bool DeallocPRemoteWorkerChild(
mozilla::dom::PRemoteWorkerChild* aActor) override;
virtual mozilla::dom::PRemoteWorkerControllerChild*
AllocPRemoteWorkerControllerChild(
const mozilla::dom::RemoteWorkerData& aRemoteWorkerData) override;
virtual bool DeallocPRemoteWorkerControllerChild(
mozilla::dom::PRemoteWorkerControllerChild* aActor) override;
virtual mozilla::dom::PRemoteWorkerServiceChild*
AllocPRemoteWorkerServiceChild() override;
virtual bool DeallocPRemoteWorkerServiceChild(
mozilla::dom::PRemoteWorkerServiceChild* aActor) override;
virtual mozilla::dom::PSharedWorkerChild* AllocPSharedWorkerChild(
const mozilla::dom::RemoteWorkerData& aData, const uint64_t& aWindowID,
const mozilla::dom::MessagePortIdentifier& aPortIdentifier) override;
virtual bool DeallocPSharedWorkerChild(
mozilla::dom::PSharedWorkerChild* aActor) override;
virtual PFileDescriptorSetChild* AllocPFileDescriptorSetChild(
const FileDescriptor& aFileDescriptor) override;
virtual bool DeallocPFileDescriptorSetChild(
PFileDescriptorSetChild* aActor) override;
virtual PCamerasChild* AllocPCamerasChild() override;
virtual bool DeallocPCamerasChild(PCamerasChild* aActor) override;
virtual PVsyncChild* AllocPVsyncChild() override;
virtual bool DeallocPVsyncChild(PVsyncChild* aActor) override;
virtual PUDPSocketChild* AllocPUDPSocketChild(
const Maybe<PrincipalInfo>& aPrincipalInfo,
const nsCString& aFilter) override;
virtual bool DeallocPUDPSocketChild(PUDPSocketChild* aActor) override;
virtual PBroadcastChannelChild* AllocPBroadcastChannelChild(
const PrincipalInfo& aPrincipalInfo, const nsCString& aOrigin,
const nsString& aChannel) override;
virtual bool DeallocPBroadcastChannelChild(
PBroadcastChannelChild* aActor) override;
virtual PServiceWorkerManagerChild* AllocPServiceWorkerManagerChild()
override;
virtual bool DeallocPServiceWorkerManagerChild(
PServiceWorkerManagerChild* aActor) override;
virtual dom::cache::PCacheStorageChild* AllocPCacheStorageChild(
const dom::cache::Namespace& aNamespace,
const PrincipalInfo& aPrincipalInfo) override;
virtual bool DeallocPCacheStorageChild(
dom::cache::PCacheStorageChild* aActor) override;
virtual dom::cache::PCacheChild* AllocPCacheChild() override;
virtual bool DeallocPCacheChild(dom::cache::PCacheChild* aActor) override;
virtual already_AddRefed<dom::cache::PCacheStreamControlChild>
AllocPCacheStreamControlChild() override;
virtual PMessagePortChild* AllocPMessagePortChild(
const nsID& aUUID, const nsID& aDestinationUUID,
const uint32_t& aSequenceID) override;
virtual bool DeallocPMessagePortChild(PMessagePortChild* aActor) override;
virtual PChildToParentStreamChild* AllocPChildToParentStreamChild() override;
virtual bool DeallocPChildToParentStreamChild(
PChildToParentStreamChild* aActor) override;
virtual PParentToChildStreamChild* AllocPParentToChildStreamChild() override;
virtual bool DeallocPParentToChildStreamChild(
PParentToChildStreamChild* aActor) override;
virtual PQuotaChild* AllocPQuotaChild() override;
virtual bool DeallocPQuotaChild(PQuotaChild* aActor) override;
virtual PClientManagerChild* AllocPClientManagerChild() override;
virtual bool DeallocPClientManagerChild(PClientManagerChild* aActor) override;
#ifdef EARLY_BETA_OR_EARLIER
virtual void OnChannelReceivedMessage(const Message& aMsg) override;
#endif
virtual PWebAuthnTransactionChild* AllocPWebAuthnTransactionChild() override;
virtual bool DeallocPWebAuthnTransactionChild(
PWebAuthnTransactionChild* aActor) override;
virtual PMIDIPortChild* AllocPMIDIPortChild(
const MIDIPortInfo& aPortInfo, const bool& aSysexEnabled) override;
virtual bool DeallocPMIDIPortChild(PMIDIPortChild*) override;
virtual PMIDIManagerChild* AllocPMIDIManagerChild() override;
virtual bool DeallocPMIDIManagerChild(PMIDIManagerChild*) override;
already_AddRefed<PServiceWorkerChild> AllocPServiceWorkerChild(
const IPCServiceWorkerDescriptor&);
already_AddRefed<PServiceWorkerContainerChild>
AllocPServiceWorkerContainerChild();
already_AddRefed<PServiceWorkerRegistrationChild>
AllocPServiceWorkerRegistrationChild(
const IPCServiceWorkerRegistrationDescriptor&);
virtual PEndpointForReportChild* AllocPEndpointForReportChild(
const nsString& aGroupName, const PrincipalInfo& aPrincipalInfo) override;
virtual bool DeallocPEndpointForReportChild(
PEndpointForReportChild* aActor) override;
virtual dom::PMediaTransportChild* AllocPMediaTransportChild() override;
virtual bool DeallocPMediaTransportChild(
dom::PMediaTransportChild* aActor) override;
};
class BackgroundChildImpl::ThreadLocal final {
friend class mozilla::DefaultDelete<ThreadLocal>;
public:
mozilla::UniquePtr<mozilla::dom::indexedDB::ThreadLocal>
mIndexedDBThreadLocal;
mozilla::dom::IDBFileHandle* mCurrentFileHandle;
public:
ThreadLocal();
private:
// Only destroyed by UniquePtr<ThreadLocal>.
~ThreadLocal();
};
} // namespace ipc
} // namespace mozilla
#endif // mozilla_ipc_backgroundchildimpl_h__