diff options
Diffstat (limited to 'components/script_traits')
-rw-r--r-- | components/script_traits/lib.rs | 31 | ||||
-rw-r--r-- | components/script_traits/script_msg.rs | 5 |
2 files changed, 36 insertions, 0 deletions
diff --git a/components/script_traits/lib.rs b/components/script_traits/lib.rs index b4b85889ea0..f5006f1df6f 100644 --- a/components/script_traits/lib.rs +++ b/components/script_traits/lib.rs @@ -1087,3 +1087,34 @@ pub enum MediaSessionActionType { /// The action intent is to move the playback time to a specific time. SeekTo, } + +/// https://w3c.github.io/mediasession/#mediametadata +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct MediaMetadata { + /// Title + pub title: String, + /// Artist + pub artist: Option<String>, + /// Album + pub album: Option<String>, +} + +/// https://w3c.github.io/mediasession/#enumdef-mediasessionplaybackstate +#[derive(Clone, Debug, Deserialize, Serialize)] +pub enum MediaSessionPlaybackState { + /// The browsing context does not specify whether it’s playing or paused. + None_, + /// The browsing context has paused media and it can be resumed. + Playing, + /// The browsing context is currently playing media and it can be paused. + Paused, +} + +/// Type of events sent from script to the constellation about the media session. +#[derive(Clone, Debug, Deserialize, Serialize)] +pub enum MediaSessionEvent { + /// Indicates that the media metadata is available. + SetMetadata(MediaMetadata), + /// Indicates that the playback state has changed. + PlaybackStateChange(MediaSessionPlaybackState), +} diff --git a/components/script_traits/script_msg.rs b/components/script_traits/script_msg.rs index a12101380c9..df1889ab6b2 100644 --- a/components/script_traits/script_msg.rs +++ b/components/script_traits/script_msg.rs @@ -8,6 +8,7 @@ use crate::DocumentState; use crate::IFrameLoadInfoWithData; use crate::LayoutControlMsg; use crate::LoadData; +use crate::MediaSessionEvent; use crate::MessagePortMsg; use crate::PortMessageTask; use crate::StructuredSerializedData; @@ -254,6 +255,9 @@ pub enum ScriptMsg { GetScreenSize(IpcSender<DeviceIntSize>), /// Get the available screen size (pixel) GetScreenAvailSize(IpcSender<DeviceIntSize>), + /// Notifies the constellation about media session events + /// (i.e. when there is metadata for the active media session, playback state changes...). + MediaSessionEventMsg(TopLevelBrowsingContextId, MediaSessionEvent), } impl fmt::Debug for ScriptMsg { @@ -305,6 +309,7 @@ impl fmt::Debug for ScriptMsg { GetClientWindow(..) => "GetClientWindow", GetScreenSize(..) => "GetScreenSize", GetScreenAvailSize(..) => "GetScreenAvailSize", + MediaSessionEventMsg(..) => "MediaSessionEventMsg", }; write!(formatter, "ScriptMsg::{}", variant) } |