diff options
author | wolfbeast <mcwerewolf@gmail.com> | 2018-03-12 11:18:06 +0100 |
---|---|---|
committer | wolfbeast <mcwerewolf@gmail.com> | 2018-03-12 11:18:06 +0100 |
commit | ba74a4174d2cd6ccbabbc5aa6f4ffdf74b48f45c (patch) | |
tree | 42296be483ab2f1f3042f5aca8ce91c2aa669ec3 /dom/html/HTMLLabelElement.cpp | |
parent | eda34d02aa8159def0d811846e9417c37cea15cd (diff) | |
parent | 519775b8d9d823b8cee786bc668e050110a8aa67 (diff) | |
download | UXP-ba74a4174d2cd6ccbabbc5aa6f4ffdf74b48f45c.tar UXP-ba74a4174d2cd6ccbabbc5aa6f4ffdf74b48f45c.tar.gz UXP-ba74a4174d2cd6ccbabbc5aa6f4ffdf74b48f45c.tar.lz UXP-ba74a4174d2cd6ccbabbc5aa6f4ffdf74b48f45c.tar.xz UXP-ba74a4174d2cd6ccbabbc5aa6f4ffdf74b48f45c.zip |
Merge branch 'ported-moebius'
Diffstat (limited to 'dom/html/HTMLLabelElement.cpp')
-rw-r--r-- | dom/html/HTMLLabelElement.cpp | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/dom/html/HTMLLabelElement.cpp b/dom/html/HTMLLabelElement.cpp index c1d22b0a6..d1c037336 100644 --- a/dom/html/HTMLLabelElement.cpp +++ b/dom/html/HTMLLabelElement.cpp @@ -14,6 +14,7 @@ #include "nsFocusManager.h" #include "nsIDOMMouseEvent.h" #include "nsQueryObject.h" +#include "mozilla/dom/ShadowRoot.h" // construction, destruction @@ -268,17 +269,23 @@ HTMLLabelElement::GetLabeledElement() const return GetFirstLabelableDescendant(); } - // We have a @for. The id has to be linked to an element in the same document + // We have a @for. The id has to be linked to an element in the same tree // 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; + nsINode* root = SubtreeRoot(); + ShadowRoot* shadow = ShadowRoot::FromNode(root); + Element* element = nullptr; + + if (shadow) { + element = shadow->GetElementById(elementId); + } else { + nsIDocument* doc = GetUncomposedDoc(); + if (doc) { + element = doc->GetElementById(elementId); + } else { + element = nsContentUtils::MatchElementId(root->AsContent(), elementId); + } } - Element* element = doc->GetElementById(elementId); if (element && element->IsLabelable()) { return static_cast<nsGenericHTMLElement*>(element); } |