<!-- webkit-test-runner [ useEphemeralSession=true ] -->
<!DOCTYPE html>
<html>
<head>
    <script src="/js-test-resources/js-test.js"></script>
    <script src="/js-test-resources/ui-helper.js"></script>
    <script src="/resourceLoadStatistics/resources/util.js"></script>
    <script>
        description("Tests that cross-origin iframe storage access is denied if the iframe is sandboxed, has the allow token, but calls the API without a user gesture being processed (ephemeral).");
        jsTestIsAsync = true;

        const hostUnderTest = "localhost:8000";
        const statisticsUrl = "http://" + hostUnderTest + "/temp";

        function receiveMessage(event) {
            if (event.origin === "http://localhost:8000") {
                if (event.data.indexOf("PASS") !== -1)
                    testPassed(event.data.replace("PASS ", ""));
                else
                    testFailed(event.data.replace("FAIL ", ""));
            } else
                testFailed("Received a message from an unexpected origin: " + event.origin);
            testRunner.setStatisticsShouldBlockThirdPartyCookies(false, function() {
                setEnableFeature(false, finishJSTest);
            });
        }

        window.addEventListener("message", receiveMessage, false);

        function runTest() {
            setEnableFeature(true, function() {
                testRunner.setStatisticsShouldBlockThirdPartyCookies(true, function() {
                    testRunner.setStatisticsHasHadUserInteraction(statisticsUrl, true, function() {
                        if (!testRunner.isStatisticsHasHadUserInteraction(statisticsUrl))
                            testFailed("Host did not get logged for user interaction.");
                        let iframeElement = document.createElement("iframe");
                        iframeElement.setAttribute("sandbox", "allow-storage-access-by-user-activation allow-scripts allow-same-origin allow-modals");
                        iframeElement.id = "TheIframeThatRequestsStorageAccess";
                        iframeElement.src = "http://localhost:8000/storageAccess/resources/request-storage-access-without-user-gesture-iframe.html#userShouldGrantAccess,userShouldNotBeConsulted,policyShouldNotGrantAccess,isNotSameOriginIframe";
                        document.body.appendChild(iframeElement);
                    });
                });
            });
        }
    </script>
</head>
<body onload="runTest()">
</body>
</html>
