1 2 /* 3 * Copyright (C) 2008 Apple Inc. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 15 * its contributors may be used to endorse or promote products derived 16 * from this software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 19 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 22 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 */ 29 30 #ifndef AccessibilityRenderObject_h 31 #define AccessibilityRenderObject_h 32 33 #include "AccessibilityObject.h" 34 #include <wtf/Forward.h> 35 36 namespace WebCore { 37 38 class AXObjectCache; 39 class Element; 40 class Frame; 41 class FrameView; 42 class HitTestResult; 43 class HTMLAnchorElement; 44 class HTMLAreaElement; 45 class HTMLElement; 46 class HTMLLabelElement; 47 class HTMLMapElement; 48 class HTMLSelectElement; 49 class IntPoint; 50 class IntSize; 51 class Node; 52 class RenderListBox; 53 class RenderTextControl; 54 class RenderView; 55 class VisibleSelection; 56 class Widget; 57 58 class AccessibilityRenderObject : public AccessibilityObject { 59 protected: 60 AccessibilityRenderObject(RenderObject*); 61 public: 62 static PassRefPtr<AccessibilityRenderObject> create(RenderObject*); 63 virtual ~AccessibilityRenderObject(); 64 65 bool isAccessibilityRenderObject() const { return true; } 66 67 virtual bool isAnchor() const; 68 virtual bool isAttachment() const; 69 virtual bool isHeading() const; 70 virtual bool isLink() const; 71 virtual bool isImageButton() const; 72 virtual bool isImage() const; 73 virtual bool isNativeImage() const; 74 virtual bool isPasswordField() const; 75 virtual bool isNativeTextControl() const; 76 virtual bool isWebArea() const; 77 virtual bool isFileUploadButton() const; 78 virtual bool isInputImage() const; 79 virtual bool isProgressIndicator() const; 80 virtual bool isSlider() const; 81 virtual bool isMenuRelated() const; 82 virtual bool isMenu() const; 83 virtual bool isMenuBar() const; 84 virtual bool isMenuButton() const; 85 virtual bool isMenuItem() const; 86 virtual bool isControl() const; 87 virtual bool isFieldset() const; 88 virtual bool isGroup() const; 89 90 virtual bool isEnabled() const; 91 virtual bool isSelected() const; 92 virtual bool isFocused() const; 93 virtual bool isChecked() const; 94 virtual bool isHovered() const; 95 virtual bool isIndeterminate() const; 96 virtual bool isLoaded() const; 97 virtual bool isMultiSelectable() const; 98 virtual bool isOffScreen() const; 99 virtual bool isPressed() const; 100 virtual bool isReadOnly() const; 101 virtual bool isVisited() const; 102 virtual bool isRequired() const; 103 virtual bool isLinked() const; 104 virtual void setIsExpanded(bool); 105 106 virtual bool canSetFocusAttribute() const; 107 virtual bool canSetTextRangeAttributes() const; 108 virtual bool canSetValueAttribute() const; 109 virtual bool canSetExpandedAttribute() const; 110 111 virtual void setAccessibleName(String&); 112 113 // Provides common logic used by all elements when determining isIgnored. 114 AccessibilityObjectInclusion accessibilityIsIgnoredBase() const; 115 virtual bool accessibilityIsIgnored() const; 116 117 virtual int headingLevel() const; 118 virtual AccessibilityButtonState checkboxOrRadioValue() const; 119 virtual String valueDescription() const; 120 virtual float valueForRange() const; 121 virtual float maxValueForRange() const; 122 virtual float minValueForRange() const; 123 virtual AccessibilityObject* selectedRadioButton(); 124 virtual AccessibilityObject* selectedTabItem(); 125 virtual int layoutCount() const; 126 virtual double estimatedLoadingProgress() const; 127 128 virtual AccessibilityObject* firstChild() const; 129 virtual AccessibilityObject* lastChild() const; 130 virtual AccessibilityObject* previousSibling() const; 131 virtual AccessibilityObject* nextSibling() const; 132 virtual AccessibilityObject* parentObject() const; 133 virtual AccessibilityObject* parentObjectIfExists() const; 134 virtual AccessibilityObject* observableObject() const; 135 virtual void linkedUIElements(AccessibilityChildrenVector&) const; 136 virtual bool exposesTitleUIElement() const; 137 virtual AccessibilityObject* titleUIElement() const; 138 virtual AccessibilityObject* correspondingControlForLabelElement() const; 139 virtual AccessibilityObject* correspondingLabelForControlElement() const; 140 141 virtual void ariaOwnsElements(AccessibilityChildrenVector&) const; 142 virtual bool supportsARIAOwns() const; 143 virtual AccessibilityRole ariaRoleAttribute() const; 144 virtual bool isPresentationalChildOfAriaRole() const; 145 virtual bool ariaRoleHasPresentationalChildren() const; 146 void updateAccessibilityRole(); 147 148 // Should be called on the root accessibility object to kick off a hit test. 149 virtual AccessibilityObject* accessibilityHitTest(const IntPoint&) const; 150 151 virtual Element* actionElement() const; 152 Element* mouseButtonListener() const; 153 FrameView* frameViewIfRenderView() const; 154 virtual Element* anchorElement() const; 155 AccessibilityObject* menuForMenuButton() const; 156 AccessibilityObject* menuButtonForMenu() const; 157 158 virtual IntRect boundingBoxRect() const; 159 virtual IntRect elementRect() const; 160 virtual IntSize size() const; 161 virtual IntPoint clickPoint() const; 162 163 void setRenderer(RenderObject* renderer) { m_renderer = renderer; } 164 virtual RenderObject* renderer() const { return m_renderer; } 165 RenderBoxModelObject* renderBoxModelObject() const; 166 virtual Node* node() const; 167 168 RenderView* topRenderer() const; 169 RenderTextControl* textControl() const; 170 Document* document() const; 171 FrameView* topDocumentFrameView() const; 172 HTMLLabelElement* labelElementContainer() const; 173 174 virtual KURL url() const; 175 virtual PlainTextRange selectedTextRange() const; 176 virtual VisibleSelection selection() const; 177 virtual String stringValue() const; 178 virtual String ariaLabeledByAttribute() const; 179 virtual String title() const; 180 virtual String ariaDescribedByAttribute() const; 181 virtual String accessibilityDescription() const; 182 virtual String helpText() const; 183 virtual String textUnderElement() const; 184 virtual String text() const; 185 virtual int textLength() const; 186 virtual String selectedText() const; 187 virtual const AtomicString& accessKey() const; 188 virtual const String& actionVerb() const; 189 virtual Widget* widget() const; 190 virtual Widget* widgetForAttachmentView() const; 191 virtual void getDocumentLinks(AccessibilityChildrenVector&); 192 virtual FrameView* documentFrameView() const; 193 virtual unsigned hierarchicalLevel() const; 194 195 virtual const AccessibilityChildrenVector& children(); 196 virtual void clearChildren(); 197 virtual void updateChildrenIfNecessary(); 198 199 virtual void setFocused(bool); 200 virtual void setSelectedTextRange(const PlainTextRange&); 201 virtual void setValue(const String&); 202 virtual void setSelected(bool); 203 virtual void setSelectedRows(AccessibilityChildrenVector&); 204 virtual void changeValueByPercent(float percentChange); 205 virtual AccessibilityOrientation orientation() const; 206 virtual void increment(); 207 virtual void decrement(); 208 209 virtual void detach(); 210 virtual void childrenChanged(); 211 virtual void contentChanged(); 212 virtual void addChildren(); 213 virtual bool canHaveChildren() const; 214 virtual void selectedChildren(AccessibilityChildrenVector&); 215 virtual void visibleChildren(AccessibilityChildrenVector&); 216 virtual void tabChildren(AccessibilityChildrenVector&); 217 virtual bool shouldFocusActiveDescendant() const; 218 virtual AccessibilityObject* activeDescendant() const; 219 virtual void handleActiveDescendantChanged(); 220 virtual void handleAriaExpandedChanged(); 221 222 virtual VisiblePositionRange visiblePositionRange() const; 223 virtual VisiblePositionRange visiblePositionRangeForLine(unsigned) const; 224 virtual IntRect boundsForVisiblePositionRange(const VisiblePositionRange&) const; 225 virtual void setSelectedVisiblePositionRange(const VisiblePositionRange&) const; 226 virtual bool supportsARIAFlowTo() const; 227 virtual void ariaFlowToElements(AccessibilityChildrenVector&) const; 228 virtual bool ariaHasPopup() const; 229 230 virtual bool supportsARIADropping() const; 231 virtual bool supportsARIADragging() const; 232 virtual bool isARIAGrabbed(); 233 virtual void setARIAGrabbed(bool); 234 virtual void determineARIADropEffects(Vector<String>&); 235 236 virtual VisiblePosition visiblePositionForPoint(const IntPoint&) const; 237 virtual VisiblePosition visiblePositionForIndex(unsigned indexValue, bool lastIndexOK) const; 238 virtual int index(const VisiblePosition&) const; 239 240 virtual VisiblePosition visiblePositionForIndex(int) const; 241 virtual int indexForVisiblePosition(const VisiblePosition&) const; 242 243 virtual PlainTextRange doAXRangeForLine(unsigned) const; 244 virtual PlainTextRange doAXRangeForIndex(unsigned) const; 245 246 virtual String doAXStringForRange(const PlainTextRange&) const; 247 virtual IntRect doAXBoundsForRange(const PlainTextRange&) const; 248 249 virtual void updateBackingStore(); 250 251 virtual String stringValueForMSAA() const; 252 virtual String stringRoleForMSAA() const; 253 virtual String nameForMSAA() const; 254 virtual String descriptionForMSAA() const; 255 virtual AccessibilityRole roleValueForMSAA() const; 256 257 protected: 258 RenderObject* m_renderer; 259 AccessibilityRole m_ariaRole; 260 mutable bool m_childrenDirty; 261 262 void setRenderObject(RenderObject* renderer) { m_renderer = renderer; } 263 void ariaLabeledByElements(Vector<Element*>& elements) const; 264 bool needsToUpdateChildren() const { return m_childrenDirty; } 265 266 virtual bool isDetached() const { return !m_renderer; } 267 268 private: 269 void ariaListboxSelectedChildren(AccessibilityChildrenVector&); 270 void ariaListboxVisibleChildren(AccessibilityChildrenVector&); 271 bool ariaIsHidden() const; 272 bool isDescendantOfBarrenParent() const; 273 bool isAllowedChildOfTree() const; 274 bool hasTextAlternative() const; 275 String positionalDescriptionForMSAA() const; 276 PlainTextRange ariaSelectedTextRange() const; 277 278 Element* menuElementForMenuButton() const; 279 Element* menuItemElementForMenu() const; 280 AccessibilityRole determineAccessibilityRole(); 281 AccessibilityRole determineAriaRoleAttribute() const; 282 283 bool isTabItemSelected() const; 284 bool isNativeCheckboxOrRadio() const; 285 IntRect checkboxOrRadioRect() const; 286 void addRadioButtonGroupMembers(AccessibilityChildrenVector& linkedUIElements) const; 287 AccessibilityObject* internalLinkElement() const; 288 AccessibilityObject* accessibilityImageMapHitTest(HTMLAreaElement*, const IntPoint&) const; 289 AccessibilityObject* accessibilityParentForImageMap(HTMLMapElement*) const; 290 bool renderObjectIsObservable(RenderObject*) const; 291 RenderObject* renderParentObject() const; 292 293 void ariaSelectedRows(AccessibilityChildrenVector&); 294 295 bool elementAttributeValue(const QualifiedName&) const; 296 void setElementAttributeValue(const QualifiedName&, bool); 297 298 String accessibilityDescriptionForElements(Vector<Element*> &elements) const; 299 void elementsFromAttribute(Vector<Element*>& elements, const QualifiedName&) const; 300 String ariaAccessibilityDescription() const; 301 302 virtual ESpeak speakProperty() const; 303 304 virtual const AtomicString& ariaLiveRegionStatus() const; 305 virtual const AtomicString& ariaLiveRegionRelevant() const; 306 virtual bool ariaLiveRegionAtomic() const; 307 virtual bool ariaLiveRegionBusy() const; 308 309 bool inheritsPresentationalRole() const; 310 void setNeedsToUpdateChildren() const { m_childrenDirty = true; } 311 312 mutable AccessibilityRole m_roleForMSAA; 313 }; 314 315 inline AccessibilityRenderObject* toAccessibilityRenderObject(AccessibilityObject* object) 316 { 317 ASSERT(!object || object->isAccessibilityRenderObject()); 318 return static_cast<AccessibilityRenderObject*>(object); 319 } 320 321 inline const AccessibilityRenderObject* toAccessibilityRenderObject(const AccessibilityObject* object) 322 { 323 ASSERT(!object || object->isAccessibilityRenderObject()); 324 return static_cast<const AccessibilityRenderObject*>(object); 325 } 326 327 // This will catch anyone doing an unnecessary cast. 328 void toAccessibilityRenderObject(const AccessibilityRenderObject*); 329 330 } // namespace WebCore 331 332 #endif // AccessibilityRenderObject_h 333