From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../tabMediaIndicator/browser_destroy_iframe.js | 50 ++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 browser/base/content/test/tabMediaIndicator/browser_destroy_iframe.js (limited to 'browser/base/content/test/tabMediaIndicator/browser_destroy_iframe.js') diff --git a/browser/base/content/test/tabMediaIndicator/browser_destroy_iframe.js b/browser/base/content/test/tabMediaIndicator/browser_destroy_iframe.js new file mode 100644 index 0000000000..f977d1d664 --- /dev/null +++ b/browser/base/content/test/tabMediaIndicator/browser_destroy_iframe.js @@ -0,0 +1,50 @@ +const EMPTY_PAGE_URL = GetTestWebBasedURL("file_empty.html"); +const AUTPLAY_PAGE_URL = GetTestWebBasedURL("file_autoplay_media.html"); +const CORS_AUTPLAY_PAGE_URL = GetTestWebBasedURL( + "file_autoplay_media.html", + true +); + +/** + * When an iframe that has audible media gets destroyed, if there is no other + * audible playing media existing in the page, then the sound indicator should + * disappear. + */ +add_task(async function testDestroyAudibleIframe() { + const iframesURL = [AUTPLAY_PAGE_URL, CORS_AUTPLAY_PAGE_URL]; + for (let iframeURL of iframesURL) { + info(`open a tab, create an iframe and load an autoplay media page inside`); + const tab = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + EMPTY_PAGE_URL + ); + await createIframeAndLoadURL(tab, iframeURL); + + info(`sound indicator should appear because of audible playing media`); + await waitForTabSoundIndicatorAppears(tab); + + info(`sound indicator should disappear after destroying iframe`); + await removeIframe(tab); + await waitForTabSoundIndicatorDisappears(tab); + + info("remove tab"); + BrowserTestUtils.removeTab(tab); + } +}); + +function createIframeAndLoadURL(tab, url) { + // eslint-disable-next-line no-shadow + return SpecialPowers.spawn(tab.linkedBrowser, [url], async url => { + const iframe = content.document.createElement("iframe"); + content.document.body.appendChild(iframe); + iframe.src = url; + info(`load ${url} for iframe`); + await new Promise(r => (iframe.onload = r)); + }); +} + +function removeIframe(tab) { + return SpecialPowers.spawn(tab.linkedBrowser, [], _ => { + content.document.getElementsByTagName("iframe")[0].remove(); + }); +} -- cgit v1.2.3