forked from mirrors/gecko-dev
		
	 7d4abd3e75
			
		
	
	
		7d4abd3e75
		
	
	
	
	
		
			
			Differential Revision: https://phabricator.services.mozilla.com/D7824 --HG-- extra : moz-landing-system : lando
		
			
				
	
	
		
			64 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * This test is used to make sure we won't show the sound indicator for silent
 | |
|  * web audio.
 | |
|  */
 | |
|  /* eslint-disable mozilla/no-arbitrary-setTimeout */
 | |
| "use strict";
 | |
| 
 | |
| function createAudioContext() {
 | |
|   content.ac = new content.AudioContext();
 | |
|   const ac = content.ac;
 | |
|   const dest = ac.destination;
 | |
|   const source = ac.createBufferSource();
 | |
|   const buf = ac.createBuffer(1, 3 * ac.sampleRate, ac.sampleRate);
 | |
|   const bufData = buf.getChannelData(0);
 | |
|   for (let idx = 0; idx < buf.length; idx++) {
 | |
|     bufData[idx] = 0.0;
 | |
|   }
 | |
|   source.buffer = buf;
 | |
|   source.connect(dest);
 | |
|   source.start();
 | |
| }
 | |
| 
 | |
| async function waitUntilAudioContextStarts() {
 | |
|   const ac = content.ac;
 | |
|   if (ac.state == "running") {
 | |
|    return;
 | |
|   }
 | |
| 
 | |
|   await new Promise((resolve) => {
 | |
|     ac.onstatechange = () => {
 | |
|       if (ac.state == "running") {
 | |
|         ac.onstatechange = null;
 | |
|         resolve();
 | |
|       }
 | |
|     };
 | |
|   });
 | |
| }
 | |
| 
 | |
| add_task(async function testSilentAudioContext() {
 | |
|   info(`- create new tab -`);
 | |
|   const tab = await BrowserTestUtils.openNewForegroundTab(window.gBrowser,
 | |
|                                                           "about:blank");
 | |
|   const browser = tab.linkedBrowser;
 | |
| 
 | |
|   info(`- create audio context -`);
 | |
|   // We want the same audio context to be used across different content
 | |
|   // tasks, so it needs to be loaded by a frame script.
 | |
|   const mm = tab.linkedBrowser.messageManager;
 | |
|   mm.loadFrameScript("data:,(" + createAudioContext.toString() + ")();", false);
 | |
| 
 | |
|   info(`- check AudioContext's state -`);
 | |
|   await ContentTask.spawn(browser, null, waitUntilAudioContextStarts);
 | |
|   ok(true, `AudioContext is running.`);
 | |
| 
 | |
|   info(`- should not show sound indicator -`);
 | |
|   // If we do the next step too early, then we can't make sure whether that the
 | |
|   // reason of no showing sound indicator is because of silent web audio, or
 | |
|   // because the indicator is just not showing yet.
 | |
|   await new Promise(r => setTimeout(r, 1000));
 | |
|   await waitForTabPlayingEvent(tab, false);
 | |
| 
 | |
|   info(`- remove tab -`);
 | |
|   await BrowserTestUtils.removeTab(tab);
 | |
| });
 |