Index: third_party/WebKit/LayoutTests/imported/wpt/encrypted-media/polyfill/cast-polyfill.js |
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/encrypted-media/polyfill/cast-polyfill.js b/third_party/WebKit/LayoutTests/imported/wpt/encrypted-media/polyfill/cast-polyfill.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..576e0ad04066d37670634b39fc128dc2ea905dae |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/imported/wpt/encrypted-media/polyfill/cast-polyfill.js |
@@ -0,0 +1,80 @@ |
+(function() { |
+ |
+ if ( /CrKey\/[0-9]+\.[0-9a-z]+\.[0-9a-z]+/i.exec( navigator.userAgent ) ) { |
+ |
+ var castscript = document.createElement('script'); |
+ castscript.type = 'text/javascript'; |
+ castscript.src = 'https://www.gstatic.com/cast/sdk/libs/receiver/2.0.0/cast_receiver.js' |
+ document.head.appendChild( castscript ); |
+ |
+ var _requestMediaKeySystemAccess = navigator.requestMediaKeySystemAccess.bind( navigator ), |
+ _setMediaKeys = HTMLMediaElement.prototype.setMediaKeys, |
+ _load = MediaKeySession.prototype.load; |
+ |
+ MediaKeySession.prototype.load = function load() |
+ { |
+ return _load.call( this ).then( function( success ) |
+ { |
+ return success ? this.remove() : false; |
+ }.bind( this ) ); |
+ }; |
+ |
+ function MediaKeys( mediaKeys ) |
+ { |
+ this._mediaKeys = mediaKeys; |
+ } |
+ |
+ MediaKeys.prototype.setServerCertificate = function setServerCertificate( certificate ) |
+ { |
+ return this._mediaKeys.setServerCertificate( certificate ); |
+ }; |
+ |
+ MediaKeys.prototype.createSession = function createSession( sessionType ) { |
+ |
+ if ( sessionType === 'persistent-usage-record' ) |
+ { |
+ return cast.receiver.eme.KeySession.createSession( this._mediaKeys, 'persistent-release-message' ); |
+ } |
+ |
+ return this._mediaKeys.createSession( sessionType ); |
+ }; |
+ |
+ function MediaKeySystemAccess( access ) |
+ { |
+ this._access = mediaKeySystemAccess; |
+ } |
+ |
+ Object.defineProperty( MediaKeySystemAccess.prototype, 'keySystem', { get: function() { return this._access.keySystem; } } ); |
+ |
+ MediaKeySystemAccess.prototype.getConfiguration = function getConfiguration() { return this._access.getConfiguration(); }; |
+ |
+ MediaKeySystemAccess.prototype.createMediaKeys = function createMediaKeys() { |
+ |
+ return this._access.createMediaKey().then( function( mediaKeys ) { return new MediaKeys( mediaKeys ); } ); |
+ |
+ }; |
+ |
+ HTMLMediaElement.prototype.setMediaKeys = function setMediaKeys( mediaKeys ) |
+ { |
+ if ( mediaKeys instanceof MediaKeys ) |
+ { |
+ return _setMediaKeys.call( this, mediaKeys._mediaKeys ); |
+ } |
+ else |
+ { |
+ return _setMediaKeys.call( this, mediaKeys ); |
+ } |
+ }; |
+ |
+ navigator.requestMediaKeySystemAccess = function requestMediaKeySystemAccess( keysystem, supportedConfigurations ) { |
+ |
+ if ( keysystem !== 'com.chromecast.playready' ) |
+ { |
+ return _requestMediaKeySystemAccess( keysystem, supportedConfigurations ); |
+ } |
+ |
+ return _requestMediaKeySystemAccess( keysystem, supportedConfigurations ) |
+ .then( function( access ) { return new MediaKeySystemAccess( access ); } ); |
+ }; |
+ } |
+})(); |