Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(724)

Unified Diff: third_party/WebKit/Source/modules/accessibility/AXObject.cpp

Issue 2805493002: Boolean properties for Accessibility Object Model Phase 1 (Closed)
Patch Set: Address feedback Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/accessibility/AXObject.cpp
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObject.cpp b/third_party/WebKit/Source/modules/accessibility/AXObject.cpp
index c775e1841b31db753dbbede7365803ab245bc922..2d14648238598f7448c13c1302ed77ed95310e3f 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXObject.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXObject.cpp
@@ -385,11 +385,36 @@ bool AXObject::IsDetached() const {
const AtomicString& AXObject::GetAOMPropertyOrARIAAttribute(
AOMStringProperty property) const {
- Node* node = this->GetNode();
- if (!node || !node->IsElementNode())
- return g_null_atom;
+ if (Element* element = this->GetElement())
+ return AccessibleNode::GetProperty(element, property);
+ return g_null_atom;
+}
+
+bool AXObject::HasAOMPropertyOrARIAAttribute(AOMBooleanProperty property,
+ bool& result) const {
+ Element* element = this->GetElement();
+ if (!element)
+ return false;
+
+ bool is_null = true;
+ result = AccessibleNode::GetProperty(element, property, is_null);
+ return !is_null;
+}
+
+bool AXObject::AOMPropertyOrARIAAttributeIsTrue(
+ AOMBooleanProperty property) const {
+ bool result;
+ if (HasAOMPropertyOrARIAAttribute(property, result))
+ return result;
+ return false;
+}
- return AccessibleNode::GetProperty(ToElement(node), property);
+bool AXObject::AOMPropertyOrARIAAttributeIsFalse(
+ AOMBooleanProperty property) const {
+ bool result;
+ if (HasAOMPropertyOrARIAAttribute(property, result))
+ return !result;
+ return false;
}
bool AXObject::IsARIATextControl() const {
@@ -567,8 +592,8 @@ void AXObject::UpdateCachedAttributeValuesIfNeeded() const {
}
bool AXObject::AccessibilityIsIgnoredByDefault(
- IgnoredReasons* ignored_reasons) const {
- return DefaultObjectInclusion(ignored_reasons) == kIgnoreObject;
+ IgnoredReasons* ignoredReasons) const {
+ return DefaultObjectInclusion(ignoredReasons) == kIgnoreObject;
}
AXObjectInclusion AXObject::AccessibilityPlatformIncludesObject() const {
@@ -604,21 +629,21 @@ bool AXObject::IsInertOrAriaHidden() const {
}
bool AXObject::ComputeIsInertOrAriaHidden(
- IgnoredReasons* ignored_reasons) const {
+ IgnoredReasons* ignoredReasons) const {
if (GetNode()) {
if (GetNode()->IsInert()) {
- if (ignored_reasons) {
+ if (ignoredReasons) {
HTMLDialogElement* dialog = GetActiveDialogElement(GetNode());
if (dialog) {
AXObject* dialog_object = AxObjectCache().GetOrCreate(dialog);
if (dialog_object)
- ignored_reasons->push_back(
+ ignoredReasons->push_back(
IgnoredReason(kAXActiveModalDialog, dialog_object));
else
- ignored_reasons->push_back(IgnoredReason(kAXInert));
+ ignoredReasons->push_back(IgnoredReason(kAXInert));
} else {
// TODO(aboxhall): handle inert attribute if it eventuates
- ignored_reasons->push_back(IgnoredReason(kAXInert));
+ ignoredReasons->push_back(IgnoredReason(kAXInert));
}
}
return true;
@@ -626,19 +651,19 @@ bool AXObject::ComputeIsInertOrAriaHidden(
} else {
AXObject* parent = ParentObject();
if (parent && parent->IsInertOrAriaHidden()) {
- if (ignored_reasons)
- parent->ComputeIsInertOrAriaHidden(ignored_reasons);
+ if (ignoredReasons)
+ parent->ComputeIsInertOrAriaHidden(ignoredReasons);
return true;
}
}
const AXObject* hidden_root = AriaHiddenRoot();
if (hidden_root) {
- if (ignored_reasons) {
+ if (ignoredReasons) {
if (hidden_root == this)
- ignored_reasons->push_back(IgnoredReason(kAXAriaHidden));
+ ignoredReasons->push_back(IgnoredReason(kAXAriaHidden));
else
- ignored_reasons->push_back(
+ ignoredReasons->push_back(
IgnoredReason(kAXAriaHiddenRoot, hidden_root));
}
return true;
@@ -665,7 +690,7 @@ AXObject* AXObject::LeafNodeAncestor() const {
const AXObject* AXObject::AriaHiddenRoot() const {
for (const AXObject* object = this; object; object = object->ParentObject()) {
- if (EqualIgnoringASCIICase(object->GetAttribute(aria_hiddenAttr), "true"))
+ if (object->AOMPropertyOrARIAAttributeIsTrue(AOMBooleanProperty::kHidden))
return object;
}
@@ -678,16 +703,17 @@ bool AXObject::IsDescendantOfDisabledNode() const {
}
const AXObject* AXObject::DisabledAncestor() const {
- const AtomicString& disabled = GetAttribute(aria_disabledAttr);
- if (EqualIgnoringASCIICase(disabled, "true"))
- return this;
- if (EqualIgnoringASCIICase(disabled, "false"))
- return 0;
+ bool disabled = false;
+ if (HasAOMPropertyOrARIAAttribute(AOMBooleanProperty::kDisabled, disabled)) {
+ if (disabled)
+ return this;
+ return nullptr;
+ }
if (AXObject* parent = ParentObject())
return parent->DisabledAncestor();
- return 0;
+ return nullptr;
}
bool AXObject::LastKnownIsIgnoredValue() {
@@ -792,7 +818,7 @@ String AXObject::RecursiveTextAlternative(const AXObject& ax_obj,
}
bool AXObject::IsHiddenForTextAlternativeCalculation() const {
- if (EqualIgnoringASCIICase(GetAttribute(aria_hiddenAttr), "false"))
+ if (AOMPropertyOrARIAAttributeIsFalse(AOMBooleanProperty::kHidden))
return false;
if (GetLayoutObject())
@@ -938,10 +964,6 @@ String AXObject::TextFromElements(
void AXObject::TokenVectorFromAttribute(Vector<String>& tokens,
const QualifiedName& attribute) const {
- Node* node = this->GetNode();
- if (!node || !node->IsElementNode())
- return;
-
String attribute_value = GetAttribute(attribute).GetString();
if (attribute_value.IsEmpty())
return;
@@ -1038,7 +1060,7 @@ bool AXObject::IsMultiline() const {
if (!IsNativeTextControl() && !IsNonNativeTextControl())
return false;
- return EqualIgnoringASCIICase(GetAttribute(aria_multilineAttr), "true");
+ return AOMPropertyOrARIAAttributeIsTrue(AOMBooleanProperty::kMultiline);
}
bool AXObject::AriaPressedIsPresent() const {
@@ -1215,6 +1237,11 @@ void AXObject::ClearChildren() {
have_children_ = false;
}
+Element* AXObject::GetElement() const {
+ Node* node = GetNode();
+ return node && node->IsElementNode() ? ToElement(node) : nullptr;
+}
+
Document* AXObject::GetDocument() const {
FrameView* frame_view = DocumentFrameView();
if (!frame_view)
@@ -1254,28 +1281,16 @@ String AXObject::Language() const {
}
bool AXObject::HasAttribute(const QualifiedName& attribute) const {
- Node* element_node = GetNode();
- if (!element_node)
- return false;
-
- if (!element_node->IsElementNode())
- return false;
-
- Element* element = ToElement(element_node);
- return element->FastHasAttribute(attribute);
+ if (Element* element = GetElement())
+ return element->FastHasAttribute(attribute);
+ return false;
}
const AtomicString& AXObject::GetAttribute(
const QualifiedName& attribute) const {
- Node* element_node = GetNode();
- if (!element_node)
- return g_null_atom;
-
- if (!element_node->IsElementNode())
- return g_null_atom;
-
- Element* element = ToElement(element_node);
- return element->FastGetAttribute(attribute);
+ if (Element* element = GetElement())
+ return element->FastGetAttribute(attribute);
+ return g_null_atom;
}
//
@@ -1720,15 +1735,15 @@ int AXObject::LineForPosition(const VisiblePosition& position) const {
return line_count;
}
-bool AXObject::IsARIAControl(AccessibilityRole aria_role) {
- return IsARIAInput(aria_role) || aria_role == kButtonRole ||
- aria_role == kComboBoxRole || aria_role == kSliderRole;
+bool AXObject::IsARIAControl(AccessibilityRole ariaRole) {
+ return IsARIAInput(ariaRole) || ariaRole == kButtonRole ||
+ ariaRole == kComboBoxRole || ariaRole == kSliderRole;
}
-bool AXObject::IsARIAInput(AccessibilityRole aria_role) {
- return aria_role == kRadioButtonRole || aria_role == kCheckBoxRole ||
- aria_role == kTextFieldRole || aria_role == kSwitchRole ||
- aria_role == kSearchBoxRole;
+bool AXObject::IsARIAInput(AccessibilityRole ariaRole) {
+ return ariaRole == kRadioButtonRole || ariaRole == kCheckBoxRole ||
+ ariaRole == kTextFieldRole || ariaRole == kSwitchRole ||
+ ariaRole == kSearchBoxRole;
}
AccessibilityRole AXObject::AriaRoleToWebCoreRole(const String& value) {
@@ -1827,8 +1842,8 @@ bool AXObject::NameFromContents() const {
if (AncestorExposesActiveDescendant()) {
return true;
}
- const Node* node = this->GetNode();
- return node && node->IsElementNode() && ToElement(node)->IsFocusable();
+ const Element* element = this->GetElement();
+ return element && element->IsFocusable();
}
default:
return false;

Powered by Google App Engine
This is Rietveld 408576698