Files
shaka-player/lib/polyfill/patchedmediakeys_nop.js
T
Joey Parrish f539147d48 fix: Correct license headers in compiled output
This fixes all the license headers in the main library, which corrects
the appearance of the main license in the compiled output.

It seems that the `!` in the header forces the compiler to keep it in
the output.  I believe older compiler releases did this purely based
on `@license`.

Issue #2638

Change-Id: I7f0e918caad10c9af689c9d07672b7fe9be7b2f3
2020-06-09 16:05:09 -07:00

131 lines
3.7 KiB
JavaScript

/*! @license
* Shaka Player
* Copyright 2016 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
goog.provide('shaka.polyfill.PatchedMediaKeysNop');
goog.require('goog.asserts');
goog.require('shaka.log');
goog.require('shaka.polyfill');
/**
* @summary A polyfill to stub out
* {@link https://bit.ly/EmeMar15 EME draft 12 March 2015} on browsers without
* EME.
* All methods will fail.
*/
shaka.polyfill.PatchedMediaKeysNop = class {
/**
* Installs the polyfill if needed.
*/
static install() {
if (!window.HTMLVideoElement ||
(navigator.requestMediaKeySystemAccess &&
// eslint-disable-next-line no-restricted-syntax
MediaKeySystemAccess.prototype.getConfiguration)) {
return;
}
shaka.log.info('EME not available.');
// Alias.
const PatchedMediaKeysNop = shaka.polyfill.PatchedMediaKeysNop;
// Install patches.
navigator.requestMediaKeySystemAccess =
PatchedMediaKeysNop.requestMediaKeySystemAccess;
// Delete mediaKeys to work around strict mode compatibility issues.
// eslint-disable-next-line no-restricted-syntax
delete HTMLMediaElement.prototype['mediaKeys'];
// Work around read-only declaration for mediaKeys by using a string.
// eslint-disable-next-line no-restricted-syntax
HTMLMediaElement.prototype['mediaKeys'] = null;
// eslint-disable-next-line no-restricted-syntax
HTMLMediaElement.prototype.setMediaKeys = PatchedMediaKeysNop.setMediaKeys;
// These are not usable, but allow Player.isBrowserSupported to pass.
window.MediaKeys = PatchedMediaKeysNop.MediaKeys;
window.MediaKeySystemAccess = PatchedMediaKeysNop.MediaKeySystemAccess;
}
/**
* An implementation of navigator.requestMediaKeySystemAccess.
* Retrieves a MediaKeySystemAccess object.
*
* @this {!Navigator}
* @param {string} keySystem
* @param {!Array.<!MediaKeySystemConfiguration>} supportedConfigurations
* @return {!Promise.<!MediaKeySystemAccess>}
*/
static requestMediaKeySystemAccess(keySystem, supportedConfigurations) {
shaka.log.debug('PatchedMediaKeysNop.requestMediaKeySystemAccess');
goog.asserts.assert(this == navigator,
'bad "this" for requestMediaKeySystemAccess');
return Promise.reject(new Error(
'The key system specified is not supported.'));
}
/**
* An implementation of HTMLMediaElement.prototype.setMediaKeys.
* Attaches a MediaKeys object to the media element.
*
* @this {!HTMLMediaElement}
* @param {MediaKeys} mediaKeys
* @return {!Promise}
*/
static setMediaKeys(mediaKeys) {
shaka.log.debug('PatchedMediaKeysNop.setMediaKeys');
goog.asserts.assert(this instanceof HTMLMediaElement,
'bad "this" for setMediaKeys');
if (mediaKeys == null) {
return Promise.resolve();
}
return Promise.reject(new Error('MediaKeys not supported.'));
}
};
/**
* An unusable constructor for MediaKeys.
* @implements {MediaKeys}
*/
shaka.polyfill.PatchedMediaKeysNop.MediaKeys = class {
constructor() {
throw new TypeError('Illegal constructor.');
}
/** @override */
createSession() {}
/** @override */
setServerCertificate() {}
};
/**
* An unusable constructor for MediaKeySystemAccess.
* @implements {MediaKeySystemAccess}
*/
shaka.polyfill.PatchedMediaKeysNop.MediaKeySystemAccess = class {
constructor() {
/** @override */
this.keySystem = ''; // For the compiler.
throw new TypeError('Illegal constructor.');
}
/** @override */
getConfiguration() {}
/** @override */
createMediaKeys() {}
};
// A low priority ensures this is the last and acts as a fallback.
shaka.polyfill.register(shaka.polyfill.PatchedMediaKeysNop.install, -10);