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

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

Issue 2858493002: Rename AXObject to AXObjectImpl in modules/ and web/ (Closed)
Patch Set: Review feedback Created 3 years, 7 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 503fd0b6246f0f7ff909d4accb82335bf27d951f..cba19796be1d63fe13271c7b35fdf5ab3bcbb4ba 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,7 +1080,7 @@ void AXLayoutObject::LoadInlineTextBoxes() {
}
}
-AXObject* AXLayoutObject::NextOnLine() const {
+AXObjectImpl* AXLayoutObject::NextOnLine() const {
if (!GetLayoutObject())
return nullptr;
@@ -1093,7 +1093,7 @@ AXObject* AXLayoutObject::NextOnLine() const {
if (!inline_box)
return nullptr;
- AXObject* result = nullptr;
+ AXObjectImpl* result = nullptr;
for (InlineBox* next = inline_box->NextOnLine(); next;
next = next->NextOnLine()) {
LayoutObject* layout_object =
@@ -1112,7 +1112,7 @@ AXObject* AXLayoutObject::NextOnLine() const {
return result;
}
-AXObject* AXLayoutObject::PreviousOnLine() const {
+AXObjectImpl* AXLayoutObject::PreviousOnLine() const {
if (!GetLayoutObject())
return nullptr;
@@ -1125,7 +1125,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 =
@@ -1284,9 +1284,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;
@@ -1390,7 +1391,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;
@@ -1417,7 +1419,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
@@ -1427,7 +1429,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;
@@ -1439,19 +1441,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;
@@ -1462,7 +1464,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;
}
@@ -1480,7 +1482,7 @@ AXObject* AXLayoutObject::ComputeParent() const {
return 0;
}
-AXObject* AXLayoutObject::ComputeParentIfExists() const {
+AXObjectImpl* AXLayoutObject::ComputeParentIfExists() const {
if (!layout_object_)
return 0;
@@ -1490,7 +1492,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;
}
@@ -1513,7 +1515,7 @@ AXObject* AXLayoutObject::ComputeParentIfExists() const {
// accessibility module.
//
-AXObject* AXLayoutObject::RawFirstChild() const {
+AXObjectImpl* AXLayoutObject::RawFirstChild() const {
if (!layout_object_)
return 0;
@@ -1525,7 +1527,7 @@ AXObject* AXLayoutObject::RawFirstChild() const {
return AxObjectCache().GetOrCreate(first_child);
}
-AXObject* AXLayoutObject::RawNextSibling() const {
+AXObjectImpl* AXLayoutObject::RawNextSibling() const {
if (!layout_object_)
return 0;
@@ -1593,10 +1595,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);
@@ -1631,11 +1633,11 @@ void AXLayoutObject::UpdateChildrenIfNecessary() {
if (NeedsToUpdateChildren())
ClearChildren();
- AXObject::UpdateChildrenIfNecessary();
+ AXObjectImpl::UpdateChildrenIfNecessary();
}
void AXLayoutObject::ClearChildren() {
- AXObject::ClearChildren();
+ AXObjectImpl::ClearChildren();
children_dirty_ = false;
}
@@ -1722,7 +1724,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;
@@ -1749,7 +1751,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) {
@@ -1792,7 +1794,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;
@@ -1826,7 +1828,7 @@ AXObject::AXRange AXLayoutObject::SelectionUnderObject() const {
return AXRange(start, end);
}
-AXObject::AXRange AXLayoutObject::TextControlSelection() const {
+AXObjectImpl::AXRange AXLayoutObject::TextControlSelection() const {
if (!GetLayoutObject())
return AXRange();
@@ -1843,7 +1845,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();
@@ -1888,7 +1890,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;
@@ -1903,7 +1905,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();
@@ -1929,7 +1931,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();
@@ -1962,9 +1964,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) ||
@@ -2016,7 +2018,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() ==
@@ -2047,7 +2050,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);
@@ -2056,7 +2059,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;
@@ -2176,7 +2179,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);
}
@@ -2209,11 +2212,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;
@@ -2243,7 +2246,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;
@@ -2251,13 +2254,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) {
@@ -2270,13 +2273,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;
@@ -2354,8 +2357,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;
@@ -2369,7 +2373,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(
@@ -2408,7 +2412,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();
@@ -2463,7 +2467,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);
@@ -2491,7 +2495,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()))
sashab 2017/05/08 23:58:34 Although this code is in modules/, it's using a pu
aboxhall 2017/05/09 02:01:02 This seems ok to me. Dominic, what do you think?
dmazzoni 2017/05/09 05:07:07 Yes, this seems fine. This is a reasonable use of
sashab 2017/05/10 04:24:43 Sgtm :)
children_.push_back(ax_popup);
}

Powered by Google App Engine
This is Rietveld 408576698