diff options
author | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2019-11-12 17:12:54 +0100 |
---|---|---|
committer | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2019-11-20 13:34:29 +0100 |
commit | 9da1dd359290bf59a0990a8664b58b5cfbb1f091 (patch) | |
tree | 5d543f352b4fc87b87df34d92fd0aa3dd6d36c6e /components/script/dom/mediasession.rs | |
parent | 68baabba63d84385b94a31c013dd1e55452e4310 (diff) | |
download | servo-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.rs | 29 |
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) { |