diff --git a/components/script/dom/htmldetailselement.rs b/components/script/dom/htmldetailselement.rs
index 8cd5133dca7..59090f80f48 100644
--- a/components/script/dom/htmldetailselement.rs
+++ b/components/script/dom/htmldetailselement.rs
@@ -17,7 +17,6 @@ use dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
use std::cell::Cell;
-use task::Task;
use task_source::TaskSource;
#[dom_struct]
@@ -45,10 +44,6 @@ impl HTMLDetailsElement {
document,
HTMLDetailsElementBinding::Wrap)
}
-
- pub fn check_toggle_count(&self, number: u32) -> bool {
- number == self.toggle_counter.get()
- }
}
impl HTMLDetailsElementMethods for HTMLDetailsElement {
@@ -72,27 +67,17 @@ impl VirtualMethods for HTMLDetailsElement {
self.toggle_counter.set(counter);
let window = window_from_node(self);
- let task_source = window.dom_manipulation_task_source();
- let details = Trusted::new(self);
- let task = box DetailsNotificationTask {
- element: details,
- toggle_number: counter
- };
- let _ = task_source.queue(task, window.upcast());
- }
- }
-}
-
-pub struct DetailsNotificationTask {
- element: Trusted,
- toggle_number: u32
-}
-
-impl Task for DetailsNotificationTask {
- fn run(self: Box) {
- let target = self.element.root();
- if target.check_toggle_count(self.toggle_number) {
- target.upcast::().fire_event(atom!("toggle"));
+ let this = Trusted::new(self);
+ // FIXME(nox): Why are errors silenced here?
+ let _ = window.dom_manipulation_task_source().queue(
+ box task!(details_notification_task_steps: move || {
+ let this = this.root();
+ if counter == this.toggle_counter.get() {
+ this.upcast::().fire_event(atom!("toggle"));
+ }
+ }),
+ window.upcast(),
+ );
}
}
}