diff options
Diffstat (limited to 'dom/media/platforms/wmf/MFContentProtectionManager.h')
-rw-r--r-- | dom/media/platforms/wmf/MFContentProtectionManager.h | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/dom/media/platforms/wmf/MFContentProtectionManager.h b/dom/media/platforms/wmf/MFContentProtectionManager.h new file mode 100644 index 0000000000..964c965c32 --- /dev/null +++ b/dom/media/platforms/wmf/MFContentProtectionManager.h @@ -0,0 +1,79 @@ +/* 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_PLATFORM_WMF_MFCONTENTPROTECTIONMANAGER_H +#define DOM_MEDIA_PLATFORM_WMF_MFCONTENTPROTECTIONMANAGER_H + +#include <mfapi.h> +#include <mfidl.h> +#include <windows.media.protection.h> +#include <wrl.h> + +#include "MFCDMProxy.h" + +namespace mozilla { + +/** + * MFContentProtectionManager is used to enable the encrypted playback for the + * media engine. + * https://docs.microsoft.com/en-us/windows/win32/api/mfidl/nn-mfidl-imfcontentprotectionmanager + * https://docs.microsoft.com/en-us/uwp/api/windows.media.protection.mediaprotectionmanager + */ +class MFContentProtectionManager + : public Microsoft::WRL::RuntimeClass< + Microsoft::WRL::RuntimeClassFlags< + Microsoft::WRL::RuntimeClassType::WinRtClassicComMix | + Microsoft::WRL::RuntimeClassType::InhibitRoOriginateError>, + IMFContentProtectionManager, + ABI::Windows::Media::Protection::IMediaProtectionManager> { + public: + MFContentProtectionManager() = default; + ~MFContentProtectionManager() = default; + + HRESULT RuntimeClassInitialize(); + + // IMFContentProtectionManager. + IFACEMETHODIMP BeginEnableContent(IMFActivate* aEnablerActivate, + IMFTopology* aTopology, + IMFAsyncCallback* aCallback, + IUnknown* aState) override; + IFACEMETHODIMP EndEnableContent(IMFAsyncResult* aAsyncResult) override; + + // IMediaProtectionManager. + // MFMediaEngine can query this interface to invoke get_Properties(). + IFACEMETHODIMP add_ServiceRequested( + ABI::Windows::Media::Protection::IServiceRequestedEventHandler* aHandler, + EventRegistrationToken* aCookie) override; + IFACEMETHODIMP remove_ServiceRequested( + EventRegistrationToken aCookie) override; + IFACEMETHODIMP add_RebootNeeded( + ABI::Windows::Media::Protection::IRebootNeededEventHandler* aHandler, + EventRegistrationToken* aCookie) override; + IFACEMETHODIMP remove_RebootNeeded(EventRegistrationToken aCookie) override; + IFACEMETHODIMP add_ComponentLoadFailed( + ABI::Windows::Media::Protection::IComponentLoadFailedEventHandler* + aHandler, + EventRegistrationToken* aCookie) override; + IFACEMETHODIMP remove_ComponentLoadFailed( + EventRegistrationToken aCookie) override; + IFACEMETHODIMP get_Properties( + ABI::Windows::Foundation::Collections::IPropertySet** aValue) override; + + HRESULT SetCDMProxy(MFCDMProxy* aCDMProxy); + + MFCDMProxy* GetCDMProxy() const { return mCDMProxy; } + + private: + HRESULT SetPMPServer( + ABI::Windows::Media::Protection::IMediaProtectionPMPServer* aPMPServer); + + RefPtr<MFCDMProxy> mCDMProxy; + + Microsoft::WRL::ComPtr<ABI::Windows::Foundation::Collections::IPropertySet> + mPMPServerSet; +}; + +} // namespace mozilla + +#endif // DOM_MEDIA_PLATFORM_WMF_MFCONTENTPROTECTIONMANAGER_H |