head.js (2430B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 ChromeUtils.defineESModuleGetters(this, { 5 LinkHandlerParent: "resource:///actors/LinkHandlerParent.sys.mjs", 6 PlacesTestUtils: "resource://testing-common/PlacesTestUtils.sys.mjs", 7 PlacesUtils: "resource://gre/modules/PlacesUtils.sys.mjs", 8 9 XPCShellContentUtils: 10 "resource://testing-common/XPCShellContentUtils.sys.mjs", 11 }); 12 13 // Clear the network cache between every test to make sure we get a stable state 14 Services.cache2.clear(); 15 16 function waitForFaviconMessage(isTabIcon = undefined, expectedURL = undefined) { 17 return new Promise((resolve, reject) => { 18 let listener = (name, data) => { 19 if (name != "SetIcon" && name != "SetFailedIcon") { 20 return; // Ignore unhandled messages 21 } 22 23 // If requested filter out loads of the wrong kind of icon. 24 if (isTabIcon != undefined && isTabIcon == data.isRichIcon) { 25 return; 26 } 27 28 if (expectedURL && data.originalURL != expectedURL) { 29 return; 30 } 31 32 LinkHandlerParent.removeListenerForTests(listener); 33 34 if (name == "SetIcon") { 35 resolve({ 36 iconURL: data.originalURL, 37 isRichIcon: data.isRichIcon, 38 }); 39 } else { 40 reject({ 41 iconURL: data.originalURL, 42 isRichIcon: data.isRichIcon, 43 }); 44 } 45 }; 46 47 LinkHandlerParent.addListenerForTests(listener); 48 }); 49 } 50 51 function waitForFavicon(browser, url) { 52 return new Promise(resolve => { 53 let listener = { 54 onLinkIconAvailable(b, dataURI, iconURI) { 55 if (b !== browser || iconURI != url) { 56 return; 57 } 58 59 gBrowser.removeTabsProgressListener(listener); 60 resolve(); 61 }, 62 }; 63 64 gBrowser.addTabsProgressListener(listener); 65 }); 66 } 67 68 function waitForLinkAvailable(browser) { 69 let resolve, reject; 70 71 let listener = { 72 onLinkIconAvailable(b, dataURI, iconURI) { 73 // Ignore icons for other browsers or empty icons. 74 if (browser !== b || !iconURI) { 75 return; 76 } 77 78 gBrowser.removeTabsProgressListener(listener); 79 resolve(iconURI); 80 }, 81 }; 82 83 let promise = new Promise((res, rej) => { 84 resolve = res; 85 reject = rej; 86 87 gBrowser.addTabsProgressListener(listener); 88 }); 89 90 promise.cancel = () => { 91 gBrowser.removeTabsProgressListener(listener); 92 93 reject(); 94 }; 95 96 return promise; 97 }