fix COLR font check being racy
also make sure it doesn't run more than once. keeping the FF sniffing because missing "extract canvas data" permissions would still break the check.pull/21833/head
							parent
							
								
									9914bac24d
								
							
						
					
					
						commit
						cf704fd2f1
					
				| 
						 | 
				
			
			@ -21,21 +21,16 @@ limitations under the License.
 | 
			
		|||
 * MIT license
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
let colrFontSupported = undefined;
 | 
			
		||||
 | 
			
		||||
async function isColrFontSupported() {
 | 
			
		||||
    if (colrFontSupported !== undefined) {
 | 
			
		||||
        return colrFontSupported;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    console.log("Checking for COLR support");
 | 
			
		||||
 | 
			
		||||
    // Firefox has supported COLR fonts since version 26
 | 
			
		||||
    // but doesn't support the check below with content blocking enabled.
 | 
			
		||||
    // but doesn't support the check below without
 | 
			
		||||
    // "Extract canvas data" permissions
 | 
			
		||||
    // when content blocking is enabled.
 | 
			
		||||
    if (navigator.userAgent.includes("Firefox")) {
 | 
			
		||||
        colrFontSupported = true;
 | 
			
		||||
        console.log("Browser is Firefox - assuming COLR is supported");
 | 
			
		||||
        return colrFontSupported;
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
| 
						 | 
				
			
			@ -61,26 +56,25 @@ async function isColrFontSupported() {
 | 
			
		|||
 | 
			
		||||
        img.src = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svg);
 | 
			
		||||
 | 
			
		||||
        // FIXME wait for safari load our colr font
 | 
			
		||||
        const wait = ms => new Promise((r, j)=>setTimeout(r, ms));
 | 
			
		||||
        await wait(500);
 | 
			
		||||
 | 
			
		||||
        console.log("Waiting for COLR SVG to load");
 | 
			
		||||
        await new Promise(resolve => img.onload = resolve);
 | 
			
		||||
        console.log("Drawing canvas to detect COLR support");
 | 
			
		||||
        context.drawImage(img, 0, 0);
 | 
			
		||||
        colrFontSupported = (context.getImageData(10, 10, 1, 1).data[0] === 200);
 | 
			
		||||
        const colrFontSupported = (context.getImageData(10, 10, 1, 1).data[0] === 200);
 | 
			
		||||
        console.log("Canvas check revealed COLR is supported? " + colrFontSupported);
 | 
			
		||||
        return colrFontSupported;
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
        console.error("Couldn't load COLR font", e);
 | 
			
		||||
        colrFontSupported = false;
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return colrFontSupported;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
let colrFontCheckStarted = false;
 | 
			
		||||
export async function fixupColorFonts() {
 | 
			
		||||
    if (colrFontSupported !== undefined) {
 | 
			
		||||
    if (colrFontCheckStarted) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    colrFontCheckStarted = true;
 | 
			
		||||
 | 
			
		||||
    if (await isColrFontSupported()) {
 | 
			
		||||
        const path = `url('${require("../../res/fonts/Twemoji_Mozilla/TwemojiMozilla-colr.woff2")}')`;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue