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 --- browser/base/content/test/favicons/head.js | 98 ++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 browser/base/content/test/favicons/head.js (limited to 'browser/base/content/test/favicons/head.js') diff --git a/browser/base/content/test/favicons/head.js b/browser/base/content/test/favicons/head.js new file mode 100644 index 0000000000..ce16afd33f --- /dev/null +++ b/browser/base/content/test/favicons/head.js @@ -0,0 +1,98 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +ChromeUtils.defineESModuleGetters(this, { + LinkHandlerParent: "resource:///actors/LinkHandlerParent.sys.mjs", + PlacesTestUtils: "resource://testing-common/PlacesTestUtils.sys.mjs", + PlacesUtils: "resource://gre/modules/PlacesUtils.sys.mjs", + + XPCShellContentUtils: + "resource://testing-common/XPCShellContentUtils.sys.mjs", +}); + +// Clear the network cache between every test to make sure we get a stable state +Services.cache2.clear(); + +function waitForFaviconMessage(isTabIcon = undefined, expectedURL = undefined) { + return new Promise((resolve, reject) => { + let listener = (name, data) => { + if (name != "SetIcon" && name != "SetFailedIcon") { + return; // Ignore unhandled messages + } + + // If requested filter out loads of the wrong kind of icon. + if (isTabIcon != undefined && isTabIcon != data.canUseForTab) { + return; + } + + if (expectedURL && data.originalURL != expectedURL) { + return; + } + + LinkHandlerParent.removeListenerForTests(listener); + + if (name == "SetIcon") { + resolve({ + iconURL: data.originalURL, + dataURL: data.iconURL, + canUseForTab: data.canUseForTab, + }); + } else { + reject({ + iconURL: data.originalURL, + canUseForTab: data.canUseForTab, + }); + } + }; + + LinkHandlerParent.addListenerForTests(listener); + }); +} + +function waitForFavicon(browser, url) { + return new Promise(resolve => { + let listener = { + onLinkIconAvailable(b, dataURI, iconURI) { + if (b !== browser || iconURI != url) { + return; + } + + gBrowser.removeTabsProgressListener(listener); + resolve(); + }, + }; + + gBrowser.addTabsProgressListener(listener); + }); +} + +function waitForLinkAvailable(browser) { + let resolve, reject; + + let listener = { + onLinkIconAvailable(b, dataURI, iconURI) { + // Ignore icons for other browsers or empty icons. + if (browser !== b || !iconURI) { + return; + } + + gBrowser.removeTabsProgressListener(listener); + resolve(iconURI); + }, + }; + + let promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + + gBrowser.addTabsProgressListener(listener); + }); + + promise.cancel = () => { + gBrowser.removeTabsProgressListener(listener); + + reject(); + }; + + return promise; +} -- cgit v1.2.3