summaryrefslogtreecommitdiffstats
path: root/dom/base/test/test_bug1639328.html
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /dom/base/test/test_bug1639328.html
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/base/test/test_bug1639328.html')
-rw-r--r--dom/base/test/test_bug1639328.html89
1 files changed, 89 insertions, 0 deletions
diff --git a/dom/base/test/test_bug1639328.html b/dom/base/test/test_bug1639328.html
new file mode 100644
index 0000000000..567b97ddb5
--- /dev/null
+++ b/dom/base/test/test_bug1639328.html
@@ -0,0 +1,89 @@
+<!DOCTYPE HTML>
+<meta charset="utf-8">
+<title>Test for bug 1639328</title>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<style>
+ /* To ensure that they're all in the viewport when displayed */
+ iframe {
+ width: 10px;
+ height: 10px;
+ }
+ iframe[id^=zero-size] {
+ width: 0;
+ height: 0;
+ }
+</style>
+<iframe id="http" src="https://example.com/tests/dom/base/test/file_bug1639328.html"></iframe>
+<iframe id="https" src="https://example.com/tests/dom/base/test/file_bug1639328.html"></iframe>
+<iframe id="same-origin" src="file_bug1639328.html"></iframe>
+<iframe id="zero-size-http" src="https://example.com/tests/dom/base/test/file_bug1639328.html"></iframe>
+<iframe id="zero-size-https" src="https://example.com/tests/dom/base/test/file_bug1639328.html"></iframe>
+<iframe id="zero-size-same-origin" src="file_bug1639328.html"></iframe>
+<iframe id="display-none-http" style="display: none" src="https://example.com/tests/dom/base/test/file_bug1639328.html"></iframe>
+<iframe id="display-none-https" style="display: none" src="https://example.com/tests/dom/base/test/file_bug1639328.html"></iframe>
+<iframe id="display-none-same-origin" style="display: none" src="file_bug1639328.html"></iframe>
+<iframe id="vis-hidden-http" style="visibility: hidden" src="https://example.com/tests/dom/base/test/file_bug1639328.html"></iframe>
+<iframe id="vis-hidden-https" style="visibility: hidden" src="https://example.com/tests/dom/base/test/file_bug1639328.html"></iframe>
+<iframe id="vis-hidden-same-origin" style="visibility: hidden" src="file_bug1639328.html"></iframe>
+<script>
+SimpleTest.waitForExplicitFinish();
+
+function getOneMessage(frame) {
+ info(`querying ${frame.src} (${frame.id})`);
+ let resolve;
+ let promise = new Promise(r => { resolve = r; });
+ window.addEventListener("message", function(e) {
+ info("got " + JSON.stringify(e.data));
+ resolve(e.data);
+ }, { once: true });
+ frame.contentWindow.postMessage("ping", "*");
+ return promise;
+}
+
+async function ticks(n) {
+ for (let i = 0; i < n; ++i) {
+ await new Promise(resolve => requestAnimationFrame(resolve));
+ }
+}
+
+async function checkFrame(frame, shouldThrottle) {
+ let message = null;
+ do {
+ if (message) {
+ await ticks(2);
+ }
+ message = await getOneMessage(frame);
+ } while (message.throttledFrameRequests != shouldThrottle);
+ is(message.throttledFrameRequests, shouldThrottle, frame.id);
+}
+
+function shouldThrottle(frame) {
+ return frame.style.display == "none" || frame.style.visibility == "hidden";
+}
+
+onload = async function() {
+ await SimpleTest.promiseFocus(window);
+ await ticks(2);
+ is(SpecialPowers.DOMWindowUtils.effectivelyThrottlesFrameRequests, false, "Should not be throttling main page");
+ for (let frame of document.querySelectorAll("iframe")) {
+ let originalShouldThrottle = shouldThrottle(frame);
+ await checkFrame(frame, originalShouldThrottle);
+ for (let prop of ["display", "visibility"]) {
+ info(`Switching ${prop} of ${frame.id}`);
+ let orig = frame.style[prop];
+ let throttledValue = prop == "display" ? "none" : "hidden";
+ frame.style[prop] = orig == throttledValue ? "" : throttledValue;
+ if (orig != throttledValue) {
+ is(shouldThrottle(frame), true, `Should throttle for ${prop}: ${throttledValue}`);
+ }
+ await checkFrame(frame, shouldThrottle(frame));
+ info(`Switching ${prop} back for ${frame.id}`);
+ frame.style[prop] = orig;
+ await checkFrame(frame, originalShouldThrottle);
+ }
+ }
+
+ SimpleTest.finish();
+};
+</script>