Bug 1298027 - Relax decoder shutdown and mediakey removal on MediaElement suspension. r=cpearce
This changeset relaxes the shutting down of decoders and removal of mediakeys when suspending HTMLMediaElements. This should now only happen for adobe primetime. This alleviates, for non-primetime CDMs, the issue of videos breaking when moving an EME protected video from a tab to a new window. These conditions can be relaxed as neither clearkey or widevine support secure stop. This means we don't need to shutdown their decoders and keys to signal a stoppage, as at this stage, doing so doesn't give us secure stop and instead means that playback is busted when we try to resume. MozReview-Commit-ID: 3MGNXGGDVLS
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
#include "mozilla/MathAlgorithms.h"
|
||||
#include "mozilla/AsyncEventDispatcher.h"
|
||||
#include "mozilla/dom/MediaEncryptedEvent.h"
|
||||
#include "mozilla/EMEUtils.h"
|
||||
|
||||
#include "base/basictypes.h"
|
||||
#include "nsIDOMHTMLMediaElement.h"
|
||||
@@ -5249,16 +5250,23 @@ void HTMLMediaElement::SuspendOrResumeElement(bool aPauseElement, bool aSuspendE
|
||||
ReportTelemetry();
|
||||
ReportEMETelemetry();
|
||||
|
||||
// For EME content, force destruction of the CDM client (and CDM
|
||||
// For EME content, we may force destruction of the CDM client (and CDM
|
||||
// instance if this is the last client for that CDM instance) and
|
||||
// the CDM's decoder. This ensures the CDM gets reliable and prompt
|
||||
// shutdown notifications, as it may have book-keeping it needs
|
||||
// to do on shutdown.
|
||||
if (mMediaKeys) {
|
||||
mMediaKeys->Shutdown();
|
||||
mMediaKeys = nullptr;
|
||||
if (mDecoder) {
|
||||
ShutdownDecoder();
|
||||
nsAutoString keySystem;
|
||||
mMediaKeys->GetKeySystem(keySystem);
|
||||
// If we're using Primetime we need to shutdown the key system and
|
||||
// decoder to preserve secure stop like behavior, other CDMs don't
|
||||
// implement this so we don't need to worry with them.
|
||||
if (IsPrimetimeKeySystem(keySystem)) {
|
||||
mMediaKeys->Shutdown();
|
||||
mMediaKeys = nullptr;
|
||||
if (mDecoder) {
|
||||
ShutdownDecoder();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (mDecoder) {
|
||||
@@ -5267,7 +5275,6 @@ void HTMLMediaElement::SuspendOrResumeElement(bool aPauseElement, bool aSuspendE
|
||||
}
|
||||
mEventDeliveryPaused = aSuspendEvents;
|
||||
} else {
|
||||
MOZ_ASSERT(!mMediaKeys);
|
||||
if (mDecoder) {
|
||||
mDecoder->Resume();
|
||||
if (!mPaused && !mDecoder->IsEnded()) {
|
||||
|
||||
Reference in New Issue
Block a user