summaryrefslogtreecommitdiffstats
path: root/dom/xbl/test/file_bug944407.xml
diff options
context:
space:
mode:
Diffstat (limited to 'dom/xbl/test/file_bug944407.xml')
-rw-r--r--dom/xbl/test/file_bug944407.xml76
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>