Index: third_party/WebKit/Source/modules/accessibility/AXMenuListOption.cpp |
diff --git a/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.cpp b/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.cpp |
index af8b879f8aa95cb684c00df08472d6ac07eb7339..f8c4eec6adeeb596d381765f435ccf89232a9bae 100644 |
--- a/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.cpp |
+++ b/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.cpp |
@@ -28,6 +28,7 @@ |
#include "SkMatrix44.h" |
#include "core/dom/AccessibleNode.h" |
#include "core/html/HTMLSelectElement.h" |
+#include "modules/accessibility/AXMenuList.h" |
#include "modules/accessibility/AXMenuListPopup.h" |
#include "modules/accessibility/AXObjectCacheImpl.h" |
@@ -48,6 +49,12 @@ void AXMenuListOption::Detach() { |
AXMockObject::Detach(); |
} |
+LocalFrameView* AXMenuListOption::DocumentFrameView() const { |
+ if (IsDetached()) |
+ return nullptr; |
+ return element_->GetDocument().View(); |
+} |
+ |
AccessibilityRole AXMenuListOption::RoleValue() const { |
const AtomicString& aria_role = |
GetAOMPropertyOrARIAAttribute(AOMStringProperty::kRole); |
@@ -72,14 +79,21 @@ AXObjectImpl* AXMenuListOption::ComputeParent() const { |
if (!select) |
return nullptr; |
AXObjectImpl* select_ax_object = AxObjectCache().GetOrCreate(select); |
- if (select_ax_object->HasChildren()) { |
- const auto& child_objects = select_ax_object->Children(); |
- DCHECK(!child_objects.IsEmpty()); |
+ |
+ // This happens if the <select> is not rendered. Return it and move on. |
+ if (!select_ax_object->IsMenuList()) |
+ return select_ax_object; |
+ |
+ AXMenuList* menu_list = ToAXMenuList(select_ax_object); |
+ if (menu_list->HasChildren()) { |
+ const auto& child_objects = menu_list->Children(); |
+ if (child_objects.IsEmpty()) |
+ return nullptr; |
DCHECK_EQ(child_objects.size(), 1UL); |
DCHECK(child_objects[0]->IsMenuListPopup()); |
ToAXMenuListPopup(child_objects[0].Get())->UpdateChildrenIfNecessary(); |
} else { |
- select_ax_object->UpdateChildrenIfNecessary(); |
+ menu_list->UpdateChildrenIfNecessary(); |
} |
return parent_.Get(); |
} |