forked from mirrors/gecko-dev
Bug 1827142. r=media-playback-reviewers,alwu a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D175017
This commit is contained in:
parent
27abdb2cd7
commit
2befada946
3 changed files with 16 additions and 9 deletions
|
|
@ -20,6 +20,7 @@ RefPtr<WMFCDMImpl::InitPromise> WMFCDMImpl::Init(
|
|||
const WMFCDMImpl::InitParams& aParams) {
|
||||
if (!mCDM) {
|
||||
mCDM = MakeRefPtr<MFCDMChild>(mKeySystem);
|
||||
mCDM->EnsureRemote();
|
||||
}
|
||||
RefPtr<WMFCDMImpl> self = this;
|
||||
mCDM->Init(aParams.mOrigin, aParams.mInitDataTypes,
|
||||
|
|
@ -58,6 +59,7 @@ WMFCDMCapabilites::GetCapabilities(
|
|||
nsTArray<RefPtr<CapabilitiesPromise>> promises;
|
||||
for (const auto& request : aRequests) {
|
||||
RefPtr<MFCDMChild> cdm = new MFCDMChild(request.mKeySystem);
|
||||
cdm->EnsureRemote();
|
||||
promises.AppendElement(cdm->GetCapabilities(MFCDMCapabilitiesRequest{
|
||||
nsString{request.mKeySystem},
|
||||
request.mDecryption == KeySystemConfig::DecryptionInfo::Hardware,
|
||||
|
|
|
|||
|
|
@ -73,19 +73,25 @@ MFCDMChild::MFCDMChild(const nsAString& aKeySystem)
|
|||
: mKeySystem(aKeySystem),
|
||||
mManagerThread(RemoteDecoderManagerChild::GetManagerThread()),
|
||||
mState(NS_ERROR_NOT_INITIALIZED),
|
||||
mShutdown(false) {
|
||||
mRemotePromise = EnsureRemote();
|
||||
}
|
||||
mShutdown(false) {}
|
||||
|
||||
MFCDMChild::~MFCDMChild() {}
|
||||
|
||||
RefPtr<MFCDMChild::RemotePromise> MFCDMChild::EnsureRemote() {
|
||||
void MFCDMChild::EnsureRemote() {
|
||||
if (mRemotePromise) {
|
||||
LOG("already created remote promise");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mManagerThread) {
|
||||
LOG("no manager thread");
|
||||
mState = NS_ERROR_NOT_AVAILABLE;
|
||||
return RemotePromise::CreateAndReject(mState, __func__);
|
||||
mRemotePromise = RemotePromise::CreateAndReject(mState, __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
mRemotePromise = mRemotePromiseHolder.Ensure(__func__);
|
||||
|
||||
RefPtr<MFCDMChild> self = this;
|
||||
RemoteDecoderManagerChild::LaunchUtilityProcessIfNeeded(
|
||||
RemoteDecodeIn::UtilityProcess_MFMediaEngineCDM)
|
||||
|
|
@ -115,7 +121,6 @@ RefPtr<MFCDMChild::RemotePromise> MFCDMChild::EnsureRemote() {
|
|||
mRemotePromiseHolder.RejectIfExists(rv, __func__);
|
||||
})
|
||||
->Track(mRemoteRequest);
|
||||
return mRemotePromiseHolder.Ensure(__func__);
|
||||
}
|
||||
|
||||
void MFCDMChild::Shutdown() {
|
||||
|
|
|
|||
|
|
@ -85,6 +85,8 @@ class MFCDMChild final : public PMFCDMChild {
|
|||
mState = NS_ERROR_NOT_AVAILABLE;
|
||||
}
|
||||
}
|
||||
|
||||
void EnsureRemote();
|
||||
void Shutdown();
|
||||
|
||||
nsISerialEventTarget* ManagerThread() { return mManagerThread; }
|
||||
|
|
@ -95,9 +97,6 @@ class MFCDMChild final : public PMFCDMChild {
|
|||
private:
|
||||
~MFCDMChild();
|
||||
|
||||
using RemotePromise = GenericNonExclusivePromise;
|
||||
RefPtr<RemotePromise> EnsureRemote();
|
||||
|
||||
void AssertSendable();
|
||||
|
||||
const nsString mKeySystem;
|
||||
|
|
@ -105,6 +104,7 @@ class MFCDMChild final : public PMFCDMChild {
|
|||
const RefPtr<nsISerialEventTarget> mManagerThread;
|
||||
RefPtr<MFCDMChild> mIPDLSelfRef;
|
||||
|
||||
using RemotePromise = GenericNonExclusivePromise;
|
||||
RefPtr<RemotePromise> mRemotePromise;
|
||||
MozPromiseHolder<RemotePromise> mRemotePromiseHolder;
|
||||
MozPromiseRequestHolder<RemotePromise> mRemoteRequest;
|
||||
|
|
|
|||
Loading…
Reference in a new issue