summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/general/browser_permissions.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/test/general/browser_permissions.js')
-rw-r--r--browser/base/content/test/general/browser_permissions.js202
1 files changed, 202 insertions, 0 deletions
diff --git a/browser/base/content/test/general/browser_permissions.js b/browser/base/content/test/general/browser_permissions.js
new file mode 100644
index 000000000..721a669d2
--- /dev/null
+++ b/browser/base/content/test/general/browser_permissions.js
@@ -0,0 +1,202 @@
+/*
+ * Test the Permissions section in the Control Center.
+ */
+
+var {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
+const PERMISSIONS_PAGE = "http://example.com/browser/browser/base/content/test/general/permissions.html";
+var {SitePermissions} = Cu.import("resource:///modules/SitePermissions.jsm", {});
+
+registerCleanupFunction(function() {
+ SitePermissions.remove(gBrowser.currentURI, "cookie");
+ SitePermissions.remove(gBrowser.currentURI, "geo");
+ SitePermissions.remove(gBrowser.currentURI, "camera");
+ SitePermissions.remove(gBrowser.currentURI, "microphone");
+
+ while (gBrowser.tabs.length > 1) {
+ gBrowser.removeCurrentTab();
+ }
+});
+
+function* openIdentityPopup() {
+ let {gIdentityHandler} = gBrowser.ownerGlobal;
+ let promise = BrowserTestUtils.waitForEvent(gIdentityHandler._identityPopup, "popupshown");
+ gIdentityHandler._identityBox.click();
+ return promise;
+}
+
+function* closeIdentityPopup() {
+ let {gIdentityHandler} = gBrowser.ownerGlobal;
+ let promise = BrowserTestUtils.waitForEvent(gIdentityHandler._identityPopup, "popuphidden");
+ gIdentityHandler._identityPopup.hidePopup();
+ return promise;
+}
+
+add_task(function* testMainViewVisible() {
+ let tab = gBrowser.selectedTab = gBrowser.addTab();
+ yield promiseTabLoadEvent(tab, PERMISSIONS_PAGE);
+
+ let permissionsList = document.getElementById("identity-popup-permission-list");
+ let emptyLabel = permissionsList.nextSibling.nextSibling;
+
+ yield openIdentityPopup();
+
+ ok(!is_hidden(emptyLabel), "List of permissions is empty");
+
+ yield closeIdentityPopup();
+
+ SitePermissions.set(gBrowser.currentURI, "camera", SitePermissions.ALLOW);
+
+ yield openIdentityPopup();
+
+ ok(is_hidden(emptyLabel), "List of permissions is not empty");
+
+ let labelText = SitePermissions.getPermissionLabel("camera");
+ let labels = permissionsList.querySelectorAll(".identity-popup-permission-label");
+ is(labels.length, 1, "One permission visible in main view");
+ is(labels[0].textContent, labelText, "Correct value");
+
+ let img = permissionsList.querySelector("image.identity-popup-permission-icon");
+ ok(img, "There is an image for the permissions");
+ ok(img.classList.contains("camera-icon"), "proper class is in image class");
+
+ yield closeIdentityPopup();
+
+ SitePermissions.remove(gBrowser.currentURI, "camera");
+
+ yield openIdentityPopup();
+
+ ok(!is_hidden(emptyLabel), "List of permissions is empty");
+
+ yield closeIdentityPopup();
+});
+
+add_task(function* testIdentityIcon() {
+ let {gIdentityHandler} = gBrowser.ownerGlobal;
+ let tab = gBrowser.selectedTab = gBrowser.addTab();
+ yield promiseTabLoadEvent(tab, PERMISSIONS_PAGE);
+
+ SitePermissions.set(gBrowser.currentURI, "geo", SitePermissions.ALLOW);
+
+ ok(gIdentityHandler._identityBox.classList.contains("grantedPermissions"),
+ "identity-box signals granted permissions");
+
+ SitePermissions.remove(gBrowser.currentURI, "geo");
+
+ ok(!gIdentityHandler._identityBox.classList.contains("grantedPermissions"),
+ "identity-box doesn't signal granted permissions");
+
+ SitePermissions.set(gBrowser.currentURI, "camera", SitePermissions.BLOCK);
+
+ ok(!gIdentityHandler._identityBox.classList.contains("grantedPermissions"),
+ "identity-box doesn't signal granted permissions");
+
+ SitePermissions.set(gBrowser.currentURI, "cookie", SitePermissions.SESSION);
+
+ ok(gIdentityHandler._identityBox.classList.contains("grantedPermissions"),
+ "identity-box signals granted permissions");
+
+ SitePermissions.remove(gBrowser.currentURI, "geo");
+ SitePermissions.remove(gBrowser.currentURI, "camera");
+ SitePermissions.remove(gBrowser.currentURI, "cookie");
+});
+
+add_task(function* testCancelPermission() {
+ let tab = gBrowser.selectedTab = gBrowser.addTab();
+ yield promiseTabLoadEvent(tab, PERMISSIONS_PAGE);
+
+ let permissionsList = document.getElementById("identity-popup-permission-list");
+ let emptyLabel = permissionsList.nextSibling.nextSibling;
+
+ SitePermissions.set(gBrowser.currentURI, "geo", SitePermissions.ALLOW);
+ SitePermissions.set(gBrowser.currentURI, "camera", SitePermissions.BLOCK);
+
+ yield openIdentityPopup();
+
+ ok(is_hidden(emptyLabel), "List of permissions is not empty");
+
+ let cancelButtons = permissionsList
+ .querySelectorAll(".identity-popup-permission-remove-button");
+
+ cancelButtons[0].click();
+ let labels = permissionsList.querySelectorAll(".identity-popup-permission-label");
+ is(labels.length, 1, "One permission should be removed");
+ cancelButtons[1].click();
+ labels = permissionsList.querySelectorAll(".identity-popup-permission-label");
+ is(labels.length, 0, "One permission should be removed");
+
+ yield closeIdentityPopup();
+});
+
+add_task(function* testPermissionHints() {
+ let tab = gBrowser.selectedTab = gBrowser.addTab();
+ yield promiseTabLoadEvent(tab, PERMISSIONS_PAGE);
+
+ let permissionsList = document.getElementById("identity-popup-permission-list");
+ let emptyHint = document.getElementById("identity-popup-permission-empty-hint");
+ let reloadHint = document.getElementById("identity-popup-permission-reload-hint");
+
+ yield openIdentityPopup();
+
+ ok(!is_hidden(emptyHint), "Empty hint is visible");
+ ok(is_hidden(reloadHint), "Reload hint is hidden");
+
+ yield closeIdentityPopup();
+
+ SitePermissions.set(gBrowser.currentURI, "geo", SitePermissions.ALLOW);
+ SitePermissions.set(gBrowser.currentURI, "camera", SitePermissions.BLOCK);
+
+ yield openIdentityPopup();
+
+ ok(is_hidden(emptyHint), "Empty hint is hidden");
+ ok(is_hidden(reloadHint), "Reload hint is hidden");
+
+ let cancelButtons = permissionsList
+ .querySelectorAll(".identity-popup-permission-remove-button");
+ SitePermissions.remove(gBrowser.currentURI, "camera");
+
+ cancelButtons[0].click();
+ ok(is_hidden(emptyHint), "Empty hint is hidden");
+ ok(!is_hidden(reloadHint), "Reload hint is visible");
+
+ cancelButtons[1].click();
+ ok(is_hidden(emptyHint), "Empty hint is hidden");
+ ok(!is_hidden(reloadHint), "Reload hint is visible");
+
+ yield closeIdentityPopup();
+ yield promiseTabLoadEvent(tab, PERMISSIONS_PAGE);
+ yield openIdentityPopup();
+
+ ok(!is_hidden(emptyHint), "Empty hint is visible after reloading");
+ ok(is_hidden(reloadHint), "Reload hint is hidden after reloading");
+
+ yield closeIdentityPopup();
+});
+
+add_task(function* testPermissionIcons() {
+ let {gIdentityHandler} = gBrowser.ownerGlobal;
+ let tab = gBrowser.selectedTab = gBrowser.addTab();
+ yield promiseTabLoadEvent(tab, PERMISSIONS_PAGE);
+
+ SitePermissions.set(gBrowser.currentURI, "camera", SitePermissions.ALLOW);
+ SitePermissions.set(gBrowser.currentURI, "geo", SitePermissions.BLOCK);
+ SitePermissions.set(gBrowser.currentURI, "microphone", SitePermissions.SESSION);
+
+ let geoIcon = gIdentityHandler._identityBox
+ .querySelector(".blocked-permission-icon[data-permission-id='geo']");
+ ok(geoIcon.hasAttribute("showing"), "blocked permission icon is shown");
+
+ let cameraIcon = gIdentityHandler._identityBox
+ .querySelector(".blocked-permission-icon[data-permission-id='camera']");
+ ok(!cameraIcon.hasAttribute("showing"),
+ "allowed permission icon is not shown");
+
+ let microphoneIcon = gIdentityHandler._identityBox
+ .querySelector(".blocked-permission-icon[data-permission-id='microphone']");
+ ok(!microphoneIcon.hasAttribute("showing"),
+ "allowed permission icon is not shown");
+
+ SitePermissions.remove(gBrowser.currentURI, "geo");
+
+ ok(!geoIcon.hasAttribute("showing"),
+ "blocked permission icon is not shown after reset");
+});