| 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 |