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

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

Issue 2670023002: Correctly compute parent of AXMenuListOption (Closed)
Patch Set: Rebaseline Created 3 years, 10 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/AXMenuListOption.cpp
diff --git a/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.cpp b/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.cpp
index db27248dfeec9904266e0b304201c2089fb57e33..c59a31d2fb5dd842be1ebb5f6013d392ad683d22 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.cpp
@@ -26,6 +26,7 @@
#include "modules/accessibility/AXMenuListOption.h"
#include "SkMatrix44.h"
+#include "core/html/HTMLSelectElement.h"
#include "modules/accessibility/AXMenuListPopup.h"
#include "modules/accessibility/AXObjectCacheImpl.h"
@@ -38,7 +39,7 @@ AXMenuListOption::AXMenuListOption(HTMLOptionElement* element,
: AXMockObject(axObjectCache), m_element(element) {}
AXMenuListOption::~AXMenuListOption() {
- ASSERT(!m_element);
+ DCHECK(!m_element);
}
void AXMenuListOption::detach() {
@@ -57,6 +58,26 @@ AccessibilityRole AXMenuListOption::roleValue() const {
return MenuListOptionRole;
}
+AXObject* AXMenuListOption::computeParent() const {
+ Node* node = getNode();
+ if (!node)
+ return nullptr;
+ Node* select = toHTMLOptionElement(node)->ownerSelectElement();
+ if (!select)
+ return nullptr;
+ AXObject* selectAXObject = axObjectCache().getOrCreate(select);
+ if (selectAXObject->hasChildren()) {
+ const auto& childObjects = selectAXObject->children();
+ DCHECK(!childObjects.isEmpty());
+ DCHECK_EQ(childObjects.size(), 1UL);
+ DCHECK(childObjects[0]->isMenuListPopup());
+ toAXMenuListPopup(childObjects[0].get())->updateChildrenIfNecessary();
+ } else {
+ selectAXObject->updateChildrenIfNecessary();
+ }
+ return m_parent.get();
+}
+
Element* AXMenuListOption::actionElement() const {
return m_element;
}
@@ -115,12 +136,12 @@ void AXMenuListOption::getRelativeBounds(
AXObject* parent = parentObject();
if (!parent)
return;
- ASSERT(parent->isMenuListPopup());
+ DCHECK(parent->isMenuListPopup());
AXObject* grandparent = parent->parentObject();
if (!grandparent)
return;
- ASSERT(grandparent->isMenuList());
+ DCHECK(grandparent->isMenuList());
grandparent->getRelativeBounds(outContainer, outBoundsInContainer,
outContainerTransform);
}
@@ -134,7 +155,7 @@ String AXMenuListOption::textAlternative(bool recursive,
// If nameSources is non-null, relatedObjects is used in filling it in, so it
// must be non-null as well.
if (nameSources)
- ASSERT(relatedObjects);
+ DCHECK(relatedObjects);
if (!getNode())
return String();

Powered by Google App Engine
This is Rietveld 408576698