aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/script_thread.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/script_thread.rs')
-rw-r--r--components/script/script_thread.rs15
1 files changed, 14 insertions, 1 deletions
diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs
index 0587b99b0bb..81784d73a6c 100644
--- a/components/script/script_thread.rs
+++ b/components/script/script_thread.rs
@@ -138,7 +138,7 @@ use script_traits::{
DiscardBrowsingContext, DocumentActivity, EventResult, HistoryEntryReplacement,
};
use script_traits::{InitialScriptState, JsEvalResult, LayoutMsg, LoadData, LoadOrigin};
-use script_traits::{MouseButton, MouseEventType, NewLayoutInfo};
+use script_traits::{MediaSessionActionType, MouseButton, MouseEventType, NewLayoutInfo};
use script_traits::{Painter, ProgressiveWebMetricType, ScriptMsg, ScriptThreadFactory};
use script_traits::{ScriptToConstellationChan, TimerEvent, TimerSchedulerMsg};
use script_traits::{TimerSource, TouchEventType, TouchId, UntrustedNodeAddress, WheelDelta};
@@ -1716,6 +1716,7 @@ impl ScriptThread {
WebVREvents(id, ..) => Some(id),
PaintMetric(..) => None,
ExitFullScreen(id, ..) => Some(id),
+ MediaSessionAction(..) => None,
}
},
MixedMessage::FromDevtools(_) => None,
@@ -1945,6 +1946,9 @@ impl ScriptThread {
ConstellationControlMsg::PaintMetric(pipeline_id, metric_type, metric_value) => {
self.handle_paint_metric(pipeline_id, metric_type, metric_value)
},
+ ConstellationControlMsg::MediaSessionAction(pipeline_id, action) => {
+ self.handle_media_session_action(pipeline_id, action)
+ },
msg @ ConstellationControlMsg::AttachLayout(..) |
msg @ ConstellationControlMsg::Viewport(..) |
msg @ ConstellationControlMsg::SetScrollState(..) |
@@ -3928,6 +3932,15 @@ impl ScriptThread {
}
}
+ fn handle_media_session_action(&self, pipeline_id: PipelineId, action: MediaSessionActionType) {
+ if let Some(window) = self.documents.borrow().find_window(pipeline_id) {
+ let media_session = window.Navigator().MediaSession();
+ media_session.handle_action(action);
+ } else {
+ warn!("No MediaSession for this pipeline ID");
+ };
+ }
+
pub fn enqueue_microtask(job: Microtask) {
SCRIPT_THREAD_ROOT.with(|root| {
let script_thread = unsafe { &*root.get().unwrap() };