Bug 1280829 - Only block non-MSE content which is encrypted once it reaches load metadata. r=jya
Previously, we'd block loading of non-MSE content when there was a MediaKeys attached, that is, we'd assume that all content was EME content if a MediaKeys was attached. But some sites attach a MediaKeys and then load non-MSE non-EME content, and that (despite being a bit silly) shouldn't fail. MozReview-Commit-ID: 9LupWaehXim
This commit is contained in:
@@ -1637,20 +1637,6 @@ nsresult HTMLMediaElement::LoadResource()
|
||||
// Set the media element's CORS mode only when loading a resource
|
||||
mCORSMode = AttrValueToCORSMode(GetParsedAttr(nsGkAtoms::crossorigin));
|
||||
|
||||
#ifdef MOZ_EME
|
||||
bool isBlob = false;
|
||||
if (mMediaKeys &&
|
||||
Preferences::GetBool("media.eme.mse-only", true) &&
|
||||
// We only want mediaSource URLs, but they are BlobURL, so we have to
|
||||
// check the schema and if they are not MediaStream or real Blob.
|
||||
(NS_FAILED(mLoadingSrc->SchemeIs(BLOBURI_SCHEME, &isBlob)) ||
|
||||
!isBlob ||
|
||||
IsMediaStreamURI(mLoadingSrc) ||
|
||||
IsBlobURI(mLoadingSrc))) {
|
||||
return NS_ERROR_DOM_NOT_SUPPORTED_ERR;
|
||||
}
|
||||
#endif
|
||||
|
||||
HTMLMediaElement* other = LookupMediaElementURITable(mLoadingSrc);
|
||||
if (other && other->mDecoder) {
|
||||
// Clone it.
|
||||
@@ -4340,8 +4326,10 @@ void HTMLMediaElement::MetadataLoaded(const MediaInfo* aInfo,
|
||||
mDecoder->SetFragmentEndTime(mFragmentEnd);
|
||||
}
|
||||
if (mIsEncrypted) {
|
||||
// We only support playback of encrypted content via MSE by default.
|
||||
if (!mMediaSource && Preferences::GetBool("media.eme.mse-only", true)) {
|
||||
DecodeError(NS_ERROR_DOM_MEDIA_FATAL_ERR);
|
||||
DecodeError(MediaResult(NS_ERROR_DOM_MEDIA_FATAL_ERR,
|
||||
"Encrypted content not supported outside of MSE"));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -6110,16 +6098,6 @@ HTMLMediaElement::SetMediaKeys(mozilla::dom::MediaKeys* aMediaKeys,
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// We only support EME for MSE content by default.
|
||||
if (mDecoder &&
|
||||
!mMediaSource &&
|
||||
Preferences::GetBool("media.eme.mse-only", true)) {
|
||||
ShutdownDecoder();
|
||||
promise->MaybeReject(NS_ERROR_DOM_NOT_SUPPORTED_ERR,
|
||||
NS_LITERAL_CSTRING("EME not supported on non-MSE streams"));
|
||||
return promise.forget();
|
||||
}
|
||||
|
||||
// 1. If mediaKeys and the mediaKeys attribute are the same object,
|
||||
// return a resolved promise.
|
||||
if (mMediaKeys == aMediaKeys) {
|
||||
|
||||
Reference in New Issue
Block a user