<html>
<head>
    <script src="resources/cross-frame-access.js"></script>
    <script>
        if (window.testRunner) {
            testRunner.dumpAsText();
            testRunner.dumpChildFramesAsText();
            testRunner.waitUntilDone();
        }

        onload = function()
        {
            // Add manual run buttons if the browser does not support window.postMessage
            if (!window.postMessage) {
                log("YOUR BROWSER DOES NOT SUPPORT window.postMessage");
                log("To run this test manually, first click the button titled 'Step 1 - Set Test' in this frame.");
                log("Then click the button in the sub frame titled 'Step 2 - Set Check' to finish the test.\n");

                var button = document.createElement("button");
                button.appendChild(document.createTextNode("Step 1 - Set Test"));
                button.onclick = doTest;
                document.body.appendChild(button);
            }
        }

        receiver = function(e)
        {
            if (e.data == "propertiesSet")
                doTest();
        }
        addEventListener('message', receiver, false);


        doTest = function()
        {
            targetFrame = frames[0];

            // Attempt to inject functions into the target frame.  These will be checked in the final step.
            try { Object.prototype.__defineSetter__.call(targetFrame, 'injectedSetter', function() { alert("Set injected setter in: " + document.URL); return "customSetter"; }); } catch(e) { log(e); }
            try { Object.prototype.__defineGetter__.call(targetFrame, 'injectedGetter', function() { return "customGetter"; }); } catch(e) { log(e); }

            log("\n----- test getting values cross-frame using Object.prototype -----\n");

            // Attempt to detect values set on the target frame.
            try { shouldBe("Object.prototype.__lookupGetter__.call(targetFrame, 'myGetter');", "undefined"); } catch(e) { log(e); }
            try { shouldBe("Object.prototype.__lookupSetter__.call(targetFrame, 'mySetter');", "undefined"); } catch(e) { log(e); }

            try { shouldBe("Object.prototype.propertyIsEnumerable.call(targetFrame, 'myProp');", "false"); } catch(e) { log(e); }
            // FIXME: Unfortunatly, all cross-cross frame calls hasOwnProperty will return true so there is no way to test this right now.
            // try { shouldBe("Object.prototype.hasOwnProperty.call(targetFrame, 'myProp');", "false"); } catch(e) { log(e); }

            if (window.postMessage)
                targetFrame.postMessage("settingValuesComplete", "*");
            else
                log("\nSet Test complete!  Click button entitled 'Step 2 - Set Check' to finish the test.");
        }
    </script>
</head>
<body>
    <iframe name="target" src="http://localhost:8000/security/resources/cross-frame-iframe-for-object-prototype-test.html"></iframe>
    <pre id="console"></pre>
</body>
</html>
