RESOLVED FIXED 141893
AX: iOS: scrollable elements do not allow 3-finger swipe (with VoiceOver)
https://bugs.webkit.org/show_bug.cgi?id=141893
Summary AX: iOS: scrollable elements do not allow 3-finger swipe (with VoiceOver)
Michael Johnston
Reported 2015-02-23 00:03:18 PST
Elements which have overflow: scroll; + -webkit-overflow-scrolling: touch; do not work with the 3-finger swipe gesture when VoiceOver is enabled. This worked in iOS 7. Expected result: VoiceOver should announce "Page N of M" where N is the current page and M is the total number of pages determined by scroll height Actual result: VoiceOver announces "Page 1 of 1" regardless of the scroll height
Attachments
patch (45.94 KB, patch)
2015-07-20 16:36 PDT, chris fleizach
no flags
patch (45.94 KB, patch)
2015-07-21 10:23 PDT, chris fleizach
no flags
patch (45.53 KB, patch)
2015-07-21 14:39 PDT, chris fleizach
mario: review+
Radar WebKit Bug Importer
Comment 1 2015-02-23 00:03:47 PST
chris fleizach
Comment 2 2015-07-20 16:36:39 PDT
chris fleizach
Comment 3 2015-07-21 10:23:31 PDT
chris fleizach
Comment 4 2015-07-21 14:39:52 PDT
Mario Sanchez Prada
Comment 5 2015-07-24 02:37:36 PDT
Comment on attachment 257204 [details] patch View in context: https://bugs.webkit.org/attachment.cgi?id=257204&action=review Overall looks good to me (and I like the idea of moving that into AccessibilityObject, too). Setting r+ with just a few small comments below... > Source/WebCore/ChangeLog:15 > + (WebCore::AccessibilityObject::scrollToGlobalPoint): It does not look like you modified this > Source/WebCore/ChangeLog:21 > + (WebCore::AccessibilityObject::lastKnownIsIgnoredValue): Same for this one (not modified) > Source/WebCore/ChangeLog:24 > + (WebCore::AccessibilityObject::getScrollableAreaIfScrollable): > + (WebCore::AccessibilityObject::scrollTo): Ditto for these two. > Source/WebCore/accessibility/AccessibilityObject.cpp:2538 > + for (; scrollers.second && !(scrollers.first = scrollers.second->getScrollableAreaIfScrollable()); scrollers.second = scrollers.second->parentObject()) { } I find this line a bit hard to read. What about this: // Search up the parent chain until we find the first one that's scrollable. scrollers.first = nullptr; scrollers.second = parentObject(); while (!scrollers.first && scrollers.second) { scrollers.first = scrollers.second->getScrollableAreaIfScrollable()); scrollers.second = scrollers.second->parentObject()); } Or even: // Search up the parent chain until we find the first one that's scrollable. scrollers.first = nullptr; for (scrollers.second = parentObject(); !scrollers.first && scrollers.second; scrollers.second = scrollers.second->parentObject()) scrollers.first = scrollers.second->getScrollableAreaIfScrollable()); > Source/WebCore/accessibility/AccessibilityObject.cpp:2565 > + std::pair<ScrollableArea*, AccessibilityObject*> scrollers; > + scrollAreaAndAncestor(scrollers); > + if (!scrollers.first) It looks like you could put these three lines in a separate function returning a ScrollableArea*, and use it from this and the previous two functions (but not from scrollByPage, as you also need the .second element there) > Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.mm:183 > - JSObjectCallAsFunction([mainFrame globalContext], m_notificationFunctionCallback, 0, 2, arguments, 0); > + JSObjectCallAsFunction([mainFrame globalContext], m_notificationFunctionCallback, 0, 3, arguments, 0); Nice catch
chris fleizach
Comment 6 2015-07-24 16:28:21 PDT
Note You need to log in before you can comment on or make changes to this bug.