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 2e73fd5e2def1bf0e32be330886ead1cd7fb8ae7..01d1c1ed6adb7f6e6668024e8711f66ba6efd1f6 100644 |
--- a/third_party/WebKit/Source/modules/accessibility/AXLayoutObject.cpp |
+++ b/third_party/WebKit/Source/modules/accessibility/AXLayoutObject.cpp |
@@ -327,7 +327,7 @@ void AXLayoutObject::Detach() { |
// Check object role or purpose. |
// |
-static bool IsLinkable(const AXObject& object) { |
+static bool IsLinkable(const AXObjectImpl& object) { |
if (!object.GetLayoutObject()) |
return false; |
@@ -350,7 +350,7 @@ bool AXLayoutObject::IsEditable() const { |
Document& document = GetLayoutObject()->GetDocument(); |
HTMLElement* body = document.body(); |
if (body && HasEditableStyle(*body)) { |
- AXObject* ax_body = AxObjectCache().GetOrCreate(body); |
+ AXObjectImpl* ax_body = AxObjectCache().GetOrCreate(body); |
return ax_body && ax_body != ax_body->AriaHiddenRoot(); |
} |
@@ -370,7 +370,7 @@ bool AXLayoutObject::IsRichlyEditable() const { |
Document& document = layout_object_->GetDocument(); |
HTMLElement* body = document.body(); |
if (body && HasRichlyEditableStyle(*body)) { |
- AXObject* ax_body = AxObjectCache().GetOrCreate(body); |
+ AXObjectImpl* ax_body = AxObjectCache().GetOrCreate(body); |
return ax_body && ax_body != ax_body->AriaHiddenRoot(); |
} |
@@ -412,7 +412,7 @@ bool AXLayoutObject::IsReadOnly() const { |
Document& document = layout_object_->GetDocument(); |
HTMLElement* body = document.body(); |
if (body && HasEditableStyle(*body)) { |
- AXObject* ax_body = AxObjectCache().GetOrCreate(body); |
+ AXObjectImpl* ax_body = AxObjectCache().GetOrCreate(body); |
return !ax_body || ax_body == ax_body->AriaHiddenRoot(); |
} |
@@ -441,7 +441,7 @@ bool AXLayoutObject::IsFocused() const { |
Element* focused_element = GetDocument()->FocusedElement(); |
if (!focused_element) |
return false; |
- AXObject* focused_object = AxObjectCache().GetOrCreate(focused_element); |
+ AXObjectImpl* focused_object = AxObjectCache().GetOrCreate(focused_element); |
if (!focused_object || !focused_object->IsAXLayoutObject()) |
return false; |
@@ -463,7 +463,7 @@ bool AXLayoutObject::IsSelected() const { |
if (EqualIgnoringASCIICase(aria_selected, "true")) |
return true; |
- AXObject* focused_object = AxObjectCache().FocusedObject(); |
+ AXObjectImpl* focused_object = AxObjectCache().FocusedObject(); |
if (AriaRoleAttribute() == kListBoxOptionRole && focused_object && |
focused_object->ActiveDescendant() == this) { |
return true; |
@@ -501,7 +501,7 @@ AXObjectInclusion AXLayoutObject::DefaultObjectInclusion( |
return kIgnoreObject; |
} |
- return AXObject::DefaultObjectInclusion(ignored_reasons); |
+ return AXObjectImpl::DefaultObjectInclusion(ignored_reasons); |
} |
bool AXLayoutObject::ComputeAccessibilityIsIgnored( |
@@ -542,7 +542,7 @@ bool AXLayoutObject::ComputeAccessibilityIsIgnored( |
if (HasInheritedPresentationalRole()) { |
if (ignored_reasons) { |
- const AXObject* inherits_from = InheritsPresentationalRoleFrom(); |
+ const AXObjectImpl* inherits_from = InheritsPresentationalRoleFrom(); |
if (inherits_from == this) |
ignored_reasons->push_back(IgnoredReason(kAXPresentationalRole)); |
else |
@@ -553,7 +553,7 @@ bool AXLayoutObject::ComputeAccessibilityIsIgnored( |
} |
// An ARIA tree can only have tree items and static text as children. |
- if (AXObject* tree_ancestor = TreeAncestorDisallowingChild()) { |
+ if (AXObjectImpl* tree_ancestor = TreeAncestorDisallowingChild()) { |
if (ignored_reasons) |
ignored_reasons->push_back( |
IgnoredReason(kAXAncestorDisallowsChild, tree_ancestor)); |
@@ -572,13 +572,13 @@ bool AXLayoutObject::ComputeAccessibilityIsIgnored( |
// Find out if this element is inside of a label element. If so, it may be |
// ignored because it's the label for a checkbox or radio button. |
- AXObject* control_object = CorrespondingControlForLabelElement(); |
+ AXObjectImpl* control_object = CorrespondingControlForLabelElement(); |
if (control_object && control_object->IsCheckboxOrRadio() && |
control_object->NameFromLabelElement()) { |
if (ignored_reasons) { |
HTMLLabelElement* label = LabelElementContainer(); |
if (label && label != GetNode()) { |
- AXObject* label_ax_object = AxObjectCache().GetOrCreate(label); |
+ AXObjectImpl* label_ax_object = AxObjectCache().GetOrCreate(label); |
ignored_reasons->push_back( |
IgnoredReason(kAXLabelContainer, label_ax_object)); |
} |
@@ -600,7 +600,7 @@ bool AXLayoutObject::ComputeAccessibilityIsIgnored( |
if (layout_object_->IsText()) { |
// Static text beneath MenuItems and MenuButtons are just reported along |
// with the menu item, so it's ignored on an individual level. |
- AXObject* parent = ParentObjectUnignored(); |
+ AXObjectImpl* parent = ParentObjectUnignored(); |
if (parent && (parent->AriaRoleAttribute() == kMenuItemRole || |
parent->AriaRoleAttribute() == kMenuButtonRole)) { |
if (ignored_reasons) |
@@ -616,7 +616,7 @@ bool AXLayoutObject::ComputeAccessibilityIsIgnored( |
} |
// Don't ignore static text in editable text controls. |
- for (AXObject* parent = ParentObject(); parent; |
+ for (AXObjectImpl* parent = ParentObject(); parent; |
parent = parent->ParentObject()) { |
if (parent->RoleValue() == kTextFieldRole) |
return false; |
@@ -809,7 +809,7 @@ RGBA32 AXLayoutObject::ComputeBackgroundColor() const { |
// Color::blend should be called like this: background.blend(foreground). |
for (LayoutObject* layout_object = GetLayoutObject(); layout_object; |
layout_object = layout_object->Parent()) { |
- const AXObject* ax_parent = AxObjectCache().GetOrCreate(layout_object); |
+ const AXObjectImpl* ax_parent = AxObjectCache().GetOrCreate(layout_object); |
if (ax_parent && ax_parent != this) { |
Color parent_color = ax_parent->BackgroundColor(); |
blended_color = parent_color.Blend(blended_color); |
@@ -1080,13 +1080,13 @@ void AXLayoutObject::LoadInlineTextBoxes() { |
} |
} |
-AXObject* AXLayoutObject::NextOnLine() const { |
+AXObjectImpl* AXLayoutObject::NextOnLine() const { |
if (!GetLayoutObject()) |
return nullptr; |
- AXObject* result = nullptr; |
+ AXObjectImpl* result = nullptr; |
if (GetLayoutObject()->IsListMarker()) { |
- AXObject* next_sibling = RawNextSibling(); |
+ AXObjectImpl* next_sibling = RawNextSibling(); |
if (!next_sibling || !next_sibling->Children().size()) |
return nullptr; |
result = next_sibling->Children()[0].Get(); |
@@ -1119,7 +1119,7 @@ AXObject* AXLayoutObject::NextOnLine() const { |
return result; |
} |
-AXObject* AXLayoutObject::PreviousOnLine() const { |
+AXObjectImpl* AXLayoutObject::PreviousOnLine() const { |
if (!GetLayoutObject()) |
return nullptr; |
@@ -1132,7 +1132,7 @@ AXObject* AXLayoutObject::PreviousOnLine() const { |
if (!inline_box) |
return nullptr; |
- AXObject* result = nullptr; |
+ AXObjectImpl* result = nullptr; |
for (InlineBox* prev = inline_box->PrevOnLine(); prev; |
prev = prev->PrevOnLine()) { |
LayoutObject* layout_object = |
@@ -1291,9 +1291,10 @@ bool AXLayoutObject::AriaRoleHasPresentationalChildren() const { |
} |
} |
-AXObject* AXLayoutObject::AncestorForWhichThisIsAPresentationalChild() const { |
+AXObjectImpl* AXLayoutObject::AncestorForWhichThisIsAPresentationalChild() |
+ const { |
// Walk the parent chain looking for a parent that has presentational children |
- AXObject* parent = ParentObjectIfExists(); |
+ AXObjectImpl* parent = ParentObjectIfExists(); |
while (parent) { |
if (parent->AriaRoleHasPresentationalChildren()) |
break; |
@@ -1397,7 +1398,8 @@ bool AXLayoutObject::LiveRegionBusy() const { |
// Hit testing. |
// |
-AXObject* AXLayoutObject::AccessibilityHitTest(const IntPoint& point) const { |
+AXObjectImpl* AXLayoutObject::AccessibilityHitTest( |
+ const IntPoint& point) const { |
if (!layout_object_ || !layout_object_->HasLayer()) |
return nullptr; |
@@ -1424,7 +1426,7 @@ AXObject* AXLayoutObject::AccessibilityHitTest(const IntPoint& point) const { |
if (!obj) |
return nullptr; |
- AXObject* result = AxObjectCache().GetOrCreate(obj); |
+ AXObjectImpl* result = AxObjectCache().GetOrCreate(obj); |
result->UpdateChildrenIfNecessary(); |
// Allow the element to perform any hit-testing it might need to do to reach |
@@ -1434,7 +1436,7 @@ AXObject* AXLayoutObject::AccessibilityHitTest(const IntPoint& point) const { |
// If this element is the label of a control, a hit test should return the |
// control. |
if (result->IsAXLayoutObject()) { |
- AXObject* control_object = |
+ AXObjectImpl* control_object = |
ToAXLayoutObject(result)->CorrespondingControlForLabelElement(); |
if (control_object && control_object->NameFromLabelElement()) |
return control_object; |
@@ -1446,19 +1448,19 @@ AXObject* AXLayoutObject::AccessibilityHitTest(const IntPoint& point) const { |
return result; |
} |
-AXObject* AXLayoutObject::ElementAccessibilityHitTest( |
+AXObjectImpl* AXLayoutObject::ElementAccessibilityHitTest( |
const IntPoint& point) const { |
if (IsSVGImage()) |
return RemoteSVGElementHitTest(point); |
- return AXObject::ElementAccessibilityHitTest(point); |
+ return AXObjectImpl::ElementAccessibilityHitTest(point); |
} |
// |
// High-level accessibility tree access. |
// |
-AXObject* AXLayoutObject::ComputeParent() const { |
+AXObjectImpl* AXLayoutObject::ComputeParent() const { |
DCHECK(!IsDetached()); |
if (!layout_object_) |
return 0; |
@@ -1469,7 +1471,7 @@ AXObject* AXLayoutObject::ComputeParent() const { |
// menuButton and its corresponding menu are DOM siblings, but Accessibility |
// needs them to be parent/child. |
if (AriaRoleAttribute() == kMenuRole) { |
- AXObject* parent = MenuButtonForMenu(); |
+ AXObjectImpl* parent = MenuButtonForMenu(); |
if (parent) |
return parent; |
} |
@@ -1487,7 +1489,7 @@ AXObject* AXLayoutObject::ComputeParent() const { |
return 0; |
} |
-AXObject* AXLayoutObject::ComputeParentIfExists() const { |
+AXObjectImpl* AXLayoutObject::ComputeParentIfExists() const { |
if (!layout_object_) |
return 0; |
@@ -1497,7 +1499,7 @@ AXObject* AXLayoutObject::ComputeParentIfExists() const { |
// menuButton and its corresponding menu are DOM siblings, but Accessibility |
// needs them to be parent/child. |
if (AriaRoleAttribute() == kMenuRole) { |
- AXObject* parent = MenuButtonForMenu(); |
+ AXObjectImpl* parent = MenuButtonForMenu(); |
if (parent) |
return parent; |
} |
@@ -1520,7 +1522,7 @@ AXObject* AXLayoutObject::ComputeParentIfExists() const { |
// accessibility module. |
// |
-AXObject* AXLayoutObject::RawFirstChild() const { |
+AXObjectImpl* AXLayoutObject::RawFirstChild() const { |
if (!layout_object_) |
return 0; |
@@ -1532,7 +1534,7 @@ AXObject* AXLayoutObject::RawFirstChild() const { |
return AxObjectCache().GetOrCreate(first_child); |
} |
-AXObject* AXLayoutObject::RawNextSibling() const { |
+AXObjectImpl* AXLayoutObject::RawNextSibling() const { |
if (!layout_object_) |
return 0; |
@@ -1600,10 +1602,10 @@ void AXLayoutObject::AddChildren() { |
if (!CanHaveChildren()) |
return; |
- HeapVector<Member<AXObject>> owned_children; |
+ HeapVector<Member<AXObjectImpl>> owned_children; |
ComputeAriaOwnsChildren(owned_children); |
- for (AXObject* obj = RawFirstChild(); obj; obj = obj->RawNextSibling()) { |
+ for (AXObjectImpl* obj = RawFirstChild(); obj; obj = obj->RawNextSibling()) { |
if (!AxObjectCache().IsAriaOwned(obj)) { |
obj->SetParent(this); |
AddChild(obj); |
@@ -1638,11 +1640,11 @@ void AXLayoutObject::UpdateChildrenIfNecessary() { |
if (NeedsToUpdateChildren()) |
ClearChildren(); |
- AXObject::UpdateChildrenIfNecessary(); |
+ AXObjectImpl::UpdateChildrenIfNecessary(); |
} |
void AXLayoutObject::ClearChildren() { |
- AXObject::ClearChildren(); |
+ AXObjectImpl::ClearChildren(); |
children_dirty_ = false; |
} |
@@ -1729,7 +1731,7 @@ Element* AXLayoutObject::AnchorElement() const { |
// Functions that retrieve the current selection. |
// |
-AXObject::AXRange AXLayoutObject::Selection() const { |
+AXObjectImpl::AXRange AXLayoutObject::Selection() const { |
AXRange text_selection = TextControlSelection(); |
if (text_selection.IsValid()) |
return text_selection; |
@@ -1756,7 +1758,7 @@ AXObject::AXRange AXLayoutObject::Selection() const { |
DCHECK(anchor_node); |
AXLayoutObject* anchor_object = nullptr; |
- // Find the closest node that has a corresponding AXObject. |
+ // Find the closest node that has a corresponding AXObjectImpl. |
// This is because some nodes may be aria hidden or might not even have |
// a layout object if they are part of the shadow DOM. |
while (anchor_node) { |
@@ -1799,7 +1801,7 @@ AXObject::AXRange AXLayoutObject::Selection() const { |
// Gets only the start and end offsets of the selection computed using the |
// current object as the starting point. Returns a null selection if there is |
// no selection in the subtree rooted at this object. |
-AXObject::AXRange AXLayoutObject::SelectionUnderObject() const { |
+AXObjectImpl::AXRange AXLayoutObject::SelectionUnderObject() const { |
AXRange text_selection = TextControlSelection(); |
if (text_selection.IsValid()) |
return text_selection; |
@@ -1833,7 +1835,7 @@ AXObject::AXRange AXLayoutObject::SelectionUnderObject() const { |
return AXRange(start, end); |
} |
-AXObject::AXRange AXLayoutObject::TextControlSelection() const { |
+AXObjectImpl::AXRange AXLayoutObject::TextControlSelection() const { |
if (!GetLayoutObject()) |
return AXRange(); |
@@ -1850,7 +1852,7 @@ AXObject::AXRange AXLayoutObject::TextControlSelection() const { |
if (!layout) |
return AXRange(); |
- AXObject* ax_object = AxObjectCache().GetOrCreate(layout); |
+ AXObjectImpl* ax_object = AxObjectCache().GetOrCreate(layout); |
if (!ax_object || !ax_object->IsAXLayoutObject()) |
return AXRange(); |
@@ -1895,7 +1897,7 @@ AXLayoutObject* AXLayoutObject::GetUnignoredObjectFromNode(Node& node) const { |
if (IsDetached()) |
return nullptr; |
- AXObject* ax_object = AxObjectCache().GetOrCreate(&node); |
+ AXObjectImpl* ax_object = AxObjectCache().GetOrCreate(&node); |
if (!ax_object) |
return nullptr; |
@@ -1910,7 +1912,7 @@ AXLayoutObject* AXLayoutObject::GetUnignoredObjectFromNode(Node& node) const { |
// |
// Convert from an accessible object and offset to a VisiblePosition. |
-static VisiblePosition ToVisiblePosition(AXObject* obj, int offset) { |
+static VisiblePosition ToVisiblePosition(AXObjectImpl* obj, int offset) { |
if (!obj->GetNode()) |
return VisiblePosition(); |
@@ -1936,7 +1938,7 @@ static VisiblePosition ToVisiblePosition(AXObject* obj, int offset) { |
static_cast<unsigned>(offset) > (obj->Children().size() - 1) |
? offset - 1 |
: offset; |
- AXObject* child_obj = obj->Children()[clamped_offset]; |
+ AXObjectImpl* child_obj = obj->Children()[clamped_offset]; |
Node* child_node = child_obj->GetNode(); |
if (!child_node || !child_node->parentNode()) |
return VisiblePosition(); |
@@ -1969,9 +1971,9 @@ void AXLayoutObject::SetSelection(const AXRange& selection) { |
if (!GetLayoutObject() || !selection.IsValid()) |
return; |
- AXObject* anchor_object = |
+ AXObjectImpl* anchor_object = |
selection.anchor_object ? selection.anchor_object.Get() : this; |
- AXObject* focus_object = |
+ AXObjectImpl* focus_object = |
selection.focus_object ? selection.focus_object.Get() : this; |
if (!IsValidSelectionBound(anchor_object) || |
@@ -2023,7 +2025,8 @@ void AXLayoutObject::SetSelection(const AXRange& selection) { |
.Build()); |
} |
-bool AXLayoutObject::IsValidSelectionBound(const AXObject* bound_object) const { |
+bool AXLayoutObject::IsValidSelectionBound( |
+ const AXObjectImpl* bound_object) const { |
return GetLayoutObject() && bound_object && !bound_object->IsDetached() && |
bound_object->IsAXLayoutObject() && bound_object->GetLayoutObject() && |
bound_object->GetLayoutObject()->GetFrame() == |
@@ -2054,7 +2057,7 @@ void AXLayoutObject::HandleActiveDescendantChanged() { |
if (!GetLayoutObject()) |
return; |
- AXObject* focused_object = AxObjectCache().FocusedObject(); |
+ AXObjectImpl* focused_object = AxObjectCache().FocusedObject(); |
if (focused_object == this && SupportsActiveDescendant()) { |
AxObjectCache().PostNotification( |
GetLayoutObject(), AXObjectCacheImpl::kAXActiveDescendantChanged); |
@@ -2063,7 +2066,7 @@ void AXLayoutObject::HandleActiveDescendantChanged() { |
void AXLayoutObject::HandleAriaExpandedChanged() { |
// Find if a parent of this object should handle aria-expanded changes. |
- AXObject* container_parent = this->ParentObject(); |
+ AXObjectImpl* container_parent = this->ParentObject(); |
while (container_parent) { |
bool found_parent = false; |
@@ -2183,7 +2186,7 @@ void AXLayoutObject::AddInlineTextBoxChildren(bool force) { |
for (RefPtr<AbstractInlineTextBox> box = |
layout_text->FirstAbstractInlineTextBox(); |
box.Get(); box = box->NextInlineTextBox()) { |
- AXObject* ax_object = AxObjectCache().GetOrCreate(box.Get()); |
+ AXObjectImpl* ax_object = AxObjectCache().GetOrCreate(box.Get()); |
if (!ax_object->AccessibilityIsIgnored()) |
children_.push_back(ax_object); |
} |
@@ -2216,11 +2219,11 @@ void AXLayoutObject::LineBreaks(Vector<int>& line_breaks) const { |
// Private. |
// |
-AXObject* AXLayoutObject::TreeAncestorDisallowingChild() const { |
+AXObjectImpl* AXLayoutObject::TreeAncestorDisallowingChild() const { |
// Determine if this is in a tree. If so, we apply special behavior to make it |
// work like an AXOutline. |
- AXObject* ax_obj = ParentObject(); |
- AXObject* tree_ancestor = 0; |
+ AXObjectImpl* ax_obj = ParentObject(); |
+ AXObjectImpl* tree_ancestor = 0; |
while (ax_obj) { |
if (ax_obj->IsTree()) { |
tree_ancestor = ax_obj; |
@@ -2250,7 +2253,7 @@ bool AXLayoutObject::IsTabItemSelected() const { |
// The ARIA spec says a tab item can also be selected if it is aria-labeled by |
// a tabpanel that has keyboard focus inside of it, or if a tabpanel in its |
// aria-controls list has KB focus inside of it. |
- AXObject* focused_element = AxObjectCache().FocusedObject(); |
+ AXObjectImpl* focused_element = AxObjectCache().FocusedObject(); |
if (!focused_element) |
return false; |
@@ -2258,13 +2261,13 @@ bool AXLayoutObject::IsTabItemSelected() const { |
ElementsFromAttribute(elements, aria_controlsAttr); |
for (const auto& element : elements) { |
- AXObject* tab_panel = AxObjectCache().GetOrCreate(element); |
+ AXObjectImpl* tab_panel = AxObjectCache().GetOrCreate(element); |
// A tab item should only control tab panels. |
if (!tab_panel || tab_panel->RoleValue() != kTabPanelRole) |
continue; |
- AXObject* check_focus_element = focused_element; |
+ AXObjectImpl* check_focus_element = focused_element; |
// Check if the focused element is a descendant of the element controlled by |
// the tab item. |
while (check_focus_element) { |
@@ -2277,13 +2280,13 @@ bool AXLayoutObject::IsTabItemSelected() const { |
return false; |
} |
-AXObject* AXLayoutObject::AccessibilityImageMapHitTest( |
+AXObjectImpl* AXLayoutObject::AccessibilityImageMapHitTest( |
HTMLAreaElement* area, |
const IntPoint& point) const { |
if (!area) |
return 0; |
- AXObject* parent = AxObjectCache().GetOrCreate(area->ImageElement()); |
+ AXObjectImpl* parent = AxObjectCache().GetOrCreate(area->ImageElement()); |
if (!parent) |
return 0; |
@@ -2361,8 +2364,9 @@ AXSVGRoot* AXLayoutObject::RemoteSVGRootElement() const { |
return 0; |
} |
-AXObject* AXLayoutObject::RemoteSVGElementHitTest(const IntPoint& point) const { |
- AXObject* remote = RemoteSVGRootElement(); |
+AXObjectImpl* AXLayoutObject::RemoteSVGElementHitTest( |
+ const IntPoint& point) const { |
+ AXObjectImpl* remote = RemoteSVGRootElement(); |
if (!remote) |
return 0; |
@@ -2376,7 +2380,7 @@ AXObject* AXLayoutObject::RemoteSVGElementHitTest(const IntPoint& point) const { |
// coordinates only. |
void AXLayoutObject::OffsetBoundingBoxForRemoteSVGElement( |
LayoutRect& rect) const { |
- for (AXObject* parent = ParentObject(); parent; |
+ for (AXObjectImpl* parent = ParentObject(); parent; |
parent = parent->ParentObject()) { |
if (parent->IsAXSVGRoot()) { |
rect.MoveBy( |
@@ -2415,7 +2419,7 @@ void AXLayoutObject::AddHiddenChildren() { |
for (Node& child : NodeTraversal::ChildrenOf(*node)) { |
if (child.GetLayoutObject()) { |
// Find out where the last layout sibling is located within m_children. |
- if (AXObject* child_object = |
+ if (AXObjectImpl* child_object = |
AxObjectCache().Get(child.GetLayoutObject())) { |
if (child_object->AccessibilityIsIgnored()) { |
const auto& children = child_object->Children(); |
@@ -2470,7 +2474,7 @@ void AXLayoutObject::AddImageMapChildren() { |
for (HTMLAreaElement& area : |
Traversal<HTMLAreaElement>::DescendantsOf(*map)) { |
// add an <area> element for this child if it has a link |
- AXObject* obj = AxObjectCache().GetOrCreate(&area); |
+ AXObjectImpl* obj = AxObjectCache().GetOrCreate(&area); |
if (obj) { |
AXImageMapLink* area_object = ToAXImageMapLink(obj); |
area_object->SetParent(this); |
@@ -2498,7 +2502,8 @@ void AXLayoutObject::AddCanvasChildren() { |
void AXLayoutObject::AddPopupChildren() { |
if (!isHTMLInputElement(GetNode())) |
return; |
- if (AXObject* ax_popup = toHTMLInputElement(GetNode())->PopupRootAXObject()) |
+ if (AXObjectImpl* ax_popup = |
+ ToAXObjectImpl(toHTMLInputElement(GetNode())->PopupRootAXObject())) |
children_.push_back(ax_popup); |
} |