<!DOCTYPE html>
<html>
<body>
<script src="../../fast/dom/shadow/resources/polyfill.js"></script>

<p>This test confirms some combination of editing command with Shadow DOM does not cause a crash.
To test manually, select from (before nested) to (after nested), then press Italic, and InsertUnorderedList.</p>

<div id="container" contenteditable>
    <div><p>(before host)</p></div>
    <div id="host">    <span contenteditable="false">not editable</span></div>
    <div>(after host)</div>

    <input type="button" value="Italic" onclick="document.execCommand('Italic')" />
    <input type="button" value="InsertUnorderedList" onclick="document.execCommand('InsertUnorderedList')" />
</div>

<script>
if (window.testRunner)
    testRunner.dumpAsText();

var shadowRoot = host.webkitCreateShadowRoot();
var div = document.createElement('div');
shadowRoot.appendChild(div);
div.innerHTML = "<span contenteditable>(before shadow)</span><shadow></shadow>(after shadow)";

var nestedShadowRoot = div.webkitCreateShadowRoot();
nestedShadowRoot.innerHTML = "<div contenteditable>(before <span id='src'></span>nested)<shadow></shadow>(nested <span id='dst'></span>after)</div>";

var src = nestedShadowRoot.getElementById('src');
var dst = nestedShadowRoot.getElementById('dst');

if (window.eventSender) {
    eventSender.mouseMoveTo(src.offsetLeft + src.offsetWidth / 2, src.offsetTop + src.offsetHeight / 2);
    eventSender.mouseDown();
    eventSender.mouseMoveTo(dst.offsetLeft + dst.offsetWidth / 2, dst.offsetTop + dst.offsetHeight / 2);
    eventSender.mouseUp();

    document.execCommand('Italic');
    document.execCommand('InsertUnorderedList');

    container.innerHTML = "PASS";
}

var successfullyParsed = true;
</script>

<script src="../../../resources/js-test-post.js"></script>
</body>
</html>
