Bug 1550633 - part6 : clear track's cues list whenever track element's src attribute set, changed or removed. r=jya,baku
According to the spec [1], we should empty track's cue list whenever a track element has its src attribute set, changed, or removed. [1] https://html.spec.whatwg.org/multipage/media.html#sourcing-out-of-band-text-tracks:attr-track-src Differential Revision: https://phabricator.services.mozilla.com/D31552
This commit is contained in:
@@ -214,17 +214,11 @@ bool HTMLTrackElement::ParseAttribute(int32_t aNamespaceID, nsAtom* aAttribute,
|
||||
|
||||
void HTMLTrackElement::SetSrc(const nsAString& aSrc, ErrorResult& aError) {
|
||||
SetHTMLAttr(nsGkAtoms::src, aSrc, aError);
|
||||
uint16_t oldReadyState = ReadyState();
|
||||
SetReadyState(TextTrackReadyState::NotLoaded);
|
||||
if (!mMediaParent) {
|
||||
return;
|
||||
}
|
||||
if (mTrack && (oldReadyState != TextTrackReadyState::NotLoaded)) {
|
||||
// Remove all the cues in MediaElement.
|
||||
mMediaParent->RemoveTextTrack(mTrack);
|
||||
// Recreate mTrack.
|
||||
CreateTextTrack();
|
||||
}
|
||||
|
||||
// Stop WebVTTListener.
|
||||
mListener = nullptr;
|
||||
if (mChannel) {
|
||||
@@ -235,6 +229,16 @@ void HTMLTrackElement::SetSrc(const nsAString& aSrc, ErrorResult& aError) {
|
||||
MaybeDispatchLoadResource();
|
||||
}
|
||||
|
||||
void HTMLTrackElement::MaybeClearAllCues() {
|
||||
// Empty track's cue list whenever the track element's `src` attribute set,
|
||||
// changed, or removed,
|
||||
// https://html.spec.whatwg.org/multipage/media.html#sourcing-out-of-band-text-tracks:attr-track-src
|
||||
if (!mTrack) {
|
||||
return;
|
||||
}
|
||||
mTrack->ClearAllCues();
|
||||
}
|
||||
|
||||
// This function will run partial steps from `start-the-track-processing-model`
|
||||
// and finish the rest of steps in `LoadResource()` during the stable state.
|
||||
// https://html.spec.whatwg.org/multipage/media.html#start-the-track-processing-model
|
||||
@@ -463,5 +467,17 @@ void HTMLTrackElement::NotifyShutdown() {
|
||||
mListener = nullptr;
|
||||
}
|
||||
|
||||
nsresult HTMLTrackElement::AfterSetAttr(int32_t aNameSpaceID, nsAtom* aName,
|
||||
const nsAttrValue* aValue,
|
||||
const nsAttrValue* aOldValue,
|
||||
nsIPrincipal* aMaybeScriptedPrincipal,
|
||||
bool aNotify) {
|
||||
if (aNameSpaceID == kNameSpaceID_None && aName == nsGkAtoms::src) {
|
||||
MaybeClearAllCues();
|
||||
}
|
||||
return nsGenericHTMLElement::AfterSetAttr(
|
||||
aNameSpaceID, aName, aValue, aOldValue, aMaybeScriptedPrincipal, aNotify);
|
||||
}
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
|
||||
Reference in New Issue
Block a user