gecko-dev/dom/media/gmp/GMPContentChild.h
Andrew Osmond 25c238ea4e Bug 1845946 - Part 1. Switch GMP process launching IPDL messages from sync to async. r=ipc-reviewers,media-playback-reviewers,alwu,mccr8
When launching the GMP process, or querying its state, via PGMPService,
the design was already asynchronous. As such we can remove the sync
requirement quite easily and allow more flexibility on the parent
process side.

Differential Revision: https://phabricator.services.mozilla.com/D185335
2023-08-15 16:46:12 +00:00

70 lines
2.2 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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 GMPContentChild_h_
#define GMPContentChild_h_
#include "mozilla/gmp/PGMPContentChild.h"
#include "GMPSharedMemManager.h"
#if defined(MOZ_SANDBOX) && defined(MOZ_DEBUG) && defined(ENABLE_TESTS)
# include "mozilla/SandboxTestingChild.h"
#endif
namespace mozilla::gmp {
class GMPChild;
/**
* This class allows the GMP process to receive requests to create GMP
* decoder/encoder objects on behalf of the parent/content processes.
*/
class GMPContentChild : public PGMPContentChild, public GMPSharedMem {
public:
// Mark AddRef and Release as `final`, as they overload pure virtual
// implementations in PGMPContentChild.
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(GMPContentChild, final)
explicit GMPContentChild(GMPChild* aChild) : mGMPChild(aChild) {}
MessageLoop* GMPMessageLoop();
mozilla::ipc::IPCResult RecvPGMPVideoDecoderConstructor(
PGMPVideoDecoderChild* aActor) override;
mozilla::ipc::IPCResult RecvPGMPVideoEncoderConstructor(
PGMPVideoEncoderChild* aActor) override;
mozilla::ipc::IPCResult RecvPChromiumCDMConstructor(
PChromiumCDMChild* aActor, const nsACString& aKeySystem) override;
already_AddRefed<PGMPVideoDecoderChild> AllocPGMPVideoDecoderChild();
already_AddRefed<PGMPVideoEncoderChild> AllocPGMPVideoEncoderChild();
already_AddRefed<PChromiumCDMChild> AllocPChromiumCDMChild(
const nsACString& aKeySystem);
#if defined(MOZ_SANDBOX) && defined(MOZ_DEBUG) && defined(ENABLE_TESTS)
mozilla::ipc::IPCResult RecvInitSandboxTesting(
Endpoint<PSandboxTestingChild>&& aEndpoint);
#endif
void ActorDestroy(ActorDestroyReason aWhy) override;
void ProcessingError(Result aCode, const char* aReason) override;
// GMPSharedMem
void CheckThread() override;
void CloseActive();
bool IsUsed();
GMPChild* mGMPChild;
private:
~GMPContentChild() = default;
};
} // namespace mozilla::gmp
#endif // GMPContentChild_h_