From @Pehrsons, reviewing the Gecko implementation:
Spec seems off here.
First it says:
Run the availability algorithm with options and promise. If it returns an exception, throw it and abort these steps.
However, the availability algorithm only throws errors:
If the current settings object’s relevant global object’s associated Document is NOT fully active, throw an InvalidStateError and abort these steps.
On top of that everything is done in serial. Seems odd to return a promise then. I assume the availability algorithm is missing an in parallel somewhere.
From @Pehrsons, reviewing the Gecko implementation: