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

Unified Diff: third_party/WebKit/Source/core/dom/AccessibleNode.cpp

Issue 2805493002: Boolean properties for Accessibility Object Model Phase 1 (Closed)
Patch Set: 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/core/dom/AccessibleNode.cpp
diff --git a/third_party/WebKit/Source/core/dom/AccessibleNode.cpp b/third_party/WebKit/Source/core/dom/AccessibleNode.cpp
index ed11e656f4e392f99efb7b3ac623ea4b8bb26d51..577ea77b80be864e915a3ce5328d715d38d90521 100644
--- a/third_party/WebKit/Source/core/dom/AccessibleNode.cpp
+++ b/third_party/WebKit/Source/core/dom/AccessibleNode.cpp
@@ -35,39 +35,110 @@ const AtomicString& AccessibleNode::getProperty(Element* element,
// Fall back on the equivalent ARIA attribute.
switch (property) {
case AOMStringProperty::kAutocomplete:
- return element->getAttribute(aria_autocompleteAttr);
+ return element->fastGetAttribute(aria_autocompleteAttr);
case AOMStringProperty::kChecked:
- return element->getAttribute(aria_checkedAttr);
+ return element->fastGetAttribute(aria_checkedAttr);
case AOMStringProperty::kCurrent:
- return element->getAttribute(aria_currentAttr);
+ return element->fastGetAttribute(aria_currentAttr);
case AOMStringProperty::kInvalid:
- return element->getAttribute(aria_invalidAttr);
+ return element->fastGetAttribute(aria_invalidAttr);
case AOMStringProperty::kKeyShortcuts:
- return element->getAttribute(aria_keyshortcutsAttr);
+ return element->fastGetAttribute(aria_keyshortcutsAttr);
case AOMStringProperty::kLabel:
- return element->getAttribute(aria_labelAttr);
+ return element->fastGetAttribute(aria_labelAttr);
case AOMStringProperty::kLive:
- return element->getAttribute(aria_liveAttr);
+ return element->fastGetAttribute(aria_liveAttr);
case AOMStringProperty::kOrientation:
- return element->getAttribute(aria_orientationAttr);
+ return element->fastGetAttribute(aria_orientationAttr);
case AOMStringProperty::kPlaceholder:
- return element->getAttribute(aria_placeholderAttr);
+ return element->fastGetAttribute(aria_placeholderAttr);
case AOMStringProperty::kRelevant:
- return element->getAttribute(aria_relevantAttr);
+ return element->fastGetAttribute(aria_relevantAttr);
case AOMStringProperty::kRole:
- return element->getAttribute(roleAttr);
+ return element->fastGetAttribute(roleAttr);
case AOMStringProperty::kRoleDescription:
- return element->getAttribute(aria_roledescriptionAttr);
+ return element->fastGetAttribute(aria_roledescriptionAttr);
case AOMStringProperty::kSort:
- return element->getAttribute(aria_sortAttr);
+ return element->fastGetAttribute(aria_sortAttr);
case AOMStringProperty::kValueText:
- return element->getAttribute(aria_valuetextAttr);
+ return element->fastGetAttribute(aria_valuetextAttr);
}
NOTREACHED();
return nullAtom;
}
+// static
+bool AccessibleNode::getProperty(Element* element,
+ AOMBooleanProperty property,
+ bool& isNull) {
+ isNull = true;
+ if (!element)
+ return false;
+
+ if (AccessibleNode* accessibleNode = element->existingAccessibleNode()) {
+ for (const auto& item : accessibleNode->m_booleanProperties) {
+ if (item.first == property) {
+ isNull = false;
+ return item.second;
+ }
+ }
+ }
+
+ // Fall back on the equivalent ARIA attribute.
+ AtomicString attrValue;
+ switch (property) {
+ case AOMBooleanProperty::kAtomic:
+ attrValue = element->fastGetAttribute(aria_atomicAttr);
+ break;
+ case AOMBooleanProperty::kBusy:
+ attrValue = element->fastGetAttribute(aria_busyAttr);
+ break;
+ case AOMBooleanProperty::kDisabled:
+ attrValue = element->fastGetAttribute(aria_disabledAttr);
+ break;
+ case AOMBooleanProperty::kExpanded:
+ attrValue = element->fastGetAttribute(aria_expandedAttr);
+ break;
+ case AOMBooleanProperty::kHidden:
+ attrValue = element->fastGetAttribute(aria_hiddenAttr);
+ break;
+ case AOMBooleanProperty::kModal:
+ attrValue = element->fastGetAttribute(aria_modalAttr);
+ break;
+ case AOMBooleanProperty::kMultiline:
+ attrValue = element->fastGetAttribute(aria_multilineAttr);
+ break;
+ case AOMBooleanProperty::kMultiselectable:
+ attrValue = element->fastGetAttribute(aria_multiselectableAttr);
+ break;
+ case AOMBooleanProperty::kReadOnly:
+ attrValue = element->fastGetAttribute(aria_readonlyAttr);
+ break;
+ case AOMBooleanProperty::kRequired:
+ attrValue = element->fastGetAttribute(aria_requiredAttr);
+ break;
+ case AOMBooleanProperty::kSelected:
+ attrValue = element->fastGetAttribute(aria_selectedAttr);
+ break;
+ }
+
+ if (attrValue.isNull())
esprehn 2017/04/07 00:11:24 equalIgnoringASCIICase handles nulls, so you can d
dmazzoni 2017/04/21 07:11:37 Done.
+ return false;
+
+ isNull = false;
+ return equalIgnoringASCIICase(attrValue, "true");
+}
+
+bool AccessibleNode::atomic(bool& isNull) const {
+ return getProperty(m_element, AOMBooleanProperty::kAtomic, isNull);
+}
+
+void AccessibleNode::setAtomic(bool atomic) {
+ setBooleanProperty(AOMBooleanProperty::kAtomic, atomic);
+ notifyAttributeChanged(aria_atomicAttr);
+}
+
AtomicString AccessibleNode::autocomplete() const {
return getProperty(m_element, AOMStringProperty::kAutocomplete);
}
@@ -77,6 +148,15 @@ void AccessibleNode::setAutocomplete(const AtomicString& autocomplete) {
notifyAttributeChanged(aria_autocompleteAttr);
}
+bool AccessibleNode::busy(bool& isNull) const {
+ return getProperty(m_element, AOMBooleanProperty::kBusy, isNull);
+}
+
+void AccessibleNode::setBusy(bool busy) {
+ setBooleanProperty(AOMBooleanProperty::kBusy, busy);
+ notifyAttributeChanged(aria_busyAttr);
+}
+
AtomicString AccessibleNode::checked() const {
return getProperty(m_element, AOMStringProperty::kChecked);
}
@@ -97,6 +177,33 @@ void AccessibleNode::setCurrent(const AtomicString& current) {
cache->handleAttributeChanged(aria_currentAttr, m_element);
}
+bool AccessibleNode::disabled(bool& isNull) const {
+ return getProperty(m_element, AOMBooleanProperty::kDisabled, isNull);
+}
+
+void AccessibleNode::setDisabled(bool disabled) {
+ setBooleanProperty(AOMBooleanProperty::kDisabled, disabled);
+ notifyAttributeChanged(aria_disabledAttr);
+}
+
+bool AccessibleNode::expanded(bool& isNull) const {
+ return getProperty(m_element, AOMBooleanProperty::kExpanded, isNull);
+}
+
+void AccessibleNode::setExpanded(bool expanded) {
+ setBooleanProperty(AOMBooleanProperty::kExpanded, expanded);
+ notifyAttributeChanged(aria_expandedAttr);
+}
+
+bool AccessibleNode::hidden(bool& isNull) const {
+ return getProperty(m_element, AOMBooleanProperty::kHidden, isNull);
+}
+
+void AccessibleNode::setHidden(bool hidden) {
+ setBooleanProperty(AOMBooleanProperty::kHidden, hidden);
+ notifyAttributeChanged(aria_hiddenAttr);
+}
+
AtomicString AccessibleNode::invalid() const {
return getProperty(m_element, AOMStringProperty::kInvalid);
}
@@ -133,6 +240,33 @@ void AccessibleNode::setLive(const AtomicString& live) {
notifyAttributeChanged(aria_liveAttr);
}
+bool AccessibleNode::modal(bool& isNull) const {
+ return getProperty(m_element, AOMBooleanProperty::kModal, isNull);
+}
+
+void AccessibleNode::setModal(bool modal) {
+ setBooleanProperty(AOMBooleanProperty::kModal, modal);
+ notifyAttributeChanged(aria_modalAttr);
+}
+
+bool AccessibleNode::multiline(bool& isNull) const {
+ return getProperty(m_element, AOMBooleanProperty::kMultiline, isNull);
+}
+
+void AccessibleNode::setMultiline(bool multiline) {
+ setBooleanProperty(AOMBooleanProperty::kMultiline, multiline);
+ notifyAttributeChanged(aria_multilineAttr);
+}
+
+bool AccessibleNode::multiselectable(bool& isNull) const {
+ return getProperty(m_element, AOMBooleanProperty::kMultiselectable, isNull);
+}
+
+void AccessibleNode::setMultiselectable(bool multiselectable) {
+ setBooleanProperty(AOMBooleanProperty::kMultiselectable, multiselectable);
+ notifyAttributeChanged(aria_multiselectableAttr);
+}
+
AtomicString AccessibleNode::orientation() const {
return getProperty(m_element, AOMStringProperty::kOrientation);
}
@@ -151,6 +285,15 @@ void AccessibleNode::setPlaceholder(const AtomicString& placeholder) {
notifyAttributeChanged(aria_placeholderAttr);
}
+bool AccessibleNode::readOnly(bool& isNull) const {
+ return getProperty(m_element, AOMBooleanProperty::kReadOnly, isNull);
+}
+
+void AccessibleNode::setReadOnly(bool readOnly) {
+ setBooleanProperty(AOMBooleanProperty::kReadOnly, readOnly);
+ notifyAttributeChanged(aria_readonlyAttr);
+}
+
AtomicString AccessibleNode::relevant() const {
return getProperty(m_element, AOMStringProperty::kRelevant);
}
@@ -160,6 +303,15 @@ void AccessibleNode::setRelevant(const AtomicString& relevant) {
notifyAttributeChanged(aria_relevantAttr);
}
+bool AccessibleNode::required(bool& isNull) const {
+ return getProperty(m_element, AOMBooleanProperty::kRequired, isNull);
+}
+
+void AccessibleNode::setRequired(bool required) {
+ setBooleanProperty(AOMBooleanProperty::kRequired, required);
+ notifyAttributeChanged(aria_requiredAttr);
+}
+
AtomicString AccessibleNode::role() const {
return getProperty(m_element, AOMStringProperty::kRole);
}
@@ -178,6 +330,15 @@ void AccessibleNode::setRoleDescription(const AtomicString& roleDescription) {
notifyAttributeChanged(aria_roledescriptionAttr);
}
+bool AccessibleNode::selected(bool& isNull) const {
+ return getProperty(m_element, AOMBooleanProperty::kSelected, isNull);
+}
+
+void AccessibleNode::setSelected(bool selected) {
+ setBooleanProperty(AOMBooleanProperty::kSelected, selected);
+ notifyAttributeChanged(aria_selectedAttr);
+}
+
AtomicString AccessibleNode::sort() const {
return getProperty(m_element, AOMStringProperty::kSort);
}
@@ -208,6 +369,18 @@ void AccessibleNode::setStringProperty(AOMStringProperty property,
m_stringProperties.push_back(std::make_pair(property, value));
}
+void AccessibleNode::setBooleanProperty(AOMBooleanProperty property,
+ bool value) {
+ for (auto& item : m_booleanProperties) {
+ if (item.first == property) {
+ item.second = value;
+ return;
+ }
+ }
+
+ m_booleanProperties.push_back(std::make_pair(property, value));
+}
+
void AccessibleNode::notifyAttributeChanged(
const blink::QualifiedName& attribute) {
// TODO(dmazzoni): Make a cleaner API for this rather than pretending

Powered by Google App Engine
This is Rietveld 408576698