aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/mediasession.rs
diff options
context:
space:
mode:
authorFernando Jiménez Moreno <ferjmoreno@gmail.com>2019-10-04 12:27:16 +0200
committerFernando Jiménez Moreno <ferjmoreno@gmail.com>2019-11-20 13:32:10 +0100
commitf8246801ba47f66d205dae142d4d3498a304220e (patch)
tree41e2e2f0a95d9565262c4907308c773c6ae9e70f /components/script/dom/mediasession.rs
parent1ab65005ae4d1925de357f42212bc2aaa972e77e (diff)
downloadservo-f8246801ba47f66d205dae142d4d3498a304220e.tar.gz
servo-f8246801ba47f66d205dae142d4d3498a304220e.zip
MediaSession registration
Diffstat (limited to 'components/script/dom/mediasession.rs')
-rw-r--r--components/script/dom/mediasession.rs33
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);
+ }
+}