| 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 1302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1313 return ElementTraversal::FirstChild(*node); | 1313 return ElementTraversal::FirstChild(*node); |
| 1314 } | 1314 } |
| 1315 | 1315 |
| 1316 int AXNodeObject::HeadingLevel() const { | 1316 int AXNodeObject::HeadingLevel() const { |
| 1317 // headings can be in block flow and non-block flow | 1317 // headings can be in block flow and non-block flow |
| 1318 Node* node = this->GetNode(); | 1318 Node* node = this->GetNode(); |
| 1319 if (!node) | 1319 if (!node) |
| 1320 return 0; | 1320 return 0; |
| 1321 | 1321 |
| 1322 if (RoleValue() == kHeadingRole) { | 1322 if (RoleValue() == kHeadingRole) { |
| 1323 String level_str = GetAttribute(aria_levelAttr); | 1323 uint32_t level; |
| 1324 if (!level_str.IsEmpty()) { | 1324 if (HasAOMPropertyOrARIAAttribute(AOMUIntProperty::kLevel, level)) { |
| 1325 int level = level_str.ToInt(); | |
| 1326 if (level >= 1 && level <= 9) | 1325 if (level >= 1 && level <= 9) |
| 1327 return level; | 1326 return level; |
| 1328 return 1; | 1327 return 1; |
| 1329 } | 1328 } |
| 1330 } | 1329 } |
| 1331 | 1330 |
| 1332 if (!node->IsHTMLElement()) | 1331 if (!node->IsHTMLElement()) |
| 1333 return 0; | 1332 return 0; |
| 1334 | 1333 |
| 1335 HTMLElement& element = ToHTMLElement(*node); | 1334 HTMLElement& element = ToHTMLElement(*node); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1348 if (element.HasTagName(h5Tag)) | 1347 if (element.HasTagName(h5Tag)) |
| 1349 return 5; | 1348 return 5; |
| 1350 | 1349 |
| 1351 if (element.HasTagName(h6Tag)) | 1350 if (element.HasTagName(h6Tag)) |
| 1352 return 6; | 1351 return 6; |
| 1353 | 1352 |
| 1354 return 0; | 1353 return 0; |
| 1355 } | 1354 } |
| 1356 | 1355 |
| 1357 unsigned AXNodeObject::HierarchicalLevel() const { | 1356 unsigned AXNodeObject::HierarchicalLevel() const { |
| 1358 Node* node = this->GetNode(); | 1357 Element* element = GetElement(); |
| 1359 if (!node || !node->IsElementNode()) | 1358 if (!element) |
| 1360 return 0; | 1359 return 0; |
| 1361 | 1360 |
| 1362 Element* element = ToElement(node); | 1361 uint32_t level; |
| 1363 String level_str = element->getAttribute(aria_levelAttr); | 1362 if (HasAOMPropertyOrARIAAttribute(AOMUIntProperty::kLevel, level)) { |
| 1364 if (!level_str.IsEmpty()) { | 1363 if (level >= 1 && level <= 9) |
| 1365 int level = level_str.ToInt(); | |
| 1366 if (level > 0) | |
| 1367 return level; | 1364 return level; |
| 1368 return 1; | 1365 return 1; |
| 1369 } | 1366 } |
| 1370 | 1367 |
| 1371 // Only tree item will calculate its level through the DOM currently. | 1368 // Only tree item will calculate its level through the DOM currently. |
| 1372 if (RoleValue() != kTreeItemRole) | 1369 if (RoleValue() != kTreeItemRole) |
| 1373 return 0; | 1370 return 0; |
| 1374 | 1371 |
| 1375 // Hierarchy leveling starts at 1, to match the aria-level spec. | 1372 // Hierarchy leveling starts at 1, to match the aria-level spec. |
| 1376 // We measure tree hierarchy by the number of groups that the item is within. | 1373 // We measure tree hierarchy by the number of groups that the item is within. |
| 1377 unsigned level = 1; | 1374 level = 1; |
| 1378 for (AXObjectImpl* parent = ParentObject(); parent; | 1375 for (AXObjectImpl* parent = ParentObject(); parent; |
| 1379 parent = parent->ParentObject()) { | 1376 parent = parent->ParentObject()) { |
| 1380 AccessibilityRole parent_role = parent->RoleValue(); | 1377 AccessibilityRole parent_role = parent->RoleValue(); |
| 1381 if (parent_role == kGroupRole) | 1378 if (parent_role == kGroupRole) |
| 1382 level++; | 1379 level++; |
| 1383 else if (parent_role == kTreeRole) | 1380 else if (parent_role == kTreeRole) |
| 1384 break; | 1381 break; |
| 1385 } | 1382 } |
| 1386 | 1383 |
| 1387 return level; | 1384 return level; |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1638 bool is_invalid = !element->checkValidity(&invalid_controls, | 1635 bool is_invalid = !element->checkValidity(&invalid_controls, |
| 1639 kCheckValidityDispatchNoEvent); | 1636 kCheckValidityDispatchNoEvent); |
| 1640 return is_invalid ? kInvalidStateTrue : kInvalidStateFalse; | 1637 return is_invalid ? kInvalidStateTrue : kInvalidStateFalse; |
| 1641 } | 1638 } |
| 1642 | 1639 |
| 1643 return AXObjectImpl::GetInvalidState(); | 1640 return AXObjectImpl::GetInvalidState(); |
| 1644 } | 1641 } |
| 1645 | 1642 |
| 1646 int AXNodeObject::PosInSet() const { | 1643 int AXNodeObject::PosInSet() const { |
| 1647 if (SupportsSetSizeAndPosInSet()) { | 1644 if (SupportsSetSizeAndPosInSet()) { |
| 1648 String pos_in_set_str = GetAttribute(aria_posinsetAttr); | 1645 uint32_t pos_in_set; |
| 1649 if (!pos_in_set_str.IsEmpty()) { | 1646 if (HasAOMPropertyOrARIAAttribute(AOMUIntProperty::kPosInSet, pos_in_set)) |
| 1650 int pos_in_set = pos_in_set_str.ToInt(); | 1647 return pos_in_set; |
| 1651 if (pos_in_set > 0) | |
| 1652 return pos_in_set; | |
| 1653 return 1; | |
| 1654 } | |
| 1655 | 1648 |
| 1656 return AXObjectImpl::IndexInParent() + 1; | 1649 return AXObjectImpl::IndexInParent() + 1; |
| 1657 } | 1650 } |
| 1658 | 1651 |
| 1659 return 0; | 1652 return 0; |
| 1660 } | 1653 } |
| 1661 | 1654 |
| 1662 int AXNodeObject::SetSize() const { | 1655 int AXNodeObject::SetSize() const { |
| 1663 if (SupportsSetSizeAndPosInSet()) { | 1656 if (SupportsSetSizeAndPosInSet()) { |
| 1664 String set_size_str = GetAttribute(aria_setsizeAttr); | 1657 int32_t set_size; |
| 1665 if (!set_size_str.IsEmpty()) { | 1658 if (HasAOMPropertyOrARIAAttribute(AOMIntProperty::kSetSize, set_size)) |
| 1666 int set_size = set_size_str.ToInt(); | 1659 return set_size; |
| 1667 if (set_size > 0) | |
| 1668 return set_size; | |
| 1669 return 1; | |
| 1670 } | |
| 1671 | 1660 |
| 1672 if (ParentObject()) { | 1661 if (ParentObject()) { |
| 1673 const auto& siblings = ParentObject()->Children(); | 1662 const auto& siblings = ParentObject()->Children(); |
| 1674 return siblings.size(); | 1663 return siblings.size(); |
| 1675 } | 1664 } |
| 1676 } | 1665 } |
| 1677 | 1666 |
| 1678 return 0; | 1667 return 0; |
| 1679 } | 1668 } |
| 1680 | 1669 |
| 1681 String AXNodeObject::AriaInvalidValue() const { | 1670 String AXNodeObject::AriaInvalidValue() const { |
| 1682 if (GetInvalidState() == kInvalidStateOther) | 1671 if (GetInvalidState() == kInvalidStateOther) |
| 1683 return GetAOMPropertyOrARIAAttribute(AOMStringProperty::kInvalid); | 1672 return GetAOMPropertyOrARIAAttribute(AOMStringProperty::kInvalid); |
| 1684 | 1673 |
| 1685 return String(); | 1674 return String(); |
| 1686 } | 1675 } |
| 1687 | 1676 |
| 1688 String AXNodeObject::ValueDescription() const { | 1677 String AXNodeObject::ValueDescription() const { |
| 1689 if (!SupportsRangeValue()) | 1678 if (!SupportsRangeValue()) |
| 1690 return String(); | 1679 return String(); |
| 1691 | 1680 |
| 1692 return GetAOMPropertyOrARIAAttribute(AOMStringProperty::kValueText) | 1681 return GetAOMPropertyOrARIAAttribute(AOMStringProperty::kValueText) |
| 1693 .GetString(); | 1682 .GetString(); |
| 1694 } | 1683 } |
| 1695 | 1684 |
| 1696 float AXNodeObject::ValueForRange() const { | 1685 float AXNodeObject::ValueForRange() const { |
| 1697 if (HasAttribute(aria_valuenowAttr)) | 1686 float value_now; |
| 1698 return GetAttribute(aria_valuenowAttr).ToFloat(); | 1687 if (HasAOMPropertyOrARIAAttribute(AOMFloatProperty::kValueNow, value_now)) |
| 1688 return value_now; |
| 1699 | 1689 |
| 1700 if (IsNativeSlider()) | 1690 if (IsNativeSlider()) |
| 1701 return toHTMLInputElement(*GetNode()).valueAsNumber(); | 1691 return toHTMLInputElement(*GetNode()).valueAsNumber(); |
| 1702 | 1692 |
| 1703 if (isHTMLMeterElement(GetNode())) | 1693 if (isHTMLMeterElement(GetNode())) |
| 1704 return toHTMLMeterElement(*GetNode()).value(); | 1694 return toHTMLMeterElement(*GetNode()).value(); |
| 1705 | 1695 |
| 1706 return 0.0; | 1696 return 0.0; |
| 1707 } | 1697 } |
| 1708 | 1698 |
| 1709 float AXNodeObject::MaxValueForRange() const { | 1699 float AXNodeObject::MaxValueForRange() const { |
| 1710 if (HasAttribute(aria_valuemaxAttr)) | 1700 float value_max; |
| 1711 return GetAttribute(aria_valuemaxAttr).ToFloat(); | 1701 if (HasAOMPropertyOrARIAAttribute(AOMFloatProperty::kValueMax, value_max)) |
| 1702 return value_max; |
| 1712 | 1703 |
| 1713 if (IsNativeSlider()) | 1704 if (IsNativeSlider()) |
| 1714 return toHTMLInputElement(*GetNode()).Maximum(); | 1705 return toHTMLInputElement(*GetNode()).Maximum(); |
| 1715 | 1706 |
| 1716 if (isHTMLMeterElement(GetNode())) | 1707 if (isHTMLMeterElement(GetNode())) |
| 1717 return toHTMLMeterElement(*GetNode()).max(); | 1708 return toHTMLMeterElement(*GetNode()).max(); |
| 1718 | 1709 |
| 1719 return 0.0; | 1710 return 0.0; |
| 1720 } | 1711 } |
| 1721 | 1712 |
| 1722 float AXNodeObject::MinValueForRange() const { | 1713 float AXNodeObject::MinValueForRange() const { |
| 1723 if (HasAttribute(aria_valueminAttr)) | 1714 float value_min; |
| 1724 return GetAttribute(aria_valueminAttr).ToFloat(); | 1715 if (HasAOMPropertyOrARIAAttribute(AOMFloatProperty::kValueMin, value_min)) |
| 1716 return value_min; |
| 1725 | 1717 |
| 1726 if (IsNativeSlider()) | 1718 if (IsNativeSlider()) |
| 1727 return toHTMLInputElement(*GetNode()).Minimum(); | 1719 return toHTMLInputElement(*GetNode()).Minimum(); |
| 1728 | 1720 |
| 1729 if (isHTMLMeterElement(GetNode())) | 1721 if (isHTMLMeterElement(GetNode())) |
| 1730 return toHTMLMeterElement(*GetNode()).min(); | 1722 return toHTMLMeterElement(*GetNode()).min(); |
| 1731 | 1723 |
| 1732 return 0.0; | 1724 return 0.0; |
| 1733 } | 1725 } |
| 1734 | 1726 |
| (...skipping 1491 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3226 return String(); | 3218 return String(); |
| 3227 return ToTextControlElement(node)->StrippedPlaceholder(); | 3219 return ToTextControlElement(node)->StrippedPlaceholder(); |
| 3228 } | 3220 } |
| 3229 | 3221 |
| 3230 DEFINE_TRACE(AXNodeObject) { | 3222 DEFINE_TRACE(AXNodeObject) { |
| 3231 visitor->Trace(node_); | 3223 visitor->Trace(node_); |
| 3232 AXObjectImpl::Trace(visitor); | 3224 AXObjectImpl::Trace(visitor); |
| 3233 } | 3225 } |
| 3234 | 3226 |
| 3235 } // namespace blink | 3227 } // namespace blink |
| OLD | NEW |