diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 01:47:29 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 01:47:29 +0000 |
commit | 0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d (patch) | |
tree | a31f07c9bcca9d56ce61e9a1ffd30ef350d513aa /testing/web-platform/tests/payment-request/delegate-request.https.sub.html | |
parent | Initial commit. (diff) | |
download | firefox-esr-0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d.tar.xz firefox-esr-0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d.zip |
Adding upstream version 115.8.0esr.upstream/115.8.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/payment-request/delegate-request.https.sub.html')
-rw-r--r-- | testing/web-platform/tests/payment-request/delegate-request.https.sub.html | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/testing/web-platform/tests/payment-request/delegate-request.https.sub.html b/testing/web-platform/tests/payment-request/delegate-request.https.sub.html new file mode 100644 index 0000000000..988550036c --- /dev/null +++ b/testing/web-platform/tests/payment-request/delegate-request.https.sub.html @@ -0,0 +1,81 @@ +<!DOCTYPE html> +<title>Payment request delegation test</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="/resources/testdriver-vendor.js"></script> + +<div> + Verifies that PaymentRequest.show() call from a cross-origin subframe without user activation + works if and only if the top frame has user activation and it delegates the capability to the + subframe. +</div> + +<iframe allow="payment" width="300px" height="50px" + src="https://{{hosts[alt][www]}}:{{ports[https][0]}}/payment-request/resources/delegate-request-subframe.sub.html"> +</iframe> + +<script> + // 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); + }); + } + + promise_setup(async () => { + // Make sure the iframe has loaded. + await getMessageData("subframe-loaded", frames[0]); + }); + + const target_origin = "https://{{hosts[alt][www]}}:{{ports[https][0]}}"; + const request = {"type": "make-payment-request"}; + + promise_test(async () => { + let result_promise = getMessageData("result", frames[0]); + frames[0].postMessage(request, {targetOrigin: target_origin}); + let data = await result_promise; + + assert_equals(data.result, "failure"); + }, "Payment-request from a subframe fails without delegation when the top frame has no user activation"); + + promise_test(async () => { + let result_promise = getMessageData("result", frames[0]); + await test_driver.bless(); + frames[0].postMessage(request, {targetOrigin: target_origin}); + let data = await result_promise; + + assert_equals(data.result, "failure"); + }, "Payment-request from a subframe fails without delegation when the top frame has user activation"); + + promise_test(async () => { + let result_promise = getMessageData("result", frames[0]); + await test_driver.bless(); + frames[0].postMessage(request, {targetOrigin: target_origin, + delegate: "payment"}); + let data = await result_promise; + + assert_equals(data.result, "success"); + }, "Payment-request from a subframe succeeds with delegation when the top frame has user activation"); + + // This test must follow the successful test case above so that the user activation state there + // gets consumed. + promise_test(async () => { + let result_promise = getMessageData("result", frames[0]); + frames[0].postMessage(request, {targetOrigin: target_origin, + delegate: "payment"}); + let data = await result_promise; + + assert_equals(data.result, "failure"); + }, "Payment-request from a subframe fails with delegation when the top frame has no user activation"); + +</script> |