/* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; /* A whitelist of images that are loaded at startup but not shown. * List items support the following attributes: * - file: The location of the loaded image file. * - hidpi: An alternative hidpi file location for retina screens, if one exists. * May be the magic string in strange cases where * only the low-resolution image is loaded but not shown. * - platforms: An array of the platforms where the issue is occurring. * Possible values are linux, win, macosx. * - intermittentNotLoaded: an array of platforms where this image is * intermittently not loaded, e.g. because it is * loaded during the time we stop recording. * - intermittentShown: An array of platforms where this image is * intermittently shown, contrary to what our * whitelist says. * - photon: If true, this entry only applies for builds with the Photon theme. * If false, this entry only applies for builds without the Photon theme. * If undefined, this entry applies for both Photon and non-Photon builds. * * Please don't add items to this list. Please remove items from this list. */ const whitelist = [ // Photon-only entries { file: "chrome://browser/skin/stop.svg", platforms: ["linux", "win", "macosx"], }, { file: "chrome://browser/skin/bookmark-hollow.svg", platforms: ["linux", "win", "macosx"], }, { file: "chrome://browser/skin/page-action.svg", platforms: ["linux", "win", "macosx"], }, // Shared entries { file: "chrome://browser/skin/arrow-left.svg", platforms: ["linux", "win", "macosx"], }, { file: "chrome://browser/skin/arrow-dropdown-16.svg", platforms: ["linux", "win", "macosx"], }, { file: "chrome://browser/skin/fxa/sync-illustration.svg", platforms: ["linux", "win", "macosx"], }, { file: "chrome://browser/skin/tabbrowser/tab-overflow-indicator.png", platforms: ["linux", "win", "macosx"], }, { file: "chrome://browser/skin/places/toolbarDropMarker.png", platforms: ["linux", "win", "macosx"], }, { file: "chrome://browser/skin/tracking-protection-16.svg#enabled", platforms: ["linux", "win", "macosx"], }, { file: "chrome://global/skin/icons/autoscroll.png", platforms: ["linux", "win", "macosx"], }, { file: "chrome://browser/skin/tabbrowser/tabDragIndicator.png", hidpi: "chrome://browser/skin/tabbrowser/tabDragIndicator@2x.png", platforms: ["linux", "win", "macosx"], }, { file: "resource://gre-resources/loading-image.png", platforms: ["win", "macosx"], intermittentNotLoaded: ["win", "macosx"], }, { file: "resource://gre-resources/broken-image.png", platforms: ["win", "macosx"], intermittentNotLoaded: ["win", "macosx"], }, { file: "chrome://browser/skin/chevron.svg", platforms: ["win", "linux", "macosx"], }, { file: "chrome://global/skin/icons/resizer.png", platforms: ["win"], }, ]; add_task(async function() { let startupRecorder = Cc["@mozilla.org/test/startuprecorder;1"].getService().wrappedJSObject; await startupRecorder.done; let data = startupRecorder.data.images; let filteredWhitelist = whitelist.filter(el => { return el.platforms.includes(AppConstants.platform); }); let loadedImages = data["image-loading"]; let shownImages = data["image-drawing"]; for (let loaded of loadedImages.values()) { let whitelistItem = filteredWhitelist.find(el => { if (window.devicePixelRatio >= 2 && el.hidpi && el.hidpi == loaded) { return true; } return el.file == loaded; }); if (whitelistItem) { if (!whitelistItem.intermittentShown || !whitelistItem.intermittentShown.includes(AppConstants.platform)) { todo(shownImages.has(loaded), `Whitelisted image ${loaded} should not have been shown.`); } continue; } ok(shownImages.has(loaded), `Loaded image ${loaded} should have been shown.`); } // Check for unneeded whitelist entries. for (let item of filteredWhitelist) { if (!item.intermittentNotLoaded || !item.intermittentNotLoaded.includes(AppConstants.platform)) { if (window.devicePixelRatio >= 2 && item.hidpi) { if (item.hidpi != "") { ok(loadedImages.has(item.hidpi), `Whitelisted image ${item.hidpi} should have been loaded.`); } } else { ok(loadedImages.has(item.file), `Whitelisted image ${item.file} should have been loaded.`); } } } });