In switch the FontFaceSet to loaded the promise is resolved outside of the task. This is not what is implemented in Chromium and Gecko and technically results in undefined behavior. It should be resolved inside the task. (Meaning the promise callbacks run after the event listener.)
Also consider removing the word 'synchronously' as it just adds confusion here and doesn't mean anything. And ideally switch to a more modern queuing algorithm such as queue a global task so the task source and relevant global object are also specified.
(This problem might occur multiple times. I only checked this one instance.)