<?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin" type="text/css"?> <?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=500931 --> <window title="Mozilla Bug 500931" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> <!-- test results are displayed in the html:body --> <body xmlns="http://www.w3.org/1999/xhtml"> <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=533596" target="_blank">Mozilla Bug 533596</a> </body> <!-- test code goes here --> <script type="application/javascript"><![CDATA[ /** Test for Bug 533596 **/ function go() { var win = $('ifr').contentWindow; var utils = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor) .getInterface(Components.interfaces.nsIDOMWindowUtils); is(utils.getClassName(window), "Proxy", "our window is wrapped correctly") is(utils.getClassName(location), "Location", "chrome doesn't have location wrappers") is(utils.getClassName(win), "Proxy", "win is an Proxy"); is(utils.getClassName(win.location), "Proxy", "deep wrapping works"); is(win.location.href, "http://example.org/tests/js/xpconnect/tests/mochitest/chrome_wrappers_helper.html", "can still get strings out"); var unsafeWin = win.wrappedJSObject; is(utils.getClassName(unsafeWin), "Proxy", "can get a Proxy"); is(utils.getClassName(unsafeWin.location), "Proxy", "deep wrapping works"); Object.defineProperty(unsafeWin, "defprop1", { value: 1, writable: true, enumerable: true, configurable: true }); /* TODO (bug 552854): the getter isn't visible in content. function checkWrapper(val) { ok(utils.getClassName(val) == "Proxy", "wrapped properly"); } Object.defineProperty(unsafeWin, "defprop2", { set: checkWrapper, enumerable: true, configurable: true }); */ unsafeWin.run_test(ok, win, unsafeWin); win.setTimeout(function() { is(utils.getClassName(this), "Proxy", "this is wrapped correctly"); SimpleTest.finish(); }, 0) var saw0 = false; for (let i in $('ifr').contentDocument.getElementsByTagName('body')) { if (i === "0") saw0 = true; } ok(saw0, "properly enumerated the 0 value"); ok(win.XPathEvaluator.toString().indexOf("XPathEvaluator") >= 0, "Can access content window.XPathEvaluator"); var nativeToString = ("" + String.replace).replace("replace", "EventTarget"); var eventTargetToString = "" + win.EventTarget; ok(eventTargetToString.indexOf(nativeToString) > -1, "Stringifying a DOM interface object should return the same string as " + "stringifying a native function." + " " + eventTargetToString + " " + nativeToString); is(win.XPathResult.NUMBER_TYPE, 1, "can access constants on constructors"); is(typeof win.IDBKeyRange.bound, "function", "can access crazy IDBKeyRange static functions"); // Test getter/setter lookup on Xray wrappers. ok(Object.prototype.__lookupGetter__.call(win.document, 'title'), 'found getter on document'); ok(Object.prototype.__lookupGetter__.call(win.document, 'title'), 'found getter on document'); // Test QI on new dom bindings. var contentXHR = XPCNativeWrapper(win.wrappedJSObject.xhr); try { var QIed = contentXHR.QueryInterface(Components.interfaces.nsIClassInfo); ok(false, "Should throw for new binding objects not having classinfo"); } catch(e) { ok(true, "Threw while QI-ing on wrapper"); } } SimpleTest.waitForExplicitFinish(); ]]></script> <iframe type="content" src="http://example.org/tests/js/xpconnect/tests/mochitest/chrome_wrappers_helper.html" onload="go()" id="ifr"> </iframe> </window>