Created attachment 408558 [details]
See test case, the page will
0. check the current focused element by looking at `document.activeElement`.
1. focus() the element
2. set visibility: hidden on the element
3. wait for 100ms
4. check the current focused element by looking at `document.activeElement` again.
On Chrome on step 4, the focused element is the body
On Safari and Firefox, the focused element is still the element.
1. The inconsistency suggests that there may be a spec issue here.
2. On Chrome sometime a micro task is enough for the focus to moved away, some times it is not.
Any change here should wait on the resolution of https://github.com/w3c/uievents/issues/236
Bug 29241 is the same issue, but with "display: none" rather than "visibility: hidden".