133 lines
4.3 KiB
JavaScript
133 lines
4.3 KiB
JavaScript
const { OSKeyStoreTestUtils } = ChromeUtils.importESModule(
|
|
"resource://testing-common/OSKeyStoreTestUtils.sys.mjs"
|
|
);
|
|
const { OSKeyStore } = ChromeUtils.importESModule(
|
|
"resource://gre/modules/OSKeyStore.sys.mjs"
|
|
);
|
|
|
|
add_task(async function () {
|
|
let prefs = await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
|
|
leaveOpen: true,
|
|
});
|
|
is(prefs.selectedPane, "panePrivacy", "Privacy pane was selected");
|
|
|
|
let doc = gBrowser.contentDocument;
|
|
// Fake the subdialog and LoginHelper
|
|
let win = doc.defaultView;
|
|
let dialogURL = "";
|
|
let dialogOpened = false;
|
|
ChromeUtils.defineLazyGetter(win, "gSubDialog", () => ({
|
|
open(aDialogURL, { closingCallback: aCallback }) {
|
|
dialogOpened = true;
|
|
dialogURL = aDialogURL;
|
|
primaryPasswordSet = primaryPasswordNextState;
|
|
aCallback();
|
|
},
|
|
}));
|
|
|
|
let primaryPasswordSet = false;
|
|
win.LoginHelper = {
|
|
isPrimaryPasswordSet() {
|
|
return primaryPasswordSet;
|
|
},
|
|
getOSAuthEnabled() {
|
|
return true; // Since enabled by default.
|
|
},
|
|
};
|
|
|
|
let checkbox = doc.querySelector("#useMasterPassword");
|
|
checkbox.scrollIntoView();
|
|
ok(
|
|
!checkbox.checked,
|
|
"primary password checkbox should be unchecked by default"
|
|
);
|
|
let button = doc.getElementById("changeMasterPassword");
|
|
ok(button.disabled, "primary password button should be disabled by default");
|
|
|
|
let primaryPasswordNextState = false;
|
|
if (OSKeyStoreTestUtils.canTestOSKeyStoreLogin() && OSKeyStore.canReauth()) {
|
|
let osAuthDialogShown = OSKeyStoreTestUtils.waitForOSKeyStoreLogin(false);
|
|
checkbox.click();
|
|
info("waiting for os auth dialog to appear and get canceled");
|
|
await osAuthDialogShown;
|
|
await TestUtils.waitForCondition(
|
|
() => !checkbox.checked,
|
|
"wait for checkbox to get unchecked"
|
|
);
|
|
ok(!dialogOpened, "the dialog should not have opened");
|
|
ok(
|
|
!dialogURL,
|
|
"the changemp dialog should not have been opened when the os auth dialog is canceled"
|
|
);
|
|
ok(
|
|
!checkbox.checked,
|
|
"primary password checkbox should be unchecked after canceling os auth dialog"
|
|
);
|
|
ok(button.disabled, "button should be disabled after canceling os auth");
|
|
}
|
|
|
|
primaryPasswordNextState = true;
|
|
if (OSKeyStoreTestUtils.canTestOSKeyStoreLogin() && OSKeyStore.canReauth()) {
|
|
let osAuthDialogShown = OSKeyStoreTestUtils.waitForOSKeyStoreLogin(true);
|
|
checkbox.click();
|
|
info("waiting for os auth dialog to appear");
|
|
await osAuthDialogShown;
|
|
info("waiting for dialogURL to get set");
|
|
await TestUtils.waitForCondition(
|
|
() => dialogURL,
|
|
"wait for open to get called asynchronously"
|
|
);
|
|
is(
|
|
dialogURL,
|
|
"chrome://mozapps/content/preferences/changemp.xhtml",
|
|
"clicking on the checkbox should open the primary password dialog"
|
|
);
|
|
} else {
|
|
primaryPasswordSet = true;
|
|
doc.defaultView.gPrivacyPane._initMasterPasswordUI();
|
|
await TestUtils.waitForCondition(
|
|
() => !button.disabled,
|
|
"waiting for primary password button to get enabled"
|
|
);
|
|
}
|
|
ok(!button.disabled, "primary password button should now be enabled");
|
|
ok(checkbox.checked, "primary password checkbox should be checked now");
|
|
|
|
dialogURL = "";
|
|
button.doCommand();
|
|
await TestUtils.waitForCondition(
|
|
() => dialogURL,
|
|
"wait for open to get called asynchronously"
|
|
);
|
|
is(
|
|
dialogURL,
|
|
"chrome://mozapps/content/preferences/changemp.xhtml",
|
|
"clicking on the button should open the primary password dialog"
|
|
);
|
|
ok(!button.disabled, "primary password button should still be enabled");
|
|
ok(checkbox.checked, "primary password checkbox should be checked still");
|
|
|
|
// Confirm that we won't automatically respond to the dialog,
|
|
// since we don't expect a dialog here, we want the test to fail if one appears.
|
|
is(
|
|
Services.prefs.getStringPref(
|
|
"toolkit.osKeyStore.unofficialBuildOnlyLogin",
|
|
""
|
|
),
|
|
"",
|
|
"Pref should be set to an empty string"
|
|
);
|
|
|
|
primaryPasswordNextState = false;
|
|
dialogURL = "";
|
|
checkbox.click();
|
|
is(
|
|
dialogURL,
|
|
"chrome://mozapps/content/preferences/removemp.xhtml",
|
|
"clicking on the checkbox to uncheck primary password should show the removal dialog"
|
|
);
|
|
ok(button.disabled, "primary password button should now be disabled");
|
|
ok(!checkbox.checked, "primary password checkbox should now be unchecked");
|
|
|
|
BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
|
});
|