Bug 1818790 - part3 : connect WMFCDMProxyCallback to MFCDMChild in order to propagate events. r=jolin

Differential Revision: https://phabricator.services.mozilla.com/D170958
This commit is contained in:
alwu 2023-03-02 21:26:10 +00:00
Родитель 39a1024e0b
Коммит f26b7cb257
5 изменённых файлов: 33 добавлений и 9 удалений

Просмотреть файл

@ -113,7 +113,7 @@ RefPtr<WMFCDMImpl::InitPromise> WMFCDMImpl::Init(
aParams.mDistinctiveIdentifierRequired
? KeySystemConfig::Requirement::Required
: KeySystemConfig::Requirement::Optional,
aParams.mHWSecure)
aParams.mHWSecure, aParams.mProxyCallback)
->Then(
mCDM->ManagerThread(), __func__,
[self, this](const MFCDMInitIPDL& init) {

Просмотреть файл

@ -18,6 +18,8 @@
namespace mozilla {
class WMFCDMProxyCallback;
/**
* WMFCDMImpl is a helper class for MFCDM protocol clients. It creates, manages,
* and calls MFCDMChild object in the content process on behalf of the client,
@ -41,6 +43,7 @@ class WMFCDMImpl final {
bool mPersistentStateRequired;
bool mDistinctiveIdentifierRequired;
bool mHWSecure;
WMFCDMProxyCallback* mProxyCallback;
};
RefPtr<InitPromise> Init(const InitParams& aParams);

Просмотреть файл

@ -46,8 +46,9 @@ void WMFCDMProxy::Init(PromiseId aPromiseId, const nsAString& aOrigin,
mCDM = MakeRefPtr<WMFCDMImpl>(mKeySystem);
mProxyCallback = new WMFCDMProxyCallback(this);
WMFCDMImpl::InitParams params{
nsString(aOrigin), mConfig.mInitDataTypes, mPersistentStateRequired,
mDistinctiveIdentifierRequired, false /* HW secure? */};
nsString(aOrigin), mConfig.mInitDataTypes,
mPersistentStateRequired, mDistinctiveIdentifierRequired,
false /* HW secure? */, mProxyCallback};
mCDM->Init(params)->Then(
mMainThread, __func__,
[self = RefPtr{this}, this, aPromiseId](const bool) {

Просмотреть файл

@ -8,6 +8,7 @@
#include "mozilla/KeySystemConfig.h"
#include "mozilla/RefPtr.h"
#include "mozilla/WindowsVersion.h"
#include "mozilla/WMFCDMProxyCallback.h"
#include "nsString.h"
#include "RemoteDecoderManagerChild.h"
@ -25,6 +26,8 @@ MFCDMChild::MFCDMChild(const nsAString& aKeySystem)
mRemotePromise = EnsureRemote();
}
MFCDMChild::~MFCDMChild() {}
RefPtr<MFCDMChild::RemotePromise> MFCDMChild::EnsureRemote() {
if (!mManagerThread) {
LOG("no manager thread");
@ -74,6 +77,7 @@ void MFCDMChild::Shutdown() {
MOZ_ASSERT(!mShutdown);
mShutdown = true;
mProxyCallback = nullptr;
mRemoteRequest.DisconnectIfExists();
mInitRequest.DisconnectIfExists();
@ -154,7 +158,8 @@ already_AddRefed<PromiseType> MFCDMChild::InvokeAsync(
RefPtr<MFCDMChild::InitPromise> MFCDMChild::Init(
const nsAString& aOrigin, const CopyableTArray<nsString>& aInitDataTypes,
const KeySystemConfig::Requirement aPersistentState,
const KeySystemConfig::Requirement aDistinctiveID, const bool aHWSecure) {
const KeySystemConfig::Requirement aDistinctiveID, const bool aHWSecure,
WMFCDMProxyCallback* aProxyCallback) {
MOZ_ASSERT(mManagerThread);
if (mShutdown) {
@ -166,6 +171,7 @@ RefPtr<MFCDMChild::InitPromise> MFCDMChild::Init(
return InitPromise::CreateAndReject(mState, __func__);
}
mProxyCallback = aProxyCallback;
MFCDMInitParamsIPDL params{nsString(aOrigin), aInitDataTypes, aDistinctiveID,
aPersistentState, aHWSecure};
auto doSend = [self = RefPtr{this}, this, params]() {
@ -231,19 +237,28 @@ RefPtr<MFCDMChild::SessionPromise> MFCDMChild::CreateSessionAndGenerateRequest(
mozilla::ipc::IPCResult MFCDMChild::RecvOnSessionKeyMessage(
const MFCDMKeyMessage& aMessage) {
// TODO : implement this.
LOG("RecvOnSessionKeyMessage, sessionId=%s",
NS_ConvertUTF16toUTF8(aMessage.sessionId()).get());
MOZ_ASSERT(mProxyCallback);
mProxyCallback->OnSessionMessage(aMessage);
return IPC_OK();
}
mozilla::ipc::IPCResult MFCDMChild::RecvOnSessionKeyStatusesChanged(
const MFCDMKeyStatusChange& aKeyStatuses) {
// TODO : implement this.
LOG("RecvOnSessionKeyStatusesChanged, sessionId=%s",
NS_ConvertUTF16toUTF8(aKeyStatuses.sessionId()).get());
MOZ_ASSERT(mProxyCallback);
mProxyCallback->OnSessionKeyStatusesChange(aKeyStatuses);
return IPC_OK();
}
mozilla::ipc::IPCResult MFCDMChild::RecvOnSessionKeyExpiration(
const MFCDMKeyExpiration& aExpiration) {
// TODO : implement this.
LOG("RecvOnSessionKeyExpiration, sessionId=%s",
NS_ConvertUTF16toUTF8(aExpiration.sessionId()).get());
MOZ_ASSERT(mProxyCallback);
mProxyCallback->OnSessionKeyExpiration(aExpiration);
return IPC_OK();
}

Просмотреть файл

@ -11,6 +11,8 @@
namespace mozilla {
class WMFCDMProxyCallback;
/**
* MFCDMChild is a content process proxy to MFCDMParent and the actual CDM
* running in utility process.
@ -34,7 +36,8 @@ class MFCDMChild final : public PMFCDMChild {
const CopyableTArray<nsString>& aInitDataTypes,
const KeySystemConfig::Requirement aPersistentState,
const KeySystemConfig::Requirement aDistinctiveID,
const bool aHWSecure);
const bool aHWSecure,
WMFCDMProxyCallback* aProxyCallback);
using SessionPromise = MozPromise<nsString, nsresult, true>;
RefPtr<SessionPromise> CreateSessionAndGenerateRequest(
@ -66,7 +69,7 @@ class MFCDMChild final : public PMFCDMChild {
}
private:
~MFCDMChild() = default;
~MFCDMChild();
using RemotePromise = GenericNonExclusivePromise;
RefPtr<RemotePromise> EnsureRemote();
@ -101,6 +104,8 @@ class MFCDMChild final : public PMFCDMChild {
MozPromiseHolder<SessionPromise> mCreateSessionPromiseHolder;
MozPromiseRequestHolder<CreateSessionAndGenerateRequestPromise>
mCreateSessionRequest;
RefPtr<WMFCDMProxyCallback> mProxyCallback;
};
} // namespace mozilla