diff options
Diffstat (limited to 'dom/media/tests/mochitest/test_getUserMedia_scarySources.html')
-rw-r--r-- | dom/media/tests/mochitest/test_getUserMedia_scarySources.html | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/dom/media/tests/mochitest/test_getUserMedia_scarySources.html b/dom/media/tests/mochitest/test_getUserMedia_scarySources.html new file mode 100644 index 000000000..2f1b2195b --- /dev/null +++ b/dom/media/tests/mochitest/test_getUserMedia_scarySources.html @@ -0,0 +1,66 @@ +<!DOCTYPE HTML> +<html> +<head> + <script type="application/javascript" src="head.js"></script> + <script type="application/javascript" src="mediaStreamPlayback.js"></script> +</head> +<body> +<pre id="test"> +<script type="application/javascript"> + +createHTML({title: "Detect screensharing sources that are firefox", bug: "1311048"}); + +netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); + +const { Services } = SpecialPowers.Cu.import('resource://gre/modules/Services.jsm'); + +let observe = topic => new Promise(r => Services.obs.addObserver(function o(...args) { + Services.obs.removeObserver(o, topic); + r(args); +}, topic, false)); + +let getDevices = async constraints => { + let [{ windowID, innerWindowID, callID }] = await Promise.race([ + getUserMedia(constraints), + observe("getUserMedia:request") + ]); + let window = Services.wm.getOuterWindowWithId(windowID); + let devices = await new Promise((resolve, reject) => + window.navigator.mozGetUserMediaDevices({}, resolve, reject, + innerWindowID, callID)); + return devices.map(d => d.QueryInterface(Ci.nsIMediaDevice)); +}; + +runTest(async () => { + try { + const isWinXP = navigator.userAgent.indexOf("Windows NT 5.1") != -1; + if (IsMacOSX10_6orOlder() || isWinXP) { + ok(true, "Screensharing disabled for OSX10.6 and WinXP"); + return; + } + + await pushPrefs(["media.navigator.permission.disabled", true], + ["media.navigator.permission.fake", true], + ["media.navigator.permission.force", true]); + let devices = await getDevices({video: { mediaSource: "window" }}); + ok(devices.length, "Found one or more windows."); + devices = devices.filter(d => d.scary); + ok(devices.length, "Found one or more scary windows (our own counts)."); + devices.filter(d => d.name.includes("MochiTest")); + ok(devices.length, + "Our own window is among the scary: " + devices.map(d => `"${d.name}"`)); + + devices = await getDevices({video: { mediaSource: "screen" }}); + let numScreens = devices.length; + ok(numScreens, "Found one or more screens."); + devices = devices.filter(d => d.scary); + is(devices.length, numScreens, "All screens are scary."); + } catch(e) { + ok(false, e); + } +}); + +</script> +</pre> +</body> +</html> |