import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo

This commit is contained in:
Roy Tam 2018-01-19 03:59:58 +08:00
commit dcd9973243
150858 changed files with 23884658 additions and 0 deletions

View file

@ -0,0 +1,13 @@
[DEFAULT]
skip-if = os == 'android'
[test_privbrowsing_perwindowpb.html]
skip-if = true # Bug 1173337
support-files =
../formsubmit.sjs
notification_common.js
privbrowsing_perwindowpb_iframe.html
subtst_privbrowsing_1.html
subtst_privbrowsing_2.html
subtst_privbrowsing_3.html
subtst_privbrowsing_4.html

View file

@ -0,0 +1,111 @@
/*
* Initialization: for each test, remove any prior notifications.
*/
function cleanUpPopupNotifications() {
var container = getPopupNotifications(window.top);
var notes = container._currentNotifications;
info(true, "Removing " + notes.length + " popup notifications.");
for (var i = notes.length - 1; i >= 0; i--) {
notes[i].remove();
}
}
cleanUpPopupNotifications();
/*
* getPopupNotifications
*
* Fetches the popup notification for the specified window.
*/
function getPopupNotifications(aWindow) {
var Ci = SpecialPowers.Ci;
var Cc = SpecialPowers.Cc;
ok(Ci != null, "Access Ci");
ok(Cc != null, "Access Cc");
var chromeWin = SpecialPowers.wrap(aWindow)
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShell)
.chromeEventHandler.ownerDocument.defaultView;
var popupNotifications = chromeWin.PopupNotifications;
return popupNotifications;
}
/**
* Checks if we have a password popup notification
* of the right type and with the right label.
*
* @deprecated Write a browser-chrome test instead and use the fork of this method there.
* @returns the found password popup notification.
*/
function getPopup(aPopupNote, aKind) {
ok(true, "Looking for " + aKind + " popup notification");
var notification = aPopupNote.getNotification("password");
if (notification) {
is(notification.options.passwordNotificationType, aKind, "Notification type matches.");
if (aKind == "password-change") {
is(notification.mainAction.label, "Update", "Main action label matches update doorhanger.");
} else if (aKind == "password-save") {
is(notification.mainAction.label, "Remember", "Main action label matches save doorhanger.");
}
}
return notification;
}
/**
* @deprecated - Use a browser chrome test instead.
*
* Clicks the specified popup notification button.
*/
function clickPopupButton(aPopup, aButtonIndex) {
ok(true, "Looking for action at index " + aButtonIndex);
var notifications = SpecialPowers.wrap(aPopup.owner).panel.childNodes;
ok(notifications.length > 0, "at least one notification displayed");
ok(true, notifications.length + " notifications");
var notification = notifications[0];
if (aButtonIndex == 0) {
ok(true, "Triggering main action");
notification.button.doCommand();
} else if (aButtonIndex <= aPopup.secondaryActions.length) {
var index = aButtonIndex;
ok(true, "Triggering secondary action " + index);
notification.childNodes[index].doCommand();
}
}
const kRememberButton = 0;
const kNeverButton = 1;
const kChangeButton = 0;
const kDontChangeButton = 1;
function dumpNotifications() {
try {
// PopupNotifications
var container = getPopupNotifications(window.top);
ok(true, "is popup panel open? " + container.isPanelOpen);
var notes = container._currentNotifications;
ok(true, "Found " + notes.length + " popup notifications.");
for (let i = 0; i < notes.length; i++) {
ok(true, "#" + i + ": " + notes[i].id);
}
// Notification bars
var chromeWin = SpecialPowers.wrap(window.top)
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShell)
.chromeEventHandler.ownerDocument.defaultView;
var nb = chromeWin.getNotificationBox(window.top);
notes = nb.allNotifications;
ok(true, "Found " + notes.length + " notification bars.");
for (let i = 0; i < notes.length; i++) {
ok(true, "#" + i + ": " + notes[i].getAttribute("value"));
}
} catch (e) { todo(false, "WOAH! " + e); }
}

View file

@ -0,0 +1,9 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<iframe id="iframe"></iframe>
</body>
</html>

View file

@ -0,0 +1,33 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Subtest for Login Manager notifications (private browsing)</title>
</head>
<body>
<h2>Subtest 1</h2>
<!--
Make sure that the password-save notification appears outside of
the private mode, but not inside it.
-->
<form id="form" action="formsubmit.sjs">
<input id="user" name="user" type="text">
<input id="pass" name="pass" type="password">
<button type='submit'>Submit</button>
</form>
<script>
function submitForm() {
userField.value = "notifyu1";
passField.value = "notifyp1";
form.submit();
}
window.onload = submitForm;
var form = document.getElementById("form");
var userField = document.getElementById("user");
var passField = document.getElementById("pass");
</script>
</body>
</html>

View file

@ -0,0 +1,33 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Subtest for Login Manager notifications (private browsing)</title>
</head>
<body>
<h2>Subtest 2</h2>
<!--
Make sure that the password-change notification appears outside of
the private mode, but not inside it.
-->
<form id="form" action="formsubmit.sjs">
<input id="pass" name="pass" type="password">
<input id="newpass" name="newpass" type="password">
<button type='submit'>Submit</button>
</form>
<script>
function submitForm() {
passField.value = "notifyp1";
passField2.value = "notifyp2";
form.submit();
}
window.onload = submitForm;
var form = document.getElementById("form");
var passField = document.getElementById("pass");
var passField2 = document.getElementById("newpass");
</script>
</body>
</html>

View file

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Subtest for Login Manager notifications (private browsing)</title>
</head>
<body>
<h2>Subtest 3</h2>
<!--
Make sure that the user/pass fields are auto-filled outside of
the private mode, but not inside it.
-->
<form id="form" action="formsubmit.sjs">
<input id="user" name="user" type="text">
<input id="pass" name="pass" type="password">
<button type='submit'>Submit</button>
</form>
<script>
function submitForm() {
form.submit();
}
var form = document.getElementById("form");
window.addEventListener('message', () => { submitForm(); });
</script>
</body>
</html>

View file

@ -0,0 +1,40 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Subtest for Login Manager notifications (private browsing)</title>
<script type="text/javascript" src="pwmgr_common.js"></script>
</head>
<body>
<h2>Subtest 4</h2>
<!--
Make sure that the user/pass fields have manual filling enabled
in private mode.
-->
<form id="form" action="formsubmit.sjs">
<input id="user" name="user" type="text">
<input id="pass" name="pass" type="password">
<button type='submit'>Submit</button>
</form>
<script>
function startAutocomplete() {
userField.focus();
doKey("down");
setTimeout(submitForm, 100);
}
function submitForm() {
doKey("down");
doKey("return");
setTimeout(function() { form.submit(); }, 100);
}
var form = document.getElementById("form");
var userField = document.getElementById("user");
window.addEventListener('message', () => { startAutocomplete(); });
</script>
</body>
</html>

View file

@ -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>