Commit bf08f73f authored by aboxhall@chromium.org's avatar aboxhall@chromium.org

Modify AccessibilityTreeFormatter to build up an internal representation of...

Modify AccessibilityTreeFormatter to build up an internal representation of the tree in the form of DictionaryValue et al. This may be used at a later stage to create a JSON representation of the tree.

Also modify the Mac platform implementation to use the NSAccessibility attribute names rather than method names.

BUG=

Review URL: https://chromiumcodereview.appspot.com/13479003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@194775 0039d316-1c4b-4281-b951-d872f2087c98
parent afde262a
......@@ -7,6 +7,7 @@
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
#include "base/string_util.h"
#include "base/stringprintf.h"
#include "base/strings/string_number_conversions.h"
#include "base/utf_string_conversions.h"
#include "content/browser/accessibility/browser_accessibility_manager.h"
......@@ -18,11 +19,12 @@ namespace content {
namespace {
const int kIndentSpaces = 4;
const char* kSkipString = "@NO_DUMP";
const char* kChildrenDictAttr = "children";
}
AccessibilityTreeFormatter::AccessibilityTreeFormatter(
BrowserAccessibility* node)
: node_(node) {
BrowserAccessibility* root)
: root_(root) {
Initialize();
}
......@@ -45,33 +47,59 @@ AccessibilityTreeFormatter* AccessibilityTreeFormatter::Create(
AccessibilityTreeFormatter::~AccessibilityTreeFormatter() {
}
scoped_ptr<DictionaryValue>
AccessibilityTreeFormatter::BuildAccessibilityTree() {
scoped_ptr<DictionaryValue> dict(new DictionaryValue);
RecursiveBuildAccessibilityTree(*root_, dict.get());
return dict.Pass();
}
void AccessibilityTreeFormatter::FormatAccessibilityTree(
string16* contents) {
RecursiveFormatAccessibilityTree(node_, contents, 0);
scoped_ptr<DictionaryValue> dict = BuildAccessibilityTree();
RecursiveFormatAccessibilityTree(*(dict.get()), contents);
}
void AccessibilityTreeFormatter::RecursiveBuildAccessibilityTree(
const BrowserAccessibility& node, DictionaryValue* dict) {
AddProperties(node, dict);
ListValue* children = new ListValue;
dict->Set(kChildrenDictAttr, children);
for (size_t i = 0; i < node.children().size(); ++i) {
BrowserAccessibility* child_node = node.children()[i];
DictionaryValue* child_dict = new DictionaryValue;
children->Append(child_dict);
RecursiveBuildAccessibilityTree(*child_node, child_dict);
}
}
void AccessibilityTreeFormatter::RecursiveFormatAccessibilityTree(
BrowserAccessibility* node, string16* contents, int indent) {
scoped_ptr<char[]> prefix(new char[indent + 1]);
for (int i = 0; i < indent; ++i)
prefix[i] = ' ';
prefix[indent] = '\0';
string16 line = ToString(node, prefix.get());
const DictionaryValue& dict, string16* contents, int depth) {
string16 line = ToString(dict, string16(depth * kIndentSpaces, ' '));
if (line.find(ASCIIToUTF16(kSkipString)) != string16::npos)
return;
*contents += line;
for (size_t i = 0; i < node->children().size(); ++i) {
RecursiveFormatAccessibilityTree(node->children()[i], contents,
indent + kIndentSpaces);
const ListValue* children;
dict.GetList(kChildrenDictAttr, &children);
const DictionaryValue* child_dict;
for (size_t i = 0; i < children->GetSize(); i++) {
children->GetDictionary(i, &child_dict);
RecursiveFormatAccessibilityTree(*child_dict, contents, depth + 1);
}
}
#if (!defined(OS_WIN) && !defined(OS_MACOSX))
string16 AccessibilityTreeFormatter::ToString(BrowserAccessibility* node,
char* prefix) {
return UTF8ToUTF16(prefix) + base::IntToString16(node->renderer_id()) +
void AccessibilityTreeFormatter::AddProperties(const BrowserAccessibility& node,
DictionaryValue* dict) {
dict->SetInteger("id", node.renderer_id());
}
string16 AccessibilityTreeFormatter::ToString(const DictionaryValue& node,
const string16& indent) {
int id_value;
node.GetInteger("id", &id_value);
return indent + base::IntToString16(id_value) +
ASCIIToUTF16("\n");
}
......@@ -127,23 +155,31 @@ bool AccessibilityTreeFormatter::MatchesFilters(
return allow;
}
void AccessibilityTreeFormatter::StartLine() {
line_.clear();
string16 AccessibilityTreeFormatter::FormatCoordinates(
const char* name, const char* x_name, const char* y_name,
const DictionaryValue& value) {
int x, y;
value.GetInteger(x_name, &x);
value.GetInteger(y_name, &y);
std::string xy_str(base::StringPrintf("%s=(%d, %d)", name, x, y));
return UTF8ToUTF16(xy_str);
}
void AccessibilityTreeFormatter::WriteAttribute(
bool include_by_default, const std::string& attr, string16* line) {
WriteAttribute(include_by_default, UTF8ToUTF16(attr), line);
}
void AccessibilityTreeFormatter::Add(
bool include_by_default, const string16& attr) {
void AccessibilityTreeFormatter::WriteAttribute(
bool include_by_default, const string16& attr, string16* line) {
if (attr.empty())
return;
if (!MatchesFilters(attr, include_by_default))
return;
if (!line_.empty())
line_ += ASCIIToUTF16(" ");
line_ += attr;
}
string16 AccessibilityTreeFormatter::FinishLine() {
return line_;
if (!line->empty())
*line += ASCIIToUTF16(" ");
*line += attr;
}
} // namespace content
......@@ -10,6 +10,7 @@
#include "base/files/file_path.h"
#include "base/string16.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
#include "content/browser/accessibility/browser_accessibility.h"
#include "content/common/content_export.h"
......@@ -23,11 +24,33 @@ class RenderViewHost;
// implemented.
class CONTENT_EXPORT AccessibilityTreeFormatter {
public:
explicit AccessibilityTreeFormatter(BrowserAccessibility* node);
explicit AccessibilityTreeFormatter(BrowserAccessibility* root);
virtual ~AccessibilityTreeFormatter();
static AccessibilityTreeFormatter* Create(RenderViewHost* rvh);
// Populates the given DictionaryValue with the accessibility tree.
// The dictionary contains a key/value pair for each attribute of the node,
// plus a "children" attribute containing a list of all child nodes.
// {
// "AXName": "node", /* actual attributes will vary by platform */
// "position": { /* some attributes may be dictionaries */
// "x": 0,
// "y": 0
// },
// /* ... more attributes of |node| */
// "children": [ { /* list of children created recursively */
// "AXName": "child node 1",
// /* ... more attributes */
// "children": [ ]
// }, {
// "AXName": "child name 2",
// /* ... more attributes */
// "children": [ ]
// } ]
// }
scoped_ptr<DictionaryValue> BuildAccessibilityTree();
// Dumps a BrowserAccessibility tree into a string.
void FormatAccessibilityTree(string16* contents);
......@@ -76,25 +99,45 @@ class CONTENT_EXPORT AccessibilityTreeFormatter {
static const std::string GetDenyString();
protected:
void RecursiveFormatAccessibilityTree(BrowserAccessibility* node,
void RecursiveFormatAccessibilityTree(const BrowserAccessibility& node,
string16* contents,
int indent);
void RecursiveBuildAccessibilityTree(const BrowserAccessibility& node,
DictionaryValue* tree_node);
void RecursiveFormatAccessibilityTree(const DictionaryValue& tree_node,
string16* contents,
int depth = 0);
// Overridden by each platform to add the required attributes for each node
// into the given dict.
void AddProperties(const BrowserAccessibility& node, DictionaryValue* dict);
string16 FormatCoordinates(const char* name,
const char* x_name,
const char* y_name,
const DictionaryValue& value);
// Returns a platform specific representation of a BrowserAccessibility.
// Should be zero or more complete lines, each with |prefix| prepended
// (to indent each line).
string16 ToString(BrowserAccessibility* node, char* prefix);
string16 ToString(const DictionaryValue& node, const string16& indent);
void Initialize();
bool MatchesFilters(const string16& text, bool default_result) const;
void StartLine();
void Add(bool include_by_default, const string16& attr);
string16 FinishLine();
BrowserAccessibility* node_;
// Writes the given attribute string out to |line| if it matches the filters.
void WriteAttribute(bool include_by_default,
const string16& attr,
string16* line);
void WriteAttribute(bool include_by_default,
const std::string& attr,
string16* line);
BrowserAccessibility* root_;
// Filters used when formatting the accessibility tree as text.
std::vector<Filter> filters_;
string16 line_;
DISALLOW_COPY_AND_ASSIGN(AccessibilityTreeFormatter);
};
......
AXWebArea
AXGroup
AXLink title='normal link'
AXStaticText value='normal link'
AXLink AXTitle='normal link'
AXStaticText AXValue='normal link'
AXWebArea
AXGroup
AXLink title='Link with image at start.'
AXImage description='Link'
AXStaticText value=' with image at start.'
AXLink title='Link with image in the middle.'
AXStaticText value='Link with '
AXImage description='image'
AXStaticText value=' in the middle.'
AXLink title='Link with broken in the middle.'
AXStaticText value='Link with '
AXImage description='broken'
AXStaticText value=' in the middle.'
AXLink title='Link with image at the end'
AXStaticText value='Link with image at the '
AXImage description='end'
AXLink AXTitle='Link with image at start.'
AXImage AXDescription='Link'
AXStaticText AXValue=' with image at start.'
AXLink AXTitle='Link with image in the middle.'
AXStaticText AXValue='Link with '
AXImage AXDescription='image'
AXStaticText AXValue=' in the middle.'
AXLink AXTitle='Link with broken in the middle.'
AXStaticText AXValue='Link with '
AXImage AXDescription='broken'
AXStaticText AXValue=' in the middle.'
AXLink AXTitle='Link with image at the end'
AXStaticText AXValue='Link with image at the '
AXImage AXDescription='end'
<!--
@MAC-ALLOW:description*
@MAC-ALLOW:AXDescription*
-->
<html>
<body>
......
#<skip -- wrong roleDescription (bug)>
AXWebArea subrole=(null) roleDescription='HTML content'
AXGroup subrole=AXLandmarkContentInfo roleDescription='address'
AXStaticText subrole=(null) roleDescription='text' value='Please contact John Citizen for more information.'
AXWebArea AXRoleDescription='HTML content'
AXGroup AXSubrole=AXLandmarkContentInfo AXRoleDescription='group'
AXStaticText AXRoleDescription='text' AXValue='Please contact John Citizen for more information.'
<!--
@MAC-ALLOW:subrole=*
@MAC-ALLOW:roleDescription=*
@MAC-ALLOW:AXSubrole=*
@MAC-ALLOW:AXRoleDescription=*
@WIN-ALLOW:role:*
@WIN-ALLOW:xml-role*
-->
......
AXWebArea
AXGroup subrole=AXLandmarkApplication roleDescription='application'
AXGroup AXSubrole=AXLandmarkApplication AXRoleDescription='application'
<!--
@MAC-ALLOW:roleDescription='application'
@MAC-ALLOW:subrole*
@MAC-ALLOW:AXRoleDescription='application'
@MAC-ALLOW:AXSubrole*
-->
<html>
<body role="application" id="testAriaApplication">
......
AXWebArea
AXGroup
AXStaticText value='State'
AXStaticText AXValue='State'
AXComboBox
AXList
AXStaticText title='Alabama'
AXStaticText title='Alaska'
AXStaticText AXTitle='Alabama'
AXStaticText AXTitle='Alaska'
AXWebArea
AXGroup invalid='true'
AXStaticText value='invalid=true'
AXGroup invalid='spelling'
AXStaticText value='invalid=spelling'
AXGroup invalid='grammar'
AXStaticText value='invalid=grammar'
AXGroup invalid='false'
AXStaticText value='invalid=false'
AXGroup invalid='false'
AXStaticText value='invalid=<empty>'
AXGroup invalid='somethingelse'
AXStaticText value='invalid=somethingelse'
AXGroup AXInvalid='true'
AXStaticText AXValue='invalid=true'
AXGroup AXInvalid='spelling'
AXStaticText AXValue='invalid=spelling'
AXGroup AXInvalid='grammar'
AXStaticText AXValue='invalid=grammar'
AXGroup AXInvalid='false'
AXStaticText AXValue='invalid=false'
AXGroup AXInvalid='false'
AXStaticText AXValue='invalid=<empty>'
AXGroup AXInvalid='somethingelse'
AXStaticText AXValue='invalid=somethingelse'
<!--
@MAC-ALLOW:invalid=*
@MAC-ALLOW:AXInvalid=*
@WIN-ALLOW:checkable:*
@WIN-DENY:name=''
-->
......
AXWebArea
AXHeading title='H3' value='3'
AXStaticText value='H3'
AXHeading title='ARIA heading level 3' value='3'
AXStaticText value='ARIA heading level 3'
AXHeading AXTitle='H3' AXValue='3'
AXStaticText AXValue='H3'
AXHeading AXTitle='ARIA heading level 3' AXValue='3'
AXStaticText AXValue='ARIA heading level 3'
AXOutline
AXRow subrole=AXOutlineRow disclosing='1' disclosureLevel='0'
AXStaticText value='Tree item at level 1'
AXRow subrole=AXOutlineRow disclosing='0' disclosureLevel='1'
AXStaticText value='Tree item at level 2'
AXRow subrole=AXOutlineRow disclosing='0' disclosureLevel='2'
AXStaticText value='Tree item at level 3'
AXRow AXSubrole=AXOutlineRow AXDisclosing='1' AXDisclosureLevel='0'
AXStaticText AXValue='Tree item at level 1'
AXRow AXSubrole=AXOutlineRow AXDisclosing='0' AXDisclosureLevel='1'
AXStaticText AXValue='Tree item at level 2'
AXRow AXSubrole=AXOutlineRow AXDisclosing='0' AXDisclosureLevel='2'
AXStaticText AXValue='Tree item at level 3'
AXTable
AXRow disclosureLevel='0'
AXRow AXDisclosureLevel='0'
AXCell
AXStaticText value='Cell at level 1'
AXRow disclosureLevel='1'
AXStaticText AXValue='Cell at level 1'
AXRow AXDisclosureLevel='1'
AXCell
AXStaticText value='Cell at level 2'
AXStaticText AXValue='Cell at level 2'
AXColumn
AXGroup
<!doctype html>
<!--
@MAC-ALLOW:subrole=AXOutlineRow
@MAC-ALLOW:disclosing*
@MAC-ALLOW:disclosureLevel*
@MAC-ALLOW:AXSubrole=AXOutlineRow
@MAC-ALLOW:AXDisclosing*
@MAC-ALLOW:AXDisclosureLevel*
@WIN-ALLOW:level:1
@WIN-ALLOW:level:2
@WIN-ALLOW:level:3
......
AXWebArea
AXMenuBar
AXMenuItem title='File'
AXMenuItem title='Edit'
AXMenuItem title='View'
AXMenu description='File'
AXMenuItem title='New'
AXMenuItem title='Open'
AXMenuItem title='Save'
AXMenuItem title='Quit'
AXMenuItem AXTitle='File'
AXMenuItem AXTitle='Edit'
AXMenuItem AXTitle='View'
AXMenu AXDescription='File'
AXMenuItem AXTitle='New'
AXMenuItem AXTitle='Open'
AXMenuItem AXTitle='Save'
AXMenuItem AXTitle='Quit'
<!--
@MAC-ALLOW:description='File'
@MAC-DENY:value*
@MAC-ALLOW:AXDescription='File'
@MAC-DENY:AXValue*
@WIN-DENY:description=''
-->
<html>
......
#<skip - role should be AXMenuItem. http://crbug.com/169578
- role description should be 'menu item'. http://crbug.com/169580
- AXMenuItemMarkChar should be \236. http://crbug.com/169582>
AXWebArea roleDescription='HTML content'
AXMenu roleDescription='menu'
AXMenuItem roleDescription='menu item' AXMenuItemMarkChar='\236'
AXStaticText roleDescription='text' value='Menu item 1'
AXMenuItem roleDescription='menu item' AXMenuItemMarkChar='(null)'
AXStaticText roleDescription='text' value='Menu item 2'
AXWebArea AXRoleDescription='HTML content'
AXMenu AXRoleDescription='menu'
AXGroup AXRoleDescription='aria-menuitemradio'
AXStaticText AXRoleDescription='text' AXValue='Menu item 1'
AXGroup AXRoleDescription='aria-menuitemradio'
AXStaticText AXRoleDescription='text' AXValue='Menu item 2'
<!--
@MAC-ALLOW:roleDescription=*
@MAC-ALLOW:AXRoleDescription=*
@WIN-ALLOW:checkable:*
@WIN-DENY:name=''
-->
......
AXWebArea
AXButton title='Regular button'
AXButton title='Toggle button unpressed'
AXButton title='Toggle button pressed'
AXButton title='Toggle button mixed'
AXButton AXTitle='Regular button'
AXButton AXTitle='Toggle button unpressed'
AXButton AXTitle='Toggle button pressed'
AXButton AXTitle='Toggle button mixed'
AXWebArea roleDescription='HTML content'
AXProgressIndicator roleDescription='progress indicator' value='3' minValue='1' maxValue='37'
AXProgressIndicator roleDescription='progress indicator' value='0' minValue='1' maxValue='96' valueDescription='three'
AXWebArea AXRoleDescription='HTML content'
AXProgressIndicator AXRoleDescription='progress indicator' AXValue='3' AXMinValue='1' AXMaxValue='37'
AXProgressIndicator AXRoleDescription='progress indicator' AXValue='0' AXMinValue='1' AXMaxValue='96' AXValueDescription='three'
<!--
@MAC-ALLOW:roleDescription=*
@MAC-ALLOW:valueDescription=*
@MAC-ALLOW:minValue=*
@MAC-ALLOW:maxValue=*
@MAC-ALLOW:AXRoleDescription=*
@MAC-ALLOW:AXValueDescription=*
@MAC-ALLOW:AXMinValue=*
@MAC-ALLOW:AXMaxValue=*
@WIN-ALLOW:READONLY
@WIN-ALLOW:STATE_SYSTEM_READONLY
@WIN-ALLOW:valuetext:*
......
AXWebArea
AXProgressIndicator value='51' maxValue='101'
AXScrollBar value='52' maxValue='102'
AXSlider value='53' maxValue='103'
AXSlider value='54' maxValue='104'
AXProgressIndicator AXValue='51' AXMaxValue='101'
AXScrollBar AXValue='52' AXMaxValue='102'
AXSlider AXValue='53' AXMaxValue='103'
AXSlider AXValue='54' AXMaxValue='104'
<!doctype html>
<!--
@MAC-ALLOW:maxValue=*
@MAC-DENY:title*
@MAC-ALLOW:AXMaxValue=*
@MAC-DENY:AXTitle*
@WIN-ALLOW:maximumValue=*
@WIN-DENY:description=''
-->
......
AXWebArea
AXProgressIndicator minValue='1'
AXScrollBar minValue='2'
AXSlider minValue='3'
AXSlider minValue='4'
AXProgressIndicator AXMinValue='1'
AXScrollBar AXMinValue='2'
AXSlider AXMinValue='3'
AXSlider AXMinValue='4'
<!doctype html>
<!--
@MAC-ALLOW:minValue=*
@MAC-DENY:title*
@MAC-DENY:value*
@MAC-ALLOW:AXMinValue=*
@MAC-DENY:AXTitle*
@MAC-DENY:AXValue*
@WIN-ALLOW:minimumValue=*
@WIN-DENY:description=''
-->
......
AXWebArea
AXGroup subrole=AXDocumentArticle
AXStaticText value='This is an article.'
AXGroup AXSubrole=AXDocumentArticle
AXStaticText AXValue='This is an article.'
<!--
@MAC-ALLOW:subrole=AXDocumentArticle
@MAC-DENY:title*
@MAC-ALLOW:AXSubrole=AXDocumentArticle
@MAC-DENY:AXTitle*
@WIN-ALLOW:xml-roles:article
-->
<!doctype html>
......
......@@ -2,6 +2,6 @@
# wrong, so we assume this is correct.
AXWebArea
AXGroup
AXStaticText value='Some LTR text'
AXStaticText value='Some RTL text '
AXStaticText value='with some LTR text embedded'
AXStaticText AXValue='Some LTR text'
AXStaticText AXValue='Some RTL text '
AXStaticText AXValue='with some LTR text embedded'
<!--
@MAC_ALLOW:subrole=*
@MAC_ALLOW:AXSubrole=*
@WIN_ALLOW:*
-->
<html>
......
AXWebArea
AXGroup
AXStaticText value='Text line 1 '
AXStaticText value='Text line 2'
AXStaticText AXValue='Text line 1 '
AXStaticText AXValue='Text line 2'
AXWebArea
AXGroup
AXButton title='InnerText0'
AXButton title='InnerText1' help='Title1'
AXButton title='InnerText2' description='AriaLabel2' help='Title2'
AXButton title='InnerText3' description='LabelledBy3' help='Title3'
AXButton title='InnerText4' description='LabelledBy4' help='DescribedBy4'
AXButton title='InnerText5' help='DescribedBy5'
AXButton AXTitle='InnerText0'
AXButton AXTitle='InnerText1' AXHelp='Title1'
AXButton AXTitle='InnerText2' AXDescription='AriaLabel2' AXHelp='Title2'
AXButton AXTitle='InnerText3' AXDescription='LabelledBy3' AXHelp='Title3'
AXButton AXTitle='InnerText4' AXDescription='LabelledBy4' AXHelp='DescribedBy4'
AXButton AXTitle='InnerText5' AXHelp='DescribedBy5'
<!--
@WIN-ALLOW:description*
@MAC-ALLOW:description*
@MAC-ALLOW:help*
@MAC-DENY:value*
@MAC-ALLOW:AXDescription*
@MAC-ALLOW:AXHelp*
@MAC-DENY:AXValue*
-->
<html>
<body>
......
AXWebArea
AXGroup
AXImage
AXStaticText value='Static fallback'
AXStaticText AXValue='Static fallback'
AXGroup
AXLink title='Interactive fallback'
AXStaticText value='Interactive fallback'
AXLink AXTitle='Interactive fallback'
AXStaticText AXValue='Interactive fallback'
AXWebArea
AXGroup
AXCheckBox description='Title0'
AXCheckBox title='Label1' help='Title1'
AXCheckBox description='AriaLabel2' help='Title2'
AXCheckBox description='LabelledBy3' help='Title3'
AXCheckBox description='LabelledBy4' help='DescribedBy4'
AXCheckBox help='DescribedBy5'
AXCheckBox AXDescription='Title0'
AXCheckBox AXTitle='Label1' AXHelp='Title1'
AXCheckBox AXDescription='AriaLabel2' AXHelp='Title2'
AXCheckBox AXDescription='LabelledBy3' AXHelp='Title3'
AXCheckBox AXDescription='LabelledBy4' AXHelp='DescribedBy4'
AXCheckBox AXHelp='DescribedBy5'
<!--
@WIN-ALLOW:description*
@MAC-ALLOW:description*
@MAC-ALLOW:help*
@MAC-DENY:value*
@MAC-ALLOW:AXDescription*
@MAC-ALLOW:AXHelp*
@MAC-DENY:AXValue*
-->
<html>
<body>
......
AXWebArea
AXGroup title='Focusable div'
AXStaticText value='Focusable div'
AXGroup AXTitle='Focusable div'
AXStaticText AXValue='Focusable div'
AXWebArea
AXList subrole=AXDescriptionList
AXGroup subrole=AXTerm
AXStaticText value='Term'
AXGroup subrole=AXDescription
AXStaticText value='Description'
AXGroup subrole=AXDefinition
AXStaticText value='Definition'
AXList AXSubrole=AXDescriptionList
AXGroup AXSubrole=AXTerm
AXStaticText AXValue='Term'
AXGroup AXSubrole=AXDescription
AXStaticText AXValue='Description'
AXGroup AXSubrole=AXDefinition
AXStaticText AXValue='Definition'
<!doctype html>
<!--
@MAC-ALLOW:subrole*
@MAC-ALLOW:AXSubrole*
-->
<html>
<body>
......
AXWebArea
AXGroup
AXStaticText value='One word is '
AXStaticText value='emphasized'
AXStaticText value='.'
AXStaticText AXValue='One word is '
AXStaticText AXValue='emphasized'
AXStaticText AXValue='.'
AXWebArea
AXGroup subrole=AXLandmarkContentInfo roleDescription='footer'
AXStaticText value='Footer element'
AXGroup AXSubrole=AXLandmarkContentInfo AXRoleDescription='footer'
AXStaticText AXValue='Footer element'
<!--
@MAC-ALLOW:roleDescription='footer'
@MAC-ALLOW:subrole*
@MAC-ALLOW:AXRoleDescription='footer'
@MAC-ALLOW:AXSubrole*
-->
<html>
<body>
......
AXWebArea
AXGroup
AXButton title='Submit'
AXButton AXTitle='Submit'
AXWebArea
AXHeading title='Heading 1' value='1'
AXStaticText value='Heading 1'
AXHeading title='Heading 2' value='2'
AXStaticText value='Heading 2'
AXHeading title='Heading 3' value='3'
AXStaticText value='Heading 3'
AXHeading title='Heading 4' value='4'
AXStaticText value='Heading 4'
AXHeading title='Heading 5' value='5'
AXStaticText value='Heading 5'
AXHeading title='Heading 6' value='6'
AXStaticText value='Heading 6'
AXHeading title='ARIA Heading 1' value='1'
AXStaticText value='ARIA Heading 1'
AXHeading title='ARIA Heading 2' value='2'
AXStaticText value='ARIA Heading 2'
AXHeading title='ARIA Heading 3' value='3'
AXStaticText value='ARIA Heading 3'
AXHeading title='ARIA Heading 4' value='4'
AXStaticText value='ARIA Heading 4'
AXHeading title='ARIA Heading 5' value='5'
AXStaticText value='ARIA Heading 5'
AXHeading title='ARIA Heading 6' value='6'
AXStaticText value='ARIA Heading 6'
AXHeading AXTitle='Heading 1' AXValue='1'
AXStaticText AXValue='Heading 1'
AXHeading AXTitle='Heading 2' AXValue='2'
AXStaticText AXValue='Heading 2'
AXHeading AXTitle='Heading 3' AXValue='3'
AXStaticText AXValue='Heading 3'
AXHeading AXTitle='Heading 4' AXValue='4'
AXStaticText AXValue='Heading 4'
AXHeading AXTitle='Heading 5' AXValue='5'
AXStaticText AXValue='Heading 5'
AXHeading AXTitle='Heading 6' AXValue='6'
AXStaticText AXValue='Heading 6'
AXHeading AXTitle='ARIA Heading 1' AXValue='1'
AXStaticText AXValue='ARIA Heading 1'
AXHeading AXTitle='ARIA Heading 2' AXValue='2'
AXStaticText AXValue='ARIA Heading 2'
AXHeading AXTitle='ARIA Heading 3' AXValue='3'
AXStaticText AXValue='ARIA Heading 3'
AXHeading AXTitle='ARIA Heading 4' AXValue='4'
AXStaticText AXValue='ARIA Heading 4'
AXHeading AXTitle='ARIA Heading 5' AXValue='5'
AXStaticText AXValue='ARIA Heading 5'
AXHeading AXTitle='ARIA Heading 6' AXValue='6'
AXStaticText AXValue='ARIA Heading 6'
AXWebArea position=(0, 0) size=(800, 600)
AXGroup position=(0, 0) size=(300, 150)
AXButton position=(25, 25) size=(250, 50)
AXGroup position=(0, 150) size=(300, 150)
AXButton position=(25, 175) size=(250, 50)
AXGroup position=(0, 300) size=(300, 150)
AXUnknown position=(0, 300) size=(300, 100)
AXUnknown position=(0, 0) size=(0, 0)
AXWebArea position=(0, 300) size=(300, 100)
AXGroup position=(0, 300) size=(300, 100)
AXButton position=(25, 325) size=(250, 50)
AXGroup position=(0, 450) size=(300, 150)
AXUnknown position=(0, 450) size=(150, 50)
AXUnknown position=(0, 0) size=(0, 0)
AXWebArea position=(0, 450) size=(300, 100)
AXGroup position=(-150, 400) size=(300, 100)
AXButton position=(-125, 425) size=(250, 50)
AXScrollBar position=(0, 0) size=(0, 0)
AXScrollBar position=(0, 0) size=(0, 0)
<!doctype html>
<!--
@MAC-DENY:title*
@MAC-DENY:value*
@MAC-DENY:AXTitle*
@MAC-DENY:AXValue*
@MAC-ALLOW:position*
@MAC-ALLOW:size*
......
AXWebArea
AXGroup
AXButton title='Button'
AXButton AXTitle='Button'
<!doctype html>
<!--
@MAC-DENY:value*
@MAC-DENY:AXValue*
-->
<html>
<body>
......
AXWebArea
AXGroup
AXColorWell value='rgb 1.00000 0.60000 0.00000 1'
AXColorWell AXValue='rgb 1.00000 0.60000 0.00000 1'
<!doctype html>
<!--
@MAC-DENY:title*
@MAC-DENY:AXTitle*
@WIN-ALLOW:value*
@WIN-DENY:value='file://*
-->
......
AXWebArea
AXGroup
AXSlider value='5'
AXSlider AXValue='5'
AXWebArea
AXGroup
AXGroup
AXStaticText value='Label'
AXStaticText AXValue='Label'
AXWebArea
AXList subrole=AXContentList
AXList AXSubrole=AXContentList
AXGroup
AXListMarker value='•'
AXStaticText value='First item properly groups itself despite '
AXStaticText value='bolded'
AXStaticText value=' text.'
AXListMarker AXValue='•'
AXStaticText AXValue='First item properly groups itself despite '
AXStaticText AXValue='bolded'
AXStaticText AXValue=' text.'
AXGroup
AXListMarker value='•'
AXStaticText value='This should also be '
AXStaticText value='seen'
AXStaticText value=' as a group.'
AXListMarker AXValue='•'
AXStaticText AXValue='This should also be '
AXStaticText AXValue='seen'
AXStaticText AXValue=' as a group.'
AXGroup
AXListMarker value='•'
AXStaticText value='Some '
AXStaticText value='more'
AXStaticText value=' text.'
AXListMarker AXValue='•'
AXStaticText AXValue='Some '
AXStaticText AXValue='more'
AXStaticText AXValue=' text.'
<!--
@MAC-ALLOW:subrole*
@MAC-ALLOW:AXSubrole*
-->
<html>
<body>
......
AXWebArea
AXGroup
AXStaticText value='Before'
AXStaticText AXValue='Before'
AXGroup
AXStaticText value='Paragraph'
AXStaticText AXValue='Paragraph'
AXGroup
AXStaticText value='After'
AXStaticText AXValue='After'
AXWebArea roleDescription='HTML content'
AXGroup roleDescription='group'
AXPopUpButton roleDescription='pop up button' value='Placeholder option'
AXUnknown roleDescription='unknown'
AXMenuItem roleDescription='menu item' value='Placeholder option'
AXMenuItem roleDescription='menu item' value='Option 1'
AXMenuItem roleDescription='menu item' value='Option 2'
AXPopUpButton roleDescription='pop up button' value='Option 2'
AXUnknown roleDescription='unknown'
AXMenuItem roleDescription='menu item' value='Option 1'
AXMenuItem roleDescription='menu item' value='Option 2'
AXMenuItem roleDescription='menu item' value='Option 3'
AXPopUpButton roleDescription='pop up button' value='Option 1'
AXUnknown roleDescription='unknown'
AXMenuItem roleDescription='menu item' value='Option 1'
AXMenuItem roleDescription='menu item' value='Option 2'
AXMenuItem roleDescription='menu item' value='Option 3'
AXWebArea AXRoleDescription='HTML content'
AXGroup AXRoleDescription='group'
AXPopUpButton AXRoleDescription='pop up button' AXValue='Placeholder option'
AXUnknown AXRoleDescription='unknown'
AXMenuItem AXRoleDescription='menu item' AXValue='Placeholder option'
AXMenuItem AXRoleDescription='menu item' AXValue='Option 1'
AXMenuItem AXRoleDescription='menu item' AXValue='Option 2'
AXPopUpButton AXRoleDescription='pop up button' AXValue='Option 2'
AXUnknown AXRoleDescription='unknown'
AXMenuItem AXRoleDescription='menu item' AXValue='Option 1'
AXMenuItem AXRoleDescription='menu item' AXValue='Option 2'
AXMenuItem AXRoleDescription='menu item' AXValue='Option 3'
AXPopUpButton AXRoleDescription='pop up button' AXValue='Option 1'
AXUnknown AXRoleDescription='unknown'
AXMenuItem AXRoleDescription='menu item' AXValue='Option 1'
AXMenuItem AXRoleDescription='menu item' AXValue='Option 2'
AXMenuItem AXRoleDescription='menu item' AXValue='Option 3'
<!--
@MAC-ALLOW:roleDescription=*
@MAC-ALLOW:AXRoleDescription=*
-->
<html>
<body>
......
AXWebArea
AXGroup
AXStaticText value='This paragraph has one '
AXStaticText value='word'
AXStaticText value=' in a span.'
AXStaticText AXValue='This paragraph has one '
AXStaticText AXValue='word'
AXStaticText AXValue=' in a span.'
<!--
@MAC-DENY:title*
@MAC-DENY:AXTitle*
-->
<!doctype html>
<html>
......
AXWebArea roleDescription='HTML content'
AXSlider roleDescription='stepper' value='5'
AXWebArea AXRoleDescription='HTML content'
AXSlider AXRoleDescription='stepper' AXValue='5'
<!--
@MAC-ALLOW:roleDescription*
@MAC-ALLOW:AXRoleDescription*
-->
<html>
<body>
......
AXWebArea
AXGroup
AXGroup description='svg'
AXGroup title='Test'
AXStaticText value='Test'
AXGroup AXDescription='svg'
AXGroup AXTitle='Test'
AXStaticText AXValue='Test'
<!--
@MAC-ALLOW:description='svg'
@MAC-ALLOW:AXDescription='svg'
-->
<!doctype html>
<html>
......
AXWebArea
AXTabGroup
AXRadioButton title='Tab 1' value='0'
AXRadioButton title='Tab 2' value='0'
AXRadioButton AXTitle='Tab 1' AXValue='0'
AXRadioButton AXTitle='Tab 2' AXValue='0'
AXWebArea
AXButton title='Regular button'
AXButton title='Toggle button'
AXButton AXTitle='Regular button'
AXButton AXTitle='Toggle button'
AXWebArea roleDescription='HTML content'
AXToolbar roleDescription='toolbar'
AXStaticText roleDescription='text' value='A toolbar'
AXWebArea AXRoleDescription='HTML content'
AXToolbar AXRoleDescription='toolbar'
AXStaticText AXRoleDescription='text' AXValue='A toolbar'
<!--
@MAC-ALLOW:roleDescription=*
@MAC-ALLOW:AXRoleDescription=*
@WIN-DENY:name=''
-->
<html>
......
AXWebArea
AXList subrole=AXContentList
AXList AXSubrole=AXContentList
AXGroup
AXListMarker value='•'
AXStaticText value='Item 1'
AXListMarker AXValue='•'
AXStaticText AXValue='Item 1'
AXGroup
AXListMarker value='•'
AXStaticText value='Item 2'
AXListMarker AXValue='•'
AXStaticText AXValue='Item 2'
AXGroup
AXListMarker value='•'
AXStaticText value='Item 3'
AXListMarker AXValue='•'
AXStaticText AXValue='Item 3'
<!--
@MAC-ALLOW:subrole*
@MAC-ALLOW:AXSubrole*
-->
<html>
<body>
......
......@@ -2,6 +2,6 @@
# wrong, so we assume this is correct.
AXWebArea
AXGroup
AXStaticText value='Supercali'
AXStaticText value='fragilistic'
AXStaticText value='expialidocious'
AXStaticText AXValue='Supercali'
AXStaticText AXValue='fragilistic'
AXStaticText AXValue='expialidocious'
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment