Title: [97757] trunk/Source/WebCore
Revision
97757
Author
[email protected]
Date
2011-10-18 08:43:50 -0700 (Tue, 18 Oct 2011)

Log Message

AX: buttons of number type <input> controls are not fully accessible
https://bugs.webkit.org/show_bug.cgi?id=70241

Staged commit part 4.

Reviewed by Darin Adler.

* accessibility/AccessibilityMockObject.h:
(WebCore::AccessibilityMockObject::isMockObject):
(WebCore::AccessibilityMockObject::detachFromParent):
* accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::elementAccessibilityHitTest):
* accessibility/mac/WebAccessibilityObjectWrapper.mm:
(-[WebAccessibilityObjectWrapper accessibilityActionNames]):
(-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
(-[WebAccessibilityObjectWrapper subrole]):
(-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (97756 => 97757)


--- trunk/Source/WebCore/ChangeLog	2011-10-18 15:38:29 UTC (rev 97756)
+++ trunk/Source/WebCore/ChangeLog	2011-10-18 15:43:50 UTC (rev 97757)
@@ -3,6 +3,26 @@
         AX: buttons of number type <input> controls are not fully accessible
         https://bugs.webkit.org/show_bug.cgi?id=70241
 
+        Staged commit part 4.
+
+        Reviewed by Darin Adler.
+
+        * accessibility/AccessibilityMockObject.h:
+        (WebCore::AccessibilityMockObject::isMockObject):
+        (WebCore::AccessibilityMockObject::detachFromParent):
+        * accessibility/AccessibilityObject.cpp:
+        (WebCore::AccessibilityObject::elementAccessibilityHitTest):
+        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
+        (-[WebAccessibilityObjectWrapper accessibilityActionNames]):
+        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
+        (-[WebAccessibilityObjectWrapper subrole]):
+        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
+
+2011-10-18  Chris Fleizach  <[email protected]>
+
+        AX: buttons of number type <input> controls are not fully accessible
+        https://bugs.webkit.org/show_bug.cgi?id=70241
+
         Staged commit part 3. Committing the new spin button classes.
 
         Reviewed by Darin Adler.

Modified: trunk/Source/WebCore/accessibility/AccessibilityMockObject.h (97756 => 97757)


--- trunk/Source/WebCore/accessibility/AccessibilityMockObject.h	2011-10-18 15:38:29 UTC (rev 97756)
+++ trunk/Source/WebCore/accessibility/AccessibilityMockObject.h	2011-10-18 15:43:50 UTC (rev 97757)
@@ -39,12 +39,15 @@
     
     virtual AccessibilityObject* parentObject() const { return m_parent; }
     virtual void setParent(AccessibilityObject* parent) { m_parent = parent; };
-    
+
+protected:
+    AccessibilityObject* m_parent;
+
+private:
+    virtual bool isMockObject() const { return true; }
+
     // Must be called when the parent object clears its children.
     virtual void detachFromParent() { m_parent = 0; }
-    
-protected:
-    AccessibilityObject* m_parent;
 }; 
     
 } // namespace WebCore 

Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.cpp (97756 => 97757)


--- trunk/Source/WebCore/accessibility/AccessibilityObject.cpp	2011-10-18 15:38:29 UTC (rev 97756)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.cpp	2011-10-18 15:43:50 UTC (rev 97757)
@@ -1347,6 +1347,13 @@
         if (widget && widget->isFrameView())
             return axObjectCache()->getOrCreate(widget)->accessibilityHitTest(toPoint(point - widget->frameRect().location()));
     }
+    
+    // Check if there are any mock elements that need to be handled.
+    size_t count = m_children.size();
+    for (size_t k = 0; k < count; k++) {
+        if (m_children[k]->isMockObject() && m_children[k]->elementRect().contains(point))
+            return m_children[k]->elementAccessibilityHitTest(point);
+    }
 
     return const_cast<AccessibilityObject*>(this); 
 }

Modified: trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapper.mm (97756 => 97757)


--- trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapper.mm	2011-10-18 15:38:29 UTC (rev 97756)
+++ trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapper.mm	2011-10-18 15:43:50 UTC (rev 97757)
@@ -37,6 +37,7 @@
 #import "AccessibilityListBox.h"
 #import "AccessibilityRenderObject.h"
 #import "AccessibilityScrollView.h"
+#import "AccessibilitySpinButton.h"
 #import "AccessibilityTable.h"
 #import "AccessibilityTableCell.h"
 #import "AccessibilityTableColumn.h"
@@ -893,7 +894,7 @@
     static NSArray* sliderActions = [[NSArray alloc] initWithObjects: NSAccessibilityIncrementAction, NSAccessibilityDecrementAction, nil];
 
     NSArray *actions;
-    if (m_object->actionElement()) 
+    if (m_object->actionElement() || m_object->isButton()) 
         actions = actionElementActions;
     else if (m_object->isMenuRelated())
         actions = menuElementActions;
@@ -985,6 +986,7 @@
     static NSArray* outlineRowAttrs = nil;
     static NSArray* buttonAttrs = nil;
     static NSArray* scrollViewAttrs = nil;
+    static NSArray* incrementorAttrs = nil;
     NSMutableArray* tempArray;
     if (attributes == nil) {
         attributes = [[NSArray alloc] initWithObjects: NSAccessibilityRoleAttribute,
@@ -1131,6 +1133,13 @@
         controlAttrs = [[NSArray alloc] initWithArray:tempArray];
         [tempArray release];
     }
+    if (incrementorAttrs == nil) {
+        tempArray = [[NSMutableArray alloc] initWithArray:attributes];
+        [tempArray addObject:NSAccessibilityIncrementButtonAttribute];
+        [tempArray addObject:NSAccessibilityDecrementButtonAttribute];
+        incrementorAttrs = [[NSArray alloc] initWithArray:tempArray];
+        [tempArray release];
+    }
     if (buttonAttrs == nil) {
         tempArray = [[NSMutableArray alloc] initWithArray:attributes];
         // Buttons should not expose AXValue.
@@ -1293,6 +1302,8 @@
         objectAttributes = tabListAttrs;
     else if (m_object->isScrollView())
         objectAttributes = scrollViewAttrs;
+    else if (m_object->isSpinButton())
+        objectAttributes = incrementorAttrs;
     
     else if (m_object->isMenu())
         objectAttributes = menuAttrs;
@@ -1516,7 +1527,8 @@
         { ParagraphRole, NSAccessibilityGroupRole },
         { LabelRole, NSAccessibilityGroupRole },
         { DivRole, NSAccessibilityGroupRole },
-        { FormRole, NSAccessibilityGroupRole }
+        { FormRole, NSAccessibilityGroupRole },
+        { SpinButtonRole, NSAccessibilityIncrementorRole }
     };
     AccessibilityRoleMap& roleMap = *new AccessibilityRoleMap;
     
@@ -1555,6 +1567,13 @@
         }
     }
     
+    if (m_object->isSpinButtonPart()) {
+        if (toAccessibilitySpinButtonPart(m_object)->isIncrementor())
+            return NSAccessibilityIncrementArrowSubrole;
+
+        return NSAccessibilityDecrementArrowSubrole;
+    }
+    
     if (m_object->isTreeItem())
         return NSAccessibilityOutlineRowSubrole;
     
@@ -1882,6 +1901,13 @@
         return (NSURL*)url;
     }
 
+    if (m_object->isSpinButton()) {
+        if ([attributeName isEqualToString:NSAccessibilityIncrementButtonAttribute])
+            return toAccessibilitySpinButton(m_object)->incrementButton()->wrapper();
+        if ([attributeName isEqualToString:NSAccessibilityDecrementButtonAttribute])
+            return toAccessibilitySpinButton(m_object)->decrementButton()->wrapper();
+    }
+    
     if ([attributeName isEqualToString: @"AXVisited"])
         return [NSNumber numberWithBool: m_object->isVisited()];
     
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to