From d7d7234031350a33dfc22aa85c442ae782c4ab95 Mon Sep 17 00:00:00 2001 From: Matthew Noorenberghe Date: Mon, 2 May 2016 19:54:01 -0700 Subject: [PATCH] Bug 1269039 - Make test_master_password.html work with e10s. r=dolske MozReview-Commit-ID: LUVxtCxaZ8G --HG-- extra : rebase_source : c8f70079e5f3cbd4401b410704c911b8842556ab --- .../passwordmgr/test/mochitest/mochitest.ini | 2 +- .../test/mochitest/test_master_password.html | 59 +++++++++---------- .../passwordmgr/test/pwmgr_common.js | 54 +++++++++++------ .../components/prompts/test/prompt_common.js | 5 +- 4 files changed, 67 insertions(+), 53 deletions(-) diff --git a/toolkit/components/passwordmgr/test/mochitest/mochitest.ini b/toolkit/components/passwordmgr/test/mochitest/mochitest.ini index 326fd32b5701..25ee86c2037c 100644 --- a/toolkit/components/passwordmgr/test/mochitest/mochitest.ini +++ b/toolkit/components/passwordmgr/test/mochitest/mochitest.ini @@ -38,7 +38,7 @@ skip-if = toolkit == 'android' # Bug 1259768 [test_input_events.html] [test_input_events_for_identical_values.html] [test_master_password.html] -skip-if = toolkit == 'android' || e10s # Tests desktop prompts +skip-if = toolkit == 'android' # Tests desktop prompts support-files = subtst_master_pass.html [test_maxlength.html] diff --git a/toolkit/components/passwordmgr/test/mochitest/test_master_password.html b/toolkit/components/passwordmgr/test/mochitest/test_master_password.html index eca27bf95230..dbbf039c5ae8 100644 --- a/toolkit/components/passwordmgr/test/mochitest/test_master_password.html +++ b/toolkit/components/passwordmgr/test/mochitest/test_master_password.html @@ -17,29 +17,29 @@ Login Manager test: master password. // Force parent to not look for tab-modal prompts, as they're not used for auth prompts. isTabModal = false; -commonInit(); +var chromeScript = runChecksAfterCommonInit(); SimpleTest.requestFlakyTimeout("untriaged"); -var pwmgr = SpecialPowers.Cc["@mozilla.org/login-manager;1"] - .getService(SpecialPowers.Ci.nsILoginManager); -var pwcrypt = SpecialPowers.Cc["@mozilla.org/login-manager/crypto/SDR;1"] - .getService(Ci.nsILoginManagerCrypto); - -var nsLoginInfo = new SpecialPowers.wrap(SpecialPowers.Components).Constructor("@mozilla.org/login-manager/loginInfo;1", Ci.nsILoginInfo); - var exampleCom = "http://example.com/tests/toolkit/components/passwordmgr/test/mochitest/"; var exampleOrg = "http://example.org/tests/toolkit/components/passwordmgr/test/mochitest/"; -var login1 = new nsLoginInfo(); -var login2 = new nsLoginInfo(); +runInParent(() => { + const { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components; + var pwmgr = Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager); -login1.init("http://example.com", "http://example.com", null, - "user1", "pass1", "uname", "pword"); -login2.init("http://example.org", "http://example.org", null, - "user2", "pass2", "uname", "pword"); + var nsLoginInfo = new Components.Constructor("@mozilla.org/login-manager/loginInfo;1", Ci.nsILoginInfo); -pwmgr.addLogin(login1); -pwmgr.addLogin(login2); + var login1 = new nsLoginInfo(); + var login2 = new nsLoginInfo(); + + login1.init("http://example.com", "http://example.com", null, + "user1", "pass1", "uname", "pword"); + login2.init("http://example.org", "http://example.org", null, + "user2", "pass2", "uname", "pword"); + + pwmgr.addLogin(login1); + pwmgr.addLogin(login2); +});

@@ -55,9 +55,9 @@ var iframe1 = document.getElementById("iframe1"); var iframe2 = document.getElementById("iframe2"); add_task(function* test_1() { - ok(pwcrypt.isLoggedIn, "should be initially logged in (no MP)"); + ok(isLoggedIn(), "should be initially logged in (no MP)"); enableMasterPassword(); - ok(!pwcrypt.isLoggedIn, "should be logged out after setting MP"); + ok(!isLoggedIn(), "should be logged out after setting MP"); // Trigger a MP prompt via the API var state = { @@ -80,14 +80,14 @@ add_task(function* test_1() { }; var promptDone = handlePrompt(state, action); - var logins = pwmgr.getAllLogins(); + var logins = chromeScript.sendSyncMessage("getAllLogins")[0][0]; yield promptDone; is(logins.length, 3, "expected number of logins"); - ok(pwcrypt.isLoggedIn, "should be logged in after MP prompt"); + ok(isLoggedIn(), "should be logged in after MP prompt"); logoutMasterPassword(); - ok(!pwcrypt.isLoggedIn, "should be logged out"); + ok(!isLoggedIn(), "should be logged out"); }); add_task(function* test_2() { @@ -114,12 +114,12 @@ add_task(function* test_2() { var failedAsExpected = false; var logins = null; try { - logins = pwmgr.getAllLogins(); + logins = chromeScript.sendSyncMessage("getAllLogins")[0][0]; } catch (e) { failedAsExpected = true; } yield promptDone; ok(failedAsExpected, "getAllLogins should have thrown"); is(logins, null, "shouldn't have gotten logins"); - ok(!pwcrypt.isLoggedIn, "should still be logged out"); + ok(!isLoggedIn(), "should still be logged out"); }); add_task(function* test_3() { @@ -161,9 +161,9 @@ add_task(function* test_3() { is(u.value, "user1", "checking expected user to have been filled in"); is(p.value, "pass1", "checking expected pass to have been filled in"); - ok(pwcrypt.isLoggedIn, "should be logged in"); + ok(isLoggedIn(), "should be logged in"); logoutMasterPassword(); - ok(!pwcrypt.isLoggedIn, "should be logged out"); + ok(!isLoggedIn(), "should be logged out"); }); add_task(function* test_4() { @@ -197,7 +197,7 @@ add_task(function* test_4() { is(u.value, "", "checking expected empty user"); is(p.value, "", "checking expected empty pass"); - ok(!pwcrypt.isLoggedIn, "should be logged out"); + ok(!isLoggedIn(), "should be logged out"); // XXX check that there's 1 MP window open @@ -223,7 +223,7 @@ add_task(function* test_4() { is(p.value, "", "checking expected empty pass"); // XXX check that there's 1 MP window open - ok(!pwcrypt.isLoggedIn, "should be logged out"); + ok(!isLoggedIn(), "should be logged out"); // Ok, now enter the MP. The MP prompt is already up. @@ -243,7 +243,7 @@ add_task(function* test_4() { // filling of iframe2's data. We notify observers synchronously, so // iframe2's observer will process iframe2 before iframe1 even finishes // processing the form. - ok(pwcrypt.isLoggedIn, "should be logged in"); + ok(isLoggedIn(), "should be logged in"); // check contents of iframe1 fields u = SpecialPowers.wrap(iframe1).contentDocument.getElementById("userfield"); @@ -262,9 +262,6 @@ add_task(function* test_4() { SimpleTest.registerCleanupFunction(function finishTest() { disableMasterPassword(); - - pwmgr.removeLogin(login1); - pwmgr.removeLogin(login2); }); diff --git a/toolkit/components/passwordmgr/test/pwmgr_common.js b/toolkit/components/passwordmgr/test/pwmgr_common.js index cf1d701787ed..b83a11b44ab4 100644 --- a/toolkit/components/passwordmgr/test/pwmgr_common.js +++ b/toolkit/components/passwordmgr/test/pwmgr_common.js @@ -207,26 +207,19 @@ function disableMasterPassword() { } function setMasterPassword(enable) { - var oldPW, newPW; - if (enable) { - oldPW = ""; - newPW = masterPassword; - } else { - oldPW = masterPassword; - newPW = ""; - } - // Set master password. Note that this does not log you in, so the next - // invocation of pwmgr can trigger a MP prompt. - - var pk11db = Cc["@mozilla.org/security/pk11tokendb;1"].getService(Ci.nsIPK11TokenDB); - var token = pk11db.findTokenByName(""); - info("MP change from " + oldPW + " to " + newPW); - token.changePassword(oldPW, newPW); + chromeScript.sendSyncMessage("setMasterPassword", { enable }); } function logoutMasterPassword() { - var sdr = Cc["@mozilla.org/security/sdr;1"].getService(Ci.nsISecretDecoderRing); - sdr.logoutAndTeardown(); + runInParent(function parent_logoutMasterPassword() { + const { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components; + var sdr = Cc["@mozilla.org/security/sdr;1"].getService(Ci.nsISecretDecoderRing); + sdr.logoutAndTeardown(); + }); +} + +function isLoggedIn() { + return chromeScript.sendSyncMessage("isLoggedIn")[0][0]; } function dumpLogins(pwmgr) { @@ -361,6 +354,7 @@ if (this.addMessageListener) { // Ignore ok/is in commonInit since they aren't defined in a chrome script. ok = is = () => {}; // eslint-disable-line no-native-reassign + Cu.import("resource://gre/modules/LoginHelper.jsm"); Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/Task.jsm"); @@ -395,6 +389,32 @@ if (this.addMessageListener) { return Services.logins.countLogins(formOrigin, submitOrigin, httpRealm); }); + addMessageListener("getAllLogins", () => { + return LoginHelper.loginsToVanillaObjects(Services.logins.getAllLogins()); + }); + + addMessageListener("isLoggedIn", () => { + return Services.logins.isLoggedIn; + }); + + addMessageListener("setMasterPassword", ({ enable }) => { + var oldPW, newPW; + if (enable) { + oldPW = ""; + newPW = masterPassword; + } else { + oldPW = masterPassword; + newPW = ""; + } + // Set master password. Note that this does not log you in, so the next + // invocation of pwmgr can trigger a MP prompt. + + var pk11db = Cc["@mozilla.org/security/pk11tokendb;1"].getService(Ci.nsIPK11TokenDB); + var token = pk11db.findTokenByName(""); + dump("MP change from " + oldPW + " to " + newPW + "\n"); + token.changePassword(oldPW, newPW); + }); + var globalMM = Cc["@mozilla.org/globalmessagemanager;1"].getService(Ci.nsIMessageListenerManager); globalMM.addMessageListener("RemoteLogins:onFormSubmit", function onFormSubmit(message) { sendAsyncMessage("formSubmissionProcessed", message.data, message.objects); diff --git a/toolkit/components/prompts/test/prompt_common.js b/toolkit/components/prompts/test/prompt_common.js index 2c502cb98ce8..6468b6722ec0 100644 --- a/toolkit/components/prompts/test/prompt_common.js +++ b/toolkit/components/prompts/test/prompt_common.js @@ -1,7 +1,4 @@ -const Ci = SpecialPowers.Ci; -const Cc = SpecialPowers.Cc; -ok(Ci != null, "Access Ci"); -ok(Cc != null, "Access Cc"); +const { Cc, Ci } = SpecialPowers; function hasTabModalPrompts() { var prefName = "prompts.tab_modal.enabled";