Test active script propagation through Web IDL
Follows https://github.com/heycam/webidl/pull/902.
diff --git a/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/setTimeout-eval.js b/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/setTimeout-eval.js
new file mode 100644
index 0000000..5c1e222
--- /dev/null
+++ b/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/setTimeout-eval.js
@@ -0,0 +1,2 @@
+// import()s in eval are resolved relative to the script, even when indirected through Web IDL callbacks
+setTimeout(eval, 0, `import('../../imports-a.js?label=' + window.label).then(window.continueTest, window.errorTest)`);
diff --git a/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic.html b/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic.html
index 7cf2dac..8813afe 100644
--- a/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic.html
+++ b/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic.html
@@ -31,6 +31,7 @@
const evaluators = [
"setTimeout",
"eval",
+ "setTimeout-eval",
"Function",
"reflected-inline-event-handlers",
"inline-event-handlers-UA-code"
diff --git a/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module.html b/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module.html
index 73986c2..b234fbc 100644
--- a/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module.html
+++ b/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module.html
@@ -32,6 +32,7 @@
const evaluators = [
"setTimeout",
"eval",
+ "setTimeout-eval",
"Function",
"reflected-inline-event-handlers",
"inline-event-handlers-UA-code"
diff --git a/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic.html b/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic.html
index 1bd6d7d..8def0db 100644
--- a/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic.html
+++ b/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic.html
@@ -23,6 +23,9 @@
const evaluators = {
setTimeout,
eval,
+ "setTimeout + eval"(x) {
+ setTimeout(eval, 0, x);
+ },
"the Function constructor"(x) {
Function(x)();
},
diff --git a/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module.html b/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module.html
index f5b8574..0c5e8c2 100644
--- a/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module.html
+++ b/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module.html
@@ -23,6 +23,9 @@
const evaluators = {
setTimeout,
eval,
+ "setTimeout + eval"(x) {
+ setTimeout(eval, 0, x);
+ },
"the Function constructor"(x) {
Function(x)();
},
diff --git a/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-classic.html b/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-classic.html
index 34ea00a..f4a32d6 100644
--- a/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-classic.html
+++ b/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-classic.html
@@ -24,6 +24,9 @@
"the Function constructor"(x) {
Function(x)();
},
+ "setTimeout + eval"(x) {
+ setTimeout(eval, 0, x);
+ },
"reflected inline event handlers"(x) {
dummyDiv.setAttribute("onclick", x);
dummyDiv.onclick();
diff --git a/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-module.html b/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-module.html
index b85d446..0cdd09c 100644
--- a/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-module.html
+++ b/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-module.html
@@ -21,6 +21,9 @@
const evaluators = {
eval,
setTimeout,
+ "setTimeout + eval"(x) {
+ setTimeout(eval, 0, x);
+ },
"the Function constructor"(x) {
Function(x)();
},
diff --git a/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-classic.html b/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-classic.html
index b582eba..2cdb702 100644
--- a/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-classic.html
+++ b/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-classic.html
@@ -62,6 +62,14 @@
promise_test(t => {
const promise = createTestPromise(t);
+ setTimeout(eval, 0, `import('../imports-a.js?label=direct eval').then(window.continueTest, window.errorTest)`);
+
+ return promise.then(assertSuccessful);
+}, "setTimeout + eval must inherit the nonce from the triggering script, thus execute");
+
+promise_test(t => {
+ const promise = createTestPromise(t);
+
Function(`import('../imports-a.js?label=the Function constructor').then(window.continueTest, window.errorTest)`)();
return promise.then(assertSuccessful);
diff --git a/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-module.html b/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-module.html
index 4fa1cc5..357ba40 100644
--- a/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-module.html
+++ b/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-module.html
@@ -61,6 +61,14 @@
promise_test(t => {
const promise = createTestPromise(t);
+ setTimeout(eval, 0, `import('../imports-a.js?label=direct eval').then(window.continueTest, window.errorTest)`);
+
+ return promise.then(assertSuccessful);
+}, "setTimeout + eval must inherit the nonce from the triggering script, thus execute");
+
+promise_test(t => {
+ const promise = createTestPromise(t);
+
Function(`import('../imports-a.js?label=the Function constructor').then(window.continueTest, window.errorTest)`)();
return promise.then(assertSuccessful);
diff --git a/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-of-promise-result.html b/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-of-promise-result.html
index e0e3ec8..4d02e41 100644
--- a/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-of-promise-result.html
+++ b/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-of-promise-result.html
@@ -1,6 +1,6 @@
<!DOCTYPE html>
<meta charset="utf-8">
-<title>import() inside compiled strings inside a classic script</title>
+<title>Compiling strings resulting from Promise resolution</title>
<link rel="help" href="https://github.com/whatwg/html/pull/3163">
<link rel="help" href="https://github.com/tc39/ecma262/issues/871#issuecomment-292493142">
<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
diff --git a/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-other-document.html b/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-other-document.html
index 3b1d98f..340cf4c 100644
--- a/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-other-document.html
+++ b/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-other-document.html
@@ -23,6 +23,9 @@
const evaluators = {
eval: otherWindow.eval,
setTimeout: otherWindow.setTimeout,
+ "setTimeout + eval"(x) {
+ otherWindow.setTimeout(otherWIndow.eval, 0, x);
+ },
"the Function constructor"(x) {
otherWindow.Function(x)();
},