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

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

Issue 2894103002: Int and Float properties for Accessibility Object Model phase 1 (Closed)
Patch Set: Update webexposed/ Created 3 years, 7 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 4f6eaa48eb7cf63d3f84da146e5e4d88c65080e5..81dd859004d268c777122972cce2f3427c3b0170 100644
--- a/third_party/WebKit/Source/core/dom/AccessibleNode.cpp
+++ b/third_party/WebKit/Source/core/dom/AccessibleNode.cpp
@@ -35,24 +35,79 @@ const AtomicString& AccessibleNode::GetProperty(Element* element,
return g_null_atom;
}
+template <typename P, typename T>
+static T FindPropertyValue(P property,
+ bool& is_null,
+ Vector<std::pair<P, T>>& properties,
+ T default_value) {
+ for (const auto& item : properties) {
+ if (item.first == property) {
+ is_null = false;
+ return item.second;
+ }
+ }
+
+ return default_value;
+}
+
// static
bool AccessibleNode::GetProperty(Element* element,
AOMBooleanProperty property,
bool& is_null) {
is_null = true;
- if (!element)
- return false;
- if (AccessibleNode* accessible_node = element->ExistingAccessibleNode()) {
- for (const auto& item : accessible_node->boolean_properties_) {
- if (item.first == property) {
- is_null = false;
- return item.second;
- }
- }
- }
+ bool default_value = false;
+ if (!element || !element->ExistingAccessibleNode())
+ return default_value;
+
+ return FindPropertyValue(
+ property, is_null, element->ExistingAccessibleNode()->boolean_properties_,
+ default_value);
+}
+
+// static
+float AccessibleNode::GetProperty(Element* element,
+ AOMFloatProperty property,
+ bool& is_null) {
+ is_null = true;
+
+ float default_value = 0.0;
+ if (!element || !element->ExistingAccessibleNode())
+ return default_value;
+
+ return FindPropertyValue(property, is_null,
+ element->ExistingAccessibleNode()->float_properties_,
+ default_value);
+}
+
+// static
+int32_t AccessibleNode::GetProperty(Element* element,
+ AOMIntProperty property,
+ bool& is_null) {
+ is_null = true;
+
+ int32_t default_value = 0;
+ if (!element || !element->ExistingAccessibleNode())
+ return default_value;
- return false;
+ return FindPropertyValue(property, is_null,
+ element->ExistingAccessibleNode()->int_properties_,
+ default_value);
+}
+
+// static
+uint32_t AccessibleNode::GetProperty(Element* element,
+ AOMUIntProperty property,
+ bool& is_null) {
+ is_null = true;
+
+ uint32_t default_value = 0;
+ if (!element || !element->ExistingAccessibleNode())
+ return default_value;
+
+ return FindPropertyValue(property, is_null,
+ element->ExistingAccessibleNode()->uint_properties_,
+ default_value);
}
// static
@@ -156,6 +211,105 @@ bool AccessibleNode::GetPropertyOrARIAAttribute(Element* element,
return EqualIgnoringASCIICase(attr_value, "true");
}
+// static
+float AccessibleNode::GetPropertyOrARIAAttribute(Element* element,
+ AOMFloatProperty property,
+ bool& is_null) {
+ is_null = true;
+ if (!element)
+ return 0.0;
+
+ float result = GetProperty(element, property, is_null);
+ if (!is_null)
+ return result;
+
+ // Fall back on the equivalent ARIA attribute.
+ AtomicString attr_value;
+ switch (property) {
+ case AOMFloatProperty::kValueMax:
+ attr_value = element->FastGetAttribute(aria_valuemaxAttr);
+ break;
+ case AOMFloatProperty::kValueMin:
+ attr_value = element->FastGetAttribute(aria_valueminAttr);
+ break;
+ case AOMFloatProperty::kValueNow:
+ attr_value = element->FastGetAttribute(aria_valuenowAttr);
+ break;
+ }
+
+ is_null = attr_value.IsNull();
+ return attr_value.ToFloat();
+}
+
+// static
+uint32_t AccessibleNode::GetPropertyOrARIAAttribute(Element* element,
+ AOMUIntProperty property,
+ bool& is_null) {
+ is_null = true;
+ if (!element)
+ return 0;
+
+ int32_t result = GetProperty(element, property, is_null);
+ if (!is_null)
+ return result;
+
+ // Fall back on the equivalent ARIA attribute.
+ AtomicString attr_value;
+ switch (property) {
+ case AOMUIntProperty::kColIndex:
+ attr_value = element->FastGetAttribute(aria_colindexAttr);
+ break;
+ case AOMUIntProperty::kColSpan:
+ attr_value = element->FastGetAttribute(aria_colspanAttr);
+ break;
+ case AOMUIntProperty::kLevel:
+ attr_value = element->FastGetAttribute(aria_levelAttr);
+ break;
+ case AOMUIntProperty::kPosInSet:
+ attr_value = element->FastGetAttribute(aria_posinsetAttr);
+ break;
+ case AOMUIntProperty::kRowIndex:
+ attr_value = element->FastGetAttribute(aria_rowindexAttr);
+ break;
+ case AOMUIntProperty::kRowSpan:
+ attr_value = element->FastGetAttribute(aria_rowspanAttr);
+ break;
+ }
+
+ is_null = attr_value.IsNull();
+ return attr_value.GetString().ToUInt();
tkent 2017/07/28 02:31:14 Is String::ToUInt() correct for aria attribute par
+}
+
+// static
+int32_t AccessibleNode::GetPropertyOrARIAAttribute(Element* element,
+ AOMIntProperty property,
+ bool& is_null) {
+ is_null = true;
+ if (!element)
+ return 0;
+
+ int32_t result = GetProperty(element, property, is_null);
+ if (!is_null)
+ return result;
+
+ // Fall back on the equivalent ARIA attribute.
+ AtomicString attr_value;
+ switch (property) {
+ case AOMIntProperty::kColCount:
+ attr_value = element->FastGetAttribute(aria_colcountAttr);
+ break;
+ case AOMIntProperty::kRowCount:
+ attr_value = element->FastGetAttribute(aria_rowcountAttr);
+ break;
+ case AOMIntProperty::kSetSize:
+ attr_value = element->FastGetAttribute(aria_setsizeAttr);
+ break;
+ }
+
+ is_null = attr_value.IsNull();
+ return attr_value.ToInt();
tkent 2017/07/28 02:31:14 Ditto.
+}
+
bool AccessibleNode::atomic(bool& is_null) const {
return GetProperty(element_, AOMBooleanProperty::kAtomic, is_null);
}
@@ -192,6 +346,33 @@ void AccessibleNode::setChecked(const AtomicString& checked) {
NotifyAttributeChanged(aria_checkedAttr);
}
+int32_t AccessibleNode::colCount(bool& is_null) const {
+ return GetProperty(element_, AOMIntProperty::kColCount, is_null);
+}
+
+void AccessibleNode::setColCount(int32_t col_count, bool is_null) {
+ SetIntProperty(AOMIntProperty::kColCount, col_count, is_null);
+ NotifyAttributeChanged(aria_colcountAttr);
+}
+
+uint32_t AccessibleNode::colIndex(bool& is_null) const {
+ return GetProperty(element_, AOMUIntProperty::kColIndex, is_null);
+}
+
+void AccessibleNode::setColIndex(uint32_t col_index, bool is_null) {
+ SetUIntProperty(AOMUIntProperty::kColIndex, col_index, is_null);
+ NotifyAttributeChanged(aria_colindexAttr);
+}
+
+uint32_t AccessibleNode::colSpan(bool& is_null) const {
+ return GetProperty(element_, AOMUIntProperty::kColSpan, is_null);
+}
+
+void AccessibleNode::setColSpan(uint32_t col_span, bool is_null) {
+ SetUIntProperty(AOMUIntProperty::kColSpan, col_span, is_null);
+ NotifyAttributeChanged(aria_colspanAttr);
+}
+
AtomicString AccessibleNode::current() const {
return GetProperty(element_, AOMStringProperty::kCurrent);
}
@@ -257,6 +438,15 @@ void AccessibleNode::setLabel(const AtomicString& label) {
NotifyAttributeChanged(aria_labelAttr);
}
+uint32_t AccessibleNode::level(bool& is_null) const {
+ return GetProperty(element_, AOMUIntProperty::kLevel, is_null);
+}
+
+void AccessibleNode::setLevel(uint32_t level, bool is_null) {
+ SetUIntProperty(AOMUIntProperty::kLevel, level, is_null);
+ NotifyAttributeChanged(aria_levelAttr);
+}
+
AtomicString AccessibleNode::live() const {
return GetProperty(element_, AOMStringProperty::kLive);
}
@@ -312,6 +502,15 @@ void AccessibleNode::setPlaceholder(const AtomicString& placeholder) {
NotifyAttributeChanged(aria_placeholderAttr);
}
+uint32_t AccessibleNode::posInSet(bool& is_null) const {
+ return GetProperty(element_, AOMUIntProperty::kPosInSet, is_null);
+}
+
+void AccessibleNode::setPosInSet(uint32_t pos_in_set, bool is_null) {
+ SetUIntProperty(AOMUIntProperty::kPosInSet, pos_in_set, is_null);
+ NotifyAttributeChanged(aria_posinsetAttr);
+}
+
bool AccessibleNode::readOnly(bool& is_null) const {
return GetProperty(element_, AOMBooleanProperty::kReadOnly, is_null);
}
@@ -357,6 +556,33 @@ void AccessibleNode::setRoleDescription(const AtomicString& role_description) {
NotifyAttributeChanged(aria_roledescriptionAttr);
}
+int32_t AccessibleNode::rowCount(bool& is_null) const {
+ return GetProperty(element_, AOMIntProperty::kRowCount, is_null);
+}
+
+void AccessibleNode::setRowCount(int32_t row_count, bool is_null) {
+ SetIntProperty(AOMIntProperty::kRowCount, row_count, is_null);
+ NotifyAttributeChanged(aria_rowcountAttr);
+}
+
+uint32_t AccessibleNode::rowIndex(bool& is_null) const {
+ return GetProperty(element_, AOMUIntProperty::kRowIndex, is_null);
+}
+
+void AccessibleNode::setRowIndex(uint32_t row_index, bool is_null) {
+ SetUIntProperty(AOMUIntProperty::kRowIndex, row_index, is_null);
+ NotifyAttributeChanged(aria_rowindexAttr);
+}
+
+uint32_t AccessibleNode::rowSpan(bool& is_null) const {
+ return GetProperty(element_, AOMUIntProperty::kRowSpan, is_null);
+}
+
+void AccessibleNode::setRowSpan(uint32_t row_span, bool is_null) {
+ SetUIntProperty(AOMUIntProperty::kRowSpan, row_span, is_null);
+ NotifyAttributeChanged(aria_rowspanAttr);
+}
+
bool AccessibleNode::selected(bool& is_null) const {
return GetProperty(element_, AOMBooleanProperty::kSelected, is_null);
}
@@ -366,6 +592,15 @@ void AccessibleNode::setSelected(bool selected, bool is_null) {
NotifyAttributeChanged(aria_selectedAttr);
}
+int32_t AccessibleNode::setSize(bool& is_null) const {
+ return GetProperty(element_, AOMIntProperty::kSetSize, is_null);
+}
+
+void AccessibleNode::setSetSize(int32_t set_size, bool is_null) {
+ SetIntProperty(AOMIntProperty::kSetSize, set_size, is_null);
+ NotifyAttributeChanged(aria_setsizeAttr);
+}
+
AtomicString AccessibleNode::sort() const {
return GetProperty(element_, AOMStringProperty::kSort);
}
@@ -375,6 +610,33 @@ void AccessibleNode::setSort(const AtomicString& sort) {
NotifyAttributeChanged(aria_sortAttr);
}
+float AccessibleNode::valueMax(bool& is_null) const {
+ return GetProperty(element_, AOMFloatProperty::kValueMax, is_null);
+}
+
+void AccessibleNode::setValueMax(float value_max, bool is_null) {
+ SetFloatProperty(AOMFloatProperty::kValueMax, value_max, is_null);
+ NotifyAttributeChanged(aria_valuemaxAttr);
+}
+
+float AccessibleNode::valueMin(bool& is_null) const {
+ return GetProperty(element_, AOMFloatProperty::kValueMin, is_null);
+}
+
+void AccessibleNode::setValueMin(float value_min, bool is_null) {
+ SetFloatProperty(AOMFloatProperty::kValueMin, value_min, is_null);
+ NotifyAttributeChanged(aria_valueminAttr);
+}
+
+float AccessibleNode::valueNow(bool& is_null) const {
+ return GetProperty(element_, AOMFloatProperty::kValueNow, is_null);
+}
+
+void AccessibleNode::setValueNow(float value_now, bool is_null) {
+ SetFloatProperty(AOMFloatProperty::kValueNow, value_now, is_null);
+ NotifyAttributeChanged(aria_valuenowAttr);
+}
+
AtomicString AccessibleNode::valueText() const {
return GetProperty(element_, AOMStringProperty::kValueText);
}
@@ -396,21 +658,47 @@ void AccessibleNode::SetStringProperty(AOMStringProperty property,
string_properties_.push_back(std::make_pair(property, value));
}
-void AccessibleNode::SetBooleanProperty(AOMBooleanProperty property,
- bool value,
- bool is_null) {
- for (size_t i = 0; i < boolean_properties_.size(); i++) {
- auto& item = boolean_properties_[i];
+template <typename P, typename T>
+static void SetProperty(P property,
+ T value,
+ bool is_null,
+ Vector<std::pair<P, T>>& properties) {
+ for (size_t i = 0; i < properties.size(); i++) {
+ auto& item = properties[i];
if (item.first == property) {
if (is_null)
- boolean_properties_.erase(i);
+ properties.erase(i);
else
item.second = value;
return;
}
}
- boolean_properties_.push_back(std::make_pair(property, value));
+ properties.push_back(std::make_pair(property, value));
+}
+
+void AccessibleNode::SetBooleanProperty(AOMBooleanProperty property,
+ bool value,
+ bool is_null) {
+ SetProperty(property, value, is_null, boolean_properties_);
+}
+
+void AccessibleNode::SetIntProperty(AOMIntProperty property,
+ int32_t value,
+ bool is_null) {
+ SetProperty(property, value, is_null, int_properties_);
+}
+
+void AccessibleNode::SetUIntProperty(AOMUIntProperty property,
+ uint32_t value,
+ bool is_null) {
+ SetProperty(property, value, is_null, uint_properties_);
+}
+
+void AccessibleNode::SetFloatProperty(AOMFloatProperty property,
+ float value,
+ bool is_null) {
+ SetProperty(property, value, is_null, float_properties_);
}
void AccessibleNode::NotifyAttributeChanged(
« no previous file with comments | « third_party/WebKit/Source/core/dom/AccessibleNode.h ('k') | third_party/WebKit/Source/core/dom/AccessibleNode.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698