OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2008 Apple 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 577 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
588 } | 588 } |
589 | 589 |
590 // TODO: we should refactor this - but right now this is necessary to make | 590 // TODO: we should refactor this - but right now this is necessary to make |
591 // sure scroll areas stay in the tree. | 591 // sure scroll areas stay in the tree. |
592 if (isAttachment()) | 592 if (isAttachment()) |
593 return false; | 593 return false; |
594 | 594 |
595 // find out if this element is inside of a label element. | 595 // find out if this element is inside of a label element. |
596 // if so, it may be ignored because it's the label for a checkbox or radio b
utton | 596 // if so, it may be ignored because it's the label for a checkbox or radio b
utton |
597 AXObject* controlObject = correspondingControlForLabelElement(); | 597 AXObject* controlObject = correspondingControlForLabelElement(); |
598 if (controlObject && controlObject->isCheckboxOrRadio()) { | 598 if (controlObject && controlObject->isCheckboxOrRadio() && controlObject->na
meFromLabelElement()) { |
599 AXNameFrom controlNameFrom; | 599 if (ignoredReasons) { |
600 AXObject::AXObjectVector controlNameObjects; | 600 HTMLLabelElement* label = labelElementContainer(); |
601 controlObject->name(controlNameFrom, &controlNameObjects); | 601 if (label && !label->isSameNode(node())) { |
602 if (controlNameFrom == AXNameFromRelatedElement) { | 602 AXObject* labelAXObject = axObjectCache().getOrCreate(label); |
603 if (ignoredReasons) { | 603 ignoredReasons->append(IgnoredReason(AXLabelContainer, labelAXOb
ject)); |
604 HTMLLabelElement* label = labelElementContainer(); | 604 } |
605 if (label && !label->isSameNode(node())) { | |
606 AXObject* labelAXObject = axObjectCache().getOrCreate(label)
; | |
607 ignoredReasons->append(IgnoredReason(AXLabelContainer, label
AXObject)); | |
608 } | |
609 | 605 |
610 ignoredReasons->append(IgnoredReason(AXLabelFor, controlObject))
; | 606 ignoredReasons->append(IgnoredReason(AXLabelFor, controlObject)); |
611 } | |
612 return true; | |
613 } | 607 } |
| 608 return true; |
614 } | 609 } |
615 | 610 |
616 if (m_layoutObject->isBR()) | 611 if (m_layoutObject->isBR()) |
617 return false; | 612 return false; |
618 | 613 |
619 if (m_layoutObject->isText()) { | 614 if (m_layoutObject->isText()) { |
620 // static text beneath MenuItems and MenuButtons are just reported along
with the menu item, so it's ignored on an individual level | 615 // static text beneath MenuItems and MenuButtons are just reported along
with the menu item, so it's ignored on an individual level |
621 AXObject* parent = parentObjectUnignored(); | 616 AXObject* parent = parentObjectUnignored(); |
622 if (parent && (parent->ariaRoleAttribute() == MenuItemRole || parent->ar
iaRoleAttribute() == MenuButtonRole)) { | 617 if (parent && (parent->ariaRoleAttribute() == MenuItemRole || parent->ar
iaRoleAttribute() == MenuButtonRole)) { |
623 if (ignoredReasons) | 618 if (ignoredReasons) |
(...skipping 870 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1494 | 1489 |
1495 AXObject* result = axObjectCache().getOrCreate(obj); | 1490 AXObject* result = axObjectCache().getOrCreate(obj); |
1496 result->updateChildrenIfNecessary(); | 1491 result->updateChildrenIfNecessary(); |
1497 | 1492 |
1498 // Allow the element to perform any hit-testing it might need to do to reach
non-layout children. | 1493 // Allow the element to perform any hit-testing it might need to do to reach
non-layout children. |
1499 result = result->elementAccessibilityHitTest(point); | 1494 result = result->elementAccessibilityHitTest(point); |
1500 if (result && result->accessibilityIsIgnored()) { | 1495 if (result && result->accessibilityIsIgnored()) { |
1501 // If this element is the label of a control, a hit test should return t
he control. | 1496 // If this element is the label of a control, a hit test should return t
he control. |
1502 if (result->isAXLayoutObject()) { | 1497 if (result->isAXLayoutObject()) { |
1503 AXObject* controlObject = toAXLayoutObject(result)->correspondingCon
trolForLabelElement(); | 1498 AXObject* controlObject = toAXLayoutObject(result)->correspondingCon
trolForLabelElement(); |
1504 if (controlObject) { | 1499 if (controlObject && controlObject->nameFromLabelElement()) |
1505 AXNameFrom controlNameFrom; | 1500 return controlObject; |
1506 AXObject::AXObjectVector controlNameObjects; | |
1507 controlObject->name(controlNameFrom, &controlNameObjects); | |
1508 if (controlObject && controlNameFrom == AXNameFromRelatedElement
) | |
1509 return controlObject; | |
1510 } | |
1511 } | 1501 } |
1512 | 1502 |
1513 result = result->parentObjectUnignored(); | 1503 result = result->parentObjectUnignored(); |
1514 } | 1504 } |
1515 | 1505 |
1516 return result; | 1506 return result; |
1517 } | 1507 } |
1518 | 1508 |
1519 AXObject* AXLayoutObject::elementAccessibilityHitTest(const IntPoint& point) con
st | 1509 AXObject* AXLayoutObject::elementAccessibilityHitTest(const IntPoint& point) con
st |
1520 { | 1510 { |
(...skipping 1037 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2558 if (label && label->layoutObject()) { | 2548 if (label && label->layoutObject()) { |
2559 LayoutRect labelRect = axObjectCache().getOrCreate(label)->elementRe
ct(); | 2549 LayoutRect labelRect = axObjectCache().getOrCreate(label)->elementRe
ct(); |
2560 result.unite(labelRect); | 2550 result.unite(labelRect); |
2561 } | 2551 } |
2562 } | 2552 } |
2563 | 2553 |
2564 return result; | 2554 return result; |
2565 } | 2555 } |
2566 | 2556 |
2567 } // namespace blink | 2557 } // namespace blink |
OLD | NEW |