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::NodeFilterBinding::NodeFilter;
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::WindowBinding::{
FrameRequestCallback, ScrollBehavior, WindowMethods,
@ -2474,6 +2475,14 @@ impl Document {
}
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);
}
}

View file

@ -501,6 +501,15 @@ impl Element {
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)]

View file

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