mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-03-22 04:34:44 +00:00
dispatch play, playing, pause, and emptied events from HTMLMediaElement
play(), pause(), and load() now fire the corresponding DOM events, matching the HTMLMediaElement spec behavior.
This commit is contained in:
@@ -50,6 +50,27 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<script id="play_pause_events">
|
||||||
|
{
|
||||||
|
const audio = document.createElement('audio');
|
||||||
|
const events = [];
|
||||||
|
|
||||||
|
audio.addEventListener('play', () => events.push('play'));
|
||||||
|
audio.addEventListener('playing', () => events.push('playing'));
|
||||||
|
audio.addEventListener('pause', () => events.push('pause'));
|
||||||
|
audio.addEventListener('emptied', () => events.push('emptied'));
|
||||||
|
|
||||||
|
audio.play();
|
||||||
|
testing.expectEqual('play,playing', events.join(','));
|
||||||
|
|
||||||
|
audio.pause();
|
||||||
|
testing.expectEqual('play,playing,pause', events.join(','));
|
||||||
|
|
||||||
|
audio.load();
|
||||||
|
testing.expectEqual('play,playing,pause,emptied', events.join(','));
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
<script id="volume_muted">
|
<script id="volume_muted">
|
||||||
{
|
{
|
||||||
const audio = document.getElementById('audio1');
|
const audio = document.getElementById('audio1');
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ const Page = @import("../../../Page.zig");
|
|||||||
const Node = @import("../../Node.zig");
|
const Node = @import("../../Node.zig");
|
||||||
const Element = @import("../../Element.zig");
|
const Element = @import("../../Element.zig");
|
||||||
const HtmlElement = @import("../Html.zig");
|
const HtmlElement = @import("../Html.zig");
|
||||||
|
const Event = @import("../../Event.zig");
|
||||||
pub const Audio = @import("Audio.zig");
|
pub const Audio = @import("Audio.zig");
|
||||||
pub const Video = @import("Video.zig");
|
pub const Video = @import("Video.zig");
|
||||||
const MediaError = @import("../../media/MediaError.zig");
|
const MediaError = @import("../../media/MediaError.zig");
|
||||||
@@ -136,25 +137,32 @@ fn isMaybeSupported(mime_type: []const u8) bool {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn play(self: *Media) void {
|
pub fn play(self: *Media, page: *Page) !void {
|
||||||
self._paused = false;
|
self._paused = false;
|
||||||
self._ready_state = .HAVE_ENOUGH_DATA;
|
self._ready_state = .HAVE_ENOUGH_DATA;
|
||||||
self._network_state = .NETWORK_IDLE;
|
self._network_state = .NETWORK_IDLE;
|
||||||
// TODO: Could dispatch 'play' and 'playing' events
|
try self.dispatchEvent("play", page);
|
||||||
|
try self.dispatchEvent("playing", page);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn pause(self: *Media) void {
|
pub fn pause(self: *Media, page: *Page) !void {
|
||||||
self._paused = true;
|
self._paused = true;
|
||||||
// TODO: Could dispatch 'pause' event
|
try self.dispatchEvent("pause", page);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn load(self: *Media) void {
|
pub fn load(self: *Media, page: *Page) !void {
|
||||||
self._paused = true;
|
self._paused = true;
|
||||||
self._current_time = 0;
|
self._current_time = 0;
|
||||||
self._ready_state = .HAVE_NOTHING;
|
self._ready_state = .HAVE_NOTHING;
|
||||||
self._network_state = .NETWORK_LOADING;
|
self._network_state = .NETWORK_LOADING;
|
||||||
self._error = null;
|
self._error = null;
|
||||||
// TODO: Could dispatch events
|
try self.dispatchEvent("emptied", page);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn dispatchEvent(self: *Media, name: []const u8, page: *Page) !void {
|
||||||
|
const event = try Event.init(name, null, page);
|
||||||
|
defer if (!event._v8_handoff) event.deinit(false);
|
||||||
|
try page._event_manager.dispatch(self.asElement().asEventTarget(), event);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn getPaused(self: *const Media) bool {
|
pub fn getPaused(self: *const Media) bool {
|
||||||
|
|||||||
Reference in New Issue
Block a user