test_ext_browsingData_passwords.js (3058B)
1 /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ 2 /* vim: set sts=2 sw=2 et tw=80: */ 3 "use strict"; 4 5 const REFERENCE_DATE = Date.now(); 6 const LOGIN_USERNAME = "username"; 7 const LOGIN_PASSWORD = "password"; 8 const OLD_HOST = "http://mozilla.org"; 9 const NEW_HOST = "http://mozilla.com"; 10 const FXA_HOST = "chrome://FirefoxAccounts"; 11 12 async function checkLoginExists(origin, shouldExist) { 13 const logins = await Services.logins.searchLoginsAsync({ origin }); 14 equal( 15 logins.length, 16 shouldExist ? 1 : 0, 17 `Login for origin ${origin} should ${shouldExist ? "" : "not"} be found.` 18 ); 19 } 20 21 async function addLogin(host, timestamp) { 22 await checkLoginExists(host, false); 23 let login = Cc["@mozilla.org/login-manager/loginInfo;1"].createInstance( 24 Ci.nsILoginInfo 25 ); 26 login.init(host, "", null, LOGIN_USERNAME, LOGIN_PASSWORD); 27 login.QueryInterface(Ci.nsILoginMetaInfo); 28 login.timePasswordChanged = timestamp; 29 await Services.logins.addLoginAsync(login); 30 await checkLoginExists(host, true); 31 } 32 33 async function setupPasswords() { 34 // Remove all logins if any (included FxAccounts one in case one got captured in 35 // a conditioned profile, see Bug 1853617). 36 Services.logins.removeAllLogins(); 37 await addLogin(FXA_HOST, REFERENCE_DATE); 38 await addLogin(NEW_HOST, REFERENCE_DATE); 39 await addLogin(OLD_HOST, REFERENCE_DATE - 10000); 40 } 41 42 add_task(async function testPasswords() { 43 function background() { 44 browser.test.onMessage.addListener(async (msg, options) => { 45 if (msg == "removeHistory") { 46 await browser.browsingData.removePasswords(options); 47 } else { 48 await browser.browsingData.remove(options, { passwords: true }); 49 } 50 browser.test.sendMessage("passwordsRemoved"); 51 }); 52 } 53 54 const extension = ExtensionTestUtils.loadExtension({ 55 background, 56 manifest: { 57 permissions: ["browsingData"], 58 }, 59 }); 60 61 async function testRemovalMethod(method) { 62 // Clear passwords with no since value. 63 await setupPasswords(); 64 extension.sendMessage(method, {}); 65 await extension.awaitMessage("passwordsRemoved"); 66 67 await checkLoginExists(OLD_HOST, false); 68 await checkLoginExists(NEW_HOST, false); 69 await checkLoginExists(FXA_HOST, true); 70 71 // Clear passwords with recent since value. 72 await setupPasswords(); 73 extension.sendMessage(method, { since: REFERENCE_DATE - 1000 }); 74 await extension.awaitMessage("passwordsRemoved"); 75 76 await checkLoginExists(OLD_HOST, true); 77 await checkLoginExists(NEW_HOST, false); 78 await checkLoginExists(FXA_HOST, true); 79 80 // Clear passwords with old since value. 81 await setupPasswords(); 82 extension.sendMessage(method, { since: REFERENCE_DATE - 20000 }); 83 await extension.awaitMessage("passwordsRemoved"); 84 85 await checkLoginExists(OLD_HOST, false); 86 await checkLoginExists(NEW_HOST, false); 87 await checkLoginExists(FXA_HOST, true); 88 } 89 90 await extension.startup(); 91 92 await testRemovalMethod("removePasswords"); 93 await testRemovalMethod("remove"); 94 95 await extension.unload(); 96 });