Bug 1334842 - Fix intermittent browser_temporary_permissions.js. r=nhnt11
This intermittent was likely occurring because we set the expiry timeout
for temporary permissions to a really low value in the previous test.
The failing test was only failing on slow machines, leading me to believe
that the time between setting and checking was larger than the 500ms timeout
defined in the previous test. Thus, the permission was reset on checking it.
The expiry pref was set using pushPrefEnv, which restores prefs only after
the entire test was run. To just eradicate this category of problems in
the future I moved the test that manipulates the expiry into its own file.
MozReview-Commit-ID: 3mc5xHY4XLn
--- a/browser/base/content/test/permissions/browser.ini
+++ b/browser/base/content/test/permissions/browser.ini
@@ -1,14 +1,13 @@
[DEFAULT]
support-files=
head.js
+ permissions.html
[browser_permissions.js]
-support-files =
- permissions.html
[browser_temporary_permissions.js]
support-files =
- permissions.html
temporary_permissions_subframe.html
../webrtc/get_user_media.html
+[browser_temporary_permissions_expiry.js]
[browser_temporary_permissions_navigation.js]
[browser_temporary_permissions_tabs.js]
--- a/browser/base/content/test/permissions/browser_temporary_permissions.js
+++ b/browser/base/content/test/permissions/browser_temporary_permissions.js
@@ -4,19 +4,16 @@
"use strict";
Cu.import("resource:///modules/E10SUtils.jsm");
const ORIGIN = "https://example.com";
const PERMISSIONS_PAGE = getRootDirectory(gTestPath).replace("chrome://mochitests/content", ORIGIN) + "permissions.html";
const SUBFRAME_PAGE = getRootDirectory(gTestPath).replace("chrome://mochitests/content", ORIGIN) + "temporary_permissions_subframe.html";
-const EXPIRE_TIME_MS = 100;
-const TIMEOUT_MS = 500;
-
// Test that setting temp permissions triggers a change in the identity block.
add_task(function* testTempPermissionChangeEvents() {
let uri = NetUtil.newURI(ORIGIN);
let id = "geo";
yield BrowserTestUtils.withNewTab(uri.spec, function*(browser) {
SitePermissions.set(uri, id, SitePermissions.BLOCK, SitePermissions.SCOPE_TEMPORARY, browser);
@@ -30,77 +27,25 @@ add_task(function* testTempPermissionCha
Assert.notEqual(geoIcon.boxObject.width, 0, "geo anchor should be visible");
SitePermissions.remove(uri, id, browser);
Assert.equal(geoIcon.boxObject.width, 0, "geo anchor should not be visible");
});
});
-// Test that temporary permissions can be re-requested after they expired
-// and that the identity block is updated accordingly.
-// TODO (bug 1349144): Write a check for webrtc permissions,
-// because they use a different code path.
-add_task(function* testTempPermissionRequestAfterExpiry() {
- yield SpecialPowers.pushPrefEnv({set: [
- ["privacy.temporary_permission_expire_time_ms", EXPIRE_TIME_MS],
- ]});
-
- let uri = NetUtil.newURI(ORIGIN);
- let id = "geo";
-
- yield BrowserTestUtils.withNewTab(PERMISSIONS_PAGE, function*(browser) {
- let blockedIcon = gIdentityHandler._identityBox
- .querySelector(`.blocked-permission-icon[data-permission-id='${id}']`);
-
- SitePermissions.set(uri, id, SitePermissions.BLOCK, SitePermissions.SCOPE_TEMPORARY, browser);
-
- Assert.deepEqual(SitePermissions.get(uri, id, browser), {
- state: SitePermissions.BLOCK,
- scope: SitePermissions.SCOPE_TEMPORARY,
- });
-
- ok(blockedIcon.hasAttribute("showing"), "blocked permission icon is shown");
-
- yield new Promise((c) => setTimeout(c, TIMEOUT_MS));
-
- Assert.deepEqual(SitePermissions.get(uri, id, browser), {
- state: SitePermissions.UNKNOWN,
- scope: SitePermissions.SCOPE_PERSISTENT,
- });
-
- let popupshown = BrowserTestUtils.waitForEvent(PopupNotifications.panel, "popupshown");
-
- // Request a permission;
- yield BrowserTestUtils.synthesizeMouseAtCenter(`#${id}`, {}, browser);
-
- yield popupshown;
-
- ok(!blockedIcon.hasAttribute("showing"), "blocked permission icon is not shown");
-
- let popuphidden = BrowserTestUtils.waitForEvent(PopupNotifications.panel, "popuphidden");
-
- let notification = PopupNotifications.panel.firstChild;
- EventUtils.synthesizeMouseAtCenter(notification.secondaryButton, {});
-
- yield popuphidden;
-
- SitePermissions.remove(uri, id, browser);
- });
-});
-
// Test that temp blocked permissions requested by subframes (with a different URI) affect the whole page.
add_task(function* testTempPermissionSubframes() {
let uri = NetUtil.newURI(ORIGIN);
let id = "geo";
yield BrowserTestUtils.withNewTab(SUBFRAME_PAGE, function*(browser) {
let popupshown = BrowserTestUtils.waitForEvent(PopupNotifications.panel, "popupshown");
- // Request a permission;
+ // Request a permission.
yield ContentTask.spawn(browser, uri.host, function(host) {
E10SUtils.wrapHandlingUserInput(content, true, function() {
let frame = content.document.getElementById("frame");
let frameDoc = frame.contentWindow.document;
// Make sure that the origin of our test page is different.
Assert.notEqual(frameDoc.location.host, host);
new file mode 100644
--- /dev/null
+++ b/browser/base/content/test/permissions/browser_temporary_permissions_expiry.js
@@ -0,0 +1,62 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const ORIGIN = "https://example.com";
+const PERMISSIONS_PAGE = getRootDirectory(gTestPath).replace("chrome://mochitests/content", ORIGIN) + "permissions.html";
+
+const EXPIRE_TIME_MS = 100;
+const TIMEOUT_MS = 500;
+
+// Test that temporary permissions can be re-requested after they expired
+// and that the identity block is updated accordingly.
+// TODO (bug 1349144): Write a check for webrtc permissions,
+// because they use a different code path.
+add_task(function* testTempPermissionRequestAfterExpiry() {
+ yield SpecialPowers.pushPrefEnv({set: [
+ ["privacy.temporary_permission_expire_time_ms", EXPIRE_TIME_MS],
+ ]});
+
+ let uri = NetUtil.newURI(ORIGIN);
+ let id = "geo";
+
+ yield BrowserTestUtils.withNewTab(PERMISSIONS_PAGE, function*(browser) {
+ let blockedIcon = gIdentityHandler._identityBox
+ .querySelector(`.blocked-permission-icon[data-permission-id='${id}']`);
+
+ SitePermissions.set(uri, id, SitePermissions.BLOCK, SitePermissions.SCOPE_TEMPORARY, browser);
+
+ Assert.deepEqual(SitePermissions.get(uri, id, browser), {
+ state: SitePermissions.BLOCK,
+ scope: SitePermissions.SCOPE_TEMPORARY,
+ });
+
+ ok(blockedIcon.hasAttribute("showing"), "blocked permission icon is shown");
+
+ yield new Promise((c) => setTimeout(c, TIMEOUT_MS));
+
+ Assert.deepEqual(SitePermissions.get(uri, id, browser), {
+ state: SitePermissions.UNKNOWN,
+ scope: SitePermissions.SCOPE_PERSISTENT,
+ });
+
+ let popupshown = BrowserTestUtils.waitForEvent(PopupNotifications.panel, "popupshown");
+
+ // Request a permission;
+ yield BrowserTestUtils.synthesizeMouseAtCenter(`#${id}`, {}, browser);
+
+ yield popupshown;
+
+ ok(!blockedIcon.hasAttribute("showing"), "blocked permission icon is not shown");
+
+ let popuphidden = BrowserTestUtils.waitForEvent(PopupNotifications.panel, "popuphidden");
+
+ let notification = PopupNotifications.panel.firstChild;
+ EventUtils.synthesizeMouseAtCenter(notification.secondaryButton, {});
+
+ yield popuphidden;
+
+ SitePermissions.remove(uri, id, browser);
+ });
+});