diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 4559bb0981c..781c53e2331 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -671,14 +671,13 @@ impl Document { prev_mouse_over_targets: &mut RootedVec>) { // Build a list of elements that are currently under the mouse. let mouse_over_addresses = self.get_nodes_under_mouse(&point); - let mut mouse_over_targets: RootedVec> = RootedVec::new(); - for node_address in &mouse_over_addresses { - let node = node::from_untrusted_node_address(js_runtime, *node_address); - mouse_over_targets.push(node.r().inclusive_ancestors() - .find(|node| node.is::()) - .map(|node| JS::from_ref(node.downcast::().unwrap())) - .unwrap()); - }; + let mut mouse_over_targets = mouse_over_addresses.iter().map(|node_address| { + node::from_untrusted_node_address(js_runtime, *node_address) + .inclusive_ancestors() + .filter_map(Root::downcast::) + .next() + .unwrap() + }).collect::>>(); // Remove hover from any elements in the previous list that are no longer // under the mouse.