Commit 716357ac authored by Rune Lillesveen's avatar Rune Lillesveen Committed by Commit Bot

Make ::slotted() never match <slot> elements.

According to the css-scoping spec, ::slotted() matches flattened
slotables. Slot elements which are assigned to other slots are not part
of the flattened slotables. The test currently fails because slots are
not included in the flat tree.

Bug: 660265
Change-Id: Ifbcb03d3212db59d762d173a221382ed79ccbd0e
Reviewed-on: https://chromium-review.googlesource.com/887950Reviewed-by: default avatarHayato Ito <hayato@chromium.org>
Commit-Queue: Rune Lillesveen <futhark@chromium.org>
Cr-Commit-Position: refs/heads/master@{#532335}
parent 58d554bd
......@@ -920,6 +920,7 @@ crbug.com/505364 external/wpt/shadow-dom/untriaged/elements-and-dom-objects/exte
crbug.com/505364 external/wpt/css/css-scoping/css-scoping-shadow-slot-display-override.html [ Failure ]
crbug.com/505364 external/wpt/css/css-scoping/css-scoping-shadow-slot-style.html [ Failure ]
crbug.com/505364 external/wpt/css/css-scoping/css-scoping-shadow-nested-slot-display-override.html [ Failure ]
crbug.com/505364 external/wpt/css/css-scoping/slotted-slot.html [ Failure ]
crbug.com/552494 scrollbars/overflow-scrollbar-combinations.html [ Pass Failure ]
crbug.com/552494 virtual/prefer_compositing_to_lcd_text/scrollbars/overflow-scrollbar-combinations.html [ Pass Failure ]
......
<!DOCTYPE html>
<title>CSS Test: ::slotted() not matching slot elements</title>
<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-scoping/#slotted-pseudo">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="host" style="color:green">This text should be green.</div>
<script>
test(() => {
let root = host.attachShadow({mode:"open"});
root.innerHTML = '<div><slot id="slot"></slot><div>';
let innerHost = root.firstChild;
let innerRoot = innerHost.attachShadow({mode:"open"});
innerRoot.innerHTML = "<style>::slotted(#slot){color:red}</style><slot></slot>";
assert_equals(getComputedStyle(root.querySelector("#slot")).color, "rgb(0, 128, 0)");
}, "Check that ::slotted does not match slot elements");
</script>
......@@ -504,6 +504,10 @@ SelectorChecker::MatchStatus SelectorChecker::MatchForRelation(
}
case CSSSelector::kShadowSlot: {
if (IsHTMLSlotElement(context.element) &&
ToHTMLSlotElement(context.element)->SupportsAssignment()) {
return kSelectorFailsCompletely;
}
const HTMLSlotElement* slot = FindSlotElementInScope(context);
if (!slot)
return kSelectorFailsCompletely;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment