This succeeds if this test doesn't crash.
<ruby id=rubyEl><dl></dl><rt id=rubyTextEl></rt>><script>
var docElement = document.body ? document.body : document.documentElement;
function initCF() {
    try { fontFaceNameEl = document.createElementNS("http://www.w3.org/2000/svg", "font-face-name"); } catch(e) {}
    try { clipPathEl = document.createElementNS("http://www.w3.org/2000/svg", "clipPath"); } catch(e) {}
    setTimeout(CFcrash, 0);
}
function CFcrash() {
    try { if (rubyTextEl != docElement) { rubyTextEl.parentNode.removeChild(rubyTextEl); }} catch(e) {}
    try { clipPathEl.scrollIntoView(true); } catch(e) {}
    try { fontFaceNameEl.appendChild(rubyEl); } catch(e) {}
    setTimeout(finish, 0);
}
function finish()
{
    if (window.testRunner)
        testRunner.notifyDone();
}

if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

document.addEventListener("DOMContentLoaded", initCF, false);
</script>
