| // 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.'); |
| } |