| Index: chrome/test/data/extensions/api_test/tabs/basics/sinewave.js | 
| diff --git a/chrome/test/data/extensions/api_test/tabs/basics/sinewave.js b/chrome/test/data/extensions/api_test/tabs/basics/sinewave.js | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..232a9e0980961fd2f162f39c30af9b66a71acba1 | 
| --- /dev/null | 
| +++ b/chrome/test/data/extensions/api_test/tabs/basics/sinewave.js | 
| @@ -0,0 +1,27 @@ | 
| +// Copyright (c) 2015 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +var freqs = [200, 500, 1800]; | 
| +var curTestIdx = 0; | 
| +if (!this.audioContext) { | 
| +  this.audioContext = new AudioContext(); | 
| +  this.gainNode = this.audioContext.createGain(); | 
| +  this.gainNode.gain.value = 0.5; | 
| +  this.gainNode.connect(this.audioContext.destination); | 
| +} | 
| +if (!this.oscillator || | 
| +    this.oscillator.frequency.value != freqs[curTestIdx]) { | 
| +  // Note: We recreate the oscillator each time because this switches the | 
| +  // audio frequency immediately.  Re-using the same oscillator tends to take | 
| +  // several hundred milliseconds to ramp-up/down the frequency. | 
| +  if (this.oscillator) { | 
| +    this.oscillator.stop(); | 
| +    this.oscillator.disconnect(); | 
| +  } | 
| +  this.oscillator = this.audioContext.createOscillator(); | 
| +  this.oscillator.type = OscillatorNode.SINE; | 
| +  this.oscillator.frequency.value = freqs[curTestIdx]; | 
| +  this.oscillator.connect(this.gainNode); | 
| +  this.oscillator.start(); | 
| +} | 
|  |