blob: 6cea9136885676f9ba3085f5fcbabb6614f67f89 [file] [log] [blame]
<html>
<head>
<script src="../../../inspector/inspector-test.js"></script>
<script src="../../../inspector/elements-test.js"></script>
<script>
function createShadowRootFromTemplate(root, selector, templateId)
{
var shadowHost = root.querySelector(selector);
var shadowRoot = shadowHost.createShadowRoot();
var template = document.querySelector(templateId);
var clone = document.importNode(template.content, true);
shadowRoot.appendChild(clone);
return shadowHost;
}
function initOldestShadowRoot()
{
createShadowRootFromTemplate(document, "#shadowHost", "#oldestShadowRootTemplate");
}
function initYoungestShadowRoot()
{
createShadowRootFromTemplate(document, "#shadowHost", "#youngestShadowRootTemplate");
}
function initInnerShadowRoot()
{
var shadowHost = document.querySelector("#shadowHost");
var innerShadowHost = createShadowRootFromTemplate(shadowHost.shadowRoot, ".innerShadowHost", "#innerShadowRootTemplate");
innerShadowHost.id = "innerShadowHost";
}
var lastDistributedNodeId = 0;
function addDistributedNode(oldest)
{
var node = document.createElement("div");
node.classList.add(oldest ? "distributeMeToOldest" : "distributeMeToYoungest");
node.classList.add("distributeMeAsWell_" + (++lastDistributedNodeId));
var shadowHost = document.querySelector("#shadowHost");
shadowHost.appendChild(node);
}
function addDistributedNodeToOldest()
{
addDistributedNode(true);
}
function test() {
var shadowHostNode;
var treeOutline;
var shadowHostTreeElement;
var innerShadowHostNode;
var innerShadowHostTreeElement;
ElementsTestRunner.expandElementsTree(elementsTreeExpanded);
function elementsTreeExpanded(node) {
treeOutline = ElementsTestRunner.firstElementsTreeOutline();
shadowHostNode = ElementsTestRunner.expandedNodeWithId('shadowHost');
shadowHostTreeElement = treeOutline.findTreeElement(shadowHostNode);
expandAndDumpShadowHostNode('========= Original ========', originalElementsTreeDumped);
}
function originalElementsTreeDumped(node) {
TestRunner.evaluateInPage('initOldestShadowRoot()', onOldestShadowRootInitialized);
}
function onOldestShadowRootInitialized() {
expandAndDumpShadowHostNode('========= After shadow root created ========', onOldestShadowRootDumped);
}
function onOldestShadowRootDumped() {
waitForModifiedNodesUpdate('After adding distributed node', distributedNodeChangedAfterFirstAdding);
TestRunner.evaluateInPage('addDistributedNodeToOldest()');
}
function distributedNodeChangedAfterFirstAdding() {
waitForModifiedNodesUpdate('After adding another distributed node', distributedNodeChangedAfterSecondAdding);
TestRunner.evaluateInPage('addDistributedNodeToOldest()');
}
function distributedNodeChangedAfterSecondAdding() {
TestRunner.completeTest();
}
function waitForModifiedNodesUpdate(title, next) {
TestRunner.addSniffer(Elements.ElementsTreeOutline.prototype, '_updateModifiedNodes', callback);
function callback() {
expandAndDumpShadowHostNode('========= ' + title + ' ========', next);
}
}
function expandAndDumpShadowHostNode(title, next) {
TestRunner.addResult(title);
ElementsTestRunner.expandElementsTree(callback);
function callback() {
ElementsTestRunner.dumpElementsTree(shadowHostNode);
next();
}
}
}
</script>
</head>
<body onload="runTest()">
<p>Tests that distributed nodes and their updates are correctly shown in different shadow host display modes.</p>
<template id="youngestShadowRootTemplate">
<div class="youngestShadowMain">
<shadow></shadow>
<content select=".distributeMeToYoungest"><div id="fallbackYoungest"></div></content>
<div class="innerShadowHost">
<content in-youngest-shadow-root select=".distributeMeToInner"></content>
</div>
</div>
</template>
<template id="oldestShadowRootTemplate">
<div class="oldestShadowMain">
<content select=".distributeMeToOldest"><div id="fallbackOldest"></div></content>
</div>
</template>
<template id="innerShadowRootTemplate">
<div class="innerShadowMain">
<content in-inner-shadow-root select=".distributeMeToInner"></content>
</div>
</template>
<div id="shadowHost">
<div class="distributeMeToYoungest original">
youngest distributed text
</div>
<div class="distributeMeToOldest original">
oldest distributed text
</div>
<div class="distributeMeToInner original">
oldest distributed text
</div>
<div class="distributeMeToInner original2">
oldest distributed text
</div>
</div>
</body>
</html>