Modify node traversal loop to avoid JS roots assertion. Fixes #2321.

This commit is contained in:
Glenn Watson 2014-05-06 11:11:40 +10:00
parent b1d0dac50d
commit db81cf9bc7

View file

@ -1148,19 +1148,14 @@ impl ScriptTask {
}
for node_address in node_address.iter() {
let mut node =
node::from_untrusted_node_address(
self.js_runtime.deref().ptr, *node_address).root();
// Traverse node generations until a node that is an element is
// found.
while !node.is_element() {
match node.parent_node() {
Some(parent) => node = parent.root(),
None => break,
}
}
if node.is_element() {
let temp_node =
node::from_untrusted_node_address(
self.js_runtime.deref().ptr, *node_address);
let maybe_node = temp_node.root().ancestors().find(|node| node.is_element());
match maybe_node {
Some(mut node) => {
node.set_hover_state(true);
match *mouse_over_targets {
@ -1173,6 +1168,8 @@ impl ScriptTask {
}
target_list.push(node.unrooted());
}
None => {}
}
}
match *mouse_over_targets {
Some(ref mouse_over_targets) => {