diff --git a/karma.conf.js b/karma.conf.js index 18f743dee6..5025dc4d54 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -38,8 +38,8 @@ module.exports = function(config) { '/assets/': '/base/assets/' }, - // do not panic about "no activity" unless a test takes longer than 60s. - browserNoActivityTimeout: 60000, + // do not panic about "no activity" unless a test takes longer than 70s. + browserNoActivityTimeout: 70000, // don't capture the client's console logs client: { captureConsole: false }, diff --git a/lib/media/source_buffer_manager.js b/lib/media/source_buffer_manager.js index a33e160420..f886792a3d 100644 --- a/lib/media/source_buffer_manager.js +++ b/lib/media/source_buffer_manager.js @@ -627,11 +627,13 @@ shaka.media.SourceBufferManager.prototype.clearAfter_ = function(timestamp) { */ shaka.media.SourceBufferManager.prototype.abort_ = function() { shaka.log.v1(this.logPrefix_(), 'abort_'); - shaka.asserts.assert(this.operationPromise_); - - // See {@link http://www.w3.org/TR/media-source/#widl-SourceBuffer-abort-void} - if (this.mediaSource_.readyState == 'open') { - this.sourceBuffer_.abort(); + // Due to a race caused by Promise polyfills, operationPromise_ might be null + // when abort_ is called. In this case, the operation is already aborted. + if (this.operationPromise_) { + // See http://www.w3.org/TR/media-source/#widl-SourceBuffer-abort-void + if (this.mediaSource_.readyState == 'open') { + this.sourceBuffer_.abort(); + } } }; diff --git a/spec/task_spec.js b/spec/task_spec.js index b2b2ea0012..e1bb943a0c 100644 --- a/spec/task_spec.js +++ b/spec/task_spec.js @@ -125,30 +125,30 @@ describe('Task', function() { setTimeout(function() { expect(stages).toEqual([0]); - }, 10); + }, 15); setTimeout(function() { expect(stages).toEqual([0]); p0.resolve(); - }, 20); + }, 30); setTimeout(function() { expect(stages).toEqual([0, 1]); - }, 30); + }, 45); setTimeout(function() { expect(stages).toEqual([0, 1]); p1.resolve(); - }, 40); + }, 60); setTimeout(function() { expect(stages).toEqual([0, 1, 2]); // We've run the final stage, but it's not done until p2 is resolved. expect(complete).toBe(false); - }, 50); + }, 75); setTimeout(function() { expect(stages).toEqual([0, 1, 2]); expect(complete).toBe(false); p2.resolve(); - }, 60); + }, 90); t.getPromise().then(function() { complete = true;