<?xml version="1.0"?>
<bindings id="chromeTestBindings" xmlns="http://www.mozilla.org/xbl">
  <binding id="testBinding" bindToUntrustedContent="true">
    <implementation implements="nsIObserver">
      <constructor>
      <![CDATA[
        // This binding gets applied to a content object, and thus is actually
        // running in a content XBL scope.
        var win = XPCNativeWrapper.unwrap(window);
        var SpecialPowers = win.SpecialPowers;
        var ok = SpecialPowers.unwrap(SpecialPowers.wrap(window).parent.ok);
        ok(win != window, "Should be running in an XBL scope with Xrays");

        // Generate an XPCWrappedJS for the reflector. We need to do this
        // explicitly with a testing helper, because we're converging on
        // removing XPConnect from the web, which means that it won't be
        // possible to generate an XPCWrappedJS from content (or XBL) code.
        var scope = {};
        var holder = SpecialPowers.Cu.generateXPCWrappedJS(this, scope);

        // Now, QI |this|, which will generate an aggregated native.
        this.QueryInterface(Components.interfaces.nsIObserver);

        ok(true, "Didn't assert or crash");

        SpecialPowers.wrap(window).parent.SimpleTest.finish();
      ]]>
      </constructor>
      <method name="observe">
        <parameter name="aSubject"/>
        <parameter name="aTopic"/>
        <parameter name="aData"/>
        <body><![CDATA[]]></body>
      </method>
    </implementation>
  </binding>
</bindings>