From 223320c98c5f5cd24725dd52b26c3f20b316d126 Mon Sep 17 00:00:00 2001 From: David Wendt Date: Wed, 25 Dec 2019 20:42:54 -0500 Subject: [PATCH] Expose `parentNode` to ActionScript --- core/src/avm1/globals/xml.rs | 21 ++++++++++++++++++ core/tests/regression_tests.rs | 1 + .../swfs/avm1/xml_parent_and_child/output.txt | 5 +++++ .../swfs/avm1/xml_parent_and_child/test.fla | Bin 0 -> 41472 bytes .../swfs/avm1/xml_parent_and_child/test.swf | Bin 0 -> 205 bytes 5 files changed, 27 insertions(+) create mode 100644 core/tests/swfs/avm1/xml_parent_and_child/output.txt create mode 100644 core/tests/swfs/avm1/xml_parent_and_child/test.fla create mode 100644 core/tests/swfs/avm1/xml_parent_and_child/test.swf diff --git a/core/src/avm1/globals/xml.rs b/core/src/avm1/globals/xml.rs index 9883a85bf..92b906b72 100644 --- a/core/src/avm1/globals/xml.rs +++ b/core/src/avm1/globals/xml.rs @@ -278,6 +278,27 @@ pub fn create_xmlnode_proto<'gc>( None, ReadOnly.into(), ); + xmlnode_proto.add_property( + gc_context, + "parentNode", + Executable::Native(|avm, ac, this: Object<'gc>, _args| { + if let Some(node) = this.as_xml_node() { + return Ok(node + .parent() + .unwrap_or(None) + .map(|mut parent| { + parent + .script_object(ac.gc_context, Some(avm.prototypes.xml_node)) + .into() + }) + .unwrap_or_else(|| Value::Null.into())); + } + + Ok(Value::Undefined.into()) + }), + None, + ReadOnly.into(), + ); xmlnode_proto .as_script_object() .unwrap() diff --git a/core/tests/regression_tests.rs b/core/tests/regression_tests.rs index 532a04816..38bc7f85c 100644 --- a/core/tests/regression_tests.rs +++ b/core/tests/regression_tests.rs @@ -110,6 +110,7 @@ swf_tests! { (xml_clone_expandos, "avm1/xml_clone_expandos", 1), (xml_has_child_nodes, "avm1/xml_has_child_nodes", 1), (xml_first_last_child, "avm1/xml_first_last_child", 1), + (xml_parent_and_child, "avm1/xml_parent_and_child", 1), } #[test] diff --git a/core/tests/swfs/avm1/xml_parent_and_child/output.txt b/core/tests/swfs/avm1/xml_parent_and_child/output.txt new file mode 100644 index 000000000..f3d0b0b66 --- /dev/null +++ b/core/tests/swfs/avm1/xml_parent_and_child/output.txt @@ -0,0 +1,5 @@ +true +true +true +true +null diff --git a/core/tests/swfs/avm1/xml_parent_and_child/test.fla b/core/tests/swfs/avm1/xml_parent_and_child/test.fla new file mode 100644 index 0000000000000000000000000000000000000000..7aff39241626724201e5e9064cee583bd2e2e665 GIT binary patch literal 41472 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 HL90+zG(==N literal 0 HcmV?d00001