summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/screen-details
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/screen-details')
-rw-r--r--testing/web-platform/tests/screen-details/META.yml1
-rw-r--r--testing/web-platform/tests/screen-details/getScreenDetails.tentative.https.window.js63
-rw-r--r--testing/web-platform/tests/screen-details/isExtended.tentative.https.window.js11
-rw-r--r--testing/web-platform/tests/screen-details/permission.https.window.js20
4 files changed, 95 insertions, 0 deletions
diff --git a/testing/web-platform/tests/screen-details/META.yml b/testing/web-platform/tests/screen-details/META.yml
new file mode 100644
index 0000000000..abfee89ffb
--- /dev/null
+++ b/testing/web-platform/tests/screen-details/META.yml
@@ -0,0 +1 @@
+spec: https://webscreens.github.io/window-placement/
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');
diff --git a/testing/web-platform/tests/screen-details/isExtended.tentative.https.window.js b/testing/web-platform/tests/screen-details/isExtended.tentative.https.window.js
new file mode 100644
index 0000000000..3c814ae3d9
--- /dev/null
+++ b/testing/web-platform/tests/screen-details/isExtended.tentative.https.window.js
@@ -0,0 +1,11 @@
+// META: global=window
+'use strict';
+
+promise_test(async t => {
+ assert_equals(typeof self.screen.isExtended, 'boolean');
+}, 'screen.isExtended is present');
+
+promise_test(async t => {
+ let iframe = document.body.appendChild(document.createElement('iframe'));
+ assert_equals(typeof iframe.contentWindow.screen.isExtended, 'boolean');
+}, 'screen.isExtended is present for attached iframes');
diff --git a/testing/web-platform/tests/screen-details/permission.https.window.js b/testing/web-platform/tests/screen-details/permission.https.window.js
new file mode 100644
index 0000000000..f477bd4230
--- /dev/null
+++ b/testing/web-platform/tests/screen-details/permission.https.window.js
@@ -0,0 +1,20 @@
+// META: global=window
+// META: script=/resources/testdriver.js
+// META: script=/resources/testdriver-vendor.js
+"use strict";
+
+promise_test(async t => {
+ await test_driver.set_permission({ name: "window-management" }, "denied");
+
+ const status = await navigator.permissions.query({ name:"window-management" });
+ assert_class_string(status, "PermissionStatus");
+ assert_equals(status.state, "denied");
+}, "Deny window management permission should work.");
+
+promise_test(async t => {
+ await test_driver.set_permission({ name: "window-management" }, "granted");
+
+ const status = await navigator.permissions.query({ name: "window-management" });
+ assert_class_string(status, "PermissionStatus");
+ assert_equals(status.state, "granted");
+}, "Grant window management permission should work.");