blob: b2d4a26e8d6f7764a13d5aa4ddd56ff0427a5002 [file] [log] [blame]
<!doctype html>
<html>
<head>
<title>The networkState of a media element that has assigned a MediaStream
should be NETWORK_LOADING if the stream is active and NETWORK_IDLE if the
stream is inactive.
</title>
</head>
<body>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>
var t = async_test("Tests that the networkState of a video element playing a " +
"MediaStream is updated correctly.");
t.step(function() {
navigator.mediaDevices.getUserMedia({audio:true, video: true})
.then(t.step_func(stream => {
var video = document.createElement('video');
assert_equals(video.networkState, HTMLMediaElement.NETWORK_EMPTY);
video.srcObject = stream;
setTimeout(()=>{
assert_equals(video.networkState, HTMLMediaElement.NETWORK_LOADING);
stream.getTracks().forEach(track => track.stop());
assert_equals(video.networkState, HTMLMediaElement.NETWORK_IDLE);
// Removing and re-adding the stopped audio track does not change the
// network state.
var track = stream.getAudioTracks()[0];
stream.removeTrack(track);
assert_equals(video.networkState, HTMLMediaElement.NETWORK_IDLE);
stream.addTrack(track);
assert_equals(video.networkState, HTMLMediaElement.NETWORK_IDLE);
// Removing and re-adding the stopped tracks does not change the
// network state.
var track = stream.getVideoTracks()[0];
stream.removeTrack(track);
assert_equals(video.networkState, HTMLMediaElement.NETWORK_IDLE);
stream.addTrack(track);
assert_equals(video.networkState, HTMLMediaElement.NETWORK_IDLE);
var track = stream.getAudioTracks()[0];
stream.removeTrack(track);
assert_equals(video.networkState, HTMLMediaElement.NETWORK_IDLE);
stream.addTrack(track);
assert_equals(video.networkState, HTMLMediaElement.NETWORK_IDLE);
// Replacing the existing tracks with new active tracks does change the
// network state.
navigator.mediaDevices.getUserMedia({audio:true, video:true}).then(
t.step_func(stream2 => {
stream.removeTrack(stream.getAudioTracks()[0]);
stream.addTrack(stream2.getAudioTracks()[0]);
assert_equals(video.networkState, HTMLMediaElement.NETWORK_LOADING);
stream.removeTrack(stream.getAudioTracks()[0]);
assert_equals(video.networkState, HTMLMediaElement.NETWORK_IDLE);
stream.removeTrack(stream.getVideoTracks()[0]);
stream.addTrack(stream2.getVideoTracks()[0]);
assert_equals(video.networkState, HTMLMediaElement.NETWORK_LOADING);
stream.removeTrack(stream.getVideoTracks()[0]);
assert_equals(video.networkState, HTMLMediaElement.NETWORK_IDLE);
t.done();
}), t.unreached_func);
});
}), t.unreached_func);
});
</script>
</body>
</html>