1
+ <!DOCTYPE html>
2
+ < script src ="/resources/testharness.js "> </ script >
3
+ < script src ="/resources/testharnessreport.js "> </ script >
4
+ < script src ="/common/get-host-info.sub.js "> </ script >
5
+ < body > </ body >
6
+ < script >
7
+ 'use strict' ;
8
+
9
+ const { HTTPS_ORIGIN , HTTPS_NOTSAMESITE_ORIGIN } = get_host_info ( ) ;
10
+ const PATH = location . pathname . substring ( 0 , location . pathname . lastIndexOf ( '/' ) + 1 ) ;
11
+ const IFRAME_PATH = PATH + 'resources/iframe-helper.html' ;
12
+
13
+ function run_iframe_test ( iframe , test_name ) {
14
+ iframe . contentWindow . postMessage ( { type : test_name } , '*' ) ;
15
+ const { promise, resolve, reject} = Promise . withResolvers ( ) ;
16
+
17
+ window . onmessage = message => {
18
+ if ( message . data . success ) {
19
+ resolve ( message . data . success ) ;
20
+ } else {
21
+ reject ( message . data . err )
22
+ }
23
+ }
24
+
25
+ return promise ;
26
+ }
27
+
28
+ function load_iframe ( src , permission_policy ) {
29
+ let iframe = document . createElement ( 'iframe' ) ;
30
+ return new Promise ( ( resolve , reject ) => {
31
+ iframe . onload = ( ) => {
32
+ resolve ( iframe ) ;
33
+ }
34
+ iframe . src = src ;
35
+ iframe . allow = permission_policy ;
36
+ document . body . appendChild ( iframe ) ;
37
+ } ) ;
38
+ }
39
+
40
+ promise_test ( async t => {
41
+ const src = HTTPS_NOTSAMESITE_ORIGIN + IFRAME_PATH ;
42
+ const iframe = await load_iframe ( src , /*permission_policy=*/ "" ) ;
43
+ await promise_rejects_dom ( t , 'NotAllowedError' ,
44
+ run_iframe_test ( iframe , "LanguageDetectorCreate" ) ) ;
45
+ } , "Throw a 'NotAllowedError' when creating Language Detector within cross-origin iframe" ) ;
46
+
47
+ promise_test ( async t => {
48
+ const src = HTTPS_NOTSAMESITE_ORIGIN + IFRAME_PATH ;
49
+ const iframe = await load_iframe ( src , "languageDetector" ) ;
50
+
51
+ assert_equals (
52
+ await run_iframe_test ( iframe , "LanguageDetectorCreate" ) , 'Success' ) ;
53
+ } , "Language Detector can be created within cross-origin iframe with permission policy" ) ;
54
+
55
+ promise_test ( async t => {
56
+ const src = HTTPS_ORIGIN + IFRAME_PATH ;
57
+ const iframe = await load_iframe ( src , /*permission_policy=*/ "" ) ;
58
+
59
+ assert_equals (
60
+ await run_iframe_test ( iframe , "LanguageDetectorCreate" ) , 'Success' ) ;
61
+ } , "Language Detector can be used within same-origin iframe" ) ;
62
+
63
+ promise_test ( async t => {
64
+ const src = HTTPS_NOTSAMESITE_ORIGIN + IFRAME_PATH ;
65
+ const iframe = await load_iframe ( src , /*permission_policy=*/ "" ) ;
66
+
67
+ assert_equals (
68
+ await run_iframe_test ( iframe , "LanguageDetectorAvailability" ) , 'unavailable' ) ;
69
+ } , "Language Detector is unavailable within cross-origin iframe" ) ;
70
+
71
+ promise_test ( async t => {
72
+ const src = HTTPS_NOTSAMESITE_ORIGIN + IFRAME_PATH ;
73
+ const iframe = await load_iframe ( src , "languageDetector" ) ;
74
+
75
+ assert_in_array (
76
+ await run_iframe_test ( iframe , "LanguageDetectorAvailability" ) ,
77
+ [ 'downloadable' , 'downloading' , 'available' ] ) ;
78
+ } , "Language Detector is available within cross-origin iframe with permission policy" ) ;
79
+
80
+ promise_test ( async t => {
81
+ const src = HTTPS_ORIGIN + IFRAME_PATH ;
82
+ const iframe = await load_iframe ( src , /*permission_policy=*/ "" ) ;
83
+
84
+ assert_in_array (
85
+ await run_iframe_test ( iframe , "LanguageDetectorAvailability" ) ,
86
+ [ 'downloadable' , 'downloading' , 'available' ] ) ;
87
+ } , "LanguageDetector is available within same-origin iframe" ) ;
88
+
89
+ </ script >
0 commit comments