From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- dom/media/eme/mediafoundation/WMFCDMImpl.h | 100 +++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 dom/media/eme/mediafoundation/WMFCDMImpl.h (limited to 'dom/media/eme/mediafoundation/WMFCDMImpl.h') diff --git a/dom/media/eme/mediafoundation/WMFCDMImpl.h b/dom/media/eme/mediafoundation/WMFCDMImpl.h new file mode 100644 index 0000000000..fc4ef840d6 --- /dev/null +++ b/dom/media/eme/mediafoundation/WMFCDMImpl.h @@ -0,0 +1,100 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim:set ts=2 sw=2 sts=2 et cindent: */ +/* 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 DOM_MEDIA_EME_MEDIAFOUNDATION_WMFCDMIMPL_H_ +#define DOM_MEDIA_EME_MEDIAFOUNDATION_WMFCDMIMPL_H_ + +#include "MediaData.h" +#include "mozilla/Assertions.h" +#include "mozilla/EMEUtils.h" +#include "mozilla/KeySystemConfig.h" +#include "mozilla/media/MediaUtils.h" +#include "mozilla/MFCDMChild.h" +#include "nsString.h" +#include "nsThreadUtils.h" + +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, + * and performs conversion between EME and MFCDM types and constants. + */ +class WMFCDMImpl final { + public: + NS_INLINE_DECL_THREADSAFE_REFCOUNTING(WMFCDMImpl); + + explicit WMFCDMImpl(const nsAString& aKeySystem) + : mCDM(MakeRefPtr(aKeySystem)) {} + + static bool Supports(const nsAString& aKeySystem); + // TODO: make this async? + bool GetCapabilities(KeySystemConfig& aConfig); + + using InitPromise = GenericPromise; + struct InitParams { + nsString mOrigin; + CopyableTArray mInitDataTypes; + bool mPersistentStateRequired; + bool mDistinctiveIdentifierRequired; + bool mHWSecure; + WMFCDMProxyCallback* mProxyCallback; + }; + + RefPtr Init(const InitParams& aParams); + + RefPtr CreateSession( + uint32_t aPromiseId, const KeySystemConfig::SessionType aSessionType, + const nsAString& aInitDataType, const nsTArray& aInitData) { + return mCDM->CreateSessionAndGenerateRequest(aPromiseId, aSessionType, + aInitDataType, aInitData); + } + + RefPtr LoadSession( + uint32_t aPromiseId, const KeySystemConfig::SessionType aSessionType, + const nsAString& aSessionId) { + return mCDM->LoadSession(aPromiseId, aSessionType, aSessionId); + } + + RefPtr UpdateSession(uint32_t aPromiseId, + const nsAString& aSessionId, + nsTArray& aResponse) { + return mCDM->UpdateSession(aPromiseId, aSessionId, aResponse); + } + + RefPtr CloseSession(uint32_t aPromiseId, + const nsAString& aSessionId) { + return mCDM->CloseSession(aPromiseId, aSessionId); + } + + RefPtr RemoveSession(uint32_t aPromiseId, + const nsAString& aSessionId) { + return mCDM->RemoveSession(aPromiseId, aSessionId); + } + + uint64_t Id() { + MOZ_ASSERT(mCDM->Id() != 0, + "Should be called only after Init() is resolved"); + return mCDM->Id(); + } + + private: + ~WMFCDMImpl() { + if (mCDM) { + mCDM->Shutdown(); + } + }; + + const RefPtr mCDM; + + MozPromiseHolder mInitPromiseHolder; +}; + +} // namespace mozilla + +#endif // DOM_MEDIA_EME_MEDIAFOUNDATION_WMFCDMIMPL_H_ -- cgit v1.2.3