diff options
author | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2019-10-04 12:27:16 +0200 |
---|---|---|
committer | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2019-11-20 13:32:10 +0100 |
commit | f8246801ba47f66d205dae142d4d3498a304220e (patch) | |
tree | 41e2e2f0a95d9565262c4907308c773c6ae9e70f /components/script/dom/mediasession.rs | |
parent | 1ab65005ae4d1925de357f42212bc2aaa972e77e (diff) | |
download | servo-f8246801ba47f66d205dae142d4d3498a304220e.tar.gz servo-f8246801ba47f66d205dae142d4d3498a304220e.zip |
MediaSession registration
Diffstat (limited to 'components/script/dom/mediasession.rs')
-rw-r--r-- | components/script/dom/mediasession.rs | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/components/script/dom/mediasession.rs b/components/script/dom/mediasession.rs index bb33c523374..6d9afa592e0 100644 --- a/components/script/dom/mediasession.rs +++ b/components/script/dom/mediasession.rs @@ -8,11 +8,13 @@ use crate::dom::bindings::codegen::Bindings::MediaSessionBinding::MediaSessionAc use crate::dom::bindings::codegen::Bindings::MediaSessionBinding::MediaSessionActionHandler; use crate::dom::bindings::codegen::Bindings::MediaSessionBinding::MediaSessionMethods; use crate::dom::bindings::codegen::Bindings::MediaSessionBinding::MediaSessionPlaybackState; -use crate::dom::bindings::reflector::{reflect_dom_object, Reflector}; +use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector}; use crate::dom::bindings::root::{DomRoot, MutNullableDom}; use crate::dom::mediametadata::MediaMetadata; use crate::dom::window::Window; +use crate::script_thread::ScriptThread; use dom_struct::dom_struct; +use msg::constellation_msg::PipelineId; use std::rc::Rc; #[dom_struct] @@ -25,18 +27,24 @@ pub struct MediaSession { } impl MediaSession { - fn new_inherited() -> MediaSession { - MediaSession { + #[allow(unrooted_must_root)] + fn new_inherited(pipeline_id: PipelineId) -> MediaSession { + let media_session = MediaSession { reflector_: Reflector::new(), metadata: Default::default(), playback_state: DomRefCell::new(MediaSessionPlaybackState::None), - } + }; + ScriptThread::register_media_session(&media_session, pipeline_id); + media_session } - pub fn new(global: &Window) -> DomRoot<MediaSession> { + pub fn new(window: &Window) -> DomRoot<MediaSession> { + let pipeline_id = window + .pipeline_id() + .expect("Cannot create MediaSession without a PipelineId"); reflect_dom_object( - Box::new(MediaSession::new_inherited()), - global, + Box::new(MediaSession::new_inherited(pipeline_id)), + window, MediaSessionBinding::Wrap, ) } @@ -71,3 +79,14 @@ impl MediaSessionMethods for MediaSession { ) { } } + +impl Drop for MediaSession { + fn drop(&mut self) { + let global = self.global(); + let pipeline_id = global + .as_window() + .pipeline_id() + .expect("No PipelineId while dropping MediaSession"); + ScriptThread::remove_media_session(pipeline_id); + } +} |