summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/fenced-frame/notify-event-invalid.https.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/fenced-frame/notify-event-invalid.https.html')
-rw-r--r--testing/web-platform/tests/fenced-frame/notify-event-invalid.https.html96
1 files changed, 96 insertions, 0 deletions
diff --git a/testing/web-platform/tests/fenced-frame/notify-event-invalid.https.html b/testing/web-platform/tests/fenced-frame/notify-event-invalid.https.html
new file mode 100644
index 0000000000..7695f49e0b
--- /dev/null
+++ b/testing/web-platform/tests/fenced-frame/notify-event-invalid.https.html
@@ -0,0 +1,96 @@
+<!DOCTYPE html>
+<meta name="timeout" content="long">
+<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>
+<script src="/common/utils.js"></script>
+<script src="/common/dispatcher/dispatcher.js"></script>
+<script src="/common/get-host-info.sub.js"></script>
+<script src="resources/utils.js"></script>
+<title>Test that fenced frame notifyEvent() fails with invalid event parameters</title>
+
+<body>
+ <script>
+ promise_test(async (t) => {
+ const fencedframe = await attachFencedFrameContext(
+ {generator_api: 'fledge'});
+ let notified = false;
+ fencedframe.element.addEventListener('fencedtreeclick', () => notified = true);
+
+ // Only "click" is supported for now, so any other type of event should
+ // fail to notify.
+ await fencedframe.execute(() => {
+ document.addEventListener('mousedown', (e) => {
+ try {
+ window.fence.notifyEvent(e);
+ } catch (err) {
+ window.click_error = err;
+ return;
+ }
+ window.click_error = new TypeError('No exception');
+ });
+ });
+
+ await multiClick(10, 10, fencedframe.element);
+
+ await fencedframe.execute(() => {
+ assert_equals(window.click_error.name, 'SecurityError');
+ assert_equals(window.click_error.message,
+ "Failed to execute 'notifyEvent' on 'Fence': notifyEvent called with an unsupported event type.");
+ });
+
+ assert_false(notified);
+ }, "Test that fenced frame notifyEvent() fails using the incorrect event type.");
+
+ promise_test(async (t) => {
+ const fencedframe = await attachFencedFrameContext(
+ {generator_api: 'fledge'});
+ let notified = false;
+ fencedframe.element.addEventListener('fencedtreeclick', () => notified = true);
+
+ await fencedframe.execute(() => {
+ // Event objects constructed manually are not "trusted", so this event
+ // should fail to notify. "Trusted" means that the event was created by
+ // the user agent itself.
+ let fake_click = new Event('click');
+ try {
+ window.fence.notifyEvent(fake_click);
+ } catch (err) {
+ assert_equals(err.name, 'SecurityError');
+ assert_equals(err.message, "Failed to execute 'notifyEvent' on 'Fence': The triggering_event object is in an invalid state.");
+ return;
+ }
+ assert_unreached('An untrusted event must cause a SecurityError.');
+ });
+
+ assert_false(notified);
+ }, "Test that fenced frame notifyEvent() fails using an untrusted event.");
+
+ promise_test(async (t) => {
+ const fencedframe = await attachFencedFrameContext(
+ {generator_api: 'fledge'});
+ let notified = false;
+ fencedframe.element.addEventListener('fencedtreemousedown', () => {
+ notified = true;
+ });
+
+ // This click handler should not trigger the above handler on the
+ // HTMLFencedFrameElement, because its type is not 'fencedtreeclick'.
+ await fencedframe.execute(() => {
+ document.addEventListener('click', (e) => {
+ window.fence.notifyEvent(e);
+ });
+ });
+
+ await multiClick(10, 10, fencedframe.element);
+
+ // Wait 2s to let any event handling code settle.
+ await new Promise((resolve) => t.step_timeout(
+ () => resolve(), 2000));
+
+ assert_false(notified);
+ }, "Test that fenced frame notifyEvent() only invokes 'fencedtreeclick'.");
+ </script>
+</body>