blob: b17190186db7426ce7f54de493ef8d24d23554cd [file] [log] [blame]
<!doctype html>
<title>currentSrc should not be reset when changing source</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<audio src="/media/sine440.mp3"></audio>
<script>
let v;
let t = async_test("Test currentSrc behaviour in various playback scenarios");
v = document.querySelector('audio');
function queueTaskAndStep(f) {
step_timeout(function() {
t.step(f);
}, 0);
}
function next() {
let testcase = tests.shift();
if (!testcase) {
t.done();
}
step_timeout(testcase, 0);
}
let tests = [
function() {
v.src = "/media/sound_0.mp3";
queueTaskAndStep(function() {
assert_true(v.currentSrc.indexOf("sound_0.mp3") != -1, "currentSrc must be equal to the source after load if present");
next();
});
},
function() {
v.src = URL.createObjectURL(new MediaSource());
queueTaskAndStep(function() {
assert_equals(v.currentSrc, "", "currentSrc must be equal to the empty string after load if playing a MediaSource");
next();
});
},
function() {
v.src = "/media/sound_0.mp3";
// Source should be ignored when there is an `src`
let sourceNode = document.createElement("source");
sourceNode.setAttribute("src", "/media/sine440.mp3");
sourceNode.setAttribute("type", "audio/mpeg");
v.appendChild(sourceNode);
queueTaskAndStep(function() {
assert_true(v.currentSrc.indexOf("sine440.mp3") == -1, "The src attribute takes precedence over any source child element when both are preset");
next();
})
},
function() {
// But taken into account when there is no `src` attribute;
v.src = "";
v.removeAttribute("src");
queueTaskAndStep(function() {
assert_true(v.currentSrc.indexOf("sine440.mp3") != -1, "The child source element is the current source when no src attribute is present");
next();
});
},
function() {
v.firstChild.remove();
v.src = "https://test:test/";
queueTaskAndStep(function() {
assert_true(v.currentSrc.indexOf("sine440.mp3") != -1, "Not reset when a new load errors");
next();
});
},
function() {
v.srcObject = new MediaStream();
queueTaskAndStep(function() {
assert_equals(v.currentSrc, "", "When playing a MediaStream, currentSrc should also be reset to an empty string");
next();
});
}
];
next();
</script>