mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-01 00:32:11 +00:00
f32815354c
A move is sent to the parent process as a hide and then a show, even if the LocalAccessible wasn't recreated. Previously, this meant that a new RemoteAccessible was created and the original RemoteAccessible was destroyed. This was particularly problematic if the Accessible had focus and the client cached focus. In that case, the client cache contained a dead Accessible, and since no focus event was fired (because it's the same Accessible in the content process), focus in the client was broken. This also meant that there was a full cache push for a moved Accessible, which was wasteful. To fix this: 1. Keep track of LocalAccessibles inserted during a tick. 2. Keep track of LocalAccessibles moved during a tick, including descendants. If a LocalAccessible was inserted during the same tick (1), don't track it as a move. 3. Before processing mutation events, tell the parent process about which Accessibles are about to be moved (2). 4. When sending a subtree to the parent process, don't send cache info for an Accessible which is being moved (2). 5. When the parent process receives a hide event, if there is an Accessible that is about to be moved (3), don't shut it down; allow it to be reused. 6. When the parent process receives a show event, if there is an Accessible that has an existing RemoteAccessible (5), reuse it. Differential Revision: https://phabricator.services.mozilla.com/D132328 |
||
---|---|---|
.. | ||
browser | ||
crashtests | ||
mochitest |