summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc')
-rw-r--r--chromium/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc16
1 files changed, 15 insertions, 1 deletions
diff --git a/chromium/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc b/chromium/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
index 1606304ac1c..1dd58539faa 100644
--- a/chromium/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
+++ b/chromium/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
@@ -894,6 +894,19 @@ void AXObjectCacheImpl::UpdateAriaOwns(
relation_cache_->UpdateAriaOwns(owner, id_vector, owned_children);
}
+bool AXObjectCacheImpl::MayHaveHTMLLabel(const HTMLElement& elem) {
+ // Return false if this type of element will not accept a <label for> label.
+ if (!elem.IsLabelable())
+ return false;
+
+ // Return true if a <label for> pointed to this element at some point.
+ if (relation_cache_->MayHaveHTMLLabelViaForAttribute(elem))
+ return true;
+
+ // Return true if any amcestor is a label, as in <label><input></label>.
+ return Traversal<HTMLLabelElement>::FirstAncestor(elem);
+}
+
void AXObjectCacheImpl::CheckedStateChanged(Node* node) {
PostNotification(node, ax::mojom::Event::kCheckedStateChanged);
}
@@ -1191,7 +1204,8 @@ void AXObjectCacheImpl::HandleValidationMessageVisibilityChanged(
}
void AXObjectCacheImpl::LabelChanged(Element* element) {
- TextChanged(ToHTMLLabelElement(element)->control());
+ // Will call back to TextChanged() when done updating relation cache.
+ relation_cache_->LabelChanged(element);
}
void AXObjectCacheImpl::InlineTextBoxesUpdated(