| <!doctype html> |
| <html> |
| <script src="../../../../resources/js-test-pre.js"></script> |
| <body onload="start()"> |
| <iframe id="none"" src="http://localhost:8000/media/media-stream/resources/device-change-iframe.html?1"></iframe> |
| <iframe id="camera" allow="camera" src="http://localhost:8000/media/media-stream/resources/device-change-iframe.html?2"></iframe> |
| <iframe id="microphone" allow="camera" src="http://localhost:8000/media/media-stream/resources/device-change-iframe.html?2"></iframe> |
| <iframe id="same-origin" src="http://127.0.0.1:8000/media/media-stream/resources/device-change-iframe.html?3"></iframe> |
| |
| <script> |
| |
| if (window.testRunner) { |
| testRunner.dumpAsText(); |
| testRunner.waitUntilDone(); |
| testRunner.setUserMediaPermission(true); |
| } |
| |
| let count = new Set(); |
| let success = true; |
| let results = []; |
| function countEvent(id) |
| { |
| results.push(`<iframe id=${id}> got a 'devicechange' event`); |
| if (id == "none") { |
| result.innerHTML += `FAIL: <iframe id=${id}> got 'devicechange' event<br>`; |
| success = false; |
| } else |
| count.add(id); |
| |
| if (count.size == 4) { |
| setTimeout(() => { |
| result.innerHTML = results.sort().join('<br>'); |
| if (success) |
| result.innerHTML += "<br><br>PASS: 'devicechange' only fired on frames with access to devices<br>"; |
| if (window.testRunner) { |
| testRunner.notifyDone(); |
| testRunner.resetMockMediaDevices(); |
| } |
| }, 500); |
| } |
| } |
| |
| async function start() |
| { |
| await window.navigator.mediaDevices.getUserMedia({audio:true}); |
| if (window.testRunner) |
| testRunner.addMockMicrophoneDevice("id4", "microphone 3"); |
| } |
| |
| window.onmessage = (event) => { countEvent(event.data); }; |
| navigator.mediaDevices.ondevicechange = (event) => { countEvent('main'); }; |
| |
| Array.from(document.getElementsByTagName('iframe')).forEach(element => { |
| element.onload = (evt) => { |
| evt.target.contentWindow.postMessage(evt.target.id, '*'); |
| } |
| }); |
| |
| </script> |
| |
| <div id="result"></div> |
| </body> |
| </html> |