diff --git a/lib/player.js b/lib/player.js index 190d4111d6..4cd8819dae 100644 --- a/lib/player.js +++ b/lib/player.js @@ -1287,7 +1287,7 @@ shaka.Player.prototype.cancelTrickPlay = function() { * @export */ shaka.Player.prototype.getVariantTracks = function() { - if (!this.manifest_) + if (!this.manifest_ || !this.playhead_) return []; this.assertCorrectActiveStreams_(); @@ -1312,7 +1312,7 @@ shaka.Player.prototype.getVariantTracks = function() { * @export */ shaka.Player.prototype.getTextTracks = function() { - if (!this.manifest_) + if (!this.manifest_ || !this.playhead_) return []; this.assertCorrectActiveStreams_(); diff --git a/test/player_unit.js b/test/player_unit.js index 5e661cb52f..a4646605c8 100644 --- a/test/player_unit.js +++ b/test/player_unit.js @@ -1378,6 +1378,31 @@ describe('Player', function() { expect(player.getTextTracks()).toEqual(textTracks); }); + it('returns empty arrays before tracks can be determined', function(done) { + var parser = new shaka.test.FakeManifestParser(manifest); + var parserFactory = function() { return parser; }; + parser.start.and.callFake(function(manifestUri, playerInterface) { + // The player does not yet have a manifest. + expect(player.getVariantTracks()).toEqual([]); + expect(player.getTextTracks()).toEqual([]); + + parser.playerInterface = playerInterface; + return Promise.resolve(manifest); + }); + drmEngine.init.and.callFake(function(manifest, isOffline) { + // The player does not yet have a playhead. + expect(player.getVariantTracks()).toEqual([]); + expect(player.getTextTracks()).toEqual([]); + }); + + player.load('', 0, parserFactory).catch(fail).then(function() { + // Make sure the interruptions didn't mess up the tracks. + streamingEngine.onCanSwitch(); + expect(player.getVariantTracks()).toEqual(variantTracks); + expect(player.getTextTracks()).toEqual(textTracks); + }).then(done); + }); + it('doesn\'t disable AbrManager if switching variants', function() { streamingEngine.onCanSwitch();