<?xml version="1.0"?>
<svg width="100%" height="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xhtml="http://www.w3.org/1999/xhtml" onload="startTest()">
<defs>
<script type="text/javascript">
function pass() {
    var contentElement = document.getElementById(test);

    if (contentElement.textContent == 'PASS') {
        contentElement.textContent = 'FAIL';
    } else if (contentElement.textContent == 'FAIL') {
        contentElement.textContent = 'PASS';
    }
}

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

    test = "p1";
    var e1 = document.createElementNS("http://www.w3.org/2000/svg", "svg:script");
    e1.textContent = pass.toString() + " pass();";
    document.getElementsByTagName("defs")[0].appendChild(e1);
    document.getElementsByTagName("defs")[0].removeChild(e1);

    test = "p2";
    document.getElementsByTagName("defs")[0].appendChild(e1);
    document.getElementsByTagName("defs")[0].removeChild(e1);

    test = "p3";
    message = "PASS";

    e3 = document.createElementNS("http://www.w3.org/2000/svg", "svg:script");
    e3.externalResourcesRequired.baseVal = true; // Otherwhise SVGLoad event will be fired immediately.
    e3.href.baseVal = "resources/script-reexecution.js";
    e3.onload = function() { finish(); }
    document.getElementsByTagName("defs")[0].appendChild(e3);
}

function finish() {
    test = "p4";
    message = "FAIL";

    e3.onload = "";
    document.getElementsByTagName("defs")[0].removeChild(e3);
    document.getElementsByTagName("defs")[0].appendChild(e3);

    if (window.testRunner)
        testRunner.notifyDone();
}
</script>
</defs>
<foreignObject>
<xhtml:p>Created script element, script data passed as text content, appended: <xhtml:span id="p1">FAIL</xhtml:span></xhtml:p>
<xhtml:p>Removed element, readd element, remove again, script shouldn't have executed:<xhtml:span id="p2">PASS</xhtml:span></xhtml:p>
<xhtml:p>Created script element, loading external script content, appended: <xhtml:span id="p3">FAIL</xhtml:span></xhtml:p>
<xhtml:p>Removed element, readd element, script shouldn't have executed: <xhtml:span id="p4">PASS</xhtml:span></xhtml:p>
</foreignObject>
</svg>
