From 19a0628881a0c5bcad9af853789b03050ed4ef0a Mon Sep 17 00:00:00 2001 From: David LaPalomento Date: Tue, 7 Jul 2015 14:35:17 -0400 Subject: [PATCH] don't track progress until ready Delay manual progress checks until the tech is ready to avoid errors. The Flash tech errors if buffered() is called before the SWF has loaded, for instance. --- src/js/tech/tech.js | 5 ++++- test/unit/tech/tech.test.js | 14 +++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) 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() {