diff --git a/accessible/mac/AccessibleWrap.mm b/accessible/mac/AccessibleWrap.mm index 651a2fdf5582..b522cf55275d 100644 --- a/accessible/mac/AccessibleWrap.mm +++ b/accessible/mac/AccessibleWrap.mm @@ -18,6 +18,7 @@ #import "MOXLandmarkAccessibles.h" #import "MOXMathAccessibles.h" +#import "MOXOuterDoc.h" #import "MOXTextMarkerDelegate.h" #import "MOXWebAreaAccessible.h" #import "mozAccessible.h" @@ -118,6 +119,10 @@ Class AccessibleWrap::GetNativeType() { return [MOXWebAreaAccessible class]; } + if (IsOuterDoc()) { + return [MOXOuterDoc class]; + } + return GetTypeFromRole(Role()); NS_OBJC_END_TRY_BLOCK_RETURN(nil); diff --git a/accessible/mac/MOXOuterDoc.h b/accessible/mac/MOXOuterDoc.h new file mode 100644 index 000000000000..4f58ca3b29d2 --- /dev/null +++ b/accessible/mac/MOXOuterDoc.h @@ -0,0 +1,16 @@ +/* -*- Mode: Objective-C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: + * 2 -*- */ +/* vim:expandtab:shiftwidth=2:tabstop=2: + */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#import "mozAccessible.h" + +@interface MOXOuterDoc : mozAccessible + +// overrides +- (NSString*)moxContents; + +@end diff --git a/accessible/mac/MOXOuterDoc.mm b/accessible/mac/MOXOuterDoc.mm new file mode 100644 index 000000000000..2e1f3d745438 --- /dev/null +++ b/accessible/mac/MOXOuterDoc.mm @@ -0,0 +1,15 @@ +/* -*- (Mode: Objective-C++; tab-width: 2; indent-tabs-mode: nil; + * c-basic-offset:) 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#import "MOXOuterDoc.h" + +@implementation MOXOuterDoc + +- (NSArray* _Nullable)moxContents { + return [self moxUnignoredChildren]; +} + +@end diff --git a/accessible/mac/Platform.mm b/accessible/mac/Platform.mm index 9f9738ab36fe..d5eb008a40ab 100644 --- a/accessible/mac/Platform.mm +++ b/accessible/mac/Platform.mm @@ -14,6 +14,7 @@ #include "DocAccessibleParent.h" #include "mozTableAccessible.h" #include "mozTextAccessible.h" +#include "MOXOuterDoc.h" #include "MOXWebAreaAccessible.h" #include "nsAccUtils.h" #include "TextRange.h" @@ -65,6 +66,8 @@ void ProxyCreated(RemoteAccessible* aProxy) { type = [mozTableCellAccessible class]; } else if (aProxy->IsDoc()) { type = [MOXWebAreaAccessible class]; + } else if (aProxy->IsOuterDoc()) { + type = [MOXOuterDoc class]; } else { type = GetTypeFromRole(aProxy->Role()); } diff --git a/accessible/mac/moz.build b/accessible/mac/moz.build index acf6c4443b3f..84ce794494b8 100644 --- a/accessible/mac/moz.build +++ b/accessible/mac/moz.build @@ -21,6 +21,7 @@ UNIFIED_SOURCES += [ "MOXAccessibleBase.mm", "MOXLandmarkAccessibles.mm", "MOXMathAccessibles.mm", + "MOXOuterDoc.mm", "MOXSearchInfo.mm", "MOXTextMarkerDelegate.mm", "MOXWebAreaAccessible.mm", diff --git a/accessible/tests/browser/mac/browser_webarea.js b/accessible/tests/browser/mac/browser_webarea.js index 4872c588457f..3540b7fa25ae 100644 --- a/accessible/tests/browser/mac/browser_webarea.js +++ b/accessible/tests/browser/mac/browser_webarea.js @@ -75,3 +75,34 @@ addAccessibleTask(`
Hello
`, + async (browser, accDoc) => { + const doc = accDoc.nativeInterface.QueryInterface( + Ci.nsIAccessibleMacInterface + ); + + const outerDoc = doc.getAttributeValue("AXParent"); + const p = getNativeInterface(accDoc, "p"); + + let contents = outerDoc.getAttributeValue("AXContents"); + is(contents.length, 1, "outer doc has single AXContents member"); + is( + contents[0].getAttributeValue("AXRole"), + "AXWebArea", + "AXContents member is a web area" + ); + + ok( + !doc.attributeNames.includes("AXContents"), + "Web area does not have XContents" + ); + ok( + !p.attributeNames.includes("AXContents"), + "Web content does not hace XContents" + ); + }, + { iframe: true, remoteIframe: true } +);