fix: restore AXDocument accessibility attribute for representedFilename on macOS (#49346)

Starting from Chromium 134.0.6989.0 (Electron 35.0.0-beta.5), the
NativeWidgetMacNSWindow class overrides accessibilityDocument to return
the web content URL from the accessibility tree, but doesn't fall back
to NSWindow's default behavior when that URL is empty.

This broke Electron's setRepresentedFilename() API - the file path was
still set on the NSWindow, but no longer exposed via the AXDocument
accessibility attribute that screen readers use.

This fix adds an accessibilityDocument override in ElectronNSWindow that
checks representedFilename first, falling back to Chromium's behavior
for web content URLs.

Fixes: https://github.com/electron/electron/issues/XXXXX

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Daniel Gräfe
2026-01-16 10:27:29 +01:00
committed by GitHub
parent bdd7730a24
commit 5dd509d2f4

View File

@@ -285,6 +285,19 @@ void SwizzleSwipeWithEvent(NSView* view, SEL swiz_selector) {
return base::SysUTF8ToNSString(shell_ ? shell_->GetTitle() : "");
}
- (NSString*)accessibilityDocument {
// Prefer representedFilename set via Electron's setRepresentedFilename API.
// This works around a Chromium change (https://crrev.com/c/6187085) where
// NativeWidgetMacNSWindow's accessibilityDocument override doesn't fall back
// to NSWindow's default behavior of returning the representedFilename.
NSString* representedFilename = [self representedFilename];
if (representedFilename.length > 0) {
return [[NSURL fileURLWithPath:representedFilename] absoluteString];
}
// Fall back to Chromium's implementation for web content URLs.
return [super accessibilityDocument];
}
- (BOOL)canBecomeMainWindow {
return !self.disableKeyOrMainWindow;
}