summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/capability-delegation/resources
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 /testing/web-platform/tests/html/capability-delegation/resources
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 'testing/web-platform/tests/html/capability-delegation/resources')
-rw-r--r--testing/web-platform/tests/html/capability-delegation/resources/delegate-fullscreen-request-recipient.html29
-rw-r--r--testing/web-platform/tests/html/capability-delegation/resources/utils.js55
2 files changed, 84 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/capability-delegation/resources/delegate-fullscreen-request-recipient.html b/testing/web-platform/tests/html/capability-delegation/resources/delegate-fullscreen-request-recipient.html
new file mode 100644
index 0000000000..11daf738d6
--- /dev/null
+++ b/testing/web-platform/tests/html/capability-delegation/resources/delegate-fullscreen-request-recipient.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<title>Capability Delegation of Fullscreen Requests test recipient</title>
+<body>Capability Delegation of Fullscreen Requests test recipient body</body>
+
+<script>
+ const initiator = window.opener ? window.opener : window.top;
+ initiator.postMessage({"type": "recipient-loaded"}, "*");
+
+ function reportResult(msg) {
+ initiator.postMessage({"type": "result", "result": msg}, "*");
+ }
+
+ document.addEventListener('fullscreenchange', async () => {
+ if (document.fullscreenElement) {
+ await document.exitFullscreen();
+ reportResult("success");
+ }
+ });
+
+ document.addEventListener('fullscreenerror', () => {
+ reportResult("failure");
+ });
+
+ window.addEventListener("message", e => {
+ if (e.data.type == "make-fullscreen-request") {
+ document.body.requestFullscreen();
+ }
+ });
+</script>
diff --git a/testing/web-platform/tests/html/capability-delegation/resources/utils.js b/testing/web-platform/tests/html/capability-delegation/resources/utils.js
new file mode 100644
index 0000000000..575028763e
--- /dev/null
+++ b/testing/web-platform/tests/html/capability-delegation/resources/utils.js
@@ -0,0 +1,55 @@
+// Returns a Promise that gets resolved with `event.data` when `window` receives from `source` a
+// "message" event whose `event.data.type` matches the string `message_data_type`.
+function getMessageData(message_data_type, source) {
+ return new Promise(resolve => {
+ function waitAndRemove(e) {
+ if (e.source != source || !e.data || e.data.type != message_data_type)
+ return;
+ window.removeEventListener("message", waitAndRemove);
+ resolve(e.data);
+ }
+ window.addEventListener("message", waitAndRemove);
+ });
+}
+
+// A helper that simulates user activation on the current frame if `activate` is true, then posts
+// `message` to `frame` with the target `origin` and specified `capability` to delegate. This helper
+// awaits and returns a Promise fulfilled with the result message sent in reply from `frame`.
+// However, if the `postMessage` call fails, the helper returns a Promise rejected with the
+// exception.
+async function postCapabilityDelegationMessage(frame, message, origin, capability, activate) {
+ let result_promise = getMessageData("result", frame);
+
+ if (activate)
+ await test_driver.bless();
+
+ let postMessageOptions = {targetOrigin: origin};
+ if (capability)
+ postMessageOptions["delegate"] = capability;
+ try {
+ frame.postMessage(message, postMessageOptions);
+ } catch (exception) {
+ return Promise.reject(exception);
+ }
+
+ return await result_promise;
+}
+
+// Returns the name of a capability for which `postMessage` delegation is supported by the user
+// agent, or undefined if no such capability is found.
+async function findOneCapabilitySupportingDelegation() {
+ const capabilities = ["fullscreen", "payment", "display-capture"];
+
+ for (let i = 0; i < capabilities.length; i++) {
+ try {
+ await postCapabilityDelegationMessage(window, "any_message", "/", capabilities[i], false);
+ assert_unreached();
+ } catch (exception) {
+ if (exception.name != "NotSupportedError")
+ return capabilities[i];
+ // Ignore all other exceptions to continue searching through the list.
+ }
+ };
+
+ return undefined;
+}