2019-01-27 08:49:29 +00:00
|
|
|
/*
|
|
|
|
* Copyright (C) 2019 Apple Inc. All rights reserved.
|
|
|
|
*
|
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
* modification, are permitted provided that the following conditions
|
|
|
|
* are met:
|
|
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
|
|
|
* 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.
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
|
|
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
|
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
|
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
|
|
|
|
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
|
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
|
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
|
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
|
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
|
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
|
|
|
* THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
2020-07-11 22:38:45 +00:00
|
|
|
// FIXME: Should rename this file AXCoreObject.h.
|
|
|
|
|
2020-03-30 20:07:11 +00:00
|
|
|
#include "FrameLoaderClient.h"
|
2019-10-30 20:44:34 +00:00
|
|
|
#include "HTMLTextFormControlElement.h"
|
2019-02-12 22:55:33 +00:00
|
|
|
#include "LayoutRect.h"
|
2020-01-07 13:15:42 +00:00
|
|
|
#include "TextIterator.h"
|
2019-10-30 20:44:34 +00:00
|
|
|
#include "VisibleSelection.h"
|
2020-09-25 13:16:23 +00:00
|
|
|
#include "Widget.h"
|
2021-07-30 02:05:05 +00:00
|
|
|
#include <wtf/HashSet.h>
|
2019-02-12 22:55:33 +00:00
|
|
|
#include <wtf/RefCounted.h>
|
2020-08-04 20:55:49 +00:00
|
|
|
#include <wtf/Variant.h>
|
2019-02-12 22:55:33 +00:00
|
|
|
|
|
|
|
#if PLATFORM(WIN)
|
|
|
|
#include "AccessibilityObjectWrapperWin.h"
|
|
|
|
#include "COMPtr.h"
|
|
|
|
#endif
|
|
|
|
|
2020-09-25 13:16:23 +00:00
|
|
|
#if USE(ATK)
|
|
|
|
#include <wtf/glib/GRefPtr.h>
|
|
|
|
#endif
|
|
|
|
|
2019-02-12 22:55:33 +00:00
|
|
|
#if PLATFORM(COCOA)
|
|
|
|
OBJC_CLASS WebAccessibilityObjectWrapper;
|
|
|
|
typedef WebAccessibilityObjectWrapper AccessibilityObjectWrapper;
|
2020-07-11 22:38:45 +00:00
|
|
|
typedef struct _NSRange NSRange;
|
2021-02-22 02:13:13 +00:00
|
|
|
typedef const struct __AXTextMarker* AXTextMarkerRef;
|
|
|
|
typedef const struct __AXTextMarkerRange* AXTextMarkerRangeRef;
|
2019-05-21 12:45:08 +00:00
|
|
|
#elif USE(ATK)
|
2019-04-05 07:35:24 +00:00
|
|
|
typedef struct _WebKitAccessible WebKitAccessible;
|
|
|
|
typedef struct _WebKitAccessible AccessibilityObjectWrapper;
|
2019-02-12 22:55:33 +00:00
|
|
|
#else
|
|
|
|
class AccessibilityObjectWrapper;
|
|
|
|
#endif
|
|
|
|
|
2020-04-23 01:22:36 +00:00
|
|
|
namespace WTF {
|
|
|
|
class TextStream;
|
|
|
|
}
|
|
|
|
|
2019-01-27 08:49:29 +00:00
|
|
|
namespace WebCore {
|
|
|
|
|
2020-07-11 22:38:45 +00:00
|
|
|
class AXCoreObject;
|
|
|
|
class AXObjectCache;
|
|
|
|
class AccessibilityScrollView;
|
2019-10-30 20:44:34 +00:00
|
|
|
class Document;
|
2020-07-11 22:38:45 +00:00
|
|
|
class Element;
|
2019-10-30 20:44:34 +00:00
|
|
|
class Frame;
|
|
|
|
class FrameView;
|
2020-07-11 22:38:45 +00:00
|
|
|
class Node;
|
|
|
|
class Page;
|
|
|
|
class Path;
|
|
|
|
class QualifiedName;
|
|
|
|
class RenderObject;
|
2019-10-30 20:44:34 +00:00
|
|
|
class ScrollView;
|
2020-07-11 22:38:45 +00:00
|
|
|
class Widget;
|
|
|
|
|
2019-10-30 20:44:34 +00:00
|
|
|
struct AccessibilityText;
|
|
|
|
struct ScrollRectToVisibleOptions;
|
|
|
|
|
2020-07-11 22:38:45 +00:00
|
|
|
using AXID = size_t;
|
2019-01-27 08:49:29 +00:00
|
|
|
extern const AXID InvalidAXID;
|
|
|
|
|
|
|
|
enum class AccessibilityRole {
|
|
|
|
Annotation = 1,
|
|
|
|
Application,
|
|
|
|
ApplicationAlert,
|
|
|
|
ApplicationAlertDialog,
|
|
|
|
ApplicationDialog,
|
|
|
|
ApplicationGroup,
|
|
|
|
ApplicationLog,
|
|
|
|
ApplicationMarquee,
|
|
|
|
ApplicationStatus,
|
|
|
|
ApplicationTextGroup,
|
|
|
|
ApplicationTimer,
|
|
|
|
Audio,
|
|
|
|
Blockquote,
|
|
|
|
Browser,
|
|
|
|
BusyIndicator,
|
|
|
|
Button,
|
|
|
|
Canvas,
|
|
|
|
Caption,
|
|
|
|
Cell,
|
|
|
|
CheckBox,
|
|
|
|
ColorWell,
|
|
|
|
Column,
|
|
|
|
ColumnHeader,
|
|
|
|
ComboBox,
|
|
|
|
Definition,
|
2019-07-11 13:36:50 +00:00
|
|
|
Deletion,
|
2019-01-27 08:49:29 +00:00
|
|
|
DescriptionList,
|
|
|
|
DescriptionListTerm,
|
|
|
|
DescriptionListDetail,
|
|
|
|
Details,
|
|
|
|
Directory,
|
|
|
|
DisclosureTriangle,
|
|
|
|
Div,
|
|
|
|
Document,
|
|
|
|
DocumentArticle,
|
|
|
|
DocumentMath,
|
|
|
|
DocumentNote,
|
|
|
|
Drawer,
|
|
|
|
EditableText,
|
|
|
|
Feed,
|
|
|
|
Figure,
|
|
|
|
Footer,
|
|
|
|
Footnote,
|
|
|
|
Form,
|
|
|
|
GraphicsDocument,
|
|
|
|
GraphicsObject,
|
|
|
|
GraphicsSymbol,
|
|
|
|
Grid,
|
|
|
|
GridCell,
|
|
|
|
Group,
|
|
|
|
GrowArea,
|
|
|
|
Heading,
|
|
|
|
HelpTag,
|
|
|
|
HorizontalRule,
|
|
|
|
Ignored,
|
|
|
|
Inline,
|
|
|
|
Image,
|
|
|
|
ImageMap,
|
|
|
|
ImageMapLink,
|
|
|
|
Incrementor,
|
2019-07-11 13:36:50 +00:00
|
|
|
Insertion,
|
2019-01-27 08:49:29 +00:00
|
|
|
Label,
|
|
|
|
LandmarkBanner,
|
|
|
|
LandmarkComplementary,
|
|
|
|
LandmarkContentInfo,
|
|
|
|
LandmarkDocRegion,
|
|
|
|
LandmarkMain,
|
|
|
|
LandmarkNavigation,
|
|
|
|
LandmarkRegion,
|
|
|
|
LandmarkSearch,
|
|
|
|
Legend,
|
|
|
|
Link,
|
|
|
|
List,
|
|
|
|
ListBox,
|
|
|
|
ListBoxOption,
|
|
|
|
ListItem,
|
|
|
|
ListMarker,
|
|
|
|
Mark,
|
|
|
|
MathElement,
|
|
|
|
Matte,
|
|
|
|
Menu,
|
|
|
|
MenuBar,
|
|
|
|
MenuButton,
|
|
|
|
MenuItem,
|
|
|
|
MenuItemCheckbox,
|
|
|
|
MenuItemRadio,
|
|
|
|
MenuListPopup,
|
|
|
|
MenuListOption,
|
2019-02-23 16:11:41 +00:00
|
|
|
Meter,
|
2019-01-27 08:49:29 +00:00
|
|
|
Outline,
|
|
|
|
Paragraph,
|
|
|
|
PopUpButton,
|
|
|
|
Pre,
|
|
|
|
Presentational,
|
|
|
|
ProgressIndicator,
|
|
|
|
RadioButton,
|
|
|
|
RadioGroup,
|
|
|
|
RowHeader,
|
|
|
|
Row,
|
|
|
|
RowGroup,
|
|
|
|
RubyBase,
|
|
|
|
RubyBlock,
|
|
|
|
RubyInline,
|
|
|
|
RubyRun,
|
|
|
|
RubyText,
|
|
|
|
Ruler,
|
|
|
|
RulerMarker,
|
|
|
|
ScrollArea,
|
|
|
|
ScrollBar,
|
|
|
|
SearchField,
|
|
|
|
Sheet,
|
|
|
|
Slider,
|
|
|
|
SliderThumb,
|
|
|
|
SpinButton,
|
|
|
|
SpinButtonPart,
|
|
|
|
SplitGroup,
|
|
|
|
Splitter,
|
|
|
|
StaticText,
|
2019-07-11 13:36:50 +00:00
|
|
|
Subscript,
|
2019-01-27 08:49:29 +00:00
|
|
|
Summary,
|
2019-07-11 13:36:50 +00:00
|
|
|
Superscript,
|
2019-01-27 08:49:29 +00:00
|
|
|
Switch,
|
|
|
|
SystemWide,
|
|
|
|
SVGRoot,
|
|
|
|
SVGText,
|
|
|
|
SVGTSpan,
|
|
|
|
SVGTextPath,
|
|
|
|
TabGroup,
|
|
|
|
TabList,
|
|
|
|
TabPanel,
|
|
|
|
Tab,
|
|
|
|
Table,
|
|
|
|
TableHeaderContainer,
|
2020-04-23 01:22:36 +00:00
|
|
|
Term,
|
2019-01-27 08:49:29 +00:00
|
|
|
TextArea,
|
2020-04-23 01:22:36 +00:00
|
|
|
TextField,
|
2019-01-27 08:49:29 +00:00
|
|
|
TextGroup,
|
|
|
|
Time,
|
|
|
|
Tree,
|
|
|
|
TreeGrid,
|
|
|
|
TreeItem,
|
|
|
|
ToggleButton,
|
|
|
|
Toolbar,
|
|
|
|
Unknown,
|
|
|
|
UserInterfaceTooltip,
|
|
|
|
ValueIndicator,
|
|
|
|
Video,
|
|
|
|
WebApplication,
|
|
|
|
WebArea,
|
|
|
|
WebCoreLink,
|
|
|
|
Window,
|
|
|
|
};
|
|
|
|
|
2021-07-30 02:05:05 +00:00
|
|
|
using AccessibilityRoleSet = WTF::HashSet<AccessibilityRole, WTF::IntHash<AccessibilityRole>, WTF::StrongEnumHashTraits<AccessibilityRole>>;
|
|
|
|
|
2020-08-05 07:22:07 +00:00
|
|
|
ALWAYS_INLINE String accessibilityRoleToString(AccessibilityRole role)
|
|
|
|
{
|
|
|
|
switch (role) {
|
|
|
|
case AccessibilityRole::Annotation:
|
|
|
|
return "Annotation";
|
|
|
|
case AccessibilityRole::Application:
|
|
|
|
return "Application";
|
|
|
|
case AccessibilityRole::ApplicationAlert:
|
|
|
|
return "ApplicationAlert";
|
|
|
|
case AccessibilityRole::ApplicationAlertDialog:
|
|
|
|
return "ApplicationAlertDialog";
|
|
|
|
case AccessibilityRole::ApplicationDialog:
|
|
|
|
return "ApplicationDialog";
|
|
|
|
case AccessibilityRole::ApplicationGroup:
|
|
|
|
return "ApplicationGroup";
|
|
|
|
case AccessibilityRole::ApplicationLog:
|
|
|
|
return "ApplicationLog";
|
|
|
|
case AccessibilityRole::ApplicationMarquee:
|
|
|
|
return "ApplicationMarquee";
|
|
|
|
case AccessibilityRole::ApplicationStatus:
|
|
|
|
return "ApplicationStatus";
|
|
|
|
case AccessibilityRole::ApplicationTextGroup:
|
|
|
|
return "ApplicationTextGroup";
|
|
|
|
case AccessibilityRole::ApplicationTimer:
|
|
|
|
return "ApplicationTimer";
|
|
|
|
case AccessibilityRole::Audio:
|
|
|
|
return "Audio";
|
|
|
|
case AccessibilityRole::Blockquote:
|
|
|
|
return "Blockquote";
|
|
|
|
case AccessibilityRole::Browser:
|
|
|
|
return "Browser";
|
|
|
|
case AccessibilityRole::BusyIndicator:
|
|
|
|
return "BusyIndicator";
|
|
|
|
case AccessibilityRole::Button:
|
|
|
|
return "Button";
|
|
|
|
case AccessibilityRole::Canvas:
|
|
|
|
return "Canvas";
|
|
|
|
case AccessibilityRole::Caption:
|
|
|
|
return "Caption";
|
|
|
|
case AccessibilityRole::Cell:
|
|
|
|
return "Cell";
|
|
|
|
case AccessibilityRole::CheckBox:
|
|
|
|
return "CheckBox";
|
|
|
|
case AccessibilityRole::ColorWell:
|
|
|
|
return "ColorWell";
|
|
|
|
case AccessibilityRole::Column:
|
|
|
|
return "Column";
|
|
|
|
case AccessibilityRole::ColumnHeader:
|
|
|
|
return "ColumnHeader";
|
|
|
|
case AccessibilityRole::ComboBox:
|
|
|
|
return "ComboBox";
|
|
|
|
case AccessibilityRole::Definition:
|
|
|
|
return "Definition";
|
|
|
|
case AccessibilityRole::Deletion:
|
|
|
|
return "Deletion";
|
|
|
|
case AccessibilityRole::DescriptionList:
|
|
|
|
return "DescriptionList";
|
|
|
|
case AccessibilityRole::DescriptionListTerm:
|
|
|
|
return "DescriptionListTerm";
|
|
|
|
case AccessibilityRole::DescriptionListDetail:
|
|
|
|
return "DescriptionListDetail";
|
|
|
|
case AccessibilityRole::Details:
|
|
|
|
return "Details";
|
|
|
|
case AccessibilityRole::Directory:
|
|
|
|
return "Directory";
|
|
|
|
case AccessibilityRole::DisclosureTriangle:
|
|
|
|
return "DisclosureTriangle";
|
|
|
|
case AccessibilityRole::Div:
|
|
|
|
return "Div";
|
|
|
|
case AccessibilityRole::Document:
|
|
|
|
return "Document";
|
|
|
|
case AccessibilityRole::DocumentArticle:
|
|
|
|
return "DocumentArticle";
|
|
|
|
case AccessibilityRole::DocumentMath:
|
|
|
|
return "DocumentMath";
|
|
|
|
case AccessibilityRole::DocumentNote:
|
|
|
|
return "DocumentNote";
|
|
|
|
case AccessibilityRole::Drawer:
|
|
|
|
return "Drawer";
|
|
|
|
case AccessibilityRole::EditableText:
|
|
|
|
return "EditableText";
|
|
|
|
case AccessibilityRole::Feed:
|
|
|
|
return "Feed";
|
|
|
|
case AccessibilityRole::Figure:
|
|
|
|
return "Figure";
|
|
|
|
case AccessibilityRole::Footer:
|
|
|
|
return "Footer";
|
|
|
|
case AccessibilityRole::Footnote:
|
|
|
|
return "Footnote";
|
|
|
|
case AccessibilityRole::Form:
|
|
|
|
return "Form";
|
|
|
|
case AccessibilityRole::GraphicsDocument:
|
|
|
|
return "GraphicsDocument";
|
|
|
|
case AccessibilityRole::GraphicsObject:
|
|
|
|
return "GraphicsObject";
|
|
|
|
case AccessibilityRole::GraphicsSymbol:
|
|
|
|
return "GraphicsSymbol";
|
|
|
|
case AccessibilityRole::Grid:
|
|
|
|
return "Grid";
|
|
|
|
case AccessibilityRole::GridCell:
|
|
|
|
return "GridCell";
|
|
|
|
case AccessibilityRole::Group:
|
|
|
|
return "Group";
|
|
|
|
case AccessibilityRole::GrowArea:
|
|
|
|
return "GrowArea";
|
|
|
|
case AccessibilityRole::Heading:
|
|
|
|
return "Heading";
|
|
|
|
case AccessibilityRole::HelpTag:
|
|
|
|
return "HelpTag";
|
|
|
|
case AccessibilityRole::HorizontalRule:
|
|
|
|
return "HorizontalRule";
|
|
|
|
case AccessibilityRole::Ignored:
|
|
|
|
return "Ignored";
|
|
|
|
case AccessibilityRole::Inline:
|
|
|
|
return "Inline";
|
|
|
|
case AccessibilityRole::Image:
|
|
|
|
return "Image";
|
|
|
|
case AccessibilityRole::ImageMap:
|
|
|
|
return "ImageMap";
|
|
|
|
case AccessibilityRole::ImageMapLink:
|
|
|
|
return "ImageMapLink";
|
|
|
|
case AccessibilityRole::Incrementor:
|
|
|
|
return "Incrementor";
|
|
|
|
case AccessibilityRole::Insertion:
|
|
|
|
return "Insertion";
|
|
|
|
case AccessibilityRole::Label:
|
|
|
|
return "Label";
|
|
|
|
case AccessibilityRole::LandmarkBanner:
|
|
|
|
return "LandmarkBanner";
|
|
|
|
case AccessibilityRole::LandmarkComplementary:
|
|
|
|
return "LandmarkComplementary";
|
|
|
|
case AccessibilityRole::LandmarkContentInfo:
|
|
|
|
return "LandmarkContentInfo";
|
|
|
|
case AccessibilityRole::LandmarkDocRegion:
|
|
|
|
return "LandmarkDocRegion";
|
|
|
|
case AccessibilityRole::LandmarkMain:
|
|
|
|
return "LandmarkMain";
|
|
|
|
case AccessibilityRole::LandmarkNavigation:
|
|
|
|
return "LandmarkNavigation";
|
|
|
|
case AccessibilityRole::LandmarkRegion:
|
|
|
|
return "LandmarkRegion";
|
|
|
|
case AccessibilityRole::LandmarkSearch:
|
|
|
|
return "LandmarkSearch";
|
|
|
|
case AccessibilityRole::Legend:
|
|
|
|
return "Legend";
|
|
|
|
case AccessibilityRole::Link:
|
|
|
|
return "Link";
|
|
|
|
case AccessibilityRole::List:
|
|
|
|
return "List";
|
|
|
|
case AccessibilityRole::ListBox:
|
|
|
|
return "ListBox";
|
|
|
|
case AccessibilityRole::ListBoxOption:
|
|
|
|
return "ListBoxOption";
|
|
|
|
case AccessibilityRole::ListItem:
|
|
|
|
return "ListItem";
|
|
|
|
case AccessibilityRole::ListMarker:
|
|
|
|
return "ListMarker";
|
|
|
|
case AccessibilityRole::Mark:
|
|
|
|
return "Mark";
|
|
|
|
case AccessibilityRole::MathElement:
|
|
|
|
return "MathElement";
|
|
|
|
case AccessibilityRole::Matte:
|
|
|
|
return "Matte";
|
|
|
|
case AccessibilityRole::Menu:
|
|
|
|
return "Menu";
|
|
|
|
case AccessibilityRole::MenuBar:
|
|
|
|
return "MenuBar";
|
|
|
|
case AccessibilityRole::MenuButton:
|
|
|
|
return "MenuButton";
|
|
|
|
case AccessibilityRole::MenuItem:
|
|
|
|
return "MenuItem";
|
|
|
|
case AccessibilityRole::MenuItemCheckbox:
|
|
|
|
return "MenuItemCheckbox";
|
|
|
|
case AccessibilityRole::MenuItemRadio:
|
|
|
|
return "MenuItemRadio";
|
|
|
|
case AccessibilityRole::MenuListPopup:
|
|
|
|
return "MenuListPopup";
|
|
|
|
case AccessibilityRole::MenuListOption:
|
|
|
|
return "MenuListOption";
|
|
|
|
case AccessibilityRole::Meter:
|
|
|
|
return "Meter";
|
|
|
|
case AccessibilityRole::Outline:
|
|
|
|
return "Outline";
|
|
|
|
case AccessibilityRole::Paragraph:
|
|
|
|
return "Paragraph";
|
|
|
|
case AccessibilityRole::PopUpButton:
|
|
|
|
return "PopUpButton";
|
|
|
|
case AccessibilityRole::Pre:
|
|
|
|
return "Pre";
|
|
|
|
case AccessibilityRole::Presentational:
|
|
|
|
return "Presentational";
|
|
|
|
case AccessibilityRole::ProgressIndicator:
|
|
|
|
return "ProgressIndicator";
|
|
|
|
case AccessibilityRole::RadioButton:
|
|
|
|
return "RadioButton";
|
|
|
|
case AccessibilityRole::RadioGroup:
|
|
|
|
return "RadioGroup";
|
|
|
|
case AccessibilityRole::RowHeader:
|
|
|
|
return "RowHeader";
|
|
|
|
case AccessibilityRole::Row:
|
|
|
|
return "Row";
|
|
|
|
case AccessibilityRole::RowGroup:
|
|
|
|
return "RowGroup";
|
|
|
|
case AccessibilityRole::RubyBase:
|
|
|
|
return "RubyBase";
|
|
|
|
case AccessibilityRole::RubyBlock:
|
|
|
|
return "RubyBlock";
|
|
|
|
case AccessibilityRole::RubyInline:
|
|
|
|
return "RubyInline";
|
|
|
|
case AccessibilityRole::RubyRun:
|
|
|
|
return "RubyRun";
|
|
|
|
case AccessibilityRole::RubyText:
|
|
|
|
return "RubyText";
|
|
|
|
case AccessibilityRole::Ruler:
|
|
|
|
return "Ruler";
|
|
|
|
case AccessibilityRole::RulerMarker:
|
|
|
|
return "RulerMarker";
|
|
|
|
case AccessibilityRole::ScrollArea:
|
|
|
|
return "ScrollArea";
|
|
|
|
case AccessibilityRole::ScrollBar:
|
|
|
|
return "ScrollBar";
|
|
|
|
case AccessibilityRole::SearchField:
|
|
|
|
return "SearchField";
|
|
|
|
case AccessibilityRole::Sheet:
|
|
|
|
return "Sheet";
|
|
|
|
case AccessibilityRole::Slider:
|
|
|
|
return "Slider";
|
|
|
|
case AccessibilityRole::SliderThumb:
|
|
|
|
return "SliderThumb";
|
|
|
|
case AccessibilityRole::SpinButton:
|
|
|
|
return "SpinButton";
|
|
|
|
case AccessibilityRole::SpinButtonPart:
|
|
|
|
return "SpinButtonPart";
|
|
|
|
case AccessibilityRole::SplitGroup:
|
|
|
|
return "SplitGroup";
|
|
|
|
case AccessibilityRole::Splitter:
|
|
|
|
return "Splitter";
|
|
|
|
case AccessibilityRole::StaticText:
|
|
|
|
return "StaticText";
|
|
|
|
case AccessibilityRole::Subscript:
|
|
|
|
return "Subscript";
|
|
|
|
case AccessibilityRole::Summary:
|
|
|
|
return "Summary";
|
|
|
|
case AccessibilityRole::Superscript:
|
|
|
|
return "Superscript";
|
|
|
|
case AccessibilityRole::Switch:
|
|
|
|
return "Switch";
|
|
|
|
case AccessibilityRole::SystemWide:
|
|
|
|
return "SystemWide";
|
|
|
|
case AccessibilityRole::SVGRoot:
|
|
|
|
return "SVGRoot";
|
|
|
|
case AccessibilityRole::SVGText:
|
|
|
|
return "SVGText";
|
|
|
|
case AccessibilityRole::SVGTSpan:
|
|
|
|
return "SVGTSpan";
|
|
|
|
case AccessibilityRole::SVGTextPath:
|
|
|
|
return "SVGTextPath";
|
|
|
|
case AccessibilityRole::TabGroup:
|
|
|
|
return "TabGroup";
|
|
|
|
case AccessibilityRole::TabList:
|
|
|
|
return "TabList";
|
|
|
|
case AccessibilityRole::TabPanel:
|
|
|
|
return "TabPanel";
|
|
|
|
case AccessibilityRole::Tab:
|
|
|
|
return "Tab";
|
|
|
|
case AccessibilityRole::Table:
|
|
|
|
return "Table";
|
|
|
|
case AccessibilityRole::TableHeaderContainer:
|
|
|
|
return "TableHeaderContainer";
|
|
|
|
case AccessibilityRole::Term:
|
|
|
|
return "Term";
|
|
|
|
case AccessibilityRole::TextArea:
|
|
|
|
return "TextArea";
|
|
|
|
case AccessibilityRole::TextField:
|
|
|
|
return "TextField";
|
|
|
|
case AccessibilityRole::TextGroup:
|
|
|
|
return "TextGroup";
|
|
|
|
case AccessibilityRole::Time:
|
|
|
|
return "Time";
|
|
|
|
case AccessibilityRole::Tree:
|
|
|
|
return "Tree";
|
|
|
|
case AccessibilityRole::TreeGrid:
|
|
|
|
return "TreeGrid";
|
|
|
|
case AccessibilityRole::TreeItem:
|
|
|
|
return "TreeItem";
|
|
|
|
case AccessibilityRole::ToggleButton:
|
|
|
|
return "ToggleButton";
|
|
|
|
case AccessibilityRole::Toolbar:
|
|
|
|
return "Toolbar";
|
|
|
|
case AccessibilityRole::Unknown:
|
|
|
|
return "Unknown";
|
|
|
|
case AccessibilityRole::UserInterfaceTooltip:
|
|
|
|
return "UserInterfaceTooltip";
|
|
|
|
case AccessibilityRole::ValueIndicator:
|
|
|
|
return "ValueIndicator";
|
|
|
|
case AccessibilityRole::Video:
|
|
|
|
return "Video";
|
|
|
|
case AccessibilityRole::WebApplication:
|
|
|
|
return "WebApplication";
|
|
|
|
case AccessibilityRole::WebArea:
|
|
|
|
return "WebArea";
|
|
|
|
case AccessibilityRole::WebCoreLink:
|
|
|
|
return "WebCoreLink";
|
|
|
|
case AccessibilityRole::Window:
|
|
|
|
return "Window";
|
|
|
|
}
|
|
|
|
UNREACHABLE();
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
|
2020-08-05 23:21:23 +00:00
|
|
|
enum class AccessibilityDetachmentType { CacheDestroyed, ElementDestroyed, ElementChanged };
|
2019-10-30 20:44:34 +00:00
|
|
|
|
|
|
|
enum class AccessibilityConversionSpace { Screen, Page };
|
|
|
|
|
|
|
|
enum class AccessibilitySearchDirection {
|
|
|
|
Next = 1,
|
|
|
|
Previous,
|
|
|
|
};
|
|
|
|
|
2019-12-07 20:34:35 +00:00
|
|
|
enum class AccessibilityTextSource {
|
|
|
|
Alternative,
|
|
|
|
Children,
|
|
|
|
Summary,
|
|
|
|
Help,
|
|
|
|
Visible,
|
|
|
|
TitleTag,
|
|
|
|
Placeholder,
|
|
|
|
LabelByElement,
|
|
|
|
Title,
|
|
|
|
Subtitle,
|
|
|
|
Action,
|
|
|
|
};
|
|
|
|
|
2019-10-30 20:44:34 +00:00
|
|
|
enum class AccessibilitySearchKey {
|
|
|
|
AnyType = 1,
|
|
|
|
Article,
|
|
|
|
BlockquoteSameLevel,
|
|
|
|
Blockquote,
|
|
|
|
BoldFont,
|
|
|
|
Button,
|
|
|
|
CheckBox,
|
|
|
|
Control,
|
|
|
|
DifferentType,
|
|
|
|
FontChange,
|
|
|
|
FontColorChange,
|
|
|
|
Frame,
|
|
|
|
Graphic,
|
|
|
|
HeadingLevel1,
|
|
|
|
HeadingLevel2,
|
|
|
|
HeadingLevel3,
|
|
|
|
HeadingLevel4,
|
|
|
|
HeadingLevel5,
|
|
|
|
HeadingLevel6,
|
|
|
|
HeadingSameLevel,
|
|
|
|
Heading,
|
|
|
|
Highlighted,
|
|
|
|
ItalicFont,
|
|
|
|
KeyboardFocusable,
|
|
|
|
Landmark,
|
|
|
|
Link,
|
|
|
|
List,
|
|
|
|
LiveRegion,
|
|
|
|
MisspelledWord,
|
|
|
|
Outline,
|
|
|
|
PlainText,
|
|
|
|
RadioGroup,
|
|
|
|
SameType,
|
|
|
|
StaticText,
|
|
|
|
StyleChange,
|
|
|
|
TableSameLevel,
|
|
|
|
Table,
|
|
|
|
TextField,
|
|
|
|
Underline,
|
|
|
|
UnvisitedLink,
|
|
|
|
VisitedLink,
|
|
|
|
};
|
|
|
|
|
2020-08-04 20:55:49 +00:00
|
|
|
using AXEditingStyleValueVariant = Variant<String, bool, int>;
|
|
|
|
|
2019-10-30 20:44:34 +00:00
|
|
|
struct AccessibilitySearchCriteria {
|
2019-12-19 18:51:37 +00:00
|
|
|
AXCoreObject* anchorObject { nullptr };
|
2019-10-30 20:44:34 +00:00
|
|
|
AXCoreObject* startObject;
|
|
|
|
AccessibilitySearchDirection searchDirection;
|
|
|
|
Vector<AccessibilitySearchKey> searchKeys;
|
|
|
|
String searchText;
|
|
|
|
unsigned resultsLimit;
|
|
|
|
bool visibleOnly;
|
|
|
|
bool immediateDescendantsOnly;
|
|
|
|
|
|
|
|
AccessibilitySearchCriteria(AXCoreObject* startObject, AccessibilitySearchDirection searchDirection, String searchText, unsigned resultsLimit, bool visibleOnly, bool immediateDescendantsOnly)
|
|
|
|
: startObject(startObject)
|
|
|
|
, searchDirection(searchDirection)
|
|
|
|
, searchText(searchText)
|
|
|
|
, resultsLimit(resultsLimit)
|
|
|
|
, visibleOnly(visibleOnly)
|
|
|
|
, immediateDescendantsOnly(immediateDescendantsOnly)
|
|
|
|
{ }
|
|
|
|
};
|
|
|
|
|
|
|
|
enum class AccessibilityObjectInclusion {
|
|
|
|
IncludeObject,
|
|
|
|
IgnoreObject,
|
|
|
|
DefaultBehavior,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum class AccessibilityCurrentState { False, True, Page, Step, Location, Date, Time };
|
|
|
|
|
|
|
|
enum class AccessibilityButtonState {
|
|
|
|
Off = 0,
|
|
|
|
On,
|
|
|
|
Mixed,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum class AccessibilitySortDirection {
|
|
|
|
None,
|
|
|
|
Ascending,
|
|
|
|
Descending,
|
|
|
|
Other,
|
|
|
|
Invalid,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum class AccessibilitySearchTextStartFrom {
|
|
|
|
Begin, // Search from the beginning of the element.
|
|
|
|
Selection, // Search from the position of the current selection.
|
|
|
|
End // Search from the end of the element.
|
|
|
|
};
|
|
|
|
|
|
|
|
enum class AccessibilitySearchTextDirection {
|
|
|
|
Forward, // Occurrence after the starting range.
|
|
|
|
Backward, // Occurrence before the starting range.
|
|
|
|
Closest, // Closest occurrence to the starting range, whether after or before.
|
|
|
|
All // All occurrences
|
|
|
|
};
|
|
|
|
|
|
|
|
struct AccessibilitySearchTextCriteria {
|
|
|
|
Vector<String> searchStrings; // Text strings to search for.
|
|
|
|
AccessibilitySearchTextStartFrom start;
|
|
|
|
AccessibilitySearchTextDirection direction;
|
|
|
|
|
|
|
|
AccessibilitySearchTextCriteria()
|
|
|
|
: start(AccessibilitySearchTextStartFrom::Selection)
|
|
|
|
, direction(AccessibilitySearchTextDirection::Forward)
|
|
|
|
{ }
|
|
|
|
};
|
|
|
|
|
|
|
|
enum class AccessibilityTextOperationType {
|
|
|
|
Select,
|
|
|
|
Replace,
|
|
|
|
Capitalize,
|
|
|
|
Lowercase,
|
|
|
|
Uppercase
|
|
|
|
};
|
|
|
|
|
|
|
|
struct AccessibilityTextOperation {
|
2020-07-11 22:38:45 +00:00
|
|
|
Vector<SimpleRange> textRanges; // text on which perform the operation.
|
2019-10-30 20:44:34 +00:00
|
|
|
AccessibilityTextOperationType type;
|
|
|
|
String replacementText; // For type = replace.
|
|
|
|
|
|
|
|
AccessibilityTextOperation()
|
|
|
|
: type(AccessibilityTextOperationType::Select)
|
|
|
|
{ }
|
|
|
|
};
|
|
|
|
|
|
|
|
enum class AccessibilityOrientation {
|
|
|
|
Vertical,
|
|
|
|
Horizontal,
|
|
|
|
Undefined,
|
|
|
|
};
|
|
|
|
|
|
|
|
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, Node* ignored = nullptr)
|
|
|
|
: childrenInclusion(c)
|
|
|
|
, includeFocusableContent(i)
|
|
|
|
, ignoredChildNode(ignored)
|
|
|
|
{ }
|
|
|
|
};
|
|
|
|
|
2020-07-11 22:38:45 +00:00
|
|
|
// FIXME: Merge this with CharacterRange (by deleting this and using CharacterRange instead).
|
2019-10-30 20:44:34 +00:00
|
|
|
struct PlainTextRange {
|
|
|
|
unsigned start { 0 };
|
|
|
|
unsigned length { 0 };
|
|
|
|
|
|
|
|
PlainTextRange() = default;
|
|
|
|
|
|
|
|
PlainTextRange(unsigned s, unsigned l)
|
|
|
|
: start(s)
|
|
|
|
, length(l)
|
|
|
|
{ }
|
|
|
|
|
|
|
|
#if PLATFORM(COCOA)
|
|
|
|
PlainTextRange(NSRange);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
bool isNull() const { return !start && !length; }
|
|
|
|
};
|
|
|
|
|
|
|
|
enum class AccessibilityVisiblePositionForBounds {
|
|
|
|
First,
|
|
|
|
Last,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum class AccessibilityMathScriptObjectType { Subscript, Superscript };
|
|
|
|
enum class AccessibilityMathMultiscriptObjectType { PreSubscript, PreSuperscript, PostSubscript, PostSuperscript };
|
|
|
|
|
|
|
|
// Use this struct to store the isIgnored data that depends on the parents, so that in addChildren()
|
|
|
|
// we avoid going up the parent chain for each element while traversing the tree with useful information already.
|
|
|
|
struct AccessibilityIsIgnoredFromParentData {
|
|
|
|
AXCoreObject* parent { nullptr };
|
|
|
|
bool isAXHidden { false };
|
|
|
|
bool isPresentationalChildOfAriaRole { false };
|
|
|
|
bool isDescendantOfBarrenParent { false };
|
|
|
|
|
|
|
|
AccessibilityIsIgnoredFromParentData(AXCoreObject* parent = nullptr)
|
|
|
|
: parent(parent)
|
|
|
|
{ }
|
|
|
|
|
|
|
|
bool isNull() const { return !parent; }
|
|
|
|
};
|
|
|
|
|
|
|
|
class AXCoreObject : public ThreadSafeRefCounted<AXCoreObject> {
|
2019-01-27 08:49:29 +00:00
|
|
|
public:
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual ~AXCoreObject() = default;
|
2019-01-27 08:49:29 +00:00
|
|
|
|
2019-10-30 20:44:34 +00:00
|
|
|
// After constructing an accessible object, it must be given a
|
|
|
|
// unique ID, then added to AXObjectCache, and finally init() must
|
|
|
|
// be called last.
|
|
|
|
virtual void setObjectID(AXID) = 0;
|
|
|
|
virtual AXID objectID() const = 0;
|
|
|
|
virtual void init() = 0;
|
|
|
|
|
|
|
|
// When the corresponding WebCore object that this accessible object
|
|
|
|
// represents is deleted, it must be detached.
|
2020-01-27 21:31:01 +00:00
|
|
|
void detach(AccessibilityDetachmentType);
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual bool isDetached() const = 0;
|
|
|
|
|
|
|
|
typedef Vector<RefPtr<AXCoreObject>> AccessibilityChildrenVector;
|
|
|
|
|
|
|
|
virtual bool isAccessibilityObject() const = 0;
|
|
|
|
virtual bool isAccessibilityNodeObject() const = 0;
|
|
|
|
virtual bool isAccessibilityRenderObject() const = 0;
|
|
|
|
virtual bool isAccessibilityScrollbar() const = 0;
|
2020-03-08 19:08:12 +00:00
|
|
|
virtual bool isAccessibilityScrollViewInstance() const = 0;
|
2021-06-23 16:59:34 +00:00
|
|
|
virtual bool isAXImageInstance() const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual bool isAccessibilitySVGRoot() const = 0;
|
|
|
|
virtual bool isAccessibilitySVGElement() const = 0;
|
2020-02-24 00:54:42 +00:00
|
|
|
virtual bool isAccessibilityTableInstance() const = 0;
|
2020-02-26 16:16:57 +00:00
|
|
|
virtual bool isAccessibilityTableColumnInstance() const = 0;
|
2020-02-25 16:28:51 +00:00
|
|
|
virtual bool isAccessibilityProgressIndicatorInstance() const = 0;
|
2020-10-14 13:29:14 +00:00
|
|
|
virtual bool isAccessibilityListBoxInstance() const = 0;
|
2020-03-30 20:07:11 +00:00
|
|
|
virtual bool isAXIsolatedObjectInstance() const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
|
|
|
|
virtual bool isAttachmentElement() const = 0;
|
|
|
|
virtual bool isHeading() const = 0;
|
2019-02-12 22:55:33 +00:00
|
|
|
virtual bool isLink() const = 0;
|
2020-05-27 23:41:22 +00:00
|
|
|
bool isImage() const { return roleValue() == AccessibilityRole::Image; }
|
2019-12-07 20:34:35 +00:00
|
|
|
bool isImageMap() const { return roleValue() == AccessibilityRole::ImageMap; }
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual bool isNativeImage() const = 0;
|
|
|
|
virtual bool isImageButton() const = 0;
|
|
|
|
virtual bool isPasswordField() const = 0;
|
|
|
|
virtual bool isContainedByPasswordField() const = 0;
|
|
|
|
virtual AXCoreObject* passwordFieldOrContainingPasswordField() = 0;
|
|
|
|
virtual bool isNativeTextControl() const = 0;
|
|
|
|
virtual bool isSearchField() const = 0;
|
2019-12-07 20:34:35 +00:00
|
|
|
bool isWebArea() const { return roleValue() == AccessibilityRole::WebArea; }
|
|
|
|
bool isCheckbox() const { return roleValue() == AccessibilityRole::CheckBox; }
|
|
|
|
bool isRadioButton() const { return roleValue() == AccessibilityRole::RadioButton; }
|
|
|
|
bool isListBox() const { return roleValue() == AccessibilityRole::ListBox; }
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual bool isListBoxOption() const = 0;
|
|
|
|
virtual bool isAttachment() const = 0;
|
|
|
|
virtual bool isMediaTimeline() const = 0;
|
|
|
|
virtual bool isMenuRelated() const = 0;
|
|
|
|
virtual bool isMenu() const = 0;
|
|
|
|
virtual bool isMenuBar() const = 0;
|
|
|
|
virtual bool isMenuButton() const = 0;
|
|
|
|
virtual bool isMenuItem() const = 0;
|
2019-02-12 22:55:33 +00:00
|
|
|
virtual bool isFileUploadButton() const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual bool isInputImage() const = 0;
|
|
|
|
virtual bool isProgressIndicator() const = 0;
|
|
|
|
virtual bool isSlider() const = 0;
|
|
|
|
virtual bool isSliderThumb() const = 0;
|
|
|
|
virtual bool isInputSlider() const = 0;
|
|
|
|
virtual bool isControl() const = 0;
|
|
|
|
virtual bool isLabel() const = 0;
|
2020-01-07 22:28:52 +00:00
|
|
|
// lists support (l, ul, ol, dl)
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual bool isList() const = 0;
|
2020-01-07 22:28:52 +00:00
|
|
|
virtual bool isUnorderedList() const = 0;
|
|
|
|
virtual bool isOrderedList() const = 0;
|
|
|
|
virtual bool isDescriptionList() const = 0;
|
|
|
|
|
2020-02-24 00:54:42 +00:00
|
|
|
// Table support.
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual bool isTable() const = 0;
|
2020-02-24 00:54:42 +00:00
|
|
|
virtual bool isExposable() const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual bool isDataTable() const = 0;
|
2020-02-24 00:54:42 +00:00
|
|
|
virtual int tableLevel() const = 0;
|
|
|
|
virtual bool supportsSelectedRows() const = 0;
|
|
|
|
virtual AccessibilityChildrenVector columns() = 0;
|
|
|
|
virtual AccessibilityChildrenVector rows() = 0;
|
|
|
|
virtual unsigned columnCount() = 0;
|
|
|
|
virtual unsigned rowCount() = 0;
|
|
|
|
// All the cells in the table.
|
|
|
|
virtual AccessibilityChildrenVector cells() = 0;
|
|
|
|
virtual AXCoreObject* cellForColumnAndRow(unsigned column, unsigned row) = 0;
|
|
|
|
virtual AccessibilityChildrenVector columnHeaders() = 0;
|
|
|
|
virtual AccessibilityChildrenVector rowHeaders() = 0;
|
|
|
|
virtual AccessibilityChildrenVector visibleRows() = 0;
|
|
|
|
// Returns an object that contains, as children, all the objects that act as headers.
|
|
|
|
virtual AXCoreObject* headerContainer() = 0;
|
|
|
|
virtual int axColumnCount() const = 0;
|
|
|
|
virtual int axRowCount() const = 0;
|
|
|
|
|
2020-02-27 02:31:35 +00:00
|
|
|
// Table cell support.
|
|
|
|
virtual bool isTableCell() const = 0;
|
|
|
|
// Returns the start location and row span of the cell.
|
|
|
|
virtual std::pair<unsigned, unsigned> rowIndexRange() const = 0;
|
|
|
|
// Returns the start location and column span of the cell.
|
|
|
|
virtual std::pair<unsigned, unsigned> columnIndexRange() const = 0;
|
2020-05-15 02:28:43 +00:00
|
|
|
virtual bool isColumnHeaderCell() const = 0;
|
|
|
|
virtual bool isRowHeaderCell() const = 0;
|
2020-02-27 02:31:35 +00:00
|
|
|
virtual int axColumnIndex() const = 0;
|
|
|
|
virtual int axRowIndex() const = 0;
|
|
|
|
|
2020-02-26 16:16:57 +00:00
|
|
|
// Table column support.
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual bool isTableColumn() const = 0;
|
2020-02-26 16:16:57 +00:00
|
|
|
virtual unsigned columnIndex() const = 0;
|
|
|
|
virtual AXCoreObject* columnHeader() = 0;
|
|
|
|
|
2020-02-27 22:59:24 +00:00
|
|
|
// Table row support.
|
|
|
|
virtual bool isTableRow() const = 0;
|
|
|
|
virtual unsigned rowIndex() const = 0;
|
|
|
|
|
|
|
|
// ARIA tree/grid row support.
|
|
|
|
virtual bool isARIATreeGridRow() const = 0;
|
|
|
|
virtual AccessibilityChildrenVector disclosedRows() = 0; // Also implemented by ARIATreeItems.
|
|
|
|
virtual AXCoreObject* disclosedByRow() const = 0;
|
|
|
|
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual bool isFieldset() const = 0;
|
|
|
|
virtual bool isGroup() const = 0;
|
|
|
|
virtual bool isImageMapLink() const = 0;
|
|
|
|
virtual bool isMenuList() const = 0;
|
|
|
|
virtual bool isMenuListPopup() const = 0;
|
|
|
|
virtual bool isMenuListOption() const = 0;
|
2019-12-18 21:47:05 +00:00
|
|
|
|
|
|
|
// Native spin buttons.
|
2019-12-07 20:34:35 +00:00
|
|
|
bool isSpinButton() const { return roleValue() == AccessibilityRole::SpinButton; }
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual bool isNativeSpinButton() const = 0;
|
2019-12-18 21:47:05 +00:00
|
|
|
virtual AXCoreObject* incrementButton() = 0;
|
|
|
|
virtual AXCoreObject* decrementButton() = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual bool isSpinButtonPart() const = 0;
|
2019-12-20 20:33:20 +00:00
|
|
|
virtual bool isIncrementor() const = 0;
|
2019-12-18 21:47:05 +00:00
|
|
|
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual bool isMockObject() const = 0;
|
|
|
|
virtual bool isMediaObject() const = 0;
|
2019-12-07 20:34:35 +00:00
|
|
|
bool isSwitch() const { return roleValue() == AccessibilityRole::Switch; }
|
|
|
|
bool isToggleButton() const { return roleValue() == AccessibilityRole::ToggleButton; }
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual bool isTextControl() const = 0;
|
|
|
|
virtual bool isARIATextControl() const = 0;
|
|
|
|
virtual bool isNonNativeTextControl() const = 0;
|
2019-12-07 20:34:35 +00:00
|
|
|
bool isTabList() const { return roleValue() == AccessibilityRole::TabList; }
|
|
|
|
bool isTabItem() const { return roleValue() == AccessibilityRole::Tab; }
|
|
|
|
bool isRadioGroup() const { return roleValue() == AccessibilityRole::RadioGroup; }
|
|
|
|
bool isComboBox() const { return roleValue() == AccessibilityRole::ComboBox; }
|
|
|
|
bool isTree() const { return roleValue() == AccessibilityRole::Tree; }
|
|
|
|
bool isTreeGrid() const { return roleValue() == AccessibilityRole::TreeGrid; }
|
|
|
|
bool isTreeItem() const { return roleValue() == AccessibilityRole::TreeItem; }
|
|
|
|
bool isScrollbar() const { return roleValue() == AccessibilityRole::ScrollBar; }
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual bool isButton() const = 0;
|
2020-08-04 20:55:49 +00:00
|
|
|
|
|
|
|
virtual HashMap<String, AXEditingStyleValueVariant> resolvedEditingStyles() const = 0;
|
2019-12-07 20:34:35 +00:00
|
|
|
|
|
|
|
bool isListItem() const { return roleValue() == AccessibilityRole::ListItem; }
|
|
|
|
bool isCheckboxOrRadio() const { return isCheckbox() || isRadioButton(); }
|
|
|
|
bool isScrollView() const { return roleValue() == AccessibilityRole::ScrollArea; }
|
|
|
|
bool isCanvas() const { return roleValue() == AccessibilityRole::Canvas; }
|
|
|
|
bool isPopUpButton() const { return roleValue() == AccessibilityRole::PopUpButton; }
|
|
|
|
bool isColorWell() const { return roleValue() == AccessibilityRole::ColorWell; }
|
|
|
|
bool isSplitter() const { return roleValue() == AccessibilityRole::Splitter; }
|
|
|
|
bool isToolbar() const { return roleValue() == AccessibilityRole::Toolbar; }
|
|
|
|
bool isSummary() const { return roleValue() == AccessibilityRole::Summary; }
|
2020-05-11 19:37:14 +00:00
|
|
|
bool isBlockquote() const { return roleValue() == AccessibilityRole::Blockquote; }
|
2019-12-07 20:34:35 +00:00
|
|
|
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual bool isLandmark() const = 0;
|
|
|
|
virtual bool isRangeControl() const = 0;
|
|
|
|
virtual bool isMeter() const = 0;
|
|
|
|
virtual bool isStyleFormatGroup() const = 0;
|
|
|
|
virtual bool isFigureElement() const = 0;
|
|
|
|
virtual bool isKeyboardFocusable() const = 0;
|
|
|
|
virtual bool isOutput() const = 0;
|
|
|
|
|
|
|
|
virtual bool isChecked() const = 0;
|
|
|
|
virtual bool isEnabled() const = 0;
|
|
|
|
virtual bool isSelected() const = 0;
|
|
|
|
virtual bool isFocused() const = 0;
|
|
|
|
virtual bool isHovered() const = 0;
|
|
|
|
virtual bool isIndeterminate() const = 0;
|
|
|
|
virtual bool isLoaded() const = 0;
|
|
|
|
virtual bool isMultiSelectable() const = 0;
|
2020-03-19 22:06:17 +00:00
|
|
|
// FIXME: should need just one since onscreen should be !offscreen.
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual bool isOnScreen() const = 0;
|
|
|
|
virtual bool isOffScreen() const = 0;
|
|
|
|
virtual bool isPressed() const = 0;
|
|
|
|
virtual bool isUnvisited() const = 0;
|
|
|
|
virtual bool isVisited() const = 0;
|
|
|
|
virtual bool isRequired() const = 0;
|
|
|
|
virtual bool supportsRequiredAttribute() const = 0;
|
|
|
|
virtual bool isLinked() const = 0;
|
|
|
|
virtual bool isExpanded() const = 0;
|
|
|
|
virtual bool isVisible() const = 0;
|
|
|
|
virtual bool isCollapsed() const = 0;
|
|
|
|
virtual void setIsExpanded(bool) = 0;
|
2019-02-12 22:55:33 +00:00
|
|
|
virtual FloatRect relativeFrame() const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual FloatRect convertFrameToSpace(const FloatRect&, AccessibilityConversionSpace) const = 0;
|
2020-12-02 00:55:04 +00:00
|
|
|
virtual bool supportsCheckedState() const = 0;
|
|
|
|
|
2019-10-30 20:44:34 +00:00
|
|
|
// In a multi-select list, many items can be selected but only one is active at a time.
|
|
|
|
virtual bool isSelectedOptionActive() const = 0;
|
|
|
|
|
|
|
|
virtual bool hasBoldFont() const = 0;
|
|
|
|
virtual bool hasItalicFont() const = 0;
|
|
|
|
virtual bool hasMisspelling() const = 0;
|
2021-05-30 16:11:40 +00:00
|
|
|
virtual std::optional<SimpleRange> misspellingRange(const SimpleRange& start, AccessibilitySearchDirection) const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual bool hasPlainText() const = 0;
|
2020-05-14 19:44:20 +00:00
|
|
|
virtual bool hasSameFont(const AXCoreObject&) const = 0;
|
|
|
|
virtual bool hasSameFontColor(const AXCoreObject&) const = 0;
|
|
|
|
virtual bool hasSameStyle(const AXCoreObject&) const = 0;
|
2020-01-24 18:40:19 +00:00
|
|
|
bool isStaticText() const { return roleValue() == AccessibilityRole::StaticText; }
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual bool hasUnderline() const = 0;
|
|
|
|
virtual bool hasHighlighting() const = 0;
|
|
|
|
|
|
|
|
virtual bool supportsDatetimeAttribute() const = 0;
|
2019-12-07 20:34:35 +00:00
|
|
|
virtual String datetimeAttributeValue() const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
|
|
|
|
virtual bool canSetFocusAttribute() const = 0;
|
|
|
|
virtual bool canSetTextRangeAttributes() const = 0;
|
|
|
|
virtual bool canSetValueAttribute() const = 0;
|
|
|
|
virtual bool canSetNumericValue() const = 0;
|
|
|
|
virtual bool canSetSelectedAttribute() const = 0;
|
2020-10-14 13:29:14 +00:00
|
|
|
virtual bool canSetSelectedChildren() const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual bool canSetExpandedAttribute() const = 0;
|
|
|
|
|
|
|
|
virtual Element* element() const = 0;
|
|
|
|
virtual Node* node() const = 0;
|
|
|
|
virtual RenderObject* renderer() const = 0;
|
|
|
|
|
|
|
|
virtual bool accessibilityIsIgnored() const = 0;
|
|
|
|
virtual AccessibilityObjectInclusion defaultObjectInclusion() const = 0;
|
|
|
|
virtual bool accessibilityIsIgnoredByDefault() const = 0;
|
|
|
|
|
|
|
|
virtual bool isShowingValidationMessage() const = 0;
|
|
|
|
virtual String validationMessage() const = 0;
|
|
|
|
|
|
|
|
virtual unsigned blockquoteLevel() const = 0;
|
|
|
|
virtual int headingLevel() const = 0;
|
|
|
|
virtual AccessibilityButtonState checkboxOrRadioValue() const = 0;
|
|
|
|
virtual String valueDescription() const = 0;
|
|
|
|
virtual float valueForRange() const = 0;
|
|
|
|
virtual float maxValueForRange() const = 0;
|
|
|
|
virtual float minValueForRange() const = 0;
|
|
|
|
virtual float stepValueForRange() const = 0;
|
|
|
|
virtual AXCoreObject* selectedRadioButton() = 0;
|
|
|
|
virtual AXCoreObject* selectedTabItem() = 0;
|
|
|
|
virtual AXCoreObject* selectedListItem() = 0;
|
|
|
|
virtual int layoutCount() const = 0;
|
|
|
|
virtual double estimatedLoadingProgress() const = 0;
|
2021-01-12 22:13:28 +00:00
|
|
|
virtual String brailleLabel() const = 0;
|
|
|
|
virtual String brailleRoleDescription() const = 0;
|
2021-02-21 04:15:52 +00:00
|
|
|
virtual String embeddedImageDescription() const = 0;
|
2021-06-23 16:59:34 +00:00
|
|
|
virtual std::optional<AccessibilityChildrenVector> imageOverlayElements() = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
|
|
|
|
virtual bool supportsARIAOwns() const = 0;
|
|
|
|
virtual bool isActiveDescendantOfFocusedContainer() const = 0;
|
|
|
|
virtual void ariaActiveDescendantReferencingElements(AccessibilityChildrenVector&) const = 0;
|
|
|
|
virtual void ariaControlsElements(AccessibilityChildrenVector&) const = 0;
|
|
|
|
virtual void ariaControlsReferencingElements(AccessibilityChildrenVector&) const = 0;
|
|
|
|
virtual void ariaDescribedByElements(AccessibilityChildrenVector&) const = 0;
|
|
|
|
virtual void ariaDescribedByReferencingElements(AccessibilityChildrenVector&) const = 0;
|
|
|
|
virtual void ariaDetailsElements(AccessibilityChildrenVector&) const = 0;
|
|
|
|
virtual void ariaDetailsReferencingElements(AccessibilityChildrenVector&) const = 0;
|
|
|
|
virtual void ariaErrorMessageElements(AccessibilityChildrenVector&) const = 0;
|
|
|
|
virtual void ariaErrorMessageReferencingElements(AccessibilityChildrenVector&) const = 0;
|
|
|
|
virtual void ariaFlowToElements(AccessibilityChildrenVector&) const = 0;
|
|
|
|
virtual void ariaFlowToReferencingElements(AccessibilityChildrenVector&) const = 0;
|
|
|
|
virtual void ariaLabelledByElements(AccessibilityChildrenVector&) const = 0;
|
|
|
|
virtual void ariaLabelledByReferencingElements(AccessibilityChildrenVector&) const = 0;
|
|
|
|
virtual void ariaOwnsElements(AccessibilityChildrenVector&) const = 0;
|
|
|
|
virtual void ariaOwnsReferencingElements(AccessibilityChildrenVector&) const = 0;
|
|
|
|
|
|
|
|
virtual bool hasPopup() const = 0;
|
|
|
|
virtual String popupValue() const = 0;
|
|
|
|
virtual bool hasDatalist() const = 0;
|
|
|
|
virtual bool supportsHasPopup() const = 0;
|
|
|
|
virtual bool pressedIsPresent() const = 0;
|
|
|
|
virtual bool ariaIsMultiline() const = 0;
|
|
|
|
virtual String invalidStatus() const = 0;
|
|
|
|
virtual bool supportsPressed() const = 0;
|
|
|
|
virtual bool supportsExpanded() const = 0;
|
|
|
|
virtual bool supportsChecked() const = 0;
|
2020-08-19 00:54:45 +00:00
|
|
|
virtual bool supportsRowCountChange() const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual AccessibilitySortDirection sortDirection() const = 0;
|
|
|
|
virtual bool canvasHasFallbackContent() const = 0;
|
|
|
|
virtual bool supportsRangeValue() const = 0;
|
2019-12-07 20:34:35 +00:00
|
|
|
virtual String identifierAttribute() const = 0;
|
|
|
|
virtual String linkRelValue() const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual void classList(Vector<String>&) const = 0;
|
|
|
|
virtual AccessibilityCurrentState currentState() const = 0;
|
|
|
|
virtual String currentValue() const = 0;
|
|
|
|
virtual bool supportsCurrent() const = 0;
|
|
|
|
virtual const String keyShortcutsValue() const = 0;
|
|
|
|
|
|
|
|
// This function checks if the object should be ignored when there's a modal dialog displayed.
|
|
|
|
virtual bool ignoredFromModalPresence() const = 0;
|
|
|
|
virtual bool isModalDescendant(Node*) const = 0;
|
|
|
|
virtual bool isModalNode() const = 0;
|
|
|
|
|
|
|
|
virtual bool supportsSetSize() const = 0;
|
|
|
|
virtual bool supportsPosInSet() const = 0;
|
|
|
|
virtual int setSize() const = 0;
|
|
|
|
virtual int posInSet() const = 0;
|
|
|
|
|
|
|
|
// ARIA drag and drop
|
2020-05-06 20:11:39 +00:00
|
|
|
virtual bool supportsDropping() const = 0;
|
|
|
|
virtual bool supportsDragging() const = 0;
|
|
|
|
virtual bool isGrabbed() = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual void setARIAGrabbed(bool) = 0;
|
2020-05-06 20:11:39 +00:00
|
|
|
virtual Vector<String> determineDropEffects() const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
|
|
|
|
// Called on the root AX object to return the deepest available element.
|
|
|
|
virtual AXCoreObject* accessibilityHitTest(const IntPoint&) const = 0;
|
|
|
|
// Called on the AX object after the render tree determines which is the right AccessibilityRenderObject.
|
|
|
|
virtual AXCoreObject* elementAccessibilityHitTest(const IntPoint&) const = 0;
|
|
|
|
|
|
|
|
virtual AXCoreObject* focusedUIElement() const = 0;
|
|
|
|
|
|
|
|
virtual AXCoreObject* firstChild() const = 0;
|
|
|
|
virtual AXCoreObject* lastChild() const = 0;
|
|
|
|
virtual AXCoreObject* previousSibling() const = 0;
|
|
|
|
virtual AXCoreObject* nextSibling() const = 0;
|
|
|
|
virtual AXCoreObject* nextSiblingUnignored(int limit) const = 0;
|
|
|
|
virtual AXCoreObject* previousSiblingUnignored(int limit) const = 0;
|
|
|
|
virtual AXCoreObject* parentObject() const = 0;
|
|
|
|
virtual AXCoreObject* parentObjectUnignored() const = 0;
|
|
|
|
virtual AXCoreObject* parentObjectIfExists() const = 0;
|
|
|
|
virtual void findMatchingObjects(AccessibilitySearchCriteria*, AccessibilityChildrenVector&) = 0;
|
|
|
|
virtual bool isDescendantOfBarrenParent() const = 0;
|
|
|
|
virtual bool isDescendantOfRole(AccessibilityRole) const = 0;
|
|
|
|
|
|
|
|
// Text selection
|
2020-07-11 22:38:45 +00:00
|
|
|
virtual Vector<SimpleRange> findTextRanges(const AccessibilitySearchTextCriteria&) const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual Vector<String> performTextOperation(AccessibilityTextOperation const&) = 0;
|
|
|
|
|
|
|
|
virtual AXCoreObject* observableObject() const = 0;
|
|
|
|
virtual void linkedUIElements(AccessibilityChildrenVector&) const = 0;
|
|
|
|
virtual AXCoreObject* titleUIElement() const = 0;
|
|
|
|
virtual AXCoreObject* correspondingLabelForControlElement() const = 0;
|
|
|
|
virtual AXCoreObject* correspondingControlForLabelElement() const = 0;
|
|
|
|
virtual AXCoreObject* scrollBar(AccessibilityOrientation) = 0;
|
|
|
|
|
|
|
|
virtual AccessibilityRole ariaRoleAttribute() const = 0;
|
|
|
|
virtual bool isPresentationalChildOfAriaRole() const = 0;
|
|
|
|
virtual bool ariaRoleHasPresentationalChildren() const = 0;
|
|
|
|
virtual bool inheritsPresentationalRole() const = 0;
|
|
|
|
|
|
|
|
// Accessibility Text
|
|
|
|
virtual void accessibilityText(Vector<AccessibilityText>&) const = 0;
|
|
|
|
// A single method for getting a computed label for an AXObject. It condenses the nuances of accessibilityText. Used by Inspector.
|
|
|
|
virtual String computedLabel() = 0;
|
|
|
|
|
|
|
|
// A programmatic way to set a name on an AccessibleObject.
|
|
|
|
virtual void setAccessibleName(const AtomString&) = 0;
|
|
|
|
virtual bool hasAttributesRequiredForInclusion() const = 0;
|
|
|
|
|
|
|
|
// Accessibility Text - (To be deprecated).
|
|
|
|
virtual String accessibilityDescription() const = 0;
|
|
|
|
virtual String title() const = 0;
|
|
|
|
virtual String helpText() const = 0;
|
2020-01-07 13:15:42 +00:00
|
|
|
bool containsText(String const& text) const
|
|
|
|
{
|
|
|
|
// If text is empty we return true.
|
|
|
|
return text.isEmpty()
|
Change all return values in TextIterator header from live ranges to SimpleRange
https://bugs.webkit.org/show_bug.cgi?id=208906
Reviewed by Antti Koivisto.
Source/WebCore:
This is another step in moving off of live ranges for WebKit internals.
- Change return values of remaining functions that were returning live ranges in
the TextIterator header to return SimpleRange.
- Change some arguments from live ranges to SimpleRange.
- At some call sites, use createLiveRange to convert the SimpleRange into a live
range (for now), but at others update the code to use SimpleRange.
- Renamed a version of findPlainText that returns a boolean to containsPlainText.
- Convert call sites that were using createLiveRange just to use the
Range::startPosition and Range::endPosition functions to instead use a new
overload of the createLegacyEditingPosition function that can be used with
SimpleRange::start and SimpleRange::end because it takes a BoundaryPoint.
* accessibility/AXObjectCache.cpp:
(WebCore::AXObjectCache::rangeMatchesTextNearRange): Return Optional<SimpleRange>
and take SimpleRange argument.
(WebCore::AXObjectCache::previousBoundary): Updated since
SimplifiedBackwardsTextIterator::range now returns SimpleRange.
* accessibility/AXObjectCache.h: Updated for the above.
* accessibility/AccessibilityObjectInterface.h:
(WebCore::AXCoreObject::containsText const): Updated for name change.
Now containsPlainText instead of findPlainText.
* accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
(-[WebAccessibilityObjectWrapper arrayOfTextForTextMarkers:attributed:]):
Use createLegacyEditingPosition instead of createLiveRange.
(-[WebAccessibilityObjectWrapper rangeFromMarkers:withText:]): Use createLiveRange.
* accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
(-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:spellCheck:]):
Use createLegacyEditingPosition instead of createLiveRange.
* dom/Position.cpp:
(WebCore::createLegacyEditingPosition): Added an overload that takes a BoundaryPoint.
* dom/Position.h: Updated for the above, also removed unneeded includes and forward
declarations.
* editing/Editing.cpp:
(WebCore::visiblePositionForIndexUsingCharacterIterator): Updated since
CharacterIterator::range is now a SimpleRange, use createLegacyEditingPosition.
* editing/Editor.cpp:
(WebCore::Editor::advanceToNextMisspelling): Updated since CharacterIterator::range
is now a SimpleRange.
(WebCore::Editor::rangeOfString): Updated since findPlainText now returns a
SimpleRange; use createLiveRange.
(WebCore::Editor::countMatchesForText): Ditto.
* editing/TextIterator.cpp:
(WebCore::SimplifiedBackwardsTextIterator::range const): Return a SimpleRange.
(WebCore::CharacterIterator::range const): Ditto.
(WebCore::characterSubrange): Updated since CharacterIterator::range returns
a SimpleRange. Use createLiveRange.
(WebCore::BackwardsCharacterIterator::BackwardsCharacterIterator): Cut down
code here by initializing data members in the class definition.
(WebCore::BackwardsCharacterIterator::range const): Return a SimpleRange.
(WebCore::WordAwareIterator::WordAwareIterator): Cut down code here by
initializing data members in the class definition.
(WebCore::hasAnyPlainText): Take a SimpleRange, use createLiveRange.
(WebCore::plainTextUsingBackwardsTextIteratorForTesting): Take a SimpleRange,
use createLiveRange.
(WebCore::collapsedToBoundary): Take and return a SimpleRange.
(WebCore::findPlainTextMatches): Take a SimpleRange, use createLiveRange.
(WebCore::rangeForMatch): Take and return a SimpleRange.
(WebCore::findClosestPlainText): Ditto.
(WebCore::findPlainText): Ditto.
(WebCore::containsPlainText): Renamed from findPlainText since this returns
a boolean, not a found location of some text.
* editing/TextIterator.h: Updated for the above. Also changed some data
members to use unsigned for offsets rather than int.
* editing/TextManipulationController.cpp:
(WebCore::ParagraphContentIterator::startPosition): Use
createLegacyEditingPosition instead of createLiveRange.
(WebCore::ParagraphContentIterator::endPosition): Ditto.
* editing/VisiblePosition.h: Added a forward declaration here since Position.h
no longer forward declares it.
* editing/VisibleSelection.cpp:
(WebCore::VisibleSelection::appendTrailingWhitespace): Updated since
CharacterIterator::range is now a SimpleRange, use createLegacyEditingPosition.
* editing/VisibleUnits.cpp:
(WebCore::previousBoundary): Ditto.
(WebCore::nextBoundary): Ditto.
* testing/Internals.cpp:
(WebCore::Internals::rangeOfStringNearLocation): Updated since
findClosestPlainText now returns a SimpleRange, use createLiveRange.
Source/WebKit:
* WebProcess/WebPage/Cocoa/WebPageCocoa.mm: Removed unneeded include of
TextIterator.h.
* WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::rangeNearPositionMatchesText): Removed unused originalRange argument,
changed return type to Optional<SimpleRange> since findClosestPlainText now
returns a SimpleRange.
(WebKit::WebPage::getRectsAtSelectionOffsetWithText): Updated since
rangeNearPositionMatchesText now returns Optional<SimpleRange>, use createLiveRange.
(WebKit::WebPage::requestDocumentEditingContext): Updated since
CharacterIterator::range returns SimpleRange, use createLiveRange.
Canonical link: https://commits.webkit.org/222017@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@258475 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-03-14 22:59:34 +00:00
|
|
|
|| containsPlainText(title(), text, CaseInsensitive)
|
|
|
|
|| containsPlainText(accessibilityDescription(), text, CaseInsensitive)
|
|
|
|
|| containsPlainText(stringValue(), text, CaseInsensitive);
|
2020-01-07 13:15:42 +00:00
|
|
|
}
|
2019-10-30 20:44:34 +00:00
|
|
|
|
|
|
|
// Methods for determining accessibility text.
|
|
|
|
virtual bool isARIAStaticText() const = 0;
|
|
|
|
virtual String stringValue() const = 0;
|
|
|
|
virtual String textUnderElement(AccessibilityTextUnderElementMode = AccessibilityTextUnderElementMode()) const = 0;
|
|
|
|
virtual String text() const = 0;
|
|
|
|
virtual int textLength() const = 0;
|
|
|
|
virtual String ariaLabeledByAttribute() const = 0;
|
|
|
|
virtual String ariaDescribedByAttribute() const = 0;
|
|
|
|
virtual const String placeholderValue() const = 0;
|
|
|
|
virtual bool accessibleNameDerivesFromContent() const = 0;
|
|
|
|
|
|
|
|
// Abbreviations
|
|
|
|
virtual String expandedTextValue() const = 0;
|
|
|
|
virtual bool supportsExpandedTextValue() const = 0;
|
|
|
|
|
|
|
|
virtual void elementsFromAttribute(Vector<Element*>&, const QualifiedName&) const = 0;
|
|
|
|
|
|
|
|
// Only if isColorWell()
|
2020-07-12 19:46:00 +00:00
|
|
|
virtual SRGBA<uint8_t> colorValue() const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
|
|
|
|
virtual AccessibilityRole roleValue() const = 0;
|
Implement AXIsolatedTreeNode::roleDescription.
https://bugs.webkit.org/show_bug.cgi?id=203863
<rdar://problem/56934443>
Reviewed by Chris Fleizach.
No new tests needed, no new functionality.
AccessibilityObjectWrapper cannot call any of the AX.*Text functions to
retrieve localized role descriptions, because when running on the
secondary thread, those AtomStrings are not accessible. Moreover, some
of the special cases require access to DOM objects that are not
available in the secondary thread. Therefore, added
AXCoreObject::rolePlatformDescription that runs in the main thread to
initialize the corresponding attribute in AXIsolatedTreeNode.
rolePlatformString, createPlatformRoleMap, roleToPlatformString,
ariaLandmarkRoleDescription, are helper functions. The platform
functions allow to customize the behavior of roleDescription in each
platform. The platform overrides are implemented for mac. Other
platforms are pending.
* accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::rolePlatformString const):
(WebCore::AccessibilityObject::rolePlatformDescription const):
(WebCore::AccessibilityObject::ariaLandmarkRoleDescription const):
(WebCore::AccessibilityObject::roleDescription const):
(WebCore::Accessibility::createPlatformRoleMap):
(WebCore::Accessibility::roleToPlatformString):
* accessibility/AccessibilityObject.h:
* accessibility/AccessibilityObjectInterface.h:
* accessibility/isolatedtree/AXIsolatedTreeNode.cpp:
(WebCore::AXIsolatedTreeNode::initializeAttributeData):
* accessibility/isolatedtree/AXIsolatedTreeNode.h:
* accessibility/mac/AccessibilityObjectMac.mm:
(WebCore::AccessibilityObject::rolePlatformString const):
(WebCore::AccessibilityObject::rolePlatformDescription const):
(WebCore::Accessibility::createPlatformRoleMap):
* accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
(-[WebAccessibilityObjectWrapperBase accessibilityObject]):
(-[WebAccessibilityObjectWrapperBase ariaLandmarkRoleDescription]): Implementation moved to AccessibilityObject.
* accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
(-[WebAccessibilityObjectWrapper role]): Special cases moved to rolePlatformString.
(-[WebAccessibilityObjectWrapper roleDescription]):
(createAccessibilityRoleMap): Deleted, became Accessibility::createPlatformRoleMap.
(roleValueToNSString): Deleted, became Accessibility::roleToPlatformString.
* platform/LocalizedStrings.cpp:
(WebCore::AXARIAContentGroupText):
(WebCore::AXHorizontalRuleDescriptionText):
(WebCore::AXMarkText):
* platform/LocalizedStrings.h:
* platform/cocoa/LocalizedStringsCocoa.mm:
(WebCore::AXARIAContentGroupText): Deleted, moved to LocalizedStrings.cpp.
(WebCore::AXHorizontalRuleDescriptionText): Deleted, moved to LocalizedStrings.cpp.
(WebCore::AXMarkText): Deleted, moved to LocalizedStrings.cpp.
Canonical link: https://commits.webkit.org/217285@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@252181 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-11-07 13:21:57 +00:00
|
|
|
// Non-localized string associated with the object role.
|
|
|
|
virtual String rolePlatformString() const = 0;
|
|
|
|
// Localized string that describes the object's role.
|
|
|
|
virtual String roleDescription() const = 0;
|
|
|
|
// Localized string that describes ARIA landmark roles.
|
|
|
|
virtual String ariaLandmarkRoleDescription() const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
|
|
|
|
virtual AXObjectCache* axObjectCache() const = 0;
|
|
|
|
|
|
|
|
virtual Element* anchorElement() const = 0;
|
|
|
|
virtual bool supportsPressAction() const = 0;
|
|
|
|
virtual Element* actionElement() const = 0;
|
|
|
|
virtual LayoutRect boundingBoxRect() const = 0;
|
2019-11-21 14:12:58 +00:00
|
|
|
IntRect pixelSnappedBoundingBoxRect() const { return snappedIntRect(boundingBoxRect()); }
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual LayoutRect elementRect() const = 0;
|
2019-11-21 14:12:58 +00:00
|
|
|
LayoutSize size() const { return elementRect().size(); }
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual IntPoint clickPoint() = 0;
|
|
|
|
virtual Path elementPath() const = 0;
|
|
|
|
virtual bool supportsPath() const = 0;
|
|
|
|
|
2021-06-07 04:11:09 +00:00
|
|
|
virtual TextIteratorBehaviors textIteratorBehaviorForTextRange() const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual PlainTextRange selectedTextRange() const = 0;
|
2021-03-30 18:47:17 +00:00
|
|
|
virtual int insertionPointLineNumber() const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
|
|
|
|
virtual URL url() const = 0;
|
|
|
|
virtual VisibleSelection selection() const = 0;
|
|
|
|
virtual String selectedText() const = 0;
|
2019-12-07 20:34:35 +00:00
|
|
|
virtual String accessKey() const = 0;
|
|
|
|
virtual String actionVerb() const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual Widget* widget() const = 0;
|
2020-03-12 21:12:13 +00:00
|
|
|
virtual PlatformWidget platformWidget() const = 0;
|
2020-03-30 20:07:11 +00:00
|
|
|
#if PLATFORM(COCOA)
|
|
|
|
virtual RemoteAXObjectRef remoteParentObject() const = 0;
|
2020-10-16 13:03:49 +00:00
|
|
|
virtual FloatRect convertRectToPlatformSpace(const FloatRect&, AccessibilityConversionSpace) const = 0;
|
2020-03-30 20:07:11 +00:00
|
|
|
#endif
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual Widget* widgetForAttachmentView() const = 0;
|
|
|
|
virtual Page* page() const = 0;
|
|
|
|
virtual Document* document() const = 0;
|
|
|
|
virtual FrameView* documentFrameView() const = 0;
|
|
|
|
virtual Frame* frame() const = 0;
|
|
|
|
virtual Frame* mainFrame() const = 0;
|
|
|
|
virtual Document* topDocument() const = 0;
|
2020-03-05 22:50:32 +00:00
|
|
|
virtual ScrollView* scrollView() const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual ScrollView* scrollViewAncestor() const = 0;
|
|
|
|
virtual String language() const = 0;
|
|
|
|
// 1-based, to match the aria-level spec.
|
|
|
|
virtual unsigned hierarchicalLevel() const = 0;
|
2019-12-07 20:34:35 +00:00
|
|
|
virtual bool isInlineText() const = 0;
|
|
|
|
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual void setFocused(bool) = 0;
|
|
|
|
virtual void setSelectedText(const String&) = 0;
|
|
|
|
virtual void setSelectedTextRange(const PlainTextRange&) = 0;
|
2020-07-01 23:35:43 +00:00
|
|
|
virtual bool setValue(const String&) = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual bool replaceTextInRange(const String&, const PlainTextRange&) = 0;
|
|
|
|
virtual bool insertText(const String&) = 0;
|
|
|
|
|
2020-07-01 23:35:43 +00:00
|
|
|
virtual bool setValue(float) = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual void setSelected(bool) = 0;
|
|
|
|
virtual void setSelectedRows(AccessibilityChildrenVector&) = 0;
|
|
|
|
|
|
|
|
virtual void makeRangeVisible(const PlainTextRange&) = 0;
|
|
|
|
virtual bool press() = 0;
|
|
|
|
virtual bool performDefaultAction() = 0;
|
2020-07-07 00:09:17 +00:00
|
|
|
virtual bool performDismissAction() { return false; }
|
|
|
|
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual AccessibilityOrientation orientation() const = 0;
|
|
|
|
virtual void increment() = 0;
|
|
|
|
virtual void decrement() = 0;
|
|
|
|
|
|
|
|
virtual void childrenChanged() = 0;
|
|
|
|
virtual void updateAccessibilityRole() = 0;
|
2020-03-25 03:48:33 +00:00
|
|
|
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual const AccessibilityChildrenVector& children(bool updateChildrenIfNeeded = true) = 0;
|
|
|
|
virtual void addChildren() = 0;
|
|
|
|
virtual void addChild(AXCoreObject*) = 0;
|
|
|
|
virtual void insertChild(AXCoreObject*, unsigned) = 0;
|
2020-03-25 03:48:33 +00:00
|
|
|
Vector<AXID> childrenIDs();
|
2019-10-30 20:44:34 +00:00
|
|
|
|
|
|
|
virtual bool canHaveChildren() const = 0;
|
|
|
|
virtual bool hasChildren() const = 0;
|
|
|
|
virtual void updateChildrenIfNecessary() = 0;
|
|
|
|
virtual void setNeedsToUpdateChildren() = 0;
|
|
|
|
virtual void setNeedsToUpdateSubtree() = 0;
|
|
|
|
virtual void clearChildren() = 0;
|
|
|
|
virtual bool needsToUpdateChildren() const = 0;
|
|
|
|
virtual void detachFromParent() = 0;
|
|
|
|
virtual bool isDetachedFromParent() = 0;
|
|
|
|
|
|
|
|
virtual bool canHaveSelectedChildren() const = 0;
|
|
|
|
virtual void selectedChildren(AccessibilityChildrenVector&) = 0;
|
2020-10-14 13:29:14 +00:00
|
|
|
virtual void setSelectedChildren(const AccessibilityChildrenVector&) = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual void visibleChildren(AccessibilityChildrenVector&) = 0;
|
|
|
|
virtual void tabChildren(AccessibilityChildrenVector&) = 0;
|
|
|
|
virtual bool shouldFocusActiveDescendant() const = 0;
|
|
|
|
virtual AXCoreObject* activeDescendant() const = 0;
|
|
|
|
virtual void handleActiveDescendantChanged() = 0;
|
2020-02-14 19:29:34 +00:00
|
|
|
bool isDescendantOfObject(const AXCoreObject*) const;
|
|
|
|
bool isAncestorOfObject(const AXCoreObject*) const;
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual AXCoreObject* firstAnonymousBlockChild() const = 0;
|
|
|
|
|
|
|
|
virtual bool hasAttribute(const QualifiedName&) const = 0;
|
|
|
|
virtual const AtomString& getAttribute(const QualifiedName&) const = 0;
|
|
|
|
virtual bool hasTagName(const QualifiedName&) const = 0;
|
2019-12-07 20:34:35 +00:00
|
|
|
virtual String tagName() const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
|
|
|
|
virtual VisiblePositionRange visiblePositionRange() const = 0;
|
|
|
|
virtual VisiblePositionRange visiblePositionRangeForLine(unsigned) const = 0;
|
2021-05-30 16:11:40 +00:00
|
|
|
virtual std::optional<SimpleRange> elementRange() const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual VisiblePositionRange visiblePositionRangeForUnorderedPositions(const VisiblePosition&, const VisiblePosition&) const = 0;
|
|
|
|
virtual VisiblePositionRange positionOfLeftWord(const VisiblePosition&) const = 0;
|
|
|
|
virtual VisiblePositionRange positionOfRightWord(const VisiblePosition&) const = 0;
|
|
|
|
virtual VisiblePositionRange leftLineVisiblePositionRange(const VisiblePosition&) const = 0;
|
|
|
|
virtual VisiblePositionRange rightLineVisiblePositionRange(const VisiblePosition&) const = 0;
|
|
|
|
virtual VisiblePositionRange sentenceForPosition(const VisiblePosition&) const = 0;
|
|
|
|
virtual VisiblePositionRange paragraphForPosition(const VisiblePosition&) const = 0;
|
|
|
|
virtual VisiblePositionRange styleRangeForPosition(const VisiblePosition&) const = 0;
|
|
|
|
virtual VisiblePositionRange visiblePositionRangeForRange(const PlainTextRange&) const = 0;
|
|
|
|
virtual VisiblePositionRange lineRangeForPosition(const VisiblePosition&) const = 0;
|
|
|
|
|
2021-05-30 16:11:40 +00:00
|
|
|
virtual std::optional<SimpleRange> rangeForPlainTextRange(const PlainTextRange&) const = 0;
|
2021-02-22 02:13:13 +00:00
|
|
|
#if PLATFORM(MAC)
|
|
|
|
// FIXME: make this a COCOA method.
|
|
|
|
virtual AXTextMarkerRangeRef textMarkerRangeForNSRange(const NSRange&) const = 0;
|
|
|
|
#endif
|
2019-10-30 20:44:34 +00:00
|
|
|
|
2020-07-11 22:38:45 +00:00
|
|
|
virtual String stringForRange(const SimpleRange&) const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual IntRect boundsForVisiblePositionRange(const VisiblePositionRange&) const = 0;
|
2020-07-11 22:38:45 +00:00
|
|
|
virtual IntRect boundsForRange(const SimpleRange&) const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual int lengthForVisiblePositionRange(const VisiblePositionRange&) const = 0;
|
|
|
|
virtual void setSelectedVisiblePositionRange(const VisiblePositionRange&) const = 0;
|
|
|
|
|
|
|
|
virtual VisiblePosition visiblePositionForBounds(const IntRect&, AccessibilityVisiblePositionForBounds) const = 0;
|
|
|
|
virtual VisiblePosition visiblePositionForPoint(const IntPoint&) const = 0;
|
|
|
|
virtual VisiblePosition nextVisiblePosition(const VisiblePosition&) const = 0;
|
|
|
|
virtual VisiblePosition previousVisiblePosition(const VisiblePosition&) const = 0;
|
|
|
|
virtual VisiblePosition nextWordEnd(const VisiblePosition&) const = 0;
|
|
|
|
virtual VisiblePosition previousWordStart(const VisiblePosition&) const = 0;
|
|
|
|
virtual VisiblePosition nextLineEndPosition(const VisiblePosition&) const = 0;
|
|
|
|
virtual VisiblePosition previousLineStartPosition(const VisiblePosition&) const = 0;
|
|
|
|
virtual VisiblePosition nextSentenceEndPosition(const VisiblePosition&) const = 0;
|
|
|
|
virtual VisiblePosition previousSentenceStartPosition(const VisiblePosition&) const = 0;
|
|
|
|
virtual VisiblePosition nextParagraphEndPosition(const VisiblePosition&) const = 0;
|
|
|
|
virtual VisiblePosition previousParagraphStartPosition(const VisiblePosition&) const = 0;
|
|
|
|
virtual VisiblePosition visiblePositionForIndex(unsigned, bool /*lastIndexOK */) const = 0;
|
|
|
|
|
|
|
|
virtual VisiblePosition visiblePositionForIndex(int) const = 0;
|
|
|
|
virtual int indexForVisiblePosition(const VisiblePosition&) const = 0;
|
|
|
|
|
|
|
|
virtual AXCoreObject* accessibilityObjectForPosition(const VisiblePosition&) const = 0;
|
|
|
|
virtual int lineForPosition(const VisiblePosition&) const = 0;
|
|
|
|
virtual PlainTextRange plainTextRangeForVisiblePositionRange(const VisiblePositionRange&) const = 0;
|
|
|
|
virtual int index(const VisiblePosition&) const = 0;
|
|
|
|
|
|
|
|
virtual void lineBreaks(Vector<int>&) const = 0;
|
|
|
|
virtual PlainTextRange doAXRangeForLine(unsigned) const = 0;
|
|
|
|
virtual PlainTextRange doAXRangeForPosition(const IntPoint&) const = 0;
|
|
|
|
virtual PlainTextRange doAXRangeForIndex(unsigned) const = 0;
|
|
|
|
virtual PlainTextRange doAXStyleRangeForIndex(unsigned) const = 0;
|
|
|
|
|
|
|
|
virtual String doAXStringForRange(const PlainTextRange&) const = 0;
|
|
|
|
virtual IntRect doAXBoundsForRange(const PlainTextRange&) const = 0;
|
|
|
|
virtual IntRect doAXBoundsForRangeUsingCharacterOffset(const PlainTextRange&) const = 0;
|
|
|
|
|
|
|
|
virtual unsigned doAXLineForIndex(unsigned) = 0;
|
|
|
|
|
|
|
|
virtual String computedRoleString() const = 0;
|
|
|
|
|
|
|
|
// MSAA
|
|
|
|
virtual String stringValueForMSAA() const = 0;
|
|
|
|
virtual String stringRoleForMSAA() const = 0;
|
|
|
|
virtual String nameForMSAA() const = 0;
|
|
|
|
virtual String descriptionForMSAA() const = 0;
|
|
|
|
virtual AccessibilityRole roleValueForMSAA() const = 0;
|
|
|
|
|
|
|
|
virtual String passwordFieldValue() const = 0;
|
|
|
|
virtual bool isValueAutofilled() const = 0;
|
|
|
|
virtual bool isValueAutofillAvailable() const = 0;
|
|
|
|
virtual AutoFillButtonType valueAutofillButtonType() const = 0;
|
2019-12-07 20:34:35 +00:00
|
|
|
virtual bool hasARIAValueNow() const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
|
|
|
|
// Used by an ARIA tree to get all its rows.
|
|
|
|
virtual void ariaTreeRows(AccessibilityChildrenVector&) = 0;
|
|
|
|
// Used by an ARIA tree item to get only its content, and not its child tree items and groups.
|
|
|
|
virtual void ariaTreeItemContent(AccessibilityChildrenVector&) = 0;
|
|
|
|
|
|
|
|
// ARIA live-region features.
|
|
|
|
virtual bool supportsLiveRegion(bool excludeIfOff = true) const = 0;
|
|
|
|
virtual bool isInsideLiveRegion(bool excludeIfOff = true) const = 0;
|
|
|
|
virtual AXCoreObject* liveRegionAncestor(bool excludeIfOff = true) const = 0;
|
|
|
|
virtual const String liveRegionStatus() const = 0;
|
|
|
|
virtual const String liveRegionRelevant() const = 0;
|
|
|
|
virtual bool liveRegionAtomic() const = 0;
|
|
|
|
virtual bool isBusy() const = 0;
|
|
|
|
|
|
|
|
virtual bool hasContentEditableAttributeSet() const = 0;
|
|
|
|
|
|
|
|
virtual bool supportsReadOnly() const = 0;
|
|
|
|
virtual String readOnlyValue() const = 0;
|
|
|
|
|
|
|
|
virtual bool supportsAutoComplete() const = 0;
|
|
|
|
virtual String autoCompleteValue() const = 0;
|
|
|
|
|
|
|
|
virtual bool supportsARIAAttributes() const = 0;
|
|
|
|
|
|
|
|
// CSS3 Speech properties.
|
|
|
|
virtual OptionSet<SpeakAs> speakAsProperty() const = 0;
|
|
|
|
|
|
|
|
// Make this object visible by scrolling as many nested scrollable views as needed.
|
|
|
|
virtual void scrollToMakeVisible() const = 0;
|
|
|
|
// Same, but if the whole object can't be made visible, try for this subrect, in local coordinates.
|
|
|
|
virtual void scrollToMakeVisibleWithSubFocus(const IntRect&) const = 0;
|
|
|
|
// Scroll this object to a given point in global coordinates of the top-level window.
|
|
|
|
virtual void scrollToGlobalPoint(const IntPoint&) const = 0;
|
|
|
|
|
|
|
|
enum class ScrollByPageDirection { Up, Down, Left, Right };
|
|
|
|
virtual bool scrollByPage(ScrollByPageDirection) const = 0;
|
|
|
|
virtual IntPoint scrollPosition() const = 0;
|
|
|
|
virtual IntSize scrollContentsSize() const = 0;
|
|
|
|
virtual IntRect scrollVisibleContentRect() const = 0;
|
|
|
|
virtual void scrollToMakeVisible(const ScrollRectToVisibleOptions&) const = 0;
|
|
|
|
|
|
|
|
virtual bool lastKnownIsIgnoredValue() = 0;
|
|
|
|
virtual void setLastKnownIsIgnoredValue(bool) = 0;
|
|
|
|
|
|
|
|
// Fires a children changed notification on the parent if the isIgnored value changed.
|
|
|
|
virtual void notifyIfIgnoredValueChanged() = 0;
|
|
|
|
|
|
|
|
// All math elements return true for isMathElement().
|
|
|
|
virtual bool isMathElement() const = 0;
|
|
|
|
virtual bool isMathFraction() const = 0;
|
|
|
|
virtual bool isMathFenced() const = 0;
|
|
|
|
virtual bool isMathSubscriptSuperscript() const = 0;
|
|
|
|
virtual bool isMathRow() const = 0;
|
|
|
|
virtual bool isMathUnderOver() const = 0;
|
|
|
|
virtual bool isMathRoot() const = 0;
|
|
|
|
virtual bool isMathSquareRoot() const = 0;
|
|
|
|
virtual bool isMathText() const = 0;
|
|
|
|
virtual bool isMathNumber() const = 0;
|
|
|
|
virtual bool isMathOperator() const = 0;
|
|
|
|
virtual bool isMathFenceOperator() const = 0;
|
|
|
|
virtual bool isMathSeparatorOperator() const = 0;
|
|
|
|
virtual bool isMathIdentifier() const = 0;
|
|
|
|
virtual bool isMathTable() const = 0;
|
|
|
|
virtual bool isMathTableRow() const = 0;
|
|
|
|
virtual bool isMathTableCell() const = 0;
|
|
|
|
virtual bool isMathMultiscript() const = 0;
|
|
|
|
virtual bool isMathToken() const = 0;
|
|
|
|
virtual bool isMathScriptObject(AccessibilityMathScriptObjectType) const = 0;
|
|
|
|
virtual bool isMathMultiscriptObject(AccessibilityMathMultiscriptObjectType) const = 0;
|
|
|
|
|
|
|
|
// Root components.
|
|
|
|
virtual AXCoreObject* mathRadicandObject() = 0;
|
|
|
|
virtual AXCoreObject* mathRootIndexObject() = 0;
|
|
|
|
|
|
|
|
// Under over components.
|
|
|
|
virtual AXCoreObject* mathUnderObject() = 0;
|
|
|
|
virtual AXCoreObject* mathOverObject() = 0;
|
|
|
|
|
|
|
|
// Fraction components.
|
|
|
|
virtual AXCoreObject* mathNumeratorObject() = 0;
|
|
|
|
virtual AXCoreObject* mathDenominatorObject() = 0;
|
|
|
|
|
|
|
|
// Subscript/superscript components.
|
|
|
|
virtual AXCoreObject* mathBaseObject() = 0;
|
|
|
|
virtual AXCoreObject* mathSubscriptObject() = 0;
|
|
|
|
virtual AXCoreObject* mathSuperscriptObject() = 0;
|
|
|
|
|
|
|
|
// Fenced components.
|
|
|
|
virtual String mathFencedOpenString() const = 0;
|
|
|
|
virtual String mathFencedCloseString() const = 0;
|
|
|
|
virtual int mathLineThickness() const = 0;
|
|
|
|
virtual bool isAnonymousMathOperator() const = 0;
|
|
|
|
|
|
|
|
// Multiscripts components.
|
2019-12-07 20:34:35 +00:00
|
|
|
typedef std::pair<AXCoreObject*, AXCoreObject*> AccessibilityMathMultiscriptPair;
|
|
|
|
typedef Vector<AccessibilityMathMultiscriptPair> AccessibilityMathMultiscriptPairs;
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual void mathPrescripts(AccessibilityMathMultiscriptPairs&) = 0;
|
|
|
|
virtual void mathPostscripts(AccessibilityMathMultiscriptPairs&) = 0;
|
|
|
|
|
|
|
|
// Visibility.
|
|
|
|
virtual bool isAXHidden() const = 0;
|
|
|
|
virtual bool isDOMHidden() const = 0;
|
|
|
|
virtual bool isHidden() const = 0;
|
|
|
|
|
2020-01-15 14:42:44 +00:00
|
|
|
#if ENABLE(ACCESSIBILITY)
|
|
|
|
AccessibilityObjectWrapper* wrapper() const { return m_wrapper.get(); }
|
|
|
|
void setWrapper(AccessibilityObjectWrapper* wrapper) { m_wrapper = wrapper; }
|
2020-01-27 21:31:01 +00:00
|
|
|
void detachWrapper(AccessibilityDetachmentType);
|
2020-01-15 14:42:44 +00:00
|
|
|
#else
|
2020-01-15 23:05:22 +00:00
|
|
|
AccessibilityObjectWrapper* wrapper() const { return nullptr; }
|
|
|
|
void setWrapper(AccessibilityObjectWrapper*) { }
|
2020-01-27 21:31:01 +00:00
|
|
|
void detachWrapper(AccessibilityDetachmentType) { }
|
2020-01-15 14:42:44 +00:00
|
|
|
#endif
|
2019-10-30 20:44:34 +00:00
|
|
|
|
|
|
|
virtual void overrideAttachmentParent(AXCoreObject* parent) = 0;
|
|
|
|
|
|
|
|
// a platform-specific method for determining if an attachment is ignored
|
|
|
|
virtual bool accessibilityIgnoreAttachment() const = 0;
|
|
|
|
// gives platforms the opportunity to indicate if and how an object should be included
|
|
|
|
virtual AccessibilityObjectInclusion accessibilityPlatformIncludesObject() const = 0;
|
|
|
|
|
|
|
|
#if PLATFORM(IOS_FAMILY)
|
|
|
|
virtual int accessibilityPasswordFieldLength() = 0;
|
|
|
|
virtual bool hasTouchEventListener() const = 0;
|
|
|
|
virtual bool isInputTypePopupButton() const = 0;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// allows for an AccessibilityObject to update its render tree or perform
|
|
|
|
// other operations update type operations
|
|
|
|
virtual void updateBackingStore() = 0;
|
|
|
|
|
2019-02-12 22:55:33 +00:00
|
|
|
#if PLATFORM(COCOA)
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual bool preventKeyboardDOMEventDispatch() const = 0;
|
|
|
|
virtual void setPreventKeyboardDOMEventDispatch(bool) = 0;
|
|
|
|
virtual bool fileUploadButtonReturnsValueInTitle() const = 0;
|
2019-02-12 22:55:33 +00:00
|
|
|
virtual String speechHintAttributeValue() const = 0;
|
|
|
|
virtual String descriptionAttributeValue() const = 0;
|
|
|
|
virtual String helpTextAttributeValue() const = 0;
|
2020-12-14 18:59:33 +00:00
|
|
|
// This should be the visible text that's actually on the screen if possible.
|
|
|
|
// If there's alternative text, that can override the title.
|
2019-02-12 22:55:33 +00:00
|
|
|
virtual String titleAttributeValue() const = 0;
|
2020-12-14 18:59:33 +00:00
|
|
|
|
2019-12-07 20:34:35 +00:00
|
|
|
virtual bool hasApplePDFAnnotationAttribute() const = 0;
|
2019-02-12 22:55:33 +00:00
|
|
|
#endif
|
|
|
|
|
2020-10-16 13:03:49 +00:00
|
|
|
#if PLATFORM(MAC)
|
2019-10-30 20:44:34 +00:00
|
|
|
virtual bool caretBrowsingEnabled() const = 0;
|
|
|
|
virtual void setCaretBrowsingEnabled(bool) = 0;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
virtual AXCoreObject* focusableAncestor() = 0;
|
|
|
|
virtual AXCoreObject* editableAncestor() = 0;
|
|
|
|
virtual AXCoreObject* highestEditableAncestor() = 0;
|
|
|
|
|
|
|
|
virtual const AccessibilityScrollView* ancestorAccessibilityScrollView(bool includeSelf) const = 0;
|
2020-03-02 22:50:30 +00:00
|
|
|
virtual AXCoreObject* webAreaObject() const = 0;
|
2019-10-30 20:44:34 +00:00
|
|
|
|
|
|
|
virtual void setIsIgnoredFromParentData(AccessibilityIsIgnoredFromParentData&) = 0;
|
|
|
|
virtual void clearIsIgnoredFromParentData() = 0;
|
|
|
|
virtual void setIsIgnoredFromParentDataForChild(AXCoreObject*) = 0;
|
2019-12-07 20:34:35 +00:00
|
|
|
|
|
|
|
virtual uint64_t sessionID() const = 0;
|
|
|
|
virtual String documentURI() const = 0;
|
|
|
|
virtual String documentEncoding() const = 0;
|
2020-03-07 09:13:29 +00:00
|
|
|
virtual AccessibilityChildrenVector documentLinks() = 0;
|
|
|
|
|
2020-11-17 22:14:20 +00:00
|
|
|
virtual String innerHTML() const = 0;
|
|
|
|
virtual String outerHTML() const = 0;
|
|
|
|
|
2020-01-27 21:31:01 +00:00
|
|
|
private:
|
|
|
|
// Detaches this object from the objects it references and it is referenced by.
|
|
|
|
virtual void detachRemoteParts(AccessibilityDetachmentType) = 0;
|
|
|
|
|
2020-01-15 14:42:44 +00:00
|
|
|
#if PLATFORM(COCOA)
|
|
|
|
RetainPtr<WebAccessibilityObjectWrapper> m_wrapper;
|
|
|
|
#elif PLATFORM(WIN)
|
|
|
|
COMPtr<AccessibilityObjectWrapper> m_wrapper;
|
|
|
|
#elif USE(ATK)
|
|
|
|
GRefPtr<WebKitAccessible> m_wrapper;
|
|
|
|
#endif
|
2020-01-27 21:31:01 +00:00
|
|
|
virtual void detachPlatformWrapper(AccessibilityDetachmentType) = 0;
|
2019-01-27 08:49:29 +00:00
|
|
|
};
|
|
|
|
|
2020-01-27 21:31:01 +00:00
|
|
|
inline void AXCoreObject::detach(AccessibilityDetachmentType detachmentType)
|
|
|
|
{
|
|
|
|
detachWrapper(detachmentType);
|
|
|
|
detachRemoteParts(detachmentType);
|
|
|
|
setObjectID(InvalidAXID);
|
|
|
|
}
|
|
|
|
|
2020-01-29 21:45:52 +00:00
|
|
|
#if ENABLE(ACCESSIBILITY)
|
2020-01-27 21:31:01 +00:00
|
|
|
inline void AXCoreObject::detachWrapper(AccessibilityDetachmentType detachmentType)
|
|
|
|
{
|
|
|
|
detachPlatformWrapper(detachmentType);
|
|
|
|
m_wrapper = nullptr;
|
|
|
|
}
|
2020-01-29 21:45:52 +00:00
|
|
|
#endif
|
2020-01-27 21:31:01 +00:00
|
|
|
|
2020-03-25 03:48:33 +00:00
|
|
|
inline Vector<AXID> AXCoreObject::childrenIDs()
|
|
|
|
{
|
|
|
|
Vector<AXID> childrenIDs;
|
|
|
|
for (const auto& child : children())
|
|
|
|
childrenIDs.append(child->objectID());
|
|
|
|
return childrenIDs;
|
|
|
|
}
|
|
|
|
|
2019-10-31 19:59:21 +00:00
|
|
|
namespace Accessibility {
|
|
|
|
|
|
|
|
template<typename T, typename F>
|
|
|
|
T* findAncestor(const T& object, bool includeSelf, const F& matches)
|
|
|
|
{
|
|
|
|
T* parent;
|
|
|
|
if (includeSelf)
|
|
|
|
parent = const_cast<T*>(&object);
|
|
|
|
else {
|
|
|
|
auto* parentPtr = object.parentObject();
|
|
|
|
if (!is<T>(parentPtr))
|
|
|
|
return nullptr;
|
|
|
|
parent = parentPtr;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (; parent; parent = parent->parentObject()) {
|
|
|
|
if (matches(*parent))
|
|
|
|
return parent;
|
|
|
|
}
|
|
|
|
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
2019-12-19 18:51:37 +00:00
|
|
|
void findMatchingObjects(AccessibilitySearchCriteria const&, AXCoreObject::AccessibilityChildrenVector&);
|
|
|
|
|
2021-03-01 21:09:47 +00:00
|
|
|
template<typename T, typename F>
|
|
|
|
void enumerateDescendants(T& object, bool includeSelf, const F& lambda)
|
|
|
|
{
|
|
|
|
if (includeSelf)
|
|
|
|
lambda(object);
|
|
|
|
|
|
|
|
for (const auto& child : object.children())
|
|
|
|
enumerateDescendants(*child, true, lambda);
|
|
|
|
}
|
|
|
|
|
2019-12-16 18:47:54 +00:00
|
|
|
template<typename U> inline void performFunctionOnMainThread(U&& lambda)
|
|
|
|
{
|
2020-11-19 19:51:58 +00:00
|
|
|
callOnMainThreadAndWait([&lambda] {
|
2019-12-16 18:47:54 +00:00
|
|
|
lambda();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
template<typename T, typename U> inline T retrieveValueFromMainThread(U&& lambda)
|
|
|
|
{
|
|
|
|
T value;
|
|
|
|
callOnMainThreadAndWait([&value, &lambda] {
|
|
|
|
value = lambda();
|
|
|
|
});
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
2020-02-11 21:33:41 +00:00
|
|
|
#if PLATFORM(COCOA)
|
|
|
|
template<typename T, typename U> inline T retrieveAutoreleasedValueFromMainThread(U&& lambda)
|
|
|
|
{
|
|
|
|
RetainPtr<T> value;
|
|
|
|
callOnMainThreadAndWait([&value, &lambda] {
|
|
|
|
value = lambda();
|
|
|
|
});
|
|
|
|
return value.autorelease();
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2019-10-31 19:59:21 +00:00
|
|
|
} // namespace Accessibility
|
|
|
|
|
2020-02-14 19:29:34 +00:00
|
|
|
inline bool AXCoreObject::isDescendantOfObject(const AXCoreObject* axObject) const
|
|
|
|
{
|
|
|
|
return axObject && axObject->hasChildren()
|
|
|
|
&& Accessibility::findAncestor<AXCoreObject>(*this, false, [axObject] (const AXCoreObject& object) {
|
|
|
|
return &object == axObject;
|
|
|
|
}) != nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline bool AXCoreObject::isAncestorOfObject(const AXCoreObject* axObject) const
|
|
|
|
{
|
|
|
|
return axObject && (this == axObject || axObject->isDescendantOfObject(this));
|
|
|
|
}
|
|
|
|
|
2020-04-23 01:22:36 +00:00
|
|
|
// Logging helpers.
|
|
|
|
WTF::TextStream& operator<<(WTF::TextStream&, AccessibilityRole);
|
2020-12-15 13:44:48 +00:00
|
|
|
WTF::TextStream& operator<<(WTF::TextStream&, AccessibilitySearchDirection);
|
|
|
|
WTF::TextStream& operator<<(WTF::TextStream&, AccessibilitySearchKey);
|
|
|
|
WTF::TextStream& operator<<(WTF::TextStream&, const AccessibilitySearchCriteria&);
|
2020-05-27 23:41:22 +00:00
|
|
|
WTF::TextStream& operator<<(WTF::TextStream&, AccessibilityObjectInclusion);
|
2020-04-23 01:22:36 +00:00
|
|
|
WTF::TextStream& operator<<(WTF::TextStream&, const AXCoreObject&);
|
|
|
|
|
2019-02-12 22:55:33 +00:00
|
|
|
} // namespace WebCore
|