diff --git a/lib/cast/cast_proxy.js b/lib/cast/cast_proxy.js index ba7cb8a739..389c0dcaea 100644 --- a/lib/cast/cast_proxy.js +++ b/lib/cast/cast_proxy.js @@ -647,6 +647,14 @@ shaka.cast.CastProxy = class extends shaka.util.FakeEventTarget { return () => this.localPlayer_.getNetworkingEngine(); } + if (name == 'getDrmEngine') { + // Always returns a local instance. + if (this.sender_.isCasting()) { + shaka.log.warning('NOTE: getDrmEngine() is always local!'); + } + return () => this.localPlayer_.getDrmEngine(); + } + if (name == 'getAdManager') { // Always returns a local instance. if (this.sender_.isCasting()) { diff --git a/lib/media/drm_engine.js b/lib/media/drm_engine.js index 0e3faf2059..ddc833fa43 100644 --- a/lib/media/drm_engine.js +++ b/lib/media/drm_engine.js @@ -593,7 +593,8 @@ shaka.media.DrmEngine = class { } } - this.createTemporarySession_(initDataType, initData); + this.createSession(initDataType, initData, + this.currentDrmInfo_.sessionType); } /** @return {boolean} */ @@ -732,6 +733,16 @@ shaka.media.DrmEngine = class { return shaka.util.MapUtils.asObject(this.announcedKeyStatusByKeyId_); } + /** + * Returns the current media key sessions. + * + * @return {!Array.} + */ + getMediaKeySessions() { + return Array.from(this.activeSessions_.keys()); + } + + /** * @param {shaka.extern.Stream} stream * @param {string=} codecOverride @@ -1129,16 +1140,14 @@ shaka.media.DrmEngine = class { /** * @param {string} initDataType * @param {!Uint8Array} initData - * @private + * @param {string} sessionType */ - createTemporarySession_(initDataType, initData) { + createSession(initDataType, initData, sessionType) { goog.asserts.assert(this.mediaKeys_, 'mediaKeys_ should be valid when creating temporary session.'); let session; - const sessionType = this.currentDrmInfo_.sessionType; - try { shaka.log.info('Creating new', sessionType, 'session'); diff --git a/lib/player.js b/lib/player.js index ba7130b28f..e76730c689 100644 --- a/lib/player.js +++ b/lib/player.js @@ -3098,6 +3098,19 @@ shaka.Player = class extends shaka.util.FakeEventTarget { return this.drmEngine_ ? this.drmEngine_.getDrmInfo() : null; } + + /** + * Get the drm engine. + * This method should only be used for testing. Applications SHOULD NOT + * use this in production. + * + * @return {?shaka.media.DrmEngine} + */ + getDrmEngine() { + return this.drmEngine_; + } + + /** * Get the next known expiration time for any EME session. If the session * never expires, this will return Infinity. If there are no EME diff --git a/test/cast/cast_utils_unit.js b/test/cast/cast_utils_unit.js index d15a2bef78..41a437889e 100644 --- a/test/cast/cast_utils_unit.js +++ b/test/cast/cast_utils_unit.js @@ -27,6 +27,7 @@ describe('CastUtils', () => { 'getAdManager', // Handled specially 'getSharedConfiguration', // Handled specially 'getNetworkingEngine', // Handled specially + 'getDrmEngine', // Handled specially 'getMediaElement', // Handled specially 'setMaxHardwareResolution', 'destroy', // Should use CastProxy.destroy instead