summaryrefslogtreecommitdiffstats
path: root/dom/html/HTMLLabelElement.cpp
diff options
context:
space:
mode:
authorwolfbeast <mcwerewolf@gmail.com>2018-03-12 11:18:06 +0100
committerwolfbeast <mcwerewolf@gmail.com>2018-03-12 11:18:06 +0100
commitba74a4174d2cd6ccbabbc5aa6f4ffdf74b48f45c (patch)
tree42296be483ab2f1f3042f5aca8ce91c2aa669ec3 /dom/html/HTMLLabelElement.cpp
parenteda34d02aa8159def0d811846e9417c37cea15cd (diff)
parent519775b8d9d823b8cee786bc668e050110a8aa67 (diff)
downloadUXP-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.cpp23
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);
}