<html>
<head>
    <style>
      #el0 {
        -webkit-column-axis: vertical;
        border-collapse: collapse;
        width: 1;
        height: 1;
      }
      #el1 {
        width: 1;
        float: left;
        display: table;
      }
      #el2 {
        content: counter(c);
        display: table-footer-group;
      }
    </style>
    <script>
        if (window.layoutTestController) {
            layoutTestController.dumpAsText();
            layoutTestController.waitUntilDone();
        }

        function crash() {
            el0 = document.createElement('div');
            el0.setAttribute('id', 'el0');
            document.body.appendChild(el0);
            el1 = document.createElement('div');
            el1.setAttribute('id', 'el1');
            el0.appendChild(el1);
            el2 = document.createElement('div');
            el2.setAttribute('id', 'el2');
            el1.appendChild(el2);
            setTimeout(function() {
                document.body.offsetTop;
                document.body.style.zoom*=1.1;
                document.designMode='on';
                document.execCommand("selectall");
                document.execCommand("italic");

                document.body.innerHTML = "Bug 74026: Crash in RenderTable::outerBorderAfter<br>This test has PASSED!";

                if (window.layoutTestController)
                    layoutTestController.notifyDone();
            }, 0);
        }
        window.onload=crash
    </script>
</head>
<body>
</body>
</html>
