Bug 1101304 - Handle CORS in EME - r=cpearce
This commit is contained in:
@@ -3303,6 +3303,15 @@ bool HTMLMediaElement::ShouldCheckAllowOrigin()
|
||||
return mCORSMode != CORS_NONE;
|
||||
}
|
||||
|
||||
bool HTMLMediaElement::IsCORSSameOrigin()
|
||||
{
|
||||
bool subsumes;
|
||||
nsRefPtr<nsIPrincipal> principal = GetCurrentPrincipal();
|
||||
return
|
||||
(NS_SUCCEEDED(NodePrincipal()->Subsumes(principal, &subsumes)) && subsumes) ||
|
||||
ShouldCheckAllowOrigin();
|
||||
}
|
||||
|
||||
void HTMLMediaElement::UpdateReadyStateForData(MediaDecoderOwner::NextFrameStatus aNextFrame)
|
||||
{
|
||||
mLastNextFrameStatus = aNextFrame;
|
||||
@@ -3648,22 +3657,13 @@ void HTMLMediaElement::NotifyDecoderPrincipalChanged()
|
||||
{
|
||||
nsRefPtr<nsIPrincipal> principal = GetCurrentPrincipal();
|
||||
|
||||
bool subsumes;
|
||||
mDecoder->UpdateSameOriginStatus(
|
||||
!principal ||
|
||||
(NS_SUCCEEDED(NodePrincipal()->Subsumes(principal, &subsumes)) && subsumes) ||
|
||||
mCORSMode != CORS_NONE);
|
||||
mDecoder->UpdateSameOriginStatus(!principal || IsCORSSameOrigin());
|
||||
|
||||
for (uint32_t i = 0; i < mOutputStreams.Length(); ++i) {
|
||||
OutputMediaStream* ms = &mOutputStreams[i];
|
||||
ms->mStream->SetCORSMode(mCORSMode);
|
||||
ms->mStream->CombineWithPrincipal(principal);
|
||||
}
|
||||
#ifdef MOZ_EME
|
||||
if (mMediaKeys && NS_FAILED(mMediaKeys->CheckPrincipals())) {
|
||||
mMediaKeys->Shutdown();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void HTMLMediaElement::UpdateMediaSize(nsIntSize size)
|
||||
@@ -4307,8 +4307,6 @@ HTMLMediaElement::SetMediaKeys(mozilla::dom::MediaKeys* aMediaKeys,
|
||||
if (mDecoder) {
|
||||
mDecoder->SetCDMProxy(mMediaKeys->GetCDMProxy());
|
||||
}
|
||||
// Update the same-origin status.
|
||||
NotifyDecoderPrincipalChanged();
|
||||
}
|
||||
promise->MaybeResolve(JS::UndefinedHandleValue);
|
||||
return promise.forget();
|
||||
@@ -4341,8 +4339,13 @@ void
|
||||
HTMLMediaElement::DispatchEncrypted(const nsTArray<uint8_t>& aInitData,
|
||||
const nsAString& aInitDataType)
|
||||
{
|
||||
nsRefPtr<MediaEncryptedEvent> event(
|
||||
MediaEncryptedEvent::Constructor(this, aInitDataType, aInitData));
|
||||
nsRefPtr<MediaEncryptedEvent> event;
|
||||
if (IsCORSSameOrigin()) {
|
||||
event = MediaEncryptedEvent::Constructor(this, aInitDataType, aInitData);
|
||||
} else {
|
||||
event = MediaEncryptedEvent::Constructor(this);
|
||||
}
|
||||
|
||||
nsRefPtr<AsyncEventDispatcher> asyncDispatcher =
|
||||
new AsyncEventDispatcher(this, event);
|
||||
asyncDispatcher->PostDOMEvent();
|
||||
|
||||
Reference in New Issue
Block a user