Implement method to remove media controls

This commit is contained in:
Fernando Jiménez Moreno 2019-05-13 14:33:55 +02:00
parent 142d42a833
commit 23def72787
3 changed files with 24 additions and 6 deletions

View file

@ -20,6 +20,7 @@ use crate::dom::bindings::codegen::Bindings::HTMLIFrameElementBinding::HTMLIFram
use crate::dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; use crate::dom::bindings::codegen::Bindings::NodeBinding::NodeMethods;
use crate::dom::bindings::codegen::Bindings::NodeFilterBinding::NodeFilter; use crate::dom::bindings::codegen::Bindings::NodeFilterBinding::NodeFilter;
use crate::dom::bindings::codegen::Bindings::PerformanceBinding::PerformanceMethods; use crate::dom::bindings::codegen::Bindings::PerformanceBinding::PerformanceMethods;
use crate::dom::bindings::codegen::Bindings::ShadowRootBinding::ShadowRootMethods;
use crate::dom::bindings::codegen::Bindings::TouchBinding::TouchMethods; use crate::dom::bindings::codegen::Bindings::TouchBinding::TouchMethods;
use crate::dom::bindings::codegen::Bindings::WindowBinding::{ use crate::dom::bindings::codegen::Bindings::WindowBinding::{
FrameRequestCallback, ScrollBehavior, WindowMethods, FrameRequestCallback, ScrollBehavior, WindowMethods,
@ -2474,6 +2475,14 @@ impl Document {
} }
pub fn unregister_media_controls(&self, id: &str) { pub fn unregister_media_controls(&self, id: &str) {
if let Some(media_controls) = self.media_controls.borrow().get(id) {
media_controls.Host().detach_shadow();
media_controls
.upcast::<Node>()
.dirty(NodeDamage::OtherNodeDamage);
} else {
debug_assert!(false, "Trying to unregister unknown media controls");
}
self.media_controls.borrow_mut().remove(id); self.media_controls.borrow_mut().remove(id);
} }
} }

View file

@ -501,6 +501,15 @@ impl Element {
Ok(shadow_root) Ok(shadow_root)
} }
pub fn detach_shadow(&self) {
if let Some(ref shadow_root) = self.shadow_root() {
self.node.owner_doc().unregister_shadow_root(shadow_root);
self.ensure_rare_data().shadow_root = None;
} else {
debug_assert!(false, "Trying to detach a non-attached shadow root");
}
}
} }
#[allow(unsafe_code)] #[allow(unsafe_code)]

View file

@ -1788,8 +1788,10 @@ impl HTMLMediaElement {
} }
} }
fn hide_controls(&self) { fn remove_controls(&self) {
println!("hide_controls"); if let Some(ref id) = *self.media_controls_id.borrow() {
document_from_node(self).unregister_media_controls(id);
}
} }
} }
@ -1833,9 +1835,7 @@ impl Drop for HTMLMediaElement {
.unwrap() .unwrap()
.shutdown_player(&client_context_id, player.clone()); .shutdown_player(&client_context_id, player.clone());
} }
if let Some(ref id) = *self.media_controls_id.borrow() { self.remove_controls();
document_from_node(self).unregister_media_controls(id);
}
} }
} }
@ -2278,7 +2278,7 @@ impl VirtualMethods for HTMLMediaElement {
if mutation.new_value(attr).is_some() { if mutation.new_value(attr).is_some() {
self.render_controls(); self.render_controls();
} else { } else {
self.hide_controls(); self.remove_controls();
} }
}, },
_ => (), _ => (),