diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /toolkit/components/passwordmgr/test/chrome/test_privbrowsing_perwindowpb.html | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'toolkit/components/passwordmgr/test/chrome/test_privbrowsing_perwindowpb.html')
-rw-r--r-- | toolkit/components/passwordmgr/test/chrome/test_privbrowsing_perwindowpb.html | 322 |
1 files changed, 322 insertions, 0 deletions
diff --git a/toolkit/components/passwordmgr/test/chrome/test_privbrowsing_perwindowpb.html b/toolkit/components/passwordmgr/test/chrome/test_privbrowsing_perwindowpb.html new file mode 100644 index 000000000..6b7d4abb3 --- /dev/null +++ b/toolkit/components/passwordmgr/test/chrome/test_privbrowsing_perwindowpb.html @@ -0,0 +1,322 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=248970 +--> +<head> + <meta charset="utf-8"> + <title>Test for Private Browsing</title> + <script type="application/javascript" + src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="text/javascript" src="notification_common.js"></script> + <link rel="stylesheet" type="text/css" + href="chrome://mochikit/content/tests/SimpleTest/test.css"> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=248970">Mozilla Bug 248970</a> +<p id="display"></p> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +/** Test for Bug 248970 **/ +// based on test_notifications.html + +const Ci = SpecialPowers.Ci; +const Cc = SpecialPowers.Cc; +const Cr = SpecialPowers.Cr; + +Components.utils.import("resource://gre/modules/Services.jsm"); + +var testpath = "/chrome/toolkit/components/passwordmgr/test/chrome/"; +var prefix = "http://test2.example.com" + testpath; +var subtests = [ + "subtst_privbrowsing_1.html", // 1 + "subtst_privbrowsing_1.html", // 2 + "subtst_privbrowsing_1.html", // 3 + "subtst_privbrowsing_2.html", // 4 + "subtst_privbrowsing_2.html", // 5 + "subtst_privbrowsing_2.html", // 6 + "subtst_privbrowsing_3.html", // 7 + "subtst_privbrowsing_3.html", // 8 + "subtst_privbrowsing_4.html", // 9 + "subtst_privbrowsing_3.html" // 10 + ]; +var observer; + +var testNum = 0; +function loadNextTest() { + // run the initialization code for each test + switch (++ testNum) { + case 1: + popupNotifications = normalWindowPopupNotifications; + iframe = normalWindowIframe; + break; + + case 2: + popupNotifications = privateWindowPopupNotifications; + iframe = privateWindowIframe; + break; + + case 3: + popupNotifications = normalWindowPopupNotifications; + iframe = normalWindowIframe; + break; + + case 4: + pwmgr.addLogin(login); + break; + + case 5: + popupNotifications = privateWindowPopupNotifications; + iframe = privateWindowIframe; + break; + + case 6: + popupNotifications = normalWindowPopupNotifications; + iframe = normalWindowIframe; + break; + + case 7: + pwmgr.addLogin(login); + break; + + case 8: + popupNotifications = privateWindowPopupNotifications; + iframe = privateWindowIframe; + break; + + case 9: + break; + + case 10: + popupNotifications = normalWindowPopupNotifications; + iframe = normalWindowIframe; + break; + + default: + ok(false, "Unexpected call to loadNextTest for test #" + testNum); + } + + if (testNum === 7) { + observer = SpecialPowers.wrapCallback(function(subject, topic, data) { + SimpleTest.executeSoon(() => { iframe.contentWindow.postMessage("go", "*"); }); + }); + SpecialPowers.addObserver(observer, "passwordmgr-processed-form", false); + } + + ok(true, "Starting test #" + testNum); + iframe.src = prefix + subtests[testNum - 1]; +} + +function checkTest() { + var popup; + var gotUser; + var gotPass; + + switch (testNum) { + case 1: + // run outside of private mode, popup notification should appear + popup = getPopup(popupNotifications, "password-save"); + ok(popup, "got popup notification"); + popup.remove(); + break; + + case 2: + // run inside of private mode, popup notification should not appear + popup = getPopup(popupNotifications, "password-save"); + ok(!popup, "checking for no popup notification"); + break; + + case 3: + // run outside of private mode, popup notification should appear + popup = getPopup(popupNotifications, "password-save"); + ok(popup, "got popup notification"); + popup.remove(); + break; + + case 4: + // run outside of private mode, popup notification should appear + popup = getPopup(popupNotifications, "password-change"); + ok(popup, "got popup notification"); + popup.remove(); + break; + + case 5: + // run inside of private mode, popup notification should not appear + popup = getPopup(popupNotifications, "password-change"); + ok(!popup, "checking for no popup notification"); + break; + + case 6: + // run outside of private mode, popup notification should appear + popup = getPopup(popupNotifications, "password-change"); + ok(popup, "got popup notification"); + popup.remove(); + pwmgr.removeLogin(login); + break; + + case 7: + // verify that the user/pass pair was autofilled + gotUser = iframe.contentDocument.getElementById("user").textContent; + gotPass = iframe.contentDocument.getElementById("pass").textContent; + is(gotUser, "notifyu1", "Checking submitted username"); + is(gotPass, "notifyp1", "Checking submitted password"); + break; + + case 8: + // verify that the user/pass pair was not autofilled + gotUser = iframe.contentDocument.getElementById("user").textContent; + gotPass = iframe.contentDocument.getElementById("pass").textContent; + is(gotUser, "", "Checking submitted username"); + is(gotPass, "", "Checking submitted password"); + break; + + case 9: + // verify that the user/pass pair was available for autocomplete + gotUser = iframe.contentDocument.getElementById("user").textContent; + gotPass = iframe.contentDocument.getElementById("pass").textContent; + is(gotUser, "notifyu1", "Checking submitted username"); + is(gotPass, "notifyp1", "Checking submitted password"); + break; + + case 10: + // verify that the user/pass pair was autofilled + gotUser = iframe.contentDocument.getElementById("user").textContent; + gotPass = iframe.contentDocument.getElementById("pass").textContent; + is(gotUser, "notifyu1", "Checking submitted username"); + is(gotPass, "notifyp1", "Checking submitted password"); + pwmgr.removeLogin(login); + break; + + default: + ok(false, "Unexpected call to checkTest for test #" + testNum); + + } +} + +var mainWindow = window.QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIWebNavigation) + .QueryInterface(Ci.nsIDocShellTreeItem) + .rootTreeItem + .QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIDOMWindow); +var contentPage = "http://mochi.test:8888/chrome/toolkit/components/passwordmgr/test/chrome/privbrowsing_perwindowpb_iframe.html"; +var testWindows = []; + +function whenDelayedStartupFinished(aWindow, aCallback) { + Services.obs.addObserver(function obs(aSubject, aTopic) { + if (aWindow == aSubject) { + Services.obs.removeObserver(obs, aTopic); + setTimeout(aCallback, 0); + } + }, "browser-delayed-startup-finished", false); +} + +function testOnWindow(aIsPrivate, aCallback) { + var win = mainWindow.OpenBrowserWindow({private: aIsPrivate}); + win.addEventListener("load", function onLoad() { + win.removeEventListener("load", onLoad, false); + whenDelayedStartupFinished(win, function() { + win.addEventListener("DOMContentLoaded", function onInnerLoad() { + if (win.content.location.href != contentPage) { + win.gBrowser.loadURI(contentPage); + return; + } + win.removeEventListener("DOMContentLoaded", onInnerLoad, true); + + win.content.addEventListener('load', function innerLoad2() { + win.content.removeEventListener('load', innerLoad2, false); + testWindows.push(win); + SimpleTest.executeSoon(function() { aCallback(win); }); + }, false, true); + }, true); + SimpleTest.executeSoon(function() { win.gBrowser.loadURI(contentPage); }); + }); + }, true); +} + +var ignoreLoad = false; +function handleLoad(aEvent) { + // ignore every other load event ... We get one for loading the subtest (which + // we want to ignore), and another when the subtest's form submits itself + // (which we want to handle, to start the next test). + ignoreLoad = !ignoreLoad; + if (ignoreLoad) { + ok(true, "Ignoring load of subtest #" + testNum); + return; + } + ok(true, "Processing submission of subtest #" + testNum); + + checkTest(); + + if (testNum < subtests.length) { + loadNextTest(); + } else { + ok(true, "private browsing notification tests finished."); + + testWindows.forEach(function(aWin) { + aWin.close(); + }); + + SpecialPowers.removeObserver(observer, "passwordmgr-processed-form"); + SimpleTest.finish(); + } +} + +var pwmgr = Cc["@mozilla.org/login-manager;1"]. + getService(Ci.nsILoginManager); +ok(pwmgr != null, "Access pwmgr"); + +// We need to make sure no logins have been stored by previous tests +// for forms in |url|, otherwise the change password notification +// would turn into a prompt, and the test will fail. +var url = "http://test2.example.com"; +is(pwmgr.countLogins(url, "", null), 0, "No logins should be stored for " + url); + +var nsLoginInfo = new SpecialPowers.wrap(SpecialPowers.Components).Constructor("@mozilla.org/login-manager/loginInfo;1", + Ci.nsILoginInfo, "init"); +var login = new nsLoginInfo(url, url, null, "notifyu1", "notifyp1", "user", "pass"); + +var normalWindow; +var privateWindow; + +var iframe; +var normalWindowIframe; +var privateWindowIframe; + +var popupNotifications; +var normalWindowPopupNotifications; +var privateWindowPopupNotifications; + +testOnWindow(false, function(aWin) { + var selectedBrowser = aWin.gBrowser.selectedBrowser; + normalWindowIframe = selectedBrowser.contentDocument.getElementById("iframe"); + normalWindowIframe.onload = handleLoad; + selectedBrowser.focus(); + + normalWindowPopupNotifications = getPopupNotifications(selectedBrowser.contentWindow.top); + ok(normalWindowPopupNotifications, "Got popupNotifications in normal window"); + // ignore the first load for this window; + ignoreLoad = false; + + testOnWindow(true, function(aPrivateWin) { + selectedBrowser = aPrivateWin.gBrowser.selectedBrowser; + privateWindowIframe = selectedBrowser.contentDocument.getElementById("iframe"); + privateWindowIframe.onload = handleLoad; + selectedBrowser.focus(); + + privateWindowPopupNotifications = getPopupNotifications(selectedBrowser.contentWindow.top); + ok(privateWindowPopupNotifications, "Got popupNotifications in private window"); + // ignore the first load for this window; + ignoreLoad = false; + + SimpleTest.executeSoon(loadNextTest); + }); +}); + +SimpleTest.waitForExplicitFinish(); +</script> +</pre> +</body> +</html> + |