diff --git a/lib/media/drm_engine.js b/lib/media/drm_engine.js index 4f4bb2693c..6ecfe535c9 100644 --- a/lib/media/drm_engine.js +++ b/lib/media/drm_engine.js @@ -1054,10 +1054,10 @@ shaka.media.DrmEngine.prototype.sendLicenseRequest_ = function(event) { /** @type {!MediaKeySession} */ var session = event.target; - var updatePromise; + var activeSession; for (var i = 0; i < this.activeSessions_.length; i++) { if (this.activeSessions_[i].session == session) { - updatePromise = this.activeSessions_[i].updatePromise; + activeSession = this.activeSessions_[i]; break; } } @@ -1080,9 +1080,19 @@ shaka.media.DrmEngine.prototype.sendLicenseRequest_ = function(event) { // Request succeeded, now pass the response to the CDM. return session.update(response.data).then(function() { - if (updatePromise) - updatePromise.resolve(); - }); + if (activeSession) { + if (activeSession.updatePromise) + activeSession.updatePromise.resolve(); + // In case there are no key statuses, consider this session loaded + // after a reasonable timeout. It should definitely not take 5 + // seconds to process a license. + setTimeout(function() { + activeSession.loaded = true; + if (this.activeSessions_.every(function(s) { return s.loaded; })) + this.allSessionsLoaded_.resolve(); + }.bind(this), 5000); + } + }.bind(this)); }.bind(this), function(error) { // Ignore destruction errors if (this.destroyed_) return Promise.resolve(); @@ -1096,8 +1106,8 @@ shaka.media.DrmEngine.prototype.sendLicenseRequest_ = function(event) { shaka.util.Error.Code.LICENSE_REQUEST_FAILED, error); this.onError_(shakaErr); - if (updatePromise) - updatePromise.reject(shakaErr); + if (activeSession && activeSession.updatePromise) + activeSession.updatePromise.reject(shakaErr); }.bind(this)).catch(function(error) { // Ignore destruction errors if (this.destroyed_) return Promise.resolve(); @@ -1109,8 +1119,8 @@ shaka.media.DrmEngine.prototype.sendLicenseRequest_ = function(event) { shaka.util.Error.Code.LICENSE_RESPONSE_REJECTED, error.message); this.onError_(shakaErr); - if (updatePromise) - updatePromise.reject(shakaErr); + if (activeSession && activeSession.updatePromise) + activeSession.updatePromise.reject(shakaErr); }.bind(this)); };