blob: 82900d3146fede3e16b8db58ca651af769f530da [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<style>
iframe {
height: 200px;
width: 400px;
}
</style>
<script src="/js-test-resources/js-test-pre.js"></script>
<script src="/js-test-resources/ui-helper.js"></script>
<script>
description("Tests that requestAnimationFrame is throttled in subframes that are cross-origin, and not in same-origin frames");
window.jsTestIsAsync = true;
var crossOriginFrame;
var sameOriginFrame
var throttledState = {
'cross' : undefined,
'same' : undefined,
}
var messageHandler;
var messagesReceived = 0;
function interactWithSubframes()
{
UIHelper.activateAt(crossOriginFrame.offsetLeft + 20, crossOriginFrame.offsetTop + 20).then(function() {
debug("Interacted with cross-origin frame");
UIHelper.activateAt(sameOriginFrame.offsetLeft + 20, sameOriginFrame.offsetTop + 20).then(function() {
debug("Interacted with same-origin frame");
messageHandler = checkUnthrottledAfterInteraction;
messagesReceived = 0;
crossOriginFrame.contentWindow.postMessage("report-throttle-cross", "*");
sameOriginFrame.contentWindow.postMessage("report-throttle-same", "*");
});
});
}
function runTest()
{
crossOriginFrame = document.getElementById("cross-origin-frame");
sameOriginFrame = document.getElementById("same-origin-frame");
debug("Checking that requestAnimationFrame is throttled in cross origin frame");
messageHandler = checkInitiallyThrottled;
messagesReceived = 0;
crossOriginFrame.contentWindow.postMessage("report-throttle-cross", "*");
sameOriginFrame.contentWindow.postMessage("report-throttle-same", "*");
}
function checkInitiallyThrottled()
{
shouldBeEqualToString("throttledState['cross']", "NonInteractiveCrossOriginFrame");
shouldBeEqualToString("throttledState['same']", "[Unthrottled]");
interactWithSubframes();
}
function checkUnthrottledAfterInteraction()
{
shouldBeEqualToString("throttledState['cross']", "[Unthrottled]");
shouldBeEqualToString("throttledState['same']", "[Unthrottled]");
finishJSTest();
}
window.onmessage = function(message)
{
debug("Received message: " + message.data);
if (message.data === "frameload") {
if (++messagesReceived == 2)
runTest();
return;
}
var re = /throttled\[(\w+)\]: ((\w+)(\|\w+)*|\[Unthrottled\])/;
var match = re.exec(message.data);
if (match) {
frameID = match[1];
throttledState[frameID] = match[2];
if (++messagesReceived == 2)
messageHandler();
return;
}
debug("Failed to handle message " + message.data);
}
</script>
</head>
<body>
<iframe id="cross-origin-frame" src="http://localhost:8000/frame-throttling/resources/requestAnimationFrame-frame.html?dontcacheme"></iframe>
<iframe id="same-origin-frame" src="resources/requestAnimationFrame-frame.html?dontcacheme"></iframe>
<script src="/js-test-resources/js-test-post.js"></script>
</body>
</html>