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

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

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

Powered by Google App Engine
This is Rietveld 408576698