Skip to content

Commit c1cbce3

Browse files
authored
fix(tracks): don't select tracks based on user pref if no langauge is set (#5556)
When preselecting a new track based on user preference, make sure that the language is actually set and that the track we're testing is either a captions or a subtitles track. Fixes #5553
1 parent dbaca33 commit c1cbce3

File tree

2 files changed

+49
-2
lines changed

2 files changed

+49
-2
lines changed

src/js/tracks/text-track-display.js

+5-2
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,11 @@ class TextTrackDisplay extends Component {
150150
for (let i = 0; i < trackList.length; i++) {
151151
const track = trackList[i];
152152

153-
if (userPref && userPref.enabled &&
154-
userPref.language === track.language) {
153+
if (
154+
userPref && userPref.enabled &&
155+
userPref.language && userPref.language === track.language &&
156+
track.kind in modes
157+
) {
155158
// Always choose the track that matches both language and kind
156159
if (track.kind === userPref.kind) {
157160
preferredTrack = track;

test/unit/tracks/text-track-display.test.js

+44
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,50 @@ if (!Html5.supportsNativeTextTracks()) {
183183
player.dispose();
184184
});
185185

186+
QUnit.test("don't select user langauge if it is an empty string", function(assert) {
187+
const player = TestHelpers.makePlayer();
188+
const track1 = {
189+
kind: 'captions',
190+
label: 'English',
191+
language: 'en',
192+
src: 'en.vtt'
193+
};
194+
const track2 = {
195+
kind: 'captions',
196+
label: 'Spanish',
197+
language: 'es',
198+
src: 'es.vtt'
199+
};
200+
const track3 = {
201+
kind: 'metadata',
202+
label: 'segment-metadata'
203+
};
204+
205+
player.src({type: 'video/mp4', src: 'http://google.com'});
206+
// manualCleanUp = true by default
207+
const englishTrack = player.addRemoteTextTrack(track1, true).track;
208+
const spanishTrack = player.addRemoteTextTrack(track2, true).track;
209+
const metadataTrack = player.addRemoteTextTrack(track3, true).track;
210+
211+
// Force empty string ('') as "user-selected" track
212+
player.cache_.selectedLanguage = { enabled: true, language: '', kind: 'captions' };
213+
this.clock.tick(1);
214+
215+
assert.equal(spanishTrack.mode, 'disabled', 'Spanish captions should be disabled');
216+
assert.equal(englishTrack.mode, 'disabled', 'English captions should be disabled');
217+
assert.notEqual(metadataTrack.mode, 'showing', 'Metadata track should not be showing');
218+
219+
// Force es as "user-selected" track
220+
player.cache_.selectedLanguage = { enabled: true, language: 'es', kind: 'captions' };
221+
player.trigger('loadstart');
222+
223+
assert.equal(spanishTrack.mode, 'showing', 'Spanish captions should be showing');
224+
assert.equal(englishTrack.mode, 'disabled', 'English captions should be disabled');
225+
assert.notEqual(metadataTrack.mode, 'showing', 'Metadata track should not be showing');
226+
227+
player.dispose();
228+
});
229+
186230
QUnit.test("matching both the selectedLanguage's language and kind takes priority over just matching the language", function(assert) {
187231
const player = TestHelpers.makePlayer();
188232
const track1 = {

0 commit comments

Comments
 (0)