Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Side by Side Diff: third_party/WebKit/Source/modules/accessibility/AXLayoutObject.cpp

Issue 2804383002: Replace ASSERT with DCHECK in modules/accessibility (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 LayoutObject* prev = layoutObject; 161 LayoutObject* prev = layoutObject;
162 LayoutObject* cur = layoutObject; 162 LayoutObject* cur = layoutObject;
163 163
164 if (!cur->isLayoutInline() && !cur->isLayoutBlockFlow()) 164 if (!cur->isLayoutInline() && !cur->isLayoutBlockFlow())
165 return layoutObject; 165 return layoutObject;
166 166
167 while (cur) { 167 while (cur) {
168 prev = cur; 168 prev = cur;
169 if (cur->isLayoutInline()) { 169 if (cur->isLayoutInline()) {
170 cur = toLayoutInline(cur)->inlineElementContinuation(); 170 cur = toLayoutInline(cur)->inlineElementContinuation();
171 ASSERT(cur || !toLayoutInline(prev)->continuation()); 171 DCHECK(cur || !toLayoutInline(prev)->continuation());
172 } else { 172 } else {
173 cur = toLayoutBlockFlow(cur)->inlineElementContinuation(); 173 cur = toLayoutBlockFlow(cur)->inlineElementContinuation();
174 } 174 }
175 } 175 }
176 176
177 return prev; 177 return prev;
178 } 178 }
179 179
180 static inline bool lastChildHasContinuation(LayoutObject* layoutObject) { 180 static inline bool lastChildHasContinuation(LayoutObject* layoutObject) {
181 LayoutObject* lastChild = layoutObject->slowLastChild(); 181 LayoutObject* lastChild = layoutObject->slowLastChild();
182 return lastChild && isInlineWithContinuation(lastChild); 182 return lastChild && isInlineWithContinuation(lastChild);
183 } 183 }
184 184
185 static LayoutBoxModelObject* nextContinuation(LayoutObject* layoutObject) { 185 static LayoutBoxModelObject* nextContinuation(LayoutObject* layoutObject) {
186 ASSERT(layoutObject); 186 DCHECK(layoutObject);
187 if (layoutObject->isLayoutInline() && !layoutObject->isAtomicInlineLevel()) 187 if (layoutObject->isLayoutInline() && !layoutObject->isAtomicInlineLevel())
188 return toLayoutInline(layoutObject)->continuation(); 188 return toLayoutInline(layoutObject)->continuation();
189 if (layoutObject->isLayoutBlockFlow()) 189 if (layoutObject->isLayoutBlockFlow())
190 return toLayoutBlockFlow(layoutObject)->inlineElementContinuation(); 190 return toLayoutBlockFlow(layoutObject)->inlineElementContinuation();
191 return 0; 191 return 0;
192 } 192 }
193 193
194 AXLayoutObject::AXLayoutObject(LayoutObject* layoutObject, 194 AXLayoutObject::AXLayoutObject(LayoutObject* layoutObject,
195 AXObjectCacheImpl& axObjectCache) 195 AXObjectCacheImpl& axObjectCache)
196 : AXNodeObject(layoutObject->node(), axObjectCache), 196 : AXNodeObject(layoutObject->node(), axObjectCache),
197 m_layoutObject(layoutObject) { 197 m_layoutObject(layoutObject) {
198 #if DCHECK_IS_ON() 198 #if DCHECK_IS_ON()
199 m_layoutObject->setHasAXObject(true); 199 m_layoutObject->setHasAXObject(true);
200 #endif 200 #endif
201 } 201 }
202 202
203 AXLayoutObject* AXLayoutObject::create(LayoutObject* layoutObject, 203 AXLayoutObject* AXLayoutObject::create(LayoutObject* layoutObject,
204 AXObjectCacheImpl& axObjectCache) { 204 AXObjectCacheImpl& axObjectCache) {
205 return new AXLayoutObject(layoutObject, axObjectCache); 205 return new AXLayoutObject(layoutObject, axObjectCache);
206 } 206 }
207 207
208 AXLayoutObject::~AXLayoutObject() { 208 AXLayoutObject::~AXLayoutObject() {
209 ASSERT(isDetached()); 209 DCHECK(isDetached());
210 } 210 }
211 211
212 LayoutBoxModelObject* AXLayoutObject::getLayoutBoxModelObject() const { 212 LayoutBoxModelObject* AXLayoutObject::getLayoutBoxModelObject() const {
213 if (!m_layoutObject || !m_layoutObject->isBoxModelObject()) 213 if (!m_layoutObject || !m_layoutObject->isBoxModelObject())
214 return 0; 214 return 0;
215 return toLayoutBoxModelObject(m_layoutObject); 215 return toLayoutBoxModelObject(m_layoutObject);
216 } 216 }
217 217
218 ScrollableArea* AXLayoutObject::getScrollableAreaIfScrollable() const { 218 ScrollableArea* AXLayoutObject::getScrollableAreaIfScrollable() const {
219 if (isWebArea()) 219 if (isWebArea())
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 return false; 388 return false;
389 389
390 return !toHTMLAnchorElement(*anchor).href().isEmpty(); 390 return !toHTMLAnchorElement(*anchor).href().isEmpty();
391 } 391 }
392 392
393 bool AXLayoutObject::isLoaded() const { 393 bool AXLayoutObject::isLoaded() const {
394 return !m_layoutObject->document().parser(); 394 return !m_layoutObject->document().parser();
395 } 395 }
396 396
397 bool AXLayoutObject::isOffScreen() const { 397 bool AXLayoutObject::isOffScreen() const {
398 ASSERT(m_layoutObject); 398 DCHECK(m_layoutObject);
399 IntRect contentRect = 399 IntRect contentRect =
400 pixelSnappedIntRect(m_layoutObject->absoluteVisualRect()); 400 pixelSnappedIntRect(m_layoutObject->absoluteVisualRect());
401 FrameView* view = m_layoutObject->frame()->view(); 401 FrameView* view = m_layoutObject->frame()->view();
402 IntRect viewRect = view->visibleContentRect(); 402 IntRect viewRect = view->visibleContentRect();
403 viewRect.intersect(contentRect); 403 viewRect.intersect(contentRect);
404 return viewRect.isEmpty(); 404 return viewRect.isEmpty();
405 } 405 }
406 406
407 bool AXLayoutObject::isReadOnly() const { 407 bool AXLayoutObject::isReadOnly() const {
408 ASSERT(m_layoutObject); 408 DCHECK(m_layoutObject);
409 409
410 if (isWebArea()) { 410 if (isWebArea()) {
411 Document& document = m_layoutObject->document(); 411 Document& document = m_layoutObject->document();
412 HTMLElement* body = document.body(); 412 HTMLElement* body = document.body();
413 if (body && hasEditableStyle(*body)) { 413 if (body && hasEditableStyle(*body)) {
414 AXObject* axBody = axObjectCache().getOrCreate(body); 414 AXObject* axBody = axObjectCache().getOrCreate(body);
415 return !axBody || axBody == axBody->ariaHiddenRoot(); 415 return !axBody || axBody == axBody->ariaHiddenRoot();
416 } 416 }
417 417
418 return !hasEditableStyle(document); 418 return !hasEditableStyle(document);
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 ignoredReasons->push_back(IgnoredReason(AXNotVisible)); 499 ignoredReasons->push_back(IgnoredReason(AXNotVisible));
500 return IgnoreObject; 500 return IgnoreObject;
501 } 501 }
502 502
503 return AXObject::defaultObjectInclusion(ignoredReasons); 503 return AXObject::defaultObjectInclusion(ignoredReasons);
504 } 504 }
505 505
506 bool AXLayoutObject::computeAccessibilityIsIgnored( 506 bool AXLayoutObject::computeAccessibilityIsIgnored(
507 IgnoredReasons* ignoredReasons) const { 507 IgnoredReasons* ignoredReasons) const {
508 #if DCHECK_IS_ON() 508 #if DCHECK_IS_ON()
509 ASSERT(m_initialized); 509 DCHECK(m_initialized);
510 #endif 510 #endif
511 511
512 if (!m_layoutObject) 512 if (!m_layoutObject)
513 return true; 513 return true;
514 514
515 // Check first if any of the common reasons cause this element to be ignored. 515 // Check first if any of the common reasons cause this element to be ignored.
516 // Then process other use cases that need to be applied to all the various 516 // Then process other use cases that need to be applied to all the various
517 // roles that AXLayoutObjects take on. 517 // roles that AXLayoutObjects take on.
518 AXObjectInclusion decision = defaultObjectInclusion(ignoredReasons); 518 AXObjectInclusion decision = defaultObjectInclusion(ignoredReasons);
519 if (decision == IncludeObject) 519 if (decision == IncludeObject)
(...skipping 922 matching lines...) Expand 10 before | Expand all | Expand 10 after
1442 return remoteSVGElementHitTest(point); 1442 return remoteSVGElementHitTest(point);
1443 1443
1444 return AXObject::elementAccessibilityHitTest(point); 1444 return AXObject::elementAccessibilityHitTest(point);
1445 } 1445 }
1446 1446
1447 // 1447 //
1448 // High-level accessibility tree access. 1448 // High-level accessibility tree access.
1449 // 1449 //
1450 1450
1451 AXObject* AXLayoutObject::computeParent() const { 1451 AXObject* AXLayoutObject::computeParent() const {
1452 ASSERT(!isDetached()); 1452 DCHECK(!isDetached());
1453 if (!m_layoutObject) 1453 if (!m_layoutObject)
1454 return 0; 1454 return 0;
1455 1455
1456 if (ariaRoleAttribute() == MenuBarRole) 1456 if (ariaRoleAttribute() == MenuBarRole)
1457 return axObjectCache().getOrCreate(m_layoutObject->parent()); 1457 return axObjectCache().getOrCreate(m_layoutObject->parent());
1458 1458
1459 // menuButton and its corresponding menu are DOM siblings, but Accessibility 1459 // menuButton and its corresponding menu are DOM siblings, but Accessibility
1460 // needs them to be parent/child. 1460 // needs them to be parent/child.
1461 if (ariaRoleAttribute() == MenuRole) { 1461 if (ariaRoleAttribute() == MenuRole) {
1462 AXObject* parent = menuButtonForMenu(); 1462 AXObject* parent = menuButtonForMenu();
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
1572 } 1572 }
1573 } 1573 }
1574 1574
1575 if (!nextSibling) 1575 if (!nextSibling)
1576 return 0; 1576 return 0;
1577 1577
1578 return axObjectCache().getOrCreate(nextSibling); 1578 return axObjectCache().getOrCreate(nextSibling);
1579 } 1579 }
1580 1580
1581 void AXLayoutObject::addChildren() { 1581 void AXLayoutObject::addChildren() {
1582 ASSERT(!isDetached()); 1582 DCHECK(!isDetached());
1583 // If the need to add more children in addition to existing children arises, 1583 // If the need to add more children in addition to existing children arises,
1584 // childrenChanged should have been called, leaving the object with no 1584 // childrenChanged should have been called, leaving the object with no
1585 // children. 1585 // children.
1586 ASSERT(!m_haveChildren); 1586 DCHECK(!m_haveChildren);
1587 1587
1588 m_haveChildren = true; 1588 m_haveChildren = true;
1589 1589
1590 if (!canHaveChildren()) 1590 if (!canHaveChildren())
1591 return; 1591 return;
1592 1592
1593 HeapVector<Member<AXObject>> ownedChildren; 1593 HeapVector<Member<AXObject>> ownedChildren;
1594 computeAriaOwnsChildren(ownedChildren); 1594 computeAriaOwnsChildren(ownedChildren);
1595 1595
1596 for (AXObject* obj = rawFirstChild(); obj; obj = obj->rawNextSibling()) { 1596 for (AXObject* obj = rawFirstChild(); obj; obj = obj->rawNextSibling()) {
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
1736 return AXRange(); 1736 return AXRange();
1737 1737
1738 VisiblePosition visibleStart = selection.visibleStart(); 1738 VisiblePosition visibleStart = selection.visibleStart();
1739 Position start = visibleStart.toParentAnchoredPosition(); 1739 Position start = visibleStart.toParentAnchoredPosition();
1740 TextAffinity startAffinity = visibleStart.affinity(); 1740 TextAffinity startAffinity = visibleStart.affinity();
1741 VisiblePosition visibleEnd = selection.visibleEnd(); 1741 VisiblePosition visibleEnd = selection.visibleEnd();
1742 Position end = visibleEnd.toParentAnchoredPosition(); 1742 Position end = visibleEnd.toParentAnchoredPosition();
1743 TextAffinity endAffinity = visibleEnd.affinity(); 1743 TextAffinity endAffinity = visibleEnd.affinity();
1744 1744
1745 Node* anchorNode = start.anchorNode(); 1745 Node* anchorNode = start.anchorNode();
1746 ASSERT(anchorNode); 1746 DCHECK(anchorNode);
1747 1747
1748 AXLayoutObject* anchorObject = nullptr; 1748 AXLayoutObject* anchorObject = nullptr;
1749 // Find the closest node that has a corresponding AXObject. 1749 // Find the closest node that has a corresponding AXObject.
1750 // This is because some nodes may be aria hidden or might not even have 1750 // This is because some nodes may be aria hidden or might not even have
1751 // a layout object if they are part of the shadow DOM. 1751 // a layout object if they are part of the shadow DOM.
1752 while (anchorNode) { 1752 while (anchorNode) {
1753 anchorObject = getUnignoredObjectFromNode(*anchorNode); 1753 anchorObject = getUnignoredObjectFromNode(*anchorNode);
1754 if (anchorObject) 1754 if (anchorObject)
1755 break; 1755 break;
1756 1756
1757 if (anchorNode->nextSibling()) 1757 if (anchorNode->nextSibling())
1758 anchorNode = anchorNode->nextSibling(); 1758 anchorNode = anchorNode->nextSibling();
1759 else 1759 else
1760 anchorNode = anchorNode->parentNode(); 1760 anchorNode = anchorNode->parentNode();
1761 } 1761 }
1762 1762
1763 Node* focusNode = end.anchorNode(); 1763 Node* focusNode = end.anchorNode();
1764 ASSERT(focusNode); 1764 DCHECK(focusNode);
1765 1765
1766 AXLayoutObject* focusObject = nullptr; 1766 AXLayoutObject* focusObject = nullptr;
1767 while (focusNode) { 1767 while (focusNode) {
1768 focusObject = getUnignoredObjectFromNode(*focusNode); 1768 focusObject = getUnignoredObjectFromNode(*focusNode);
1769 if (focusObject) 1769 if (focusObject)
1770 break; 1770 break;
1771 1771
1772 if (focusNode->previousSibling()) 1772 if (focusNode->previousSibling())
1773 focusNode = focusNode->previousSibling(); 1773 focusNode = focusNode->previousSibling();
1774 else 1774 else
1775 focusNode = focusNode->parentNode(); 1775 focusNode = focusNode->parentNode();
1776 } 1776 }
1777 1777
1778 if (!anchorObject || !focusObject) 1778 if (!anchorObject || !focusObject)
1779 return AXRange(); 1779 return AXRange();
1780 1780
1781 int anchorOffset = anchorObject->indexForVisiblePosition(visibleStart); 1781 int anchorOffset = anchorObject->indexForVisiblePosition(visibleStart);
1782 ASSERT(anchorOffset >= 0); 1782 DCHECK(anchorOffset >= 0);
tkent 2017/04/09 23:21:22 Use DCHECK_GE
1783 int focusOffset = focusObject->indexForVisiblePosition(visibleEnd); 1783 int focusOffset = focusObject->indexForVisiblePosition(visibleEnd);
1784 ASSERT(focusOffset >= 0); 1784 DCHECK(focusOffset >= 0);
tkent 2017/04/09 23:21:22 Use DCHECK_GE
1785 return AXRange(anchorObject, anchorOffset, startAffinity, focusObject, 1785 return AXRange(anchorObject, anchorOffset, startAffinity, focusObject,
1786 focusOffset, endAffinity); 1786 focusOffset, endAffinity);
1787 } 1787 }
1788 1788
1789 // Gets only the start and end offsets of the selection computed using the 1789 // Gets only the start and end offsets of the selection computed using the
1790 // current object as the starting point. Returns a null selection if there is 1790 // current object as the starting point. Returns a null selection if there is
1791 // no selection in the subtree rooted at this object. 1791 // no selection in the subtree rooted at this object.
1792 AXObject::AXRange AXLayoutObject::selectionUnderObject() const { 1792 AXObject::AXRange AXLayoutObject::selectionUnderObject() const {
1793 AXRange textSelection = textControlSelection(); 1793 AXRange textSelection = textControlSelection();
1794 if (textSelection.isValid()) 1794 if (textSelection.isValid())
(...skipping 15 matching lines...) Expand all
1810 || 1810 ||
1811 !(parentNode && 1811 !(parentNode &&
1812 selectionRange->comparePoint(parentNode, nodeIndex, 1812 selectionRange->comparePoint(parentNode, nodeIndex,
1813 IGNORE_EXCEPTION_FOR_TESTING) < 0 && 1813 IGNORE_EXCEPTION_FOR_TESTING) < 0 &&
1814 selectionRange->comparePoint(parentNode, nodeIndex + 1, 1814 selectionRange->comparePoint(parentNode, nodeIndex + 1,
1815 IGNORE_EXCEPTION_FOR_TESTING) > 0)) { 1815 IGNORE_EXCEPTION_FOR_TESTING) > 0)) {
1816 return AXRange(); 1816 return AXRange();
1817 } 1817 }
1818 1818
1819 int start = indexForVisiblePosition(selection.visibleStart()); 1819 int start = indexForVisiblePosition(selection.visibleStart());
1820 ASSERT(start >= 0); 1820 DCHECK(start >= 0);
tkent 2017/04/09 23:21:22 Use DCHECK_GE
1821 int end = indexForVisiblePosition(selection.visibleEnd()); 1821 int end = indexForVisiblePosition(selection.visibleEnd());
1822 ASSERT(end >= 0); 1822 DCHECK(end >= 0);
tkent 2017/04/09 23:21:22 Use DCHECK_GE
1823 1823
1824 return AXRange(start, end); 1824 return AXRange(start, end);
1825 } 1825 }
1826 1826
1827 AXObject::AXRange AXLayoutObject::textControlSelection() const { 1827 AXObject::AXRange AXLayoutObject::textControlSelection() const {
1828 if (!getLayoutObject()) 1828 if (!getLayoutObject())
1829 return AXRange(); 1829 return AXRange();
1830 1830
1831 LayoutObject* layout = nullptr; 1831 LayoutObject* layout = nullptr;
1832 if (getLayoutObject()->isTextControl()) { 1832 if (getLayoutObject()->isTextControl()) {
1833 layout = getLayoutObject(); 1833 layout = getLayoutObject();
1834 } else { 1834 } else {
1835 Element* focusedElement = getDocument()->focusedElement(); 1835 Element* focusedElement = getDocument()->focusedElement();
1836 if (focusedElement && focusedElement->layoutObject() && 1836 if (focusedElement && focusedElement->layoutObject() &&
1837 focusedElement->layoutObject()->isTextControl()) 1837 focusedElement->layoutObject()->isTextControl())
1838 layout = focusedElement->layoutObject(); 1838 layout = focusedElement->layoutObject();
1839 } 1839 }
1840 1840
1841 if (!layout) 1841 if (!layout)
1842 return AXRange(); 1842 return AXRange();
1843 1843
1844 AXObject* axObject = axObjectCache().getOrCreate(layout); 1844 AXObject* axObject = axObjectCache().getOrCreate(layout);
1845 if (!axObject || !axObject->isAXLayoutObject()) 1845 if (!axObject || !axObject->isAXLayoutObject())
1846 return AXRange(); 1846 return AXRange();
1847 1847
1848 VisibleSelection selection = 1848 VisibleSelection selection =
1849 layout->frame()->selection().computeVisibleSelectionInDOMTreeDeprecated(); 1849 layout->frame()->selection().computeVisibleSelectionInDOMTreeDeprecated();
1850 TextControlElement* textControl = 1850 TextControlElement* textControl =
1851 toLayoutTextControl(layout)->textControlElement(); 1851 toLayoutTextControl(layout)->textControlElement();
1852 ASSERT(textControl); 1852 DCHECK(textControl);
1853 int start = textControl->selectionStart(); 1853 int start = textControl->selectionStart();
1854 int end = textControl->selectionEnd(); 1854 int end = textControl->selectionEnd();
1855 1855
1856 return AXRange(axObject, start, selection.visibleStart().affinity(), axObject, 1856 return AXRange(axObject, start, selection.visibleStart().affinity(), axObject,
1857 end, selection.visibleEnd().affinity()); 1857 end, selection.visibleEnd().affinity());
1858 } 1858 }
1859 1859
1860 int AXLayoutObject::indexForVisiblePosition( 1860 int AXLayoutObject::indexForVisiblePosition(
1861 const VisiblePosition& position) const { 1861 const VisiblePosition& position) const {
1862 if (getLayoutObject() && getLayoutObject()->isTextControl()) { 1862 if (getLayoutObject() && getLayoutObject()->isTextControl()) {
(...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after
2452 if (!map) 2452 if (!map)
2453 return; 2453 return;
2454 2454
2455 for (HTMLAreaElement& area : 2455 for (HTMLAreaElement& area :
2456 Traversal<HTMLAreaElement>::descendantsOf(*map)) { 2456 Traversal<HTMLAreaElement>::descendantsOf(*map)) {
2457 // add an <area> element for this child if it has a link 2457 // add an <area> element for this child if it has a link
2458 AXObject* obj = axObjectCache().getOrCreate(&area); 2458 AXObject* obj = axObjectCache().getOrCreate(&area);
2459 if (obj) { 2459 if (obj) {
2460 AXImageMapLink* areaObject = toAXImageMapLink(obj); 2460 AXImageMapLink* areaObject = toAXImageMapLink(obj);
2461 areaObject->setParent(this); 2461 areaObject->setParent(this);
2462 ASSERT(areaObject->axObjectID() != 0); 2462 DCHECK(areaObject->axObjectID() != 0);
tkent 2017/04/09 23:21:22 Use DCHECK_NE
2463 if (!areaObject->accessibilityIsIgnored()) 2463 if (!areaObject->accessibilityIsIgnored())
2464 m_children.push_back(areaObject); 2464 m_children.push_back(areaObject);
2465 else 2465 else
2466 axObjectCache().remove(areaObject->axObjectID()); 2466 axObjectCache().remove(areaObject->axObjectID());
2467 } 2467 }
2468 } 2468 }
2469 } 2469 }
2470 2470
2471 void AXLayoutObject::addCanvasChildren() { 2471 void AXLayoutObject::addCanvasChildren() {
2472 if (!isHTMLCanvasElement(getNode())) 2472 if (!isHTMLCanvasElement(getNode()))
2473 return; 2473 return;
2474 2474
2475 // If it's a canvas, it won't have laid out children, but it might have 2475 // If it's a canvas, it won't have laid out children, but it might have
2476 // accessible fallback content. Clear m_haveChildren because 2476 // accessible fallback content. Clear m_haveChildren because
2477 // AXNodeObject::addChildren will expect it to be false. 2477 // AXNodeObject::addChildren will expect it to be false.
2478 ASSERT(!m_children.size()); 2478 DCHECK(!m_children.size());
2479 m_haveChildren = false; 2479 m_haveChildren = false;
2480 AXNodeObject::addChildren(); 2480 AXNodeObject::addChildren();
2481 } 2481 }
2482 2482
2483 void AXLayoutObject::addPopupChildren() { 2483 void AXLayoutObject::addPopupChildren() {
2484 if (!isHTMLInputElement(getNode())) 2484 if (!isHTMLInputElement(getNode()))
2485 return; 2485 return;
2486 if (AXObject* axPopup = toHTMLInputElement(getNode())->popupRootAXObject()) 2486 if (AXObject* axPopup = toHTMLInputElement(getNode())->popupRootAXObject())
2487 m_children.push_back(axPopup); 2487 m_children.push_back(axPopup);
2488 } 2488 }
(...skipping 15 matching lines...) Expand all
2504 2504
2505 bool AXLayoutObject::elementAttributeValue( 2505 bool AXLayoutObject::elementAttributeValue(
2506 const QualifiedName& attributeName) const { 2506 const QualifiedName& attributeName) const {
2507 if (!m_layoutObject) 2507 if (!m_layoutObject)
2508 return false; 2508 return false;
2509 2509
2510 return equalIgnoringASCIICase(getAttribute(attributeName), "true"); 2510 return equalIgnoringASCIICase(getAttribute(attributeName), "true");
2511 } 2511 }
2512 2512
2513 } // namespace blink 2513 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698