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

Unified Diff: third_party/WebKit/Source/modules/accessibility/AXLayoutObject.cpp

Issue 1564863002: Get rid of AXScrollView and AXScrollbar (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@dump_oopif_3
Patch Set: Fix Android expectation Created 4 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/accessibility/AXLayoutObject.cpp
diff --git a/third_party/WebKit/Source/modules/accessibility/AXLayoutObject.cpp b/third_party/WebKit/Source/modules/accessibility/AXLayoutObject.cpp
index c4cfbc141245a1fdcf4e49ff6f077a9436e72e96..ec09ab8b7f39692ebf13c20720a3c4c638811b6d 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXLayoutObject.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXLayoutObject.cpp
@@ -41,9 +41,11 @@
#include "core/editing/VisibleUnits.h"
#include "core/editing/iterators/CharacterIterator.h"
#include "core/editing/iterators/TextIterator.h"
+#include "core/frame/FrameOwner.h"
#include "core/frame/FrameView.h"
#include "core/frame/LocalFrame.h"
#include "core/frame/Settings.h"
+#include "core/html/HTMLFrameOwnerElement.h"
#include "core/html/HTMLImageElement.h"
#include "core/html/HTMLLabelElement.h"
#include "core/html/HTMLOptionElement.h"
@@ -346,17 +348,6 @@ void AXLayoutObject::detach()
// Check object role or purpose.
//
-bool AXLayoutObject::isAttachment() const
-{
- LayoutBoxModelObject* layoutObject = layoutBoxModelObject();
- if (!layoutObject)
- return false;
- // Widgets are the replaced elements that we represent to AX as attachments
- bool isLayoutPart = layoutObject->isLayoutPart();
- ASSERT(!isLayoutPart || (layoutObject->isAtomicInlineLevel() && !isImage()));
- return isLayoutPart;
-}
-
static bool isLinkable(const AXObject& object)
{
if (!object.layoutObject())
@@ -575,9 +566,9 @@ bool AXLayoutObject::computeAccessibilityIsIgnored(IgnoredReasons* ignoredReason
return true;
}
- // TODO: we should refactor this - but right now this is necessary to make
- // sure scroll areas stay in the tree.
- if (isAttachment())
+ // A LayoutPart is an iframe element or embedded object element or something like
+ // that. We don't want to ignore those.
+ if (m_layoutObject->isLayoutPart())
return false;
// find out if this element is inside of a label element.
@@ -1526,9 +1517,16 @@ AXObject* AXLayoutObject::computeParent() const
if (parentObj)
return axObjectCache().getOrCreate(parentObj);
- // WebArea's parent should be the scroll view containing it.
- if (isWebArea())
- return axObjectCache().getOrCreate(m_layoutObject->frame()->view());
+ // A WebArea's parent should be the containing frame (if local) or page popup owner.
+ if (isWebArea()) {
+ LocalFrame* frame = m_layoutObject->frame();
+ if (frame->owner() && frame->owner()->isLocal()) {
+ HTMLFrameOwnerElement* owner = toHTMLFrameOwnerElement(frame->owner());
+ if (owner && owner->layoutObject())
+ return axObjectCache().getOrCreate(owner->layoutObject());
+ }
+ return axObjectCache().getOrCreate(frame->pagePopupOwner());
+ }
return 0;
}
@@ -1552,9 +1550,16 @@ AXObject* AXLayoutObject::computeParentIfExists() const
if (parentObj)
return axObjectCache().get(parentObj);
- // WebArea's parent should be the scroll view containing it.
- if (isWebArea())
- return axObjectCache().get(m_layoutObject->frame()->view());
+ // A WebArea's parent should be the containing frame (if local) or page popup owner.
+ if (isWebArea()) {
+ LocalFrame* frame = m_layoutObject->frame();
+ if (frame->owner() && frame->owner()->isLocal()) {
+ HTMLFrameOwnerElement* owner = toHTMLFrameOwnerElement(frame->owner());
+ if (owner && owner->layoutObject())
+ return axObjectCache().get(owner->layoutObject());
+ }
+ return axObjectCache().get(frame->pagePopupOwner());
+ }
return 0;
}
@@ -1643,7 +1648,7 @@ void AXLayoutObject::addChildren()
}
addHiddenChildren();
- addAttachmentChildren();
+ addFrameChildren();
addPopupChildren();
addImageMapChildren();
addTextFieldChildren();
@@ -1756,13 +1761,6 @@ Element* AXLayoutObject::anchorElement() const
return 0;
}
-Widget* AXLayoutObject::widgetForAttachmentView() const
-{
- if (!isAttachment())
- return 0;
- return toLayoutPart(m_layoutObject)->widget();
-}
-
//
// Functions that retrieve the current selection.
//
@@ -2439,19 +2437,22 @@ void AXLayoutObject::addCanvasChildren()
AXNodeObject::addChildren();
}
-void AXLayoutObject::addAttachmentChildren()
+void AXLayoutObject::addFrameChildren()
{
- if (!isAttachment())
+ if (!m_layoutObject || !m_layoutObject->isLayoutPart())
return;
- // FrameView's need to be inserted into the AX hierarchy when encountered.
- Widget* widget = widgetForAttachmentView();
+ Widget* widget = toLayoutPart(m_layoutObject)->widget();
if (!widget || !widget->isFrameView())
return;
- AXObject* axWidget = axObjectCache().getOrCreate(widget);
- if (!axWidget->accessibilityIsIgnored())
- m_children.append(axWidget);
+ Document* doc = toFrameView(widget)->frame().document();
+ if (!doc || !doc->layoutView())
+ return;
+
+ AXObject* axChildFrame = axObjectCache().getOrCreate(doc);
+ if (!axChildFrame->accessibilityIsIgnored())
+ m_children.append(axChildFrame);
}
void AXLayoutObject::addPopupChildren()

Powered by Google App Engine
This is Rietveld 408576698