68 lines
2.6 KiB
HTML
68 lines
2.6 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<script src="../../resources/js-test-pre.js"></script>
|
|
<script src="./resources/paint-api-utils.js"></script>
|
|
</head>
|
|
<body>
|
|
<div class="spacer"></div>
|
|
<iframe width="100" height="100" id="nonSandboxed" src="./resources/fcp-subframe.html"></iframe>
|
|
<div class="spacer"></div>
|
|
<iframe id="sandboxed" src="./resources/fcp-subframe.html" sandbox="allow-scripts"></iframe>
|
|
<div class="spacer"></div>
|
|
|
|
TEXT
|
|
|
|
<script>
|
|
description("Paint API should be available for same-origin frames but not to cross-origin/sandboxed frames.");
|
|
window.jsTestIsAsync = true;
|
|
window.didReceiveMessage = false;
|
|
|
|
window.onload = async () => {
|
|
const sandboxed = document.getElementById('sandboxed');
|
|
const nonSandboxed = document.getElementById('nonSandboxed');
|
|
const fcpMessagePromise = new Promise(resolve => {
|
|
window.onmessage = event => {
|
|
window.receivedEvent = event;
|
|
const isFromSandboxed = event.source === sandboxed.contentWindow;
|
|
const message = JSON.parse(event.data);
|
|
switch (message.type) {
|
|
case 'supported':
|
|
if (isFromSandboxed)
|
|
window.sandboxSupportedTypes = message.supported;
|
|
else
|
|
window.nonSandboxSupportedTypes = message.supported;
|
|
break;
|
|
case 'received':
|
|
window.didReceiveMessageFromSandboxedIframe = isFromSandboxed;
|
|
window.receivedEntry = message.entry;
|
|
didReceiveMessage = true;
|
|
shouldBe('receivedEvent.source', "document.getElementById('nonSandboxed').contentWindow");
|
|
shouldBe('receivedEntry.name', "'first-contentful-paint'");
|
|
resolve();
|
|
break;
|
|
}
|
|
};
|
|
});
|
|
|
|
sandboxed.contentWindow.postMessage("paint", "*");
|
|
await waitForFCP();
|
|
nonSandboxed.contentWindow.postMessage("paint", "*");
|
|
await waitForFCP();
|
|
await fcpMessagePromise;
|
|
shouldBeFalse('didReceiveMessageFromSandboxedIframe');
|
|
shouldBeTrue('Array.isArray(nonSandboxSupportedTypes)');
|
|
shouldBeTrue('Array.isArray(sandboxSupportedTypes)');
|
|
shouldBeTrue('didReceiveMessage');
|
|
shouldBeTrue('nonSandboxSupportedTypes.includes("paint")');
|
|
shouldBeFalse('sandboxSupportedTypes.includes("paint")');
|
|
testPassed("PerformanceObserver first-contentful-paint callback was fired for same-origin frame but not for cross-origin frame");
|
|
finishJSTest();
|
|
};
|
|
|
|
|
|
</script>
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</body>
|
|
</html>
|