aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
authorFernando Jiménez Moreno <ferjmoreno@gmail.com>2019-10-09 12:16:35 +0200
committerFernando Jiménez Moreno <ferjmoreno@gmail.com>2019-11-20 13:33:15 +0100
commit89d9e3ad78ce4698dfab9b2fc310a20f4964e380 (patch)
treefff14daecb40dd3325c49be860604e1adff7b08b /components/script/dom
parent4d147d2c56465405e7c3281073ef57fe1bd1c062 (diff)
downloadservo-89d9e3ad78ce4698dfab9b2fc310a20f4964e380.tar.gz
servo-89d9e3ad78ce4698dfab9b2fc310a20f4964e380.zip
Introduce embedder MediaSessionEvent and move active session to Servo
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/htmlmediaelement.rs10
-rw-r--r--components/script/dom/mediasession.rs13
2 files changed, 13 insertions, 10 deletions
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs
index c816a69ca1a..5b6c0d35e93 100644
--- a/components/script/dom/htmlmediaelement.rs
+++ b/components/script/dom/htmlmediaelement.rs
@@ -67,6 +67,7 @@ use crate::script_thread::ScriptThread;
use crate::task_source::TaskSource;
use dom_struct::dom_struct;
use embedder_traits::resources::{self, Resource as EmbedderResource};
+use embedder_traits::{MediaMetadata, MediaSessionEvent};
use euclid::default::Size2D;
use headers::{ContentLength, ContentRange, HeaderMapExt};
use html5ever::{LocalName, Prefix};
@@ -80,7 +81,6 @@ use net_traits::request::{Destination, Referrer};
use net_traits::{CoreResourceMsg, FetchChannels, FetchMetadata, FetchResponseListener, Metadata};
use net_traits::{NetworkError, ResourceFetchTiming, ResourceTimingType};
use script_layout_interface::HTMLMediaData;
-use script_traits::MediaSessionEvent;
use servo_config::pref;
use servo_media::player::audio::AudioRenderer;
use servo_media::player::video::{VideoFrame, VideoFrameRenderer};
@@ -1727,6 +1727,14 @@ impl HTMLMediaElement {
if self.Controls() {
self.render_controls();
}
+
+ // Send a media session event with the obtained metadata.
+ self.send_media_session_event(MediaSessionEvent::SetMetadata(MediaMetadata {
+ // TODO(ferjm) set url if no title.
+ title: metadata.title.clone().unwrap_or("".to_string()),
+ artist: None,
+ album: None,
+ }));
},
PlayerEvent::NeedData => {
// The player needs more data.
diff --git a/components/script/dom/mediasession.rs b/components/script/dom/mediasession.rs
index f87b0dbee63..ef64170f312 100644
--- a/components/script/dom/mediasession.rs
+++ b/components/script/dom/mediasession.rs
@@ -16,8 +16,9 @@ use crate::dom::mediametadata::MediaMetadata;
use crate::dom::window::Window;
use crate::script_thread::ScriptThread;
use dom_struct::dom_struct;
+use embedder_traits::{EmbedderMsg, MediaSessionEvent};
use msg::constellation_msg::TopLevelBrowsingContextId;
-use script_traits::{MediaSessionActionType, MediaSessionEvent, ScriptMsg};
+use script_traits::MediaSessionActionType;
use std::collections::HashMap;
use std::rc::Rc;
@@ -71,14 +72,8 @@ impl MediaSession {
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();
+ let window = global.as_window();
+ window.send_to_embedder(EmbedderMsg::MediaSessionEvent(event));
}
}