Bug 1681302 - Poll for identity-popup-geo-container to be populated to fix intermittent failures. r=nhnt11

Differential Revision: https://phabricator.services.mozilla.com/D99231
This commit is contained in:
Paul Zuehlcke 2020-12-15 15:52:02 +00:00
parent fe922a75e5
commit 1534629245

View file

@ -3,6 +3,8 @@
"use strict"; "use strict";
requestLongerTimeout(2);
ChromeUtils.import("resource:///modules/PermissionUI.jsm", this); ChromeUtils.import("resource:///modules/PermissionUI.jsm", this);
ChromeUtils.import("resource:///modules/SitePermissions.jsm", this); ChromeUtils.import("resource:///modules/SitePermissions.jsm", this);
const { PermissionTestUtils } = ChromeUtils.import( const { PermissionTestUtils } = ChromeUtils.import(
@ -66,6 +68,12 @@ async function testIdentityPopupGeoContainer(
containerVisible, containerVisible,
timestampVisible timestampVisible
) { ) {
// The container holds the timestamp element, therefore we can't have a
// visible timestamp without the container.
if (timestampVisible && !containerVisible) {
ok(false, "Can't have timestamp without container");
}
// Only call openIdentityPopup if popup is closed, otherwise it does not resolve // Only call openIdentityPopup if popup is closed, otherwise it does not resolve
if (!gIdentityHandler._identityBox.hasAttribute("open")) { if (!gIdentityHandler._identityBox.hasAttribute("open")) {
await openIdentityPopup(); await openIdentityPopup();
@ -74,25 +82,27 @@ async function testIdentityPopupGeoContainer(
let checkContainer = checkForDOMElement( let checkContainer = checkForDOMElement(
containerVisible, containerVisible,
"identity-popup-geo-container" "identity-popup-geo-container"
).then(container => { );
if (containerVisible && timestampVisible) {
is( if (containerVisible && timestampVisible) {
container.childElementCount, // Wait for the geo container to be fully populated.
2, // The time label is computed async.
"identity-popup-geo-container should have two elements." let container = await checkContainer;
); await BrowserTestUtils.waitForCondition(
is( () => container.childElementCount == 2,
container.childNodes[0].classList[0], "identity-popup-geo-container should have two elements."
"identity-popup-permission-item", );
"Geo container should have permission item." is(
); container.childNodes[0].classList[0],
is( "identity-popup-permission-item",
container.childNodes[1].id, "Geo container should have permission item."
"geo-access-indicator-item", );
"Geo container should have indicator item." is(
); container.childNodes[1].id,
} "geo-access-indicator-item",
}); "Geo container should have indicator item."
);
}
let checkAccessIndicator = checkForDOMElement( let checkAccessIndicator = checkForDOMElement(
timestampVisible, timestampVisible,
"geo-access-indicator-item" "geo-access-indicator-item"