Bug 1547784 - Return an error if an EME associated MediaElement becomes inactive as deocder setup finishes. r=alwu
This fixes an edge case where it was possible for an HTMLMediaElement in the middle of setup to have ownership transferred to a inactive document and deref a null pointer. This happened because we have special handling for EME related media where we perform more aggressive shutdown on for media in inactive documents. As far as I can tell, there's nothing specced that forbids performing EME related functionality on elements in inactive documents. However, our code already prevents doing so in other cases. E.g. if you create an inactive document, place an HTMLMediaElement in it and try to setup EME related data on it, then that will fail. So this fix just covers another such case. While it would be nice to support doing these operations on inactive document's media, it seems like very much an edge case, and something that would require a large amount of reworking in how we handle inactive documents. We can cross that bridge later should we ever need do so. Differential Revision: https://phabricator.services.mozilla.com/D40482
This commit is contained in:
@@ -4670,6 +4670,14 @@ nsresult HTMLMediaElement::FinishDecoderSetup(MediaDecoder* aDecoder) {
|
||||
// This will also do an AddRemoveSelfReference.
|
||||
NotifyOwnerDocumentActivityChanged();
|
||||
|
||||
if (!mDecoder) {
|
||||
// NotifyOwnerDocumentActivityChanged may shutdown the decoder if the
|
||||
// owning document is inactive and we're in the EME case. We could try and
|
||||
// handle this, but at the time of writing it's a pretty niche case, so just
|
||||
// bail.
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
if (mPausedForInactiveDocumentOrChannel) {
|
||||
mDecoder->Suspend();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user