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-07 09:22:09 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
commit43a97878ce14b72f0981164f87f2e35e14151312 (patch)
tree620249daf56c0258faa40cbdcf9cfba06de2a846 /testing/web-platform/tests/html/capability-delegation/resources
parentInitial commit. (diff)
downloadfirefox-upstream.tar.xz
firefox-upstream.zip
Adding upstream version 110.0.1.upstream/110.0.1upstream
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..37c0226be7
--- /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"];
+
+ 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;
+}