diff options
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.cc | 16 |
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( |