<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.testRunner) {
            testRunner.dumpAsText();
            testRunner.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.testRunner)
                    testRunner.notifyDone();
            }, 0);
        }
        window.onload=crash
    </script>
</head>
<body>
</body>
</html>
