<!DOCTYPE html>
<html>
<head>
<script src="resources/frame-programmatic-resize.js"></script>
<script>
if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.dumpChildFramesAsText();
}

window.onload = runTests;

function runTests()
{
    if (!window.eventSender)
        return; // Cannot run this test without DRT.

    description("This tests that frame resizing is allowed and disallowed when programmatically removing and adding the noresize attribute, respectively.");
    setTestFrameById("testFrame");

    log("Test disallow frame resize via noResize IDL attribute:");
    shouldDisallowFrameResizeAfterProcessingFrame(function(frame) { frame.noResize = true });

    log("\nTest allow frame resize when noResize IDL attribute has value undefined:");
    shouldAllowFrameResizeAfterProcessingFrame(function(frame) { frame.noResize = undefined });

    log("\nTest allow frame resize when noResize IDL attribute has value null:");
    shouldAllowFrameResizeAfterProcessingFrame(function(frame) { frame.noResize = null });

    log("\nTest disallow frame resize via noresize content attribute:");
    // Note, noresize is a boolean attribute. That is, its presence indicates true regardless of its value.
    shouldDisallowFrameResizeAfterProcessingFrame(function(frame) { frame.setAttribute("noresize", "true") });
    shouldDisallowFrameResizeAfterProcessingFrame(function(frame) { frame.setAttribute("noresize", "false") });
    shouldDisallowFrameResizeAfterProcessingFrame(function(frame) { frame.setAttribute("noresize", "dummy") });
    shouldDisallowFrameResizeAfterProcessingFrame(function(frame) { frame.setAttribute("noresize", String()) });

    log("\nTest disallow then allow frame resize via noResize IDL attribute (i.e. increase frame width by " + deltaWidth() + " pixels):");
    shouldDisallowFrameResizeAfterProcessingFrame(function(frame) { frame.noResize = true });
    shouldAllowFrameResizeAfterProcessingFrame(function(frame) { frame.noResize = false });

    log("\nTest disallow then allow frame resize via noresize content attribute (i.e. increase frame width by " + deltaWidth() + " pixels):");
    shouldDisallowFrameResizeAfterProcessingFrame(function(frame) { frame.setAttribute("noresize", "true") });
    shouldAllowFrameResizeAfterProcessingFrame(function(frame) { frame.removeAttribute("noresize") });
}
</script>
</head>
<frameset cols="200,*" border="10">
    <frame id="testFrame" name="testFrame" src="about:blank">
    <frame id="results" name="results" src="data:text/html,<p id='description'>This test can only be run using DRT.</p><pre id='console'></pre>">
</frameset>
</html>
