<body>
You should see six OKs below (and not hang): <br>
<script>
if (window.layoutTestController)
    layoutTestController.dumpAsText();
var body = document.body;
var selection = window.getSelection();
try {
selection.collapse(body, -1);
} catch (e) {document.write(((e.code==DOMException.INDEX_SIZE_ERR) ? "OK" : "FAIL")+"<br>"); }

try {
selection.setBaseAndExtent(body, -1, body, 0);
} catch (e) {document.write(((e.code==DOMException.INDEX_SIZE_ERR) ? "OK" : "FAIL")+"<br>"); }

try {
selection.setBaseAndExtent(body, 0, body, -1);
} catch (e) {document.write(((e.code==DOMException.INDEX_SIZE_ERR) ? "OK" : "FAIL")+"<br>"); }

try {
selection.setPosition(body, -1);
} catch (e) {document.write(((e.code==DOMException.INDEX_SIZE_ERR) ? "OK" : "FAIL")+"<br>"); }

try {
selection.getRangeAt(-1);
} catch (e) {document.write(((e.code==DOMException.INDEX_SIZE_ERR) ? "OK" : "FAIL")+"<br>"); }

try {
selection.getRangeAt(10000);
} catch (e) {document.write(((e.code==DOMException.INDEX_SIZE_ERR) ? "OK" : "FAIL")+"<br>"); }

// these should throw as well but don't at the moment. Just checking they don't crash. 
selection.collapse(body, 10000);
selection.setBaseAndExtent(body, 1000, body, 0);
selection.setBaseAndExtent(body, 0, body, 10000);
selection.setPosition(body, 10000);
</script>
