blob: 7349b0fc0853ca460981b86740588afb514442f9 [file] [log] [blame]
<!DOCTYPE html>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<div id="shadowHost"></div>
<style id="style"></style>
<script>
function moveAndReentrantlyAppendToStyleElement() {
let sr = shadowHost.createShadowRoot();
let script = document.createElement('script');
sr.appendChild(script);
let scriptText = `
let s = shadowHost.shadowRoot.querySelector('style');
let text = document.createTextNode('div { background-color: skyblue; }');
s.appendChild(text);`;
// Appending scriptText and style in the same call is important here. This way
// scriptText will be evaluated synchronously while in script.append.
// Having that script execute before the tree-scope-move was fully completed
// is what caused a crash previously.
script.append(scriptText, style);
}
test(function () {
try {
moveAndReentrantlyAppendToStyleElement();
} catch (e) {}
let bg = shadowHost.shadowRoot.styleSheets[0].cssRules[0].styleMap
.get('background-color').toString();
assert_equals(bg, 'skyblue'); // Don't crash.
}, 'Reentrantly appending to style element while changing tree scope does not crash');
</script>