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

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

Issue 2393003002: reflow comments in modules/accessiblity (Closed)
Patch Set: Created 4 years, 2 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, 2009, 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2008, 2009, 2011 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 623 matching lines...) Expand 10 before | Expand all | Expand 10 after
634 return false; 634 return false;
635 635
636 if (parent->supportsActiveDescendant() && 636 if (parent->supportsActiveDescendant() &&
637 !parent->getAttribute(aria_activedescendantAttr).isEmpty()) { 637 !parent->getAttribute(aria_activedescendantAttr).isEmpty()) {
638 return true; 638 return true;
639 } 639 }
640 640
641 return parent->ancestorExposesActiveDescendant(); 641 return parent->ancestorExposesActiveDescendant();
642 } 642 }
643 643
644 // Simplify whitespace, but preserve a single leading and trailing whitespace ch aracter if it's present. 644 // Simplify whitespace, but preserve a single leading and trailing whitespace
645 // character if it's present.
645 // static 646 // static
646 String AXObject::collapseWhitespace(const String& str) { 647 String AXObject::collapseWhitespace(const String& str) {
647 StringBuilder result; 648 StringBuilder result;
648 if (!str.isEmpty() && isHTMLSpace<UChar>(str[0])) 649 if (!str.isEmpty() && isHTMLSpace<UChar>(str[0]))
649 result.append(' '); 650 result.append(' ');
650 result.append(str.simplifyWhiteSpace(isHTMLSpace<UChar>)); 651 result.append(str.simplifyWhiteSpace(isHTMLSpace<UChar>));
651 if (!str.isEmpty() && isHTMLSpace<UChar>(str[str.length() - 1])) 652 if (!str.isEmpty() && isHTMLSpace<UChar>(str[str.length() - 1]))
652 result.append(' '); 653 result.append(' ');
653 return result.toString(); 654 return result.toString();
654 } 655 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
701 tmpNameFrom, nullptr, nullptr); 702 tmpNameFrom, nullptr, nullptr);
702 } 703 }
703 704
704 bool AXObject::isHiddenForTextAlternativeCalculation() const { 705 bool AXObject::isHiddenForTextAlternativeCalculation() const {
705 if (equalIgnoringCase(getAttribute(aria_hiddenAttr), "false")) 706 if (equalIgnoringCase(getAttribute(aria_hiddenAttr), "false"))
706 return false; 707 return false;
707 708
708 if (getLayoutObject()) 709 if (getLayoutObject())
709 return getLayoutObject()->style()->visibility() != EVisibility::Visible; 710 return getLayoutObject()->style()->visibility() != EVisibility::Visible;
710 711
711 // This is an obscure corner case: if a node has no LayoutObject, that means i t's not rendered, 712 // This is an obscure corner case: if a node has no LayoutObject, that means
712 // but we still may be exploring it as part of a text alternative calculation, for example if it 713 // it's not rendered, but we still may be exploring it as part of a text
713 // was explicitly referenced by aria-labelledby. So we need to explicitly call the style resolver 714 // alternative calculation, for example if it was explicitly referenced by
714 // to check whether it's invisible or display:none, rather than relying on the style cached in the 715 // aria-labelledby. So we need to explicitly call the style resolver to check
715 // LayoutObject. 716 // whether it's invisible or display:none, rather than relying on the style
717 // cached in the LayoutObject.
716 Document* doc = getDocument(); 718 Document* doc = getDocument();
717 if (doc && doc->frame() && getNode() && getNode()->isElementNode()) { 719 if (doc && doc->frame() && getNode() && getNode()->isElementNode()) {
718 RefPtr<ComputedStyle> style = 720 RefPtr<ComputedStyle> style =
719 doc->ensureStyleResolver().styleForElement(toElement(getNode())); 721 doc->ensureStyleResolver().styleForElement(toElement(getNode()));
720 return style->display() == EDisplay::None || 722 return style->display() == EDisplay::None ||
721 style->visibility() != EVisibility::Visible; 723 style->visibility() != EVisibility::Visible;
722 } 724 }
723 725
724 return false; 726 return false;
725 } 727 }
(...skipping 28 matching lines...) Expand all
754 nameSources->append(NameSource(*foundTextAlternative, attr)); 756 nameSources->append(NameSource(*foundTextAlternative, attr));
755 nameSources->last().type = nameFrom; 757 nameSources->last().type = nameFrom;
756 } 758 }
757 759
758 const AtomicString& ariaLabelledby = getAttribute(attr); 760 const AtomicString& ariaLabelledby = getAttribute(attr);
759 if (!ariaLabelledby.isNull()) { 761 if (!ariaLabelledby.isNull()) {
760 if (nameSources) 762 if (nameSources)
761 nameSources->last().attributeValue = ariaLabelledby; 763 nameSources->last().attributeValue = ariaLabelledby;
762 764
763 // Operate on a copy of |visited| so that if |nameSources| is not null, 765 // Operate on a copy of |visited| so that if |nameSources| is not null,
764 // the set of visited objects is preserved unmodified for future calculati ons. 766 // the set of visited objects is preserved unmodified for future
767 // calculations.
765 AXObjectSet visitedCopy = visited; 768 AXObjectSet visitedCopy = visited;
766 textAlternative = textFromAriaLabelledby(visitedCopy, relatedObjects); 769 textAlternative = textFromAriaLabelledby(visitedCopy, relatedObjects);
767 if (!textAlternative.isNull()) { 770 if (!textAlternative.isNull()) {
768 if (nameSources) { 771 if (nameSources) {
769 NameSource& source = nameSources->last(); 772 NameSource& source = nameSources->last();
770 source.type = nameFrom; 773 source.type = nameFrom;
771 source.relatedObjects = *relatedObjects; 774 source.relatedObjects = *relatedObjects;
772 source.text = textAlternative; 775 source.text = textAlternative;
773 *foundTextAlternative = true; 776 *foundTextAlternative = true;
774 } else { 777 } else {
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
1153 return object->documentFrameView(); 1156 return object->documentFrameView();
1154 } 1157 }
1155 1158
1156 String AXObject::language() const { 1159 String AXObject::language() const {
1157 const AtomicString& lang = getAttribute(langAttr); 1160 const AtomicString& lang = getAttribute(langAttr);
1158 if (!lang.isEmpty()) 1161 if (!lang.isEmpty())
1159 return lang; 1162 return lang;
1160 1163
1161 AXObject* parent = parentObject(); 1164 AXObject* parent = parentObject();
1162 1165
1163 // as a last resort, fall back to the content language specified in the meta t ag 1166 // As a last resort, fall back to the content language specified in the meta
1167 // tag.
1164 if (!parent) { 1168 if (!parent) {
1165 Document* doc = getDocument(); 1169 Document* doc = getDocument();
1166 if (doc) 1170 if (doc)
1167 return doc->contentLanguage(); 1171 return doc->contentLanguage();
1168 return nullAtom; 1172 return nullAtom;
1169 } 1173 }
1170 1174
1171 return parent->language(); 1175 return parent->language();
1172 } 1176 }
1173 1177
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1240 ProgrammaticScroll); 1244 ProgrammaticScroll);
1241 } 1245 }
1242 1246
1243 void AXObject::getRelativeBounds(AXObject** outContainer, 1247 void AXObject::getRelativeBounds(AXObject** outContainer,
1244 FloatRect& outBoundsInContainer, 1248 FloatRect& outBoundsInContainer,
1245 SkMatrix44& outContainerTransform) const { 1249 SkMatrix44& outContainerTransform) const {
1246 *outContainer = nullptr; 1250 *outContainer = nullptr;
1247 outBoundsInContainer = FloatRect(); 1251 outBoundsInContainer = FloatRect();
1248 outContainerTransform.setIdentity(); 1252 outContainerTransform.setIdentity();
1249 1253
1250 // First check if it has explicit bounds, for example if this element is tied to a 1254 // First check if it has explicit bounds, for example if this element is tied
1251 // canvas path. When explicit coordinates are provided, the ID of the explicit container 1255 // to a canvas path. When explicit coordinates are provided, the ID of the
1252 // element that the coordinates are relative to must be provided too. 1256 // explicit container element that the coordinates are relative to must be
1257 // provided too.
1253 if (!m_explicitElementRect.isEmpty()) { 1258 if (!m_explicitElementRect.isEmpty()) {
1254 *outContainer = axObjectCache().objectFromAXID(m_explicitContainerID); 1259 *outContainer = axObjectCache().objectFromAXID(m_explicitContainerID);
1255 if (*outContainer) { 1260 if (*outContainer) {
1256 outBoundsInContainer = FloatRect(m_explicitElementRect); 1261 outBoundsInContainer = FloatRect(m_explicitElementRect);
1257 return; 1262 return;
1258 } 1263 }
1259 } 1264 }
1260 1265
1261 LayoutObject* layoutObject = layoutObjectForRelativeBounds(); 1266 LayoutObject* layoutObject = layoutObjectForRelativeBounds();
1262 if (!layoutObject) 1267 if (!layoutObject)
1263 return; 1268 return;
1264 1269
1265 if (isWebArea()) { 1270 if (isWebArea()) {
1266 if (layoutObject->frame()->view()) 1271 if (layoutObject->frame()->view())
1267 outBoundsInContainer.setSize( 1272 outBoundsInContainer.setSize(
1268 FloatSize(layoutObject->frame()->view()->contentsSize())); 1273 FloatSize(layoutObject->frame()->view()->contentsSize()));
1269 return; 1274 return;
1270 } 1275 }
1271 1276
1272 // First compute the container. The container must be an ancestor in the acces sibility tree, and 1277 // First compute the container. The container must be an ancestor in the
1273 // its LayoutObject must be an ancestor in the layout tree. Get the first such ancestor that's 1278 // accessibility tree, and its LayoutObject must be an ancestor in the layout
1274 // either scrollable or has a paint layer. 1279 // tree. Get the first such ancestor that's either scrollable or has a paint
1280 // layer.
1275 AXObject* container = parentObjectUnignored(); 1281 AXObject* container = parentObjectUnignored();
1276 LayoutObject* containerLayoutObject = nullptr; 1282 LayoutObject* containerLayoutObject = nullptr;
1277 while (container) { 1283 while (container) {
1278 containerLayoutObject = container->getLayoutObject(); 1284 containerLayoutObject = container->getLayoutObject();
1279 if (containerLayoutObject && containerLayoutObject->isBoxModelObject() && 1285 if (containerLayoutObject && containerLayoutObject->isBoxModelObject() &&
1280 layoutObject->isDescendantOf(containerLayoutObject)) { 1286 layoutObject->isDescendantOf(containerLayoutObject)) {
1281 if (container->isScrollableContainer() || 1287 if (container->isScrollableContainer() ||
1282 containerLayoutObject->hasLayer()) 1288 containerLayoutObject->hasLayer())
1283 break; 1289 break;
1284 } 1290 }
1285 1291
1286 container = container->parentObjectUnignored(); 1292 container = container->parentObjectUnignored();
1287 } 1293 }
1288 1294
1289 if (!container) 1295 if (!container)
1290 return; 1296 return;
1291 *outContainer = container; 1297 *outContainer = container;
1292 outBoundsInContainer = layoutObject->localBoundingBoxRectForAccessibility(); 1298 outBoundsInContainer = layoutObject->localBoundingBoxRectForAccessibility();
1293 1299
1294 // If the container has a scroll offset, subtract that out because we want our 1300 // If the container has a scroll offset, subtract that out because we want our
1295 // bounds to be relative to the *unscrolled* position of the container object. 1301 // bounds to be relative to the *unscrolled* position of the container object.
1296 ScrollableArea* scrollableArea = container->getScrollableAreaIfScrollable(); 1302 ScrollableArea* scrollableArea = container->getScrollableAreaIfScrollable();
1297 if (scrollableArea && !container->isWebArea()) { 1303 if (scrollableArea && !container->isWebArea()) {
1298 IntPoint scrollPosition = scrollableArea->scrollPosition(); 1304 IntPoint scrollPosition = scrollableArea->scrollPosition();
1299 outBoundsInContainer.move( 1305 outBoundsInContainer.move(
1300 FloatSize(scrollPosition.x(), scrollPosition.y())); 1306 FloatSize(scrollPosition.x(), scrollPosition.y()));
1301 } 1307 }
1302 1308
1303 // Compute the transform between the container's coordinate space and this obj ect. 1309 // Compute the transform between the container's coordinate space and this
1304 // If the transform is just a simple translation, apply that to the bounding b ox, but 1310 // object. If the transform is just a simple translation, apply that to the
1305 // if it's a non-trivial transformation like a rotation, scaling, etc. then re turn 1311 // bounding box, but if it's a non-trivial transformation like a rotation,
1306 // the full matrix instead. 1312 // scaling, etc. then return the full matrix instead.
1307 TransformationMatrix transform = layoutObject->localToAncestorTransform( 1313 TransformationMatrix transform = layoutObject->localToAncestorTransform(
1308 toLayoutBoxModelObject(containerLayoutObject)); 1314 toLayoutBoxModelObject(containerLayoutObject));
1309 if (transform.isIdentityOr2DTranslation()) { 1315 if (transform.isIdentityOr2DTranslation()) {
1310 outBoundsInContainer.move(transform.to2DTranslation()); 1316 outBoundsInContainer.move(transform.to2DTranslation());
1311 } else { 1317 } else {
1312 outContainerTransform = TransformationMatrix::toSkMatrix44(transform); 1318 outContainerTransform = TransformationMatrix::toSkMatrix44(transform);
1313 } 1319 }
1314 } 1320 }
1315 1321
1316 LayoutRect AXObject::getBoundsInFrameCoordinates() const { 1322 LayoutRect AXObject::getBoundsInFrameCoordinates() const {
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
1424 return currentScrollOffset; 1430 return currentScrollOffset;
1425 1431
1426 // Subfocus must be within focus. 1432 // Subfocus must be within focus.
1427 subfocusMin = std::max(subfocusMin, objectMin); 1433 subfocusMin = std::max(subfocusMin, objectMin);
1428 subfocusMax = std::min(subfocusMax, objectMax); 1434 subfocusMax = std::min(subfocusMax, objectMax);
1429 1435
1430 // Subfocus must be no larger than the viewport size; favor top/left. 1436 // Subfocus must be no larger than the viewport size; favor top/left.
1431 if (subfocusMax - subfocusMin > viewportSize) 1437 if (subfocusMax - subfocusMin > viewportSize)
1432 subfocusMax = subfocusMin + viewportSize; 1438 subfocusMax = subfocusMin + viewportSize;
1433 1439
1434 // Compute the size of an object centered on the subfocus, the size of the v iewport. 1440 // Compute the size of an object centered on the subfocus, the size of the
1441 // viewport.
1435 int centeredObjectMin = (subfocusMin + subfocusMax - viewportSize) / 2; 1442 int centeredObjectMin = (subfocusMin + subfocusMax - viewportSize) / 2;
1436 int centeredObjectMax = centeredObjectMin + viewportSize; 1443 int centeredObjectMax = centeredObjectMin + viewportSize;
1437 1444
1438 objectMin = std::max(objectMin, centeredObjectMin); 1445 objectMin = std::max(objectMin, centeredObjectMin);
1439 objectMax = std::min(objectMax, centeredObjectMax); 1446 objectMax = std::min(objectMax, centeredObjectMax);
1440 } 1447 }
1441 1448
1442 // Exit now if the focus is already within the viewport. 1449 // Exit now if the focus is already within the viewport.
1443 if (objectMin - currentScrollOffset >= viewportMin && 1450 if (objectMin - currentScrollOffset >= viewportMin &&
1444 objectMax - currentScrollOffset <= viewportMax) 1451 objectMax - currentScrollOffset <= viewportMax)
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1491 pixelSnappedIntRect(scrollParent->getBoundsInFrameCoordinates()); 1498 pixelSnappedIntRect(scrollParent->getBoundsInFrameCoordinates());
1492 newSubfocus.move(newElementRect.x(), newElementRect.y()); 1499 newSubfocus.move(newElementRect.x(), newElementRect.y());
1493 newSubfocus.move(-scrollParentRect.x(), -scrollParentRect.y()); 1500 newSubfocus.move(-scrollParentRect.x(), -scrollParentRect.y());
1494 1501
1495 // Recursively make sure the scroll parent itself is visible. 1502 // Recursively make sure the scroll parent itself is visible.
1496 if (scrollParent->parentObject()) 1503 if (scrollParent->parentObject())
1497 scrollParent->scrollToMakeVisibleWithSubFocus(newSubfocus); 1504 scrollParent->scrollToMakeVisibleWithSubFocus(newSubfocus);
1498 } 1505 }
1499 1506
1500 void AXObject::scrollToGlobalPoint(const IntPoint& globalPoint) const { 1507 void AXObject::scrollToGlobalPoint(const IntPoint& globalPoint) const {
1501 // Search up the parent chain and create a vector of all scrollable parent obj ects 1508 // Search up the parent chain and create a vector of all scrollable parent
1502 // and ending with this object itself. 1509 // objects and ending with this object itself.
1503 HeapVector<Member<const AXObject>> objects; 1510 HeapVector<Member<const AXObject>> objects;
1504 AXObject* parentObject; 1511 AXObject* parentObject;
1505 for (parentObject = this->parentObject(); parentObject; 1512 for (parentObject = this->parentObject(); parentObject;
1506 parentObject = parentObject->parentObject()) { 1513 parentObject = parentObject->parentObject()) {
1507 if (parentObject->getScrollableAreaIfScrollable()) 1514 if (parentObject->getScrollableAreaIfScrollable())
1508 objects.prepend(parentObject); 1515 objects.prepend(parentObject);
1509 } 1516 }
1510 objects.append(this); 1517 objects.append(this);
1511 1518
1512 // Start with the outermost scrollable (the main window) and try to scroll the 1519 // Start with the outermost scrollable (the main window) and try to scroll the
(...skipping 21 matching lines...) Expand all
1534 1541
1535 int desiredX = computeBestScrollOffset(0, objectRect.x(), objectRect.maxX(), 1542 int desiredX = computeBestScrollOffset(0, objectRect.x(), objectRect.maxX(),
1536 objectRect.x(), objectRect.maxX(), 1543 objectRect.x(), objectRect.maxX(),
1537 point.x(), point.x()); 1544 point.x(), point.x());
1538 int desiredY = computeBestScrollOffset(0, objectRect.y(), objectRect.maxY(), 1545 int desiredY = computeBestScrollOffset(0, objectRect.y(), objectRect.maxY(),
1539 objectRect.y(), objectRect.maxY(), 1546 objectRect.y(), objectRect.maxY(),
1540 point.y(), point.y()); 1547 point.y(), point.y());
1541 outer->setScrollOffset(IntPoint(desiredX, desiredY)); 1548 outer->setScrollOffset(IntPoint(desiredX, desiredY));
1542 1549
1543 if (outer->isWebArea() && !inner->isWebArea()) { 1550 if (outer->isWebArea() && !inner->isWebArea()) {
1544 // If outer object we just scrolled is a web area (frame) but the inner ob ject 1551 // If outer object we just scrolled is a web area (frame) but the inner
1545 // is not, keep track of the coordinate transformation to apply to 1552 // object is not, keep track of the coordinate transformation to apply to
1546 // future nested calculations. 1553 // future nested calculations.
1547 scrollPosition = scrollableArea->scrollPosition(); 1554 scrollPosition = scrollableArea->scrollPosition();
1548 offsetX -= (scrollPosition.x() + point.x()); 1555 offsetX -= (scrollPosition.x() + point.x());
1549 offsetY -= (scrollPosition.y() + point.y()); 1556 offsetY -= (scrollPosition.y() + point.y());
1550 point.move(scrollPosition.x() - innerRect.x(), 1557 point.move(scrollPosition.x() - innerRect.x(),
1551 scrollPosition.y() - innerRect.y()); 1558 scrollPosition.y() - innerRect.y());
1552 } else if (inner->isWebArea()) { 1559 } else if (inner->isWebArea()) {
1553 // Otherwise, if the inner object is a web area, reset the coordinate tran sformation. 1560 // Otherwise, if the inner object is a web area, reset the coordinate
1561 // transformation.
1554 offsetX = 0; 1562 offsetX = 0;
1555 offsetY = 0; 1563 offsetY = 0;
1556 } 1564 }
1557 } 1565 }
1558 } 1566 }
1559 1567
1560 void AXObject::notifyIfIgnoredValueChanged() { 1568 void AXObject::notifyIfIgnoredValueChanged() {
1561 bool isIgnored = accessibilityIsIgnored(); 1569 bool isIgnored = accessibilityIsIgnored();
1562 if (lastKnownIsIgnoredValue() != isIgnored) { 1570 if (lastKnownIsIgnoredValue() != isIgnored) {
1563 axObjectCache().childrenChanged(parentObject()); 1571 axObjectCache().childrenChanged(parentObject());
1564 setLastKnownIsIgnoredValue(isIgnored); 1572 setLastKnownIsIgnoredValue(isIgnored);
1565 } 1573 }
1566 } 1574 }
1567 1575
1568 void AXObject::selectionChanged() { 1576 void AXObject::selectionChanged() {
1569 if (AXObject* parent = parentObjectIfExists()) 1577 if (AXObject* parent = parentObjectIfExists())
1570 parent->selectionChanged(); 1578 parent->selectionChanged();
1571 } 1579 }
1572 1580
1573 int AXObject::lineForPosition(const VisiblePosition& position) const { 1581 int AXObject::lineForPosition(const VisiblePosition& position) const {
1574 if (position.isNull() || !getNode()) 1582 if (position.isNull() || !getNode())
1575 return -1; 1583 return -1;
1576 1584
1577 // If the position is not in the same editable region as this AX object, retur n -1. 1585 // If the position is not in the same editable region as this AX object,
1586 // return -1.
1578 Node* containerNode = position.deepEquivalent().computeContainerNode(); 1587 Node* containerNode = position.deepEquivalent().computeContainerNode();
1579 if (!containerNode->isShadowIncludingInclusiveAncestorOf(getNode()) && 1588 if (!containerNode->isShadowIncludingInclusiveAncestorOf(getNode()) &&
1580 !getNode()->isShadowIncludingInclusiveAncestorOf(containerNode)) 1589 !getNode()->isShadowIncludingInclusiveAncestorOf(containerNode))
1581 return -1; 1590 return -1;
1582 1591
1583 int lineCount = -1; 1592 int lineCount = -1;
1584 VisiblePosition currentPosition = position; 1593 VisiblePosition currentPosition = position;
1585 VisiblePosition previousPosition; 1594 VisiblePosition previousPosition;
1586 1595
1587 // move up until we get to the top 1596 // Move up until we get to the top.
1588 // FIXME: This only takes us to the top of the rootEditableElement, not the to p of the 1597 // FIXME: This only takes us to the top of the rootEditableElement, not the
1589 // top document. 1598 // top of the top document.
1590 do { 1599 do {
1591 previousPosition = currentPosition; 1600 previousPosition = currentPosition;
1592 currentPosition = 1601 currentPosition =
1593 previousLinePosition(currentPosition, LayoutUnit(), HasEditableAXRole); 1602 previousLinePosition(currentPosition, LayoutUnit(), HasEditableAXRole);
1594 ++lineCount; 1603 ++lineCount;
1595 } while (currentPosition.isNotNull() && 1604 } while (currentPosition.isNotNull() &&
1596 !inSameLine(currentPosition, previousPosition)); 1605 !inSameLine(currentPosition, previousPosition));
1597 1606
1598 return lineCount; 1607 return lineCount;
1599 } 1608 }
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
1724 } 1733 }
1725 1734
1726 DEFINE_TRACE(AXObject) { 1735 DEFINE_TRACE(AXObject) {
1727 visitor->trace(m_children); 1736 visitor->trace(m_children);
1728 visitor->trace(m_parent); 1737 visitor->trace(m_parent);
1729 visitor->trace(m_cachedLiveRegionRoot); 1738 visitor->trace(m_cachedLiveRegionRoot);
1730 visitor->trace(m_axObjectCache); 1739 visitor->trace(m_axObjectCache);
1731 } 1740 }
1732 1741
1733 } // namespace blink 1742 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698