<script src="repaint.js" type="text/javascript"></script>
<script type="text/javascript">

function step1() {
    if (window.layoutTestController)
        window.layoutTestController.waitUntilDone();
    // Wait for the frame to load.
    window.setTimeout(step2, 100);
}

function step2() {
    var frame = frames[0];
    var doc = frame.document;
    var body = doc.body;
    var sel = frame.getSelection();
    frame.focus();
    sel.setPosition(body, 0);
    doc.execCommand("InsertText", false, "You should not see a caret in this text.");
    var text = body.firstChild;
    sel.setPosition(text, text.length);
    // Wait for the caret to paint.
    window.setTimeout(runRepaintTest, 100);
}

function repaintTest() {
    var frame = frames[0];
    var doc = frame.document;
    var body = doc.body;
    var text = body.firstChild;
    var sel = frame.getSelection();
    
    sel.setBaseAndExtent(text, 5, text, text.length);
    
    if (window.layoutTestController)
        window.layoutTestController.notifyDone();
}
</script>

<body onload="step1();">
<iframe src="resources/contenteditable-iframe-src.html"></iframe>
</body>
