summaryrefslogtreecommitdiff
path: root/Source/WebCore/accessibility/AccessibilityObject.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/accessibility/AccessibilityObject.h
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/accessibility/AccessibilityObject.h')
-rw-r--r--Source/WebCore/accessibility/AccessibilityObject.h365
1 files changed, 265 insertions, 100 deletions
diff --git a/Source/WebCore/accessibility/AccessibilityObject.h b/Source/WebCore/accessibility/AccessibilityObject.h
index 390ae2f9e..63ea8c638 100644
--- a/Source/WebCore/accessibility/AccessibilityObject.h
+++ b/Source/WebCore/accessibility/AccessibilityObject.h
@@ -11,7 +11,7 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ * 3. Neither the name of Apple Inc. ("Apple") nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
@@ -27,27 +27,28 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef AccessibilityObject_h
-#define AccessibilityObject_h
+#pragma once
#include "FloatQuad.h"
+#include "HTMLTextFormControlElement.h"
#include "LayoutRect.h"
#include "Path.h"
-#include "TextIterator.h"
+#include "Range.h"
+#include "TextIteratorBehavior.h"
#include "VisiblePosition.h"
#include "VisibleSelection.h"
#include <wtf/Forward.h>
#include <wtf/RefPtr.h>
#include <wtf/Vector.h>
-#if PLATFORM(MAC)
+#if PLATFORM(COCOA)
#include <wtf/RetainPtr.h>
#elif PLATFORM(WIN)
#include "AccessibilityObjectWrapperWin.h"
#include "COMPtr.h"
#endif
-#if PLATFORM(MAC)
+#if PLATFORM(COCOA)
typedef struct _NSRange NSRange;
@@ -62,7 +63,7 @@ OBJC_CLASS WebAccessibilityObjectWrapper;
typedef WebAccessibilityObjectWrapper AccessibilityObjectWrapper;
-#elif PLATFORM(GTK) || (PLATFORM(EFL) && HAVE(ACCESSIBILITY))
+#elif PLATFORM(GTK)
typedef struct _AtkObject AtkObject;
typedef struct _AtkObject AccessibilityObjectWrapper;
#else
@@ -76,17 +77,14 @@ class AXObjectCache;
class Element;
class Frame;
class FrameView;
-class HTMLAnchorElement;
-class HTMLAreaElement;
class IntPoint;
class IntSize;
class MainFrame;
class Node;
class Page;
class RenderObject;
-class RenderListItem;
class ScrollableArea;
-class VisibleSelection;
+class ScrollView;
class Widget;
typedef unsigned AXID;
@@ -102,10 +100,12 @@ enum AccessibilityRole {
ApplicationStatusRole,
ApplicationTimerRole,
AudioRole,
+ BlockquoteRole,
BrowserRole,
BusyIndicatorRole,
ButtonRole,
CanvasRole,
+ CaptionRole,
CellRole,
CheckBoxRole,
ColorWellRole,
@@ -116,6 +116,7 @@ enum AccessibilityRole {
DescriptionListRole,
DescriptionListTermRole,
DescriptionListDetailRole,
+ DetailsRole,
DirectoryRole,
DisclosureTriangleRole,
DivRole,
@@ -123,29 +124,30 @@ enum AccessibilityRole {
DocumentArticleRole,
DocumentMathRole,
DocumentNoteRole,
- DocumentRegionRole,
DrawerRole,
EditableTextRole,
FooterRole,
FormRole,
GridRole,
+ GridCellRole,
GroupRole,
GrowAreaRole,
HeadingRole,
HelpTagRole,
HorizontalRuleRole,
IgnoredRole,
+ InlineRole,
ImageRole,
ImageMapRole,
ImageMapLinkRole,
IncrementorRole,
LabelRole,
- LandmarkApplicationRole,
LandmarkBannerRole,
LandmarkComplementaryRole,
LandmarkContentInfoRole,
LandmarkMainRole,
LandmarkNavigationRole,
+ LandmarkRegionRole,
LandmarkSearchRole,
LegendRole,
LinkRole,
@@ -154,6 +156,7 @@ enum AccessibilityRole {
ListBoxOptionRole,
ListItemRole,
ListMarkerRole,
+ MarkRole,
MathElementRole,
MatteRole,
MenuRole,
@@ -167,17 +170,24 @@ enum AccessibilityRole {
OutlineRole,
ParagraphRole,
PopUpButtonRole,
+ PreRole,
PresentationalRole,
ProgressIndicatorRole,
RadioButtonRole,
RadioGroupRole,
RowHeaderRole,
RowRole,
+ RowGroupRole,
+ RubyBaseRole,
+ RubyBlockRole,
+ RubyInlineRole,
+ RubyRunRole,
+ RubyTextRole,
RulerRole,
RulerMarkerRole,
ScrollAreaRole,
ScrollBarRole,
- SeamlessWebAreaRole,
+ SearchFieldRole,
SheetRole,
SliderRole,
SliderThumbRole,
@@ -186,8 +196,13 @@ enum AccessibilityRole {
SplitGroupRole,
SplitterRole,
StaticTextRole,
+ SummaryRole,
+ SwitchRole,
SystemWideRole,
SVGRootRole,
+ SVGTextRole,
+ SVGTSpanRole,
+ SVGTextPathRole,
TabGroupRole,
TabListRole,
TabPanelRole,
@@ -205,6 +220,7 @@ enum AccessibilityRole {
UserInterfaceTooltipRole,
ValueIndicatorRole,
VideoRole,
+ WebApplicationRole,
WebAreaRole,
WebCoreLinkRole,
WindowRole,
@@ -219,6 +235,9 @@ enum AccessibilityTextSource {
TitleTagText,
PlaceholderText,
LabelByElementText,
+ TitleText,
+ SubtitleText,
+ ActionText,
};
struct AccessibilityText {
@@ -231,10 +250,10 @@ struct AccessibilityText {
, textSource(s)
{ }
- AccessibilityText(const String& t, const AccessibilityTextSource& s, const Vector<RefPtr<AccessibilityObject>> elements)
+ AccessibilityText(const String& t, const AccessibilityTextSource& s, Vector<RefPtr<AccessibilityObject>> elements)
: text(t)
, textSource(s)
- , textElements(elements)
+ , textElements(WTFMove(elements))
{ }
AccessibilityText(const String& t, const AccessibilityTextSource& s, const RefPtr<AccessibilityObject> element)
@@ -249,20 +268,24 @@ struct AccessibilityTextUnderElementMode {
enum ChildrenInclusion {
TextUnderElementModeSkipIgnoredChildren,
TextUnderElementModeIncludeAllChildren,
+ TextUnderElementModeIncludeNameFromContentsChildren, // This corresponds to ARIA concept: nameFrom
};
ChildrenInclusion childrenInclusion;
bool includeFocusableContent;
+ Node* ignoredChildNode;
- AccessibilityTextUnderElementMode(ChildrenInclusion c = TextUnderElementModeSkipIgnoredChildren, bool i = false)
- : childrenInclusion(c)
- , includeFocusableContent(i)
- { }
+ AccessibilityTextUnderElementMode(ChildrenInclusion c = TextUnderElementModeSkipIgnoredChildren, bool i = false, Node* ignored = nullptr)
+ : childrenInclusion(c)
+ , includeFocusableContent(i)
+ , ignoredChildNode(ignored)
+ { }
};
enum AccessibilityOrientation {
AccessibilityOrientationVertical,
AccessibilityOrientationHorizontal,
+ AccessibilityOrientationUndefined,
};
enum AccessibilityObjectInclusion {
@@ -317,6 +340,7 @@ enum AccessibilitySearchKey {
ListSearchKey,
LiveRegionSearchKey,
MisspelledWordSearchKey,
+ OutlineSearchKey,
PlainTextSearchKey,
RadioGroupSearchKey,
SameTypeSearchKey,
@@ -342,13 +366,15 @@ struct AccessibilitySearchCriteria {
String searchText;
unsigned resultsLimit;
bool visibleOnly;
+ bool immediateDescendantsOnly;
- AccessibilitySearchCriteria(AccessibilityObject* startObject, AccessibilitySearchDirection searchDirection, String searchText, unsigned resultsLimit, bool visibleOnly)
- : startObject(startObject)
- , searchDirection(searchDirection)
- , searchText(searchText)
- , resultsLimit(resultsLimit)
- , visibleOnly(visibleOnly)
+ AccessibilitySearchCriteria(AccessibilityObject* startObject, AccessibilitySearchDirection searchDirection, String searchText, unsigned resultsLimit, bool visibleOnly, bool immediateDescendantsOnly)
+ : startObject(startObject)
+ , searchDirection(searchDirection)
+ , searchText(searchText)
+ , resultsLimit(resultsLimit)
+ , visibleOnly(visibleOnly)
+ , immediateDescendantsOnly(immediateDescendantsOnly)
{ }
};
@@ -366,6 +392,11 @@ struct VisiblePositionRange {
, end(e)
{ }
+ VisiblePositionRange(const VisibleSelection& selection)
+ : start(selection.start())
+ , end(selection.end())
+ { }
+
bool isNull() const { return start.isNull() || end.isNull(); }
};
@@ -387,6 +418,38 @@ struct PlainTextRange {
bool isNull() const { return !start && !length; }
};
+enum AccessibilitySelectTextActivity {
+ FindAndReplaceActivity,
+ FindAndSelectActivity,
+ FindAndCapitalize,
+ FindAndLowercase,
+ FindAndUppercase
+};
+
+enum AccessibilitySelectTextAmbiguityResolution {
+ ClosestAfterSelectionAmbiguityResolution,
+ ClosestBeforeSelectionAmbiguityResolution,
+ ClosestToSelectionAmbiguityResolution
+};
+
+struct AccessibilitySelectTextCriteria {
+ AccessibilitySelectTextActivity activity;
+ AccessibilitySelectTextAmbiguityResolution ambiguityResolution;
+ String replacementString;
+ Vector<String> searchStrings;
+
+ AccessibilitySelectTextCriteria(AccessibilitySelectTextActivity activity, AccessibilitySelectTextAmbiguityResolution ambiguityResolution, const String& replacementString)
+ : activity(activity)
+ , ambiguityResolution(ambiguityResolution)
+ , replacementString(replacementString)
+ { }
+};
+
+enum AccessibilityMathScriptObjectType { Subscript, Superscript };
+enum AccessibilityMathMultiscriptObjectType { PreSubscript, PreSuperscript, PostSubscript, PostSuperscript };
+
+enum AccessibilityARIACurrentState { ARIACurrentFalse, ARIACurrentTrue, ARIACurrentPage, ARIACurrentStep, ARIACurrentLocation, ARIACurrentDate, ARIACurrentTime };
+
class AccessibilityObject : public RefCounted<AccessibilityObject> {
protected:
AccessibilityObject();
@@ -412,25 +475,29 @@ public:
virtual bool isAccessibilityScrollbar() const { return false; }
virtual bool isAccessibilityScrollView() const { return false; }
virtual bool isAccessibilitySVGRoot() const { return false; }
+ virtual bool isAccessibilitySVGElement() const { return false; }
bool accessibilityObjectContainsText(String *) const;
-
- virtual bool isAnchor() const { return false; }
- virtual bool isAttachment() const { return false; }
+
+ virtual bool isAttachmentElement() const { return false; }
virtual bool isHeading() const { return false; }
virtual bool isLink() const { return false; }
virtual bool isImage() const { return false; }
+ virtual bool isImageMap() const { return roleValue() == ImageMapRole; }
virtual bool isNativeImage() const { return false; }
virtual bool isImageButton() const { return false; }
virtual bool isPasswordField() const { return false; }
+ bool isContainedByPasswordField() const;
+ virtual AccessibilityObject* passwordFieldOrContainingPasswordField() { return nullptr; }
virtual bool isNativeTextControl() const { return false; }
virtual bool isSearchField() const { return false; }
bool isWebArea() const { return roleValue() == WebAreaRole; }
- bool isSeamlessWebArea() const { return roleValue() == SeamlessWebAreaRole; }
virtual bool isCheckbox() const { return roleValue() == CheckBoxRole; }
virtual bool isRadioButton() const { return roleValue() == RadioButtonRole; }
- virtual bool isListBox() const { return roleValue() == ListBoxRole; }
+ virtual bool isNativeListBox() const { return false; }
+ bool isListBox() const { return roleValue() == ListBoxRole; }
virtual bool isListBoxOption() const { return false; }
+ virtual bool isAttachment() const { return false; }
virtual bool isMediaTimeline() const { return false; }
virtual bool isMenuRelated() const { return false; }
virtual bool isMenu() const { return false; }
@@ -444,9 +511,9 @@ public:
virtual bool isSliderThumb() const { return false; }
virtual bool isInputSlider() const { return false; }
virtual bool isControl() const { return false; }
+ virtual bool isLabel() const { return false; }
virtual bool isList() const { return false; }
virtual bool isTable() const { return false; }
- virtual bool isAccessibilityTable() const { return false; }
virtual bool isDataTable() const { return false; }
virtual bool isTableRow() const { return false; }
virtual bool isTableColumn() const { return false; }
@@ -463,8 +530,11 @@ public:
virtual bool isSpinButtonPart() const { return false; }
virtual bool isMockObject() const { return false; }
virtual bool isMediaControlLabel() const { return false; }
+ bool isSwitch() const { return roleValue() == SwitchRole; }
+ bool isToggleButton() const { return roleValue() == ToggleButtonRole; }
bool isTextControl() const;
bool isARIATextControl() const;
+ bool isNonNativeTextControl() const;
bool isTabList() const { return roleValue() == TabListRole; }
bool isTabItem() const { return roleValue() == TabRole; }
bool isRadioGroup() const { return roleValue() == RadioGroupRole; }
@@ -483,7 +553,15 @@ public:
bool isColorWell() const { return roleValue() == ColorWellRole; }
bool isRangeControl() const;
bool isMeter() const;
-
+ bool isSplitter() const { return roleValue() == SplitterRole; }
+ bool isToolbar() const { return roleValue() == ToolbarRole; }
+ bool isStyleFormatGroup() const;
+ bool isSubscriptStyleGroup() const;
+ bool isSuperscriptStyleGroup() const;
+ bool isFigure() const;
+ bool isSummary() const { return roleValue() == SummaryRole; }
+ bool isOutput() const;
+
virtual bool isChecked() const { return false; }
virtual bool isEnabled() const { return false; }
virtual bool isSelected() const { return false; }
@@ -494,7 +572,6 @@ public:
virtual bool isMultiSelectable() const { return false; }
virtual bool isOffScreen() const { return false; }
virtual bool isPressed() const { return false; }
- virtual bool isReadOnly() const { return false; }
virtual bool isUnvisited() const { return false; }
virtual bool isVisited() const { return false; }
virtual bool isRequired() const { return false; }
@@ -519,6 +596,8 @@ public:
virtual bool hasUnderline() const { return false; }
bool hasHighlighting() const;
+ bool supportsDatetimeAttribute() const;
+
virtual bool canSetFocusAttribute() const { return false; }
virtual bool canSetTextRangeAttributes() const { return false; }
virtual bool canSetValueAttribute() const { return false; }
@@ -527,14 +606,14 @@ public:
virtual bool canSetSelectedChildrenAttribute() const { return false; }
virtual bool canSetExpandedAttribute() const { return false; }
- Element* element() const;
- virtual Node* node() const { return 0; }
- virtual RenderObject* renderer() const { return 0; }
+ virtual Element* element() const;
+ virtual Node* node() const { return nullptr; }
+ virtual RenderObject* renderer() const { return nullptr; }
virtual bool accessibilityIsIgnored() const;
virtual AccessibilityObjectInclusion defaultObjectInclusion() const;
bool accessibilityIsIgnoredByDefault() const;
- int blockquoteLevel() const;
+ unsigned blockquoteLevel() const;
virtual int headingLevel() const { return 0; }
virtual int tableLevel() const { return 0; }
virtual AccessibilityButtonState checkboxOrRadioValue() const;
@@ -543,28 +622,38 @@ public:
virtual float maxValueForRange() const { return 0.0f; }
virtual float minValueForRange() const { return 0.0f; }
virtual float stepValueForRange() const { return 0.0f; }
- virtual AccessibilityObject* selectedRadioButton() { return 0; }
- virtual AccessibilityObject* selectedTabItem() { return 0; }
+ virtual AccessibilityObject* selectedRadioButton() { return nullptr; }
+ virtual AccessibilityObject* selectedTabItem() { return nullptr; }
virtual int layoutCount() const { return 0; }
virtual double estimatedLoadingProgress() const { return 0; }
static bool isARIAControl(AccessibilityRole);
static bool isARIAInput(AccessibilityRole);
+
virtual bool supportsARIAOwns() const { return false; }
- virtual void ariaOwnsElements(AccessibilityChildrenVector&) const { }
- virtual bool supportsARIAFlowTo() const { return false; }
- virtual void ariaFlowToElements(AccessibilityChildrenVector&) const { }
- virtual bool supportsARIADescribedBy() const { return false; }
- virtual void ariaDescribedByElements(AccessibilityChildrenVector&) const { }
+ void ariaControlsElements(AccessibilityChildrenVector&) const;
+ void ariaDescribedByElements(AccessibilityChildrenVector&) const;
+ void ariaFlowToElements(AccessibilityChildrenVector&) const;
+ void ariaLabelledByElements(AccessibilityChildrenVector&) const;
+ void ariaOwnsElements(AccessibilityChildrenVector&) const;
+
virtual bool ariaHasPopup() const { return false; }
- virtual bool ariaPressedIsPresent() const;
+ bool ariaPressedIsPresent() const;
bool ariaIsMultiline() const;
- virtual const AtomicString& invalidStatus() const;
- bool supportsARIAExpanded() const;
+ String invalidStatus() const;
+ bool supportsARIAPressed() const;
+ bool supportsExpanded() const;
+ bool supportsChecked() const;
AccessibilitySortDirection sortDirection() const;
virtual bool canvasHasFallbackContent() const { return false; }
bool supportsRangeValue() const;
String identifierAttribute() const;
void classList(Vector<String>&) const;
+ virtual String roleDescription() const;
+ AccessibilityARIACurrentState ariaCurrentState() const;
+
+ // This function checks if the object should be ignored when there's a modal dialog displayed.
+ bool ignoredFromARIAModalPresence() const;
+ bool isAriaModalDescendant(Node*) const;
bool supportsARIASetSize() const;
bool supportsARIAPosInSet() const;
@@ -579,38 +668,50 @@ public:
virtual void determineARIADropEffects(Vector<String>&) { }
// Called on the root AX object to return the deepest available element.
- virtual AccessibilityObject* accessibilityHitTest(const IntPoint&) const { return 0; }
+ virtual AccessibilityObject* accessibilityHitTest(const IntPoint&) const { return nullptr; }
// Called on the AX object after the render tree determines which is the right AccessibilityRenderObject.
virtual AccessibilityObject* elementAccessibilityHitTest(const IntPoint&) const;
virtual AccessibilityObject* focusedUIElement() const;
- virtual AccessibilityObject* firstChild() const { return 0; }
- virtual AccessibilityObject* lastChild() const { return 0; }
- virtual AccessibilityObject* previousSibling() const { return 0; }
- virtual AccessibilityObject* nextSibling() const { return 0; }
+ virtual AccessibilityObject* firstChild() const { return nullptr; }
+ virtual AccessibilityObject* lastChild() const { return nullptr; }
+ virtual AccessibilityObject* previousSibling() const { return nullptr; }
+ virtual AccessibilityObject* nextSibling() const { return nullptr; }
+ virtual AccessibilityObject* nextSiblingUnignored(int limit) const;
+ virtual AccessibilityObject* previousSiblingUnignored(int limit) const;
virtual AccessibilityObject* parentObject() const = 0;
virtual AccessibilityObject* parentObjectUnignored() const;
- virtual AccessibilityObject* parentObjectIfExists() const { return 0; }
+ virtual AccessibilityObject* parentObjectIfExists() const { return nullptr; }
static AccessibilityObject* firstAccessibleObjectFromNode(const Node*);
void findMatchingObjects(AccessibilitySearchCriteria*, AccessibilityChildrenVector&);
virtual bool isDescendantOfBarrenParent() const { return false; }
+
+ bool isDescendantOfRole(AccessibilityRole) const;
+
+ // Text selection
+ RefPtr<Range> rangeOfStringClosestToRangeInDirection(Range*, AccessibilitySearchDirection, Vector<String>&) const;
+ RefPtr<Range> selectionRange() const;
+ String selectText(AccessibilitySelectTextCriteria*);
- virtual AccessibilityObject* observableObject() const { return 0; }
+ virtual AccessibilityObject* observableObject() const { return nullptr; }
virtual void linkedUIElements(AccessibilityChildrenVector&) const { }
- virtual AccessibilityObject* titleUIElement() const { return 0; }
+ virtual AccessibilityObject* titleUIElement() const { return nullptr; }
virtual bool exposesTitleUIElement() const { return true; }
- virtual AccessibilityObject* correspondingLabelForControlElement() const { return 0; }
- virtual AccessibilityObject* correspondingControlForLabelElement() const { return 0; }
- virtual AccessibilityObject* scrollBar(AccessibilityOrientation) { return 0; }
+ virtual AccessibilityObject* correspondingLabelForControlElement() const { return nullptr; }
+ virtual AccessibilityObject* correspondingControlForLabelElement() const { return nullptr; }
+ virtual AccessibilityObject* scrollBar(AccessibilityOrientation) { return nullptr; }
virtual AccessibilityRole ariaRoleAttribute() const { return UnknownRole; }
virtual bool isPresentationalChildOfAriaRole() const { return false; }
virtual bool ariaRoleHasPresentationalChildren() const { return false; }
+ virtual bool inheritsPresentationalRole() const { return false; }
// Accessibility Text
virtual void accessibilityText(Vector<AccessibilityText>&) { };
-
+ // A single method for getting a computed label for an AXObject. It condenses the nuances of accessibilityText. Used by Inspector.
+ String computedLabel();
+
// A programmatic way to set a name on an AccessibleObject.
virtual void setAccessibleName(const AtomicString&) { }
virtual bool hasAttributesRequiredForInclusion() const;
@@ -628,13 +729,17 @@ public:
virtual String ariaLabeledByAttribute() const { return String(); }
virtual String ariaDescribedByAttribute() const { return String(); }
const AtomicString& placeholderValue() const;
-
+ bool accessibleNameDerivesFromContent() const;
+
+ // Abbreviations
+ virtual String expandedTextValue() const { return String(); }
+ virtual bool supportsExpandedTextValue() const { return false; }
+
void elementsFromAttribute(Vector<Element*>&, const QualifiedName&) const;
// Only if isColorWell()
virtual void colorValue(int& r, int& g, int& b) const { r = 0; g = 0; b = 0; }
- void setRoleValue(AccessibilityRole role) { m_role = role; }
virtual AccessibilityRole roleValue() const { return m_role; }
virtual AXObjectCache* axObjectCache() const;
@@ -642,14 +747,13 @@ public:
static AccessibilityObject* anchorElementForNode(Node*);
static AccessibilityObject* headingElementForNode(Node*);
- virtual Element* anchorElement() const { return 0; }
- virtual Element* actionElement() const { return 0; }
+ virtual Element* anchorElement() const { return nullptr; }
+ bool supportsPressAction() const;
+ virtual Element* actionElement() const { return nullptr; }
virtual LayoutRect boundingBoxRect() const { return LayoutRect(); }
- IntRect pixelSnappedBoundingBoxRect() const { return pixelSnappedIntRect(boundingBoxRect()); }
+ IntRect pixelSnappedBoundingBoxRect() const { return snappedIntRect(boundingBoxRect()); }
virtual LayoutRect elementRect() const = 0;
- IntRect pixelSnappedElementRect() const { return pixelSnappedIntRect(elementRect()); }
LayoutSize size() const { return elementRect().size(); }
- IntSize pixelSnappedSize() const { return elementRect().pixelSnappedSize(); }
virtual IntPoint clickPoint();
static IntRect boundingBoxForQuads(RenderObject*, const Vector<FloatQuad>&);
virtual Path elementPath() const { return Path(); }
@@ -665,13 +769,15 @@ public:
virtual String selectedText() const { return String(); }
virtual const AtomicString& accessKey() const { return nullAtom; }
const String& actionVerb() const;
- virtual Widget* widget() const { return 0; }
- virtual Widget* widgetForAttachmentView() const { return 0; }
+ virtual Widget* widget() const { return nullptr; }
+ virtual Widget* widgetForAttachmentView() const { return nullptr; }
Page* page() const;
virtual Document* document() const;
virtual FrameView* documentFrameView() const;
+ Frame* frame() const;
MainFrame* mainFrame() const;
Document* topDocument() const;
+ ScrollView* scrollViewAncestor() const;
String language() const;
// 1-based, to match the aria-level spec.
virtual unsigned hierarchicalLevel() const { return 0; }
@@ -685,8 +791,8 @@ public:
virtual void setSelectedRows(AccessibilityChildrenVector&) { }
virtual void makeRangeVisible(const PlainTextRange&) { }
- virtual bool press() const;
- bool performDefaultAction() const { return press(); }
+ virtual bool press();
+ bool performDefaultAction() { return press(); }
virtual AccessibilityOrientation orientation() const;
virtual void increment() { }
@@ -699,23 +805,27 @@ public:
virtual void addChildren() { }
virtual void addChild(AccessibilityObject*) { }
virtual void insertChild(AccessibilityObject*, unsigned) { }
+
+ virtual bool shouldIgnoreAttributeRole() const { return false; }
virtual bool canHaveChildren() const { return true; }
virtual bool hasChildren() const { return m_haveChildren; }
virtual void updateChildrenIfNecessary();
virtual void setNeedsToUpdateChildren() { }
virtual void clearChildren();
-#if PLATFORM(MAC)
+#if PLATFORM(COCOA)
virtual void detachFromParent();
#else
virtual void detachFromParent() { }
#endif
+ virtual bool isDetachedFromParent() { return false; }
+ virtual bool canHaveSelectedChildren() const { return false; }
virtual void selectedChildren(AccessibilityChildrenVector&) { }
virtual void visibleChildren(AccessibilityChildrenVector&) { }
virtual void tabChildren(AccessibilityChildrenVector&) { }
virtual bool shouldFocusActiveDescendant() const { return false; }
- virtual AccessibilityObject* activeDescendant() const { return 0; }
+ virtual AccessibilityObject* activeDescendant() const { return nullptr; }
virtual void handleActiveDescendantChanged() { }
virtual void handleAriaExpandedChanged() { }
bool isDescendantOfObject(const AccessibilityObject*) const;
@@ -725,10 +835,14 @@ public:
static AccessibilityRole ariaRoleToWebCoreRole(const String&);
bool hasAttribute(const QualifiedName&) const;
const AtomicString& getAttribute(const QualifiedName&) const;
+ bool hasTagName(const QualifiedName&) const;
virtual VisiblePositionRange visiblePositionRange() const { return VisiblePositionRange(); }
virtual VisiblePositionRange visiblePositionRangeForLine(unsigned) const { return VisiblePositionRange(); }
+ RefPtr<Range> elementRange() const;
+ static bool replacedNodeNeedsCharacter(Node* replacedNode);
+
VisiblePositionRange visiblePositionRangeForUnorderedPositions(const VisiblePosition&, const VisiblePosition&) const;
VisiblePositionRange positionOfLeftWord(const VisiblePosition&) const;
VisiblePositionRange positionOfRightWord(const VisiblePosition&) const;
@@ -738,9 +852,14 @@ public:
VisiblePositionRange paragraphForPosition(const VisiblePosition&) const;
VisiblePositionRange styleRangeForPosition(const VisiblePosition&) const;
VisiblePositionRange visiblePositionRangeForRange(const PlainTextRange&) const;
+ VisiblePositionRange lineRangeForPosition(const VisiblePosition&) const;
+
+ RefPtr<Range> rangeForPlainTextRange(const PlainTextRange&) const;
- String stringForVisiblePositionRange(const VisiblePositionRange&) const;
+ static String stringForVisiblePositionRange(const VisiblePositionRange&);
+ String stringForRange(RefPtr<Range>) const;
virtual IntRect boundsForVisiblePositionRange(const VisiblePositionRange&) const { return IntRect(); }
+ virtual IntRect boundsForRange(const RefPtr<Range>) const { return IntRect(); }
int lengthForVisiblePositionRange(const VisiblePositionRange&) const;
virtual void setSelectedVisiblePositionRange(const VisiblePositionRange&) const { }
@@ -774,10 +893,13 @@ public:
virtual String doAXStringForRange(const PlainTextRange&) const { return String(); }
virtual IntRect doAXBoundsForRange(const PlainTextRange&) const { return IntRect(); }
- String listMarkerTextForNodeAndPosition(Node*, const VisiblePosition&) const;
+ virtual IntRect doAXBoundsForRangeUsingCharacterOffset(const PlainTextRange&) const { return IntRect(); }
+ static String listMarkerTextForNodeAndPosition(Node*, const VisiblePosition&);
unsigned doAXLineForIndex(unsigned);
+ String computedRoleString() const;
+
virtual String stringValueForMSAA() const { return String(); }
virtual String stringRoleForMSAA() const { return String(); }
virtual String nameForMSAA() const { return String(); }
@@ -785,7 +907,10 @@ public:
virtual AccessibilityRole roleValueForMSAA() const { return roleValue(); }
virtual String passwordFieldValue() const { return String(); }
-
+ bool isValueAutofilled() const;
+ bool isValueAutofillAvailable() const;
+ AutoFillButtonType valueAutofillButtonType() const;
+
// Used by an ARIA tree to get all its rows.
void ariaTreeRows(AccessibilityChildrenVector&);
// Used by an ARIA tree item to get all of its direct rows that it can disclose.
@@ -796,10 +921,17 @@ public:
// ARIA live-region features.
bool supportsARIALiveRegion() const;
bool isInsideARIALiveRegion() const;
- virtual const AtomicString& ariaLiveRegionStatus() const { return nullAtom; }
+ virtual const String ariaLiveRegionStatus() const { return String(); }
virtual const AtomicString& ariaLiveRegionRelevant() const { return nullAtom; }
virtual bool ariaLiveRegionAtomic() const { return false; }
- virtual bool ariaLiveRegionBusy() const { return false; }
+ virtual bool isBusy() const { return false; }
+ static const String defaultLiveRegionStatusForRole(AccessibilityRole);
+ static bool liveRegionStatusIsEnabled(const AtomicString&);
+ static bool contentEditableAttributeIsEnabled(Element*);
+ bool hasContentEditableAttributeSet() const;
+
+ bool supportsARIAReadOnly() const;
+ String ariaReadOnlyValue() const;
bool supportsARIAAttributes() const;
@@ -812,7 +944,13 @@ public:
virtual void scrollToMakeVisibleWithSubFocus(const IntRect&) const;
// Scroll this object to a given point in global coordinates of the top-level window.
virtual void scrollToGlobalPoint(const IntPoint&) const;
-
+
+ enum ScrollByPageDirection { Up, Down, Left, Right };
+ bool scrollByPage(ScrollByPageDirection) const;
+ IntPoint scrollPosition() const;
+ IntSize scrollContentsSize() const;
+ IntRect scrollVisibleContentRect() const;
+
bool lastKnownIsIgnoredValue();
void setLastKnownIsIgnoredValue(bool);
@@ -838,28 +976,32 @@ public:
virtual bool isMathTableRow() const { return false; }
virtual bool isMathTableCell() const { return false; }
virtual bool isMathMultiscript() const { return false; }
+ virtual bool isMathToken() const { return false; }
+ virtual bool isMathScriptObject(AccessibilityMathScriptObjectType) const { return false; }
+ virtual bool isMathMultiscriptObject(AccessibilityMathMultiscriptObjectType) const { return false; }
// Root components.
- virtual AccessibilityObject* mathRadicandObject() { return 0; }
- virtual AccessibilityObject* mathRootIndexObject() { return 0; }
+ virtual AccessibilityObject* mathRadicandObject() { return nullptr; }
+ virtual AccessibilityObject* mathRootIndexObject() { return nullptr; }
// Under over components.
- virtual AccessibilityObject* mathUnderObject() { return 0; }
- virtual AccessibilityObject* mathOverObject() { return 0; }
+ virtual AccessibilityObject* mathUnderObject() { return nullptr; }
+ virtual AccessibilityObject* mathOverObject() { return nullptr; }
// Fraction components.
- virtual AccessibilityObject* mathNumeratorObject() { return 0; }
- virtual AccessibilityObject* mathDenominatorObject() { return 0; }
+ virtual AccessibilityObject* mathNumeratorObject() { return nullptr; }
+ virtual AccessibilityObject* mathDenominatorObject() { return nullptr; }
// Subscript/superscript components.
- virtual AccessibilityObject* mathBaseObject() { return 0; }
- virtual AccessibilityObject* mathSubscriptObject() { return 0; }
- virtual AccessibilityObject* mathSuperscriptObject() { return 0; }
+ virtual AccessibilityObject* mathBaseObject() { return nullptr; }
+ virtual AccessibilityObject* mathSubscriptObject() { return nullptr; }
+ virtual AccessibilityObject* mathSuperscriptObject() { return nullptr; }
// Fenced components.
virtual String mathFencedOpenString() const { return String(); }
virtual String mathFencedCloseString() const { return String(); }
virtual int mathLineThickness() const { return 0; }
+ virtual bool isAnonymousMathOperator() const { return false; }
// Multiscripts components.
typedef Vector<std::pair<AccessibilityObject*, AccessibilityObject*>> AccessibilityMathMultiscriptPairs;
@@ -872,7 +1014,7 @@ public:
bool isHidden() const { return isARIAHidden() || isDOMHidden(); }
#if HAVE(ACCESSIBILITY)
-#if PLATFORM(GTK) || PLATFORM(EFL)
+#if PLATFORM(GTK)
AccessibilityObjectWrapper* wrapper() const;
void setWrapper(AccessibilityObjectWrapper*);
#else
@@ -884,7 +1026,7 @@ public:
#endif
#endif
-#if PLATFORM(MAC)
+#if PLATFORM(COCOA)
void overrideAttachmentParent(AccessibilityObject* parent);
#else
void overrideAttachmentParent(AccessibilityObject*) { }
@@ -902,12 +1044,30 @@ public:
#if PLATFORM(IOS)
int accessibilityPasswordFieldLength();
+ bool hasTouchEventListener() const;
+ bool isInputTypePopupButton() const;
#endif
// allows for an AccessibilityObject to update its render tree or perform
// other operations update type operations
void updateBackingStore();
+#if PLATFORM(COCOA)
+ bool preventKeyboardDOMEventDispatch() const;
+ void setPreventKeyboardDOMEventDispatch(bool);
+#endif
+
+#if PLATFORM(COCOA) && !PLATFORM(IOS)
+ bool caretBrowsingEnabled() const;
+ void setCaretBrowsingEnabled(bool);
+#endif
+
+ AccessibilityObject* focusableAncestor();
+ AccessibilityObject* editableAncestor();
+ AccessibilityObject* highestEditableAncestor();
+
+ static const AccessibilityObject* matchedParent(const AccessibilityObject&, bool includeSelf, const std::function<bool(const AccessibilityObject&)>&);
+
protected:
AXID m_id;
AccessibilityChildrenVector m_children;
@@ -918,17 +1078,22 @@ protected:
virtual bool computeAccessibilityIsIgnored() const { return true; }
// If this object itself scrolls, return its ScrollableArea.
- virtual ScrollableArea* getScrollableAreaIfScrollable() const { return 0; }
+ virtual ScrollableArea* getScrollableAreaIfScrollable() const { return nullptr; }
virtual void scrollTo(const IntPoint&) const { }
-
+ ScrollableArea* scrollableAreaAncestor() const;
+ void scrollAreaAndAncestor(std::pair<ScrollableArea*, AccessibilityObject*>&) const;
+
static bool isAccessibilityObjectSearchMatchAtIndex(AccessibilityObject*, AccessibilitySearchCriteria*, size_t);
static bool isAccessibilityObjectSearchMatch(AccessibilityObject*, AccessibilitySearchCriteria*);
static bool isAccessibilityTextSearchMatch(AccessibilityObject*, AccessibilitySearchCriteria*);
static bool objectMatchesSearchCriteriaWithResultLimit(AccessibilityObject*, AccessibilitySearchCriteria*, AccessibilityChildrenVector&);
virtual AccessibilityRole buttonRoleType() const;
bool isOnscreen() const;
-
-#if (PLATFORM(GTK) || PLATFORM(EFL)) && HAVE(ACCESSIBILITY)
+ bool dispatchTouchEvent();
+
+ void ariaElementsFromAttribute(AccessibilityChildrenVector&, const QualifiedName&) const;
+
+#if PLATFORM(GTK) && HAVE(ACCESSIBILITY)
bool allowsTextRanges() const;
unsigned getLengthForTextRange() const;
#else
@@ -936,11 +1101,11 @@ protected:
unsigned getLengthForTextRange() const { return text().length(); }
#endif
-#if PLATFORM(MAC)
+#if PLATFORM(COCOA)
RetainPtr<WebAccessibilityObjectWrapper> m_wrapper;
#elif PLATFORM(WIN)
COMPtr<AccessibilityObjectWrapper> m_wrapper;
-#elif PLATFORM(GTK) || (PLATFORM(EFL) && HAVE(ACCESSIBILITY))
+#elif PLATFORM(GTK)
AtkObject* m_wrapper;
#endif
};
@@ -952,9 +1117,9 @@ inline int AccessibilityObject::lineForPosition(const VisiblePosition&) const {
inline void AccessibilityObject::updateBackingStore() { }
#endif
-#define ACCESSIBILITY_OBJECT_TYPE_CASTS(ToValueTypeName, predicate) \
- TYPE_CASTS_BASE(ToValueTypeName, AccessibilityObject, object, object->predicate, object.predicate)
-
} // namespace WebCore
-#endif // AccessibilityObject_h
+#define SPECIALIZE_TYPE_TRAITS_ACCESSIBILITY(ToValueTypeName, predicate) \
+SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::ToValueTypeName) \
+ static bool isType(const WebCore::AccessibilityObject& object) { return object.predicate; } \
+SPECIALIZE_TYPE_TRAITS_END()