<!DOCTYPE html>
<html>
<head>
    <title>CSS Scoping Module Level 1 - ::slotted pseudo element rule must apply to an element that got slotted via another slot</title>
    <link rel="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"/>
    <link rel="help" href="http://www.w3.org/TR/css-scoping-1/#slotted-pseudo">
    <link rel="match" href="reference/green-box.html"/>
</head>
<body>
    <style>
        outer-host {
            display: block;
            width: 100px;
            height: 100px;
            background: red;
        }
        outer-host > * {
            display: block;
            width: 100px;
            height: 25px;
        }
    </style>
    <p>Test passes if you see a single 100px by 100px green box below.</p>
    <outer-host>
        <span slot="outer">FAIL1</span>
        <span slot="inner">FAIL2</span>
        <span slot="both">FAIL3</span>
    </outer-host>
    <template id="outer-host-template">
        <inner-host>
            <style>
                ::slotted([slot=outer]) { background: green; color: green; }
                ::slotted([slot=both]) { background: green; }
                span { display: block; width: 100px; height: 25px; }
            </style>
            <slot name="outer"></slot>
            <slot name="inner"></slot>
            <slot name="both"></slot>
            <span slot="inner">FAIL4</span>
        </inner-host>
    </template>
    <template id="inner-host-template">
        <style>
            ::slotted([slot=inner]) { background: green; color: green; }
            ::slotted([slot=both]) { color: green; }
        </style>
        <slot></slot>
        <slot name="inner"></slot>
    </template>
    <script>

        try {
            var outerHost = document.querySelector('outer-host');
            outerShadow = outerHost.attachShadow({mode: 'closed'});
            outerShadow.appendChild(document.getElementById('outer-host-template').content.cloneNode(true));

            var innerHost = outerShadow.querySelector('inner-host');
            innerShadow = innerHost.attachShadow({mode: 'closed'});
            innerShadow.appendChild(document.getElementById('inner-host-template').content.cloneNode(true));
        } catch (exception) {
            document.body.appendChild(document.createTextNode(exception));
        }

    </script>
</body>
</html>
