summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https.html')
-rw-r--r--testing/web-platform/tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https.html58
1 files changed, 58 insertions, 0 deletions
diff --git a/testing/web-platform/tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https.html b/testing/web-platform/tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https.html
new file mode 100644
index 0000000000..95126a8c86
--- /dev/null
+++ b/testing/web-platform/tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<title>Test onprocessorerror handler in AudioWorkletNode</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+let context = null;
+
+promise_setup(async () => {
+ const sampleRate = 48000;
+ const renderLength = sampleRate * 0.1;
+ context = new OfflineAudioContext(1, renderLength, sampleRate);
+
+ // Loads all processor definitions that are necessary for tests in this file.
+ await context.audioWorklet.addModule('./processors/error-processor.js');
+});
+
+promise_test(async () => {
+ const constructorErrorWorkletNode =
+ new AudioWorkletNode(context, 'constructor-error');
+ let error = await new Promise(resolve => {
+ constructorErrorWorkletNode.onprocessorerror = (e) => resolve(e);
+ });
+ assert_true(error instanceof ErrorEvent,
+ 'onprocessorerror argument should be an ErrorEvent when ' +
+ 'the constructor of AudioWorkletProcessor has an error.');
+}, 'Test if |onprocessorerror| is called for an exception thrown from the ' +
+ 'processor constructor.');
+
+promise_test(async () => {
+ // An arbitrary Blob for testing. This is not deserializable on
+ // AudioWorkletGlobalScope.
+ const blob = new Blob([JSON.stringify({ hello: "world"}, null, 2)], {
+ type: "application/json",
+ });
+ const emptyErrorWorkletNode =
+ new AudioWorkletNode(context, 'empty-error', {processorOptions: {blob}});
+ let error = await new Promise(resolve => {
+ emptyErrorWorkletNode.onprocessorerror = (e) => resolve(e);
+ });
+ assert_true(error instanceof ErrorEvent,
+ 'onprocessorerror argument should be an ErrorEvent when ' +
+ 'the constructor of AudioWorkletProcessor has an error.');
+}, 'Test if |onprocessorerror| is called for a transfered object that cannot ' +
+ 'be deserialized on the AudioWorkletGlobalScope.');
+
+promise_test(async () => {
+ const processErrorWorkletNode =
+ new AudioWorkletNode(context, 'process-error');
+ let error = await new Promise(resolve => {
+ processErrorWorkletNode.onprocessorerror = (e) => resolve(e);
+ // Need to start render to cause an exception in process().
+ context.startRendering();
+ });
+ assert_true(error instanceof ErrorEvent,
+ 'onprocessorerror argument should be an ErrorEvent when the ' +
+ 'process method of the AudioWorkletProcessor has an error.');
+}, 'Test if |onprocessorerror| is called upon failure of process() method.');
+</script>