blob: 89cd64b495d619ec12ba8022053836079a1729c3 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script>
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
}
</script>
</head>
<body>
<!-- This tests that we don't crash when overwriting the contents of page that has an SVG tree containing <use> elements
with references (i.e. xlink:href). You must run this test in DRT with Guard Malloc/MallocScribble (or the platform-
specific equivalent) enabled. -->
<svg>
<defs>
<g id="bg1">
<use xlink:href="#fill-rgn"/>
</g>
</defs>
<use id="A" xlink:href="#bg1"/>
<text id="B" x="0" y="20">FAIL</text>
</svg>
<script>
// Synchronous write; mark <use id="A"> as needing to be rebuilt because <g id="bg1"> is removed from the document.
document.write("FAIL");
window.setTimeout(crash, 0);
function crash() {
document.designMode = "on";
document.execCommand("SelectAll");
document.execCommand("FontName", true, "H5"); // Rebuilds targets for SVG nodes.
// Remove the contents between <use id="A"> and <text id="B"> (inclusively). Notice that these nodes have already been
// removed by the synchronous document.write() call above.
var range = document.createRange();
range.setStartBefore(document.getElementById("A"));
range.setEndAfter(document.getElementById("B"));
range.deleteContents(); // Rebuilds targets for SVG nodes.
if (window.GCController)
GCController.collect();
// Crash; rebuilds targets for SVG nodes, including the "element" at the memory location formerly occupied by <use id="A">.
document.body.innerHTML = "PASS, did not crash";
if (window.testRunner)
testRunner.notifyDone();
}
</script>
</body>
</html>