summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/browsers/the-window-object/open-close/resources/message-opener.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/html/browsers/the-window-object/open-close/resources/message-opener.html')
-rw-r--r--testing/web-platform/tests/html/browsers/the-window-object/open-close/resources/message-opener.html52
1 files changed, 52 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/browsers/the-window-object/open-close/resources/message-opener.html b/testing/web-platform/tests/html/browsers/the-window-object/open-close/resources/message-opener.html
new file mode 100644
index 0000000000..39ad139769
--- /dev/null
+++ b/testing/web-platform/tests/html/browsers/the-window-object/open-close/resources/message-opener.html
@@ -0,0 +1,52 @@
+<script src="/common/PrefixedPostMessage.js"></script>
+<script>
+var prefixedMessage = new PrefixedMessageResource();
+var max = 150, attempts = 0;
+
+const urlParams = new URLSearchParams(location.search);
+const expected_innerWidth = urlParams.get('expected_innerWidth');
+const expected_innerHeight = urlParams.get('expected_innerHeight');
+const expected_screenX = urlParams.get('expected_screenX');
+const expected_screenY = urlParams.get('expected_screenY');
+let should_wait_until_settled = expected_innerWidth === null && expected_innerHeight === null && expected_screenX === null && expected_screenY === null;
+
+function sendCoordinates() {
+ // Certain windowing systems position windows asynchronously.
+ // As a result, the window may not be positioned yet when the
+ // load event fires. To accommodate this, allow waiting up to
+ // 15 seconds for positioning to take place.
+ if ((!window.screenX && expected_screenX) &&
+ (!window.screenY && expected_screenY) && ++attempts < max) {
+ setTimeout(sendCoordinates, 100);
+ return;
+ }
+ if (expected_innerWidth && window.innerWidth != expected_innerWidth && ++attempts < max) {
+ setTimeout(sendCoordinates, 10);
+ return;
+ }
+ if (expected_innerHeight && window.innerHeight != expected_innerHeight && ++attempts < max) {
+ setTimeout(sendCoordinates, 10);
+ return;
+ }
+ if (expected_screenX && window.screenX != expected_screenX && ++attempts < max) {
+ setTimeout(sendCoordinates, 10);
+ return;
+ }
+ if (expected_screenY && window.screenY != expected_screenY && ++attempts < max) {
+ setTimeout(sendCoordinates, 10);
+ return;
+ }
+ if (should_wait_until_settled) {
+ should_wait_until_settled = false;
+ setTimeout(sendCoordinates, 300);
+ return;
+ }
+ prefixedMessage.postToOpener({
+ left: window.screenX,
+ top: window.screenY,
+ width: window.innerWidth,
+ height: window.innerHeight
+ });
+}
+window.addEventListener('load', sendCoordinates);
+</script>