mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-25 09:57:32 +09:00
Don't build EME-specific subroutines without EME.
- Checks for restricted or encrypted content - Dispatching 'encrypted' events - Dispatching 'key needed' events - HTML Media Element media keys system - EME telemetry - HTML Media Element EME API This is the main bulk for #26, isolating EME-specific code.
This commit is contained in:
parent
90fc779437
commit
c9f70f4de1
9 changed files with 90 additions and 2 deletions
|
|
@ -143,11 +143,13 @@ public:
|
|||
// reference to the decoder to prevent further calls into the decoder.
|
||||
virtual void NotifyXPCOMShutdown() = 0;
|
||||
|
||||
#ifdef MOZ_EME
|
||||
// Dispatches a "encrypted" event to the HTMLMediaElement, with the
|
||||
// provided init data. Actual dispatch may be delayed until HAVE_METADATA.
|
||||
// Main thread only.
|
||||
virtual void DispatchEncrypted(const nsTArray<uint8_t>& aInitData,
|
||||
const nsAString& aInitDataType) = 0;
|
||||
#endif
|
||||
};
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
|||
|
|
@ -346,8 +346,12 @@ MediaFormatReader::DecoderFactory::DoCreateDecoder(TrackType aTrack)
|
|||
if (!mOwner->mPlatform) {
|
||||
mOwner->mPlatform = new PDMFactory();
|
||||
if (mOwner->IsEncrypted()) {
|
||||
#ifdef MOZ_EME
|
||||
MOZ_ASSERT(mOwner->mCDMProxy);
|
||||
mOwner->mPlatform->SetCDMProxy(mOwner->mCDMProxy);
|
||||
#else
|
||||
return MediaResult(NS_ERROR_DOM_MEDIA_FATAL_ERR, "EME not supported");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -577,6 +581,7 @@ MediaFormatReader::InitInternal()
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
#ifdef MOZ_EME
|
||||
class DispatchKeyNeededEvent : public Runnable {
|
||||
public:
|
||||
DispatchKeyNeededEvent(AbstractMediaDecoder* aDecoder,
|
||||
|
|
@ -602,6 +607,7 @@ private:
|
|||
nsTArray<uint8_t> mInitData;
|
||||
nsString mInitDataType;
|
||||
};
|
||||
#endif
|
||||
|
||||
void
|
||||
MediaFormatReader::SetCDMProxy(CDMProxy* aProxy)
|
||||
|
|
@ -618,7 +624,11 @@ MediaFormatReader::SetCDMProxy(CDMProxy* aProxy)
|
|||
bool
|
||||
MediaFormatReader::IsWaitingOnCDMResource() {
|
||||
MOZ_ASSERT(OnTaskQueue());
|
||||
#ifdef MOZ_EME
|
||||
return IsEncrypted() && !mCDMProxy;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
RefPtr<MediaDecoderReader::MetadataPromise>
|
||||
|
|
@ -725,11 +735,13 @@ MediaFormatReader::OnDemuxerInitDone(nsresult)
|
|||
|
||||
UniquePtr<EncryptionInfo> crypto = mDemuxer->GetCrypto();
|
||||
if (mDecoder && crypto && crypto->IsEncrypted()) {
|
||||
#ifdef MOZ_EME
|
||||
// Try and dispatch 'encrypted'. Won't go if ready state still HAVE_NOTHING.
|
||||
for (uint32_t i = 0; i < crypto->mInitDatas.Length(); i++) {
|
||||
NS_DispatchToMainThread(
|
||||
new DispatchKeyNeededEvent(mDecoder, crypto->mInitDatas[i].mInitData, crypto->mInitDatas[i].mType));
|
||||
}
|
||||
#endif
|
||||
mInfo.mCrypto = *crypto;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@ AppendStateToStr(SourceBufferAttributes::AppendState aState)
|
|||
|
||||
static Atomic<uint32_t> sStreamSourceID(0u);
|
||||
|
||||
#ifdef MOZ_EME
|
||||
class DispatchKeyNeededEvent : public Runnable {
|
||||
public:
|
||||
DispatchKeyNeededEvent(AbstractMediaDecoder* aDecoder,
|
||||
|
|
@ -83,6 +84,7 @@ private:
|
|||
nsTArray<uint8_t> mInitData;
|
||||
nsString mInitDataType;
|
||||
};
|
||||
#endif
|
||||
|
||||
TrackBuffersManager::TrackBuffersManager(MediaSourceDecoder* aParentDecoder,
|
||||
const nsACString& aType)
|
||||
|
|
@ -1097,12 +1099,14 @@ TrackBuffersManager::OnDemuxerInitDone(nsresult)
|
|||
|
||||
UniquePtr<EncryptionInfo> crypto = mInputDemuxer->GetCrypto();
|
||||
if (crypto && crypto->IsEncrypted()) {
|
||||
#ifdef MOZ_EME
|
||||
// Try and dispatch 'encrypted'. Won't go if ready state still HAVE_NOTHING.
|
||||
for (uint32_t i = 0; i < crypto->mInitDatas.Length(); i++) {
|
||||
NS_DispatchToMainThread(
|
||||
new DispatchKeyNeededEvent(mParentDecoder, crypto->mInitDatas[i].mInitData,
|
||||
crypto->mInitDatas[i].mType));
|
||||
}
|
||||
#endif
|
||||
info.mCrypto = *crypto;
|
||||
// We clear our crypto init data array, so the MediaFormatReader will
|
||||
// not emit an encrypted event for the same init data again.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue