зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1512958 - Add mochitest. r=jya,jib
Differential Revision: https://phabricator.services.mozilla.com/D14583 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
862fdf36a9
Коммит
63c1afee2b
|
@ -767,6 +767,9 @@ skip-if = toolkit == 'android' # bug 1306916, bug 1329566, android(bug 1232305)
|
|||
[test_bug1248229.html]
|
||||
skip-if = android_version == '17' # bug 1306917, 1323778, android(bug 1232305)
|
||||
tags=capturestream
|
||||
[test_bug1512958.html]
|
||||
skip-if = toolkit == 'android' # android(bug 1232305)
|
||||
tags=msg capturestream
|
||||
[test_can_play_type.html]
|
||||
skip-if = (android_version == '23' && debug) || (android_version == '25' && debug) # android(bug 1232305)
|
||||
[test_can_play_type_mpeg.html]
|
||||
|
|
|
@ -0,0 +1,74 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<title>Test that pausing and resuming a captured media element with audio doesn't stall</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>
|
||||
</head>
|
||||
<body>
|
||||
<audio id="a"></audio>
|
||||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
function dumpEvent({target, type}) {
|
||||
info(`${target.name} GOT EVENT ${type} currentTime=${target.currentTime} ` +
|
||||
`paused=${target.paused} ended=${target.ended} ` +
|
||||
`readyState=${target.readyState}`);
|
||||
}
|
||||
|
||||
function wait(ms) {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
}
|
||||
|
||||
const a = document.getElementById('a');
|
||||
|
||||
const events = ["timeupdate", "seeking", "seeked", "ended", "playing", "pause"];
|
||||
for (let ev of events) {
|
||||
a.addEventListener(ev, dumpEvent);
|
||||
}
|
||||
|
||||
(async _ => {
|
||||
try {
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
SimpleTest.requestFlakyTimeout("Timeouts for shortcutting test-timeout");
|
||||
|
||||
const test = getPlayableAudio(gTrackTests.filter(t => t.duration > 2));
|
||||
if (!test) {
|
||||
todo(false, "No playable audio");
|
||||
return;
|
||||
}
|
||||
|
||||
// Start playing and capture
|
||||
a.src = test.name;
|
||||
a.name = test.name;
|
||||
const ac = new AudioContext();
|
||||
const src = ac.createMediaElementSource(a);
|
||||
a.play();
|
||||
do {
|
||||
await new Promise(r => a.ontimeupdate = r);
|
||||
} while(a.currentTime == 0)
|
||||
|
||||
// Pause to trigger recreating tracks in DecodedStream
|
||||
a.pause();
|
||||
await new Promise(r => a.onpause = r);
|
||||
|
||||
// Resuming should now work. Bug 1512958 would cause a stall because the
|
||||
// original track wasn't ended and we'd block on it.
|
||||
// See https://bugzilla.mozilla.org/show_bug.cgi?id=1512958#c5
|
||||
a.play();
|
||||
await new Promise(r => a.onplaying = r);
|
||||
a.currentTime = test.duration - 1;
|
||||
await Promise.race([
|
||||
new Promise(res => a.onended = res),
|
||||
wait(30000).then(_ => Promise.reject(new Error("Timeout"))),
|
||||
]);
|
||||
} catch(e) {
|
||||
ok(false, e);
|
||||
} finally {
|
||||
SimpleTest.finish();
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
Загрузка…
Ссылка в новой задаче