chromium/third_party/blink/web_tests/webaudio/internals/offlineaudiocontext-detached-no-crash.html

<!DOCTYPE html>
<html>
  <head>
    <title>
      offlineaudiocontext-detached-no-crash.html
    </title>
    <script src="../../resources/js-test.js"></script>
    <script src="../resources/audit-util.js"></script>
  </head>
  <body>
    <script id="layout-test-code">
      description(
          'Tests document-detached use of OfflineAudioContext, pass if no crash.');

      window.jsTestIsAsync = true;

      function errorCallback(error) {
        testPassed(
            'OfflineAudioContext.startRendering() on a closed context threw an exception.');
        finishJSTest();
      }

      function successCallback() {
        testFailed(
            'OfflineAudioContext.startRendering() on a closed context did not throw an exception.');
        finishJSTest();
      }

      let context;
      function runTest() {
        context.startRendering().then(successCallback, errorCallback);
      }

      function createOfflineContext() {
        let sampleRate = 44100.0;
        let renderLengthInFrames = 512;
        let bufferSize = 512;

        context =
            new w.OfflineAudioContext(1, renderLengthInFrames, sampleRate);
        let node = context.createScriptProcessor(bufferSize, 0, 1);
        let source = context.createBufferSource();
        source.buffer = createImpulseBuffer(context, bufferSize);
        node.onaudioprocess = function(e) {};
        source.connect(node);
        node.connect(context.destination);
        source.start(0);
      }

      let w;
      function processMessage(event) {
        if (event.data == 'opened') {
          createOfflineContext();
          w.close();
        } else if (event.data == 'closed') {
          setTimeout(runTest, 100);
        }
      }

      if (window.testRunner) {
        testRunner.dumpAsText();
        testRunner.waitUntilDone();
        testRunner.setPopupBlockingEnabled(false);
      }

      w = window.open('../../resources/window-postmessage-open-close.html');
      window.addEventListener('message', processMessage, false);
    </script>
  </body>
</html>