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

Side by Side Diff: third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp

Issue 2694903010: AX checked state changes (Closed)
Patch Set: git cl try 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 unified diff | Download patch
OLDNEW
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 1125 matching lines...) Expand 10 before | Expand all | Expand 10 after
1136 Node* node = this->GetNode(); 1136 Node* node = this->GetNode();
1137 if (!node) 1137 if (!node)
1138 return false; 1138 return false;
1139 1139
1140 if (!isHTMLInputElement(node)) 1140 if (!isHTMLInputElement(node))
1141 return false; 1141 return false;
1142 1142
1143 return toHTMLInputElement(node)->type() == InputTypeNames::range; 1143 return toHTMLInputElement(node)->type() == InputTypeNames::range;
1144 } 1144 }
1145 1145
1146 bool AXNodeObject::IsChecked() const {
1147 Node* node = this->GetNode();
1148 if (!node)
1149 return false;
1150
1151 // First test for native checkedness semantics
1152 if (isHTMLInputElement(*node))
1153 return toHTMLInputElement(*node).ShouldAppearChecked();
1154
1155 // Else, if this is an ARIA role checkbox or radio or menuitemcheckbox
1156 // or menuitemradio or switch, respect the aria-checked attribute
1157 switch (AriaRoleAttribute()) {
1158 case kCheckBoxRole:
1159 case kMenuItemCheckBoxRole:
1160 case kMenuItemRadioRole:
1161 case kRadioButtonRole:
1162 case kSwitchRole:
1163 if (EqualIgnoringASCIICase(
1164 GetAOMPropertyOrARIAAttribute(AOMStringProperty::kChecked),
1165 "true"))
1166 return true;
1167 return false;
1168 default:
1169 break;
1170 }
1171
1172 // Otherwise it's not checked
1173 return false;
1174 }
1175
1176 bool AXNodeObject::IsClickable() const { 1146 bool AXNodeObject::IsClickable() const {
1177 if (GetNode()) { 1147 if (GetNode()) {
1178 if (GetNode()->IsElementNode() && 1148 if (GetNode()->IsElementNode() &&
1179 ToElement(GetNode())->IsDisabledFormControl()) 1149 ToElement(GetNode())->IsDisabledFormControl())
1180 return false; 1150 return false;
1181 1151
1182 // Note: we can't call getNode()->willRespondToMouseClickEvents() because 1152 // Note: we can't call getNode()->willRespondToMouseClickEvents() because
1183 // that triggers a style recalc and can delete this. 1153 // that triggers a style recalc and can delete this.
1184 if (GetNode()->HasEventListeners(EventTypeNames::mouseup) || 1154 if (GetNode()->HasEventListeners(EventTypeNames::mouseup) ||
1185 GetNode()->HasEventListeners(EventTypeNames::mousedown) || 1155 GetNode()->HasEventListeners(EventTypeNames::mousedown) ||
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after
1600 if (IsNativeTextControl() && 1570 if (IsNativeTextControl() &&
1601 (isHTMLTextAreaElement(*node) || isHTMLInputElement(*node))) 1571 (isHTMLTextAreaElement(*node) || isHTMLInputElement(*node)))
1602 return ToTextControlElement(*node).value(); 1572 return ToTextControlElement(*node).value();
1603 1573
1604 if (!node->IsElementNode()) 1574 if (!node->IsElementNode())
1605 return String(); 1575 return String();
1606 1576
1607 return ToElement(node)->innerText(); 1577 return ToElement(node)->innerText();
1608 } 1578 }
1609 1579
1610 AccessibilityButtonState AXNodeObject::CheckboxOrRadioValue() const {
1611 if (IsNativeCheckboxInMixedState())
1612 return kButtonStateMixed;
1613
1614 if (IsNativeCheckboxOrRadio())
1615 return IsChecked() ? kButtonStateOn : kButtonStateOff;
1616
1617 return AXObject::CheckboxOrRadioValue();
1618 }
1619
1620 RGBA32 AXNodeObject::ColorValue() const { 1580 RGBA32 AXNodeObject::ColorValue() const {
1621 if (!isHTMLInputElement(GetNode()) || !IsColorWell()) 1581 if (!isHTMLInputElement(GetNode()) || !IsColorWell())
1622 return AXObject::ColorValue(); 1582 return AXObject::ColorValue();
1623 1583
1624 HTMLInputElement* input = toHTMLInputElement(GetNode()); 1584 HTMLInputElement* input = toHTMLInputElement(GetNode());
1625 const AtomicString& type = input->getAttribute(typeAttr); 1585 const AtomicString& type = input->getAttribute(typeAttr);
1626 if (!EqualIgnoringASCIICase(type, "color")) 1586 if (!EqualIgnoringASCIICase(type, "color"))
1627 return AXObject::ColorValue(); 1587 return AXObject::ColorValue();
1628 1588
1629 // HTMLInputElement::value always returns a string parseable by Color. 1589 // HTMLInputElement::value always returns a string parseable by Color.
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
1849 static bool IsInSameNonInlineBlockFlow(LayoutObject* r1, LayoutObject* r2) { 1809 static bool IsInSameNonInlineBlockFlow(LayoutObject* r1, LayoutObject* r2) {
1850 if (!r1 || !r2) 1810 if (!r1 || !r2)
1851 return false; 1811 return false;
1852 if (!r1->IsInline() || !r2->IsInline()) 1812 if (!r1->IsInline() || !r2->IsInline())
1853 return false; 1813 return false;
1854 LayoutBlockFlow* b1 = NonInlineBlockFlow(r1); 1814 LayoutBlockFlow* b1 = NonInlineBlockFlow(r1);
1855 LayoutBlockFlow* b2 = NonInlineBlockFlow(r2); 1815 LayoutBlockFlow* b2 = NonInlineBlockFlow(r2);
1856 return b1 && b2 && b1 == b2; 1816 return b1 && b2 && b1 == b2;
1857 } 1817 }
1858 1818
1859 bool AXNodeObject::IsNativeCheckboxInMixedState() const {
1860 if (!isHTMLInputElement(node_))
1861 return false;
1862
1863 HTMLInputElement* input = toHTMLInputElement(node_);
1864 return input->type() == InputTypeNames::checkbox &&
1865 input->ShouldAppearIndeterminate();
1866 }
1867
1868 // 1819 //
1869 // New AX name calculation. 1820 // New AX name calculation.
1870 // 1821 //
1871 1822
1872 String AXNodeObject::TextAlternative(bool recursive, 1823 String AXNodeObject::TextAlternative(bool recursive,
1873 bool in_aria_labelled_by_traversal, 1824 bool in_aria_labelled_by_traversal,
1874 AXObjectSet& visited, 1825 AXObjectSet& visited,
1875 AXNameFrom& name_from, 1826 AXNameFrom& name_from,
1876 AXRelatedObjectVector* related_objects, 1827 AXRelatedObjectVector* related_objects,
1877 NameSources* name_sources) const { 1828 NameSources* name_sources) const {
(...skipping 1390 matching lines...) Expand 10 before | Expand all | Expand 10 after
3268 return String(); 3219 return String();
3269 return ToTextControlElement(node)->StrippedPlaceholder(); 3220 return ToTextControlElement(node)->StrippedPlaceholder();
3270 } 3221 }
3271 3222
3272 DEFINE_TRACE(AXNodeObject) { 3223 DEFINE_TRACE(AXNodeObject) {
3273 visitor->Trace(node_); 3224 visitor->Trace(node_);
3274 AXObject::Trace(visitor); 3225 AXObject::Trace(visitor);
3275 } 3226 }
3276 3227
3277 } // namespace blink 3228 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698