<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/js-test.js"></script>
<script src="resources/shadow-dom.js"></script>
</head>
<body>
<input id="input1"></input>
<div id="sandbox"></div>
<div id="console"></div>
<script>
var sandbox = document.getElementById('sandbox');

// A test for a non-distributed node.
sandbox.appendChild(
    createDOM('div', {'id': 'host'},
              createDOM('input', {'id': 'non-distributed-node'}),
              createShadowRoot({'id': 'shadow-root'})));
sandbox.offsetLeft;

document.getElementById('input1').focus();
shouldBeEqualToString('document.activeElement.id', 'input1');

document.getElementById('non-distributed-node').focus();
// Focus doesn't change because non-distributed-node can't get focused.
shouldBeEqualToString('document.activeElement.id', 'input1');

var shadowRoot = getNodeInComposedTree('host/');
shouldBeNull('shadowRoot.activeElement');


// A test for a distributed node.
sandbox.innerHTML = '';
sandbox.appendChild(
    createDOM('div', {'id': 'host'},
              createDOM('input', {'id': 'distributed-node'}),
              createShadowRoot({'id': 'shadow-root'},
                               createDOM('div', {'id': 'content-parent'},
                                         createDOM('content', {'id': 'content'})))));
sandbox.offsetLeft;

var distributedNode = document.getElementById('distributed-node');
distributedNode.focus();

shouldBeEqualToString('document.activeElement.id', 'distributed-node');
shadowRoot = getNodeInComposedTree("host/");
shouldBeEqualToString('shadowRoot.activeElement.id', 'distributed-node');

var contentParent = getNodeInComposedTree('host/content-parent');
contentParent.parentNode.removeChild(contentParent);
// This is a similar case where 'dispaly: none' is set to the focused element. We can't guarantee this case.
// The current implementation leaves the distributed node as document.activeElement.
// See the discussion from https://code.google.com/p/chromium/issues/detail?id=318448#c21.
shouldBeEqualToString('document.activeElement.id', 'distributed-node');
shouldBeNull('shadowRoot.activeElement');

var successfullyParsed = true;
</script>
</body>
</html>
