nsGenericHTMLElement* HTMLLabelElement::GetLabeledElement() const { nsAutoString elementId; if (!GetAttr(kNameSpaceID_None, nsGkAtoms::_for, elementId)) { // No @for, so we are a label for our first form control element. // Do a depth-first traversal to look for the first form control element. return GetFirstLabelableDescendant(); } // We have a @for. The id has to be linked to an element in the same document // and this element should be a labelable form control. //XXXsmaug It is unclear how this should work in case the element is in // Shadow DOM. // See https://www.w3.org/Bugs/Public/show_bug.cgi?id=26365. nsIDocument* doc = GetUncomposedDoc(); if (!doc) { return nullptr; } Element* element = doc->GetElementById(elementId); if (element && element->IsLabelable()) { return static_cast<nsGenericHTMLElement*>(element); } return nullptr; }
nsGenericHTMLElement* HTMLLabelElement::GetLabeledElement() const { nsAutoString elementId; if (!GetAttr(kNameSpaceID_None, nsGkAtoms::_for, elementId)) { // No @for, so we are a label for our first form control element. // Do a depth-first traversal to look for the first form control element. return GetFirstLabelableDescendant(); } // We have a @for. The id has to be linked to an element in the same document // and this element should be a labelable form control. nsIDocument* doc = GetCurrentDoc(); if (!doc) { return nullptr; } Element* element = doc->GetElementById(elementId); if (element && element->IsLabelable()) { return static_cast<nsGenericHTMLElement*>(element); } return nullptr; }