Diff
Modified: trunk/LayoutTests/ChangeLog (187370 => 187371)
--- trunk/LayoutTests/ChangeLog 2015-07-24 23:24:38 UTC (rev 187370)
+++ trunk/LayoutTests/ChangeLog 2015-07-24 23:26:34 UTC (rev 187371)
@@ -1,3 +1,13 @@
+2015-07-24 Chris Fleizach <[email protected]>
+
+ AX: scrollable elements do not allow 3-finger swipe
+ https://bugs.webkit.org/show_bug.cgi?id=141893
+
+ Reviewed by Mario Sanchez Prada.
+
+ * platform/ios-simulator/accessibility/scroll-in-overflow-div-expected.txt: Added.
+ * platform/ios-simulator/accessibility/scroll-in-overflow-div.html: Added.
+
2015-07-24 Yusuke Suzuki <[email protected]>
Object.getOwnPropertySymbols on large list takes very long
Added: trunk/LayoutTests/platform/ios-simulator/accessibility/scroll-in-overflow-div-expected.txt (0 => 187371)
--- trunk/LayoutTests/platform/ios-simulator/accessibility/scroll-in-overflow-div-expected.txt (rev 0)
+++ trunk/LayoutTests/platform/ios-simulator/accessibility/scroll-in-overflow-div-expected.txt 2015-07-24 23:26:34 UTC (rev 187371)
@@ -0,0 +1,47 @@
+This makes sure that we can perform accessibility scroll actions inside overflow divs
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+AXScrollByPage received: data: AXScroll [position: 0.00 224.00]
+scroll down 0 : success true
+AXScrollByPage received: data: AXScroll [position: 0.00 448.00]
+scroll down 1 : success true
+AXScrollByPage received: data: AXScroll [position: 0.00 672.00]
+scroll down 2 : success true
+AXScrollByPage received: data: AXScroll [position: 0.00 712.00]
+scroll down 3 : success true
+scroll down 4 : success false
+AXScrollByPage received: data: AXScroll [position: 0.00 488.00]
+scroll up 0 : success true
+AXScrollByPage received: data: AXScroll [position: 0.00 264.00]
+scroll up 1 : success true
+AXScrollByPage received: data: AXScroll [position: 0.00 40.00]
+scroll up 2 : success true
+AXScrollByPage received: data: AXScroll [position: 0.00 0.00]
+scroll up 3 : success true
+scroll up 4 : success false
+AXScrollByPage received: data: AXScroll [position: 424.00 0.00]
+scroll left 0 : success true
+AXScrollByPage received: data: AXScroll [position: 848.00 0.00]
+scroll left 1 : success true
+AXScrollByPage received: data: AXScroll [position: 1272.00 0.00]
+scroll left 2 : success true
+AXScrollByPage received: data: AXScroll [position: 1696.00 0.00]
+scroll left 3 : success true
+AXScrollByPage received: data: AXScroll [position: 2120.00 0.00]
+scroll left 4 : success true
+AXScrollByPage received: data: AXScroll [position: 1696.00 0.00]
+scroll right 0 : success true
+AXScrollByPage received: data: AXScroll [position: 1272.00 0.00]
+scroll right 1 : success true
+AXScrollByPage received: data: AXScroll [position: 848.00 0.00]
+scroll right 2 : success true
+AXScrollByPage received: data: AXScroll [position: 424.00 0.00]
+scroll right 3 : success true
+AXScrollByPage received: data: AXScroll [position: 0.00 0.00]
+scroll right 4 : success true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/platform/ios-simulator/accessibility/scroll-in-overflow-div.html (0 => 187371)
--- trunk/LayoutTests/platform/ios-simulator/accessibility/scroll-in-overflow-div.html (rev 0)
+++ trunk/LayoutTests/platform/ios-simulator/accessibility/scroll-in-overflow-div.html 2015-07-24 23:26:34 UTC (rev 187371)
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<style>
+ body {
+ height: 2000px;
+ }
+ .container {
+ position: absolute;
+ top: 200px;
+ width: 500px;
+ height: 300px;
+ border: 2px solid black;
+ padding: 10px;
+ }
+
+ .overflow {
+
+ white-space: nowrap;
+ width: 400px;
+ height: 200px;
+ padding: 10px;
+ border: 2px solid blue;
+ overflow: scroll;
+ -webkit-overflow-scrolling: touch;
+ }
+</style>
+
+<script src=""
+<script>
+var successfullyParsed = false;
+</script>
+</head>
+<body id="body">
+
+ <div id="container" class="container" role="group">
+ <div class="overflow">
+ <p id="text1">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p id="text2">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p><p id="text3">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p></div>
+ </div>
+
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+
+ description("This makes sure that we can perform accessibility scroll actions inside overflow divs");
+
+ var count = 0;
+ window.jsTestIsAsync = true;
+ function focusCallback(element, notification, info) {
+
+ if (notification == "AXScrollByPage") {
+ debug(notification + " received: data: " + info.status);
+ }
+
+ // We should have 18 successful scrolls (2 will fail because we'll be at the border).
+ count++;
+ if (count == 18) {
+ finish();
+ }
+ }
+
+ if (window.accessibilityController) {
+
+ var content = accessibilityController.accessibleElementById("text1");
+ accessibilityController.addNotificationListener(focusCallback);
+
+ for (var k = 0; k < 5; k++) {
+ var success = content.scrollPageDown();
+ debug("scroll down " + k + " : success " + success);
+ }
+
+ for (var k = 0; k < 5; k++) {
+ var success = content.scrollPageUp();
+ debug("scroll up " + k + " : success " + success);
+ }
+
+ for (var k = 0; k < 5; k++) {
+ var success = content.scrollPageLeft();
+ debug("scroll left " + k + " : success " + success);
+ }
+
+ for (var k = 0; k < 5; k++) {
+ var success = content.scrollPageRight();
+ debug("scroll right " + k + " : success " + success);
+ }
+ }
+
+ function finish() {
+ document.getElementById("container").style.visibility = "hidden";
+ finishJSTest();
+ }
+
+ successfullyParsed = true;
+</script>
+
+<script src=""
+</body>
+</html>
+
Modified: trunk/Source/WebCore/ChangeLog (187370 => 187371)
--- trunk/Source/WebCore/ChangeLog 2015-07-24 23:24:38 UTC (rev 187370)
+++ trunk/Source/WebCore/ChangeLog 2015-07-24 23:26:34 UTC (rev 187371)
@@ -1,3 +1,30 @@
+2015-07-24 Chris Fleizach <[email protected]>
+
+ AX: scrollable elements do not allow 3-finger swipe
+ https://bugs.webkit.org/show_bug.cgi?id=141893
+
+ Reviewed by Mario Sanchez Prada.
+
+ To allow iOS Accessibility to perform by-page scrolling in overflow areas, we move
+ that scrolling code into AccessibilityObject and then iterate all the possible ScrollableAreas,
+ rather than just finding the parents that are ScrollViews.
+
+ Test: platform/ios-simulator/accessibility/scroll-in-overflow-div.html
+
+ * accessibility/AccessibilityObject.cpp:
+ (WebCore::AccessibilityObject::scrollAreaAndAncestor):
+ (WebCore::AccessibilityObject::scrollPosition):
+ (WebCore::AccessibilityObject::scrollVisibleContentRect):
+ (WebCore::AccessibilityObject::scrollContentsSize):
+ (WebCore::AccessibilityObject::scrollByPage):
+ * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
+ (-[WebAccessibilityObjectWrapper accessibilityScroll:]):
+ (-[WebAccessibilityObjectWrapper convertPointToScreenSpace:]):
+ (-[WebAccessibilityObjectWrapper _accessibilityScrollPosition]):
+ (-[WebAccessibilityObjectWrapper _accessibilityScrollSize]):
+ (-[WebAccessibilityObjectWrapper _accessibilityScrollVisibleRect]):
+ (-[WebAccessibilityObjectWrapper accessibilityElementDidBecomeFocused]):
+
2015-07-24 Brent Fulgham <[email protected]>
[Win] Connect UserScript and UserStyleSheet through WebView.
Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.cpp (187370 => 187371)
--- trunk/Source/WebCore/accessibility/AccessibilityObject.cpp 2015-07-24 23:24:38 UTC (rev 187370)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.cpp 2015-07-24 23:26:34 UTC (rev 187371)
@@ -2529,7 +2529,103 @@
}
}
}
+
+void AccessibilityObject::scrollAreaAndAncestor(std::pair<ScrollableArea*, AccessibilityObject*>& scrollers) const
+{
+ // Search up the parent chain until we find the first one that's scrollable.
+ scrollers.first = nullptr;
+ for (scrollers.second = parentObject(); scrollers.second; scrollers.second = scrollers.second->parentObject()) {
+ if ((scrollers.first = scrollers.second->getScrollableAreaIfScrollable()))
+ break;
+ }
+}
+
+ScrollableArea* AccessibilityObject::scrollableAreaAncestor() const
+{
+ std::pair<ScrollableArea*, AccessibilityObject*> scrollers;
+ scrollAreaAndAncestor(scrollers);
+ return scrollers.first;
+}
+
+IntPoint AccessibilityObject::scrollPosition() const
+{
+ if (auto scroller = scrollableAreaAncestor())
+ return scroller->scrollPosition();
+ return IntPoint();
+}
+
+IntRect AccessibilityObject::scrollVisibleContentRect() const
+{
+ if (auto scroller = scrollableAreaAncestor())
+ return scroller->visibleContentRect(ScrollableArea::LegacyIOSDocumentVisibleRect);
+
+ return IntRect();
+}
+
+IntSize AccessibilityObject::scrollContentsSize() const
+{
+ if (auto scroller = scrollableAreaAncestor())
+ return scroller->contentsSize();
+
+ return IntSize();
+}
+
+bool AccessibilityObject::scrollByPage(ScrollByPageDirection direction) const
+{
+ std::pair<ScrollableArea*, AccessibilityObject*> scrollers;
+ scrollAreaAndAncestor(scrollers);
+ ScrollableArea* scrollableArea = scrollers.first;
+ AccessibilityObject* scrollParent = scrollers.second;
+
+ if (!scrollableArea)
+ return false;
+
+ IntPoint scrollPosition = scrollableArea->scrollPosition();
+ IntPoint newScrollPosition = scrollPosition;
+ IntSize scrollSize = scrollableArea->contentsSize();
+ IntRect scrollVisibleRect = scrollableArea->visibleContentRect(ScrollableArea::LegacyIOSDocumentVisibleRect);
+ switch (direction) {
+ case Right: {
+ int scrollAmount = scrollVisibleRect.size().width();
+ int newX = scrollPosition.x() - scrollAmount;
+ newScrollPosition.setX(std::max(newX, 0));
+ break;
+ }
+ case Left: {
+ int scrollAmount = scrollVisibleRect.size().width();
+ int newX = scrollAmount + scrollPosition.x();
+ int maxX = scrollSize.width() - scrollAmount;
+ newScrollPosition.setX(std::min(newX, maxX));
+ break;
+ }
+ case Up: {
+ int scrollAmount = scrollVisibleRect.size().height();
+ int newY = scrollPosition.y() - scrollAmount;
+ newScrollPosition.setY(std::max(newY, 0));
+ break;
+ }
+ case Down: {
+ int scrollAmount = scrollVisibleRect.size().height();
+ int newY = scrollAmount + scrollPosition.y();
+ int maxY = scrollSize.height() - scrollAmount;
+ newScrollPosition.setY(std::min(newY, maxY));
+ break;
+ }
+ default:
+ break;
+ }
+
+ if (newScrollPosition != scrollPosition) {
+ scrollParent->scrollTo(newScrollPosition);
+ document()->updateLayoutIgnorePendingStylesheets();
+ return true;
+ }
+
+ return false;
+}
+
+
bool AccessibilityObject::lastKnownIsIgnoredValue()
{
if (m_lastKnownIsIgnoredValue == DefaultBehavior)
Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.h (187370 => 187371)
--- trunk/Source/WebCore/accessibility/AccessibilityObject.h 2015-07-24 23:24:38 UTC (rev 187370)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.h 2015-07-24 23:26:34 UTC (rev 187371)
@@ -895,7 +895,13 @@
virtual void scrollToMakeVisibleWithSubFocus(const IntRect&) const;
// Scroll this object to a given point in global coordinates of the top-level window.
virtual void scrollToGlobalPoint(const IntPoint&) const;
-
+
+ enum ScrollByPageDirection { Up, Down, Left, Right };
+ bool scrollByPage(ScrollByPageDirection) const;
+ IntPoint scrollPosition() const;
+ IntSize scrollContentsSize() const;
+ IntRect scrollVisibleContentRect() const;
+
bool lastKnownIsIgnoredValue();
void setLastKnownIsIgnoredValue(bool);
@@ -1016,7 +1022,9 @@
// If this object itself scrolls, return its ScrollableArea.
virtual ScrollableArea* getScrollableAreaIfScrollable() const { return nullptr; }
virtual void scrollTo(const IntPoint&) const { }
-
+ ScrollableArea* scrollableAreaAncestor() const;
+ void scrollAreaAndAncestor(std::pair<ScrollableArea*, AccessibilityObject*>&) const;
+
static bool isAccessibilityObjectSearchMatchAtIndex(AccessibilityObject*, AccessibilitySearchCriteria*, size_t);
static bool isAccessibilityObjectSearchMatch(AccessibilityObject*, AccessibilitySearchCriteria*);
static bool isAccessibilityTextSearchMatch(AccessibilityObject*, AccessibilitySearchCriteria*);
Modified: trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm (187370 => 187371)
--- trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm 2015-07-24 23:24:38 UTC (rev 187370)
+++ trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm 2015-07-24 23:26:34 UTC (rev 187371)
@@ -1149,54 +1149,36 @@
if (![self _prepareAccessibilityCall])
return NO;
- ScrollView* scrollView = m_object->scrollViewAncestor();
- if (!scrollView)
- return NO;
-
- IntPoint scrollPosition = scrollView->scrollPosition();
- IntPoint newScrollPosition = scrollPosition;
- IntSize scrollSize = scrollView->contentsSize();
- IntRect scrollVisibleRect = scrollView->visibleContentRect(ScrollableArea::LegacyIOSDocumentVisibleRect);
+ AccessibilityObject::ScrollByPageDirection scrollDirection;
switch (direction) {
- case UIAccessibilityScrollDirectionRight: {
- int scrollAmount = scrollVisibleRect.size().width();
- int newX = scrollPosition.x() - scrollAmount;
- newScrollPosition.setX(std::max(newX, 0));
+ case UIAccessibilityScrollDirectionRight:
+ scrollDirection = AccessibilityObject::ScrollByPageDirection::Right;
break;
- }
- case UIAccessibilityScrollDirectionLeft: {
- int scrollAmount = scrollVisibleRect.size().width();
- int newX = scrollAmount + scrollPosition.x();
- int maxX = scrollSize.width() - scrollAmount;
- newScrollPosition.setX(std::min(newX, maxX));
+ case UIAccessibilityScrollDirectionLeft:
+ scrollDirection = AccessibilityObject::ScrollByPageDirection::Left;
break;
- }
- case UIAccessibilityScrollDirectionUp: {
- int scrollAmount = scrollVisibleRect.size().height();
- int newY = scrollPosition.y() - scrollAmount;
- newScrollPosition.setY(std::max(newY, 0));
+ case UIAccessibilityScrollDirectionUp:
+ scrollDirection = AccessibilityObject::ScrollByPageDirection::Up;
break;
- }
- case UIAccessibilityScrollDirectionDown: {
- int scrollAmount = scrollVisibleRect.size().height();
- int newY = scrollAmount + scrollPosition.y();
- int maxY = scrollSize.height() - scrollAmount;
- newScrollPosition.setY(std::min(newY, maxY));
+ case UIAccessibilityScrollDirectionDown:
+ scrollDirection = AccessibilityObject::ScrollByPageDirection::Down;
break;
- }
default:
- break;
+ return NO;
}
+
+ BOOL result = m_object->scrollByPage(scrollDirection);
- if (newScrollPosition != scrollPosition) {
- scrollView->setScrollPosition(newScrollPosition);
- m_object->document()->updateLayoutIgnorePendingStylesheets();
+ if (result) {
+ [self postScrollStatusChangeNotification];
+
+ CGPoint scrollPos = [self _accessibilityScrollPosition];
+ NSString *testString = [NSString stringWithFormat:@"AXScroll [position: %.2f %.2f]", scrollPos.x, scrollPos.y];
+ [self accessibilityPostedNotification:@"AXScrollByPage" userInfo:@{ @"status" : testString }];
}
- [self postScrollStatusChangeNotification];
-
// This means that this object handled the scroll and no other ancestor should attempt scrolling.
- return YES;
+ return result;
}
- (CGPoint)convertPointToScreenSpace:(FloatPoint &)point
@@ -1625,10 +1607,7 @@
if (![self _prepareAccessibilityCall])
return CGPointZero;
- ScrollView* scrollView = m_object->scrollViewAncestor();
- if (!scrollView)
- return CGPointZero;
- return scrollView->scrollPosition();
+ return m_object->scrollPosition();
}
- (CGSize)_accessibilityScrollSize
@@ -1636,10 +1615,7 @@
if (![self _prepareAccessibilityCall])
return CGSizeZero;
- ScrollView* scrollView = m_object->scrollViewAncestor();
- if (!scrollView)
- return CGSizeZero;
- return scrollView->contentsSize();
+ return m_object->scrollContentsSize();
}
- (CGRect)_accessibilityScrollVisibleRect
@@ -1647,10 +1623,7 @@
if (![self _prepareAccessibilityCall])
return CGRectZero;
- ScrollView* scrollView = m_object->scrollViewAncestor();
- if (!scrollView)
- return CGRectZero;
- return scrollView->visibleContentRect(ScrollableArea::LegacyIOSDocumentVisibleRect);
+ return m_object->scrollVisibleContentRect();
}
- (void)accessibilityElementDidBecomeFocused
Modified: trunk/Tools/ChangeLog (187370 => 187371)
--- trunk/Tools/ChangeLog 2015-07-24 23:24:38 UTC (rev 187370)
+++ trunk/Tools/ChangeLog 2015-07-24 23:26:34 UTC (rev 187371)
@@ -1,3 +1,64 @@
+2015-07-24 Chris Fleizach <[email protected]>
+
+ AX: scrollable elements do not allow 3-finger swipe
+ https://bugs.webkit.org/show_bug.cgi?id=141893
+
+ Reviewed by Mario Sanchez Prada.
+
+ Support global notification listeners for iOS code.
+ Fix an issue in DRT where the dictionary of data was not being passed back to the layout test for the notication callback.
+ Implement scrollUp/Down/Left/Right.
+
+ * DumpRenderTree/AccessibilityController.h:
+ * DumpRenderTree/AccessibilityUIElement.cpp:
+ (increaseTextSelectionCallback):
+ (scrollPageUpCallback):
+ (scrollPageDownCallback):
+ (scrollPageLeftCallback):
+ (scrollPageRightCallback):
+ (decreaseTextSelectionCallback):
+ (getElementTextLengthCallback):
+ (AccessibilityUIElement::getJSClass):
+ * DumpRenderTree/AccessibilityUIElement.h:
+ * DumpRenderTree/ios/AccessibilityControllerIOS.mm:
+ (AccessibilityController::~AccessibilityController):
+ (AccessibilityController::elementAtPoint):
+ (AccessibilityController::addNotificationListener):
+ (AccessibilityController::platformResetToConsistentState):
+ (AccessibilityController::removeNotificationListener):
+ * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
+ (AccessibilityUIElement::AccessibilityUIElement):
+ (AccessibilityUIElement::subrole):
+ (AccessibilityUIElement::scrollPageUp):
+ (AccessibilityUIElement::scrollPageDown):
+ (AccessibilityUIElement::scrollPageLeft):
+ (AccessibilityUIElement::scrollPageRight):
+ (AccessibilityUIElement::roleDescription):
+ * DumpRenderTree/mac/AccessibilityNotificationHandler.mm:
+ (-[AccessibilityNotificationHandler _notificationReceived:]):
+ * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
+ * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
+ (WTR::AccessibilityUIElement::linkedElement):
+ (WTR::AccessibilityUIElement::headerElementAtIndex):
+ (WTR::AccessibilityUIElement::assistiveTechnologySimulatedFocus):
+ (WTR::AccessibilityUIElement::scrollPageUp):
+ (WTR::AccessibilityUIElement::scrollPageDown):
+ (WTR::AccessibilityUIElement::scrollPageLeft):
+ (WTR::AccessibilityUIElement::scrollPageRight):
+ * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
+ * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
+ * WebKitTestRunner/InjectedBundle/ios/AccessibilityControllerIOS.mm:
+ (WTR::AccessibilityController::addNotificationListener):
+ (WTR::AccessibilityController::removeNotificationListener):
+ * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
+ (WTR::AccessibilityUIElement::AccessibilityUIElement):
+ (WTR::AccessibilityUIElement::assistiveTechnologySimulatedFocus):
+ (WTR::AccessibilityUIElement::scrollPageUp):
+ (WTR::AccessibilityUIElement::scrollPageDown):
+ (WTR::AccessibilityUIElement::scrollPageLeft):
+ (WTR::AccessibilityUIElement::scrollPageRight):
+ (WTR::AccessibilityUIElement::increaseTextSelection):
+
2015-07-24 Brent Fulgham <[email protected]>
[Win] Activate CSP_NEXT and Connect UserScript and UserStyleSheet through WebView.
Modified: trunk/Tools/DumpRenderTree/AccessibilityController.h (187370 => 187371)
--- trunk/Tools/DumpRenderTree/AccessibilityController.h 2015-07-24 23:24:38 UTC (rev 187370)
+++ trunk/Tools/DumpRenderTree/AccessibilityController.h 2015-07-24 23:26:34 UTC (rev 187371)
@@ -93,7 +93,7 @@
HashMap<PlatformUIElement, JSObjectRef> m_notificationListeners;
#endif
-#if PLATFORM(COCOA)
+#if PLATFORM(COCOA) || PLATFORM(IOS)
RetainPtr<NotificationHandler> m_globalNotificationHandler;
#endif
Modified: trunk/Tools/DumpRenderTree/AccessibilityUIElement.cpp (187370 => 187371)
--- trunk/Tools/DumpRenderTree/AccessibilityUIElement.cpp 2015-07-24 23:24:38 UTC (rev 187370)
+++ trunk/Tools/DumpRenderTree/AccessibilityUIElement.cpp 2015-07-24 23:26:34 UTC (rev 187371)
@@ -332,6 +332,26 @@
return JSValueMakeUndefined(context);
}
+static JSValueRef scrollPageUpCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+ return JSValueMakeBoolean(context, toAXElement(thisObject)->scrollPageUp());
+}
+
+static JSValueRef scrollPageDownCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+ return JSValueMakeBoolean(context, toAXElement(thisObject)->scrollPageDown());
+}
+
+static JSValueRef scrollPageLeftCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+ return JSValueMakeBoolean(context, toAXElement(thisObject)->scrollPageLeft());
+}
+
+static JSValueRef scrollPageRightCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+ return JSValueMakeBoolean(context, toAXElement(thisObject)->scrollPageRight());
+}
+
static JSValueRef decreaseTextSelectionCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
toAXElement(thisObject)->decreaseTextSelection();
@@ -1327,6 +1347,8 @@
return JSValueMakeNumber(context, toAXElement(thisObject)->elementTextLength());
}
+
+
#endif // PLATFORM(IOS)
#if PLATFORM(MAC) && !PLATFORM(IOS)
@@ -1691,6 +1713,10 @@
{ "elementsForRange", elementsForRangeCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "increaseTextSelection", increaseTextSelectionCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "decreaseTextSelection", decreaseTextSelectionCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+ { "scrollPageUp", scrollPageUpCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+ { "scrollPageDown", scrollPageDownCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+ { "scrollPageLeft", scrollPageLeftCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+ { "scrollPageRight", scrollPageRightCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "assistiveTechnologySimulatedFocus", assistiveTechnologySimulatedFocusCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
#endif
{ 0, 0, 0 }
Modified: trunk/Tools/DumpRenderTree/AccessibilityUIElement.h (187370 => 187371)
--- trunk/Tools/DumpRenderTree/AccessibilityUIElement.h 2015-07-24 23:24:38 UTC (rev 187370)
+++ trunk/Tools/DumpRenderTree/AccessibilityUIElement.h 2015-07-24 23:26:34 UTC (rev 187371)
@@ -221,6 +221,11 @@
void increaseTextSelection();
void decreaseTextSelection();
AccessibilityUIElement linkedElement();
+
+ bool scrollPageUp();
+ bool scrollPageDown();
+ bool scrollPageLeft();
+ bool scrollPageRight();
#endif
#if PLATFORM(GTK) || PLATFORM(EFL)
Modified: trunk/Tools/DumpRenderTree/ios/AccessibilityControllerIOS.mm (187370 => 187371)
--- trunk/Tools/DumpRenderTree/ios/AccessibilityControllerIOS.mm 2015-07-24 23:24:38 UTC (rev 187370)
+++ trunk/Tools/DumpRenderTree/ios/AccessibilityControllerIOS.mm 2015-07-24 23:26:34 UTC (rev 187371)
@@ -28,6 +28,7 @@
#import "AccessibilityController.h"
#import "AccessibilityCommonMac.h"
+#import "AccessibilityNotificationHandler.h"
#import "AccessibilityUIElement.h"
#import <Foundation/Foundation.h>
#import <WebKit/WebFramePrivate.h>
@@ -43,6 +44,8 @@
AccessibilityController::~AccessibilityController()
{
+ // ResetToConsistentState should have cleared this already.
+ ASSERT(!m_globalNotificationHandler);
}
AccessibilityUIElement AccessibilityController::elementAtPoint(int x, int y)
@@ -116,11 +119,23 @@
bool AccessibilityController::addNotificationListener(JSObjectRef functionCallback)
{
- return false;
+ if (!functionCallback)
+ return false;
+
+ // Mac programmers should not be adding more than one global notification listener.
+ // Other platforms may be different.
+ if (m_globalNotificationHandler)
+ return false;
+ m_globalNotificationHandler = [[AccessibilityNotificationHandler alloc] init];
+ [m_globalNotificationHandler.get() setCallback:functionCallback];
+ [m_globalNotificationHandler.get() startObserving];
+
+ return true;
}
void AccessibilityController::platformResetToConsistentState()
{
+ m_globalNotificationHandler.clear();
}
void AccessibilityController::removeNotificationListener()
Modified: trunk/Tools/DumpRenderTree/ios/AccessibilityUIElementIOS.mm (187370 => 187371)
--- trunk/Tools/DumpRenderTree/ios/AccessibilityUIElementIOS.mm 2015-07-24 23:24:38 UTC (rev 187370)
+++ trunk/Tools/DumpRenderTree/ios/AccessibilityUIElementIOS.mm 2015-07-24 23:26:34 UTC (rev 187371)
@@ -45,12 +45,15 @@
AccessibilityUIElement::AccessibilityUIElement(PlatformUIElement element)
: m_element(element)
+ , m_notificationHandler(0)
{
[m_element retain];
}
AccessibilityUIElement::AccessibilityUIElement(const AccessibilityUIElement& other)
: m_element(other.m_element)
+ , m_notificationHandler(0)
+
{
[m_element retain];
}
@@ -454,6 +457,25 @@
return JSStringCreateWithCharacters(0, 0);
}
+bool AccessibilityUIElement::scrollPageUp()
+{
+ return [m_element accessibilityScroll:UIAccessibilityScrollDirectionUp];
+}
+
+bool AccessibilityUIElement::scrollPageDown()
+{
+ return [m_element accessibilityScroll:UIAccessibilityScrollDirectionDown];
+}
+bool AccessibilityUIElement::scrollPageLeft()
+{
+ return [m_element accessibilityScroll:UIAccessibilityScrollDirectionLeft];
+}
+
+bool AccessibilityUIElement::scrollPageRight()
+{
+ return [m_element accessibilityScroll:UIAccessibilityScrollDirectionRight];
+}
+
JSStringRef AccessibilityUIElement::roleDescription()
{
return JSStringCreateWithCharacters(0, 0);
Modified: trunk/Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.mm (187370 => 187371)
--- trunk/Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.mm 2015-07-24 23:24:38 UTC (rev 187370)
+++ trunk/Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.mm 2015-07-24 23:26:34 UTC (rev 187371)
@@ -166,7 +166,6 @@
return;
NSDictionary *userInfo = [[notification userInfo] objectForKey:@"userInfo"];
-
JSValueRef notificationNameArgument = JSValueMakeString([mainFrame globalContext], adopt([notificationName createJSStringRef]).get());
JSValueRef userInfoArgument = makeObjectRefForDictionary([mainFrame globalContext], userInfo);
if (m_platformElement) {
@@ -181,7 +180,7 @@
arguments[0] = AccessibilityUIElement::makeJSAccessibilityUIElement([mainFrame globalContext], AccessibilityUIElement([notification object]));
arguments[1] = notificationNameArgument;
arguments[2] = userInfoArgument;
- JSObjectCallAsFunction([mainFrame globalContext], m_notificationFunctionCallback, 0, 2, arguments, 0);
+ JSObjectCallAsFunction([mainFrame globalContext], m_notificationFunctionCallback, 0, 3, arguments, 0);
}
}
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityController.h (187370 => 187371)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityController.h 2015-07-24 23:24:38 UTC (rev 187370)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityController.h 2015-07-24 23:26:34 UTC (rev 187371)
@@ -70,7 +70,7 @@
private:
AccessibilityController();
-#if PLATFORM(COCOA)
+#if PLATFORM(COCOA) || PLATFORM(IOS)
RetainPtr<NotificationHandler> m_globalNotificationHandler;
#endif
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp (187370 => 187371)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp 2015-07-24 23:24:38 UTC (rev 187370)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp 2015-07-24 23:26:34 UTC (rev 187371)
@@ -66,6 +66,10 @@
PassRefPtr<AccessibilityUIElement> AccessibilityUIElement::linkedElement() { return nullptr; }
PassRefPtr<AccessibilityUIElement> AccessibilityUIElement::headerElementAtIndex(unsigned) { return nullptr; }
void AccessibilityUIElement::assistiveTechnologySimulatedFocus() { return; }
+bool AccessibilityUIElement::scrollPageUp() { return false; }
+bool AccessibilityUIElement::scrollPageDown() { return false; }
+bool AccessibilityUIElement::scrollPageLeft() { return false; }
+bool AccessibilityUIElement::scrollPageRight() { return false; }
#endif
// Unsupported methods on various platforms. As they're implemented on other platforms this list should be modified.
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h (187370 => 187371)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h 2015-07-24 23:24:38 UTC (rev 187370)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h 2015-07-24 23:26:34 UTC (rev 187371)
@@ -275,6 +275,11 @@
PassRefPtr<AccessibilityUIElement> headerElementAtIndex(unsigned index);
void assistiveTechnologySimulatedFocus();
+ bool scrollPageUp();
+ bool scrollPageDown();
+ bool scrollPageLeft();
+ bool scrollPageRight();
+
private:
AccessibilityUIElement(PlatformUIElement);
AccessibilityUIElement(const AccessibilityUIElement&);
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl (187370 => 187371)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl 2015-07-24 23:24:38 UTC (rev 187370)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl 2015-07-24 23:26:34 UTC (rev 187371)
@@ -170,6 +170,10 @@
void scrollToMakeVisible();
void takeFocus();
+ boolean scrollPageDown();
+ boolean scrollPageUp();
+ boolean scrollPageLeft();
+ boolean scrollPageRight();
// Text markers.
AccessibilityTextMarkerRange lineTextMarkerRangeForTextMarker(AccessibilityTextMarker textMarker);
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityControllerIOS.mm (187370 => 187371)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityControllerIOS.mm 2015-07-24 23:24:38 UTC (rev 187370)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityControllerIOS.mm 2015-07-24 23:26:34 UTC (rev 187371)
@@ -41,7 +41,18 @@
bool AccessibilityController::addNotificationListener(JSValueRef functionCallback)
{
- return false;
+ if (!functionCallback)
+ return false;
+
+ // Mac programmers should not be adding more than one global notification listener.
+ // Other platforms may be different.
+ if (m_globalNotificationHandler)
+ return false;
+ m_globalNotificationHandler = [[AccessibilityNotificationHandler alloc] init];
+ [m_globalNotificationHandler.get() setCallback:functionCallback];
+ [m_globalNotificationHandler.get() startObserving];
+
+ return true;
}
bool AccessibilityController::removeNotificationListener()
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm (187370 => 187371)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm 2015-07-24 23:24:38 UTC (rev 187370)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm 2015-07-24 23:26:34 UTC (rev 187371)
@@ -109,6 +109,7 @@
AccessibilityUIElement::AccessibilityUIElement(PlatformUIElement element)
: m_element(element)
+ , m_notificationHandler(0)
{
// FIXME: [email protected] says ObjC objects need to be CFRetained/CFRelease to be GC-compliant on the mac.
[m_element retain];
@@ -117,6 +118,7 @@
AccessibilityUIElement::AccessibilityUIElement(const AccessibilityUIElement& other)
: JSWrappable()
, m_element(other.m_element)
+ , m_notificationHandler(0)
{
[m_element retain];
}
@@ -755,7 +757,26 @@
{
[m_element accessibilityElementDidBecomeFocused];
}
+
+bool AccessibilityUIElement::scrollPageUp()
+{
+ return [m_element accessibilityScroll:UIAccessibilityScrollDirectionUp];
+}
+bool AccessibilityUIElement::scrollPageDown()
+{
+ return [m_element accessibilityScroll:UIAccessibilityScrollDirectionDown];
+}
+bool AccessibilityUIElement::scrollPageLeft()
+{
+ return [m_element accessibilityScroll:UIAccessibilityScrollDirectionLeft];
+}
+
+bool AccessibilityUIElement::scrollPageRight()
+{
+ return [m_element accessibilityScroll:UIAccessibilityScrollDirectionRight];
+}
+
void AccessibilityUIElement::increaseTextSelection()
{
[m_element accessibilityModifySelection:WebCore::CharacterGranularity increase:YES];