/* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; const TAB_URL = "data:text/html,foo"; add_task(async function() { const { tab, document } = await openAboutDebugging("tabs"); // Wait for initial tabs list which may be empty let tabsElement = getTabList(document); await waitUntilElement(".target-name", tabsElement); // Refresh tabsElement to get the .target-list element tabsElement = getTabList(document); let names = [...tabsElement.querySelectorAll(".target-name")]; const initialTabCount = names.length; info("Open a new background tab"); const newTab = await addTab(TAB_URL, { background: true }); info("Wait for the tab to appear in the list with the correct name"); const container = await waitUntilTabContainer("foo", document); info("Wait until the title to update"); await waitUntil(() => { return container.querySelector(".target-name").title === TAB_URL; }, 100); const icon = container.querySelector(".target-icon"); ok(icon && icon.src, "Tab icon found and src attribute is not empty"); info("Check if the tab icon is a valid image"); await new Promise(r => { const image = new Image(); image.onload = () => { ok(true, "Favicon is not a broken image"); r(); }; image.onerror = () => { ok(false, "Favicon is a broken image"); r(); }; image.src = icon.src; }); // Finally, close the tab await removeTab(newTab); info("Wait until the tab container is removed"); await waitUntil(() => !getTabContainer("foo", document), 100); // Check that the tab disappeared from the UI names = [...tabsElement.querySelectorAll("#tabs .target-name")]; is(names.length, initialTabCount, "The tab disappeared from the UI"); await closeAboutDebugging(tab); }); function getTabContainer(name, document) { const nameElements = [...document.querySelectorAll("#tabs .target-name")]; const nameElement = nameElements.filter( element => element.textContent === name )[0]; if (nameElement) { return nameElement.closest(".target-container"); } return null; } async function waitUntilTabContainer(name, document) { await waitUntil(() => { return getTabContainer(name, document); }); return getTabContainer(name, document); }