diff options
Diffstat (limited to 'tests/wpt/tests/ai/language_detection/detector-iframe.https.html')
-rw-r--r-- | tests/wpt/tests/ai/language_detection/detector-iframe.https.html | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/tests/wpt/tests/ai/language_detection/detector-iframe.https.html b/tests/wpt/tests/ai/language_detection/detector-iframe.https.html new file mode 100644 index 00000000000..3e90d36b5aa --- /dev/null +++ b/tests/wpt/tests/ai/language_detection/detector-iframe.https.html @@ -0,0 +1,89 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<body></body> +<script> +'use strict'; + +const { HTTPS_ORIGIN, HTTPS_NOTSAMESITE_ORIGIN } = get_host_info(); +const PATH = location.pathname.substring(0, location.pathname.lastIndexOf('/') + 1); +const IFRAME_PATH = PATH + 'resources/iframe-helper.html'; + +function run_iframe_test(iframe, test_name) { + iframe.contentWindow.postMessage({type: test_name}, '*'); + const {promise, resolve, reject} = Promise.withResolvers(); + + window.onmessage = message => { + if (message.data.success) { + resolve(message.data.success); + } else { + reject(message.data.err) + } + } + + return promise; +} + +function load_iframe(src, permission_policy) { + let iframe = document.createElement('iframe'); + return new Promise((resolve, reject) => { + iframe.onload = () => { + resolve(iframe); + } + iframe.src = src; + iframe.allow = permission_policy; + document.body.appendChild(iframe); + }); +} + +promise_test(async t => { + const src = HTTPS_NOTSAMESITE_ORIGIN + IFRAME_PATH; + const iframe = await load_iframe(src, /*permission_policy=*/""); + await promise_rejects_dom(t, 'NotAllowedError', + run_iframe_test(iframe, "LanguageDetectorCreate")); +}, "Throw a 'NotAllowedError' when creating Language Detector within cross-origin iframe"); + +promise_test(async t => { + const src = HTTPS_NOTSAMESITE_ORIGIN + IFRAME_PATH; + const iframe = await load_iframe(src, "languageDetector"); + + assert_equals( + await run_iframe_test(iframe, "LanguageDetectorCreate"), 'Success'); +}, "Language Detector can be created within cross-origin iframe with permission policy"); + +promise_test(async t => { + const src = HTTPS_ORIGIN + IFRAME_PATH; + const iframe = await load_iframe(src, /*permission_policy=*/""); + + assert_equals( + await run_iframe_test(iframe, "LanguageDetectorCreate"), 'Success'); +}, "Language Detector can be used within same-origin iframe"); + +promise_test(async t => { + const src = HTTPS_NOTSAMESITE_ORIGIN + IFRAME_PATH; + const iframe = await load_iframe(src, /*permission_policy=*/""); + + assert_equals( + await run_iframe_test(iframe, "LanguageDetectorAvailability"), 'unavailable'); +}, "Language Detector is unavailable within cross-origin iframe"); + +promise_test(async t => { + const src = HTTPS_NOTSAMESITE_ORIGIN + IFRAME_PATH; + const iframe = await load_iframe(src, "languageDetector"); + + assert_in_array( + await run_iframe_test(iframe, "LanguageDetectorAvailability"), + ['downloadable', 'downloading', 'available']); +}, "Language Detector is available within cross-origin iframe with permission policy"); + +promise_test(async t => { + const src = HTTPS_ORIGIN + IFRAME_PATH; + const iframe = await load_iframe(src, /*permission_policy=*/""); + + assert_in_array( + await run_iframe_test(iframe, "LanguageDetectorAvailability"), + ['downloadable', 'downloading', 'available']); +}, "LanguageDetector is available within same-origin iframe"); + +</script>
\ No newline at end of file |