From 0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 03:47:29 +0200 Subject: Adding upstream version 115.8.0esr. Signed-off-by: Daniel Baumann --- .../getScreenDetails.tentative.https.window.js | 63 ++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 testing/web-platform/tests/screen-details/getScreenDetails.tentative.https.window.js (limited to 'testing/web-platform/tests/screen-details/getScreenDetails.tentative.https.window.js') diff --git a/testing/web-platform/tests/screen-details/getScreenDetails.tentative.https.window.js b/testing/web-platform/tests/screen-details/getScreenDetails.tentative.https.window.js new file mode 100644 index 0000000000..06f0344f3a --- /dev/null +++ b/testing/web-platform/tests/screen-details/getScreenDetails.tentative.https.window.js @@ -0,0 +1,63 @@ +// META: global=window +// META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js +'use strict'; + +promise_test(async t => { + assert_equals(typeof self.getScreenDetails, 'function'); +}, 'getScreenDetails() is present'); + +promise_test(async t => { + await test_driver.set_permission({name: 'window-management'}, 'granted'); + const screenDetails = await self.getScreenDetails(); + assert_true(ScreenDetails.prototype.isPrototypeOf(screenDetails)); + assert_true(ScreenDetailed.prototype.isPrototypeOf(screenDetails.currentScreen)); + assert_true(Array.prototype.isPrototypeOf(screenDetails.screens)); + assert_greater_than(screenDetails.screens.length, 0); + assert_true(ScreenDetailed.prototype.isPrototypeOf(screenDetails.screens[0])); + assert_true(screenDetails.screens.includes(screenDetails.currentScreen)); +}, 'getScreenDetails() returns the expected interface with permission granted'); + +promise_test(async t => { + await test_driver.set_permission({name: 'window-management'}, 'granted'); + assert_greater_than((await self.getScreenDetails()).screens.length, 0); + await test_driver.set_permission({name: 'window-management'}, 'denied'); + await promise_rejects_dom(t, 'NotAllowedError', self.getScreenDetails()); +}, 'getScreenDetails() rejects the promise with permission denied'); + +promise_test(async t => { + await test_driver.set_permission({name: 'window-management'}, 'granted'); + let iframe = document.body.appendChild(document.createElement('iframe')); + assert_greater_than((await iframe.contentWindow.getScreenDetails()).screens.length, 0); + + let iframeGetScreens; + let constructor; + await new Promise(resolve => { + iframe.contentWindow.onunload = () => { + // Grab these before the contentWindow is removed. + iframeGetScreens = iframe.contentWindow.getScreenDetails; + constructor = iframe.contentWindow.DOMException; + resolve(); + }; + document.body.removeChild(iframe); + }); + assert_not_equals(iframeGetScreens, undefined); + assert_not_equals(constructor, undefined); + + await t.step_wait(() => !iframe.contentWindow, 'execution context invalid'); + assert_equals(iframe.contentWindow, null); + await promise_rejects_dom(t, 'InvalidStateError', constructor, iframeGetScreens()); +}, 'getScreenDetails() resolves for attached iframe; rejects for detached iframe'); + +promise_test(async t => { + await test_driver.set_permission({name: 'window-management'}, 'granted'); + let iframe = document.body.appendChild(document.createElement('iframe')); + const screenDetails = await iframe.contentWindow.getScreenDetails(); + assert_greater_than(screenDetails.screens.length, 0); + assert_equals(screenDetails.currentScreen, screenDetails.screens[0]); + iframe.remove(); + await t.step_wait(() => !iframe.contentWindow, 'execution context invalid'); + assert_equals(iframe.contentWindow, null); + assert_equals(screenDetails.screens.length, 0); + assert_equals(screenDetails.currentScreen, null); +}, 'Cached ScreenDetails interface from detached iframe does not crash, behaves okay'); -- cgit v1.2.3