diff options
Diffstat (limited to 'widget/tests/test_bug760802.xhtml')
-rw-r--r-- | widget/tests/test_bug760802.xhtml | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/widget/tests/test_bug760802.xhtml b/widget/tests/test_bug760802.xhtml new file mode 100644 index 0000000000..41c8a999d2 --- /dev/null +++ b/widget/tests/test_bug760802.xhtml @@ -0,0 +1,85 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<?xml-stylesheet type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=760802 +--> +<window title="Mozilla Bug 760802" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> + <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/> + + <!-- 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=760802" + target="_blank">Mozilla Bug 760802</a> + <p id="display"></p> + <div id="content" style="display: none"/> + <iframe id="iframe_not_editable" width="300" height="150" + src="data:text/html,<html><body></body></html>"/><br/> + </body> + + <!-- test code goes here --> + <script type="application/javascript"><![CDATA[ +SimpleTest.waitForExplicitFinish(); + +function getBaseWindowInterface(win) { + return win.docShell + .treeOwner + .nsIBaseWindow; +} + +function getBaseWindowInterfaceFromDocShell(win) { + return win.docShell.QueryInterface(Ci.nsIBaseWindow); +} + +function shouldThrowException(fun, exception) { + try { + fun.call(); + return false; + } catch (e) { + // eslint-disable-next-line no-unsanitized/property + $("display").innerHTML += "<br/>OK thrown: "+e.message; + return (e instanceof Components.Exception && + e.result === exception) + } +} +function doesntThrowException(fun) { + return !shouldThrowException(fun); +} + +var baseWindow = getBaseWindowInterface(this); +var nativeHandle = baseWindow.nativeHandle; +// eslint-disable-next-line no-unsanitized/property +$("display").innerHTML = "found nativeHandle for this window: "+nativeHandle; + +const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); + +var win = Services.wm.getMostRecentWindow("navigator:browser"); +let docShell = getBaseWindowInterfaceFromDocShell(win); + +ok( + shouldThrowException(function(){docShell.nativeHandle;}, + Cr.NS_ERROR_NOT_IMPLEMENTED), + "nativeHandle should not be implemented for nsDocShell" +); + +ok(typeof(nativeHandle) === "string", "nativeHandle should be a string"); +ok(nativeHandle.match(/^0x[0-9a-f]+$/), "nativeHandle should have a memory address format"); + +var iWin = document.getElementById("iframe_not_editable").contentWindow; +is(getBaseWindowInterface(iWin).nativeHandle, nativeHandle, + "the nativeHandle of an iframe should be its parent's nativeHandle"); + +var dialog = win.openDialog("data:text/plain,this is an active window.", "_blank", + "chrome,dialog=yes,width=100,height=100"); + +isnot(getBaseWindowInterface(dialog).nativeHandle, "", + "the nativeHandle of a dialog should not be empty"); + +dialog.close(); + +todo(false, "the nativeHandle of a window without a mainWidget should be empty"); // how to build a window without a mainWidget ? + +SimpleTest.finish(); + ]]></script> +</window> |