| <!DOCTYPE HTML> |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <script> |
| |
| createTrack = function() { |
| ac = new AudioContext(); |
| var osc = ac.createOscillator(); |
| var dest = ac.createMediaStreamDestination(); |
| osc.connect(dest); |
| return dest.stream.getAudioTracks()[0]; |
| } |
| |
| test(t => { |
| track = createTrack(); |
| var original_id = track.id; |
| track_clone = track.clone(); |
| assert_not_equals(track.id, track_clone.id); |
| }, "Cloned MediaStreamTracks have new IDs"); |
| |
| test(t => { |
| track = createTrack(); |
| assert_true(track.enabled); |
| track.enabled = false; |
| assert_false(track.enabled); |
| |
| track_clone = track.clone(); |
| assert_false(track_clone.enabled, |
| "Clones of disabled tracks should still be disabled."); |
| track_clone.enabled = true; |
| assert_not_equals(track.enabled, track_clone.enabled, |
| "Tracks enabled status should not be linked."); |
| }, "Clones of disabled MediaStreamTracks are still disabled."); |
| |
| test(t => { |
| track = createTrack(); |
| assert_equals(track.readyState, "live"); |
| cloned_track1 = track.clone(); |
| assert_equals(cloned_track1.readyState, "live"); |
| track.stop(); |
| assert_equals(track.readyState, "ended"); |
| cloned_track2 = track.clone(); |
| assert_equals(cloned_track2.readyState, "ended"); |
| assert_equals(cloned_track1.readyState, "live"); |
| }, "Cloned MediaStreamTracks have same states"); |
| |
| promise_test(function() { |
| return navigator.mediaDevices.getUserMedia({audio: { echoCancellation: true }}) |
| .then(function(s) { |
| track = s.getAudioTracks()[0]; |
| constraints = track.getConstraints(); |
| assert_equals(Object.keys(constraints).length, 1); |
| assert_true(constraints.hasOwnProperty('echoCancellation')); |
| assert_true(constraints.echoCancellation); |
| cloned_track = track.clone(); |
| cloned_track_constraints = cloned_track.getConstraints(); |
| assert_equals(Object.keys(cloned_track_constraints).length, Object.keys(constraints).length); |
| assert_true(constraints.hasOwnProperty('echoCancellation')); |
| assert_equals(cloned_track_constraints.echoCancellation, constraints.echoCancellation); |
| }); |
| }, 'Cloned audio MediaStreamTrack has same constraints'); |
| |
| promise_test(function() { |
| return navigator.mediaDevices.getUserMedia({video: { width: 800, height: 600 }}) |
| .then(function(s) { |
| track = s.getVideoTracks()[0]; |
| constraints = track.getConstraints(); |
| assert_equals(Object.keys(constraints).length, 2); |
| assert_true(constraints.hasOwnProperty('width')); |
| assert_equals(constraints.width, 800); |
| assert_true(constraints.hasOwnProperty('height')); |
| assert_equals(constraints.height, 600); |
| cloned_track = track.clone(); |
| cloned_track_constraints = cloned_track.getConstraints(); |
| assert_equals(Object.keys(cloned_track_constraints).length, Object.keys(constraints).length); |
| assert_true(constraints.hasOwnProperty('width')); |
| assert_equals(cloned_track_constraints.width, constraints.width); |
| assert_true(constraints.hasOwnProperty('height')); |
| assert_equals(cloned_track_constraints.height, constraints.height); |
| }); |
| }, 'Cloned video MediaStreamTrack has same constraints'); |
| |
| // TODO(pbos): Add tests that make sure muted and stopped properties are |
| // carried over. Part of crbug:669212. |
| |
| </script> |