RESOLVED FIXED Bug 194742
AX: PSON: Going back from apple.com to search results, cannot interact with HTML content. Disabling Swap Processes on Cross-Site Navigation resolves the issue.
https://bugs.webkit.org/show_bug.cgi?id=194742
Summary AX: PSON: Going back from apple.com to search results, cannot interact with H...
chris fleizach
Reported 2019-02-16 01:17:31 PST
1. Open Safari, enable VOiceOver. 2. Command-l with no windows open. 3. In the resulting search field type iphone xs. 4. Press return, then navigate VO to the HTML content. 5. Interact, then VO-Command-h to the first web result, not ad, with apple.com. 6. VO-space to activate the link. 7. Navigate the page to the first heading, then VO-right to the first paragraph. 8. Enough surfing this page, Command-[ (left bracket) to go back. 9. Attempt to navigate the search results page again. Actual Results: Focus tossed out of HTML content, and no access to the HTML content at this point. Expected Results: VO should have actually landed on the link pressed in step 6. <rdar://problem/47677951>
Attachments
patch (10.45 KB, patch)
2019-02-16 01:25 PST, chris fleizach
no flags
patch (10.44 KB, patch)
2019-02-16 01:27 PST, chris fleizach
ews-watchlist: commit-queue-
Archive of layout-test-results from ews101 for mac-highsierra (2.45 MB, application/zip)
2019-02-16 02:32 PST, EWS Watchlist
no flags
Archive of layout-test-results from ews107 for mac-highsierra-wk2 (2.73 MB, application/zip)
2019-02-16 02:47 PST, EWS Watchlist
no flags
Archive of layout-test-results from ews117 for mac-highsierra (2.06 MB, application/zip)
2019-02-16 03:15 PST, EWS Watchlist
no flags
patch (23.90 KB, patch)
2019-02-17 13:19 PST, chris fleizach
no flags
patch (13.42 KB, patch)
2019-02-17 13:23 PST, chris fleizach
no flags
chris fleizach
Comment 1 2019-02-16 01:25:25 PST
chris fleizach
Comment 2 2019-02-16 01:27:14 PST
EWS Watchlist
Comment 3 2019-02-16 02:32:11 PST
Comment on attachment 362213 [details] patch Attachment 362213 [details] did not pass mac-ews (mac): Output: https://webkit-queues.webkit.org/results/11171514 New failing tests: accessibility/mac/input-type-change-crash.html accessibility/mac/loaded-notification.html
EWS Watchlist
Comment 4 2019-02-16 02:32:13 PST
Created attachment 362215 [details] Archive of layout-test-results from ews101 for mac-highsierra The attached test failures were seen while running run-webkit-tests on the mac-ews. Bot: ews101 Port: mac-highsierra Platform: Mac OS X 10.13.6
EWS Watchlist
Comment 5 2019-02-16 02:47:43 PST
Comment on attachment 362213 [details] patch Attachment 362213 [details] did not pass mac-wk2-ews (mac-wk2): Output: https://webkit-queues.webkit.org/results/11171543 New failing tests: accessibility/mac/input-type-change-crash.html accessibility/mac/loaded-notification.html
EWS Watchlist
Comment 6 2019-02-16 02:47:45 PST
Created attachment 362216 [details] Archive of layout-test-results from ews107 for mac-highsierra-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews107 Port: mac-highsierra-wk2 Platform: Mac OS X 10.13.6
EWS Watchlist
Comment 7 2019-02-16 03:15:06 PST
Comment on attachment 362213 [details] patch Attachment 362213 [details] did not pass mac-debug-ews (mac): Output: https://webkit-queues.webkit.org/results/11171560 New failing tests: accessibility/mac/input-type-change-crash.html accessibility/mac/loaded-notification.html
EWS Watchlist
Comment 8 2019-02-16 03:15:07 PST
Created attachment 362217 [details] Archive of layout-test-results from ews117 for mac-highsierra The attached test failures were seen while running run-webkit-tests on the mac-debug-ews. Bot: ews117 Port: mac-highsierra Platform: Mac OS X 10.13.6
Geoffrey Garen
Comment 9 2019-02-16 09:08:44 PST
Comment on attachment 362213 [details] patch View in context: https://bugs.webkit.org/attachment.cgi?id=362213&action=review Thanks for the patch, Chris. I want to review and help get this fixed, but I'm new to this code, and I have some questions. > Source/WebCore/accessibility/mac/AXObjectCacheMac.mm:522 > + // send a load complete before VoiceOver has time to register for the notification. send => sends Do we need this change on iOS too? What about other accessibility platforms? From this comment, it sounds like we still have a race condition, only less so. Why did moving code to the UI process reduce the race condition? Is there a way to eliminate it completely? > Source/WebKit/WebProcess/WebPage/WebPage.cpp:717 > + platformReinitialize(); Why don't we need to send the RegisterWebProcessAccessibilityToken message when we first create a page (in WebProcess::createWebPage())?
Geoffrey Garen
Comment 10 2019-02-16 09:09:21 PST
These test failures look real: accessibility/mac/input-type-change-crash.html [ Timeout ] accessibility/mac/loaded-notification.html [ Timeout ]
chris fleizach
Comment 11 2019-02-16 09:41:12 PST
Comment on attachment 362213 [details] patch View in context: https://bugs.webkit.org/attachment.cgi?id=362213&action=review >> Source/WebCore/accessibility/mac/AXObjectCacheMac.mm:522 >> + // send a load complete before VoiceOver has time to register for the notification. > > send => sends > > Do we need this change on iOS too? What about other accessibility platforms? > > From this comment, it sounds like we still have a race condition, only less so. Why did moving code to the UI process reduce the race condition? Is there a way to eliminate it completely? without hearing feedback about issues on iOS, I'd rather just leave as is since we probably won't be able to get enough testing coverage in time. I don't think the other platforms handle this notification. They also likely have different notification requirements. This specific problem is local to macOS only as far as I can tell (due to the AX architecture, I also don't think we have this problem on iOS). I actually think this removes the race condition. VO is going to register for notifications on UIProcess right away. Then regardless of when these WebProcess's come and go it can still receive notifications. >> Source/WebKit/WebProcess/WebPage/WebPage.cpp:717 >> + platformReinitialize(); > > Why don't we need to send the RegisterWebProcessAccessibilityToken message when we first create a page (in WebProcess::createWebPage())? I believe it gets sent in platformInitialize() which looks like it happens when WebPageProxy is created
Geoffrey Garen
Comment 12 2019-02-16 13:11:27 PST
> > Do we need this change on iOS too? What about other accessibility platforms? > > > > From this comment, it sounds like we still have a race condition, only less so. Why did moving code to the UI process reduce the race condition? Is there a way to eliminate it completely? > > without hearing feedback about issues on iOS, I'd rather just leave as is > since we probably won't be able to get enough testing coverage in time. Sounds good. Probably best to remove the change to WebPageIOS then. > I actually think this removes the race condition. VO is going to register > for notifications on UIProcess right away. Then regardless of when these > WebProcess's come and go it can still receive notifications. Sounds good. Can you update the comment to explain moving the code to the UI process, where VO registers for notifications, synchronizes the code with VO? > > Why don't we need to send the RegisterWebProcessAccessibilityToken message when we first create a page (in WebProcess::createWebPage())? > > I believe it gets sent in platformInitialize() which looks like it happens > when WebPageProxy is created Can platformInitialize() and reinitialize() share a function to do this registration?
chris fleizach
Comment 13 2019-02-17 12:35:59 PST
(In reply to Geoffrey Garen from comment #12) > > > Do we need this change on iOS too? What about other accessibility platforms? > > > > > > From this comment, it sounds like we still have a race condition, only less so. Why did moving code to the UI process reduce the race condition? Is there a way to eliminate it completely? > > > > > without hearing feedback about issues on iOS, I'd rather just leave as is > > since we probably won't be able to get enough testing coverage in time. > > Sounds good. Probably best to remove the change to WebPageIOS then. We still need that specific iOS change. We have 2 things going on in this patch 1) Handling the platformRe-initialization due to the new process model 2) Improve reliability of AXLoaded notifications which got noticeably worse with the new process model. We only need 2) on the Mac (for now). But we'll need 1) on both platforms (because they both use new the process model) > > > I actually think this removes the race condition. VO is going to register > > for notifications on UIProcess right away. Then regardless of when these > > WebProcess's come and go it can still receive notifications. > > Sounds good. Can you update the comment to explain moving the code to the UI > process, where VO registers for notifications, synchronizes the code with VO? > > > > Why don't we need to send the RegisterWebProcessAccessibilityToken message when we first create a page (in WebProcess::createWebPage())? > > > > I believe it gets sent in platformInitialize() which looks like it happens > > when WebPageProxy is created > > Can platformInitialize() and reinitialize() share a function to do this > registration?
chris fleizach
Comment 14 2019-02-17 13:19:50 PST
chris fleizach
Comment 15 2019-02-17 13:23:00 PST
Chris Dumez
Comment 16 2019-02-18 07:51:13 PST
Comment on attachment 362247 [details] patch r=me
WebKit Commit Bot
Comment 17 2019-02-18 09:17:51 PST
Comment on attachment 362247 [details] patch Clearing flags on attachment: 362247 Committed r241721: <https://trac.webkit.org/changeset/241721>
WebKit Commit Bot
Comment 18 2019-02-18 09:17:53 PST
All reviewed patches have been landed. Closing bug.
Tim Horton
Comment 19 2019-07-10 23:35:30 PDT
It appears to me that the new calls to NSAccessibilityPostNotification cause accessibility to be enabled in all Web Content processes for seemingly no reason. Is that right/is that a problem?
chris fleizach
Comment 20 2019-07-10 23:40:35 PDT
(In reply to Tim Horton from comment #19) > It appears to me that the new calls to NSAccessibilityPostNotification cause > accessibility to be enabled in all Web Content processes for seemingly no > reason. Is that right/is that a problem? I think by design accessibility is generally always on in AppKit apps. WebKit goes above and beyond by tracking this and doing different work. So with that said, it probably makes sense to check if accessibility is enabled before calling these post notifications
Note You need to log in before you can comment on or make changes to this bug.