mirror of
https://github.com/servo/servo.git
synced 2025-07-23 15:23:42 +01:00
Clean up HTMLMediaElement::change_ready_state
This commit is contained in:
parent
23701f8659
commit
e4cd6be831
1 changed files with 58 additions and 80 deletions
|
@ -199,23 +199,19 @@ impl HTMLMediaElement {
|
|||
let window = window_from_node(self);
|
||||
let task_source = window.dom_manipulation_task_source();
|
||||
|
||||
// Step 1
|
||||
// Step 1.
|
||||
match (old_ready_state, ready_state) {
|
||||
// Previous ready state was ReadyState::HaveNothing,
|
||||
// and the new ready state is ReadyState::HaveMetadata.
|
||||
(ReadyState::HaveNothing, ReadyState::HaveMetadata) => {
|
||||
task_source.queue_simple_event(
|
||||
self.upcast(),
|
||||
atom!("loadedmetadata"),
|
||||
&window,
|
||||
);
|
||||
}
|
||||
|
||||
// Previous ready state was ReadyState::HaveMetadata, and the new
|
||||
// ready state is ReadyState::HaveCurrentData or greater.
|
||||
(ReadyState::HaveMetadata, ReadyState::HaveCurrentData) |
|
||||
(ReadyState::HaveMetadata, ReadyState::HaveFutureData) |
|
||||
(ReadyState::HaveMetadata, ReadyState::HaveEnoughData) => {
|
||||
// No other steps are applicable in this case.
|
||||
return;
|
||||
},
|
||||
(ReadyState::HaveMetadata, new) if new >= ReadyState::HaveCurrentData => {
|
||||
if !self.fired_loadeddata_event.get() {
|
||||
self.fired_loadeddata_event.set(true);
|
||||
task_source.queue_simple_event(
|
||||
|
@ -224,31 +220,23 @@ impl HTMLMediaElement {
|
|||
&window,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// previous ready state was ReadyState::HaveFutureData or more,
|
||||
// and the new ready state is ReadyState::HaveCurrentData or less.
|
||||
(ReadyState::HaveFutureData, ReadyState::HaveCurrentData) |
|
||||
(ReadyState::HaveEnoughData, ReadyState::HaveCurrentData) |
|
||||
(ReadyState::HaveFutureData, ReadyState::HaveMetadata) |
|
||||
(ReadyState::HaveEnoughData, ReadyState::HaveMetadata) |
|
||||
(ReadyState::HaveFutureData, ReadyState::HaveNothing) |
|
||||
(ReadyState::HaveEnoughData, ReadyState::HaveNothing) => {
|
||||
// TODO: timeupdate event logic + waiting
|
||||
}
|
||||
// Steps for the transition from HaveMetadata to HaveCurrentData
|
||||
// or HaveFutureData also apply here, as per the next match
|
||||
// expression.
|
||||
},
|
||||
(ReadyState::HaveFutureData, new) if new <= ReadyState::HaveCurrentData => {
|
||||
// FIXME(nox): Queue a task to fire timeupdate and waiting
|
||||
// events if the conditions call from the spec are met.
|
||||
|
||||
// No other steps are applicable in this case.
|
||||
return;
|
||||
},
|
||||
|
||||
_ => (),
|
||||
}
|
||||
|
||||
// Step 1.
|
||||
// If the new ready state is ReadyState::HaveFutureData or ReadyState::HaveEnoughData,
|
||||
// then the relevant steps below must then be run also.
|
||||
match (old_ready_state, ready_state) {
|
||||
// Previous ready state was ReadyState::HaveCurrentData or less,
|
||||
// and the new ready state is ReadyState::HaveFutureData.
|
||||
(ReadyState::HaveCurrentData, ReadyState::HaveFutureData) |
|
||||
(ReadyState::HaveMetadata, ReadyState::HaveFutureData) |
|
||||
(ReadyState::HaveNothing, ReadyState::HaveFutureData) => {
|
||||
if old_ready_state <= ReadyState::HaveCurrentData && ready_state >= ReadyState::HaveFutureData {
|
||||
task_source.queue_simple_event(
|
||||
self.upcast(),
|
||||
atom!("canplay"),
|
||||
|
@ -260,21 +248,11 @@ impl HTMLMediaElement {
|
|||
}
|
||||
}
|
||||
|
||||
// New ready state is ReadyState::HaveEnoughData.
|
||||
(_, ReadyState::HaveEnoughData) => {
|
||||
if old_ready_state <= ReadyState::HaveCurrentData {
|
||||
task_source.queue_simple_event(
|
||||
self.upcast(),
|
||||
atom!("canplay"),
|
||||
&window,
|
||||
);
|
||||
if ready_state == ReadyState::HaveEnoughData {
|
||||
// TODO: Check sandboxed automatic features browsing context flag.
|
||||
// FIXME(nox): I have no idea what this TODO is about.
|
||||
|
||||
if !self.Paused() {
|
||||
self.notify_about_playing();
|
||||
}
|
||||
}
|
||||
|
||||
//TODO: check sandboxed automatic features browsing context flag
|
||||
// FIXME(nox): Review this block.
|
||||
if self.autoplaying.get() &&
|
||||
self.Paused() &&
|
||||
self.Autoplay() {
|
||||
|
@ -293,6 +271,8 @@ impl HTMLMediaElement {
|
|||
self.autoplaying.set(false);
|
||||
}
|
||||
|
||||
// FIXME(nox): According to the spec, this should come *before* the
|
||||
// "play" event.
|
||||
task_source.queue_simple_event(
|
||||
self.upcast(),
|
||||
atom!("canplaythrough"),
|
||||
|
@ -300,10 +280,8 @@ impl HTMLMediaElement {
|
|||
);
|
||||
}
|
||||
|
||||
_ => (),
|
||||
}
|
||||
|
||||
// TODO Step 2: media controller
|
||||
// TODO Step 2: Media controller.
|
||||
// FIXME(nox): There is no step 2 in the spec.
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/#concept-media-load-algorithm
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue