summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/worklets/resources/import-tests.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/worklets/resources/import-tests.js')
-rw-r--r--testing/web-platform/tests/worklets/resources/import-tests.js162
1 files changed, 162 insertions, 0 deletions
diff --git a/testing/web-platform/tests/worklets/resources/import-tests.js b/testing/web-platform/tests/worklets/resources/import-tests.js
new file mode 100644
index 0000000000..0c631a8a9f
--- /dev/null
+++ b/testing/web-platform/tests/worklets/resources/import-tests.js
@@ -0,0 +1,162 @@
+// Runs a series of tests related to importing scripts on a worklet.
+//
+// Usage:
+// runImportTests("paint");
+function runImportTests(worklet_type) {
+ const worklet = get_worklet(worklet_type);
+
+ promise_test(() => {
+ const kScriptURL = 'resources/empty-worklet-script.js';
+ return worklet.addModule(kScriptURL).then(undefined_arg => {
+ assert_equals(undefined_arg, undefined,
+ 'Promise should resolve with no arguments.');
+ });
+ }, 'Importing a script resolves the given promise.');
+
+ promise_test(() => {
+ const kScriptURL = 'resources/empty-worklet-script.js';
+ return Promise.all([
+ worklet.addModule(kScriptURL + '?1'),
+ worklet.addModule(kScriptURL + '?2'),
+ worklet.addModule(kScriptURL + '?3')
+ ]).then(undefined_args => {
+ assert_array_equals(undefined_args,
+ [undefined, undefined, undefined],
+ 'Promise should resolve with no arguments.');
+ });
+ }, 'Importing scripts resolves all the given promises.');
+
+ promise_test(() => {
+ const kScriptURL = 'resources/import-nested-worklet-script.js';
+ return worklet.addModule(kScriptURL).then(undefined_arg => {
+ assert_equals(undefined_arg, undefined,
+ 'Promise should resolve with no arguments.');
+ });
+ }, 'Importing nested scripts resolves the given promise');
+
+ promise_test(() => {
+ const kScriptURL = 'resources/import-cyclic-worklet-script.js';
+ return worklet.addModule(kScriptURL).then(undefined_arg => {
+ assert_equals(undefined_arg, undefined,
+ 'Promise should resolve with no arguments.');
+ });
+ }, 'Importing cyclic scripts resolves the given promise');
+
+ promise_test(() => {
+ const kScriptURL = 'resources/throwing-worklet-script.js';
+ return worklet.addModule(kScriptURL).then(undefined_arg => {
+ assert_equals(undefined_arg, undefined,
+ 'Promise should resolve with no arguments.');
+ });
+ }, 'Importing a script which throws should still resolve the given ' +
+ 'promise.');
+
+ promise_test(t => {
+ const kScriptURL = 'non-existent-worklet-script.js';
+ return promise_rejects_dom(t, 'AbortError',
+ worklet.addModule(kScriptURL));
+ }, 'Importing a non-existent script rejects the given promise with an ' +
+ 'AbortError.');
+
+ promise_test(t => {
+ const kInvalidScriptURL = 'http://invalid:123$'
+ return promise_rejects_dom(t, 'SyntaxError',
+ worklet.addModule(kInvalidScriptURL));
+ }, 'Importing an invalid URL should reject the given promise with a ' +
+ 'SyntaxError.');
+
+ promise_test(() => {
+ const kBlob = new Blob([""], {type: 'text/javascript'});
+ const kBlobURL = URL.createObjectURL(kBlob);
+ return worklet.addModule(kBlobURL).then(undefined_arg => {
+ assert_equals(undefined_arg, undefined);
+ });
+ }, 'Importing a blob URL should resolve the given promise.');
+
+ promise_test(t => {
+ const kFileURL = 'file:///empty-worklet-script.js';
+ return promise_rejects_dom(t, 'AbortError',
+ worklet.addModule(kFileURL));
+ }, 'Importing a file:// URL should reject the given promise.');
+
+ promise_test(() => {
+ const kDataURL = 'data:text/javascript, // Do nothing.';
+ return worklet.addModule(kDataURL).then(undefined_arg => {
+ assert_equals(undefined_arg, undefined);
+ });
+ }, 'Importing a data URL should resolve the given promise.');
+
+ promise_test(t => {
+ const kScriptURL = 'about:blank';
+ return promise_rejects_dom(t, 'AbortError',
+ worklet.addModule(kScriptURL));
+ }, 'Importing about:blank should reject the given promise.');
+
+ promise_test(() => {
+ // Specify the Access-Control-Allow-Origin header to enable cross origin
+ // access.
+ const kScriptURL = get_host_info().HTTPS_REMOTE_ORIGIN +
+ '/worklets/resources/empty-worklet-script.js' +
+ '?pipe=header(Access-Control-Allow-Origin, *)';
+ return worklet.addModule(kScriptURL).then(undefined_arg => {
+ assert_equals(undefined_arg, undefined);
+ });
+ }, 'Importing a cross origin resource with the ' +
+ 'Access-Control-Allow-Origin header should resolve the given promise');
+
+ promise_test(t => {
+ // Don't specify the Access-Control-Allow-Origin header. addModule()
+ // should be rejected because of disallowed cross origin access.
+ const kScriptURL = get_host_info().HTTPS_REMOTE_ORIGIN +
+ '/worklets/resources/empty-worklet-script.js';
+ return promise_rejects_dom(t, 'AbortError',
+ worklet.addModule(kScriptURL));
+ }, 'Importing a cross origin resource without the ' +
+ 'Access-Control-Allow-Origin header should reject the given promise');
+
+ promise_test(() => {
+ const kScriptURL = get_host_info().HTTPS_REMOTE_ORIGIN +
+ '/worklets/resources/empty-worklet-script.js' +
+ '?pipe=header(Access-Control-Allow-Origin, ' +
+ location.origin + ')';
+ return worklet.addModule('/common/redirect.py?location=' +
+ encodeURIComponent(kScriptURL))
+ .then(undefined_arg => {
+ assert_equals(undefined_arg, undefined);
+ });
+ }, 'Importing a cross-origin-redirected resource with the ' +
+ 'Access-Control-Allow-Origin header should resolve the given promise');
+
+ promise_test(t => {
+ const kScriptURL = get_host_info().HTTPS_REMOTE_ORIGIN +
+ '/worklets/resources/empty-worklet-script.js';
+ return promise_rejects_dom(t, 'AbortError',
+ worklet.addModule(
+ '/common/redirect.py?location=' +
+ encodeURIComponent(kScriptURL)));
+ }, 'Importing a cross-origin-redirected resource without the ' +
+ 'Access-Control-Allow-Origin header should reject the given promise');
+
+ promise_test(t => {
+ const kScriptURL = 'resources/syntax-error-worklet-script.js';
+ return promise_rejects_js(t, SyntaxError,
+ worklet.addModule(kScriptURL));
+ }, 'Importing a script that has a syntax error should reject the given ' +
+ 'promise.');
+
+ promise_test(t => {
+ const kScriptURL = 'resources/import-syntax-error-worklet-script.js';
+ return promise_rejects_js(t, SyntaxError,
+ worklet.addModule(kScriptURL));
+ }, 'Importing a nested script that has a syntax error should reject the ' +
+ 'given promise.');
+
+ promise_test(t => {
+ const kBlob = new Blob(["import 'invalid-specifier.js';"],
+ {type: 'text/javascript'});
+ const kBlobURL = URL.createObjectURL(kBlob);
+ return promise_rejects_js(t, TypeError,
+ worklet.addModule(kBlobURL));
+ }, 'Importing a script that imports an invalid identifier should reject ' +
+ 'the given promise.');
+}