Bug 1641659 - Remove NSAccessibility methods from mozActionElements. r=morgan

Differential Revision: https://phabricator.services.mozilla.com/D77344
This commit is contained in:
Eitan Isaacson 2020-05-28 23:02:52 +00:00
Родитель a3ca2295dc
Коммит 4a8cd9c1f8
3 изменённых файлов: 67 добавлений и 135 удалений

Просмотреть файл

@ -32,10 +32,6 @@
using namespace mozilla;
using namespace mozilla::a11y;
#define NSAccessibilityRequiredAttribute @"AXRequired"
#define NSAccessibilityHasPopupAttribute @"AXHasPopup"
#define NSAccessibilityPopupValueAttribute @"AXPopupValue"
#pragma mark -
@interface mozAccessible ()

Просмотреть файл

@ -8,17 +8,40 @@
/* Simple subclasses for things like checkboxes, buttons, etc. */
@interface mozButtonAccessible : mozAccessible {
}
- (BOOL)hasPopup;
@interface mozButtonAccessible : mozAccessible
// override
- (NSNumber*)moxHasPopup;
// override
- (NSString*)moxPopupValue;
@end
@interface mozPopupButtonAccessible : mozButtonAccessible
// override
- (NSString*)moxTitle;
// override
- (BOOL)moxBlockSelector:(SEL)selector;
// override
- (NSArray*)moxChildren;
// override
- (void)stateChanged:(uint64_t)state isEnabled:(BOOL)enabled;
// override
- (BOOL)ignoreWithParent:(mozAccessible*)parent;
@end
@interface mozCheckboxAccessible : mozButtonAccessible
// returns one of the constants defined in CheckboxValue
- (int)isChecked;
// override
- (id)moxValue;
@end
/**
@ -26,6 +49,9 @@
*/
@interface mozPaneAccessible : mozAccessible
// override
- (NSArray*)moxChildren;
@end
/**
@ -33,4 +59,15 @@
*/
@interface mozIncrementableAccessible : mozAccessible
// override
- (void)moxPerformIncrement;
// override
- (void)moxPerformDecrement;
// override
- (void)handleAccessibleEvent:(uint32_t)eventType;
- (void)changeValueBySteps:(int)factor;
@end

Просмотреть файл

@ -24,96 +24,33 @@ enum CheckboxValue {
@implementation mozButtonAccessible
- (NSArray*)accessibilityAttributeNames {
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL;
static NSArray* attributes = nil;
if (!attributes) {
attributes = [[NSArray alloc]
initWithObjects:NSAccessibilityParentAttribute, // required
NSAccessibilityRoleAttribute, // required
NSAccessibilityRoleDescriptionAttribute,
NSAccessibilityPositionAttribute, // required
NSAccessibilitySizeAttribute, // required
NSAccessibilityWindowAttribute, // required
NSAccessibilityPositionAttribute, // required
NSAccessibilityTopLevelUIElementAttribute, // required
NSAccessibilityHelpAttribute,
NSAccessibilityEnabledAttribute, // required
NSAccessibilityFocusedAttribute, // required
NSAccessibilityTitleAttribute, // required
NSAccessibilityChildrenAttribute, NSAccessibilityDescriptionAttribute,
NSAccessibilityRequiredAttribute, NSAccessibilityHasPopupAttribute,
NSAccessibilityPopupValueAttribute,
#if DEBUG
@"AXMozDescription",
#endif
nil];
}
return attributes;
NS_OBJC_END_TRY_ABORT_BLOCK_NIL;
- (NSNumber*)moxHasPopup {
return @([self stateWithMask:states::HASPOPUP] != 0);
}
- (id)accessibilityAttributeValue:(NSString*)attribute {
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL;
if ([attribute isEqualToString:NSAccessibilityHasPopupAttribute]) {
return [NSNumber numberWithBool:[self hasPopup]];
- (NSString*)moxPopupValue {
if ([self stateWithMask:states::HASPOPUP] != 0) {
return utils::GetAccAttr(self, "haspopup");
}
if ([attribute isEqualToString:NSAccessibilityPopupValueAttribute]) {
if ([self hasPopup]) {
return utils::GetAccAttr(self, "haspopup");
} else {
return nil;
}
}
return [super accessibilityAttributeValue:attribute];
NS_OBJC_END_TRY_ABORT_BLOCK_NIL;
}
- (BOOL)hasPopup {
return ([self stateWithMask:states::HASPOPUP] != 0);
return nil;
}
@end
@implementation mozPopupButtonAccessible
- (NSString*)moxTitle {
// Popup buttons don't have titles.
return @"";
}
- (NSArray*)accessibilityAttributeNames {
static NSMutableArray* supportedAttributes = nil;
if (!supportedAttributes) {
supportedAttributes = [[super accessibilityAttributeNames] mutableCopy];
// We need to remove AXHasPopup from a AXPopupButton for it to be reported
// as a popup button. Otherwise VO reports it as a button that has a popup
// which is not consistent with Safari.
[supportedAttributes removeObject:NSAccessibilityHasPopupAttribute];
[supportedAttributes addObject:NSAccessibilityValueAttribute];
- (BOOL)moxBlockSelector:(SEL)selector {
if (selector == @selector(moxHasPopup)) {
return YES;
}
return supportedAttributes;
}
- (id)accessibilityAttributeValue:(NSString*)attribute {
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL;
if ([attribute isEqualToString:NSAccessibilityHasPopupAttribute]) {
// We need to null on AXHasPopup for it to be reported as a popup button.
// Otherwise VO reports it as a button that has a popup which is not
// consistent with Safari.
return nil;
}
return [super accessibilityAttributeValue:attribute];
NS_OBJC_END_TRY_ABORT_BLOCK_NIL;
return [super moxBlockSelector:selector];
}
- (NSArray*)moxChildren {
@ -182,20 +119,6 @@ enum CheckboxValue {
@implementation mozPaneAccessible
- (NSUInteger)accessibilityArrayAttributeCount:(NSString*)attribute {
if ([self isExpired]) {
return 0;
}
// By default this calls -[[mozAccessible children] count].
// Since we don't cache mChildren. This is faster.
if ([attribute isEqualToString:NSAccessibilityChildrenAttribute]) {
return mGeckoAccessible.ChildCount() ? 1 : 0;
}
return [super accessibilityArrayAttributeCount:attribute];
}
- (NSArray*)moxChildren {
if (!mGeckoAccessible.AsAccessible()) return nil;
@ -220,36 +143,24 @@ enum CheckboxValue {
@implementation mozIncrementableAccessible
- (NSArray*)accessibilityActionNames {
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL;
NSArray* actions = [super accessibilityActionNames];
static NSArray* sliderAttrs = nil;
if (!sliderAttrs) {
NSMutableArray* tempArray = [NSMutableArray new];
[tempArray addObject:NSAccessibilityIncrementAction];
[tempArray addObject:NSAccessibilityDecrementAction];
sliderAttrs = [[NSArray alloc] initWithArray:tempArray];
[tempArray release];
}
return [actions arrayByAddingObjectsFromArray:sliderAttrs];
NS_OBJC_END_TRY_ABORT_BLOCK_NIL;
- (void)moxPerformIncrement {
[self changeValueBySteps:1];
}
- (void)accessibilityPerformAction:(NSString*)action {
NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
- (void)moxPerformDecrement {
[self changeValueBySteps:-1];
}
if ([action isEqualToString:NSAccessibilityIncrementAction]) {
[self changeValueBySteps:1];
} else if ([action isEqualToString:NSAccessibilityDecrementAction]) {
[self changeValueBySteps:-1];
} else {
[super accessibilityPerformAction:action];
- (void)handleAccessibleEvent:(uint32_t)eventType {
switch (eventType) {
case nsIAccessibleEvent::EVENT_TEXT_VALUE_CHANGE:
case nsIAccessibleEvent::EVENT_VALUE_CHANGE:
[self moxPostNotification:NSAccessibilityValueChangedNotification];
break;
default:
[super handleAccessibleEvent:eventType];
break;
}
NS_OBJC_END_TRY_ABORT_BLOCK;
}
/*
@ -284,16 +195,4 @@ enum CheckboxValue {
NS_OBJC_END_TRY_ABORT_BLOCK;
}
- (void)handleAccessibleEvent:(uint32_t)eventType {
switch (eventType) {
case nsIAccessibleEvent::EVENT_TEXT_VALUE_CHANGE:
case nsIAccessibleEvent::EVENT_VALUE_CHANGE:
[self moxPostNotification:NSAccessibilityValueChangedNotification];
break;
default:
[super handleAccessibleEvent:eventType];
break;
}
}
@end