diff options
Diffstat (limited to 'dom/xbl/test/file_bug944407.xml')
-rw-r--r-- | dom/xbl/test/file_bug944407.xml | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/dom/xbl/test/file_bug944407.xml b/dom/xbl/test/file_bug944407.xml new file mode 100644 index 000000000..e48271b9f --- /dev/null +++ b/dom/xbl/test/file_bug944407.xml @@ -0,0 +1,76 @@ +<?xml version="1.0"?> +<bindings id="testBindings" xmlns="http://www.mozilla.org/xbl" + xmlns:html="http://www.w3.org/1999/xhtml"> + <binding id="testAllowScript" bindToUntrustedContent="true"> + <implementation> + <property name="someProp" onget="return 2;" readonly="true"></property> + <method name="someMethod"><body> return 3; </body></method> + <method name="startTest"> + <body> + <![CDATA[ + // Make sure we only get constructed when we're loaded from a domain + // with script enabled. + is(this.id, 'allow', "XBL should only be bound when the origin of the binding allows scripts"); + + var t = this; + doFinish = function() { + // Take a moment to make sure that other constructors don't run when they shouldn't. + if (t.id == 'allow') + setTimeout(SpecialPowers.wrap(window.parent).finish, 100); + } + + onTestEvent = function(target) { + ok(true, 'called event handler'); + + // Try calling event handlers on anonymous content. + var e = new MouseEvent('click'); + document.getAnonymousNodes(target)[1].dispatchEvent(e); + ok(window.calledEventHandlerOnAC, "Should invoke event handler on AC"); + + // Now, dispatch a key event to test key handlers and move the test along. + var k = document.createEvent('KeyboardEvent'); + k.initEvent('keyup', true, true); + target.dispatchEvent(k); + } + + // Check the implementation. + is(this.someProp, 2, "Properties work"); + is(this.someMethod(), 3, "Methods work"); + + // Kick over to the event handlers. This tests XBL event handlers, + // XBL key handlers, and event handlers on anonymous content. + this.dispatchEvent(new CustomEvent('testEvent')); + ]]> + </body> + </method> + + <constructor> + <![CDATA[ + win = XPCNativeWrapper.unwrap(window); + SpecialPowers = win.SpecialPowers; + ok = win.ok = SpecialPowers.wrap(window.parent).ok; + is = win.is = SpecialPowers.wrap(window.parent).is; + info = win.info = SpecialPowers.wrap(window.parent).info; + + info("Invoked constructor for " + this.id); + + var t = this; + window.addEventListener('load', function loadListener() { + window.removeEventListener('load', loadListener); + // Wait two refresh-driver ticks to make sure that the constructor runs + // for both |allow| and |deny| if it's ever going to. + // + // See bug 944407 comment 37. + info("Invoked load listener for " + t.id); + window.requestAnimationFrame(function() { window.requestAnimationFrame(t.startTest.bind(t)); }); + }); + ]]> + </constructor> + </implementation> + <handlers> + <handler event="testEvent" action="onTestEvent(this)" allowuntrusted="true"/> + <handler event="keyup" action="ok(true, 'called key handler'); doFinish();" allowuntrusted="true"/> + </handlers> + <content>Anonymous Content<html:div onclick="window.calledEventHandlerOnAC = true;"></html:div><html:b style="display:none"><children/></html:b></content> + </binding> +</bindings> |