Просмотр исходного кода

add timeout when loading fonts (fix #799)

Gildas 4 лет назад
Родитель
Сommit
5caad0c8f8
1 измененных файлов с 10 добавлено и 8 удалено
  1. 10 8
      lib/single-file/modules/css-fonts-alt-minifier.js

+ 10 - 8
lib/single-file/modules/css-fonts-alt-minifier.js

@@ -222,9 +222,11 @@ async function processFontFaceRule(ruleData, fontInfo, fontURLs, fontTests, stat
 				if (FontFace) {
 					const fontFace = new FontFace("test-font", source.src);
 					try {
-						await fontFace.load();
-						await fontFace.loaded;
-						source.valid = true;
+						let timeout;
+						await Promise.race([
+							fontFace.load().then(() => fontFace.loaded).then(() => { source.valid = true; globalThis.clearTimeout(timeout); }),
+							new Promise(resolve => timeout = globalThis.setTimeout(() => { source.valid = true; resolve(); }, FONT_MAX_LOAD_DELAY))
+						]);						
 					} catch (error) {
 						const declarationFontURLs = fontURLs.get(srcDeclaration.data);
 						if (declarationFontURLs) {
@@ -232,11 +234,11 @@ async function processFontFaceRule(ruleData, fontInfo, fontURLs, fontTests, stat
 							if (fontURL) {
 								const fontFace = new FontFace("test-font", "url(" + fontURL + ")");
 								try {
-									await Promise.race(
-										[
-											fontFace.load().then(() => fontFace.loaded).then(() => source.valid = true),
-											new Promise(resolve => globalThis.setTimeout(() => { source.valid = true; resolve(); }, FONT_MAX_LOAD_DELAY))
-										]);
+									let timeout;
+									await Promise.race([
+										fontFace.load().then(() => fontFace.loaded).then(() => { source.valid = true; globalThis.clearTimeout(timeout); }),
+										new Promise(resolve => timeout = globalThis.setTimeout(() => { source.valid = true; resolve(); }, FONT_MAX_LOAD_DELAY))
+									]);
 								} catch (error) {
 									// ignored
 								}