OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2012, Google Inc. All rights reserved. | 2 * Copyright (C) 2012, Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 | 90 |
91 if (node->isHTMLElement()) { | 91 if (node->isHTMLElement()) { |
92 const AtomicString& alt = toHTMLElement(node)->getAttribute(altAttr); | 92 const AtomicString& alt = toHTMLElement(node)->getAttribute(altAttr); |
93 if (!alt.isEmpty()) | 93 if (!alt.isEmpty()) |
94 return alt; | 94 return alt; |
95 } | 95 } |
96 | 96 |
97 return String(); | 97 return String(); |
98 } | 98 } |
99 | 99 |
100 String AXNodeObject::accessibilityDescriptionForElements(WillBeHeapVector<RawPtr
WillBeMember<Element> > &elements) const | 100 String AXNodeObject::accessibilityDescriptionForElements(WillBeHeapVector<RawPtr
WillBeMember<Element>> &elements) const |
101 { | 101 { |
102 StringBuilder builder; | 102 StringBuilder builder; |
103 unsigned size = elements.size(); | 103 unsigned size = elements.size(); |
104 for (unsigned i = 0; i < size; ++i) { | 104 for (unsigned i = 0; i < size; ++i) { |
105 Element* idElement = elements[i]; | 105 Element* idElement = elements[i]; |
106 | 106 |
107 builder.append(accessibleNameForNode(idElement)); | 107 builder.append(accessibleNameForNode(idElement)); |
108 for (Node& n : NodeTraversal::descendantsOf(*idElement)) | 108 for (Node& n : NodeTraversal::descendantsOf(*idElement)) |
109 builder.append(accessibleNameForNode(&n)); | 109 builder.append(accessibleNameForNode(&n)); |
110 | 110 |
(...skipping 21 matching lines...) Expand all Loading... |
132 return ariaLabeledBy; | 132 return ariaLabeledBy; |
133 | 133 |
134 const AtomicString& ariaLabel = getAttribute(aria_labelAttr); | 134 const AtomicString& ariaLabel = getAttribute(aria_labelAttr); |
135 if (!ariaLabel.isEmpty()) | 135 if (!ariaLabel.isEmpty()) |
136 return ariaLabel; | 136 return ariaLabel; |
137 | 137 |
138 return String(); | 138 return String(); |
139 } | 139 } |
140 | 140 |
141 | 141 |
142 void AXNodeObject::ariaLabeledByElements(WillBeHeapVector<RawPtrWillBeMember<Ele
ment> >& elements) const | 142 void AXNodeObject::ariaLabeledByElements(WillBeHeapVector<RawPtrWillBeMember<Ele
ment>>& elements) const |
143 { | 143 { |
144 elementsFromAttribute(elements, aria_labeledbyAttr); | 144 elementsFromAttribute(elements, aria_labeledbyAttr); |
145 if (!elements.size()) | 145 if (!elements.size()) |
146 elementsFromAttribute(elements, aria_labelledbyAttr); | 146 elementsFromAttribute(elements, aria_labelledbyAttr); |
147 } | 147 } |
148 | 148 |
149 void AXNodeObject::changeValueByStep(bool increase) | 149 void AXNodeObject::changeValueByStep(bool increase) |
150 { | 150 { |
151 float step = stepValueForRange(); | 151 float step = stepValueForRange(); |
152 float value = valueForRange(); | 152 float value = valueForRange(); |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 role = TextFieldRole; | 311 role = TextFieldRole; |
312 | 312 |
313 role = remapAriaRoleDueToParent(role); | 313 role = remapAriaRoleDueToParent(role); |
314 | 314 |
315 if (role) | 315 if (role) |
316 return role; | 316 return role; |
317 | 317 |
318 return UnknownRole; | 318 return UnknownRole; |
319 } | 319 } |
320 | 320 |
321 void AXNodeObject::elementsFromAttribute(WillBeHeapVector<RawPtrWillBeMember<Ele
ment> >& elements, const QualifiedName& attribute) const | 321 void AXNodeObject::elementsFromAttribute(WillBeHeapVector<RawPtrWillBeMember<Ele
ment>>& elements, const QualifiedName& attribute) const |
322 { | 322 { |
323 Node* node = this->node(); | 323 Node* node = this->node(); |
324 if (!node || !node->isElementNode()) | 324 if (!node || !node->isElementNode()) |
325 return; | 325 return; |
326 | 326 |
327 TreeScope& scope = node->treeScope(); | 327 TreeScope& scope = node->treeScope(); |
328 | 328 |
329 String idList = getAttribute(attribute).string(); | 329 String idList = getAttribute(attribute).string(); |
330 if (idList.isEmpty()) | 330 if (idList.isEmpty()) |
331 return; | 331 return; |
(...skipping 841 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1173 staticText = textUnderElement(); | 1173 staticText = textUnderElement(); |
1174 return staticText; | 1174 return staticText; |
1175 } | 1175 } |
1176 | 1176 |
1177 if (node->isTextNode()) | 1177 if (node->isTextNode()) |
1178 return textUnderElement(); | 1178 return textUnderElement(); |
1179 | 1179 |
1180 if (isHTMLSelectElement(*node)) { | 1180 if (isHTMLSelectElement(*node)) { |
1181 HTMLSelectElement& selectElement = toHTMLSelectElement(*node); | 1181 HTMLSelectElement& selectElement = toHTMLSelectElement(*node); |
1182 int selectedIndex = selectElement.selectedIndex(); | 1182 int selectedIndex = selectElement.selectedIndex(); |
1183 const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = se
lectElement.listItems(); | 1183 const WillBeHeapVector<RawPtrWillBeMember<HTMLElement>>& listItems = sel
ectElement.listItems(); |
1184 if (selectedIndex >= 0 && static_cast<size_t>(selectedIndex) < listItems
.size()) { | 1184 if (selectedIndex >= 0 && static_cast<size_t>(selectedIndex) < listItems
.size()) { |
1185 const AtomicString& overriddenDescription = listItems[selectedIndex]
->fastGetAttribute(aria_labelAttr); | 1185 const AtomicString& overriddenDescription = listItems[selectedIndex]
->fastGetAttribute(aria_labelAttr); |
1186 if (!overriddenDescription.isNull()) | 1186 if (!overriddenDescription.isNull()) |
1187 return overriddenDescription; | 1187 return overriddenDescription; |
1188 } | 1188 } |
1189 if (!selectElement.multiple()) | 1189 if (!selectElement.multiple()) |
1190 return selectElement.value(); | 1190 return selectElement.value(); |
1191 return String(); | 1191 return String(); |
1192 } | 1192 } |
1193 | 1193 |
(...skipping 15 matching lines...) Expand all Loading... |
1209 return nullAtom; | 1209 return nullAtom; |
1210 | 1210 |
1211 HTMLInputElement& input = toHTMLInputElement(*node); | 1211 HTMLInputElement& input = toHTMLInputElement(*node); |
1212 if (input.isTextField()) | 1212 if (input.isTextField()) |
1213 return input.type(); | 1213 return input.type(); |
1214 return nullAtom; | 1214 return nullAtom; |
1215 } | 1215 } |
1216 | 1216 |
1217 String AXNodeObject::ariaDescribedByAttribute() const | 1217 String AXNodeObject::ariaDescribedByAttribute() const |
1218 { | 1218 { |
1219 WillBeHeapVector<RawPtrWillBeMember<Element> > elements; | 1219 WillBeHeapVector<RawPtrWillBeMember<Element>> elements; |
1220 elementsFromAttribute(elements, aria_describedbyAttr); | 1220 elementsFromAttribute(elements, aria_describedbyAttr); |
1221 | 1221 |
1222 return accessibilityDescriptionForElements(elements); | 1222 return accessibilityDescriptionForElements(elements); |
1223 } | 1223 } |
1224 | 1224 |
1225 String AXNodeObject::ariaLabeledByAttribute() const | 1225 String AXNodeObject::ariaLabeledByAttribute() const |
1226 { | 1226 { |
1227 WillBeHeapVector<RawPtrWillBeMember<Element> > elements; | 1227 WillBeHeapVector<RawPtrWillBeMember<Element>> elements; |
1228 ariaLabeledByElements(elements); | 1228 ariaLabeledByElements(elements); |
1229 | 1229 |
1230 return accessibilityDescriptionForElements(elements); | 1230 return accessibilityDescriptionForElements(elements); |
1231 } | 1231 } |
1232 | 1232 |
1233 AccessibilityRole AXNodeObject::ariaRoleAttribute() const | 1233 AccessibilityRole AXNodeObject::ariaRoleAttribute() const |
1234 { | 1234 { |
1235 return m_ariaRole; | 1235 return m_ariaRole; |
1236 } | 1236 } |
1237 | 1237 |
(...skipping 698 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1936 const AtomicString& alt = getAttribute(altAttr); | 1936 const AtomicString& alt = getAttribute(altAttr); |
1937 if (!alt.isNull()) | 1937 if (!alt.isNull()) |
1938 textOrder.append(AccessibilityText(alt, AlternativeText)); | 1938 textOrder.append(AccessibilityText(alt, AlternativeText)); |
1939 } | 1939 } |
1940 } | 1940 } |
1941 | 1941 |
1942 void AXNodeObject::ariaLabeledByText(Vector<AccessibilityText>& textOrder) const | 1942 void AXNodeObject::ariaLabeledByText(Vector<AccessibilityText>& textOrder) const |
1943 { | 1943 { |
1944 String ariaLabeledBy = ariaLabeledByAttribute(); | 1944 String ariaLabeledBy = ariaLabeledByAttribute(); |
1945 if (!ariaLabeledBy.isEmpty()) { | 1945 if (!ariaLabeledBy.isEmpty()) { |
1946 WillBeHeapVector<RawPtrWillBeMember<Element> > elements; | 1946 WillBeHeapVector<RawPtrWillBeMember<Element>> elements; |
1947 ariaLabeledByElements(elements); | 1947 ariaLabeledByElements(elements); |
1948 | 1948 |
1949 unsigned length = elements.size(); | 1949 unsigned length = elements.size(); |
1950 for (unsigned k = 0; k < length; k++) { | 1950 for (unsigned k = 0; k < length; k++) { |
1951 RefPtr<AXObject> axElement = axObjectCache()->getOrCreate(elements[k
]); | 1951 RefPtr<AXObject> axElement = axObjectCache()->getOrCreate(elements[k
]); |
1952 textOrder.append(AccessibilityText(ariaLabeledBy, AlternativeText, a
xElement)); | 1952 textOrder.append(AccessibilityText(ariaLabeledBy, AlternativeText, a
xElement)); |
1953 } | 1953 } |
1954 } | 1954 } |
1955 } | 1955 } |
1956 | 1956 |
1957 void AXNodeObject::changeValueByPercent(float percentChange) | 1957 void AXNodeObject::changeValueByPercent(float percentChange) |
1958 { | 1958 { |
1959 float range = maxValueForRange() - minValueForRange(); | 1959 float range = maxValueForRange() - minValueForRange(); |
1960 float value = valueForRange(); | 1960 float value = valueForRange(); |
1961 | 1961 |
1962 value += range * (percentChange / 100); | 1962 value += range * (percentChange / 100); |
1963 setValue(String::number(value)); | 1963 setValue(String::number(value)); |
1964 | 1964 |
1965 axObjectCache()->postNotification(node(), AXObjectCacheImpl::AXValueChanged,
true); | 1965 axObjectCache()->postNotification(node(), AXObjectCacheImpl::AXValueChanged,
true); |
1966 } | 1966 } |
1967 | 1967 |
1968 } // namespace blink | 1968 } // namespace blink |
OLD | NEW |