WECA-1218: wait for empty JS call stack before calling view command #110
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.
Currently there is an existing bug within React Native that causes a race condition in iOS where the view command is executed before their views are mounted, causing view commands to fail.
We seek to minimize this issue by wrapping view command execution with a
setTimeout
that will wait until the JS call stack is empty before executing the view command, which serves to give view mounting a chance to finish before view commands are called.There is a possibility of privacy leakage since it's possible that our view scan may read masked values after the view is mounted, but before the view command is called. However, doing a stress test with a scenario where we create 1000 views with each button tap did not result in accidental text value capture in the flatbuffer. (session)
Under normal usage, we hope that this workaround will be robust enough to support code-first privacy rules while React Native works the solution.