зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1463797 - Added a method to hit enter to save passwords while password box is focused and test. r=MattN
Differential Revision: https://phabricator.services.mozilla.com/D43306 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
0cfc13adee
Коммит
ba71d5287d
|
@ -1030,7 +1030,6 @@ LoginManagerPrompter.prototype = {
|
||||||
);
|
);
|
||||||
|
|
||||||
let chromeDoc = browser.ownerDocument;
|
let chromeDoc = browser.ownerDocument;
|
||||||
|
|
||||||
let currentNotification;
|
let currentNotification;
|
||||||
|
|
||||||
let updateButtonStatus = element => {
|
let updateButtonStatus = element => {
|
||||||
|
@ -1126,6 +1125,12 @@ LoginManagerPrompter.prototype = {
|
||||||
updateButtonLabel();
|
updateButtonLabel();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let onKeyUp = e => {
|
||||||
|
if (e.key == "Enter") {
|
||||||
|
e.target.closest("popupnotification").button.doCommand();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
let onVisibilityToggle = commandEvent => {
|
let onVisibilityToggle = commandEvent => {
|
||||||
let passwordField = chromeDoc.getElementById(
|
let passwordField = chromeDoc.getElementById(
|
||||||
"password-notification-password"
|
"password-notification-password"
|
||||||
|
@ -1313,6 +1318,12 @@ LoginManagerPrompter.prototype = {
|
||||||
chromeDoc
|
chromeDoc
|
||||||
.getElementById("password-notification-username")
|
.getElementById("password-notification-username")
|
||||||
.addEventListener("input", onInput);
|
.addEventListener("input", onInput);
|
||||||
|
chromeDoc
|
||||||
|
.getElementById("password-notification-username")
|
||||||
|
.addEventListener("keyup", onKeyUp);
|
||||||
|
chromeDoc
|
||||||
|
.getElementById("password-notification-password")
|
||||||
|
.addEventListener("keyup", onKeyUp);
|
||||||
chromeDoc
|
chromeDoc
|
||||||
.getElementById("password-notification-password")
|
.getElementById("password-notification-password")
|
||||||
.addEventListener("input", onInput);
|
.addEventListener("input", onInput);
|
||||||
|
@ -1360,9 +1371,15 @@ LoginManagerPrompter.prototype = {
|
||||||
chromeDoc
|
chromeDoc
|
||||||
.getElementById("password-notification-username")
|
.getElementById("password-notification-username")
|
||||||
.removeEventListener("input", onInput);
|
.removeEventListener("input", onInput);
|
||||||
|
chromeDoc
|
||||||
|
.getElementById("password-notification-username")
|
||||||
|
.removeEventListener("keyup", onKeyUp);
|
||||||
chromeDoc
|
chromeDoc
|
||||||
.getElementById("password-notification-password")
|
.getElementById("password-notification-password")
|
||||||
.removeEventListener("input", onInput);
|
.removeEventListener("input", onInput);
|
||||||
|
chromeDoc
|
||||||
|
.getElementById("password-notification-password")
|
||||||
|
.removeEventListener("keyup", onKeyUp);
|
||||||
chromeDoc
|
chromeDoc
|
||||||
.getElementById("password-notification-visibilityToggle")
|
.getElementById("password-notification-visibilityToggle")
|
||||||
.removeEventListener("command", onVisibilityToggle);
|
.removeEventListener("command", onVisibilityToggle);
|
||||||
|
|
|
@ -830,6 +830,48 @@ add_task(async function test_recipeCaptureFields_ExistingLogin() {
|
||||||
Services.logins.removeAllLogins();
|
Services.logins.removeAllLogins();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
add_task(async function test_saveUsingEnter() {
|
||||||
|
async function testWithTextboxSelector(fieldSelector) {
|
||||||
|
let storageChangedPromise = TestUtils.topicObserved(
|
||||||
|
"passwordmgr-storage-changed",
|
||||||
|
(_, data) => data == "addLogin"
|
||||||
|
);
|
||||||
|
|
||||||
|
info("Waiting for form submit and doorhanger interaction");
|
||||||
|
await testSubmittingLoginForm("subtst_notifications_1.html", async function(
|
||||||
|
fieldValues
|
||||||
|
) {
|
||||||
|
is(fieldValues.username, "notifyu1", "Checking submitted username");
|
||||||
|
is(fieldValues.password, "notifyp1", "Checking submitted password");
|
||||||
|
let notif = await getCaptureDoorhangerThatMayOpen("password-save");
|
||||||
|
ok(notif, "got notification popup");
|
||||||
|
is(
|
||||||
|
Services.logins.getAllLogins().length,
|
||||||
|
0,
|
||||||
|
"Should not have any logins yet"
|
||||||
|
);
|
||||||
|
await checkDoorhangerUsernamePassword("notifyu1", "notifyp1");
|
||||||
|
let notificationElement = PopupNotifications.panel.childNodes[0];
|
||||||
|
let textbox = notificationElement.querySelector(fieldSelector);
|
||||||
|
textbox.focus();
|
||||||
|
await EventUtils.synthesizeKey("KEY_Enter");
|
||||||
|
});
|
||||||
|
await storageChangedPromise;
|
||||||
|
|
||||||
|
let logins = Services.logins.getAllLogins();
|
||||||
|
is(logins.length, 1, "Should only have 1 login");
|
||||||
|
let login = logins[0].QueryInterface(Ci.nsILoginMetaInfo);
|
||||||
|
is(login.username, "notifyu1", "Check the username used on the new entry");
|
||||||
|
is(login.password, "notifyp1", "Check the password used on the new entry");
|
||||||
|
is(login.timesUsed, 1, "Check times used on new entry");
|
||||||
|
|
||||||
|
Services.logins.removeAllLogins();
|
||||||
|
}
|
||||||
|
|
||||||
|
await testWithTextboxSelector("#password-notification-password");
|
||||||
|
await testWithTextboxSelector("#password-notification-username");
|
||||||
|
});
|
||||||
|
|
||||||
add_task(async function test_noShowPasswordOnDismissal() {
|
add_task(async function test_noShowPasswordOnDismissal() {
|
||||||
info("Check for no Show Password field when the doorhanger is dismissed");
|
info("Check for no Show Password field when the doorhanger is dismissed");
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче