<html>
<head>
<script src="../../http/tests/inspector/resources/protocol-test.js"></script>
<script>

function createFrame()
{
  let iframe = document.createElement("iframe");
  iframe.src = "data:text/html,<p>No JavaScript.</p>";
  document.body.appendChild(iframe);
}

function test()
{
    let suite = ProtocolTest.createAsyncSuite("Runtime.executionContextCreated.ContextWithoutScript");

    suite.addTestCase({
        name: "Runtime.executionContextCreated.ContextWithoutScript.SubFrame",
        description: "Test that Runtime.executionContextCreated event is fired when a new iframe is added to the page and its document doesn't have any JavaScript.",
        async test() {
            await InspectorProtocol.awaitCommand({method: "Page.enable"});
            await InspectorProtocol.awaitCommand({method: "Runtime.enable"});

            let [executionContextCreatedEvent] = await Promise.all([
                InspectorProtocol.awaitEvent({event: "Runtime.executionContextCreated"}),
                InspectorProtocol.awaitCommand({
                    method: "Runtime.evaluate",
                    params: {expression: `createFrame()`}
                })
            ]);

            ProtocolTest.pass("Should receive Runtime.executionContextCreated notification.");

            let evaluateResult = await InspectorProtocol.awaitCommand({
                method: "Runtime.evaluate",
                params: {
                    contextId: executionContextCreatedEvent.params.context.id,
                    expression: `document.body.textContent`
                }
            });

            ProtocolTest.expectEqual(evaluateResult.result.value, "No JavaScript.", "Should be able to evaluate in subframe.");
        }
    });

    suite.runTestCasesAndFinish();
}
</script>
</head>
<body onload="runTest()">
<p>Test that Runtime.executionContextCreated event is fired even for pages without JavaScript.</p>
</body>
</html>
