aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/mediasession.rs
diff options
context:
space:
mode:
authorFernando Jiménez Moreno <ferjmoreno@gmail.com>2019-10-08 10:18:13 +0200
committerFernando Jiménez Moreno <ferjmoreno@gmail.com>2019-11-20 13:33:14 +0100
commit4d147d2c56465405e7c3281073ef57fe1bd1c062 (patch)
tree7098eaa3bcccf06c44696023352eec78736b7027 /components/script/dom/mediasession.rs
parent9c329a79354cb8b6c1000aa7c78364a5541de421 (diff)
downloadservo-4d147d2c56465405e7c3281073ef57fe1bd1c062.tar.gz
servo-4d147d2c56465405e7c3281073ef57fe1bd1c062.zip
Register media instance with session and prepare communication with embedder
Diffstat (limited to 'components/script/dom/mediasession.rs')
-rw-r--r--components/script/dom/mediasession.rs19
1 files changed, 18 insertions, 1 deletions
diff --git a/components/script/dom/mediasession.rs b/components/script/dom/mediasession.rs
index 139264953ca..f87b0dbee63 100644
--- a/components/script/dom/mediasession.rs
+++ b/components/script/dom/mediasession.rs
@@ -11,12 +11,13 @@ use crate::dom::bindings::codegen::Bindings::MediaSessionBinding::MediaSessionMe
use crate::dom::bindings::codegen::Bindings::MediaSessionBinding::MediaSessionPlaybackState;
use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
use crate::dom::bindings::root::{DomRoot, MutNullableDom};
+use crate::dom::htmlmediaelement::HTMLMediaElement;
use crate::dom::mediametadata::MediaMetadata;
use crate::dom::window::Window;
use crate::script_thread::ScriptThread;
use dom_struct::dom_struct;
use msg::constellation_msg::TopLevelBrowsingContextId;
-use script_traits::MediaSessionActionType;
+use script_traits::{MediaSessionActionType, MediaSessionEvent, ScriptMsg};
use std::collections::HashMap;
use std::rc::Rc;
@@ -30,6 +31,9 @@ pub struct MediaSession {
/// https://w3c.github.io/mediasession/#supported-media-session-actions
#[ignore_malloc_size_of = "Rc"]
action_handlers: DomRefCell<HashMap<MediaSessionActionType, Rc<MediaSessionActionHandler>>>,
+ /// The media instance controlled by this media session.
+ /// For now only HTMLMediaElements are controlled by media sessions.
+ media_instance: MutNullableDom<HTMLMediaElement>,
}
impl MediaSession {
@@ -40,6 +44,7 @@ impl MediaSession {
metadata: Default::default(),
playback_state: DomRefCell::new(MediaSessionPlaybackState::None),
action_handlers: DomRefCell::new(HashMap::new()),
+ media_instance: Default::default(),
};
ScriptThread::register_media_session(&media_session, browsing_context_id);
media_session
@@ -63,6 +68,18 @@ impl MediaSession {
}
// TODO default action.
}
+
+ pub fn send_event(&self, event: MediaSessionEvent) {
+ let global = self.global();
+ let browser_id = global
+ .as_window()
+ .window_proxy()
+ .top_level_browsing_context_id();
+ let _ = global
+ .script_to_constellation_chan()
+ .send(ScriptMsg::MediaSessionEventMsg(browser_id, event))
+ .unwrap();
+ }
}
impl MediaSessionMethods for MediaSession {