Commit a515f3fb authored by pkasting@chromium.org's avatar pkasting@chromium.org

Revert 149510 - Allow filters in accessibility tests to specify which attributes to check.

This may have caused the Win 7 WebKit canary bot to begin crashing; see
http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=accessibility%2Floading-iframe-updates-axtree.html
If rolling this out does not fix the bot, I will put it back in later tonight.

With this change, a DumpAccessibilityTree test can specify filters to
control which attributes are printed. This keeps each test expectation file
small and readable, while making it easy to test for all sorts of attributes,
including obscure ones.

Each platform will have a few attributes that print by default, like the
role and name. HTML files add rules of this form to override the defaults:

  @MAC-DENY:subrole*
  @MAC-DENY:value*
  @MAC-ALLOW:description*

You can also specify @MAC-ALLOW:* or @WIN-ALLOW:* if you want to dump everything - helpful
during development sometimes.

BUG=124314


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

TBR=dmazzoni@chromium.org
Review URL: https://chromiumcodereview.appspot.com/10837065

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@149550 0039d316-1c4b-4281-b951-d872f2087c98
parent 221c45d9
...@@ -747,14 +747,9 @@ BrowserAccessibilityWin ...@@ -747,14 +747,9 @@ BrowserAccessibilityWin
REFIID iid, REFIID iid,
void** object); void** object);
// Accessors. // Accessors to IA2 role and state.
int32 ia_role() const { return ia_role_; } int32 ia2_role() { return ia2_role_; }
int32 ia_state() const { return ia_state_; } int32 ia2_state() { return ia2_state_; }
int32 ia2_role() const { return ia2_role_; }
int32 ia2_state() const { return ia2_state_; }
const std::vector<string16>& ia2_attributes() const {
return ia2_attributes_;\
}
private: private:
// Add one to the reference count and return the same object. Always // Add one to the reference count and return the same object. Always
......
...@@ -4,21 +4,12 @@ ...@@ -4,21 +4,12 @@
#include "content/browser/accessibility/dump_accessibility_tree_helper.h" #include "content/browser/accessibility/dump_accessibility_tree_helper.h"
#include "base/logging.h"
#include "base/memory/scoped_ptr.h" #include "base/memory/scoped_ptr.h"
#include "base/string_util.h"
namespace { namespace {
const int kIndentSpaces = 4; const int kIndentSpaces = 4;
} }
DumpAccessibilityTreeHelper::DumpAccessibilityTreeHelper() {
Initialize();
}
DumpAccessibilityTreeHelper::~DumpAccessibilityTreeHelper() {
}
void DumpAccessibilityTreeHelper::DumpAccessibilityTree( void DumpAccessibilityTreeHelper::DumpAccessibilityTree(
BrowserAccessibility* node, string16* contents) { BrowserAccessibility* node, string16* contents) {
RecursiveDumpAccessibilityTree(node, contents, 0); RecursiveDumpAccessibilityTree(node, contents, 0);
...@@ -37,41 +28,3 @@ void DumpAccessibilityTreeHelper::RecursiveDumpAccessibilityTree( ...@@ -37,41 +28,3 @@ void DumpAccessibilityTreeHelper::RecursiveDumpAccessibilityTree(
indent + kIndentSpaces); indent + kIndentSpaces);
} }
} }
void DumpAccessibilityTreeHelper::SetFilters(
const std::set<string16>& allow_filters,
const std::set<string16>& deny_filters) {
allow_filters_ = allow_filters;
deny_filters_ = deny_filters;
}
bool DumpAccessibilityTreeHelper::MatchesFilters(
const string16& text, bool default_result) {
std::set<string16>::const_iterator iter = allow_filters_.begin();
for (iter = allow_filters_.begin(); iter != allow_filters_.end(); ++iter) {
if (MatchPattern(text, *iter))
return true;
}
for (iter = deny_filters_.begin(); iter != deny_filters_.end(); ++iter) {
if (MatchPattern(text, *iter))
return false;
}
return default_result;
}
void DumpAccessibilityTreeHelper::StartLine() {
line_.clear();
}
void DumpAccessibilityTreeHelper::Add(
bool include_by_default, const string16& attr) {
if (!MatchesFilters(attr, include_by_default))
return;
if (!line_.empty())
line_ += ASCIIToUTF16(" ");
line_ += attr;
}
string16 DumpAccessibilityTreeHelper::FinishLine() {
return line_;
}
...@@ -5,8 +5,6 @@ ...@@ -5,8 +5,6 @@
#ifndef CONTENT_BROWSER_ACCESSIBILITY_DUMP_ACCESSIBILITY_TREE_HELPER_H_ #ifndef CONTENT_BROWSER_ACCESSIBILITY_DUMP_ACCESSIBILITY_TREE_HELPER_H_
#define CONTENT_BROWSER_ACCESSIBILITY_DUMP_ACCESSIBILITY_TREE_HELPER_H_ #define CONTENT_BROWSER_ACCESSIBILITY_DUMP_ACCESSIBILITY_TREE_HELPER_H_
#include <set>
#include "base/file_path.h" #include "base/file_path.h"
#include "base/string16.h" #include "base/string16.h"
#include "base/utf_string_conversions.h" #include "base/utf_string_conversions.h"
...@@ -17,18 +15,10 @@ ...@@ -17,18 +15,10 @@
// implemented. // implemented.
class DumpAccessibilityTreeHelper { class DumpAccessibilityTreeHelper {
public: public:
DumpAccessibilityTreeHelper();
virtual ~DumpAccessibilityTreeHelper();
// Dumps a BrowserAccessibility tree into a string. // Dumps a BrowserAccessibility tree into a string.
void DumpAccessibilityTree(BrowserAccessibility* node, void DumpAccessibilityTree(BrowserAccessibility* node,
string16* contents); string16* contents);
// Set regular expression filters that apply to each component of every
// line before it's output.
void SetFilters(const std::set<string16>& allow_filters,
const std::set<string16>& deny_filters);
// Suffix of the expectation file corresponding to html file. // Suffix of the expectation file corresponding to html file.
// Example: // Example:
// HTML test: test-file.html // HTML test: test-file.html
...@@ -37,20 +27,6 @@ class DumpAccessibilityTreeHelper { ...@@ -37,20 +27,6 @@ class DumpAccessibilityTreeHelper {
const FilePath::StringType GetActualFileSuffix() const; const FilePath::StringType GetActualFileSuffix() const;
const FilePath::StringType GetExpectedFileSuffix() const; const FilePath::StringType GetExpectedFileSuffix() const;
// A platform-specific string that indicates a given line in a file
// is an allow or deny filter. Example:
// Mac values:
// GetAllowString() -> "@MAC-ALLOW:"
// GetDenyString() -> "@MAC-DENY:"
// Example html:
// <!--
// @MAC-ALLOW:roleDescription*
// @MAC-DENY:subrole*
// -->
// <p>Text</p>
const std::string GetAllowString() const;
const std::string GetDenyString() const;
protected: protected:
void RecursiveDumpAccessibilityTree(BrowserAccessibility* node, void RecursiveDumpAccessibilityTree(BrowserAccessibility* node,
string16* contents, string16* contents,
...@@ -62,17 +38,6 @@ class DumpAccessibilityTreeHelper { ...@@ -62,17 +38,6 @@ class DumpAccessibilityTreeHelper {
string16 ToString(BrowserAccessibility* node, char* prefix); string16 ToString(BrowserAccessibility* node, char* prefix);
void Initialize(); void Initialize();
bool MatchesFilters(const string16& text, bool default_result);
void StartLine();
void Add(bool include_by_default, const string16& attr);
string16 FinishLine();
std::set<string16> allow_filters_;
std::set<string16> deny_filters_;
string16 line_;
DISALLOW_COPY_AND_ASSIGN(DumpAccessibilityTreeHelper);
}; };
#endif // CONTENT_BROWSER_ACCESSIBILITY_DUMP_ACCESSIBILITY_TREE_HELPER_H_ #endif // CONTENT_BROWSER_ACCESSIBILITY_DUMP_ACCESSIBILITY_TREE_HELPER_H_
...@@ -11,35 +11,26 @@ ...@@ -11,35 +11,26 @@
#include "content/browser/accessibility/browser_accessibility_cocoa.h" #include "content/browser/accessibility/browser_accessibility_cocoa.h"
#include "content/browser/accessibility/browser_accessibility_mac.h" #include "content/browser/accessibility/browser_accessibility_mac.h"
namespace {
string16 Format(BrowserAccessibility* node,
const char *prefix,
SEL selector,
const char *suffix) {
BrowserAccessibilityCocoa* cocoa_node = node->ToBrowserAccessibilityCocoa();
NSString* format_str =
[NSString stringWithFormat:@"%s%%@%s", prefix, suffix];
NSString* tmp = [NSString stringWithFormat:format_str,
[cocoa_node performSelector:selector]];
return UTF8ToUTF16([tmp cStringUsingEncoding:NSUTF8StringEncoding]);
}
}
void DumpAccessibilityTreeHelper::Initialize() {} void DumpAccessibilityTreeHelper::Initialize() {}
string16 DumpAccessibilityTreeHelper::ToString(BrowserAccessibility* node, string16 DumpAccessibilityTreeHelper::ToString(BrowserAccessibility* node,
char* prefix) { char* prefix) {
StartLine(); BrowserAccessibilityCocoa* cocoa_node = node->ToBrowserAccessibilityCocoa();
Add(true, Format(node, "", @selector(role), "")); NSString* dump =
Add(true, Format(node, "subrole=", @selector(subrole), "")); [NSString stringWithFormat:@"%s%@ "
Add(false, Format(node, "roleDescription='", "subrole=%@ "
@selector(roleDescription), "roleDescription='%@' "
"'")); "title='%@' "
Add(true, Format(node, "title='", @selector(title), "'")); "value='%@'\n",
Add(true, Format(node, "value='", @selector(value), "'")); prefix,
Add(false, Format(node, "description='", @selector(description), "'")); [cocoa_node role],
Add(false, Format(node, "help='", @selector(help), "'")); [cocoa_node subrole],
return ASCIIToUTF16(prefix) + FinishLine() + ASCIIToUTF16("\n"); [cocoa_node roleDescription],
[cocoa_node title],
[cocoa_node value]];
std::string tempVal = [dump cStringUsingEncoding:NSUTF8StringEncoding];
return UTF8ToUTF16(tempVal);
} }
const FilePath::StringType DumpAccessibilityTreeHelper::GetActualFileSuffix() const FilePath::StringType DumpAccessibilityTreeHelper::GetActualFileSuffix()
...@@ -51,11 +42,3 @@ const FilePath::StringType DumpAccessibilityTreeHelper::GetExpectedFileSuffix() ...@@ -51,11 +42,3 @@ const FilePath::StringType DumpAccessibilityTreeHelper::GetExpectedFileSuffix()
const { const {
return FILE_PATH_LITERAL("-expected-mac.txt"); return FILE_PATH_LITERAL("-expected-mac.txt");
} }
const std::string DumpAccessibilityTreeHelper::GetAllowString() const {
return "@MAC-ALLOW:";
}
const std::string DumpAccessibilityTreeHelper::GetDenyString() const {
return "@MAC-DENY:";
}
...@@ -12,60 +12,38 @@ ...@@ -12,60 +12,38 @@
#include "base/string_util.h" #include "base/string_util.h"
#include "base/utf_string_conversions.h" #include "base/utf_string_conversions.h"
#include "content/browser/accessibility/browser_accessibility_win.h" #include "content/browser/accessibility/browser_accessibility_win.h"
#include "content/common/accessibility_node_data.h"
#include "content/public/test/accessibility_test_utils_win.h" #include "content/public/test/accessibility_test_utils_win.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
#include "third_party/iaccessible2/ia2_api_all.h" #include "third_party/iaccessible2/ia2_api_all.h"
#include "ui/base/win/atl_module.h"
void DumpAccessibilityTreeHelper::Initialize() {
ui::win::CreateATLModuleIfNeeded();
}
string16 DumpAccessibilityTreeHelper::ToString( string16 DumpAccessibilityTreeHelper::ToString(
BrowserAccessibility* node, char* prefix) { BrowserAccessibility* node, char* prefix) {
BrowserAccessibilityWin* acc_obj = node->ToBrowserAccessibilityWin(); BrowserAccessibilityWin* acc_obj = node->ToBrowserAccessibilityWin();
// Get the computed name. // Get state string.
VARIANT variant_self; VARIANT variant_self;
variant_self.vt = VT_I4; variant_self.vt = VT_I4;
variant_self.lVal = CHILDID_SELF; variant_self.lVal = CHILDID_SELF;
CComBSTR msaa_name_variant; VARIANT msaa_state_variant;
HRESULT hresult = acc_obj->get_accName(variant_self, &msaa_name_variant); HRESULT hresult = acc_obj->get_accState(variant_self, &msaa_state_variant);
string16 name; EXPECT_EQ(S_OK, hresult);
if (S_OK == hresult) EXPECT_EQ(VT_I4, msaa_state_variant.vt);
name = msaa_name_variant.m_str; string16 state_str = IAccessibleStateToString(msaa_state_variant.lVal);
string16 state2_str = IAccessible2StateToString(acc_obj->ia2_state());
// Get state strings. if (!state2_str.empty()) {
std::vector<string16> state_strings; if (!state_str.empty())
IAccessibleStateToStringVector(acc_obj->ia_state(), &state_strings); state_str += L",";
IAccessible2StateToStringVector(acc_obj->ia2_state(), &state_strings); state_str += state2_str;
}
// Get the description and attributes. // Get role string.
string16 description; string16 role_str = IAccessible2RoleToString(acc_obj->ia2_role());
acc_obj->GetStringAttribute(content::AccessibilityNodeData::ATTR_DESCRIPTION,
&description);
const std::vector<string16>& ia2_attributes = acc_obj->ia2_attributes();
// Build the line. return UTF8ToUTF16(prefix) +
StartLine(); role_str +
Add(true, IAccessible2RoleToString(acc_obj->ia2_role())); L" name='" + acc_obj->name() +
Add(true, L"name='" + name + L"'"); L"' state=" + state_str + L"\n";
for (std::vector<string16>::const_iterator it = state_strings.begin();
it != state_strings.end();
++it) {
Add(false, *it);
}
for (std::vector<string16>::const_iterator it = ia2_attributes.begin();
it != ia2_attributes.end();
++it) {
Add(false, *it);
}
Add(false, L"role_name='" + acc_obj->role_name() + L"'");
Add(false, L"value='" + acc_obj->value() + L"'");
Add(false, L"description='" + description + L"'");
return UTF8ToUTF16(prefix) + FinishLine() + ASCIIToUTF16("\n");
} }
const FilePath::StringType DumpAccessibilityTreeHelper::GetActualFileSuffix() const FilePath::StringType DumpAccessibilityTreeHelper::GetActualFileSuffix()
...@@ -77,12 +55,3 @@ const FilePath::StringType DumpAccessibilityTreeHelper::GetExpectedFileSuffix() ...@@ -77,12 +55,3 @@ const FilePath::StringType DumpAccessibilityTreeHelper::GetExpectedFileSuffix()
const { const {
return FILE_PATH_LITERAL("-expected-win.txt"); return FILE_PATH_LITERAL("-expected-win.txt");
} }
const std::string DumpAccessibilityTreeHelper::GetAllowString() const {
return "@WIN-ALLOW:";
}
const std::string DumpAccessibilityTreeHelper::GetDenyString() const {
return "@WIN-DENY:";
}
...@@ -73,7 +73,6 @@ std::string AccessibilityNodeData::DebugString(bool recursive) const { ...@@ -73,7 +73,6 @@ std::string AccessibilityNodeData::DebugString(bool recursive) const {
case ROLE_DOCUMENT: result += " DOCUMENT"; break; case ROLE_DOCUMENT: result += " DOCUMENT"; break;
case ROLE_DRAWER: result += " DRAWER"; break; case ROLE_DRAWER: result += " DRAWER"; break;
case ROLE_EDITABLE_TEXT: result += " EDITABLE_TEXT"; break; case ROLE_EDITABLE_TEXT: result += " EDITABLE_TEXT"; break;
case ROLE_FOOTER: result += " FOOTER"; break;
case ROLE_GRID: result += " GRID"; break; case ROLE_GRID: result += " GRID"; break;
case ROLE_GROUP: result += " GROUP"; break; case ROLE_GROUP: result += " GROUP"; break;
case ROLE_GROW_AREA: result += " GROW_AREA"; break; case ROLE_GROW_AREA: result += " GROW_AREA"; break;
......
...@@ -5,18 +5,12 @@ ...@@ -5,18 +5,12 @@
#ifndef CONTENT_PUBLIC_TEST_ACCESSIBILITY_TEST_UTILS_WIN_H_ #ifndef CONTENT_PUBLIC_TEST_ACCESSIBILITY_TEST_UTILS_WIN_H_
#define CONTENT_PUBLIC_TEST_ACCESSIBILITY_TEST_UTILS_WIN_H_ #define CONTENT_PUBLIC_TEST_ACCESSIBILITY_TEST_UTILS_WIN_H_
#include <vector>
#include "base/basictypes.h" #include "base/basictypes.h"
#include "base/string16.h" #include "base/string16.h"
string16 IAccessibleRoleToString(int32 ia_role); string16 IAccessibleRoleToString(int32 ia_role);
string16 IAccessible2RoleToString(int32 ia_role); string16 IAccessible2RoleToString(int32 ia_role);
string16 IAccessibleStateToString(int32 ia_state); string16 IAccessibleStateToString(int32 ia_state);
void IAccessibleStateToStringVector(int32 ia_state,
std::vector<string16>* result);
string16 IAccessible2StateToString(int32 ia2_state); string16 IAccessible2StateToString(int32 ia2_state);
void IAccessible2StateToStringVector(int32 ia_state,
std::vector<string16>* result);
#endif // CONTENT_PUBLIC_TEST_ACCESSIBILITY_TEST_UTILS_WIN_H_ #endif // CONTENT_PUBLIC_TEST_ACCESSIBILITY_TEST_UTILS_WIN_H_
...@@ -230,36 +230,38 @@ string16 IAccessible2RoleToString(int32 ia_role) { ...@@ -230,36 +230,38 @@ string16 IAccessible2RoleToString(int32 ia_role) {
return AccessibilityRoleStateMap::GetInstance()->ia2_role_string_map[ia_role]; return AccessibilityRoleStateMap::GetInstance()->ia2_role_string_map[ia_role];
} }
void IAccessibleStateToStringVector(int32 ia_state, string16 IAccessibleStateToString(int32 ia_state) {
std::vector<string16>* result) { string16 state_str;
const std::map<int32, string16>& state_string_map = const std::map<int32, string16>& state_string_map =
AccessibilityRoleStateMap::GetInstance()->ia_state_string_map; AccessibilityRoleStateMap::GetInstance()->ia_state_string_map;
std::map<int32, string16>::const_iterator it; std::map<int32, string16>::const_iterator it;
for (it = state_string_map.begin(); it != state_string_map.end(); ++it) {
if (it->first & ia_state)
result->push_back(it->second);
}
}
string16 IAccessibleStateToString(int32 ia_state) { for (it = state_string_map.begin();
std::vector<string16> strings; it != state_string_map.end();
IAccessibleStateToStringVector(ia_state, &strings); ++it) {
return JoinString(strings, ','); if (it->first & ia_state) {
if (!state_str.empty())
state_str += L",";
state_str += it->second;
}
}
return state_str;
} }
void IAccessible2StateToStringVector(int32 ia2_state, string16 IAccessible2StateToString(int32 ia2_state) {
std::vector<string16>* result) { string16 state_str;
const std::map<int32, string16>& state_string_map = const std::map<int32, string16>& state_string_map =
AccessibilityRoleStateMap::GetInstance()->ia2_state_string_map; AccessibilityRoleStateMap::GetInstance()->ia2_state_string_map;
std::map<int32, string16>::const_iterator it; std::map<int32, string16>::const_iterator it;
for (it = state_string_map.begin(); it != state_string_map.end(); ++it) {
if (it->first & ia2_state)
result->push_back(it->second);
}
}
string16 IAccessible2StateToString(int32 ia2_state) { for (it = state_string_map.begin();
std::vector<string16> strings; it != state_string_map.end();
IAccessible2StateToStringVector(ia2_state, &strings); ++it) {
return JoinString(strings, ','); if (it->first & ia2_state) {
if (!state_str.empty())
state_str += L",";
state_str += it->second;
}
}
return state_str;
} }
ROLE_SYSTEM_DOCUMENT name='' READONLY FOCUSABLE ROLE_SYSTEM_DOCUMENT name='' state=FOCUSED,READONLY,FOCUSABLE
IA2_ROLE_SECTION name='' READONLY IA2_ROLE_SECTION name='' state=READONLY
ROLE_SYSTEM_LINK name='normal link' FOCUSABLE LINKED ROLE_SYSTEM_LINK name='normal link' state=FOCUSABLE,LINKED
ROLE_SYSTEM_TEXT name='normal link' READONLY LINKED ROLE_SYSTEM_TEXT name='normal link' state=READONLY,LINKED
<!--
@WIN-ALLOW:LINKED
-->
<html> <html>
<body> <body>
<a href="http://www.google.com">normal link</a> <a href="http://www.google.com">normal link</a>
......
AXWebArea subrole=(null) title='' value='' AXWebArea subrole=(null) roleDescription='HTML content' title='' value=''
AXGroup subrole=AXLandmarkApplication roleDescription='application' title='' value='' AXGroup subrole=AXLandmarkApplication roleDescription='application' title='' value=''
ROLE_SYSTEM_DOCUMENT name='' READONLY FOCUSABLE ROLE_SYSTEM_DOCUMENT name='' state=FOCUSED,READONLY,FOCUSABLE
IA2_ROLE_SECTION name='' READONLY IA2_ROLE_SECTION name='' state=READONLY
<!--
@MAC-ALLOW:roleDescription='application'
-->
<html> <html>
<body role="application" id="testAriaApplication"> <body role="application" id="testAriaApplication">
</body> </body>
......
ROLE_SYSTEM_DOCUMENT name='' READONLY FOCUSABLE ROLE_SYSTEM_DOCUMENT name='' state=FOCUSED,READONLY,FOCUSABLE
IA2_ROLE_PARAGRAPH name='' IA2_STATE_EDITABLE IA2_ROLE_PARAGRAPH name='' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_TEXT name='Contentditable with ' IA2_STATE_EDITABLE ROLE_SYSTEM_TEXT name='Contentditable with ' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_LINK name='link' LINKED IA2_STATE_EDITABLE ROLE_SYSTEM_LINK name='link' state=LINKED,IA2_STATE_EDITABLE
ROLE_SYSTEM_TEXT name='link' LINKED IA2_STATE_EDITABLE ROLE_SYSTEM_TEXT name='link' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_TEXT name=' and ' IA2_STATE_EDITABLE ROLE_SYSTEM_TEXT name=' and ' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_GRAPHIC name='image' IA2_STATE_EDITABLE ROLE_SYSTEM_GRAPHIC name='image' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_TEXT name=' and ' IA2_STATE_EDITABLE ROLE_SYSTEM_TEXT name=' and ' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_PUSHBUTTON name='button' FOCUSABLE IA2_STATE_EDITABLE ROLE_SYSTEM_PUSHBUTTON name='button' state=FOCUSABLE,IA2_STATE_EDITABLE
ROLE_SYSTEM_TABLE name='' IA2_STATE_EDITABLE ROLE_SYSTEM_TABLE name='' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_ROW name='' IA2_STATE_EDITABLE ROLE_SYSTEM_ROW name='' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_CELL name='' IA2_STATE_EDITABLE ROLE_SYSTEM_CELL name='' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_TEXT name='Always expose editable tables as tables' IA2_STATE_EDITABLE ROLE_SYSTEM_TEXT name='Always expose editable tables as tables' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_COLUMN name='' UNAVAILABLE IA2_STATE_EDITABLE ROLE_SYSTEM_COLUMN name='' state=UNAVAILABLE,IA2_STATE_EDITABLE
IA2_ROLE_SECTION name='' UNAVAILABLE IA2_STATE_EDITABLE IA2_ROLE_SECTION name='' state=UNAVAILABLE,IA2_STATE_EDITABLE
ROLE_SYSTEM_LIST name='' IA2_STATE_EDITABLE ROLE_SYSTEM_LIST name='' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_LISTITEM name='' IA2_STATE_EDITABLE ROLE_SYSTEM_LISTITEM name='' state=IA2_STATE_EDITABLE
ROLE_SYSTEM_TEXT name='1' READONLY ROLE_SYSTEM_TEXT name='1' state=READONLY
ROLE_SYSTEM_TEXT name='Editable list item' IA2_STATE_EDITABLE ROLE_SYSTEM_TEXT name='Editable list item' state=IA2_STATE_EDITABLE
IA2_ROLE_PARAGRAPH name='' FOCUSABLE IA2_STATE_EDITABLE IA2_ROLE_PARAGRAPH name='' state=FOCUSABLE,IA2_STATE_EDITABLE
ROLE_SYSTEM_TEXT name='Keep the role, just change the state' IA2_STATE_EDITABLE ROLE_SYSTEM_TEXT name='Keep the role, just change the state' state=IA2_STATE_EDITABLE
<!--
@WIN-ALLOW:IA2_STATE_EDITABLE
@WIN-ALLOW:LINKED
@WIN-ALLOW:UNAVAILABLE
-->
<div contenteditable> <div contenteditable>
<p>Contentditable with <a href="#">link</a> and <img src="./bullet.png" alt="image"> and <input type="button" value="button"/></p> <p>Contentditable with <a href="#">link</a> and <img src="./bullet.png" alt="image"> and <input type="button" value="button"/></p>
<table><td>Always expose editable tables as tables</td></table> <table><td>Always expose editable tables as tables</td></table>
......
AXWebArea subrole=(null) title='' value='' AXWebArea subrole=(null) roleDescription='HTML content' title='' value=''
AXGroup subrole=AXLandmarkContentInfo roleDescription='footer' title='' value='' AXGroup subrole=AXLandmarkContentInfo roleDescription='footer' title='' value=''
AXStaticText subrole=(null) title='' value='Footer element' AXStaticText subrole=(null) roleDescription='text' title='' value='Footer element'
ROLE_SYSTEM_DOCUMENT name='' READONLY FOCUSABLE ROLE_SYSTEM_DOCUMENT name='' state=FOCUSED,READONLY,FOCUSABLE
IA2_ROLE_FOOTER name='' READONLY IA2_ROLE_FOOTER name='' state=READONLY
ROLE_SYSTEM_TEXT name='Footer element' READONLY ROLE_SYSTEM_TEXT name='Footer element' state=READONLY
<!--
@MAC-ALLOW:roleDescription='footer'
-->
<html> <html>
<body> <body>
<footer>Footer element</footer> <footer>Footer element</footer>
......
AXWebArea subrole=(null) title='' value='' AXWebArea subrole=(null) roleDescription='HTML content' title='' value=''
AXList subrole=AXContentList title='' value='' AXList subrole=AXContentList roleDescription='list' title='' value=''
AXGroup subrole=(null) title='' value='' AXGroup subrole=(null) roleDescription='group' title='' value=''
AXListMarker subrole=(null) title='' value='•' AXListMarker subrole=(null) roleDescription='AXListMarker' title='' value='•'
AXStaticText subrole=(null) title='' value='First item properly groups itself despite ' AXStaticText subrole=(null) roleDescription='text' title='' value='First item properly groups itself despite '
AXStaticText subrole=(null) title='' value='bolded' AXStaticText subrole=(null) roleDescription='text' title='' value='bolded'
AXStaticText subrole=(null) title='' value=' text.' AXStaticText subrole=(null) roleDescription='text' title='' value=' text.'
AXGroup subrole=(null) title='' value='' AXGroup subrole=(null) roleDescription='group' title='' value=''
AXListMarker subrole=(null) title='' value='•' AXListMarker subrole=(null) roleDescription='AXListMarker' title='' value='•'
AXStaticText subrole=(null) title='' value='This should also be ' AXStaticText subrole=(null) roleDescription='text' title='' value='This should also be '
AXStaticText subrole=(null) title='' value='seen' AXStaticText subrole=(null) roleDescription='text' title='' value='seen'
AXStaticText subrole=(null) title='' value=' as a group.' AXStaticText subrole=(null) roleDescription='text' title='' value=' as a group.'
AXGroup subrole=(null) title='' value='' AXGroup subrole=(null) roleDescription='group' title='' value=''
AXListMarker subrole=(null) title='' value='•' AXListMarker subrole=(null) roleDescription='AXListMarker' title='' value='•'
AXStaticText subrole=(null) title='' value='Some ' AXStaticText subrole=(null) roleDescription='text' title='' value='Some '
AXStaticText subrole=(null) title='' value='more' AXStaticText subrole=(null) roleDescription='text' title='' value='more'
AXStaticText subrole=(null) title='' value=' text.' AXStaticText subrole=(null) roleDescription='text' title='' value=' text.'
AXWebArea subrole=(null) title='' value='' AXWebArea subrole=(null) roleDescription='HTML content' title='' value=''
AXList subrole=AXContentList title='' value='' AXList subrole=AXContentList roleDescription='list' title='' value=''
AXGroup subrole=(null) title='' value='' AXGroup subrole=(null) roleDescription='group' title='' value=''
AXListMarker subrole=(null) title='' value='•' AXListMarker subrole=(null) roleDescription='AXListMarker' title='' value='•'
AXStaticText subrole=(null) title='' value='Item 1' AXStaticText subrole=(null) roleDescription='text' title='' value='Item 1'
AXGroup subrole=(null) title='' value='' AXGroup subrole=(null) roleDescription='group' title='' value=''
AXListMarker subrole=(null) title='' value='•' AXListMarker subrole=(null) roleDescription='AXListMarker' title='' value='•'
AXStaticText subrole=(null) title='' value='Item 2' AXStaticText subrole=(null) roleDescription='text' title='' value='Item 2'
AXGroup subrole=(null) title='' value='' AXGroup subrole=(null) roleDescription='group' title='' value=''
AXListMarker subrole=(null) title='' value='•' AXListMarker subrole=(null) roleDescription='AXListMarker' title='' value='•'
AXStaticText subrole=(null) title='' value='Item 3' AXStaticText subrole=(null) roleDescription='text' title='' value='Item 3'
ROLE_SYSTEM_DOCUMENT name='' READONLY FOCUSABLE ROLE_SYSTEM_DOCUMENT name='' state=FOCUSED,READONLY,FOCUSABLE
ROLE_SYSTEM_LIST name='' READONLY ROLE_SYSTEM_LIST name='' state=READONLY
ROLE_SYSTEM_LISTITEM name='' READONLY ROLE_SYSTEM_LISTITEM name='' state=READONLY
ROLE_SYSTEM_TEXT name='•' READONLY ROLE_SYSTEM_TEXT name='•' state=READONLY
ROLE_SYSTEM_TEXT name='Item 1' READONLY ROLE_SYSTEM_TEXT name='Item 1' state=READONLY
ROLE_SYSTEM_LISTITEM name='' READONLY ROLE_SYSTEM_LISTITEM name='' state=READONLY
ROLE_SYSTEM_TEXT name='•' READONLY ROLE_SYSTEM_TEXT name='•' state=READONLY
ROLE_SYSTEM_TEXT name='Item 2' READONLY ROLE_SYSTEM_TEXT name='Item 2' state=READONLY
ROLE_SYSTEM_LISTITEM name='' READONLY ROLE_SYSTEM_LISTITEM name='' state=READONLY
ROLE_SYSTEM_TEXT name='•' READONLY ROLE_SYSTEM_TEXT name='•' state=READONLY
ROLE_SYSTEM_TEXT name='Item 3' READONLY ROLE_SYSTEM_TEXT name='Item 3' state=READONLY
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