aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/script_task.rs
diff options
context:
space:
mode:
authorGlenn Watson <gw@intuitionlibrary.com>2014-05-06 12:01:54 +1000
committerGlenn Watson <gw@intuitionlibrary.com>2014-05-07 09:04:02 +1000
commit87e6921d46e5c02c0a7b0f5a1e64a5e639929680 (patch)
treecc8427fbfdd0e8b8a78342ca2f1dac7f16f2ba64 /src/components/script/script_task.rs
parentb14b2eca372ea91dc40af66b1f8a9cd510c37abf (diff)
downloadservo-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.rs28
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 => {}
}
}