1 /* clang-format off */
2 /* -*- Mode: Objective-C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
3 /* clang-format on */
4 /* This Source Code Form is subject to the terms of the Mozilla Public
5  * License, v. 2.0. If a copy of the MPL was not distributed with this
6  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 
8 #import <Cocoa/Cocoa.h>
9 
10 #import "mozAccessibleProtocol.h"
11 #import "MOXAccessibleProtocol.h"
12 
13 #include "Platform.h"
14 
GetObjectOrRepresentedView(id<mozAccessible> aObject)15 inline id<mozAccessible> GetObjectOrRepresentedView(id<mozAccessible> aObject) {
16   if (!mozilla::a11y::ShouldA11yBeEnabled()) {
17     // If platform a11y is not enabled, don't return represented view.
18     // This is mostly for our mochitest environment because the represented
19     // ChildView checks `ShouldA11yBeEnabled` before proxying accessibility
20     // methods to mozAccessibles.
21     return aObject;
22   }
23 
24   return [aObject hasRepresentedView] ? [aObject representedView] : aObject;
25 }
26 
27 @interface MOXAccessibleBase : NSObject <mozAccessible, MOXAccessible> {
28   BOOL mIsExpired;
29 }
30 
31 #pragma mark - mozAccessible/widget
32 
33 // override
34 - (BOOL)hasRepresentedView;
35 
36 // override
37 - (id)representedView;
38 
39 // override
40 - (BOOL)isRoot;
41 
42 #pragma mark - mozAccessible/NSAccessibility
43 
44 // The methods below interface with the platform through NSAccessibility.
45 // They should not be called directly or overridden in subclasses.
46 
47 // override, final
48 - (NSArray*)accessibilityAttributeNames;
49 
50 // override, final
51 - (id)accessibilityAttributeValue:(NSString*)attribute;
52 
53 // override, final
54 - (BOOL)accessibilityIsAttributeSettable:(NSString*)attribute;
55 
56 // override, final
57 - (void)accessibilitySetValue:(id)value forAttribute:(NSString*)attribute;
58 
59 // override, final
60 - (NSArray*)accessibilityActionNames;
61 
62 // override, final
63 - (void)accessibilityPerformAction:(NSString*)action;
64 
65 // override, final
66 - (NSString*)accessibilityActionDescription:(NSString*)action;
67 
68 // override, final
69 - (NSArray*)accessibilityParameterizedAttributeNames;
70 
71 // override, final
72 - (id)accessibilityAttributeValue:(NSString*)attribute
73                      forParameter:(id)parameter;
74 
75 // override, final
76 - (id)accessibilityHitTest:(NSPoint)point;
77 
78 // override, final
79 - (id)accessibilityFocusedUIElement;
80 
81 // override, final
82 - (BOOL)isAccessibilityElement;
83 
84 // final
85 - (BOOL)accessibilityNotifiesWhenDestroyed;
86 
87 #pragma mark - MOXAccessible protocol
88 
89 // override
90 - (id)moxHitTest:(NSPoint)point;
91 
92 // override
93 - (id)moxFocusedUIElement;
94 
95 // override
96 - (void)moxPostNotification:(NSString*)notification;
97 
98 // override
99 - (void)moxPostNotification:(NSString*)notification
100                withUserInfo:(NSDictionary*)userInfo;
101 
102 // override
103 - (BOOL)moxBlockSelector:(SEL)selector;
104 
105 // override
106 - (NSArray*)moxUnignoredChildren;
107 
108 // override
109 - (NSArray*)moxChildren;
110 
111 // override
112 - (id<mozAccessible>)moxUnignoredParent;
113 
114 // override
115 - (id<mozAccessible>)moxParent;
116 
117 // override
118 - (NSNumber*)moxIndexForChildUIElement:(id)child;
119 
120 // override
121 - (id)moxTopLevelUIElement;
122 
123 // override
124 - (id<MOXTextMarkerSupport>)moxTextMarkerDelegate;
125 
126 // override
127 - (BOOL)moxIsLiveRegion;
128 
129 // override
130 - (id<MOXAccessible>)moxFindAncestor:(BOOL (^)(id<MOXAccessible> moxAcc,
131                                                BOOL* stop))findBlock;
132 
133 #pragma mark -
134 
135 - (NSString*)description;
136 
137 - (BOOL)isExpired;
138 
139 // makes ourselves "expired". after this point, we might be around if someone
140 // has retained us (e.g., a third-party), but we really contain no information.
141 - (void)expire;
142 
143 @end
144