diff options
Diffstat (limited to 'toolkit/components/passwordmgr/test/test_xml_load.html')
-rw-r--r-- | toolkit/components/passwordmgr/test/test_xml_load.html | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/toolkit/components/passwordmgr/test/test_xml_load.html b/toolkit/components/passwordmgr/test/test_xml_load.html new file mode 100644 index 0000000000..5672c7117f --- /dev/null +++ b/toolkit/components/passwordmgr/test/test_xml_load.html @@ -0,0 +1,191 @@ +<!DOCTYPE HTML> +<html> +<head> + <meta charset="utf-8"> + <title>Test XML document prompts</title> + <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="text/javascript" src="pwmgr_common.js"></script> + <script type="text/javascript" src="prompt_common.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> +</head> +<body> +Login Manager test: XML prompt +<p id="display"></p> + +<div id="content" style="display: none"> + <iframe id="iframe"></iframe> +</div> + +<pre id="test"> +<script class="testbody" type="text/javascript"> + +/** Test for Login Manager: XML prompts. **/ +var pwmgr, login1, login2; + +function initLogins() { + pwmgr = SpecialPowers.Cc["@mozilla.org/login-manager;1"] + .getService(Ci.nsILoginManager); + + login1 = SpecialPowers.Cc["@mozilla.org/login-manager/loginInfo;1"] + .createInstance(Ci.nsILoginInfo); + login2 = SpecialPowers.Cc["@mozilla.org/login-manager/loginInfo;1"] + .createInstance(Ci.nsILoginInfo); + + login1.init("http://mochi.test:8888", null, "xml", + "xmluser1", "xmlpass1", "", ""); + login2.init("http://mochi.test:8888", null, "xml2", + "xmluser2", "xmlpass2", "", ""); + + pwmgr.addLogin(login1); + pwmgr.addLogin(login2); +} + +function handleDialog(doc, testNum) { + ok(true, "handleDialog running for test " + testNum); + + var clickOK = true; + var userfield = doc.getElementById("loginTextbox"); + var passfield = doc.getElementById("password1Textbox"); + var username = userfield.getAttribute("value"); + var password = passfield.getAttribute("value"); + var dialog = doc.getElementById("commonDialog"); + + switch (testNum) { + case 1: + is(username, "xmluser1", "Checking provided username"); + is(password, "xmlpass1", "Checking provided password"); + break; + + case 2: + is(username, "xmluser2", "Checking provided username"); + is(password, "xmlpass2", "Checking provided password"); + + // Check that the dialog is modal, chrome and dependent; + // We can't just check window.opener because that'll be + // a content window, which therefore isn't exposed (it'll lie and + // be null). + var win = doc.defaultView; + var Ci = SpecialPowers.Ci; + var treeOwner = win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIWebNavigation). + QueryInterface(Ci.nsIDocShellTreeItem).treeOwner; + treeOwner.QueryInterface(Ci.nsIInterfaceRequestor); + var flags = treeOwner.getInterface(Ci.nsIXULWindow).chromeFlags; + var wbc = treeOwner.getInterface(Ci.nsIWebBrowserChrome); + info("Flags: " + flags); + ok((flags & Ci.nsIWebBrowserChrome.CHROME_OPENAS_CHROME) != 0, + "Dialog should be opened as chrome"); + ok((flags & Ci.nsIWebBrowserChrome.CHROME_OPENAS_DIALOG) != 0, + "Dialog should be opened as a dialog"); + ok((flags & Ci.nsIWebBrowserChrome.CHROME_DEPENDENT) != 0, + "Dialog should be opened as dependent."); + ok(wbc.isWindowModal(), "Dialog should be modal"); + + // Check that the right tab is focused: + var browserWin = SpecialPowers.Services.wm.getMostRecentWindow("navigator:browser"); + var spec = browserWin.gBrowser.selectedBrowser.currentURI.spec; + ok(spec.startsWith("http://mochi.test:8888"), + "Tab with remote URI (rather than about:blank) should be focused (" + spec + ")"); + + break; + + default: + ok(false, "Uhh, unhandled switch for testNum #" + testNum); + break; + } + + // Explicitly cancel the dialog and report a fail in this failure + // case, rather than letting the dialog get stuck due to an auth + // failure and having the test timeout. + if (!username && !password) { + ok(false, "No values prefilled"); + clickOK = false; + } + + if (clickOK) + dialog.acceptDialog(); + else + dialog.cancelDialog(); + + ok(true, "handleDialog done"); + didDialog = true; +} + +var newWin; +function xmlLoad(responseDoc) { + ok(true, "xmlLoad running for test " + testNum); + + // The server echos back the user/pass it received. + var username = responseDoc.getElementById("user").textContent; + var password = responseDoc.getElementById("pass").textContent; + var authok = responseDoc.getElementById("ok").textContent; + + switch (testNum) { + case 1: + is(username, "xmluser1", "Checking provided username"); + is(password, "xmlpass1", "Checking provided password"); + break; + + case 2: + is(username, "xmluser2", "Checking provided username"); + is(password, "xmlpass2", "Checking provided password"); + + newWin.close(); + break; + + default: + ok(false, "Uhh, unhandled switch for testNum #" + testNum); + break; + } + + doTest(); +} + +function doTest() { + switch (++testNum) { + case 1: + startCallbackTimer(); + makeRequest("authenticate.sjs?user=xmluser1&pass=xmlpass1&realm=xml"); + break; + + case 2: + // Test correct parenting, by opening another tab in the foreground, + // and making sure the prompt re-focuses the original tab when shown: + newWin = window.open(); + newWin.focus(); + startCallbackTimer(); + makeRequest("authenticate.sjs?user=xmluser2&pass=xmlpass2&realm=xml2"); + break; + + default: + SimpleTest.finish(); + } +} + +function makeRequest(uri) { + var xmlDoc = document.implementation.createDocument("", "test", null); + + function documentLoaded(e) { + xmlLoad(xmlDoc); + } + xmlDoc.addEventListener("load", documentLoaded, false); + xmlDoc.load(uri); +} + + +initLogins(); + +// clear plain HTTP auth sessions before the test, to allow +// running them more than once. +var authMgr = SpecialPowers.Cc['@mozilla.org/network/http-auth-manager;1'] + .getService(SpecialPowers.Ci.nsIHttpAuthManager); +authMgr.clearAll(); + +// start the tests +testNum = 0; +doTest(); + +SimpleTest.waitForExplicitFinish(); +</script> +</pre> +</body> +</html> |