| <!DOCTYPE html> |
| <html> |
| <head> |
| <title>Test source track removal after setSinkId does not crash</title> |
| </head> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/resources/testdriver.js"></script> |
| <script src="/resources/testdriver-vendor.js"></script> |
| <script src="/common/gc.js"></script> |
| <script> |
| 'use strict'; |
| // This could be a crashtest, except that testdriver.bless() is not functional |
| // in crashtests. promise_test() is more elegant than class="test-wait" anyway. |
| promise_test(async t => { |
| await test_driver.bless('transient activation'); |
| const {deviceId, label} = await navigator.mediaDevices.selectAudioOutput(); |
| const audio = new Audio(); |
| await audio.setSinkId(deviceId); |
| audio.srcObject = new AudioContext().createMediaStreamDestination().stream; |
| audio.play(); |
| await new Promise(r => t.step_timeout(r, 0)); |
| audio.srcObject.removeTrack(audio.srcObject.getTracks()[0]); |
| await garbageCollect(); |
| }); |
| </script> |
| </html> |