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 1514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1525 if (ariaRoleAttribute() == MenuRole) { | 1525 if (ariaRoleAttribute() == MenuRole) { |
1526 AXObject* parent = menuButtonForMenu(); | 1526 AXObject* parent = menuButtonForMenu(); |
1527 if (parent) | 1527 if (parent) |
1528 return parent; | 1528 return parent; |
1529 } | 1529 } |
1530 | 1530 |
1531 LayoutObject* parentObj = layoutParentObject(); | 1531 LayoutObject* parentObj = layoutParentObject(); |
1532 if (parentObj) | 1532 if (parentObj) |
1533 return axObjectCache().getOrCreate(parentObj); | 1533 return axObjectCache().getOrCreate(parentObj); |
1534 | 1534 |
1535 // A WebArea's parent should be the containing frame (if local) or page popu
p owner. | 1535 // A WebArea's parent should be the page popup owner, if any, otherwise null
. |
1536 if (isWebArea()) { | 1536 if (isWebArea()) { |
1537 LocalFrame* frame = m_layoutObject->frame(); | 1537 LocalFrame* frame = m_layoutObject->frame(); |
1538 if (frame->owner() && frame->owner()->isLocal()) { | |
1539 HTMLFrameOwnerElement* owner = toHTMLFrameOwnerElement(frame->owner(
)); | |
1540 if (owner && owner->layoutObject()) | |
1541 return axObjectCache().getOrCreate(owner->layoutObject()); | |
1542 } | |
1543 return axObjectCache().getOrCreate(frame->pagePopupOwner()); | 1538 return axObjectCache().getOrCreate(frame->pagePopupOwner()); |
1544 } | 1539 } |
1545 | 1540 |
1546 return 0; | 1541 return 0; |
1547 } | 1542 } |
1548 | 1543 |
1549 AXObject* AXLayoutObject::computeParentIfExists() const | 1544 AXObject* AXLayoutObject::computeParentIfExists() const |
1550 { | 1545 { |
1551 if (!m_layoutObject) | 1546 if (!m_layoutObject) |
1552 return 0; | 1547 return 0; |
1553 | 1548 |
1554 if (ariaRoleAttribute() == MenuBarRole) | 1549 if (ariaRoleAttribute() == MenuBarRole) |
1555 return axObjectCache().get(m_layoutObject->parent()); | 1550 return axObjectCache().get(m_layoutObject->parent()); |
1556 | 1551 |
1557 // menuButton and its corresponding menu are DOM siblings, but Accessibility
needs them to be parent/child | 1552 // menuButton and its corresponding menu are DOM siblings, but Accessibility
needs them to be parent/child |
1558 if (ariaRoleAttribute() == MenuRole) { | 1553 if (ariaRoleAttribute() == MenuRole) { |
1559 AXObject* parent = menuButtonForMenu(); | 1554 AXObject* parent = menuButtonForMenu(); |
1560 if (parent) | 1555 if (parent) |
1561 return parent; | 1556 return parent; |
1562 } | 1557 } |
1563 | 1558 |
1564 LayoutObject* parentObj = layoutParentObject(); | 1559 LayoutObject* parentObj = layoutParentObject(); |
1565 if (parentObj) | 1560 if (parentObj) |
1566 return axObjectCache().get(parentObj); | 1561 return axObjectCache().get(parentObj); |
1567 | 1562 |
1568 // A WebArea's parent should be the containing frame (if local) or page popu
p owner. | 1563 // A WebArea's parent should be the page popup owner, if any, otherwise null
. |
1569 if (isWebArea()) { | 1564 if (isWebArea()) { |
1570 LocalFrame* frame = m_layoutObject->frame(); | 1565 LocalFrame* frame = m_layoutObject->frame(); |
1571 if (frame->owner() && frame->owner()->isLocal()) { | |
1572 HTMLFrameOwnerElement* owner = toHTMLFrameOwnerElement(frame->owner(
)); | |
1573 if (owner && owner->layoutObject()) | |
1574 return axObjectCache().get(owner->layoutObject()); | |
1575 } | |
1576 return axObjectCache().get(frame->pagePopupOwner()); | 1566 return axObjectCache().get(frame->pagePopupOwner()); |
1577 } | 1567 } |
1578 | 1568 |
1579 return 0; | 1569 return 0; |
1580 } | 1570 } |
1581 | 1571 |
1582 // | 1572 // |
1583 // Low-level accessibility tree exploration, only for use within the accessibili
ty module. | 1573 // Low-level accessibility tree exploration, only for use within the accessibili
ty module. |
1584 // | 1574 // |
1585 | 1575 |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1656 computeAriaOwnsChildren(ownedChildren); | 1646 computeAriaOwnsChildren(ownedChildren); |
1657 | 1647 |
1658 for (AXObject* obj = rawFirstChild(); obj; obj = obj->rawNextSibling()) { | 1648 for (AXObject* obj = rawFirstChild(); obj; obj = obj->rawNextSibling()) { |
1659 if (!axObjectCache().isAriaOwned(obj)) { | 1649 if (!axObjectCache().isAriaOwned(obj)) { |
1660 obj->setParent(this); | 1650 obj->setParent(this); |
1661 addChild(obj); | 1651 addChild(obj); |
1662 } | 1652 } |
1663 } | 1653 } |
1664 | 1654 |
1665 addHiddenChildren(); | 1655 addHiddenChildren(); |
1666 addFrameChildren(); | |
1667 addPopupChildren(); | 1656 addPopupChildren(); |
1668 addImageMapChildren(); | 1657 addImageMapChildren(); |
1669 addTextFieldChildren(); | 1658 addTextFieldChildren(); |
1670 addCanvasChildren(); | 1659 addCanvasChildren(); |
1671 addRemoteSVGChildren(); | 1660 addRemoteSVGChildren(); |
1672 addInlineTextBoxChildren(false); | 1661 addInlineTextBoxChildren(false); |
1673 | 1662 |
1674 for (const auto& child : m_children) { | 1663 for (const auto& child : m_children) { |
1675 if (!child->cachedParentObject()) | 1664 if (!child->cachedParentObject()) |
1676 child->setParent(this); | 1665 child->setParent(this); |
(...skipping 768 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2445 if (!isHTMLCanvasElement(node())) | 2434 if (!isHTMLCanvasElement(node())) |
2446 return; | 2435 return; |
2447 | 2436 |
2448 // If it's a canvas, it won't have laid out children, but it might have acce
ssible fallback content. | 2437 // If it's a canvas, it won't have laid out children, but it might have acce
ssible fallback content. |
2449 // Clear m_haveChildren because AXNodeObject::addChildren will expect it to
be false. | 2438 // Clear m_haveChildren because AXNodeObject::addChildren will expect it to
be false. |
2450 ASSERT(!m_children.size()); | 2439 ASSERT(!m_children.size()); |
2451 m_haveChildren = false; | 2440 m_haveChildren = false; |
2452 AXNodeObject::addChildren(); | 2441 AXNodeObject::addChildren(); |
2453 } | 2442 } |
2454 | 2443 |
2455 void AXLayoutObject::addFrameChildren() | |
2456 { | |
2457 if (!m_layoutObject || !m_layoutObject->isLayoutPart()) | |
2458 return; | |
2459 | |
2460 Widget* widget = toLayoutPart(m_layoutObject)->widget(); | |
2461 if (!widget || !widget->isFrameView()) | |
2462 return; | |
2463 | |
2464 Document* doc = toFrameView(widget)->frame().document(); | |
2465 if (!doc || !doc->layoutView()) | |
2466 return; | |
2467 | |
2468 AXObject* axChildFrame = axObjectCache().getOrCreate(doc); | |
2469 if (!axChildFrame->accessibilityIsIgnored()) | |
2470 m_children.append(axChildFrame); | |
2471 } | |
2472 | |
2473 void AXLayoutObject::addPopupChildren() | 2444 void AXLayoutObject::addPopupChildren() |
2474 { | 2445 { |
2475 if (!isHTMLInputElement(node())) | 2446 if (!isHTMLInputElement(node())) |
2476 return; | 2447 return; |
2477 if (AXObject* axPopup = toHTMLInputElement(node())->popupRootAXObject()) | 2448 if (AXObject* axPopup = toHTMLInputElement(node())->popupRootAXObject()) |
2478 m_children.append(axPopup); | 2449 m_children.append(axPopup); |
2479 } | 2450 } |
2480 | 2451 |
2481 void AXLayoutObject::addRemoteSVGChildren() | 2452 void AXLayoutObject::addRemoteSVGChildren() |
2482 { | 2453 { |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2546 if (label && label->layoutObject()) { | 2517 if (label && label->layoutObject()) { |
2547 LayoutRect labelRect = axObjectCache().getOrCreate(label)->elementRe
ct(); | 2518 LayoutRect labelRect = axObjectCache().getOrCreate(label)->elementRe
ct(); |
2548 result.unite(labelRect); | 2519 result.unite(labelRect); |
2549 } | 2520 } |
2550 } | 2521 } |
2551 | 2522 |
2552 return result; | 2523 return result; |
2553 } | 2524 } |
2554 | 2525 |
2555 } // namespace blink | 2526 } // namespace blink |
OLD | NEW |