#include "wtf/RefPtr.h"
#include "wtf/Vector.h"
-namespace WebCore {
+namespace blink {
class AXObject;
-class AXObjectCache;
+class AXObjectCacheImpl;
class Element;
-class LocalFrame;
class FrameView;
-class HTMLAnchorElement;
-class HTMLAreaElement;
class IntPoint;
-class IntSize;
class Node;
class RenderObject;
-class RenderListItem;
class ScrollableArea;
-class VisibleSelection;
class Widget;
typedef unsigned AXID;
ApplicationRole,
ArticleRole,
BannerRole,
+ BlockquoteRole,
BrowserRole,
BusyIndicatorRole,
ButtonRole,
ComboBoxRole,
ComplementaryRole,
ContentInfoRole,
+ DateRole,
+ DateTimeRole,
DefinitionRole,
DescriptionListDetailRole,
+ DescriptionListRole,
DescriptionListTermRole,
+ DetailsRole,
DialogRole,
DirectoryRole,
DisclosureTriangleRole,
DocumentRole,
DrawerRole,
EditableTextRole,
+ EmbeddedObjectRole,
+ FigcaptionRole,
+ FigureRole,
FooterRole,
FormRole,
GridRole,
HeadingRole,
HelpTagRole,
HorizontalRuleRole,
+ IframeRole,
IgnoredRole,
ImageMapLinkRole,
ImageMapRole,
MenuBarRole,
MenuButtonRole,
MenuItemRole,
+ MenuItemCheckBoxRole,
+ MenuItemRadioRole,
MenuListOptionRole,
MenuListPopupRole,
MenuRole,
+ MeterRole,
NavigationRole,
+ NoneRole,
NoteRole,
OutlineRole,
ParagraphRole,
PopUpButtonRole,
+ PreRole,
PresentationalRole,
ProgressIndicatorRole,
RadioButtonRole,
TableRole,
TextAreaRole,
TextFieldRole,
+ TimeRole,
TimerRole,
ToggleButtonRole,
ToolbarRole,
enum AccessibilityState {
AXBusyState,
AXCheckedState,
- AXCollapsedState,
AXEnabledState,
AXExpandedState,
AXFocusableState,
AccessibilityTextDirectionBottomToTop
};
+enum AccessibilityExpanded {
+ ExpandedUndefined = 0,
+ ExpandedCollapsed,
+ ExpandedExpanded,
+};
+
class AXObject : public RefCounted<AXObject> {
public:
typedef Vector<RefPtr<AXObject> > AccessibilityChildrenVector;
virtual ~AXObject();
// After constructing an AXObject, it must be given a
- // unique ID, then added to AXObjectCache, and finally init() must
+ // unique ID, then added to AXObjectCacheImpl, and finally init() must
// be called last.
void setAXObjectID(AXID axObjectID) { m_id = axObjectID; }
virtual void init() { }
virtual void detach();
virtual bool isDetached() const;
- // The AXObjectCache that owns this object, and its unique ID within this cache.
- AXObjectCache* axObjectCache() const;
- AXID axObjectID() const { return m_id; }
+ // If the parent of this object is known, this can be faster than using computeParent().
+ virtual void setParent(AXObject* parent) { m_parent = parent; }
- // Lays out the page so that the accessibility tree is based on up-to-date information.
- void updateBackingStore();
+ // The AXObjectCacheImpl that owns this object, and its unique ID within this cache.
+ AXObjectCacheImpl* axObjectCache() const;
+ AXID axObjectID() const { return m_id; }
// Determine subclass type.
virtual bool isAXNodeObject() const { return false; }
bool isComboBox() const { return roleValue() == ComboBoxRole; }
virtual bool isControl() const { return false; }
virtual bool isDataTable() const { return false; }
+ virtual bool isEmbeddedObject() const { return false; }
virtual bool isFieldset() const { return false; }
virtual bool isFileUploadButton() const { return false; }
virtual bool isHeading() const { return false; }
virtual bool isNativeTextControl() const { return false; } // input or textarea
virtual bool isNonNativeTextControl() const { return false; } // contenteditable or role=textbox
virtual bool isPasswordField() const { return false; }
+ virtual bool isPasswordFieldAndShouldHideValue() const;
virtual bool isProgressIndicator() const { return false; }
bool isRadioButton() const { return roleValue() == RadioButtonRole; }
bool isScrollbar() const { return roleValue() == ScrollBarRole; }
virtual bool isClickable() const;
virtual bool isCollapsed() const { return false; }
virtual bool isEnabled() const { return false; }
- bool isExpanded() const;
+ virtual AccessibilityExpanded isExpanded() const { return ExpandedUndefined; }
virtual bool isFocused() const { return false; }
virtual bool isHovered() const { return false; }
virtual bool isIndeterminate() const { return false; }
virtual bool canSetFocusAttribute() const { return false; }
virtual bool canSetValueAttribute() const { return false; }
virtual bool canSetSelectedAttribute() const { return false; }
- virtual bool canSetSelectedChildrenAttribute() const { return false; }
// Whether objects are ignored, i.e. not included in the tree.
bool accessibilityIsIgnored() const;
// 1-based, to match the aria-level spec.
virtual unsigned hierarchicalLevel() const { return 0; }
virtual AccessibilityOrientation orientation() const;
- virtual int tableLevel() const { return 0; }
virtual String text() const { return String(); }
virtual int textLength() const { return 0; }
virtual AXObject* titleUIElement() const { return 0; }
virtual KURL url() const { return KURL(); }
+ // Load inline text boxes for just this node, even if
+ // settings->inlineTextBoxAccessibilityEnabled() is false.
+ virtual void loadInlineTextBoxes() { }
+
// For an inline text box.
virtual AccessibilityTextDirection textDirection() const { return AccessibilityTextDirectionLeftToRight; }
// The integer horizontal pixel offset of each character in the string; negative values for RTL.
virtual float valueForRange() const { return 0.0f; }
virtual float maxValueForRange() const { return 0.0f; }
virtual float minValueForRange() const { return 0.0f; }
- virtual void selectedChildren(AccessibilityChildrenVector&) { }
virtual String stringValue() const { return String(); }
+ virtual const AtomicString& textInputType() const { return nullAtom; }
// ARIA attributes.
virtual AXObject* activeDescendant() const { return 0; }
bool ariaPressedIsPresent() const;
virtual AccessibilityRole ariaRoleAttribute() const { return UnknownRole; }
virtual bool ariaRoleHasPresentationalChildren() const { return false; }
- const AtomicString& invalidStatus() const;
virtual bool isARIAGrabbed() { return false; }
virtual bool isPresentationalChildOfAriaRole() const { return false; }
virtual bool shouldFocusActiveDescendant() const { return false; }
void ariaTreeRows(AccessibilityChildrenVector&);
// ARIA live-region features.
- bool supportsARIALiveRegion() const;
- virtual const AtomicString& ariaLiveRegionStatus() const { return nullAtom; }
- virtual const AtomicString& ariaLiveRegionRelevant() const { return nullAtom; }
- virtual bool ariaLiveRegionAtomic() const { return false; }
- virtual bool ariaLiveRegionBusy() const { return false; }
+ bool isLiveRegion() const;
+ const AXObject* liveRegionRoot() const;
+ virtual const AtomicString& liveRegionStatus() const { return nullAtom; }
+ virtual const AtomicString& liveRegionRelevant() const { return nullAtom; }
+ virtual bool liveRegionAtomic() const { return false; }
+ virtual bool liveRegionBusy() const { return false; }
+
+ const AtomicString& containerLiveRegionStatus() const;
+ const AtomicString& containerLiveRegionRelevant() const;
+ bool containerLiveRegionAtomic() const;
+ bool containerLiveRegionBusy() const;
// Accessibility Text.
virtual String textUnderElement() const { return String(); }
// High-level accessibility tree access. Other modules should only use these functions.
const AccessibilityChildrenVector& children();
- virtual AXObject* parentObject() const = 0;
+ AXObject* parentObject() const;
+ AXObject* parentObjectIfExists() const;
+ virtual AXObject* computeParent() const = 0;
+ virtual AXObject* computeParentIfExists() const { return 0; }
+ AXObject* cachedParentObject() const { return m_parent; }
AXObject* parentObjectUnignored() const;
- virtual AXObject* parentObjectIfExists() const { return 0; }
// Low-level accessibility tree exploration, only for use within the accessibility module.
virtual AXObject* firstChild() const { return 0; }
virtual bool canHaveChildren() const { return true; }
bool hasChildren() const { return m_haveChildren; }
virtual void updateChildrenIfNecessary();
+ virtual bool needsToUpdateChildren() const { return false; }
virtual void setNeedsToUpdateChildren() { }
virtual void clearChildren();
- virtual void detachFromParent() { }
+ virtual void detachFromParent() { m_parent = 0; }
virtual AXObject* observableObject() const { return 0; }
virtual AXObject* scrollBar(AccessibilityOrientation) { return 0; }
unsigned getLengthForTextRange() const { return text().length(); }
bool m_detached;
+
+ mutable AXObject* m_parent;
+
+ // The following cached attribute values (the ones starting with m_cached*)
+ // are only valid if m_lastModificationCount matches AXObjectCacheImpl::modificationCount().
+ mutable int m_lastModificationCount;
+ mutable bool m_cachedIsIgnored;
+ mutable const AXObject* m_cachedLiveRegionRoot;
+
+ // Updates the cached attribute values. This may be recursive, so to prevent deadlocks,
+ // functions called here may only search up the tree (ancestors), not down.
+ void updateCachedAttributeValuesIfNeeded() const;
};
#define DEFINE_AX_OBJECT_TYPE_CASTS(thisType, predicate) \
DEFINE_TYPE_CASTS(thisType, AXObject, object, object->predicate, object.predicate)
-} // namespace WebCore
+} // namespace blink
#endif // AXObject_h