aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/mediasession.rs
diff options
context:
space:
mode:
authorFernando Jiménez Moreno <ferjmoreno@gmail.com>2019-11-12 17:12:54 +0100
committerFernando Jiménez Moreno <ferjmoreno@gmail.com>2019-11-20 13:34:29 +0100
commit9da1dd359290bf59a0990a8664b58b5cfbb1f091 (patch)
tree5d543f352b4fc87b87df34d92fd0aa3dd6d36c6e /components/script/dom/mediasession.rs
parent68baabba63d84385b94a31c013dd1e55452e4310 (diff)
downloadservo-9da1dd359290bf59a0990a8664b58b5cfbb1f091.tar.gz
servo-9da1dd359290bf59a0990a8664b58b5cfbb1f091.zip
Default media session actions
Diffstat (limited to 'components/script/dom/mediasession.rs')
-rw-r--r--components/script/dom/mediasession.rs29
1 files changed, 27 insertions, 2 deletions
diff --git a/components/script/dom/mediasession.rs b/components/script/dom/mediasession.rs
index 2ad4586e6b2..e29f47597f9 100644
--- a/components/script/dom/mediasession.rs
+++ b/components/script/dom/mediasession.rs
@@ -2,8 +2,10 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+use crate::compartments::{AlreadyInCompartment, InCompartment};
use crate::dom::bindings::callback::ExceptionHandling;
use crate::dom::bindings::cell::DomRefCell;
+use crate::dom::bindings::codegen::Bindings::HTMLMediaElementBinding::HTMLMediaElementMethods;
use crate::dom::bindings::codegen::Bindings::MediaSessionBinding;
use crate::dom::bindings::codegen::Bindings::MediaSessionBinding::MediaSessionAction;
use crate::dom::bindings::codegen::Bindings::MediaSessionBinding::MediaSessionActionHandler;
@@ -61,15 +63,38 @@ impl MediaSession {
)
}
+ pub fn register_media_instance(&self, media_instance: &HTMLMediaElement) {
+ self.media_instance.set(Some(media_instance));
+ }
+
pub fn handle_action(&self, action: MediaSessionActionType) {
- println!("HANDLE ACTION {:?}", action);
+ debug!("Handle media session action {:?} {:?}", action);
if let Some(handler) = self.action_handlers.borrow().get(&action) {
if handler.Call__(ExceptionHandling::Report).is_err() {
warn!("Error calling MediaSessionActionHandler callback");
}
return;
}
- // TODO default action.
+
+ // Default action.
+ if let Some(media) = self.media_instance.get() {
+ match action {
+ MediaSessionActionType::Play => {
+ let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
+ media.Play(InCompartment::Already(&in_compartment_proof));
+ },
+ MediaSessionActionType::Pause => {
+ media.Pause();
+ },
+ MediaSessionActionType::SeekBackward => {},
+ MediaSessionActionType::SeekForward => {},
+ MediaSessionActionType::PreviousTrack => {},
+ MediaSessionActionType::NextTrack => {},
+ MediaSessionActionType::SkipAd => {},
+ MediaSessionActionType::Stop => {},
+ MediaSessionActionType::SeekTo => {},
+ }
+ }
}
pub fn send_event(&self, event: MediaSessionEvent) {