summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletprocessor-param-getter-overridden.https.html
blob: e3fb6e533df8ccaa88564f836239e0c9e9c1d5e4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<!DOCTYPE html>
<html>
  <head>
    <title>
      Test if AudioWorkletProcessor with invalid parameters array getter
    </title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="/webaudio/resources/audit.js"></script>
  </head>
  <body>
    <script id="layout-test-code">
      let audit = Audit.createTaskRunner();

      // Arbitrarily determined. Any numbers should work.
      let sampleRate = 16000;
      let renderLength = 1280;
      let context;
      let filePath = 'processors/invalid-param-array-processor.js';

      audit.define('Initializing AudioWorklet and Context', async (task) => {
        context = new OfflineAudioContext(1, renderLength, sampleRate);
        await context.audioWorklet.addModule(filePath);
        task.done();
      });

      audit.define('Verifying AudioParam in AudioWorkletNode',
          async (task, should) => {
            let buffer = context.createBuffer(1, 2, context.sampleRate);
            buffer.getChannelData(0)[0] = 1;

            let source = new AudioBufferSourceNode(context);
            source.buffer = buffer;
            source.loop = true;
            source.start();

            let workletNode1 =
                new AudioWorkletNode(context, 'invalid-param-array-1');
            let workletNode2 =
                new AudioWorkletNode(context, 'invalid-param-array-2');
            workletNode1.connect(workletNode2).connect(context.destination);

            // Manually invoke the param getter.
            source.connect(workletNode2.parameters.get('invalidParam'));

            const renderedBuffer = await context.startRendering();

            // |workletNode2| should be no-op after the parameter getter is
            // invoked. Therefore, the rendered result should be silent.
            should(renderedBuffer.getChannelData(0), 'The rendered buffer')
                .beConstantValueOf(0);
            task.done();
          }
      );

      audit.run();
    </script>
  </body>
</html>