Bug 1342940 - Add a test for login exception dialog interaction in about:preferences. r=standard8
This is primarily to test removing items via the back or delete
button, which has proven unreliable in the past.
MozReview-Commit-ID: B9I9ZPrGWuq
--- a/browser/components/preferences/in-content-new/tests/browser.ini
+++ b/browser/components/preferences/in-content-new/tests/browser.ini
@@ -46,15 +46,16 @@ skip-if = true || !healthreport # Bug 11
[browser_privacypane_4.js]
[browser_privacypane_5.js]
[browser_privacypane_8.js]
[browser_sanitizeOnShutdown_prefLocked.js]
[browser_searchsuggestions.js]
[browser_security.js]
[browser_siteData.js]
[browser_siteData2.js]
+[browser_site_login_exceptions.js]
[browser_subdialogs.js]
support-files =
subdialog.xul
subdialog2.xul
[browser_telemetry.js]
# Skip this test on Android as FHR and Telemetry are separate systems there.
skip-if = !healthreport || !telemetry || (os == 'linux' && debug) || (os == 'android')
new file mode 100644
--- /dev/null
+++ b/browser/components/preferences/in-content-new/tests/browser_site_login_exceptions.js
@@ -0,0 +1,76 @@
+"use strict";
+const PERMISSIONS_URL = "chrome://browser/content/preferences/permissions.xul";
+
+var exceptionsDialog;
+
+add_task(async function openLoginExceptionsSubDialog() {
+ // Undo the save password change.
+ registerCleanupFunction(async function() {
+ await ContentTask.spawn(gBrowser.selectedBrowser, null, function() {
+ let doc = content.document;
+ let savePasswordCheckBox = doc.getElementById("savePasswords");
+ if (savePasswordCheckBox.checked) {
+ savePasswordCheckBox.click();
+ }
+ });
+
+ gBrowser.removeCurrentTab();
+ });
+
+ await openPreferencesViaOpenPreferencesAPI("privacy", {leaveOpen: true});
+
+ let dialogOpened = promiseLoadSubDialog(PERMISSIONS_URL);
+
+ await ContentTask.spawn(gBrowser.selectedBrowser, null, function() {
+ let doc = content.document;
+ let savePasswordCheckBox = doc.getElementById("savePasswords");
+ Assert.ok(!savePasswordCheckBox.checked,
+ "Save Password CheckBox should be unchecked by default");
+ savePasswordCheckBox.click();
+
+ let loginExceptionsButton = doc.getElementById("passwordExceptions");
+ loginExceptionsButton.click();
+ });
+
+ exceptionsDialog = await dialogOpened;
+});
+
+add_task(async function addALoginException() {
+ let doc = exceptionsDialog.document;
+
+ let tree = doc.getElementById("permissionsTree");
+ Assert.equal(tree.view.rowCount, 0, "Row count should initially be 0");
+
+ let inputBox = doc.getElementById("url");
+ inputBox.focus();
+
+ EventUtils.sendString("www.example.com", exceptionsDialog);
+
+ let btnBlock = doc.getElementById("btnBlock");
+ btnBlock.click();
+
+ await waitForCondition(() => tree.view.rowCount == 1);
+
+ Assert.equal(tree.view.getCellText(0, tree.treeBoxObject.columns.getColumnAt(0)),
+ "http://www.example.com");
+});
+
+add_task(async function deleteALoginException() {
+ let doc = exceptionsDialog.document;
+
+ let tree = doc.getElementById("permissionsTree");
+ Assert.equal(tree.view.rowCount, 1, "Row count should initially be 1");
+ tree.focus();
+ tree.view.selection.select(0);
+
+ if (AppConstants.platform == "macosx") {
+ EventUtils.synthesizeKey("VK_BACK_SPACE", {});
+ } else {
+ EventUtils.synthesizeKey("VK_DELETE", {});
+ }
+
+ await waitForCondition(() => tree.view.rowCount == 0);
+
+ is_element_visible(content.gSubDialog._dialogs[0]._box,
+ "Subdialog is visible after deleting an element");
+});
--- a/browser/components/preferences/in-content/tests/browser.ini
+++ b/browser/components/preferences/in-content/tests/browser.ini
@@ -36,15 +36,16 @@ skip-if = true || !healthreport # Bug 11
[browser_privacypane_1.js]
[browser_privacypane_3.js]
[browser_privacypane_4.js]
[browser_privacypane_5.js]
[browser_privacypane_8.js]
[browser_sanitizeOnShutdown_prefLocked.js]
[browser_searchsuggestions.js]
[browser_security.js]
+[browser_site_login_exceptions.js]
[browser_subdialogs.js]
support-files =
subdialog.xul
subdialog2.xul
[browser_telemetry.js]
# Skip this test on Android as FHR and Telemetry are separate systems there.
skip-if = !healthreport || !telemetry || (os == 'linux' && debug) || (os == 'android')
new file mode 100644
--- /dev/null
+++ b/browser/components/preferences/in-content/tests/browser_site_login_exceptions.js
@@ -0,0 +1,76 @@
+"use strict";
+const PERMISSIONS_URL = "chrome://browser/content/preferences/permissions.xul";
+
+var exceptionsDialog;
+
+add_task(async function openLoginExceptionsSubDialog() {
+ // Undo the save password change.
+ registerCleanupFunction(async function() {
+ await ContentTask.spawn(gBrowser.selectedBrowser, null, function() {
+ let doc = content.document;
+ let savePasswordCheckBox = doc.getElementById("savePasswords");
+ if (savePasswordCheckBox.checked) {
+ savePasswordCheckBox.click();
+ }
+ });
+
+ gBrowser.removeCurrentTab();
+ });
+
+ await openPreferencesViaOpenPreferencesAPI("security", null, {leaveOpen: true});
+
+ let dialogOpened = promiseLoadSubDialog(PERMISSIONS_URL);
+
+ await ContentTask.spawn(gBrowser.selectedBrowser, null, function() {
+ let doc = content.document;
+ let savePasswordCheckBox = doc.getElementById("savePasswords");
+ Assert.ok(!savePasswordCheckBox.checked,
+ "Save Password CheckBox should be unchecked by default");
+ savePasswordCheckBox.click();
+
+ let loginExceptionsButton = doc.getElementById("passwordExceptions");
+ loginExceptionsButton.click();
+ });
+
+ exceptionsDialog = await dialogOpened;
+});
+
+add_task(async function addALoginException() {
+ let doc = exceptionsDialog.document;
+
+ let tree = doc.getElementById("permissionsTree");
+ Assert.equal(tree.view.rowCount, 0, "Row count should initially be 0");
+
+ let inputBox = doc.getElementById("url");
+ inputBox.focus();
+
+ EventUtils.sendString("www.example.com", exceptionsDialog);
+
+ let btnBlock = doc.getElementById("btnBlock");
+ btnBlock.click();
+
+ await waitForCondition(() => tree.view.rowCount == 1);
+
+ Assert.equal(tree.view.getCellText(0, tree.treeBoxObject.columns.getColumnAt(0)),
+ "http://www.example.com");
+});
+
+add_task(async function deleteALoginException() {
+ let doc = exceptionsDialog.document;
+
+ let tree = doc.getElementById("permissionsTree");
+ Assert.equal(tree.view.rowCount, 1, "Row count should initially be 1");
+ tree.focus();
+ tree.view.selection.select(0);
+
+ if (AppConstants.platform == "macosx") {
+ EventUtils.synthesizeKey("VK_BACK_SPACE", {});
+ } else {
+ EventUtils.synthesizeKey("VK_DELETE", {});
+ }
+
+ await waitForCondition(() => tree.view.rowCount == 0);
+
+ is_element_visible(content.gSubDialog._dialogs[0]._box,
+ "Subdialog is visible after deleting an element");
+});