Don't register the message handler with null #160
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This fixes an edge case where the worker is still loading but messages sent to it are accepted and sent to a
null
callback handler.On the worker side we make sure that there is never a point where the worker registers a
null
function as its handler formessage
. We also add a singlepostMessage("ready")
to the parent once we reach the end of the worker file.On the frame's worker mediator side, we add
Promise
that is only completed when it receives"ready"
from its worker. Once completed it stays completed for the life of theWorkerMediator
instance. Only once that internalPromise
is completed does the worker mediator start sending messages to the worker.The combination of these two things makes sure we aren't sending messages before the worker is ready. As far as I can tell from reading the spec and all documentation, none of this should be necessary as the
out
MessagePort
on the frame side should exist as soon as the worker is called for, and simply buffer messages until amessage
handler is registered on the worker side. In implementation though that didn't hold true.