summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/screen-details/getScreenDetails.tentative.https.window.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
commit6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch)
treea68f146d7fa01f0134297619fbe7e33db084e0aa /testing/web-platform/tests/screen-details/getScreenDetails.tentative.https.window.js
parentInitial commit. (diff)
downloadthunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz
thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/screen-details/getScreenDetails.tentative.https.window.js')
-rw-r--r--testing/web-platform/tests/screen-details/getScreenDetails.tentative.https.window.js63
1 files changed, 63 insertions, 0 deletions
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');