WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
patch
patch (text/plain), 45.94 KB, created by
chris fleizach
on 2015-07-20 16:36:39 PDT
(
hide
)
Description:
patch
Filename:
MIME Type:
Creator:
chris fleizach
Created:
2015-07-20 16:36:39 PDT
Size:
45.94 KB
patch
obsolete
>Index: Source/WebCore/ChangeLog >=================================================================== >--- Source/WebCore/ChangeLog (revision 187045) >+++ Source/WebCore/ChangeLog (working copy) >@@ -1,3 +1,35 @@ >+2015-07-20 Chris Fleizach <cfleizach@apple.com> >+ >+ AX: scrollable elements do not allow 3-finger swipe >+ https://bugs.webkit.org/show_bug.cgi?id=141893 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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::scrollToGlobalPoint): >+ (WebCore::AccessibilityObject::scrollAreaAndAncestor): >+ (WebCore::AccessibilityObject::scrollPosition): >+ (WebCore::AccessibilityObject::scrollVisibleContentRect): >+ (WebCore::AccessibilityObject::scrollContentsSize): >+ (WebCore::AccessibilityObject::scrollByPage): >+ (WebCore::AccessibilityObject::lastKnownIsIgnoredValue): >+ * accessibility/AccessibilityObject.h: >+ (WebCore::AccessibilityObject::getScrollableAreaIfScrollable): >+ (WebCore::AccessibilityObject::scrollTo): >+ * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm: >+ (-[WebAccessibilityObjectWrapper accessibilityScroll:]): >+ (-[WebAccessibilityObjectWrapper convertPointToScreenSpace:]): >+ (-[WebAccessibilityObjectWrapper _accessibilityScrollPosition]): >+ (-[WebAccessibilityObjectWrapper _accessibilityScrollSize]): >+ (-[WebAccessibilityObjectWrapper _accessibilityScrollVisibleRect]): >+ (-[WebAccessibilityObjectWrapper accessibilityElementDidBecomeFocused]): >+ > 2015-07-20 Jeremy Jones <jeremyj@apple.com> > > Adopt AVPlayerLayerView >Index: Source/WebCore/accessibility/AccessibilityObject.cpp >=================================================================== >--- Source/WebCore/accessibility/AccessibilityObject.cpp (revision 186867) >+++ Source/WebCore/accessibility/AccessibilityObject.cpp (working copy) >@@ -2529,7 +2529,100 @@ > } > } > } >+ >+void AccessibilityObject::scrollAreaAndAncestor(std::pair<ScrollableArea*, AccessibilityObject*>& scrollers) const >+{ >+ // Search up the parent chain until we find the first one that's scrollable. >+ scrollers.second = parentObject(); >+ scrollers.first = nullptr; >+ for (; scrollers.second && !(scrollers.first = scrollers.second->getScrollableAreaIfScrollable()); scrollers.second = scrollers.second->parentObject()) { } >+} >+ >+IntPoint AccessibilityObject::scrollPosition() const >+{ >+ std::pair<ScrollableArea*, AccessibilityObject*> scrollers; >+ scrollAreaAndAncestor(scrollers); >+ if (!scrollers.first) >+ return IntPoint(); >+ >+ return scrollers.first->scrollPosition(); >+} > >+IntRect AccessibilityObject::scrollVisibleContentRect() const >+{ >+ std::pair<ScrollableArea*, AccessibilityObject*> scrollers; >+ scrollAreaAndAncestor(scrollers); >+ if (!scrollers.first) >+ return IntRect(); >+ >+ return scrollers.first->visibleContentRect(ScrollableArea::LegacyIOSDocumentVisibleRect); >+} >+ >+IntSize AccessibilityObject::scrollContentsSize() const >+{ >+ std::pair<ScrollableArea*, AccessibilityObject*> scrollers; >+ scrollAreaAndAncestor(scrollers); >+ if (!scrollers.first) >+ return IntSize(); >+ >+ return scrollers.first->contentsSize(); >+} >+ >+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) >Index: Source/WebCore/accessibility/AccessibilityObject.h >=================================================================== >--- Source/WebCore/accessibility/AccessibilityObject.h (revision 186867) >+++ Source/WebCore/accessibility/AccessibilityObject.h (working copy) >@@ -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,8 @@ > // If this object itself scrolls, return its ScrollableArea. > virtual ScrollableArea* getScrollableAreaIfScrollable() const { return nullptr; } > virtual void scrollTo(const IntPoint&) 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*); >Index: Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm >=================================================================== >--- Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm (revision 186867) >+++ Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm (working copy) >@@ -1149,54 +1149,35 @@ > 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]; >+ >+ NSString *testString = [NSString stringWithFormat:@"AXScroll %@ %@ %@", NSStringFromPoint([self _accessibilityScrollPosition]), NSStringFromSize([self _accessibilityScrollSize]), NSStringFromRect([self _accessibilityScrollVisibleRect])]; >+ [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 +1606,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 +1614,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 +1622,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 >Index: Tools/ChangeLog >=================================================================== >--- Tools/ChangeLog (revision 187045) >+++ Tools/ChangeLog (working copy) >@@ -1,3 +1,64 @@ >+2015-07-20 Chris Fleizach <cfleizach@apple.com> >+ >+ AX: scrollable elements do not allow 3-finger swipe >+ https://bugs.webkit.org/show_bug.cgi?id=141893 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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-20 Tomas Popela <tpopela@redhat.com> > > [GTK] Add selection-changed signal to the WebKit2 API >Index: Tools/DumpRenderTree/AccessibilityController.h >=================================================================== >--- Tools/DumpRenderTree/AccessibilityController.h (revision 186907) >+++ Tools/DumpRenderTree/AccessibilityController.h (working copy) >@@ -93,7 +93,7 @@ > HashMap<PlatformUIElement, JSObjectRef> m_notificationListeners; > #endif > >-#if PLATFORM(COCOA) >+#if PLATFORM(COCOA) || PLATFORM(IOS) > RetainPtr<NotificationHandler> m_globalNotificationHandler; > #endif > >Index: Tools/DumpRenderTree/AccessibilityUIElement.cpp >=================================================================== >--- Tools/DumpRenderTree/AccessibilityUIElement.cpp (revision 186907) >+++ Tools/DumpRenderTree/AccessibilityUIElement.cpp (working copy) >@@ -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 } >Index: Tools/DumpRenderTree/AccessibilityUIElement.h >=================================================================== >--- Tools/DumpRenderTree/AccessibilityUIElement.h (revision 186907) >+++ Tools/DumpRenderTree/AccessibilityUIElement.h (working copy) >@@ -221,6 +221,11 @@ > void increaseTextSelection(); > void decreaseTextSelection(); > AccessibilityUIElement linkedElement(); >+ >+ bool scrollPageUp(); >+ bool scrollPageDown(); >+ bool scrollPageLeft(); >+ bool scrollPageRight(); > #endif > > #if PLATFORM(GTK) || PLATFORM(EFL) >Index: Tools/DumpRenderTree/ios/AccessibilityControllerIOS.mm >=================================================================== >--- Tools/DumpRenderTree/ios/AccessibilityControllerIOS.mm (revision 186907) >+++ Tools/DumpRenderTree/ios/AccessibilityControllerIOS.mm (working copy) >@@ -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() >Index: Tools/DumpRenderTree/ios/AccessibilityUIElementIOS.mm >=================================================================== >--- Tools/DumpRenderTree/ios/AccessibilityUIElementIOS.mm (revision 186907) >+++ Tools/DumpRenderTree/ios/AccessibilityUIElementIOS.mm (working copy) >@@ -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); >Index: Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.mm >=================================================================== >--- Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.mm (revision 186907) >+++ Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.mm (working copy) >@@ -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); > } > } > >Index: Tools/WebKitTestRunner/InjectedBundle/AccessibilityController.h >=================================================================== >--- Tools/WebKitTestRunner/InjectedBundle/AccessibilityController.h (revision 186907) >+++ Tools/WebKitTestRunner/InjectedBundle/AccessibilityController.h (working copy) >@@ -70,7 +70,7 @@ > private: > AccessibilityController(); > >-#if PLATFORM(COCOA) >+#if PLATFORM(COCOA) || PLATFORM(IOS) > RetainPtr<NotificationHandler> m_globalNotificationHandler; > #endif > >Index: Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp >=================================================================== >--- Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp (revision 186907) >+++ Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp (working copy) >@@ -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. >Index: Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h >=================================================================== >--- Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h (revision 186907) >+++ Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h (working copy) >@@ -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&); >Index: Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl >=================================================================== >--- Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl (revision 186907) >+++ Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl (working copy) >@@ -170,6 +170,10 @@ > > void scrollToMakeVisible(); > void takeFocus(); >+ boolean scrollPageDown(); >+ boolean scrollPageUp(); >+ boolean scrollPageLeft(); >+ boolean scrollPageRight(); > > // Text markers. > AccessibilityTextMarkerRange lineTextMarkerRangeForTextMarker(AccessibilityTextMarker textMarker); >Index: Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityControllerIOS.mm >=================================================================== >--- Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityControllerIOS.mm (revision 186907) >+++ Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityControllerIOS.mm (working copy) >@@ -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() >Index: Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm >=================================================================== >--- Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm (revision 186907) >+++ Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm (working copy) >@@ -109,6 +109,7 @@ > > AccessibilityUIElement::AccessibilityUIElement(PlatformUIElement element) > : m_element(element) >+ , m_notificationHandler(0) > { > // FIXME: ap@webkit.org 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]; >Index: LayoutTests/ChangeLog >=================================================================== >--- LayoutTests/ChangeLog (revision 187045) >+++ LayoutTests/ChangeLog (working copy) >@@ -1,3 +1,13 @@ >+2015-07-20 Chris Fleizach <cfleizach@apple.com> >+ >+ AX: scrollable elements do not allow 3-finger swipe >+ https://bugs.webkit.org/show_bug.cgi?id=141893 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * platform/ios-simulator/accessibility/scroll-in-overflow-div-expected.txt: Added. >+ * platform/ios-simulator/accessibility/scroll-in-overflow-div.html: Added. >+ > 2015-07-20 Andreas Kling <akling@apple.com> > > Improve behavior of media elements in page cache. >Index: LayoutTests/platform/ios-simulator/accessibility/scroll-in-overflow-div-expected.txt >=================================================================== >--- LayoutTests/platform/ios-simulator/accessibility/scroll-in-overflow-div-expected.txt (revision 0) >+++ LayoutTests/platform/ios-simulator/accessibility/scroll-in-overflow-div-expected.txt (working copy) >@@ -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 {0, 224} {2845, 936} {{0, 224}, {424, 224}} >+scroll down 0 : success true >+AXScrollByPage received: data: AXScroll {0, 448} {2845, 936} {{0, 448}, {424, 224}} >+scroll down 1 : success true >+AXScrollByPage received: data: AXScroll {0, 672} {2845, 936} {{0, 672}, {424, 224}} >+scroll down 2 : success true >+AXScrollByPage received: data: AXScroll {0, 712} {2845, 936} {{0, 712}, {424, 224}} >+scroll down 3 : success true >+scroll down 4 : success false >+AXScrollByPage received: data: AXScroll {0, 488} {2845, 936} {{0, 488}, {424, 224}} >+scroll up 0 : success true >+AXScrollByPage received: data: AXScroll {0, 264} {2845, 936} {{0, 264}, {424, 224}} >+scroll up 1 : success true >+AXScrollByPage received: data: AXScroll {0, 40} {2845, 936} {{0, 40}, {424, 224}} >+scroll up 2 : success true >+AXScrollByPage received: data: AXScroll {0, 0} {2845, 936} {{0, 0}, {424, 224}} >+scroll up 3 : success true >+scroll up 4 : success false >+AXScrollByPage received: data: AXScroll {424, 0} {2845, 936} {{424, 0}, {424, 224}} >+scroll left 0 : success true >+AXScrollByPage received: data: AXScroll {848, 0} {2845, 936} {{848, 0}, {424, 224}} >+scroll left 1 : success true >+AXScrollByPage received: data: AXScroll {1272, 0} {2845, 936} {{1272, 0}, {424, 224}} >+scroll left 2 : success true >+AXScrollByPage received: data: AXScroll {1696, 0} {2845, 936} {{1696, 0}, {424, 224}} >+scroll left 3 : success true >+AXScrollByPage received: data: AXScroll {2120, 0} {2845, 936} {{2120, 0}, {424, 224}} >+scroll left 4 : success true >+AXScrollByPage received: data: AXScroll {1696, 0} {2845, 936} {{1696, 0}, {424, 224}} >+scroll right 0 : success true >+AXScrollByPage received: data: AXScroll {1272, 0} {2845, 936} {{1272, 0}, {424, 224}} >+scroll right 1 : success true >+AXScrollByPage received: data: AXScroll {848, 0} {2845, 936} {{848, 0}, {424, 224}} >+scroll right 2 : success true >+AXScrollByPage received: data: AXScroll {424, 0} {2845, 936} {{424, 0}, {424, 224}} >+scroll right 3 : success true >+AXScrollByPage received: data: AXScroll {0, 0} {2845, 936} {{0, 0}, {424, 224}} >+scroll right 4 : success true >+PASS successfullyParsed is true >+ >+TEST COMPLETE >+ >Index: LayoutTests/platform/ios-simulator/accessibility/scroll-in-overflow-div.html >=================================================================== >--- LayoutTests/platform/ios-simulator/accessibility/scroll-in-overflow-div.html (revision 0) >+++ LayoutTests/platform/ios-simulator/accessibility/scroll-in-overflow-div.html (working copy) >@@ -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="../../../resources/js-test-pre.js"></script> >+<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="../../../resources/js-test-post.js"></script> >+</body> >+</html> >+
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 141893
:
257143
|
257185
|
257204