diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /browser/base/content/test/favicons/browser_favicon_empty_data.js | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'browser/base/content/test/favicons/browser_favicon_empty_data.js')
-rw-r--r-- | browser/base/content/test/favicons/browser_favicon_empty_data.js | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/browser/base/content/test/favicons/browser_favicon_empty_data.js b/browser/base/content/test/favicons/browser_favicon_empty_data.js new file mode 100644 index 0000000000..5fb8b9b654 --- /dev/null +++ b/browser/base/content/test/favicons/browser_favicon_empty_data.js @@ -0,0 +1,72 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const TEST_ROOT = + "http://mochi.test:8888/browser/browser/base/content/test/favicons/"; + +const PAGE_URL = TEST_ROOT + "blank.html"; +const ICON_URL = TEST_ROOT + "file_bug970276_favicon1.ico"; +const ICON_DATAURI_START = "data:image/x-icon;base64,AAABAAEAEBAAAAAAAABoBQAA"; + +const EMPTY_PAGE_URL = TEST_ROOT + "file_favicon_empty.html"; +const EMPTY_ICON_URL = "data:image/x-icon"; + +add_task(async function () { + await BrowserTestUtils.withNewTab( + { gBrowser, url: PAGE_URL }, + async browser => { + let iconBox = gBrowser + .getTabForBrowser(browser) + .querySelector(".tab-icon-image"); + await addContentLinkForIconUrl(ICON_URL, browser); + Assert.ok( + browser.mIconURL.startsWith(ICON_DATAURI_START), + "Favicon is correctly set." + ); + + // Give some time to ensure the icon is rendered. + /* eslint-disable mozilla/no-arbitrary-setTimeout */ + await new Promise(resolve => setTimeout(resolve, 200)); + let firstIconShotDataURL = TestUtils.screenshotArea(iconBox, window); + + let browserLoaded = BrowserTestUtils.browserLoaded( + browser, + false, + EMPTY_PAGE_URL + ); + BrowserTestUtils.startLoadingURIString(browser, EMPTY_PAGE_URL); + let iconChanged = waitForFavicon(browser, EMPTY_ICON_URL); + await Promise.all([browserLoaded, iconChanged]); + Assert.equal(browser.mIconURL, EMPTY_ICON_URL, "Favicon was changed."); + + // Give some time to ensure the icon is rendered. + /* eslint-disable mozilla/no-arbitrary-setTimeout */ + await new Promise(resolve => setTimeout(resolve, 200)); + let secondIconShotDataURL = TestUtils.screenshotArea(iconBox, window); + + Assert.notEqual( + firstIconShotDataURL, + secondIconShotDataURL, + "Check the first icon didn't persist as the second one is invalid" + ); + } + ); +}); + +async function addContentLinkForIconUrl(url, browser) { + let iconChanged = waitForFavicon(browser, url); + info("Adding <link> to: " + url); + await ContentTask.spawn(browser, url, href => { + let doc = content.document; + let head = doc.head; + let link = doc.createElement("link"); + link.rel = "icon"; + link.href = href; + link.type = "image/png"; + head.appendChild(link); + }); + info("Awaiting icon change event for:" + url); + await iconChanged; +} |