1/* 2 * Copyright (C) 2008 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. Neither the name of Apple Inc. ("Apple") nor the names of 14 * its contributors may be used to endorse or promote products derived 15 * from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29#ifndef AccessibilityRenderObject_h 30#define AccessibilityRenderObject_h 31 32#include "AccessibilityNodeObject.h" 33#include "LayoutRect.h" 34#include <wtf/Forward.h> 35 36namespace WebCore { 37 38class AccessibilitySVGRoot; 39class AXObjectCache; 40class Element; 41class Frame; 42class FrameView; 43class HitTestResult; 44class HTMLAnchorElement; 45class HTMLAreaElement; 46class HTMLElement; 47class HTMLLabelElement; 48class HTMLMapElement; 49class HTMLSelectElement; 50class IntPoint; 51class IntSize; 52class Node; 53class RenderListBox; 54class RenderTextControl; 55class RenderView; 56class VisibleSelection; 57class Widget; 58 59class AccessibilityRenderObject : public AccessibilityNodeObject { 60protected: 61 explicit AccessibilityRenderObject(RenderObject*); 62public: 63 static PassRefPtr<AccessibilityRenderObject> create(RenderObject*); 64 virtual ~AccessibilityRenderObject(); 65 66 virtual bool isAccessibilityRenderObject() const override { return true; } 67 68 virtual void init() override; 69 70 virtual bool isAttachment() const override; 71 virtual bool isFileUploadButton() const override; 72 73 virtual bool isSelected() const override; 74 virtual bool isFocused() const override; 75 virtual bool isLoaded() const override; 76 virtual bool isOffScreen() const override; 77 virtual bool isReadOnly() const override; 78 virtual bool isUnvisited() const override; 79 virtual bool isVisited() const override; 80 virtual bool isLinked() const override; 81 virtual bool hasBoldFont() const override; 82 virtual bool hasItalicFont() const override; 83 virtual bool hasPlainText() const override; 84 virtual bool hasSameFont(RenderObject*) const override; 85 virtual bool hasSameFontColor(RenderObject*) const override; 86 virtual bool hasSameStyle(RenderObject*) const override; 87 virtual bool hasUnderline() const override; 88 89 virtual bool canSetTextRangeAttributes() const override; 90 virtual bool canSetValueAttribute() const override; 91 virtual bool canSetExpandedAttribute() const override; 92 93 virtual void setAccessibleName(const AtomicString&) override; 94 95 // Provides common logic used by all elements when determining isIgnored. 96 virtual AccessibilityObjectInclusion defaultObjectInclusion() const override; 97 98 virtual int layoutCount() const override; 99 virtual double estimatedLoadingProgress() const override; 100 101 virtual AccessibilityObject* firstChild() const override; 102 virtual AccessibilityObject* lastChild() const override; 103 virtual AccessibilityObject* previousSibling() const override; 104 virtual AccessibilityObject* nextSibling() const override; 105 virtual AccessibilityObject* parentObject() const override; 106 virtual AccessibilityObject* parentObjectIfExists() const override; 107 virtual AccessibilityObject* observableObject() const override; 108 virtual void linkedUIElements(AccessibilityChildrenVector&) const override; 109 virtual bool exposesTitleUIElement() const override; 110 virtual AccessibilityObject* titleUIElement() const override; 111 virtual AccessibilityObject* correspondingControlForLabelElement() const override; 112 virtual AccessibilityObject* correspondingLabelForControlElement() const override; 113 114 virtual void ariaOwnsElements(AccessibilityChildrenVector&) const override; 115 virtual bool supportsARIAOwns() const override; 116 virtual bool isPresentationalChildOfAriaRole() const override; 117 virtual bool ariaRoleHasPresentationalChildren() const override; 118 119 // Should be called on the root accessibility object to kick off a hit test. 120 virtual AccessibilityObject* accessibilityHitTest(const IntPoint&) const override; 121 122 virtual Element* anchorElement() const override; 123 124 virtual LayoutRect boundingBoxRect() const override; 125 virtual LayoutRect elementRect() const override; 126 virtual IntPoint clickPoint() override; 127 128 void setRenderer(RenderObject*); 129 virtual RenderObject* renderer() const override { return m_renderer; } 130 RenderBoxModelObject* renderBoxModelObject() const; 131 virtual Node* node() const override; 132 133 virtual Document* document() const override; 134 135 RenderView* topRenderer() const; 136 RenderTextControl* textControl() const; 137 HTMLLabelElement* labelElementContainer() const; 138 139 virtual URL url() const override; 140 virtual PlainTextRange selectedTextRange() const override; 141 virtual VisibleSelection selection() const override; 142 virtual String stringValue() const override; 143 virtual String helpText() const override; 144 virtual String textUnderElement(AccessibilityTextUnderElementMode = AccessibilityTextUnderElementMode()) const override; 145 virtual String text() const override; 146 virtual int textLength() const override; 147 virtual String selectedText() const override; 148 virtual const AtomicString& accessKey() const override; 149 virtual const String& actionVerb() const; 150 virtual Widget* widget() const override; 151 virtual Widget* widgetForAttachmentView() const override; 152 virtual void getDocumentLinks(AccessibilityChildrenVector&); 153 virtual FrameView* documentFrameView() const override; 154 155 virtual void clearChildren() override; 156 virtual void updateChildrenIfNecessary() override; 157 158 virtual void setFocused(bool) override; 159 virtual void setSelectedTextRange(const PlainTextRange&) override; 160 virtual void setValue(const String&) override; 161 virtual void setSelectedRows(AccessibilityChildrenVector&) override; 162 virtual AccessibilityOrientation orientation() const override; 163 164 virtual void detach(AccessibilityDetachmentType, AXObjectCache*) override; 165 virtual void textChanged() override; 166 virtual void addChildren() override; 167 virtual bool canHaveChildren() const override; 168 virtual void selectedChildren(AccessibilityChildrenVector&) override; 169 virtual void visibleChildren(AccessibilityChildrenVector&) override; 170 virtual void tabChildren(AccessibilityChildrenVector&) override; 171 virtual bool shouldFocusActiveDescendant() const override; 172 bool shouldNotifyActiveDescendant() const; 173 virtual AccessibilityObject* activeDescendant() const override; 174 virtual void handleActiveDescendantChanged() override; 175 virtual void handleAriaExpandedChanged() override; 176 177 virtual VisiblePositionRange visiblePositionRange() const override; 178 virtual VisiblePositionRange visiblePositionRangeForLine(unsigned) const override; 179 virtual IntRect boundsForVisiblePositionRange(const VisiblePositionRange&) const override; 180 virtual void setSelectedVisiblePositionRange(const VisiblePositionRange&) const override; 181 virtual bool supportsARIAFlowTo() const override; 182 virtual void ariaFlowToElements(AccessibilityChildrenVector&) const override; 183 virtual bool supportsARIADescribedBy() const override; 184 virtual void ariaDescribedByElements(AccessibilityChildrenVector&) const override; 185 virtual bool supportsARIAControls() const override; 186 virtual void ariaControlsElements(AccessibilityChildrenVector&) const override; 187 virtual bool ariaHasPopup() const override; 188 189 virtual bool supportsARIADropping() const override; 190 virtual bool supportsARIADragging() const override; 191 virtual bool isARIAGrabbed() override; 192 virtual void determineARIADropEffects(Vector<String>&) override; 193 194 virtual VisiblePosition visiblePositionForPoint(const IntPoint&) const override; 195 virtual VisiblePosition visiblePositionForIndex(unsigned indexValue, bool lastIndexOK) const override; 196 virtual int index(const VisiblePosition&) const override; 197 198 virtual VisiblePosition visiblePositionForIndex(int) const override; 199 virtual int indexForVisiblePosition(const VisiblePosition&) const override; 200 201 virtual void lineBreaks(Vector<int>&) const override; 202 virtual PlainTextRange doAXRangeForLine(unsigned) const override; 203 virtual PlainTextRange doAXRangeForIndex(unsigned) const override; 204 205 virtual String doAXStringForRange(const PlainTextRange&) const override; 206 virtual IntRect doAXBoundsForRange(const PlainTextRange&) const override; 207 208 virtual String stringValueForMSAA() const override; 209 virtual String stringRoleForMSAA() const override; 210 virtual String nameForMSAA() const override; 211 virtual String descriptionForMSAA() const override; 212 virtual AccessibilityRole roleValueForMSAA() const override; 213 214 virtual String passwordFieldValue() const override; 215 216protected: 217 RenderObject* m_renderer; 218 219 void setRenderObject(RenderObject* renderer) { m_renderer = renderer; } 220 void ariaElementsFromAttribute(AccessibilityChildrenVector&, const QualifiedName&) const; 221 bool needsToUpdateChildren() const { return m_childrenDirty; } 222 virtual ScrollableArea* getScrollableAreaIfScrollable() const override; 223 virtual void scrollTo(const IntPoint&) const override; 224 225 virtual bool isDetached() const override { return !m_renderer; } 226 227 virtual AccessibilityRole determineAccessibilityRole() override; 228 virtual bool computeAccessibilityIsIgnored() const override; 229 230private: 231 void ariaListboxSelectedChildren(AccessibilityChildrenVector&); 232 void ariaListboxVisibleChildren(AccessibilityChildrenVector&); 233 bool isAllowedChildOfTree() const; 234 bool hasTextAlternative() const; 235 String positionalDescriptionForMSAA() const; 236 PlainTextRange documentBasedSelectedTextRange() const; 237 Element* rootEditableElementForPosition(const Position&) const; 238 bool nodeIsTextControl(const Node*) const; 239 virtual void setNeedsToUpdateChildren() override { m_childrenDirty = true; } 240 virtual Path elementPath() const override; 241 242 bool isTabItemSelected() const; 243 LayoutRect checkboxOrRadioRect() const; 244 void addRadioButtonGroupMembers(AccessibilityChildrenVector& linkedUIElements) const; 245 AccessibilityObject* internalLinkElement() const; 246 AccessibilityObject* accessibilityImageMapHitTest(HTMLAreaElement*, const IntPoint&) const; 247 AccessibilityObject* accessibilityParentForImageMap(HTMLMapElement*) const; 248 virtual AccessibilityObject* elementAccessibilityHitTest(const IntPoint&) const override; 249 250 bool renderObjectIsObservable(RenderObject*) const; 251 RenderObject* renderParentObject() const; 252 bool isDescendantOfElementType(const QualifiedName& tagName) const; 253 254 bool isSVGImage() const; 255 void detachRemoteSVGRoot(); 256 AccessibilitySVGRoot* remoteSVGRootElement() const; 257 AccessibilityObject* remoteSVGElementHitTest(const IntPoint&) const; 258 void offsetBoundingBoxForRemoteSVGElement(LayoutRect&) const; 259 virtual bool supportsPath() const override; 260 261 void addHiddenChildren(); 262 void addTextFieldChildren(); 263 void addImageMapChildren(); 264 void addCanvasChildren(); 265 void addAttachmentChildren(); 266 void addRemoteSVGChildren(); 267#if PLATFORM(COCOA) 268 void updateAttachmentViewParents(); 269#endif 270 virtual String expandedTextValue() const; 271 virtual bool supportsExpandedTextValue() const; 272 void updateRoleAfterChildrenCreation(); 273 274 void ariaSelectedRows(AccessibilityChildrenVector&); 275 276 bool elementAttributeValue(const QualifiedName&) const; 277 void setElementAttributeValue(const QualifiedName&, bool); 278 279 virtual ESpeak speakProperty() const override; 280 281 virtual const String ariaLiveRegionStatus() const override; 282 virtual const AtomicString& ariaLiveRegionRelevant() const override; 283 virtual bool ariaLiveRegionAtomic() const override; 284 virtual bool ariaLiveRegionBusy() const override; 285 286 virtual bool inheritsPresentationalRole() const override; 287 288#if ENABLE(MATHML) 289 // All math elements return true for isMathElement(). 290 virtual bool isMathElement() const override; 291 virtual bool isMathFraction() const override; 292 virtual bool isMathFenced() const override; 293 virtual bool isMathSubscriptSuperscript() const override; 294 virtual bool isMathRow() const override; 295 virtual bool isMathUnderOver() const override; 296 virtual bool isMathRoot() const override; 297 virtual bool isMathSquareRoot() const override; 298 virtual bool isMathText() const override; 299 virtual bool isMathNumber() const override; 300 virtual bool isMathOperator() const override; 301 virtual bool isMathFenceOperator() const override; 302 virtual bool isMathSeparatorOperator() const override; 303 virtual bool isMathIdentifier() const override; 304 virtual bool isMathTable() const override; 305 virtual bool isMathTableRow() const override; 306 virtual bool isMathTableCell() const override; 307 virtual bool isMathMultiscript() const override; 308 309 // Generic components. 310 virtual AccessibilityObject* mathBaseObject() override; 311 312 // Root components. 313 virtual AccessibilityObject* mathRadicandObject() override; 314 virtual AccessibilityObject* mathRootIndexObject() override; 315 316 // Fraction components. 317 virtual AccessibilityObject* mathNumeratorObject() override; 318 virtual AccessibilityObject* mathDenominatorObject() override; 319 320 // Under over components. 321 virtual AccessibilityObject* mathUnderObject() override; 322 virtual AccessibilityObject* mathOverObject() override; 323 324 // Subscript/superscript components. 325 virtual AccessibilityObject* mathSubscriptObject() override; 326 virtual AccessibilityObject* mathSuperscriptObject() override; 327 328 // Fenced components. 329 virtual String mathFencedOpenString() const override; 330 virtual String mathFencedCloseString() const override; 331 virtual int mathLineThickness() const override; 332 333 // Multiscripts components. 334 virtual void mathPrescripts(AccessibilityMathMultiscriptPairs&) override; 335 virtual void mathPostscripts(AccessibilityMathMultiscriptPairs&) override; 336 337 bool isIgnoredElementWithinMathTree() const; 338#endif 339}; 340 341ACCESSIBILITY_OBJECT_TYPE_CASTS(AccessibilityRenderObject, isAccessibilityRenderObject()) 342 343} // namespace WebCore 344 345#endif // AccessibilityRenderObject_h 346