mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-27 04:05:32 +00:00
898975f341
This changeset adds a gUM_support.js to dom/media/test/. This file provides functions to setup prefs for loopback or fake device selection before gUM calls are made. This is useful for configuring tests and providing an explicit point of reference for settings, rather than the implicit ones provided by the harness. Updates tests so that the new helper functions are called before gUM. This will result in loopback prefs being set if loopback device names are detected, if not then fake devices will be used. This also removes the use of the fake constraint in gUM calls. Update touched tests to use some more modern JS. No behavioural changes were made (except in minor cases, but functionality should be the same). These changes are largely as follows: - var -> let - async is used in places where I felt it improved readability - semicolons added to various event handler assignments MozReview-Commit-ID: 1HuE8thBA6w --HG-- extra : rebase_source : b866056b2821436cf34ea683421c200b4bb4e55f
136 lines
4.1 KiB
HTML
136 lines
4.1 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<title>Test events of media track interfaces</title>
|
|
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
|
<script type="text/javascript" src="manifest.js"></script>
|
|
<script type="text/javascript" src="gUM_support.js"></script>
|
|
</head>
|
|
<body>
|
|
<pre id="test">
|
|
<script class="testbody" type="text/javascript">
|
|
async function startTest() {
|
|
let steps = 0;
|
|
let element = document.createElement("video");
|
|
let stream;
|
|
try {
|
|
await setupGetUserMediaTestPrefs();
|
|
stream = await navigator.mediaDevices.getUserMedia({audio: true, video: true});
|
|
} catch (err) {
|
|
ok(false, 'Unexpected error fired with: ' + err);
|
|
SimpleTest.finish();
|
|
return;
|
|
}
|
|
|
|
function verifyEvent(e, type) {
|
|
is(e.type, type, "Event type should be " + type);
|
|
ok(e.isTrusted, "Event should be trusted.");
|
|
ok(!e.bubbles, "Event shouldn't bubble.");
|
|
ok(!e.cancelable, "Event shouldn't be cancelable.");
|
|
}
|
|
|
|
element.audioTracks.onaddtrack = function(e) {
|
|
ok(e instanceof TrackEvent, "Event fired from onaddtrack should be a TrackEvent");
|
|
ok(true, 'onaddtrack is expected to be called from audioTracks.');
|
|
verifyEvent(e, "addtrack");
|
|
};
|
|
|
|
element.audioTracks.onremovetrack = function(e) {
|
|
ok(e instanceof TrackEvent, "Event fired from onremovetrack should be a TrackEvent");
|
|
ok(true, 'onremovetrack is expected to be called from audioTracks.');
|
|
verifyEvent(e, "removetrack");
|
|
};
|
|
|
|
element.audioTracks.onchange = function(e) {
|
|
ok(e instanceof window.Event, "Event fired from onchange should be a simple event.");
|
|
ok(true, 'onchange is expected to be called from audioTracks.');
|
|
verifyEvent(e, "change");
|
|
};
|
|
|
|
element.videoTracks.onaddtrack = function(e) {
|
|
ok(e instanceof TrackEvent, "Event fired from onaddtrack should be a TrackEvent");
|
|
ok(true, 'onaddtrack is expected to be called from videoTracks.');
|
|
verifyEvent(e, "addtrack");
|
|
};
|
|
|
|
element.videoTracks.onremovetrack = function(e) {
|
|
ok(e instanceof TrackEvent, "Event fired from onremovetrack should be a TrackEvent");
|
|
ok(true, 'onremovetrack is expected to be called from videoTracks.');
|
|
verifyEvent(e, "removetrack");
|
|
};
|
|
|
|
element.videoTracks.onchange = function(e) {
|
|
ok(e instanceof window.Event, "Event fired from onchange should be a simple event.");
|
|
ok(true, 'onchange is expected to be called from videoTracks.');
|
|
verifyEvent(e, "change");
|
|
};
|
|
|
|
element.onended = function() {
|
|
ok(true, 'Event ended is expected to be fired on element.');
|
|
element.onended = null;
|
|
element.onplaying = null;
|
|
element.onpause = null;
|
|
//This helps to prevent these events from firing after SimpleTest.finish()
|
|
//on B2G ICS Emulator, but not sure they have been run at all, then
|
|
element.audioTracks.onremovetrack = null;
|
|
element.audioTracks.onaddtrack = null;
|
|
element.audioTracks.onchange = null;
|
|
element.videoTracks.onremovetrack = null;
|
|
element.videoTracks.onaddtrack = null;
|
|
element.videoTracks.onchange = null;
|
|
SimpleTest.finish();
|
|
}
|
|
|
|
function onpause() {
|
|
element.onpause = null;
|
|
if (element.ended) {
|
|
return;
|
|
}
|
|
if (steps == 1) {
|
|
element.audioTracks[0].enabled = false;
|
|
element.videoTracks[0].selected = false;
|
|
element.onplaying = onplaying;
|
|
element.play();
|
|
steps++;
|
|
}
|
|
}
|
|
|
|
function onplaying() {
|
|
element.onplaying = null;
|
|
if (element.ended) {
|
|
return;
|
|
}
|
|
if (steps == 1) {
|
|
element.onpause = onpause;
|
|
element.pause();
|
|
} else if (steps == 2) {
|
|
stream.stop();
|
|
}
|
|
}
|
|
|
|
element.onplaying = onplaying;
|
|
element.srcObject = stream;
|
|
|
|
isnot(element.audioTracks, undefined,
|
|
'HTMLMediaElement::AudioTracks() property should be available.');
|
|
isnot(element.videoTracks, undefined,
|
|
'HTMLMediaElement::VideoTracks() property should be available.');
|
|
|
|
steps++;
|
|
await element.play();
|
|
}
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
SpecialPowers.pushPrefEnv(
|
|
{
|
|
"set": [
|
|
["media.track.enabled", true]
|
|
]
|
|
}, startTest);
|
|
|
|
</script>
|
|
</pre>
|
|
</body>
|
|
</html>
|