<html>
<head>
    <script>
        if (window.layoutTestController)
             layoutTestController.dumpAsText();

        function test() {
            var selection = window.getSelection();
            selection.selectAllChildren(document.getElementById("contentDiv"));
            document.execCommand("Outdent", false, "");

            console.log(document.getElementById("contentDiv").children.length == 3
                ? "SUCCESS: Nodes stayed in order after outdent."
                : "FAILED: Nodes became out of order after outdent.");
        }
    </script>
</head>
<body onload="test()">
    <div id="description">This test uses the execCommand to Outdent the text below. <b>This test that nodes, with different relationships with blockquotes, stay in the correct order after an outdent.</b></div>
    <br>
    <div contenteditable="true" id="contentDiv">
        <blockquote class="webkit-indent-blockquote" >
            <blockquote class="webkit-indent-blockquote" id="a" >A</blockquote>
            <blockquote class="webkit-indent-blockquote" id="cd">B<br>C</blockquote>
        </blockquote>
    </div>
</body>
</html>