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 494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
505 | 505 |
506 Element* anchor = anchorElement(); | 506 Element* anchor = anchorElement(); |
507 if (!anchor || !isHTMLAnchorElement(anchor)) | 507 if (!anchor || !isHTMLAnchorElement(anchor)) |
508 return false; | 508 return false; |
509 | 509 |
510 return !toHTMLAnchorElement(anchor)->href().isEmpty(); | 510 return !toHTMLAnchorElement(anchor)->href().isEmpty(); |
511 } | 511 } |
512 | 512 |
513 bool AccessibilityRenderObject::isLoaded() const | 513 bool AccessibilityRenderObject::isLoaded() const |
514 { | 514 { |
515 return !m_renderer->document()->parser(); | 515 return !m_renderer->document().parser(); |
516 } | 516 } |
517 | 517 |
518 bool AccessibilityRenderObject::isOffScreen() const | 518 bool AccessibilityRenderObject::isOffScreen() const |
519 { | 519 { |
520 ASSERT(m_renderer); | 520 ASSERT(m_renderer); |
521 IntRect contentRect = pixelSnappedIntRect(m_renderer->absoluteClippedOverflo
wRect()); | 521 IntRect contentRect = pixelSnappedIntRect(m_renderer->absoluteClippedOverflo
wRect()); |
522 FrameView* view = m_renderer->frame()->view(); | 522 FrameView* view = m_renderer->frame()->view(); |
523 IntRect viewRect = view->visibleContentRect(); | 523 IntRect viewRect = view->visibleContentRect(); |
524 viewRect.intersect(contentRect); | 524 viewRect.intersect(contentRect); |
525 return viewRect.isEmpty(); | 525 return viewRect.isEmpty(); |
526 } | 526 } |
527 | 527 |
528 bool AccessibilityRenderObject::isReadOnly() const | 528 bool AccessibilityRenderObject::isReadOnly() const |
529 { | 529 { |
530 ASSERT(m_renderer); | 530 ASSERT(m_renderer); |
531 | 531 |
532 if (isWebArea()) { | 532 if (isWebArea()) { |
533 Document* document = m_renderer->document(); | 533 Document& document = m_renderer->document(); |
534 if (!document) | 534 HTMLElement* body = document.body(); |
535 return true; | |
536 | |
537 HTMLElement* body = document->body(); | |
538 if (body && body->rendererIsEditable()) | 535 if (body && body->rendererIsEditable()) |
539 return false; | 536 return false; |
540 | 537 |
541 return !document->rendererIsEditable(); | 538 return !document.rendererIsEditable(); |
542 } | 539 } |
543 | 540 |
544 return AccessibilityNodeObject::isReadOnly(); | 541 return AccessibilityNodeObject::isReadOnly(); |
545 } | 542 } |
546 | 543 |
547 bool AccessibilityRenderObject::isVisited() const | 544 bool AccessibilityRenderObject::isVisited() const |
548 { | 545 { |
549 // FIXME: Is it a privacy violation to expose visited information to accessi
bility APIs? | 546 // FIXME: Is it a privacy violation to expose visited information to accessi
bility APIs? |
550 return m_renderer->style()->isLink() && m_renderer->style()->insideLink() ==
InsideVisitedLink; | 547 return m_renderer->style()->isLink() && m_renderer->style()->insideLink() ==
InsideVisitedLink; |
551 } | 548 } |
552 | 549 |
553 // | 550 // |
554 // Check object state. | 551 // Check object state. |
555 // | 552 // |
556 | 553 |
557 bool AccessibilityRenderObject::isFocused() const | 554 bool AccessibilityRenderObject::isFocused() const |
558 { | 555 { |
559 if (!m_renderer) | 556 if (!m_renderer) |
560 return false; | 557 return false; |
561 | 558 |
562 Document* document = m_renderer->document(); | 559 Document& document = m_renderer->document(); |
563 if (!document) | 560 Element* focusedElement = document.focusedElement(); |
564 return false; | |
565 | |
566 Element* focusedElement = document->focusedElement(); | |
567 if (!focusedElement) | 561 if (!focusedElement) |
568 return false; | 562 return false; |
569 | 563 |
570 // A web area is represented by the Document node in the DOM tree, which isn
't focusable. | 564 // A web area is represented by the Document node in the DOM tree, which isn
't focusable. |
571 // Check instead if the frame's selection controller is focused | 565 // Check instead if the frame's selection controller is focused |
572 if (focusedElement == m_renderer->node() | 566 if (focusedElement == m_renderer->node() |
573 || (roleValue() == WebAreaRole && document->frame()->selection()->isFocu
sedAndActive())) | 567 || (roleValue() == WebAreaRole && document.frame()->selection()->isFocus
edAndActive())) |
574 return true; | 568 return true; |
575 | 569 |
576 return false; | 570 return false; |
577 } | 571 } |
578 | 572 |
579 bool AccessibilityRenderObject::isSelected() const | 573 bool AccessibilityRenderObject::isSelected() const |
580 { | 574 { |
581 if (!m_renderer) | 575 if (!m_renderer) |
582 return false; | 576 return false; |
583 | 577 |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
840 } | 834 } |
841 | 835 |
842 KURL AccessibilityRenderObject::url() const | 836 KURL AccessibilityRenderObject::url() const |
843 { | 837 { |
844 if (isAnchor() && isHTMLAnchorElement(m_renderer->node())) { | 838 if (isAnchor() && isHTMLAnchorElement(m_renderer->node())) { |
845 if (HTMLAnchorElement* anchor = toHTMLAnchorElement(anchorElement())) | 839 if (HTMLAnchorElement* anchor = toHTMLAnchorElement(anchorElement())) |
846 return anchor->href(); | 840 return anchor->href(); |
847 } | 841 } |
848 | 842 |
849 if (isWebArea()) | 843 if (isWebArea()) |
850 return m_renderer->document()->url(); | 844 return m_renderer->document().url(); |
851 | 845 |
852 if (isImage() && m_renderer->node() && m_renderer->node()->hasTagName(imgTag
)) | 846 if (isImage() && m_renderer->node() && m_renderer->node()->hasTagName(imgTag
)) |
853 return toHTMLImageElement(m_renderer->node())->src(); | 847 return toHTMLImageElement(m_renderer->node())->src(); |
854 | 848 |
855 if (isInputImage()) | 849 if (isInputImage()) |
856 return toHTMLInputElement(m_renderer->node())->src(); | 850 return toHTMLInputElement(m_renderer->node())->src(); |
857 | 851 |
858 return KURL(); | 852 return KURL(); |
859 } | 853 } |
860 | 854 |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1141 if (!m_renderer) | 1135 if (!m_renderer) |
1142 return String(); | 1136 return String(); |
1143 | 1137 |
1144 if (m_renderer->isFileUploadControl()) | 1138 if (m_renderer->isFileUploadControl()) |
1145 return toRenderFileUploadControl(m_renderer)->buttonValue(); | 1139 return toRenderFileUploadControl(m_renderer)->buttonValue(); |
1146 | 1140 |
1147 if (m_renderer->isText()) { | 1141 if (m_renderer->isText()) { |
1148 // If possible, use a text iterator to get the text, so that whitespace | 1142 // If possible, use a text iterator to get the text, so that whitespace |
1149 // is handled consistently. | 1143 // is handled consistently. |
1150 if (Node* node = this->node()) { | 1144 if (Node* node = this->node()) { |
1151 if (Frame* frame = node->document()->frame()) { | 1145 if (Frame* frame = node->document().frame()) { |
1152 // catch stale WebCoreAXObject (see <rdar://problem/3960196>) | 1146 // catch stale WebCoreAXObject (see <rdar://problem/3960196>) |
1153 if (frame->document() != node->document()) | 1147 if (frame->document() != &node->document()) |
1154 return String(); | 1148 return String(); |
1155 | 1149 |
1156 return plainText(rangeOfContents(node).get(), textIteratorBehavi
orForTextRange()); | 1150 return plainText(rangeOfContents(node).get(), textIteratorBehavi
orForTextRange()); |
1157 } | 1151 } |
1158 } | 1152 } |
1159 | 1153 |
1160 // Sometimes text fragments don't have Nodes associated with them (like
when | 1154 // Sometimes text fragments don't have Nodes associated with them (like
when |
1161 // CSS content is used to insert text or when a RenderCounter is used.) | 1155 // CSS content is used to insert text or when a RenderCounter is used.) |
1162 RenderText* renderTextObject = toRenderText(m_renderer); | 1156 RenderText* renderTextObject = toRenderText(m_renderer); |
1163 if (renderTextObject->isTextFragment()) | 1157 if (renderTextObject->isTextFragment()) |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1312 if (isHTMLAreaElement(node)) | 1306 if (isHTMLAreaElement(node)) |
1313 return accessibilityImageMapHitTest(toHTMLAreaElement(node), point); | 1307 return accessibilityImageMapHitTest(toHTMLAreaElement(node), point); |
1314 | 1308 |
1315 if (node->hasTagName(optionTag)) | 1309 if (node->hasTagName(optionTag)) |
1316 node = toHTMLOptionElement(node)->ownerSelectElement(); | 1310 node = toHTMLOptionElement(node)->ownerSelectElement(); |
1317 | 1311 |
1318 RenderObject* obj = node->renderer(); | 1312 RenderObject* obj = node->renderer(); |
1319 if (!obj) | 1313 if (!obj) |
1320 return 0; | 1314 return 0; |
1321 | 1315 |
1322 AccessibilityObject* result = obj->document()->axObjectCache()->getOrCreate(
obj); | 1316 AccessibilityObject* result = obj->document().axObjectCache()->getOrCreate(o
bj); |
1323 result->updateChildrenIfNecessary(); | 1317 result->updateChildrenIfNecessary(); |
1324 | 1318 |
1325 // Allow the element to perform any hit-testing it might need to do to reach
non-render children. | 1319 // Allow the element to perform any hit-testing it might need to do to reach
non-render children. |
1326 result = result->elementAccessibilityHitTest(point); | 1320 result = result->elementAccessibilityHitTest(point); |
1327 | 1321 |
1328 if (result && result->accessibilityIsIgnored()) { | 1322 if (result && result->accessibilityIsIgnored()) { |
1329 // If this element is the label of a control, a hit test should return t
he control. | 1323 // If this element is the label of a control, a hit test should return t
he control. |
1330 if (result->isAccessibilityRenderObject()) { | 1324 if (result->isAccessibilityRenderObject()) { |
1331 AccessibilityObject* controlObject = static_cast<AccessibilityRender
Object*>(result)->correspondingControlForLabelElement(); | 1325 AccessibilityObject* controlObject = static_cast<AccessibilityRender
Object*>(result)->correspondingControlForLabelElement(); |
1332 if (controlObject && !controlObject->exposesTitleUIElement()) | 1326 if (controlObject && !controlObject->exposesTitleUIElement()) |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1512 // | 1506 // |
1513 | 1507 |
1514 double AccessibilityRenderObject::estimatedLoadingProgress() const | 1508 double AccessibilityRenderObject::estimatedLoadingProgress() const |
1515 { | 1509 { |
1516 if (!m_renderer) | 1510 if (!m_renderer) |
1517 return 0; | 1511 return 0; |
1518 | 1512 |
1519 if (isLoaded()) | 1513 if (isLoaded()) |
1520 return 1.0; | 1514 return 1.0; |
1521 | 1515 |
1522 if (Page* page = m_renderer->document()->page()) | 1516 if (Page* page = m_renderer->document().page()) |
1523 return page->progress().estimatedProgress(); | 1517 return page->progress().estimatedProgress(); |
1524 return 0; | 1518 return 0; |
1525 } | 1519 } |
1526 | 1520 |
1527 // | 1521 // |
1528 // DOM and Render tree access. | 1522 // DOM and Render tree access. |
1529 // | 1523 // |
1530 | 1524 |
1531 Node* AccessibilityRenderObject::node() const | 1525 Node* AccessibilityRenderObject::node() const |
1532 { | 1526 { |
1533 return m_renderer ? m_renderer->node() : 0; | 1527 return m_renderer ? m_renderer->node() : 0; |
1534 } | 1528 } |
1535 | 1529 |
1536 Document* AccessibilityRenderObject::document() const | 1530 Document* AccessibilityRenderObject::document() const |
1537 { | 1531 { |
1538 if (!m_renderer) | 1532 if (!m_renderer) |
1539 return 0; | 1533 return 0; |
1540 return m_renderer->document(); | 1534 return &m_renderer->document(); |
1541 } | 1535 } |
1542 | 1536 |
1543 FrameView* AccessibilityRenderObject::documentFrameView() const | 1537 FrameView* AccessibilityRenderObject::documentFrameView() const |
1544 { | 1538 { |
1545 if (!m_renderer || !m_renderer->document()) | 1539 if (!m_renderer) |
1546 return 0; | 1540 return 0; |
1547 | 1541 |
1548 // this is the RenderObject's Document's Frame's FrameView | 1542 // this is the RenderObject's Document's Frame's FrameView |
1549 return m_renderer->document()->view(); | 1543 return m_renderer->document().view(); |
1550 } | 1544 } |
1551 | 1545 |
1552 Element* AccessibilityRenderObject::anchorElement() const | 1546 Element* AccessibilityRenderObject::anchorElement() const |
1553 { | 1547 { |
1554 if (!m_renderer) | 1548 if (!m_renderer) |
1555 return 0; | 1549 return 0; |
1556 | 1550 |
1557 AXObjectCache* cache = axObjectCache(); | 1551 AXObjectCache* cache = axObjectCache(); |
1558 RenderObject* currRenderer; | 1552 RenderObject* currRenderer; |
1559 | 1553 |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1639 // | 1633 // |
1640 | 1634 |
1641 void AccessibilityRenderObject::setSelectedTextRange(const PlainTextRange& range
) | 1635 void AccessibilityRenderObject::setSelectedTextRange(const PlainTextRange& range
) |
1642 { | 1636 { |
1643 if (isNativeTextControl() && m_renderer->isTextControl()) { | 1637 if (isNativeTextControl() && m_renderer->isTextControl()) { |
1644 HTMLTextFormControlElement* textControl = toRenderTextControl(m_renderer
)->textFormControlElement(); | 1638 HTMLTextFormControlElement* textControl = toRenderTextControl(m_renderer
)->textFormControlElement(); |
1645 textControl->setSelectionRange(range.start, range.start + range.length); | 1639 textControl->setSelectionRange(range.start, range.start + range.length); |
1646 return; | 1640 return; |
1647 } | 1641 } |
1648 | 1642 |
1649 Document* document = m_renderer->document(); | 1643 Document& document = m_renderer->document(); |
1650 if (!document) | 1644 Frame* frame = document.frame(); |
1651 return; | |
1652 Frame* frame = document->frame(); | |
1653 if (!frame) | 1645 if (!frame) |
1654 return; | 1646 return; |
1655 Node* node = m_renderer->node(); | 1647 Node* node = m_renderer->node(); |
1656 frame->selection()->setSelection(VisibleSelection(Position(node, range.start
, Position::PositionIsOffsetInAnchor), | 1648 frame->selection()->setSelection(VisibleSelection(Position(node, range.start
, Position::PositionIsOffsetInAnchor), |
1657 Position(node, range.start + range.length, Position::PositionIsOffsetInA
nchor), DOWNSTREAM)); | 1649 Position(node, range.start + range.length, Position::PositionIsOffsetInA
nchor), DOWNSTREAM)); |
1658 } | 1650 } |
1659 | 1651 |
1660 void AccessibilityRenderObject::setValue(const String& string) | 1652 void AccessibilityRenderObject::setValue(const String& string) |
1661 { | 1653 { |
1662 if (!m_renderer || !m_renderer->node() || !m_renderer->node()->isElementNode
()) | 1654 if (!m_renderer || !m_renderer->node() || !m_renderer->node()->isElementNode
()) |
(...skipping 27 matching lines...) Expand all Loading... |
1690 | 1682 |
1691 // | 1683 // |
1692 // Notifications that this object may have changed. | 1684 // Notifications that this object may have changed. |
1693 // | 1685 // |
1694 | 1686 |
1695 void AccessibilityRenderObject::handleActiveDescendantChanged() | 1687 void AccessibilityRenderObject::handleActiveDescendantChanged() |
1696 { | 1688 { |
1697 Element* element = toElement(renderer()->node()); | 1689 Element* element = toElement(renderer()->node()); |
1698 if (!element) | 1690 if (!element) |
1699 return; | 1691 return; |
1700 Document* doc = renderer()->document(); | 1692 Document& doc = renderer()->document(); |
1701 if (!doc->frame()->selection()->isFocusedAndActive() || doc->focusedElement(
) != element) | 1693 if (!doc.frame()->selection()->isFocusedAndActive() || doc.focusedElement()
!= element) |
1702 return; | 1694 return; |
1703 AccessibilityRenderObject* activedescendant = static_cast<AccessibilityRende
rObject*>(activeDescendant()); | 1695 AccessibilityRenderObject* activedescendant = static_cast<AccessibilityRende
rObject*>(activeDescendant()); |
1704 | 1696 |
1705 if (activedescendant && shouldNotifyActiveDescendant()) | 1697 if (activedescendant && shouldNotifyActiveDescendant()) |
1706 doc->axObjectCache()->postNotification(m_renderer, AXObjectCache::AXActi
veDescendantChanged, true); | 1698 doc.axObjectCache()->postNotification(m_renderer, AXObjectCache::AXActiv
eDescendantChanged, true); |
1707 } | 1699 } |
1708 | 1700 |
1709 void AccessibilityRenderObject::handleAriaExpandedChanged() | 1701 void AccessibilityRenderObject::handleAriaExpandedChanged() |
1710 { | 1702 { |
1711 // Find if a parent of this object should handle aria-expanded changes. | 1703 // Find if a parent of this object should handle aria-expanded changes. |
1712 AccessibilityObject* containerParent = this->parentObject(); | 1704 AccessibilityObject* containerParent = this->parentObject(); |
1713 while (containerParent) { | 1705 while (containerParent) { |
1714 bool foundParent = false; | 1706 bool foundParent = false; |
1715 | 1707 |
1716 switch (containerParent->roleValue()) { | 1708 switch (containerParent->roleValue()) { |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1767 if (!allowsTextRanges() && !m_renderer->isText()) | 1759 if (!allowsTextRanges() && !m_renderer->isText()) |
1768 return VisiblePosition(); | 1760 return VisiblePosition(); |
1769 | 1761 |
1770 Node* node = m_renderer->node(); | 1762 Node* node = m_renderer->node(); |
1771 if (!node) | 1763 if (!node) |
1772 return VisiblePosition(); | 1764 return VisiblePosition(); |
1773 | 1765 |
1774 if (index <= 0) | 1766 if (index <= 0) |
1775 return VisiblePosition(firstPositionInOrBeforeNode(node), DOWNSTREAM); | 1767 return VisiblePosition(firstPositionInOrBeforeNode(node), DOWNSTREAM); |
1776 | 1768 |
1777 RefPtr<Range> range = Range::create(m_renderer->document()); | 1769 RefPtr<Range> range = Range::create(&m_renderer->document()); |
1778 range->selectNodeContents(node, IGNORE_EXCEPTION); | 1770 range->selectNodeContents(node, IGNORE_EXCEPTION); |
1779 CharacterIterator it(range.get()); | 1771 CharacterIterator it(range.get()); |
1780 it.advance(index - 1); | 1772 it.advance(index - 1); |
1781 return VisiblePosition(Position(it.range()->endContainer(), it.range()->endO
ffset(), Position::PositionIsOffsetInAnch\ | 1773 return VisiblePosition(Position(it.range()->endContainer(), it.range()->endO
ffset(), Position::PositionIsOffsetInAnch\ |
1782 or), UPSTREAM); | 1774 or), UPSTREAM); |
1783 } | 1775 } |
1784 | 1776 |
1785 int AccessibilityRenderObject::indexForVisiblePosition(const VisiblePosition& po
s) const | 1777 int AccessibilityRenderObject::indexForVisiblePosition(const VisiblePosition& po
s) const |
1786 { | 1778 { |
1787 if (isNativeTextControl() && m_renderer->isTextControl()) { | 1779 if (isNativeTextControl() && m_renderer->isTextControl()) { |
1788 HTMLTextFormControlElement* textControl = toRenderTextControl(m_renderer
)->textFormControlElement(); | 1780 HTMLTextFormControlElement* textControl = toRenderTextControl(m_renderer
)->textFormControlElement(); |
1789 return textControl->indexForVisiblePosition(pos); | 1781 return textControl->indexForVisiblePosition(pos); |
1790 } | 1782 } |
1791 | 1783 |
1792 if (!isTextControl()) | 1784 if (!isTextControl()) |
1793 return 0; | 1785 return 0; |
1794 | 1786 |
1795 Node* node = m_renderer->node(); | 1787 Node* node = m_renderer->node(); |
1796 if (!node) | 1788 if (!node) |
1797 return 0; | 1789 return 0; |
1798 | 1790 |
1799 Position indexPosition = pos.deepEquivalent(); | 1791 Position indexPosition = pos.deepEquivalent(); |
1800 if (indexPosition.isNull() || highestEditableRoot(indexPosition, HasEditable
AXRole) != node) | 1792 if (indexPosition.isNull() || highestEditableRoot(indexPosition, HasEditable
AXRole) != node) |
1801 return 0; | 1793 return 0; |
1802 | 1794 |
1803 RefPtr<Range> range = Range::create(m_renderer->document()); | 1795 RefPtr<Range> range = Range::create(&m_renderer->document()); |
1804 range->setStart(node, 0, IGNORE_EXCEPTION); | 1796 range->setStart(node, 0, IGNORE_EXCEPTION); |
1805 range->setEnd(indexPosition, IGNORE_EXCEPTION); | 1797 range->setEnd(indexPosition, IGNORE_EXCEPTION); |
1806 | 1798 |
1807 return TextIterator::rangeLength(range.get()); | 1799 return TextIterator::rangeLength(range.get()); |
1808 } | 1800 } |
1809 | 1801 |
1810 void AccessibilityRenderObject::lineBreaks(Vector<int>& lineBreaks) const | 1802 void AccessibilityRenderObject::lineBreaks(Vector<int>& lineBreaks) const |
1811 { | 1803 { |
1812 if (!isTextControl()) | 1804 if (!isTextControl()) |
1813 return; | 1805 return; |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1961 if (!isHTMLAnchorElement(element)) | 1953 if (!isHTMLAnchorElement(element)) |
1962 return 0; | 1954 return 0; |
1963 HTMLAnchorElement* anchor = toHTMLAnchorElement(element); | 1955 HTMLAnchorElement* anchor = toHTMLAnchorElement(element); |
1964 | 1956 |
1965 KURL linkURL = anchor->href(); | 1957 KURL linkURL = anchor->href(); |
1966 String fragmentIdentifier = linkURL.fragmentIdentifier(); | 1958 String fragmentIdentifier = linkURL.fragmentIdentifier(); |
1967 if (fragmentIdentifier.isEmpty()) | 1959 if (fragmentIdentifier.isEmpty()) |
1968 return 0; | 1960 return 0; |
1969 | 1961 |
1970 // check if URL is the same as current URL | 1962 // check if URL is the same as current URL |
1971 KURL documentURL = m_renderer->document()->url(); | 1963 KURL documentURL = m_renderer->document().url(); |
1972 if (!equalIgnoringFragmentIdentifier(documentURL, linkURL)) | 1964 if (!equalIgnoringFragmentIdentifier(documentURL, linkURL)) |
1973 return 0; | 1965 return 0; |
1974 | 1966 |
1975 Node* linkedNode = m_renderer->document()->findAnchor(fragmentIdentifier); | 1967 Node* linkedNode = m_renderer->document().findAnchor(fragmentIdentifier); |
1976 if (!linkedNode) | 1968 if (!linkedNode) |
1977 return 0; | 1969 return 0; |
1978 | 1970 |
1979 // The element we find may not be accessible, so find the first accessible o
bject. | 1971 // The element we find may not be accessible, so find the first accessible o
bject. |
1980 return firstAccessibleObjectFromNode(linkedNode); | 1972 return firstAccessibleObjectFromNode(linkedNode); |
1981 } | 1973 } |
1982 | 1974 |
1983 AccessibilityObject* AccessibilityRenderObject::accessibilityImageMapHitTest(HTM
LAreaElement* area, const IntPoint& point) const | 1975 AccessibilityObject* AccessibilityRenderObject::accessibilityImageMapHitTest(HTM
LAreaElement* area, const IntPoint& point) const |
1984 { | 1976 { |
1985 if (!area) | 1977 if (!area) |
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2386 if (label && label->renderer()) { | 2378 if (label && label->renderer()) { |
2387 LayoutRect labelRect = axObjectCache()->getOrCreate(label)->elementR
ect(); | 2379 LayoutRect labelRect = axObjectCache()->getOrCreate(label)->elementR
ect(); |
2388 result.unite(labelRect); | 2380 result.unite(labelRect); |
2389 } | 2381 } |
2390 } | 2382 } |
2391 | 2383 |
2392 return result; | 2384 return result; |
2393 } | 2385 } |
2394 | 2386 |
2395 } // namespace WebCore | 2387 } // namespace WebCore |
OLD | NEW |