From 5008e3ecabda10bc937a6acb9910d99c0377e1d1 Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Tue, 9 May 2023 18:04:00 +0200 Subject: [PATCH] fix: handle `AXManualAccessibility` attribute cross-protocol (#38223) fix: handle `AXManualAccessibility` attribute cross-protocol (#38142) * fix: handle AXManualAccessibility attribute cross-protocol * Update shell/browser/mac/electron_application.mm --------- Co-authored-by: Robo --- shell/browser/mac/electron_application.mm | 27 +++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/shell/browser/mac/electron_application.mm b/shell/browser/mac/electron_application.mm index 5ebb233a357e1..5d53b9ae07a70 100644 --- a/shell/browser/mac/electron_application.mm +++ b/shell/browser/mac/electron_application.mm @@ -175,6 +175,33 @@ - (void)handleURLEvent:(NSAppleEventDescriptor*)event electron::Browser::Get()->OpenURL(base::SysNSStringToUTF8(url)); } +// Returns the list of accessibility attributes that this object supports. +- (NSArray*)accessibilityAttributeNames { + NSMutableArray* attributes = + [[super accessibilityAttributeNames] mutableCopy]; + [attributes addObject:@"AXManualAccessibility"]; + return attributes; +} + +// Returns whether or not the specified attribute can be set by the +// accessibility API via |accessibilitySetValue:forAttribute:|. +- (BOOL)accessibilityIsAttributeSettable:(NSString*)attribute { + bool is_manual_ax = [attribute isEqualToString:@"AXManualAccessibility"]; + return is_manual_ax || [super accessibilityIsAttributeSettable:attribute]; +} + +// Returns the accessibility value for the given attribute. If the value isn't +// supported this will return nil. +- (id)accessibilityAttributeValue:(NSString*)attribute { + if ([attribute isEqualToString:@"AXManualAccessibility"]) { + auto* ax_state = content::BrowserAccessibilityState::GetInstance(); + return [NSNumber numberWithBool:ax_state->IsAccessibleBrowser()]; + } + + return [super accessibilityAttributeValue:attribute]; +} + +// Sets the value for an accessibility attribute via the accessibility API. // AXEnhancedUserInterface is an undocumented attribute that screen reader // related functionality sets when running, and AXManualAccessibility is an // attribute Electron specifically allows third-party apps to use to enable