зеркало из https://github.com/mozilla/gecko-dev.git
77 строки
3.2 KiB
XML
77 строки
3.2 KiB
XML
<?xml version="1.0"?>
|
|
<bindings id="testBindings" xmlns="http://www.mozilla.org/xbl"
|
|
xmlns:html="http://www.w3.org/1999/xhtml">
|
|
<binding id="testAllowScript">
|
|
<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>
|