diff options
author | Glenn Watson <gw@intuitionlibrary.com> | 2014-05-06 12:01:54 +1000 |
---|---|---|
committer | Glenn Watson <gw@intuitionlibrary.com> | 2014-05-07 09:04:02 +1000 |
commit | 87e6921d46e5c02c0a7b0f5a1e64a5e639929680 (patch) | |
tree | cc8427fbfdd0e8b8a78342ca2f1dac7f16f2ba64 /src/components/script/script_task.rs | |
parent | b14b2eca372ea91dc40af66b1f8a9cd510c37abf (diff) | |
download | servo-87e6921d46e5c02c0a7b0f5a1e64a5e639929680.tar.gz servo-87e6921d46e5c02c0a7b0f5a1e64a5e639929680.zip |
Fix JS roots assertion when clicking on an element
Diffstat (limited to 'src/components/script/script_task.rs')
-rw-r--r-- | src/components/script/script_task.rs | 28 |
1 files changed, 11 insertions, 17 deletions
diff --git a/src/components/script/script_task.rs b/src/components/script/script_task.rs index 09d9ee59aa6..f9456819b80 100644 --- a/src/components/script/script_task.rs +++ b/src/components/script/script_task.rs @@ -1100,25 +1100,19 @@ impl ScriptTask { match page.hit_test(&point) { Some(node_address) => { debug!("node address is {:?}", node_address); - let mut node = - node::from_untrusted_node_address(self.js_runtime.deref().ptr, - node_address).root(); - debug!("clicked on {:s}", node.deref().debug_str()); - - // Traverse node generations until a node that is an element is - // found. - while !node.deref().is_element() { - match node.deref().parent_node() { - Some(parent) => node = parent.root(), - None => break, - } - } - if node.deref().is_element() { - let element: &JSRef<Element> = ElementCast::to_ref(&*node).unwrap(); - if "a" == element.deref().local_name { - self.load_url_from_element(page, 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_anchor_element()); + match maybe_node { + Some(node) => { + debug!("clicked on {:s}", node.debug_str()); + let element: &JSRef<Element> = ElementCast::to_ref(&node).unwrap(); + self.load_url_from_element(page, element); } + None => {} } } |