<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <script src="resources/audio-testing.js"></script>
    <script src="../resources/js-test.js"></script>
    <script src="resources/panner-model-testing.js"></script>
  </head>

  <body>
    <div id="description"></div>
    <div id="console"></div>
    <script>
      description("Test PannerNode handling of feedback loops");

      // See webkit.org/b/150200
      // See crbug.com/331446.

      // Create a simple feedback loop and make sure the panner node processes it correctly.

      function runTest() {
          window.jsTestIsAsync = true;

          var sampleRate = 44100;
          var renderLengthSeconds = 1;
      
          // Create offline audio context.
          var context = new webkitOfflineAudioContext(2, sampleRate * renderLengthSeconds, sampleRate);

          // Create nodes in graph. This is based on the test given in crbug.com/331446.
          var source = context.createBufferSource();
          source.buffer = createImpulseBuffer(context, sampleRate * renderLengthSeconds);
          var activateNode = context.createGain();
          var dry = context.createGain();
          var wet = context.createGain();
          var filter = context.createBiquadFilter();
          var delay = context.createDelay();
          var feedbackNode = context.createGain();
          var output = context.createGain();

          delay.delayTime.value = 0.1;
          wet.gain.value = 0.5;
          dry.gain.value = 1;
          feedbackNode.gain.value = 0.45;
          filter.frequency.value = 20000;

          source.connect(activateNode);
          activateNode.connect(delay);
          activateNode.connect(dry);
          delay.connect(filter);
          filter.connect(feedbackNode);
          feedbackNode.connect(delay);
          feedbackNode.connect(wet);
          wet.connect(output);
          dry.connect(output);

          var panner = context.createPanner();
          panner.coneOuterGain = 0.1;
          panner.coneOuterAngle = 180;
          panner.coneInnerAngle = 0;

          panner.connect(context.destination);

          output.connect(panner);

          // Render.  We don't care what the output is, though.

          context.oncomplete = function (event) {
                                   testPassed("Rendering successfully completed.");
                                   finishJSTest();
                               };
          context.startRendering();
      }
      
      runTest();
    </script>
    
  </body>
</html>
