enum FontFaceSetLoadStatus { "loading", "loaded" };

// https://drafts.csswg.org/css-font-loading/#fontfaceset
[Exposed=(Window,Worker)]
interface FontFaceSet : EventTarget {
    setlike<FontFace>;
    FontFaceSet add(FontFace font);
    boolean delete(FontFace font);
    undefined clear();

    // events for when loading state changes
    attribute EventHandler onloading;
    attribute EventHandler onloadingdone;
    attribute EventHandler onloadingerror;

    // check and start loads if appropriate
    // and fulfill promise when all loads complete
    Promise<sequence<FontFace>> load(CSSOMString font, optional CSSOMString text = " ");

    // return whether all fonts in the fontlist are loaded
    // (does not initiate load if not available)
    boolean check(CSSOMString font, optional CSSOMString text = " ");

    // async notification that font loading and layout operations are done
    readonly attribute Promise<FontFaceSet> ready;

    // loading state, "loading" while one or more fonts loading, "loaded" otherwise
    readonly attribute FontFaceSetLoadStatus status;
};

interface mixin FontFaceSource {
    readonly attribute FontFaceSet fonts;
};
