mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 10:28:10 +00:00
LibWeb: Implement the HTMLMediaElement "potentially playing" concept
This commit is contained in:
parent
9f71799456
commit
12c15641c1
2 changed files with 31 additions and 0 deletions
|
@ -1211,6 +1211,35 @@ void HTMLMediaElement::set_paused(bool paused)
|
||||||
on_paused();
|
on_paused();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://html.spec.whatwg.org/multipage/media.html#blocked-media-element
|
||||||
|
bool HTMLMediaElement::blocked() const
|
||||||
|
{
|
||||||
|
// A media element is a blocked media element if its readyState attribute is in the HAVE_NOTHING state, the HAVE_METADATA
|
||||||
|
// state, or the HAVE_CURRENT_DATA state, or if the element has paused for user interaction or paused for in-band content.
|
||||||
|
switch (m_ready_state) {
|
||||||
|
case ReadyState::HaveNothing:
|
||||||
|
case ReadyState::HaveMetadata:
|
||||||
|
case ReadyState::HaveCurrentData:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// FIXME: Implement "paused for user interaction" (namely "the user agent has reached a point in the media resource
|
||||||
|
// where the user has to make a selection for the resource to continue").
|
||||||
|
// FIXME: Implement "paused for in-band content".
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://html.spec.whatwg.org/multipage/media.html#potentially-playing
|
||||||
|
bool HTMLMediaElement::potentially_playing() const
|
||||||
|
{
|
||||||
|
// A media element is said to be potentially playing when its paused attribute is false, the element has not ended
|
||||||
|
// playback, playback has not stopped due to errors, and the element is not a blocked media element.
|
||||||
|
// FIXME: Implement "stopped due to errors".
|
||||||
|
return !paused() && !ended() && !blocked();
|
||||||
|
}
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/media.html#eligible-for-autoplay
|
// https://html.spec.whatwg.org/multipage/media.html#eligible-for-autoplay
|
||||||
bool HTMLMediaElement::is_eligible_for_autoplay() const
|
bool HTMLMediaElement::is_eligible_for_autoplay() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -70,6 +70,7 @@ public:
|
||||||
double duration() const;
|
double duration() const;
|
||||||
bool paused() const { return m_paused; }
|
bool paused() const { return m_paused; }
|
||||||
bool ended() const;
|
bool ended() const;
|
||||||
|
bool potentially_playing() const;
|
||||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<JS::Promise>> play();
|
WebIDL::ExceptionOr<JS::NonnullGCPtr<JS::Promise>> play();
|
||||||
WebIDL::ExceptionOr<void> pause();
|
WebIDL::ExceptionOr<void> pause();
|
||||||
|
|
||||||
|
@ -115,6 +116,7 @@ private:
|
||||||
void set_paused(bool);
|
void set_paused(bool);
|
||||||
void set_duration(double);
|
void set_duration(double);
|
||||||
|
|
||||||
|
bool blocked() const;
|
||||||
bool is_eligible_for_autoplay() const;
|
bool is_eligible_for_autoplay() const;
|
||||||
bool has_ended_playback() const;
|
bool has_ended_playback() const;
|
||||||
WebIDL::ExceptionOr<void> reached_end_of_media_playback();
|
WebIDL::ExceptionOr<void> reached_end_of_media_playback();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue