|  | <!DOCTYPE HTML> | 
|  | <script src="/resources/testharness.js"></script> | 
|  | <script src="/resources/testharnessreport.js"></script> | 
|  | <canvas id="canvas"> | 
|  | </canvas> | 
|  | <script> | 
|  |  | 
|  | function createAudioTrack() { | 
|  | ac = new AudioContext(); | 
|  | var osc = ac.createOscillator(); | 
|  | var dest = ac.createMediaStreamDestination(); | 
|  | osc.connect(dest); | 
|  | audio_track = dest.stream.getAudioTracks()[0]; | 
|  |  | 
|  | assert_equals(audio_track.kind, "audio"); | 
|  | return audio_track; | 
|  | } | 
|  |  | 
|  | function createVideoTrack() { | 
|  | canvas = document.getElementById("canvas"); | 
|  | video_track = canvas.captureStream().getVideoTracks()[0]; | 
|  |  | 
|  | assert_equals(video_track.kind, "video"); | 
|  | return video_track; | 
|  | } | 
|  |  | 
|  | test(t => { | 
|  | audio_track = createAudioTrack(); | 
|  | assert_equals("", audio_track.contentHint); | 
|  |  | 
|  | video_track = createVideoTrack(); | 
|  | assert_equals("", video_track.contentHint); | 
|  | }, "Tracks have empty default content hint"); | 
|  |  | 
|  | test(t => { | 
|  | audio_track = createAudioTrack(); | 
|  | audio_track.contentHint = "speech"; | 
|  | assert_equals(audio_track.contentHint, "speech"); | 
|  | audio_track.contentHint = "music"; | 
|  | assert_equals(audio_track.contentHint, "music"); | 
|  | audio_track.contentHint = ""; | 
|  | assert_equals(audio_track.contentHint, ""); | 
|  | }, "Accepts valid audio contentHints"); | 
|  |  | 
|  | test(t => { | 
|  | audio_track = createAudioTrack(); | 
|  | audio_track.contentHint = "speech"; | 
|  | assert_equals(audio_track.contentHint, "speech"); | 
|  | audio_track.contentHint = "motion"; | 
|  | assert_equals(audio_track.contentHint, "speech", | 
|  | "Audio tracks should ignore video-only contentHints."); | 
|  | audio_track.contentHint = "bogus"; | 
|  | assert_equals(audio_track.contentHint, "speech", | 
|  | "Audio tracks should ignore garbage contentHints"); | 
|  | }, "Audio tracks ignore invalid/video contentHints"); | 
|  |  | 
|  | test(t => { | 
|  | video_track = createVideoTrack(); | 
|  | video_track.contentHint = "motion"; | 
|  | assert_equals(video_track.contentHint, "motion"); | 
|  | video_track.contentHint = "detail"; | 
|  | assert_equals(video_track.contentHint, "detail"); | 
|  | video_track.contentHint = "text"; | 
|  | assert_equals(video_track.contentHint, "text"); | 
|  | video_track.contentHint = ""; | 
|  | assert_equals(video_track.contentHint, ""); | 
|  | }, "Accepts valid video contentHints"); | 
|  |  | 
|  | test(t => { | 
|  | video_track = createVideoTrack(); | 
|  | video_track.contentHint = "motion"; | 
|  | assert_equals(video_track.contentHint, "motion"); | 
|  | video_track.contentHint = "speech"; | 
|  | assert_equals(video_track.contentHint, "motion", | 
|  | "Video tracks should ignore audio-only contentHints."); | 
|  | video_track.contentHint = "bogus"; | 
|  | assert_equals(video_track.contentHint, "motion", | 
|  | "Video tracks should ignore garbage contentHints"); | 
|  | }, "Video tracks ignore invalid/audio contentHints"); | 
|  |  | 
|  | test(t => { | 
|  | video_track = createVideoTrack(); | 
|  | video_track.contentHint = "motion"; | 
|  | assert_equals(video_track.contentHint, "motion"); | 
|  |  | 
|  | // Cloning a track should preserve contentHint. | 
|  | video_track_clone = video_track.clone(); | 
|  | assert_equals(video_track_clone.contentHint, "motion"); | 
|  |  | 
|  | // Changing a cloned track's contentHint should not change the original. | 
|  | video_track_clone.contentHint = "detail"; | 
|  | assert_equals(video_track_clone.contentHint, "detail"); | 
|  | assert_equals(video_track.contentHint, "motion"); | 
|  | }, "Cloned video tracks have separate contentHints"); | 
|  |  | 
|  | test(t => { | 
|  | audio_track = createAudioTrack(); | 
|  | audio_track.contentHint = "speech"; | 
|  | assert_equals(audio_track.contentHint, "speech"); | 
|  |  | 
|  | // Cloning a track should preserve contentHint. | 
|  | audio_track_clone = audio_track.clone(); | 
|  | assert_equals(audio_track_clone.contentHint, "speech"); | 
|  |  | 
|  | // Changing a cloned track's contentHint should not change the original. | 
|  | audio_track_clone.contentHint = "music"; | 
|  | assert_equals(audio_track_clone.contentHint, "music"); | 
|  | assert_equals(audio_track.contentHint, "speech"); | 
|  | }, "Cloned audio tracks have separate contentHints"); | 
|  |  | 
|  | </script> |