diff --git a/src/js/tech/tech.js b/src/js/tech/tech.js index bda7ca952d..b3ce6555ff 100644 --- a/src/js/tech/tech.js +++ b/src/js/tech/tech.js @@ -98,7 +98,9 @@ class Tech extends Component { this.manualProgress = true; // Trigger progress watching when a source begins loading - this.trackProgress(); + this.one('ready', () => { + this.trackProgress(); + }); } manualProgressOff() { @@ -109,6 +111,7 @@ class Tech extends Component { } trackProgress() { + this.stopTrackingProgress(); this.progressInterval = this.setInterval(Fn.bind(this, function(){ // Don't trigger unless buffered amount is greater than last time diff --git a/test/unit/tech/tech.test.js b/test/unit/tech/tech.test.js index 83bf10a399..de4486e58a 100644 --- a/test/unit/tech/tech.test.js +++ b/test/unit/tech/tech.test.js @@ -61,14 +61,26 @@ test('stops manual timeupdates while paused', function() { }); test('should synthesize progress events by default', function() { - var progresses = 0, tech; + var progresses = 0, bufferedPercent = 0.5, tech; tech = new Tech(); tech.on('progress', function() { progresses++; }); + tech.bufferedPercent = function() { + return bufferedPercent; + }; + + this.clock.tick(500); + equal(progresses, 0, 'waits until ready'); + tech.trigger('ready'); this.clock.tick(500); equal(progresses, 1, 'triggered one event'); + + tech.trigger('ready'); + bufferedPercent = 0.75; + this.clock.tick(500); + equal(progresses, 2, 'repeated readies are ok'); }); test('dispose() should stop time tracking', function() {