In case of the two ICE stacks being able to communicate directly in the same local network it is sufficient that only one side learns how to reach the other side. Because that makes it contact the other peer via a binding request. And the other side learn the candidate from the incoming binding request.
Your test result might also be different because Firefox still uses aggressive nomination in its ICE. So as soon as it receives a binding response it will declare success and start using that pair. Where other implementations using full nomination will not start on the first binding request + response exchange.
Best
Nils Ohlmeier