rx-player 3.27.0-dev.20220317 → 3.27.0-dev.2022032800

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/.eslintrc.js +0 -4
  2. package/CHANGELOG.md +5 -2
  3. package/VERSION +1 -1
  4. package/dist/_esm5.processed/compat/eme/close_session.js +1 -2
  5. package/dist/_esm5.processed/compat/eme/custom_key_system_access.d.ts +15 -0
  6. package/dist/_esm5.processed/compat/eme/custom_key_system_access.js +1 -17
  7. package/dist/_esm5.processed/compat/eme/custom_media_keys/ie11_media_keys.js +6 -7
  8. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +3 -4
  9. package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +20 -17
  10. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +29 -14
  11. package/dist/_esm5.processed/compat/eme/generate_key_request.d.ts +4 -6
  12. package/dist/_esm5.processed/compat/eme/generate_key_request.js +4 -6
  13. package/dist/_esm5.processed/compat/eme/load_session.js +1 -2
  14. package/dist/_esm5.processed/config.d.ts +0 -3
  15. package/dist/_esm5.processed/core/api/option_utils.d.ts +3 -2
  16. package/dist/_esm5.processed/core/api/option_utils.js +2 -1
  17. package/dist/_esm5.processed/core/api/public_api.js +3 -4
  18. package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +1 -2
  19. package/dist/_esm5.processed/core/decrypt/clear_on_stop.js +1 -2
  20. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +12 -5
  21. package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +1 -1
  22. package/dist/_esm5.processed/core/decrypt/create_session.d.ts +3 -1
  23. package/dist/_esm5.processed/core/decrypt/create_session.js +16 -7
  24. package/dist/_esm5.processed/core/decrypt/find_key_system.js +1 -2
  25. package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +1 -2
  26. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.d.ts +94 -1
  27. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +238 -98
  28. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +1 -3
  29. package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +2 -3
  30. package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +2 -1
  31. package/dist/_esm5.processed/core/stream/index.d.ts +1 -0
  32. package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.d.ts +15 -11
  33. package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.js +5 -2
  34. package/dist/_esm5.processed/core/stream/period/index.d.ts +1 -0
  35. package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +3 -11
  36. package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.js +4 -3
  37. package/dist/_esm5.processed/default_config.d.ts +0 -27
  38. package/dist/_esm5.processed/default_config.js +0 -27
  39. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +5 -6
  40. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/index.js +2 -3
  41. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +15 -0
  42. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +1 -2
  43. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +2 -3
  44. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.js +2 -3
  45. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.js +1 -2
  46. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.js +1 -2
  47. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.js +1 -2
  48. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.js +1 -2
  49. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +4 -5
  50. package/dist/_esm5.processed/public_types.d.ts +1 -0
  51. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +1 -2
  52. package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +4 -3
  53. package/dist/_esm5.processed/transports/dash/image_pipelines.js +57 -11
  54. package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -2
  55. package/dist/_esm5.processed/transports/dash/manifest_parser.js +2 -3
  56. package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +1 -1
  57. package/dist/_esm5.processed/transports/dash/segment_loader.js +3 -4
  58. package/dist/_esm5.processed/transports/dash/text_loader.js +1 -2
  59. package/dist/_esm5.processed/transports/local/segment_loader.js +2 -3
  60. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +2 -3
  61. package/dist/_esm5.processed/transports/smooth/pipelines.js +3 -4
  62. package/dist/_esm5.processed/transports/smooth/segment_loader.js +3 -4
  63. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -2
  64. package/dist/_esm5.processed/utils/cancellable_sleep.js +1 -2
  65. package/dist/_esm5.processed/utils/cast_to_observable.js +1 -3
  66. package/dist/_esm5.processed/utils/request/xhr.js +1 -2
  67. package/dist/rx-player.js +851 -937
  68. package/dist/rx-player.min.js +1 -1
  69. package/package.json +1 -2
  70. package/scripts/update-version +2 -2
  71. package/sonar-project.properties +1 -1
  72. package/src/compat/__tests__/play.test.ts +2 -4
  73. package/src/compat/eme/close_session.ts +1 -2
  74. package/src/compat/eme/custom_key_system_access.ts +1 -2
  75. package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +6 -7
  76. package/src/compat/eme/custom_media_keys/index.ts +3 -4
  77. package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +21 -18
  78. package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +28 -16
  79. package/src/compat/eme/generate_key_request.ts +4 -6
  80. package/src/compat/eme/load_session.ts +1 -2
  81. package/src/core/api/__tests__/option_utils.test.ts +12 -0
  82. package/src/core/api/option_utils.ts +5 -3
  83. package/src/core/api/public_api.ts +3 -4
  84. package/src/core/decrypt/attach_media_keys.ts +1 -2
  85. package/src/core/decrypt/clear_on_stop.ts +1 -2
  86. package/src/core/decrypt/content_decryptor.ts +16 -6
  87. package/src/core/decrypt/create_or_load_session.ts +4 -1
  88. package/src/core/decrypt/create_session.ts +25 -12
  89. package/src/core/decrypt/find_key_system.ts +1 -2
  90. package/src/core/decrypt/utils/clean_old_loaded_sessions.ts +1 -2
  91. package/src/core/decrypt/utils/loaded_sessions_store.ts +256 -105
  92. package/src/core/fetchers/manifest/manifest_fetcher.ts +1 -3
  93. package/src/core/fetchers/utils/try_urls_with_backoff.ts +2 -3
  94. package/src/core/init/initialize_media_source.ts +2 -1
  95. package/src/core/stream/index.ts +1 -0
  96. package/src/core/stream/period/get_adaptation_switch_strategy.ts +24 -14
  97. package/src/core/stream/period/index.ts +1 -0
  98. package/src/core/stream/period/period_stream.ts +5 -14
  99. package/src/core/stream/representation/append_segment_to_buffer.ts +17 -13
  100. package/src/default_config.ts +0 -30
  101. package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +5 -6
  102. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +5 -6
  103. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/decodingInfos.test.ts +2 -4
  104. package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +2 -3
  105. package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +1 -2
  106. package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +2 -3
  107. package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.ts +2 -3
  108. package/src/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.ts +1 -2
  109. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.ts +1 -2
  110. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.ts +1 -2
  111. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.ts +1 -2
  112. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +4 -5
  113. package/src/public_types.ts +1 -0
  114. package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +1 -2
  115. package/src/transports/dash/image_pipelines.ts +12 -14
  116. package/src/transports/dash/init_segment_loader.ts +1 -2
  117. package/src/transports/dash/manifest_parser.ts +2 -3
  118. package/src/transports/dash/segment_loader.ts +4 -5
  119. package/src/transports/dash/text_loader.ts +2 -3
  120. package/src/transports/local/segment_loader.ts +2 -3
  121. package/src/transports/metaplaylist/pipelines.ts +2 -3
  122. package/src/transports/smooth/pipelines.ts +4 -5
  123. package/src/transports/smooth/segment_loader.ts +5 -6
  124. package/src/transports/utils/call_custom_manifest_loader.ts +1 -2
  125. package/src/utils/cancellable_sleep.ts +1 -2
  126. package/src/utils/cast_to_observable.ts +0 -2
  127. package/src/utils/request/xhr.ts +1 -2
  128. package/tsconfig.json +0 -1
  129. package/tsconfig.modules.json +0 -1
  130. package/dist/_esm5.processed/utils/promise.d.ts +0 -17
  131. package/dist/_esm5.processed/utils/promise.js +0 -18
  132. package/src/typings/pinkie.d.ts +0 -19
  133. package/src/utils/__tests__/promise.test.ts +0 -23
  134. package/src/utils/promise.ts +0 -20
package/dist/rx-player.js CHANGED
@@ -195,9 +195,6 @@ __webpack_require__.d(__webpack_exports__, {
195
195
  "Y": function() { return /* binding */ setMediaKeys; }
196
196
  });
197
197
 
198
- // EXTERNAL MODULE: ./node_modules/pinkie/index.js
199
- var pinkie = __webpack_require__(8555);
200
- var pinkie_default = /*#__PURE__*/__webpack_require__.n(pinkie);
201
198
  // EXTERNAL MODULE: ./src/errors/media_error.ts
202
199
  var media_error = __webpack_require__(3714);
203
200
  // EXTERNAL MODULE: ./src/utils/assert.ts
@@ -210,34 +207,15 @@ var is_node = __webpack_require__(2203);
210
207
  var should_favour_custom_safari_EME = __webpack_require__(5059);
211
208
  // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/createClass.js
212
209
  var createClass = __webpack_require__(3144);
213
- // EXTERNAL MODULE: ./src/utils/promise.ts
214
- var promise = __webpack_require__(9589);
215
210
  ;// CONCATENATED MODULE: ./src/compat/eme/custom_key_system_access.ts
216
211
 
217
212
 
218
- /**
219
- * Copyright 2015 CANAL+ Group
220
- *
221
- * Licensed under the Apache License, Version 2.0 (the "License");
222
- * you may not use this file except in compliance with the License.
223
- * You may obtain a copy of the License at
224
- *
225
- * http://www.apache.org/licenses/LICENSE-2.0
226
- *
227
- * Unless required by applicable law or agreed to in writing, software
228
- * distributed under the License is distributed on an "AS IS" BASIS,
229
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
230
- * See the License for the specific language governing permissions and
231
- * limitations under the License.
232
- */
233
-
234
213
  /**
235
214
  * Simple implementation of the MediaKeySystemAccess EME API.
236
215
  *
237
216
  * All needed arguments are given to the constructor
238
217
  * @class CustomMediaKeySystemAccess
239
218
  */
240
-
241
219
  var CustomMediaKeySystemAccess = /*#__PURE__*/function () {
242
220
  /**
243
221
  * @param {string} _keyType - type of key system (e.g. "widevine" or
@@ -266,7 +244,7 @@ var CustomMediaKeySystemAccess = /*#__PURE__*/function () {
266
244
  _proto.createMediaKeys = function createMediaKeys() {
267
245
  var _this = this;
268
246
 
269
- return new promise/* default */.Z(function (res) {
247
+ return new Promise(function (res) {
270
248
  return res(_this._mediaKeys);
271
249
  });
272
250
  }
@@ -359,7 +337,6 @@ if (!is_node/* default */.Z) {
359
337
 
360
338
 
361
339
 
362
-
363
340
  var IE11MediaKeySession = /*#__PURE__*/function (_EventEmitter) {
364
341
  (0,inheritsLoose/* default */.Z)(IE11MediaKeySession, _EventEmitter);
365
342
 
@@ -371,12 +348,12 @@ var IE11MediaKeySession = /*#__PURE__*/function (_EventEmitter) {
371
348
  _this.keyStatuses = new Map();
372
349
  _this._mk = mk;
373
350
  _this._closeSession$ = new Subject/* Subject */.x();
374
- _this.closed = new promise/* default */.Z(function (resolve) {
351
+ _this.closed = new Promise(function (resolve) {
375
352
  _this._closeSession$.subscribe(resolve);
376
353
  });
377
354
 
378
355
  _this.update = function (license) {
379
- return new promise/* default */.Z(function (resolve, reject) {
356
+ return new Promise(function (resolve, reject) {
380
357
  if (_this._ss === undefined) {
381
358
  return reject("MediaKeySession not set.");
382
359
  }
@@ -397,7 +374,7 @@ var IE11MediaKeySession = /*#__PURE__*/function (_EventEmitter) {
397
374
  _proto.generateRequest = function generateRequest(_initDataType, initData) {
398
375
  var _this2 = this;
399
376
 
400
- return new promise/* default */.Z(function (resolve) {
377
+ return new Promise(function (resolve) {
401
378
  var initDataU8 = initData instanceof Uint8Array ? initData : initData instanceof ArrayBuffer ? new Uint8Array(initData) : new Uint8Array(initData.buffer);
402
379
  _this2._ss = _this2._mk.createSession("video/mp4", initDataU8);
403
380
  (0,merge/* merge */.T)(event_listeners/* onKeyMessage$ */.GJ(_this2._ss), event_listeners/* onKeyAdded$ */.GV(_this2._ss), event_listeners/* onKeyError$ */.Xe(_this2._ss)).pipe((0,takeUntil/* takeUntil */.R)(_this2._closeSession$)).subscribe(function (evt) {
@@ -410,7 +387,7 @@ var IE11MediaKeySession = /*#__PURE__*/function (_EventEmitter) {
410
387
  _proto.close = function close() {
411
388
  var _this3 = this;
412
389
 
413
- return new promise/* default */.Z(function (resolve) {
390
+ return new Promise(function (resolve) {
414
391
  if (_this3._ss != null) {
415
392
  _this3._ss.close();
416
393
 
@@ -426,11 +403,11 @@ var IE11MediaKeySession = /*#__PURE__*/function (_EventEmitter) {
426
403
  };
427
404
 
428
405
  _proto.load = function load() {
429
- return promise/* default.resolve */.Z.resolve(false);
406
+ return Promise.resolve(false);
430
407
  };
431
408
 
432
409
  _proto.remove = function remove() {
433
- return promise/* default.resolve */.Z.resolve();
410
+ return Promise.resolve();
434
411
  };
435
412
 
436
413
  (0,createClass/* default */.Z)(IE11MediaKeySession, [{
@@ -618,7 +595,6 @@ var string_parsing = __webpack_require__(3635);
618
595
 
619
596
 
620
597
 
621
-
622
598
  /**
623
599
  * Returns true if the given media element has old webkit methods
624
600
  * corresponding to the IOldWebkitHTMLMediaElement interface.
@@ -648,18 +624,25 @@ var OldWebkitMediaKeySession = /*#__PURE__*/function (_EventEmitter) {
648
624
  _this.sessionId = "";
649
625
  _this._closeSession = noop/* default */.Z; // Just here to make TypeScript happy
650
626
 
651
- _this.closed = new promise/* default */.Z(function (resolve) {
652
- _this._closeSession = resolve;
653
- });
654
627
  _this.keyStatuses = new Map();
655
628
  _this.expiration = NaN;
656
629
 
657
- _this._onSessionRelatedEvent = function (evt) {
630
+ var onSessionRelatedEvent = function onSessionRelatedEvent(evt) {
658
631
  _this.trigger(evt.type, evt);
659
632
  };
660
633
 
634
+ _this.closed = new Promise(function (resolve) {
635
+ _this._closeSession = function () {
636
+ ["keymessage", "message", "keyadded", "ready", "keyerror", "error"].forEach(function (evt) {
637
+ mediaElement.removeEventListener(evt, onSessionRelatedEvent);
638
+ mediaElement.removeEventListener("webkit" + evt, onSessionRelatedEvent);
639
+ });
640
+ resolve();
641
+ };
642
+ });
661
643
  ["keymessage", "message", "keyadded", "ready", "keyerror", "error"].forEach(function (evt) {
662
- return mediaElement.addEventListener(evt, _this._onSessionRelatedEvent);
644
+ mediaElement.addEventListener(evt, onSessionRelatedEvent);
645
+ mediaElement.addEventListener("webkit" + evt, onSessionRelatedEvent);
663
646
  });
664
647
  return _this;
665
648
  }
@@ -669,7 +652,7 @@ var OldWebkitMediaKeySession = /*#__PURE__*/function (_EventEmitter) {
669
652
  _proto.update = function update(license) {
670
653
  var _this2 = this;
671
654
 
672
- return new promise/* default */.Z(function (resolve, reject) {
655
+ return new Promise(function (resolve, reject) {
673
656
  try {
674
657
  if (_this2._key.indexOf("clearkey") >= 0) {
675
658
  var licenseTypedArray = license instanceof ArrayBuffer ? new Uint8Array(license) : license;
@@ -705,7 +688,7 @@ var OldWebkitMediaKeySession = /*#__PURE__*/function (_EventEmitter) {
705
688
  _proto.generateRequest = function generateRequest(_initDataType, initData) {
706
689
  var _this3 = this;
707
690
 
708
- return new promise/* default */.Z(function (resolve) {
691
+ return new Promise(function (resolve) {
709
692
  _this3._vid.webkitGenerateKeyRequest(_this3._key, initData);
710
693
 
711
694
  resolve();
@@ -715,9 +698,7 @@ var OldWebkitMediaKeySession = /*#__PURE__*/function (_EventEmitter) {
715
698
  _proto.close = function close() {
716
699
  var _this4 = this;
717
700
 
718
- return new promise/* default */.Z(function (resolve) {
719
- _this4._unbindSession();
720
-
701
+ return new Promise(function (resolve) {
721
702
  _this4._closeSession();
722
703
 
723
704
  resolve();
@@ -732,19 +713,11 @@ var OldWebkitMediaKeySession = /*#__PURE__*/function (_EventEmitter) {
732
713
 
733
714
  _proto.load = function load() {
734
715
  // Not implemented. Always return false as in "no session with that id".
735
- return promise/* default.resolve */.Z.resolve(false);
716
+ return Promise.resolve(false);
736
717
  };
737
718
 
738
719
  _proto.remove = function remove() {
739
- return promise/* default.resolve */.Z.resolve();
740
- };
741
-
742
- _proto._unbindSession = function _unbindSession() {
743
- var _this5 = this;
744
-
745
- ["keymessage", "message", "keyadded", "ready", "keyerror", "error"].forEach(function (evt) {
746
- return _this5._vid.removeEventListener(evt, _this5._onSessionRelatedEvent);
747
- });
720
+ return Promise.resolve();
748
721
  };
749
722
 
750
723
  return OldWebkitMediaKeySession;
@@ -906,7 +879,6 @@ var webkit_media_keys_constructor = __webpack_require__(158);
906
879
 
907
880
 
908
881
 
909
-
910
882
  /**
911
883
  * Check if keyType is for fairplay DRM
912
884
  * @param {string} keyType
@@ -961,16 +933,11 @@ var WebkitMediaKeySession = /*#__PURE__*/function (_EventEmitter) {
961
933
  _this._unbindSession = noop/* default */.Z;
962
934
  _this._closeSession = noop/* default */.Z; // Just here to make TypeScript happy
963
935
 
964
- _this.closed = new promise/* default */.Z(function (resolve) {
936
+ _this.closed = new Promise(function (resolve) {
965
937
  _this._closeSession = resolve;
966
938
  });
967
939
  _this.keyStatuses = new Map();
968
940
  _this.expiration = NaN;
969
-
970
- _this._onEvent = function (evt) {
971
- _this.trigger(evt.type, evt);
972
- };
973
-
974
941
  return _this;
975
942
  }
976
943
 
@@ -979,16 +946,27 @@ var WebkitMediaKeySession = /*#__PURE__*/function (_EventEmitter) {
979
946
  _proto.update = function update(license) {
980
947
  var _this2 = this;
981
948
 
982
- return new promise/* default */.Z(function (resolve, reject) {
949
+ return new Promise(function (resolve, reject) {
983
950
  /* eslint-disable @typescript-eslint/no-unsafe-member-access */
984
951
  if (_this2._nativeSession === undefined || _this2._nativeSession.update === undefined || typeof _this2._nativeSession.update !== "function") {
985
952
  return reject("Unavailable WebKit key session.");
986
953
  }
987
954
 
988
955
  try {
956
+ var uInt8Arraylicense;
957
+
958
+ if (license instanceof ArrayBuffer) {
959
+ uInt8Arraylicense = new Uint8Array(license);
960
+ } else if (license instanceof Uint8Array) {
961
+ uInt8Arraylicense = license;
962
+ } else {
963
+ uInt8Arraylicense = new Uint8Array(license.buffer);
964
+ }
989
965
  /* eslint-disable @typescript-eslint/no-unsafe-member-access */
990
966
  // eslint-disable-next-line @typescript-eslint/no-unsafe-call
991
- resolve(_this2._nativeSession.update(license));
967
+
968
+
969
+ resolve(_this2._nativeSession.update(uInt8Arraylicense));
992
970
  /* eslint-enable @typescript-eslint/no-unsafe-member-access */
993
971
  } catch (err) {
994
972
  reject(err);
@@ -1001,7 +979,7 @@ var WebkitMediaKeySession = /*#__PURE__*/function (_EventEmitter) {
1001
979
  _proto.generateRequest = function generateRequest(_initDataType, initData) {
1002
980
  var _this3 = this;
1003
981
 
1004
- return new promise/* default */.Z(function (resolve) {
982
+ return new Promise(function (resolve) {
1005
983
  var _a;
1006
984
 
1007
985
  var elt = _this3._videoElement;
@@ -1039,7 +1017,7 @@ var WebkitMediaKeySession = /*#__PURE__*/function (_EventEmitter) {
1039
1017
  _proto.close = function close() {
1040
1018
  var _this4 = this;
1041
1019
 
1042
- return new promise/* default */.Z(function (resolve, reject) {
1020
+ return new Promise(function (resolve, reject) {
1043
1021
  _this4._unbindSession();
1044
1022
 
1045
1023
  _this4._closeSession();
@@ -1060,11 +1038,11 @@ var WebkitMediaKeySession = /*#__PURE__*/function (_EventEmitter) {
1060
1038
  };
1061
1039
 
1062
1040
  _proto.load = function load() {
1063
- return promise/* default.resolve */.Z.resolve(false);
1041
+ return Promise.resolve(false);
1064
1042
  };
1065
1043
 
1066
1044
  _proto.remove = function remove() {
1067
- return promise/* default.resolve */.Z.resolve();
1045
+ return Promise.resolve();
1068
1046
  };
1069
1047
 
1070
1048
  _proto._listenEvent = function _listenEvent(session) {
@@ -1072,6 +1050,10 @@ var WebkitMediaKeySession = /*#__PURE__*/function (_EventEmitter) {
1072
1050
 
1073
1051
  this._unbindSession(); // If previous session was linked
1074
1052
 
1053
+
1054
+ var onEvent = function onEvent(evt) {
1055
+ _this5.trigger(evt.type, evt);
1056
+ };
1075
1057
  /* eslint-disable @typescript-eslint/no-unsafe-call */
1076
1058
 
1077
1059
  /* eslint-disable @typescript-eslint/no-unsafe-member-access */
@@ -1080,12 +1062,14 @@ var WebkitMediaKeySession = /*#__PURE__*/function (_EventEmitter) {
1080
1062
 
1081
1063
 
1082
1064
  ["keymessage", "message", "keyadded", "ready", "keyerror", "error"].forEach(function (evt) {
1083
- return session.addEventListener(evt, _this5._onEvent);
1065
+ session.addEventListener(evt, onEvent);
1066
+ session.addEventListener("webkit" + evt, onEvent);
1084
1067
  });
1085
1068
 
1086
1069
  this._unbindSession = function () {
1087
1070
  ["keymessage", "message", "keyadded", "ready", "keyerror", "error"].forEach(function (evt) {
1088
- return session.removeEventListener(evt, _this5._onEvent);
1071
+ session.removeEventListener(evt, onEvent);
1072
+ session.removeEventListener("webkit" + evt, onEvent);
1089
1073
  });
1090
1074
  };
1091
1075
  /* eslint-disable @typescript-eslint/no-unsafe-return */
@@ -1149,7 +1133,7 @@ var WebKitCustomMediaKeys = /*#__PURE__*/function () {
1149
1133
 
1150
1134
  _proto2.setServerCertificate = function setServerCertificate(serverCertificate) {
1151
1135
  this._serverCertificate = serverCertificate;
1152
- return promise/* default.resolve */.Z.resolve();
1136
+ return Promise.resolve();
1153
1137
  };
1154
1138
 
1155
1139
  return WebKitCustomMediaKeys;
@@ -1211,7 +1195,6 @@ function getWebKitMediaKeysCallbacks() {
1211
1195
 
1212
1196
 
1213
1197
 
1214
-
1215
1198
  var requestMediaKeySystemAccess = null;
1216
1199
  /**
1217
1200
  * Set the given MediaKeys on the given HTMLMediaElement.
@@ -1317,7 +1300,7 @@ if (is_node/* default */.Z || navigator.requestMediaKeySystemAccess != null && !
1317
1300
 
1318
1301
  requestMediaKeySystemAccess = function requestMediaKeySystemAccess(keyType, keySystemConfigurations) {
1319
1302
  if (!isTypeSupported(keyType)) {
1320
- return pinkie_default().reject(new Error("Unsupported key type"));
1303
+ return Promise.reject(new Error("Unsupported key type"));
1321
1304
  }
1322
1305
 
1323
1306
  for (var i = 0; i < keySystemConfigurations.length; i++) {
@@ -1350,11 +1333,11 @@ if (is_node/* default */.Z || navigator.requestMediaKeySystemAccess != null && !
1350
1333
 
1351
1334
 
1352
1335
  var customMediaKeys = createCustomMediaKeys(keyType);
1353
- return pinkie_default().resolve(new CustomMediaKeySystemAccess(keyType, customMediaKeys, keySystemConfigurationResponse));
1336
+ return Promise.resolve(new CustomMediaKeySystemAccess(keyType, customMediaKeys, keySystemConfigurationResponse));
1354
1337
  }
1355
1338
  }
1356
1339
 
1357
- return pinkie_default().reject(new Error("Unsupported configuration"));
1340
+ return Promise.reject(new Error("Unsupported configuration"));
1358
1341
  };
1359
1342
  }
1360
1343
 
@@ -3242,36 +3225,6 @@ var DEFAULT_CONFIG = {
3242
3225
  */
3243
3226
  EME_MAX_STORED_PERSISTENT_SESSION_INFORMATION: 1000,
3244
3227
 
3245
- /**
3246
- * Attempts to closing a MediaKeySession can fail, most likely because the
3247
- * MediaKeySession was not initialized yet.
3248
- * When we consider that we're in one of these case, we will retry to close it.
3249
- *
3250
- * To avoid going into an infinite loop of retry, this number indicates a
3251
- * maximum number of attemps we're going to make (`0` meaning no retry at all,
3252
- * `1` only one retry and so on).
3253
- */
3254
- EME_SESSION_CLOSING_MAX_RETRY: 5,
3255
-
3256
- /**
3257
- * When closing a MediaKeySession failed due to the reasons explained for the
3258
- * `EME_SESSION_CLOSING_MAX_RETRY` config property, we may (among other
3259
- * triggers) choose to wait a delay raising exponentially at each retry before
3260
- * that new attempt.
3261
- * This value indicates the initial value for this delay, in milliseconds.
3262
- */
3263
- EME_SESSION_CLOSING_INITIAL_DELAY: 100,
3264
-
3265
- /**
3266
- * When closing a MediaKeySession failed due to the reasons explained for the
3267
- * `EME_SESSION_CLOSING_MAX_RETRY` config property, we may (among other
3268
- * triggers) choose to wait a delay raising exponentially at each retry before
3269
- * that new attempt.
3270
- * This value indicates the maximum possible value for this delay, in
3271
- * milliseconds.
3272
- */
3273
- EME_SESSION_CLOSING_MAX_DELAY: 1000,
3274
-
3275
3228
  /**
3276
3229
  * After loading a persistent MediaKeySession, the RxPlayer needs to ensure
3277
3230
  * that its keys still allow to decrypt a content.
@@ -4579,9 +4532,6 @@ var inheritsLoose = __webpack_require__(4578);
4579
4532
  // EXTERNAL MODULE: ./node_modules/@babel/runtime/regenerator/index.js
4580
4533
  var regenerator = __webpack_require__(7757);
4581
4534
  var regenerator_default = /*#__PURE__*/__webpack_require__.n(regenerator);
4582
- // EXTERNAL MODULE: ./node_modules/pinkie/index.js
4583
- var pinkie = __webpack_require__(8555);
4584
- var pinkie_default = /*#__PURE__*/__webpack_require__.n(pinkie);
4585
4535
  // EXTERNAL MODULE: ./src/log.ts + 1 modules
4586
4536
  var log = __webpack_require__(3887);
4587
4537
  // EXTERNAL MODULE: ./src/parsers/containers/isobmff/take_pssh_out.ts + 1 modules
@@ -4751,146 +4701,6 @@ function getInitData(encryptedEvent) {
4751
4701
  values: values
4752
4702
  };
4753
4703
  }
4754
- // EXTERNAL MODULE: ./src/parsers/containers/isobmff/get_box.ts
4755
- var get_box = __webpack_require__(2297);
4756
- ;// CONCATENATED MODULE: ./src/compat/eme/generate_key_request.ts
4757
- /**
4758
- * Copyright 2015 CANAL+ Group
4759
- *
4760
- * Licensed under the Apache License, Version 2.0 (the "License");
4761
- * you may not use this file except in compliance with the License.
4762
- * You may obtain a copy of the License at
4763
- *
4764
- * http://www.apache.org/licenses/LICENSE-2.0
4765
- *
4766
- * Unless required by applicable law or agreed to in writing, software
4767
- * distributed under the License is distributed on an "AS IS" BASIS,
4768
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4769
- * See the License for the specific language governing permissions and
4770
- * limitations under the License.
4771
- */
4772
-
4773
-
4774
-
4775
-
4776
- /**
4777
- * Modify "initialization data" sent to a `generateKeyRequest` EME call to
4778
- * improve the player's browser compatibility:
4779
- *
4780
- * 1. some browsers/CDM have problems when the CENC PSSH box is the first
4781
- * encountered PSSH box in the initialization data (for the moment just
4782
- * Edge was noted with this behavior).
4783
- * We found however that it works on every browser when the CENC pssh
4784
- * box(es) is/are the last box(es) encountered.
4785
- *
4786
- * To that end, we move CENC pssh boxes at the end of the initialization
4787
- * data in this function.
4788
- *
4789
- * 2. Some poorly encoded/packaged contents communicate both a CENC with a
4790
- * pssh version of 0 and one with a version of 1. We found out that this is
4791
- * not always well handled on some devices/browsers (on Edge and some other
4792
- * embedded devices that shall remain nameless for now!).
4793
- *
4794
- * Here this function will filter out CENC pssh with a version different to
4795
- * 1 when one(s) with a version of 1 is/are already present.
4796
- *
4797
- * If the initData is unrecognized or if a CENC PSSH is not found, this function
4798
- * throws.
4799
- * @param {Uint8Array} initData - Initialization data you want to patch
4800
- * @returns {Uint8Array} - Initialization data, patched
4801
- */
4802
-
4803
- function patchInitData(initData) {
4804
- log/* default.info */.Z.info("Compat: Trying to move CENC PSSH from init data at the end of it.");
4805
- var foundCencV1 = false;
4806
- var concatenatedCencs = new Uint8Array();
4807
- var resInitData = new Uint8Array();
4808
- var offset = 0;
4809
-
4810
- while (offset < initData.length) {
4811
- if (initData.length < offset + 8 || (0,byte_parsing/* be4toi */.pX)(initData, offset + 4) !== PSSH_TO_INTEGER) {
4812
- log/* default.warn */.Z.warn("Compat: unrecognized initialization data. Cannot patch it.");
4813
- throw new Error("Compat: unrecognized initialization data. Cannot patch it.");
4814
- }
4815
-
4816
- var len = (0,byte_parsing/* be4toi */.pX)(new Uint8Array(initData), offset);
4817
-
4818
- if (offset + len > initData.length) {
4819
- log/* default.warn */.Z.warn("Compat: unrecognized initialization data. Cannot patch it.");
4820
- throw new Error("Compat: unrecognized initialization data. Cannot patch it.");
4821
- }
4822
-
4823
- var currentPSSH = initData.subarray(offset, offset + len); // yep
4824
-
4825
- if (initData[offset + 12] === 0x10 && initData[offset + 13] === 0x77 && initData[offset + 14] === 0xEF && initData[offset + 15] === 0xEC && initData[offset + 16] === 0xC0 && initData[offset + 17] === 0xB2 && initData[offset + 18] === 0x4D && initData[offset + 19] === 0x02 && initData[offset + 20] === 0xAC && initData[offset + 21] === 0xE3 && initData[offset + 22] === 0x3C && initData[offset + 23] === 0x1E && initData[offset + 24] === 0x52 && initData[offset + 25] === 0xE2 && initData[offset + 26] === 0xFB && initData[offset + 27] === 0x4B) {
4826
- var cencOffsets = (0,get_box/* getNextBoxOffsets */.Xj)(currentPSSH);
4827
- var version = cencOffsets === null ? undefined : currentPSSH[cencOffsets[1]];
4828
- log/* default.info */.Z.info("Compat: CENC PSSH found with version", version);
4829
-
4830
- if (version === undefined) {
4831
- log/* default.warn */.Z.warn("Compat: could not read version of CENC PSSH");
4832
- } else if (foundCencV1 === (version === 1)) {
4833
- // Either `concatenatedCencs` only contains v1 or does not contain any
4834
- concatenatedCencs = (0,byte_parsing/* concat */.zo)(concatenatedCencs, currentPSSH);
4835
- } else if (version === 1) {
4836
- log/* default.warn */.Z.warn("Compat: cenc version 1 encountered, " + "removing every other cenc pssh box.");
4837
- concatenatedCencs = currentPSSH;
4838
- foundCencV1 = true;
4839
- } else {
4840
- log/* default.warn */.Z.warn("Compat: filtering out cenc pssh box with wrong version", version);
4841
- }
4842
- } else {
4843
- resInitData = (0,byte_parsing/* concat */.zo)(resInitData, currentPSSH);
4844
- }
4845
-
4846
- offset += len;
4847
- }
4848
-
4849
- if (offset !== initData.length) {
4850
- log/* default.warn */.Z.warn("Compat: unrecognized initialization data. Cannot patch it.");
4851
- throw new Error("Compat: unrecognized initialization data. Cannot patch it.");
4852
- }
4853
-
4854
- return (0,byte_parsing/* concat */.zo)(resInitData, concatenatedCencs);
4855
- }
4856
- /**
4857
- * Generate a request from session.
4858
- * @param {MediaKeySession} session - MediaKeySession on which the request will
4859
- * be done.
4860
- * @param {Uint8Array} initData - Initialization data given e.g. by the
4861
- * "encrypted" event for the corresponding request.
4862
- * @param {string} initDataType - Initialization data type given e.g. by the
4863
- * "encrypted" event for the corresponding request.
4864
- * @param {string} sessionType - Type of session you want to generate. Consult
4865
- * EME Specification for more information on session types.
4866
- * @returns {Promise} - Emit when done. Errors if fails.
4867
- */
4868
-
4869
- function generateKeyRequest(session, initializationDataType, initializationData) {
4870
- log/* default.debug */.Z.debug("Compat: Calling generateRequest on the MediaKeySession");
4871
- var patchedInit;
4872
-
4873
- try {
4874
- patchedInit = patchInitData(initializationData);
4875
- } catch (_e) {
4876
- patchedInit = initializationData;
4877
- }
4878
-
4879
- var initDataType = initializationDataType !== null && initializationDataType !== void 0 ? initializationDataType : "";
4880
- return session.generateRequest(initDataType, patchedInit)["catch"](function (error) {
4881
- if (initDataType !== "" || !(error instanceof TypeError)) {
4882
- throw error;
4883
- } // On newer EME versions of the specification, the initialization data
4884
- // type given to generateRequest cannot be an empty string (it returns
4885
- // a rejected promise with a TypeError in that case).
4886
- // Retry with a default "cenc" value for initialization data type if
4887
- // we're in that condition.
4888
-
4889
-
4890
- log/* default.warn */.Z.warn("Compat: error while calling `generateRequest` with an empty " + "initialization data type. Retrying with a default \"cenc\" value.", error);
4891
- return session.generateRequest("cenc", patchedInit);
4892
- });
4893
- }
4894
4704
  // EXTERNAL MODULE: ./src/compat/event_listeners.ts + 6 modules
4895
4705
  var event_listeners = __webpack_require__(4804);
4896
4706
  // EXTERNAL MODULE: ./src/config.ts + 2 modules
@@ -4911,8 +4721,6 @@ var is_null_or_undefined = __webpack_require__(1946);
4911
4721
  var task_canceller = __webpack_require__(288);
4912
4722
  // EXTERNAL MODULE: ./src/compat/eme/custom_media_keys/index.ts + 7 modules
4913
4723
  var custom_media_keys = __webpack_require__(6139);
4914
- // EXTERNAL MODULE: ./src/utils/promise.ts
4915
- var promise = __webpack_require__(9589);
4916
4724
  // EXTERNAL MODULE: ./src/core/decrypt/utils/media_keys_infos_store.ts
4917
4725
  var media_keys_infos_store = __webpack_require__(770);
4918
4726
  ;// CONCATENATED MODULE: ./src/core/decrypt/attach_media_keys.ts
@@ -4937,7 +4745,6 @@ var media_keys_infos_store = __webpack_require__(770);
4937
4745
 
4938
4746
 
4939
4747
 
4940
-
4941
4748
  /**
4942
4749
  * Dispose of the MediaKeys instance attached to the given media element, if
4943
4750
  * one.
@@ -4970,7 +4777,7 @@ function _attachMediaKeys() {
4970
4777
  case 0:
4971
4778
  keySystemOptions = _ref.keySystemOptions, loadedSessionsStore = _ref.loadedSessionsStore, mediaKeySystemAccess = _ref.mediaKeySystemAccess, mediaKeys = _ref.mediaKeys;
4972
4779
  previousState = media_keys_infos_store/* default.getState */.Z.getState(mediaElement);
4973
- closeAllSessions = previousState !== null && previousState.loadedSessionsStore !== loadedSessionsStore ? previousState.loadedSessionsStore.closeAllSessions() : promise/* default.resolve */.Z.resolve();
4780
+ closeAllSessions = previousState !== null && previousState.loadedSessionsStore !== loadedSessionsStore ? previousState.loadedSessionsStore.closeAllSessions() : Promise.resolve();
4974
4781
  _context.next = 5;
4975
4782
  return closeAllSessions;
4976
4783
 
@@ -5011,93 +4818,6 @@ function _attachMediaKeys() {
5011
4818
  }));
5012
4819
  return _attachMediaKeys.apply(this, arguments);
5013
4820
  }
5014
- ;// CONCATENATED MODULE: ./src/compat/eme/load_session.ts
5015
-
5016
-
5017
-
5018
- /**
5019
- * Copyright 2015 CANAL+ Group
5020
- *
5021
- * Licensed under the Apache License, Version 2.0 (the "License");
5022
- * you may not use this file except in compliance with the License.
5023
- * You may obtain a copy of the License at
5024
- *
5025
- * http://www.apache.org/licenses/LICENSE-2.0
5026
- *
5027
- * Unless required by applicable law or agreed to in writing, software
5028
- * distributed under the License is distributed on an "AS IS" BASIS,
5029
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5030
- * See the License for the specific language governing permissions and
5031
- * limitations under the License.
5032
- */
5033
-
5034
-
5035
- var EME_WAITING_DELAY_LOADED_SESSION_EMPTY_KEYSTATUSES = 100;
5036
- /**
5037
- * Load a persistent session, based on its `sessionId`, on the given
5038
- * MediaKeySession.
5039
- *
5040
- * Returns an Observable which emits:
5041
- * - true if the persistent MediaKeySession was found and loaded
5042
- * - false if no persistent MediaKeySession was found with that `sessionId`.
5043
- * Then completes.
5044
- *
5045
- * The Observable throws if anything goes wrong in the process.
5046
- * @param {MediaKeySession} session
5047
- * @param {string} sessionId
5048
- * @returns {Observable}
5049
- */
5050
-
5051
- function loadSession(_x, _x2) {
5052
- return _loadSession.apply(this, arguments);
5053
- }
5054
-
5055
- function _loadSession() {
5056
- _loadSession = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee(session, sessionId) {
5057
- var isLoaded;
5058
- return regenerator_default().wrap(function _callee$(_context) {
5059
- while (1) {
5060
- switch (_context.prev = _context.next) {
5061
- case 0:
5062
- log/* default.info */.Z.info("Compat/DRM: Load persisted session", sessionId);
5063
- _context.next = 3;
5064
- return session.load(sessionId);
5065
-
5066
- case 3:
5067
- isLoaded = _context.sent;
5068
-
5069
- if (!(!isLoaded || session.keyStatuses.size > 0)) {
5070
- _context.next = 6;
5071
- break;
5072
- }
5073
-
5074
- return _context.abrupt("return", isLoaded);
5075
-
5076
- case 6:
5077
- return _context.abrupt("return", new (pinkie_default())(function (resolve) {
5078
- session.addEventListener("keystatuseschange", resolveWithLoadedStatus);
5079
- var timeout = setTimeout(resolveWithLoadedStatus, EME_WAITING_DELAY_LOADED_SESSION_EMPTY_KEYSTATUSES);
5080
-
5081
- function resolveWithLoadedStatus() {
5082
- cleanUp();
5083
- resolve(isLoaded);
5084
- }
5085
-
5086
- function cleanUp() {
5087
- clearTimeout(timeout);
5088
- session.removeEventListener("keystatuseschange", resolveWithLoadedStatus);
5089
- }
5090
- }));
5091
-
5092
- case 7:
5093
- case "end":
5094
- return _context.stop();
5095
- }
5096
- }
5097
- }, _callee);
5098
- }));
5099
- return _loadSession.apply(this, arguments);
5100
- }
5101
4821
  ;// CONCATENATED MODULE: ./src/core/decrypt/utils/is_session_usable.ts
5102
4822
  /**
5103
4823
  * Copyright 2015 CANAL+ Group
@@ -5174,8 +4894,6 @@ function isSessionUsable(loadedSession) {
5174
4894
  */
5175
4895
 
5176
4896
 
5177
-
5178
-
5179
4897
  /**
5180
4898
  * Create a new Session or load a persistent one on the given MediaKeys,
5181
4899
  * according to wanted settings and what is currently stored.
@@ -5189,10 +4907,11 @@ function isSessionUsable(loadedSession) {
5189
4907
  * @param {Object} stores
5190
4908
  * @param {Object} initData
5191
4909
  * @param {string} wantedSessionType
4910
+ * @param {Object} cancelSignal
5192
4911
  * @returns {Promise}
5193
4912
  */
5194
4913
 
5195
- function createSession(stores, initData, wantedSessionType) {
4914
+ function createSession(stores, initData, wantedSessionType, cancelSignal) {
5196
4915
  var loadedSessionsStore = stores.loadedSessionsStore,
5197
4916
  persistentSessionsStore = stores.persistentSessionsStore;
5198
4917
 
@@ -5203,7 +4922,7 @@ function createSession(stores, initData, wantedSessionType) {
5203
4922
  return createTemporarySession(loadedSessionsStore, initData);
5204
4923
  }
5205
4924
 
5206
- return createAndTryToRetrievePersistentSession(loadedSessionsStore, persistentSessionsStore, initData);
4925
+ return createAndTryToRetrievePersistentSession(loadedSessionsStore, persistentSessionsStore, initData, cancelSignal);
5207
4926
  }
5208
4927
  /**
5209
4928
  * Create a new temporary MediaKeySession linked to the given initData and
@@ -5216,7 +4935,7 @@ function createSession(stores, initData, wantedSessionType) {
5216
4935
  function createTemporarySession(loadedSessionsStore, initData) {
5217
4936
  log/* default.info */.Z.info("DRM: Creating a new temporary session");
5218
4937
  var entry = loadedSessionsStore.createSession(initData, "temporary");
5219
- return pinkie_default().resolve({
4938
+ return Promise.resolve({
5220
4939
  type: "created-session"
5221
4940
  /* Created */
5222
4941
  ,
@@ -5229,16 +4948,17 @@ function createTemporarySession(loadedSessionsStore, initData) {
5229
4948
  * @param {Object} loadedSessionsStore
5230
4949
  * @param {Object} persistentSessionsStore
5231
4950
  * @param {Object} initData
4951
+ * @param {Object} cancelSignal
5232
4952
  * @returns {Promise}
5233
4953
  */
5234
4954
 
5235
4955
 
5236
- function createAndTryToRetrievePersistentSession(_x, _x2, _x3) {
4956
+ function createAndTryToRetrievePersistentSession(_x, _x2, _x3, _x4) {
5237
4957
  return _createAndTryToRetrievePersistentSession.apply(this, arguments);
5238
4958
  }
5239
4959
 
5240
4960
  function _createAndTryToRetrievePersistentSession() {
5241
- _createAndTryToRetrievePersistentSession = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee2(loadedSessionsStore, persistentSessionsStore, initData) {
4961
+ _createAndTryToRetrievePersistentSession = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee2(loadedSessionsStore, persistentSessionsStore, initData, cancelSignal) {
5242
4962
  var entry, storedEntry, hasLoadedSession, recreatePersistentSession, _recreatePersistentSession;
5243
4963
 
5244
4964
  return regenerator_default().wrap(function _callee2$(_context2) {
@@ -5252,6 +4972,14 @@ function _createAndTryToRetrievePersistentSession() {
5252
4972
  while (1) {
5253
4973
  switch (_context.prev = _context.next) {
5254
4974
  case 0:
4975
+ if (!(cancelSignal.cancellationError !== null)) {
4976
+ _context.next = 2;
4977
+ break;
4978
+ }
4979
+
4980
+ throw cancelSignal.cancellationError;
4981
+
4982
+ case 2:
5255
4983
  log/* default.info */.Z.info("DRM: Removing previous persistent session.");
5256
4984
  persistentEntry = persistentSessionsStore.get(initData);
5257
4985
 
@@ -5259,10 +4987,18 @@ function _createAndTryToRetrievePersistentSession() {
5259
4987
  persistentSessionsStore["delete"](persistentEntry.sessionId);
5260
4988
  }
5261
4989
 
5262
- _context.next = 5;
4990
+ _context.next = 7;
5263
4991
  return loadedSessionsStore.closeSession(entry.mediaKeySession);
5264
4992
 
5265
- case 5:
4993
+ case 7:
4994
+ if (!(cancelSignal.cancellationError !== null)) {
4995
+ _context.next = 9;
4996
+ break;
4997
+ }
4998
+
4999
+ throw cancelSignal.cancellationError;
5000
+
5001
+ case 9:
5266
5002
  newEntry = loadedSessionsStore.createSession(initData, "persistent-license");
5267
5003
  return _context.abrupt("return", {
5268
5004
  type: "created-session"
@@ -5271,7 +5007,7 @@ function _createAndTryToRetrievePersistentSession() {
5271
5007
  value: newEntry
5272
5008
  });
5273
5009
 
5274
- case 7:
5010
+ case 11:
5275
5011
  case "end":
5276
5012
  return _context.stop();
5277
5013
  }
@@ -5285,12 +5021,20 @@ function _createAndTryToRetrievePersistentSession() {
5285
5021
  return _recreatePersistentSession.apply(this, arguments);
5286
5022
  };
5287
5023
 
5024
+ if (!(cancelSignal.cancellationError !== null)) {
5025
+ _context2.next = 4;
5026
+ break;
5027
+ }
5028
+
5029
+ throw cancelSignal.cancellationError;
5030
+
5031
+ case 4:
5288
5032
  log/* default.info */.Z.info("DRM: Creating persistent MediaKeySession");
5289
5033
  entry = loadedSessionsStore.createSession(initData, "persistent-license");
5290
5034
  storedEntry = persistentSessionsStore.getAndReuse(initData);
5291
5035
 
5292
5036
  if (!(storedEntry === null)) {
5293
- _context2.next = 7;
5037
+ _context2.next = 9;
5294
5038
  break;
5295
5039
  }
5296
5040
 
@@ -5301,16 +5045,16 @@ function _createAndTryToRetrievePersistentSession() {
5301
5045
  value: entry
5302
5046
  });
5303
5047
 
5304
- case 7:
5305
- _context2.prev = 7;
5306
- _context2.next = 10;
5307
- return loadSession(entry.mediaKeySession, storedEntry.sessionId);
5048
+ case 9:
5049
+ _context2.prev = 9;
5050
+ _context2.next = 12;
5051
+ return loadedSessionsStore.loadPersistentSession(entry.mediaKeySession, storedEntry.sessionId);
5308
5052
 
5309
- case 10:
5053
+ case 12:
5310
5054
  hasLoadedSession = _context2.sent;
5311
5055
 
5312
5056
  if (hasLoadedSession) {
5313
- _context2.next = 15;
5057
+ _context2.next = 17;
5314
5058
  break;
5315
5059
  }
5316
5060
 
@@ -5323,9 +5067,9 @@ function _createAndTryToRetrievePersistentSession() {
5323
5067
  value: entry
5324
5068
  });
5325
5069
 
5326
- case 15:
5070
+ case 17:
5327
5071
  if (!(hasLoadedSession && isSessionUsable(entry.mediaKeySession))) {
5328
- _context2.next = 19;
5072
+ _context2.next = 21;
5329
5073
  break;
5330
5074
  }
5331
5075
 
@@ -5338,23 +5082,23 @@ function _createAndTryToRetrievePersistentSession() {
5338
5082
  value: entry
5339
5083
  });
5340
5084
 
5341
- case 19:
5085
+ case 21:
5342
5086
  // Unusable persistent session: recreate a new session from scratch.
5343
5087
  log/* default.warn */.Z.warn("DRM: Previous persistent session not usable anymore.");
5344
5088
  return _context2.abrupt("return", recreatePersistentSession());
5345
5089
 
5346
- case 23:
5347
- _context2.prev = 23;
5348
- _context2.t0 = _context2["catch"](7);
5090
+ case 25:
5091
+ _context2.prev = 25;
5092
+ _context2.t0 = _context2["catch"](9);
5349
5093
  log/* default.warn */.Z.warn("DRM: Unable to load persistent session: " + (_context2.t0 instanceof Error ? _context2.t0.toString() : "Unknown Error"));
5350
5094
  return _context2.abrupt("return", recreatePersistentSession());
5351
5095
 
5352
- case 27:
5096
+ case 29:
5353
5097
  case "end":
5354
5098
  return _context2.stop();
5355
5099
  }
5356
5100
  }
5357
- }, _callee2, null, [[7, 23]]);
5101
+ }, _callee2, null, [[9, 25]]);
5358
5102
  }));
5359
5103
  return _createAndTryToRetrievePersistentSession.apply(this, arguments);
5360
5104
  }
@@ -5387,7 +5131,6 @@ function _createAndTryToRetrievePersistentSession() {
5387
5131
  * @param {Object} loadedSessionsStore
5388
5132
  * @returns {Observable}
5389
5133
  */
5390
-
5391
5134
  function cleanOldLoadedSessions(_x, _x2) {
5392
5135
  return _cleanOldLoadedSessions.apply(this, arguments);
5393
5136
  }
@@ -5418,7 +5161,7 @@ function _cleanOldLoadedSessions() {
5418
5161
  }
5419
5162
 
5420
5163
  _context.next = 8;
5421
- return promise/* default.all */.Z.all(proms);
5164
+ return Promise.all(proms);
5422
5165
 
5423
5166
  case 8:
5424
5167
  case "end":
@@ -5551,7 +5294,7 @@ function _createOrLoadSession() {
5551
5294
 
5552
5295
  case 20:
5553
5296
  _context.next = 22;
5554
- return createSession(stores, initializationData, wantedSessionType);
5297
+ return createSession(stores, initializationData, wantedSessionType, cancelSignal);
5555
5298
 
5556
5299
  case 22:
5557
5300
  evt = _context.sent;
@@ -5629,7 +5372,6 @@ var flat_map = __webpack_require__(9592);
5629
5372
 
5630
5373
 
5631
5374
 
5632
-
5633
5375
  /**
5634
5376
  * @param {Array.<Object>} keySystems
5635
5377
  * @param {MediaKeySystemAccess} currentKeySystemAccess
@@ -5821,7 +5563,7 @@ function getMediaKeySystemAccess(mediaElement, keySystemsConfigs, cancelSignal)
5821
5563
 
5822
5564
  if (cachedKeySystemAccess !== null) {
5823
5565
  log/* default.info */.Z.info("DRM: Found cached compatible keySystem");
5824
- return promise/* default.resolve */.Z.resolve({
5566
+ return Promise.resolve({
5825
5567
  type: "reuse-media-key-system-access",
5826
5568
  value: {
5827
5569
  mediaKeySystemAccess: cachedKeySystemAccess.keySystemAccess,
@@ -5951,6 +5693,230 @@ function getMediaKeySystemAccess(mediaElement, keySystemsConfigs, cancelSignal)
5951
5693
  return _recursivelyTestKeySystems.apply(this, arguments);
5952
5694
  }
5953
5695
  }
5696
+ // EXTERNAL MODULE: ./src/parsers/containers/isobmff/get_box.ts
5697
+ var get_box = __webpack_require__(2297);
5698
+ ;// CONCATENATED MODULE: ./src/compat/eme/generate_key_request.ts
5699
+ /**
5700
+ * Copyright 2015 CANAL+ Group
5701
+ *
5702
+ * Licensed under the Apache License, Version 2.0 (the "License");
5703
+ * you may not use this file except in compliance with the License.
5704
+ * You may obtain a copy of the License at
5705
+ *
5706
+ * http://www.apache.org/licenses/LICENSE-2.0
5707
+ *
5708
+ * Unless required by applicable law or agreed to in writing, software
5709
+ * distributed under the License is distributed on an "AS IS" BASIS,
5710
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5711
+ * See the License for the specific language governing permissions and
5712
+ * limitations under the License.
5713
+ */
5714
+
5715
+
5716
+
5717
+
5718
+ /**
5719
+ * Modify "initialization data" sent to a `generateKeyRequest` EME call to
5720
+ * improve the player's browser compatibility:
5721
+ *
5722
+ * 1. some browsers/CDM have problems when the CENC PSSH box is the first
5723
+ * encountered PSSH box in the initialization data (for the moment just
5724
+ * Edge was noted with this behavior).
5725
+ * We found however that it works on every browser when the CENC pssh
5726
+ * box(es) is/are the last box(es) encountered.
5727
+ *
5728
+ * To that end, we move CENC pssh boxes at the end of the initialization
5729
+ * data in this function.
5730
+ *
5731
+ * 2. Some poorly encoded/packaged contents communicate both a CENC with a
5732
+ * pssh version of 0 and one with a version of 1. We found out that this is
5733
+ * not always well handled on some devices/browsers (on Edge and some other
5734
+ * embedded devices that shall remain nameless for now!).
5735
+ *
5736
+ * Here this function will filter out CENC pssh with a version different to
5737
+ * 1 when one(s) with a version of 1 is/are already present.
5738
+ *
5739
+ * If the initData is unrecognized or if a CENC PSSH is not found, this function
5740
+ * throws.
5741
+ * @param {Uint8Array} initData - Initialization data you want to patch
5742
+ * @returns {Uint8Array} - Initialization data, patched
5743
+ */
5744
+
5745
+ function patchInitData(initData) {
5746
+ log/* default.info */.Z.info("Compat: Trying to move CENC PSSH from init data at the end of it.");
5747
+ var foundCencV1 = false;
5748
+ var concatenatedCencs = new Uint8Array();
5749
+ var resInitData = new Uint8Array();
5750
+ var offset = 0;
5751
+
5752
+ while (offset < initData.length) {
5753
+ if (initData.length < offset + 8 || (0,byte_parsing/* be4toi */.pX)(initData, offset + 4) !== PSSH_TO_INTEGER) {
5754
+ log/* default.warn */.Z.warn("Compat: unrecognized initialization data. Cannot patch it.");
5755
+ throw new Error("Compat: unrecognized initialization data. Cannot patch it.");
5756
+ }
5757
+
5758
+ var len = (0,byte_parsing/* be4toi */.pX)(new Uint8Array(initData), offset);
5759
+
5760
+ if (offset + len > initData.length) {
5761
+ log/* default.warn */.Z.warn("Compat: unrecognized initialization data. Cannot patch it.");
5762
+ throw new Error("Compat: unrecognized initialization data. Cannot patch it.");
5763
+ }
5764
+
5765
+ var currentPSSH = initData.subarray(offset, offset + len); // yep
5766
+
5767
+ if (initData[offset + 12] === 0x10 && initData[offset + 13] === 0x77 && initData[offset + 14] === 0xEF && initData[offset + 15] === 0xEC && initData[offset + 16] === 0xC0 && initData[offset + 17] === 0xB2 && initData[offset + 18] === 0x4D && initData[offset + 19] === 0x02 && initData[offset + 20] === 0xAC && initData[offset + 21] === 0xE3 && initData[offset + 22] === 0x3C && initData[offset + 23] === 0x1E && initData[offset + 24] === 0x52 && initData[offset + 25] === 0xE2 && initData[offset + 26] === 0xFB && initData[offset + 27] === 0x4B) {
5768
+ var cencOffsets = (0,get_box/* getNextBoxOffsets */.Xj)(currentPSSH);
5769
+ var version = cencOffsets === null ? undefined : currentPSSH[cencOffsets[1]];
5770
+ log/* default.info */.Z.info("Compat: CENC PSSH found with version", version);
5771
+
5772
+ if (version === undefined) {
5773
+ log/* default.warn */.Z.warn("Compat: could not read version of CENC PSSH");
5774
+ } else if (foundCencV1 === (version === 1)) {
5775
+ // Either `concatenatedCencs` only contains v1 or does not contain any
5776
+ concatenatedCencs = (0,byte_parsing/* concat */.zo)(concatenatedCencs, currentPSSH);
5777
+ } else if (version === 1) {
5778
+ log/* default.warn */.Z.warn("Compat: cenc version 1 encountered, " + "removing every other cenc pssh box.");
5779
+ concatenatedCencs = currentPSSH;
5780
+ foundCencV1 = true;
5781
+ } else {
5782
+ log/* default.warn */.Z.warn("Compat: filtering out cenc pssh box with wrong version", version);
5783
+ }
5784
+ } else {
5785
+ resInitData = (0,byte_parsing/* concat */.zo)(resInitData, currentPSSH);
5786
+ }
5787
+
5788
+ offset += len;
5789
+ }
5790
+
5791
+ if (offset !== initData.length) {
5792
+ log/* default.warn */.Z.warn("Compat: unrecognized initialization data. Cannot patch it.");
5793
+ throw new Error("Compat: unrecognized initialization data. Cannot patch it.");
5794
+ }
5795
+
5796
+ return (0,byte_parsing/* concat */.zo)(resInitData, concatenatedCencs);
5797
+ }
5798
+ /**
5799
+ * Generate a request from session.
5800
+ * @param {MediaKeySession} session - MediaKeySession on which the request will
5801
+ * be done.
5802
+ * @param {string} initializationDataType - Initialization data type given e.g.
5803
+ * by the "encrypted" event for the corresponding request.
5804
+ * @param {Uint8Array} initializationData - Initialization data given e.g. by
5805
+ * the "encrypted" event for the corresponding request.
5806
+ * @returns {Promise} - Emit when done. Errors if fails.
5807
+ */
5808
+
5809
+ function generateKeyRequest(session, initializationDataType, initializationData) {
5810
+ log/* default.debug */.Z.debug("Compat: Calling generateRequest on the MediaKeySession");
5811
+ var patchedInit;
5812
+
5813
+ try {
5814
+ patchedInit = patchInitData(initializationData);
5815
+ } catch (_e) {
5816
+ patchedInit = initializationData;
5817
+ }
5818
+
5819
+ var initDataType = initializationDataType !== null && initializationDataType !== void 0 ? initializationDataType : "";
5820
+ return session.generateRequest(initDataType, patchedInit)["catch"](function (error) {
5821
+ if (initDataType !== "" || !(error instanceof TypeError)) {
5822
+ throw error;
5823
+ } // On newer EME versions of the specification, the initialization data
5824
+ // type given to generateRequest cannot be an empty string (it returns
5825
+ // a rejected promise with a TypeError in that case).
5826
+ // Retry with a default "cenc" value for initialization data type if
5827
+ // we're in that condition.
5828
+
5829
+
5830
+ log/* default.warn */.Z.warn("Compat: error while calling `generateRequest` with an empty " + "initialization data type. Retrying with a default \"cenc\" value.", error);
5831
+ return session.generateRequest("cenc", patchedInit);
5832
+ });
5833
+ }
5834
+ ;// CONCATENATED MODULE: ./src/compat/eme/load_session.ts
5835
+
5836
+
5837
+
5838
+ /**
5839
+ * Copyright 2015 CANAL+ Group
5840
+ *
5841
+ * Licensed under the Apache License, Version 2.0 (the "License");
5842
+ * you may not use this file except in compliance with the License.
5843
+ * You may obtain a copy of the License at
5844
+ *
5845
+ * http://www.apache.org/licenses/LICENSE-2.0
5846
+ *
5847
+ * Unless required by applicable law or agreed to in writing, software
5848
+ * distributed under the License is distributed on an "AS IS" BASIS,
5849
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5850
+ * See the License for the specific language governing permissions and
5851
+ * limitations under the License.
5852
+ */
5853
+
5854
+ var EME_WAITING_DELAY_LOADED_SESSION_EMPTY_KEYSTATUSES = 100;
5855
+ /**
5856
+ * Load a persistent session, based on its `sessionId`, on the given
5857
+ * MediaKeySession.
5858
+ *
5859
+ * Returns an Observable which emits:
5860
+ * - true if the persistent MediaKeySession was found and loaded
5861
+ * - false if no persistent MediaKeySession was found with that `sessionId`.
5862
+ * Then completes.
5863
+ *
5864
+ * The Observable throws if anything goes wrong in the process.
5865
+ * @param {MediaKeySession} session
5866
+ * @param {string} sessionId
5867
+ * @returns {Observable}
5868
+ */
5869
+
5870
+ function loadSession(_x, _x2) {
5871
+ return _loadSession.apply(this, arguments);
5872
+ }
5873
+
5874
+ function _loadSession() {
5875
+ _loadSession = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee(session, sessionId) {
5876
+ var isLoaded;
5877
+ return regenerator_default().wrap(function _callee$(_context) {
5878
+ while (1) {
5879
+ switch (_context.prev = _context.next) {
5880
+ case 0:
5881
+ log/* default.info */.Z.info("Compat/DRM: Load persisted session", sessionId);
5882
+ _context.next = 3;
5883
+ return session.load(sessionId);
5884
+
5885
+ case 3:
5886
+ isLoaded = _context.sent;
5887
+
5888
+ if (!(!isLoaded || session.keyStatuses.size > 0)) {
5889
+ _context.next = 6;
5890
+ break;
5891
+ }
5892
+
5893
+ return _context.abrupt("return", isLoaded);
5894
+
5895
+ case 6:
5896
+ return _context.abrupt("return", new Promise(function (resolve) {
5897
+ session.addEventListener("keystatuseschange", resolveWithLoadedStatus);
5898
+ var timeout = setTimeout(resolveWithLoadedStatus, EME_WAITING_DELAY_LOADED_SESSION_EMPTY_KEYSTATUSES);
5899
+
5900
+ function resolveWithLoadedStatus() {
5901
+ cleanUp();
5902
+ resolve(isLoaded);
5903
+ }
5904
+
5905
+ function cleanUp() {
5906
+ clearTimeout(timeout);
5907
+ session.removeEventListener("keystatuseschange", resolveWithLoadedStatus);
5908
+ }
5909
+ }));
5910
+
5911
+ case 7:
5912
+ case "end":
5913
+ return _context.stop();
5914
+ }
5915
+ }
5916
+ }, _callee);
5917
+ }));
5918
+ return _loadSession.apply(this, arguments);
5919
+ }
5954
5920
  // EXTERNAL MODULE: ./src/utils/cancellable_sleep.ts
5955
5921
  var cancellable_sleep = __webpack_require__(7864);
5956
5922
  ;// CONCATENATED MODULE: ./src/compat/eme/close_session.ts
@@ -5975,7 +5941,6 @@ var cancellable_sleep = __webpack_require__(7864);
5975
5941
 
5976
5942
 
5977
5943
 
5978
-
5979
5944
  /**
5980
5945
  * Close the given `MediaKeySession` and returns a Promise resolving when the
5981
5946
  * session is closed.
@@ -5992,7 +5957,7 @@ var cancellable_sleep = __webpack_require__(7864);
5992
5957
 
5993
5958
  function closeSession(session) {
5994
5959
  var timeoutCanceller = new task_canceller/* default */.ZP();
5995
- return promise/* default.race */.Z.race([session.close().then(function () {
5960
+ return Promise.race([session.close().then(function () {
5996
5961
  timeoutCanceller.cancel();
5997
5962
  }), // The `closed` promise may resolve, even if `close()` result has not
5998
5963
  // (seen at some point on Firefox).
@@ -6448,9 +6413,6 @@ function loaded_sessions_store_arrayLikeToArray(arr, len) { if (len == null || l
6448
6413
 
6449
6414
 
6450
6415
 
6451
-
6452
-
6453
-
6454
6416
  /**
6455
6417
  * Create and store MediaKeySessions linked to a single MediaKeys
6456
6418
  * instance.
@@ -6472,7 +6434,7 @@ var LoadedSessionsStore = /*#__PURE__*/function () {
6472
6434
  }
6473
6435
  /**
6474
6436
  * Create a new MediaKeySession and store it in this store.
6475
- * @param {Object} initializationData
6437
+ * @param {Object} initData
6476
6438
  * @param {string} sessionType
6477
6439
  * @returns {Object}
6478
6440
  */
@@ -6490,7 +6452,12 @@ var LoadedSessionsStore = /*#__PURE__*/function () {
6490
6452
  var entry = {
6491
6453
  mediaKeySession: mediaKeySession,
6492
6454
  sessionType: sessionType,
6493
- keySessionRecord: keySessionRecord
6455
+ keySessionRecord: keySessionRecord,
6456
+ isGeneratingRequest: false,
6457
+ isLoadingPersistentSession: false,
6458
+ closingStatus: {
6459
+ type: "none"
6460
+ }
6494
6461
  };
6495
6462
 
6496
6463
  if (!(0,is_null_or_undefined/* default */.Z)(mediaKeySession.closed)) {
@@ -6508,11 +6475,7 @@ var LoadedSessionsStore = /*#__PURE__*/function () {
6508
6475
 
6509
6476
  log/* default.debug */.Z.debug("DRM-LSS: Add MediaKeySession", entry.sessionType);
6510
6477
 
6511
- this._storage.push({
6512
- keySessionRecord: keySessionRecord,
6513
- mediaKeySession: mediaKeySession,
6514
- sessionType: sessionType
6515
- });
6478
+ this._storage.push(Object.assign({}, entry));
6516
6479
 
6517
6480
  return entry;
6518
6481
  }
@@ -6539,29 +6502,49 @@ var LoadedSessionsStore = /*#__PURE__*/function () {
6539
6502
 
6540
6503
  this._storage.push(stored);
6541
6504
 
6542
- return {
6543
- keySessionRecord: stored.keySessionRecord,
6544
- mediaKeySession: stored.mediaKeySession,
6545
- sessionType: stored.sessionType
6546
- };
6505
+ return Object.assign({}, stored);
6547
6506
  }
6548
6507
  }
6549
6508
 
6550
6509
  return null;
6551
6510
  }
6552
6511
  /**
6553
- * Close a MediaKeySession and remove its related stored information from the
6512
+ * Get `LoadedSessionsStore`'s entry for a given MediaKeySession.
6513
+ * Returns `null` if the given MediaKeySession is not stored in the
6554
6514
  * `LoadedSessionsStore`.
6555
- * Emit when done.
6515
+ * @param {MediaKeySession} mediaKeySession
6516
+ * @returns {Object|null}
6517
+ */
6518
+ ;
6519
+
6520
+ _proto.getEntryForSession = function getEntryForSession(mediaKeySession) {
6521
+ for (var i = this._storage.length - 1; i >= 0; i--) {
6522
+ var stored = this._storage[i];
6523
+
6524
+ if (stored.mediaKeySession === mediaKeySession) {
6525
+ return Object.assign({}, stored);
6526
+ }
6527
+ }
6528
+
6529
+ return null;
6530
+ }
6531
+ /**
6532
+ * Generate a license request on the given MediaKeySession, while indicating
6533
+ * to the LoadedSessionsStore that a license-request is pending so
6534
+ * session-closing orders are properly scheduled after it is done.
6556
6535
  * @param {Object} mediaKeySession
6536
+ * @param {string} initializationDataType - Initialization data type given
6537
+ * e.g. by the "encrypted" event for the corresponding request.
6538
+ * @param {Uint8Array} initializationData - Initialization data given e.g. by
6539
+ * the "encrypted" event for the corresponding request.
6557
6540
  * @returns {Promise}
6558
6541
  */
6559
6542
  ;
6560
6543
 
6561
- _proto.closeSession =
6544
+ _proto.generateLicenseRequest =
6562
6545
  /*#__PURE__*/
6563
6546
  function () {
6564
- var _closeSession = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee(mediaKeySession) {
6547
+ var _generateLicenseRequest = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee(mediaKeySession, initializationDataType, initializationData) {
6565
6548
  var entry, _iterator, _step, stored;
6566
6549
 
6567
6550
  return regenerator_default().wrap(function _callee$(_context) {
@@ -6596,25 +6579,260 @@ var LoadedSessionsStore = /*#__PURE__*/function () {
6596
6579
  break;
6597
6580
  }
6598
6581
 
6599
- log/* default.warn */.Z.warn("DRM-LSS: No MediaKeySession found with " + "the given initData and initDataType");
6600
- return _context.abrupt("return", pinkie_default().resolve(false));
6582
+ log/* default.error */.Z.error("DRM-LSS: generateRequest error. No MediaKeySession found with " + "the given initData and initDataType");
6583
+ return _context.abrupt("return", generateKeyRequest(mediaKeySession, initializationDataType, initializationData));
6601
6584
 
6602
6585
  case 11:
6603
- _context.next = 13;
6604
- return safelyCloseMediaKeySession(entry.mediaKeySession);
6586
+ entry.isGeneratingRequest = true; // Note the `as string` is needed due to TypeScript not understanding that
6587
+ // the `closingStatus` might change in the next checks
6605
6588
 
6606
- case 13:
6607
- return _context.abrupt("return", pinkie_default().resolve(true));
6589
+ if (!(entry.closingStatus.type !== "none")) {
6590
+ _context.next = 14;
6591
+ break;
6592
+ }
6593
+
6594
+ throw new Error("The `MediaKeySession` is being closed.");
6608
6595
 
6609
6596
  case 14:
6597
+ _context.prev = 14;
6598
+ _context.next = 17;
6599
+ return generateKeyRequest(mediaKeySession, initializationDataType, initializationData);
6600
+
6601
+ case 17:
6602
+ _context.next = 26;
6603
+ break;
6604
+
6605
+ case 19:
6606
+ _context.prev = 19;
6607
+ _context.t0 = _context["catch"](14);
6608
+
6609
+ if (!(entry === undefined)) {
6610
+ _context.next = 23;
6611
+ break;
6612
+ }
6613
+
6614
+ throw _context.t0;
6615
+
6616
+ case 23:
6617
+ entry.isGeneratingRequest = false;
6618
+
6619
+ if (entry.closingStatus.type === "awaiting") {
6620
+ entry.closingStatus.start();
6621
+ }
6622
+
6623
+ throw _context.t0;
6624
+
6625
+ case 26:
6626
+ if (!(entry === undefined)) {
6627
+ _context.next = 28;
6628
+ break;
6629
+ }
6630
+
6631
+ return _context.abrupt("return", undefined);
6632
+
6633
+ case 28:
6634
+ entry.isGeneratingRequest = false;
6635
+
6636
+ if (entry.closingStatus.type === "awaiting") {
6637
+ entry.closingStatus.start();
6638
+ }
6639
+
6640
+ case 30:
6610
6641
  case "end":
6611
6642
  return _context.stop();
6612
6643
  }
6613
6644
  }
6614
- }, _callee, this);
6645
+ }, _callee, this, [[14, 19]]);
6646
+ }));
6647
+
6648
+ function generateLicenseRequest(_x, _x2, _x3) {
6649
+ return _generateLicenseRequest.apply(this, arguments);
6650
+ }
6651
+
6652
+ return generateLicenseRequest;
6653
+ }()
6654
+ /**
6655
+ * @param {Object} mediaKeySession
6656
+ * @param {string} sessionId
6657
+ * @returns {Promise}
6658
+ */
6659
+ ;
6660
+
6661
+ _proto.loadPersistentSession =
6662
+ /*#__PURE__*/
6663
+ function () {
6664
+ var _loadPersistentSession = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee2(mediaKeySession, sessionId) {
6665
+ var entry, _iterator2, _step2, stored, ret;
6666
+
6667
+ return regenerator_default().wrap(function _callee2$(_context2) {
6668
+ while (1) {
6669
+ switch (_context2.prev = _context2.next) {
6670
+ case 0:
6671
+ _iterator2 = loaded_sessions_store_createForOfIteratorHelperLoose(this._storage);
6672
+
6673
+ case 1:
6674
+ if ((_step2 = _iterator2()).done) {
6675
+ _context2.next = 8;
6676
+ break;
6677
+ }
6678
+
6679
+ stored = _step2.value;
6680
+
6681
+ if (!(stored.mediaKeySession === mediaKeySession)) {
6682
+ _context2.next = 6;
6683
+ break;
6684
+ }
6685
+
6686
+ entry = stored;
6687
+ return _context2.abrupt("break", 8);
6688
+
6689
+ case 6:
6690
+ _context2.next = 1;
6691
+ break;
6692
+
6693
+ case 8:
6694
+ if (!(entry === undefined)) {
6695
+ _context2.next = 11;
6696
+ break;
6697
+ }
6698
+
6699
+ log/* default.error */.Z.error("DRM-LSS: loadPersistentSession error. No MediaKeySession found with " + "the given initData and initDataType");
6700
+ return _context2.abrupt("return", loadSession(mediaKeySession, sessionId));
6701
+
6702
+ case 11:
6703
+ entry.isLoadingPersistentSession = true; // Note the `as string` is needed due to TypeScript not understanding that
6704
+ // the `closingStatus` might change in the next checks
6705
+
6706
+ if (!(entry.closingStatus.type !== "none")) {
6707
+ _context2.next = 14;
6708
+ break;
6709
+ }
6710
+
6711
+ throw new Error("The `MediaKeySession` is being closed.");
6712
+
6713
+ case 14:
6714
+ _context2.prev = 14;
6715
+ _context2.next = 17;
6716
+ return loadSession(mediaKeySession, sessionId);
6717
+
6718
+ case 17:
6719
+ ret = _context2.sent;
6720
+ _context2.next = 27;
6721
+ break;
6722
+
6723
+ case 20:
6724
+ _context2.prev = 20;
6725
+ _context2.t0 = _context2["catch"](14);
6726
+
6727
+ if (!(entry === undefined)) {
6728
+ _context2.next = 24;
6729
+ break;
6730
+ }
6731
+
6732
+ throw _context2.t0;
6733
+
6734
+ case 24:
6735
+ entry.isLoadingPersistentSession = false;
6736
+
6737
+ if (entry.closingStatus.type === "awaiting") {
6738
+ entry.closingStatus.start();
6739
+ }
6740
+
6741
+ throw _context2.t0;
6742
+
6743
+ case 27:
6744
+ if (!(entry === undefined)) {
6745
+ _context2.next = 29;
6746
+ break;
6747
+ }
6748
+
6749
+ return _context2.abrupt("return", ret);
6750
+
6751
+ case 29:
6752
+ entry.isLoadingPersistentSession = false;
6753
+
6754
+ if (entry.closingStatus.type === "awaiting") {
6755
+ entry.closingStatus.start();
6756
+ }
6757
+
6758
+ return _context2.abrupt("return", ret);
6759
+
6760
+ case 32:
6761
+ case "end":
6762
+ return _context2.stop();
6763
+ }
6764
+ }
6765
+ }, _callee2, this, [[14, 20]]);
6766
+ }));
6767
+
6768
+ function loadPersistentSession(_x4, _x5) {
6769
+ return _loadPersistentSession.apply(this, arguments);
6770
+ }
6771
+
6772
+ return loadPersistentSession;
6773
+ }()
6774
+ /**
6775
+ * Close a MediaKeySession and remove its related stored information from the
6776
+ * `LoadedSessionsStore`.
6777
+ * Emit when done.
6778
+ * @param {Object} mediaKeySession
6779
+ * @returns {Promise}
6780
+ */
6781
+ ;
6782
+
6783
+ _proto.closeSession =
6784
+ /*#__PURE__*/
6785
+ function () {
6786
+ var _closeSession = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee3(mediaKeySession) {
6787
+ var entry, _iterator3, _step3, stored;
6788
+
6789
+ return regenerator_default().wrap(function _callee3$(_context3) {
6790
+ while (1) {
6791
+ switch (_context3.prev = _context3.next) {
6792
+ case 0:
6793
+ _iterator3 = loaded_sessions_store_createForOfIteratorHelperLoose(this._storage);
6794
+
6795
+ case 1:
6796
+ if ((_step3 = _iterator3()).done) {
6797
+ _context3.next = 8;
6798
+ break;
6799
+ }
6800
+
6801
+ stored = _step3.value;
6802
+
6803
+ if (!(stored.mediaKeySession === mediaKeySession)) {
6804
+ _context3.next = 6;
6805
+ break;
6806
+ }
6807
+
6808
+ entry = stored;
6809
+ return _context3.abrupt("break", 8);
6810
+
6811
+ case 6:
6812
+ _context3.next = 1;
6813
+ break;
6814
+
6815
+ case 8:
6816
+ if (!(entry === undefined)) {
6817
+ _context3.next = 11;
6818
+ break;
6819
+ }
6820
+
6821
+ log/* default.warn */.Z.warn("DRM-LSS: No MediaKeySession found with " + "the given initData and initDataType");
6822
+ return _context3.abrupt("return", Promise.resolve(false));
6823
+
6824
+ case 11:
6825
+ return _context3.abrupt("return", this._closeEntry(entry));
6826
+
6827
+ case 12:
6828
+ case "end":
6829
+ return _context3.stop();
6830
+ }
6831
+ }
6832
+ }, _callee3, this);
6615
6833
  }));
6616
6834
 
6617
- function closeSession(_x) {
6835
+ function closeSession(_x6) {
6618
6836
  return _closeSession.apply(this, arguments);
6619
6837
  }
6620
6838
 
@@ -6649,11 +6867,13 @@ var LoadedSessionsStore = /*#__PURE__*/function () {
6649
6867
  _proto.closeAllSessions =
6650
6868
  /*#__PURE__*/
6651
6869
  function () {
6652
- var _closeAllSessions = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee2() {
6870
+ var _closeAllSessions = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee4() {
6871
+ var _this2 = this;
6872
+
6653
6873
  var allEntries, closingProms;
6654
- return regenerator_default().wrap(function _callee2$(_context2) {
6874
+ return regenerator_default().wrap(function _callee4$(_context4) {
6655
6875
  while (1) {
6656
- switch (_context2.prev = _context2.next) {
6876
+ switch (_context4.prev = _context4.next) {
6657
6877
  case 0:
6658
6878
  allEntries = this._storage;
6659
6879
  log/* default.debug */.Z.debug("DRM-LSS: Closing all current MediaKeySessions", allEntries.length); // re-initialize the storage, so that new interactions with the
@@ -6662,17 +6882,17 @@ var LoadedSessionsStore = /*#__PURE__*/function () {
6662
6882
 
6663
6883
  this._storage = [];
6664
6884
  closingProms = allEntries.map(function (entry) {
6665
- return safelyCloseMediaKeySession(entry.mediaKeySession);
6885
+ return _this2._closeEntry(entry);
6666
6886
  });
6667
- _context2.next = 6;
6668
- return pinkie_default().all(closingProms);
6887
+ _context4.next = 6;
6888
+ return Promise.all(closingProms);
6669
6889
 
6670
6890
  case 6:
6671
6891
  case "end":
6672
- return _context2.stop();
6892
+ return _context4.stop();
6673
6893
  }
6674
6894
  }
6675
- }, _callee2, this);
6895
+ }, _callee4, this);
6676
6896
  }));
6677
6897
 
6678
6898
  function closeAllSessions() {
@@ -6680,7 +6900,15 @@ var LoadedSessionsStore = /*#__PURE__*/function () {
6680
6900
  }
6681
6901
 
6682
6902
  return closeAllSessions;
6683
- }();
6903
+ }()
6904
+ /**
6905
+ * Get the index of a stored MediaKeySession entry based on its
6906
+ * `KeySessionRecord`.
6907
+ * Returns -1 if not found.
6908
+ * @param {Object} record
6909
+ * @returns {number}
6910
+ */
6911
+ ;
6684
6912
 
6685
6913
  _proto.getIndex = function getIndex(record) {
6686
6914
  for (var i = 0; i < this._storage.length; i++) {
@@ -6692,122 +6920,124 @@ var LoadedSessionsStore = /*#__PURE__*/function () {
6692
6920
  }
6693
6921
 
6694
6922
  return -1;
6695
- };
6696
-
6697
- return LoadedSessionsStore;
6698
- }();
6699
- /**
6700
- * Close a MediaKeySession with multiple attempts if needed and do not throw if
6701
- * this action throws an error.
6702
- * Emits then complete when done.
6703
- * @param {MediaKeySession} mediaKeySession
6704
- * @returns {Observable}
6705
- */
6706
-
6707
-
6708
-
6709
-
6710
- function safelyCloseMediaKeySession(mediaKeySession) {
6711
- return recursivelyTryToCloseMediaKeySession(0);
6712
- /**
6713
- * Perform a new attempt at closing the MediaKeySession.
6714
- * If this operation fails due to a not-"callable" (an EME term)
6715
- * MediaKeySession, retry based on either a timer or on MediaKeySession
6716
- * events, whichever comes first.
6717
- * Emits then complete when done.
6718
- * @param {number} retryNb - The attempt number starting at 0.
6719
- * @returns {Observable}
6720
- */
6721
-
6722
- function recursivelyTryToCloseMediaKeySession(_x2) {
6723
- return _recursivelyTryToCloseMediaKeySession.apply(this, arguments);
6724
6923
  }
6725
6924
  /**
6726
- * Log error anouncing that we could not close the MediaKeySession and emits
6727
- * then complete through Observable.
6728
- * TODO Emit warning?
6729
- * @returns {Observable}
6925
+ * Prepare the closure of a `MediaKeySession` stored as an entry of the
6926
+ * `LoadedSessionsStore`.
6927
+ * Allows to postpone the closure action if another MediaKeySession action
6928
+ * is already pending.
6929
+ * @param {Object} entry
6930
+ * @returns {Promise.<boolean>}
6730
6931
  */
6932
+ ;
6731
6933
 
6732
-
6733
- function _recursivelyTryToCloseMediaKeySession() {
6734
- _recursivelyTryToCloseMediaKeySession = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee3(retryNb) {
6735
- var _config$getCurrent, EME_SESSION_CLOSING_MAX_RETRY, EME_SESSION_CLOSING_INITIAL_DELAY, EME_SESSION_CLOSING_MAX_DELAY, nextRetryNb, delay, ksChangeSub, ksChangeProm, ksMsgSub, ksMsgProm, sleepTimer, sleepProm;
6736
-
6737
- return regenerator_default().wrap(function _callee3$(_context3) {
6934
+ _proto._closeEntry =
6935
+ /*#__PURE__*/
6936
+ function () {
6937
+ var _closeEntry2 = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee5(entry) {
6938
+ var mediaKeySession;
6939
+ return regenerator_default().wrap(function _callee5$(_context5) {
6738
6940
  while (1) {
6739
- switch (_context3.prev = _context3.next) {
6941
+ switch (_context5.prev = _context5.next) {
6740
6942
  case 0:
6741
- log/* default.debug */.Z.debug("DRM: Trying to close a MediaKeySession", mediaKeySession.sessionId, retryNb);
6742
- _context3.prev = 1;
6743
- _context3.next = 4;
6744
- return closeSession(mediaKeySession);
6943
+ mediaKeySession = entry.mediaKeySession;
6944
+ return _context5.abrupt("return", new Promise(function (resolve, reject) {
6945
+ if (entry !== undefined && (entry.isLoadingPersistentSession || entry.isGeneratingRequest)) {
6946
+ entry.closingStatus = {
6947
+ type: "awaiting",
6948
+ start: tryClosingEntryAndResolve
6949
+ };
6950
+ } else {
6951
+ tryClosingEntryAndResolve();
6952
+ }
6745
6953
 
6746
- case 4:
6747
- log/* default.debug */.Z.debug("DRM: Succeeded to close MediaKeySession");
6748
- return _context3.abrupt("return", undefined);
6954
+ function tryClosingEntryAndResolve() {
6955
+ if (entry !== undefined) {
6956
+ entry.closingStatus = {
6957
+ type: "pending"
6958
+ };
6959
+ }
6749
6960
 
6750
- case 8:
6751
- _context3.prev = 8;
6752
- _context3.t0 = _context3["catch"](1);
6961
+ safelyCloseMediaKeySession(mediaKeySession).then(function () {
6962
+ if (entry !== undefined) {
6963
+ entry.closingStatus = {
6964
+ type: "done"
6965
+ };
6966
+ }
6753
6967
 
6754
- if (!(!(_context3.t0 instanceof Error) || _context3.t0.name !== "InvalidStateError" || mediaKeySession.sessionId !== "")) {
6755
- _context3.next = 12;
6756
- break;
6757
- }
6968
+ resolve(true);
6969
+ })["catch"](function (err) {
6970
+ if (entry !== undefined) {
6971
+ entry.closingStatus = {
6972
+ type: "failed"
6973
+ };
6974
+ }
6758
6975
 
6759
- return _context3.abrupt("return", failToCloseSession(_context3.t0));
6976
+ reject(err);
6977
+ });
6978
+ }
6979
+ }));
6760
6980
 
6761
- case 12:
6762
- _config$getCurrent = config/* default.getCurrent */.Z.getCurrent(), EME_SESSION_CLOSING_MAX_RETRY = _config$getCurrent.EME_SESSION_CLOSING_MAX_RETRY, EME_SESSION_CLOSING_INITIAL_DELAY = _config$getCurrent.EME_SESSION_CLOSING_INITIAL_DELAY, EME_SESSION_CLOSING_MAX_DELAY = _config$getCurrent.EME_SESSION_CLOSING_MAX_DELAY; // We will retry either:
6763
- // - when an event indicates that the MediaKeySession is
6764
- // initialized (`callable` is the proper EME term here)
6765
- // - after a delay, raising exponentially
6981
+ case 2:
6982
+ case "end":
6983
+ return _context5.stop();
6984
+ }
6985
+ }
6986
+ }, _callee5);
6987
+ }));
6766
6988
 
6767
- nextRetryNb = retryNb + 1;
6989
+ function _closeEntry(_x7) {
6990
+ return _closeEntry2.apply(this, arguments);
6991
+ }
6768
6992
 
6769
- if (!(nextRetryNb > EME_SESSION_CLOSING_MAX_RETRY)) {
6770
- _context3.next = 16;
6771
- break;
6772
- }
6993
+ return _closeEntry;
6994
+ }();
6773
6995
 
6774
- return _context3.abrupt("return", failToCloseSession(_context3.t0));
6996
+ return LoadedSessionsStore;
6997
+ }();
6998
+ /**
6999
+ * Close a MediaKeySession and just log an error if it fails (while resolving).
7000
+ * Emits then complete when done.
7001
+ * @param {MediaKeySession} mediaKeySession
7002
+ * @returns {Observable}
7003
+ */
6775
7004
 
6776
- case 16:
6777
- delay = Math.min(Math.pow(2, retryNb) * EME_SESSION_CLOSING_INITIAL_DELAY, EME_SESSION_CLOSING_MAX_DELAY);
6778
- log/* default.warn */.Z.warn("DRM: attempt to close a mediaKeySession failed, " + "scheduling retry...", delay);
6779
- ksChangeProm = new Promise(function (res) {
6780
- ksChangeSub = (0,event_listeners/* onKeyStatusesChange$ */.eX)(mediaKeySession).subscribe(res);
6781
- });
6782
- ksMsgProm = new Promise(function (res) {
6783
- ksMsgSub = (0,event_listeners/* onKeyMessage$ */.GJ)(mediaKeySession).subscribe(res);
6784
- });
6785
- sleepProm = new Promise(function (res) {
6786
- sleepTimer = window.setTimeout(res, delay);
6787
- });
6788
- _context3.next = 23;
6789
- return pinkie_default().race([ksChangeProm, ksMsgProm, sleepProm]);
6790
7005
 
6791
- case 23:
6792
- ksChangeSub === null || ksChangeSub === void 0 ? void 0 : ksChangeSub.unsubscribe();
6793
- ksMsgSub === null || ksMsgSub === void 0 ? void 0 : ksMsgSub.unsubscribe();
6794
- clearTimeout(sleepTimer);
6795
- return _context3.abrupt("return", recursivelyTryToCloseMediaKeySession(nextRetryNb));
6796
7006
 
6797
- case 27:
6798
- case "end":
6799
- return _context3.stop();
6800
- }
6801
- }
6802
- }, _callee3, null, [[1, 8]]);
6803
- }));
6804
- return _recursivelyTryToCloseMediaKeySession.apply(this, arguments);
6805
- }
6806
7007
 
6807
- function failToCloseSession(err) {
6808
- log/* default.error */.Z.error("DRM: Could not close MediaKeySession: " + (err instanceof Error ? err.toString() : "Unknown error"));
6809
- return pinkie_default().resolve(null);
6810
- }
7008
+ function safelyCloseMediaKeySession(_x8) {
7009
+ return _safelyCloseMediaKeySession.apply(this, arguments);
7010
+ }
7011
+
7012
+ function _safelyCloseMediaKeySession() {
7013
+ _safelyCloseMediaKeySession = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee6(mediaKeySession) {
7014
+ return regenerator_default().wrap(function _callee6$(_context6) {
7015
+ while (1) {
7016
+ switch (_context6.prev = _context6.next) {
7017
+ case 0:
7018
+ log/* default.debug */.Z.debug("DRM: Trying to close a MediaKeySession", mediaKeySession.sessionId);
7019
+ _context6.prev = 1;
7020
+ _context6.next = 4;
7021
+ return closeSession(mediaKeySession);
7022
+
7023
+ case 4:
7024
+ log/* default.debug */.Z.debug("DRM: Succeeded to close MediaKeySession");
7025
+ return _context6.abrupt("return");
7026
+
7027
+ case 8:
7028
+ _context6.prev = 8;
7029
+ _context6.t0 = _context6["catch"](1);
7030
+ log/* default.error */.Z.error("DRM: Could not close MediaKeySession: " + (_context6.t0 instanceof Error ? _context6.t0.toString() : "Unknown error"));
7031
+ return _context6.abrupt("return");
7032
+
7033
+ case 12:
7034
+ case "end":
7035
+ return _context6.stop();
7036
+ }
7037
+ }
7038
+ }, _callee6, null, [[1, 8]]);
7039
+ }));
7040
+ return _safelyCloseMediaKeySession.apply(this, arguments);
6811
7041
  }
6812
7042
  // EXTERNAL MODULE: ./src/utils/assert.ts
6813
7043
  var assert = __webpack_require__(811);
@@ -8830,7 +9060,6 @@ function content_decryptor_arrayLikeToArray(arr, len) { if (len == null || len >
8830
9060
 
8831
9061
 
8832
9062
 
8833
-
8834
9063
 
8835
9064
  var onEncrypted$ = event_listeners/* onEncrypted$ */.Oh;
8836
9065
  /**
@@ -9127,7 +9356,7 @@ var ContentDecryptor = /*#__PURE__*/function (_EventEmitter) {
9127
9356
  var _processInitializationData2 = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee2(initializationData, mediaKeysData) {
9128
9357
  var _this4 = this;
9129
9358
 
9130
- var mediaKeySystemAccess, stores, options, firstCreatedSession, keyIds, hexKids, period, createdSessions, periodKeys, _iterator, _step, createdSess, periodKeysArr, _i, _periodKeysArr, kid, _iterator2, _step2, innerKid, wantedSessionType, _config$getCurrent, EME_DEFAULT_MAX_SIMULTANEOUS_MEDIA_KEY_SESSIONS, EME_MAX_STORED_PERSISTENT_SESSION_INFORMATION, maxSessionCacheSize, sessionRes, sessionInfo, _sessionRes$value, mediaKeySession, sessionType, isSessionPersisted, sub, requestData;
9359
+ var mediaKeySystemAccess, stores, options, firstCreatedSession, keyIds, hexKids, period, createdSessions, periodKeys, _iterator, _step, createdSess, periodKeysArr, _i, _periodKeysArr, kid, _iterator2, _step2, innerKid, wantedSessionType, _config$getCurrent, EME_DEFAULT_MAX_SIMULTANEOUS_MEDIA_KEY_SESSIONS, EME_MAX_STORED_PERSISTENT_SESSION_INFORMATION, maxSessionCacheSize, sessionRes, sessionInfo, _sessionRes$value, mediaKeySession, sessionType, isSessionPersisted, sub, requestData, entry, indexInCurrent;
9131
9360
 
9132
9361
  return regenerator_default().wrap(function _callee2$(_context2) {
9133
9362
  while (1) {
@@ -9389,28 +9618,47 @@ var ContentDecryptor = /*#__PURE__*/function (_EventEmitter) {
9389
9618
  if (!(sessionRes.type === "created-session"
9390
9619
  /* Created */
9391
9620
  )) {
9392
- _context2.next = 63;
9621
+ _context2.next = 68;
9393
9622
  break;
9394
9623
  }
9395
9624
 
9396
9625
  requestData = initializationData.values.constructRequestData();
9397
9626
  _context2.prev = 55;
9398
9627
  _context2.next = 58;
9399
- return generateKeyRequest(mediaKeySession, initializationData.type, requestData);
9628
+ return stores.loadedSessionsStore.generateLicenseRequest(mediaKeySession, initializationData.type, requestData);
9400
9629
 
9401
9630
  case 58:
9402
- _context2.next = 63;
9631
+ _context2.next = 68;
9403
9632
  break;
9404
9633
 
9405
9634
  case 60:
9406
9635
  _context2.prev = 60;
9407
9636
  _context2.t0 = _context2["catch"](55);
9637
+ // First check that the error was not due to the MediaKeySession closing
9638
+ // or being closed
9639
+ entry = stores.loadedSessionsStore.getEntryForSession(mediaKeySession);
9640
+
9641
+ if (!(entry === null || entry.closingStatus.type !== "none")) {
9642
+ _context2.next = 67;
9643
+ break;
9644
+ }
9645
+
9646
+ // MediaKeySession closing/closed: Just remove from handled list and abort.
9647
+ indexInCurrent = this._currentSessions.indexOf(sessionInfo);
9648
+
9649
+ if (indexInCurrent >= 0) {
9650
+ this._currentSessions.splice(indexInCurrent, 1);
9651
+ }
9652
+
9653
+ return _context2.abrupt("return", Promise.resolve());
9654
+
9655
+ case 67:
9408
9656
  throw new encrypted_media_error/* default */.Z("KEY_GENERATE_REQUEST_ERROR", _context2.t0 instanceof Error ? _context2.t0.toString() : "Unknown error");
9409
9657
 
9410
- case 63:
9411
- return _context2.abrupt("return", pinkie_default().resolve());
9658
+ case 68:
9659
+ return _context2.abrupt("return", Promise.resolve());
9412
9660
 
9413
- case 64:
9661
+ case 69:
9414
9662
  case "end":
9415
9663
  return _context2.stop();
9416
9664
  }
@@ -30909,13 +31157,19 @@ __webpack_require__.d(__webpack_exports__, {
30909
31157
  var features = __webpack_require__(7874);
30910
31158
  // EXTERNAL MODULE: ./src/transports/utils/generate_manifest_loader.ts + 1 modules
30911
31159
  var generate_manifest_loader = __webpack_require__(8791);
30912
- // EXTERNAL MODULE: ./src/utils/promise.ts
30913
- var promise = __webpack_require__(9589);
31160
+ // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js
31161
+ var asyncToGenerator = __webpack_require__(5861);
31162
+ // EXTERNAL MODULE: ./node_modules/@babel/runtime/regenerator/index.js
31163
+ var regenerator = __webpack_require__(7757);
31164
+ var regenerator_default = /*#__PURE__*/__webpack_require__.n(regenerator);
30914
31165
  // EXTERNAL MODULE: ./src/utils/request/index.ts + 1 modules
30915
31166
  var request = __webpack_require__(4597);
30916
31167
  // EXTERNAL MODULE: ./src/utils/take_first_set.ts
30917
31168
  var take_first_set = __webpack_require__(5278);
30918
31169
  ;// CONCATENATED MODULE: ./src/transports/dash/image_pipelines.ts
31170
+
31171
+
31172
+
30919
31173
  /**
30920
31174
  * Copyright 2015 CANAL+ Group
30921
31175
  *
@@ -30934,7 +31188,6 @@ var take_first_set = __webpack_require__(5278);
30934
31188
 
30935
31189
 
30936
31190
 
30937
-
30938
31191
  /**
30939
31192
  * Loads an image segment.
30940
31193
  * @param {string|null} url
@@ -30944,34 +31197,61 @@ var take_first_set = __webpack_require__(5278);
30944
31197
  * @returns {Promise}
30945
31198
  */
30946
31199
 
30947
- function imageLoader(url, content, cancelSignal, callbacks) {
30948
- var segment = content.segment;
30949
-
30950
- if (segment.isInit || url === null) {
30951
- return promise/* default.resolve */.Z.resolve({
30952
- resultType: "segment-created",
30953
- resultData: null
30954
- });
30955
- }
30956
-
30957
- return (0,request/* default */.ZP)({
30958
- url: url,
30959
- responseType: "arraybuffer",
30960
- onProgress: callbacks.onProgress,
30961
- cancelSignal: cancelSignal
30962
- }).then(function (data) {
30963
- return {
30964
- resultType: "segment-loaded",
30965
- resultData: data
30966
- };
30967
- });
31200
+ function imageLoader(_x, _x2, _x3, _x4) {
31201
+ return _imageLoader.apply(this, arguments);
30968
31202
  }
30969
31203
  /**
30970
31204
  * Parses an image segment.
30971
- * @param {Object} args
31205
+ * @param {Object} loadedSegment
31206
+ * @param {Object} content
30972
31207
  * @returns {Object}
30973
31208
  */
30974
31209
 
31210
+ function _imageLoader() {
31211
+ _imageLoader = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee(url, content, cancelSignal, callbacks) {
31212
+ var segment, data;
31213
+ return regenerator_default().wrap(function _callee$(_context) {
31214
+ while (1) {
31215
+ switch (_context.prev = _context.next) {
31216
+ case 0:
31217
+ segment = content.segment;
31218
+
31219
+ if (!(segment.isInit || url === null)) {
31220
+ _context.next = 3;
31221
+ break;
31222
+ }
31223
+
31224
+ return _context.abrupt("return", {
31225
+ resultType: "segment-created",
31226
+ resultData: null
31227
+ });
31228
+
31229
+ case 3:
31230
+ _context.next = 5;
31231
+ return (0,request/* default */.ZP)({
31232
+ url: url,
31233
+ responseType: "arraybuffer",
31234
+ onProgress: callbacks.onProgress,
31235
+ cancelSignal: cancelSignal
31236
+ });
31237
+
31238
+ case 5:
31239
+ data = _context.sent;
31240
+ return _context.abrupt("return", {
31241
+ resultType: "segment-loaded",
31242
+ resultData: data
31243
+ });
31244
+
31245
+ case 7:
31246
+ case "end":
31247
+ return _context.stop();
31248
+ }
31249
+ }
31250
+ }, _callee);
31251
+ }));
31252
+ return _imageLoader.apply(this, arguments);
31253
+ }
31254
+
30975
31255
  function imageParser(loadedSegment, content) {
30976
31256
  var segment = content.segment,
30977
31257
  period = content.period;
@@ -31064,7 +31344,6 @@ var string_parsing = __webpack_require__(3635);
31064
31344
 
31065
31345
 
31066
31346
 
31067
-
31068
31347
  function generateManifestParser(options) {
31069
31348
  var aggressiveMode = options.aggressiveMode,
31070
31349
  referenceDateTime = options.referenceDateTime;
@@ -31149,7 +31428,7 @@ function generateManifestParser(options) {
31149
31428
  }
31150
31429
 
31151
31430
  if (cancelSignal.isCancelled) {
31152
- return promise/* default.reject */.Z.reject(cancelSignal.cancellationError);
31431
+ return Promise.reject(cancelSignal.cancellationError);
31153
31432
  }
31154
31433
 
31155
31434
  var manifest = new src_manifest/* default */.ZP(parserResponse.value.parsed, options);
@@ -31210,7 +31489,7 @@ function generateManifestParser(options) {
31210
31489
  });
31211
31490
  });
31212
31491
  });
31213
- return promise/* default.all */.Z.all(externalResources).then(function (loadedResources) {
31492
+ return Promise.all(externalResources).then(function (loadedResources) {
31214
31493
  if (value.format === "string") {
31215
31494
  assertLoadedResourcesFormatString(loadedResources);
31216
31495
  return processMpdParserResponse(value["continue"](loadedResources));
@@ -31342,11 +31621,6 @@ function doesXmlSeemsUtf8Encoded(xmlData) {
31342
31621
  }
31343
31622
  // EXTERNAL MODULE: ./src/errors/custom_loader_error.ts
31344
31623
  var custom_loader_error = __webpack_require__(7839);
31345
- // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js
31346
- var asyncToGenerator = __webpack_require__(5861);
31347
- // EXTERNAL MODULE: ./node_modules/@babel/runtime/regenerator/index.js
31348
- var regenerator = __webpack_require__(7757);
31349
- var regenerator_default = /*#__PURE__*/__webpack_require__.n(regenerator);
31350
31624
  // EXTERNAL MODULE: ./src/config.ts + 2 modules
31351
31625
  var config = __webpack_require__(6872);
31352
31626
  // EXTERNAL MODULE: ./src/errors/request_error.ts
@@ -31623,7 +31897,6 @@ var check_isobmff_integrity = __webpack_require__(4460);
31623
31897
 
31624
31898
 
31625
31899
 
31626
-
31627
31900
  /**
31628
31901
  * Add multiple checks on the response given by the `segmentLoader` in argument.
31629
31902
  * If the response appear to be corrupted, the returned Promise will reject with
@@ -31634,7 +31907,7 @@ var check_isobmff_integrity = __webpack_require__(4460);
31634
31907
 
31635
31908
  function addSegmentIntegrityChecks(segmentLoader) {
31636
31909
  return function (url, content, initialCancelSignal, callbacks) {
31637
- return new promise/* default */.Z(function (res, rej) {
31910
+ return new Promise(function (res, rej) {
31638
31911
  var canceller = new task_canceller/* default */.ZP();
31639
31912
  var unregisterCancelLstnr = initialCancelSignal.register(function onCheckCancellation(err) {
31640
31913
  canceller.cancel();
@@ -31711,7 +31984,6 @@ var byte_parsing = __webpack_require__(6968);
31711
31984
 
31712
31985
 
31713
31986
 
31714
-
31715
31987
  /**
31716
31988
  * Perform a request for an initialization segment, agnostic to the container.
31717
31989
  * @param {string} url
@@ -31789,7 +32061,7 @@ function initSegmentLoader(url, segment, cancelSignal, callbacks) {
31789
32061
  cancelSignal: cancelSignal,
31790
32062
  onProgress: callbacks.onProgress
31791
32063
  });
31792
- return promise/* default.all */.Z.all([rangeRequest$, indexRequest$]).then(function (_ref) {
32064
+ return Promise.all([rangeRequest$, indexRequest$]).then(function (_ref) {
31793
32065
  var initData = _ref[0],
31794
32066
  indexData = _ref[1];
31795
32067
  var data = (0,byte_parsing/* concat */.zo)(new Uint8Array(initData.responseData), new Uint8Array(indexData.responseData));
@@ -31990,10 +32262,9 @@ function lowLatencySegmentLoader(url, content, callbacks, cancelSignal) {
31990
32262
 
31991
32263
 
31992
32264
 
31993
-
31994
32265
  /**
31995
32266
  * Segment loader triggered if there was no custom-defined one in the API.
31996
- * @param {string} uri
32267
+ * @param {string} url
31997
32268
  * @param {Object} content
31998
32269
  * @param {boolean} lowLatencyMode
31999
32270
  * @param {Object} callbacks
@@ -32049,7 +32320,7 @@ function generateSegmentLoader(_ref) {
32049
32320
 
32050
32321
  function segmentLoader(url, content, cancelSignal, callbacks) {
32051
32322
  if (url == null) {
32052
- return promise/* default.resolve */.Z.resolve({
32323
+ return Promise.resolve({
32053
32324
  resultType: "segment-created",
32054
32325
  resultData: null
32055
32326
  });
@@ -32068,7 +32339,7 @@ function generateSegmentLoader(_ref) {
32068
32339
  transport: "dash",
32069
32340
  url: url
32070
32341
  };
32071
- return new promise/* default */.Z(function (res, rej) {
32342
+ return new Promise(function (res, rej) {
32072
32343
  /** `true` when the custom segmentLoader should not be active anymore. */
32073
32344
  var hasFinished = false;
32074
32345
  /**
@@ -32844,7 +33115,6 @@ function generateAudioVideoSegmentParser(_ref) {
32844
33115
 
32845
33116
 
32846
33117
 
32847
-
32848
33118
  /**
32849
33119
  * Perform requests for "text" segments
32850
33120
  * @param {boolean} lowLatencyMode
@@ -32870,7 +33140,7 @@ function generateTextTrackLoader(_ref) {
32870
33140
  var range = segment.range;
32871
33141
 
32872
33142
  if (url === null) {
32873
- return promise/* default.resolve */.Z.resolve({
33143
+ return Promise.resolve({
32874
33144
  resultType: "segment-created",
32875
33145
  resultData: null
32876
33146
  });
@@ -35143,8 +35413,6 @@ function createPSSHBox(systemId, privateData) {
35143
35413
 
35144
35414
  /* harmony default export */ var smooth = (create_parser);
35145
35415
 
35146
- // EXTERNAL MODULE: ./src/utils/promise.ts
35147
- var promise = __webpack_require__(9589);
35148
35416
  // EXTERNAL MODULE: ./src/utils/request/index.ts + 1 modules
35149
35417
  var request = __webpack_require__(4597);
35150
35418
  // EXTERNAL MODULE: ./src/utils/warn_once.ts
@@ -36294,7 +36562,6 @@ function isMP4EmbeddedTrack(representation) {
36294
36562
 
36295
36563
 
36296
36564
 
36297
-
36298
36565
  /**
36299
36566
  * Segment loader triggered if there was no custom-defined one in the API.
36300
36567
  * @param {string} uri
@@ -36408,12 +36675,12 @@ var generateSegmentLoader = function generateSegmentLoader(_ref) {
36408
36675
  responseData = new Uint8Array(0);
36409
36676
  }
36410
36677
 
36411
- return promise/* default.resolve */.Z.resolve({
36678
+ return Promise.resolve({
36412
36679
  resultType: "segment-created",
36413
36680
  resultData: responseData
36414
36681
  });
36415
36682
  } else if (url === null) {
36416
- return promise/* default.resolve */.Z.resolve({
36683
+ return Promise.resolve({
36417
36684
  resultType: "segment-created",
36418
36685
  resultData: null
36419
36686
  });
@@ -36432,7 +36699,7 @@ var generateSegmentLoader = function generateSegmentLoader(_ref) {
36432
36699
  return regularSegmentLoader(url, content, callbacks, cancelSignal, checkMediaSegmentIntegrity);
36433
36700
  }
36434
36701
 
36435
- return new promise/* default */.Z(function (res, rej) {
36702
+ return new Promise(function (res, rej) {
36436
36703
  /** `true` when the custom segmentLoader should not be active anymore. */
36437
36704
  var hasFinished = false;
36438
36705
  /**
@@ -36580,7 +36847,6 @@ var generateSegmentLoader = function generateSegmentLoader(_ref) {
36580
36847
 
36581
36848
 
36582
36849
 
36583
-
36584
36850
  var WSX_REG = /\.wsx?(\?token=\S+)?/;
36585
36851
  /**
36586
36852
  * @param {Object} adaptation
@@ -36616,7 +36882,7 @@ function addNextSegments(adaptation, nextSegments, dlSegment) {
36616
36882
  // TODO (v4.x.x) Remove that function
36617
36883
  resolveManifestUrl: function resolveManifestUrl(url, cancelSignal) {
36618
36884
  if (url === undefined) {
36619
- return promise/* default.resolve */.Z.resolve(undefined);
36885
+ return Promise.resolve(undefined);
36620
36886
  }
36621
36887
 
36622
36888
  var resolving;
@@ -36637,7 +36903,7 @@ function addNextSegments(adaptation, nextSegments, dlSegment) {
36637
36903
  return extractedURL;
36638
36904
  });
36639
36905
  } else {
36640
- resolving = promise/* default.resolve */.Z.resolve(url);
36906
+ resolving = Promise.resolve(url);
36641
36907
  }
36642
36908
 
36643
36909
  var token = extractToken(url);
@@ -36761,7 +37027,7 @@ function addNextSegments(adaptation, nextSegments, dlSegment) {
36761
37027
  representation = content.representation;
36762
37028
 
36763
37029
  if (segment.isInit || url === null) {
36764
- return promise/* default.resolve */.Z.resolve({
37030
+ return Promise.resolve({
36765
37031
  resultType: "segment-created",
36766
37032
  resultData: null
36767
37033
  });
@@ -37286,8 +37552,6 @@ var assert_unreachable = __webpack_require__(7904);
37286
37552
  var request = __webpack_require__(4597);
37287
37553
  // EXTERNAL MODULE: ./src/errors/custom_loader_error.ts
37288
37554
  var custom_loader_error = __webpack_require__(7839);
37289
- // EXTERNAL MODULE: ./src/utils/promise.ts
37290
- var promise = __webpack_require__(9589);
37291
37555
  ;// CONCATENATED MODULE: ./src/transports/utils/call_custom_manifest_loader.ts
37292
37556
  /**
37293
37557
  * Copyright 2015 CANAL+ Group
@@ -37305,10 +37569,9 @@ var promise = __webpack_require__(9589);
37305
37569
  * limitations under the License.
37306
37570
  */
37307
37571
 
37308
-
37309
37572
  function callCustomManifestLoader(customManifestLoader, fallbackManifestLoader) {
37310
37573
  return function (url, cancelSignal) {
37311
- return new promise/* default */.Z(function (res, rej) {
37574
+ return new Promise(function (res, rej) {
37312
37575
  var timeAPIsDelta = Date.now() - performance.now();
37313
37576
  /** `true` when the custom segmentLoader should not be active anymore. */
37314
37577
 
@@ -38315,7 +38578,6 @@ function toUint8Array(input) {
38315
38578
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
38316
38579
  /* harmony export */ "Z": function() { return /* binding */ cancellableSleep; }
38317
38580
  /* harmony export */ });
38318
- /* harmony import */ var _promise__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9589);
38319
38581
  /**
38320
38582
  * Copyright 2015 CANAL+ Group
38321
38583
  *
@@ -38345,9 +38607,8 @@ function toUint8Array(input) {
38345
38607
  * @returns {Promise} - Resolve on timeout completion, rejects on timeout
38346
38608
  * cancellation with the corresponding `CancellationError`.
38347
38609
  */
38348
-
38349
38610
  function cancellableSleep(delay, cancellationSignal) {
38350
- return new _promise__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(function (res, rej) {
38611
+ return new Promise(function (res, rej) {
38351
38612
  var timeout = setTimeout(function () {
38352
38613
  unregisterCancelSignal();
38353
38614
  res();
@@ -38366,10 +38627,9 @@ function cancellableSleep(delay, cancellationSignal) {
38366
38627
 
38367
38628
  "use strict";
38368
38629
  /* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1480);
38369
- /* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3102);
38370
- /* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2817);
38371
- /* harmony import */ var _is_null_or_undefined__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1946);
38372
- /* harmony import */ var _promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9589);
38630
+ /* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3102);
38631
+ /* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2817);
38632
+ /* harmony import */ var _is_null_or_undefined__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1946);
38373
38633
  /**
38374
38634
  * Copyright 2015 CANAL+ Group
38375
38635
  *
@@ -38387,7 +38647,6 @@ function cancellableSleep(delay, cancellationSignal) {
38387
38647
  */
38388
38648
 
38389
38649
 
38390
-
38391
38650
  /**
38392
38651
  * Try to cast the given value into an observable.
38393
38652
  * StraightForward - test first for an Observable then for a Promise.
@@ -38398,11 +38657,11 @@ function cancellableSleep(delay, cancellationSignal) {
38398
38657
  function castToObservable(value) {
38399
38658
  if (value instanceof rxjs__WEBPACK_IMPORTED_MODULE_0__/* .Observable */ .y) {
38400
38659
  return value;
38401
- } else if (value instanceof _promise__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z || value instanceof Promise || !(0,_is_null_or_undefined__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(value) && typeof value.then === "function") {
38402
- return (0,rxjs__WEBPACK_IMPORTED_MODULE_3__/* .from */ .D)(value);
38660
+ } else if (value instanceof Promise || !(0,_is_null_or_undefined__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) && typeof value.then === "function") {
38661
+ return (0,rxjs__WEBPACK_IMPORTED_MODULE_2__/* .from */ .D)(value);
38403
38662
  }
38404
38663
 
38405
- return (0,rxjs__WEBPACK_IMPORTED_MODULE_4__.of)(value);
38664
+ return (0,rxjs__WEBPACK_IMPORTED_MODULE_3__.of)(value);
38406
38665
  }
38407
38666
 
38408
38667
  /* harmony default export */ __webpack_exports__["Z"] = (castToObservable);
@@ -39669,32 +39928,6 @@ function objectValues(o) {
39669
39928
  /* harmony default export */ __webpack_exports__["Z"] = (typeof Object.values === "function" ? Object.values : objectValues);
39670
39929
 
39671
39930
 
39672
- /***/ }),
39673
-
39674
- /***/ 9589:
39675
- /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
39676
-
39677
- "use strict";
39678
- /* harmony import */ var pinkie__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8555);
39679
- /* harmony import */ var pinkie__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(pinkie__WEBPACK_IMPORTED_MODULE_0__);
39680
- /**
39681
- * Copyright 2015 CANAL+ Group
39682
- *
39683
- * Licensed under the Apache License, Version 2.0 (the "License");
39684
- * you may not use this file except in compliance with the License.
39685
- * You may obtain a copy of the License at
39686
- *
39687
- * http://www.apache.org/licenses/LICENSE-2.0
39688
- *
39689
- * Unless required by applicable law or agreed to in writing, software
39690
- * distributed under the License is distributed on an "AS IS" BASIS,
39691
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
39692
- * See the License for the specific language governing permissions and
39693
- * limitations under the License.
39694
- */
39695
-
39696
- /* harmony default export */ __webpack_exports__["Z"] = (typeof Promise === "function" ? Promise : (pinkie__WEBPACK_IMPORTED_MODULE_0___default()));
39697
-
39698
39931
  /***/ }),
39699
39932
 
39700
39933
  /***/ 2829:
@@ -40481,8 +40714,6 @@ var request_error = __webpack_require__(9105);
40481
40714
  var is_non_empty_string = __webpack_require__(6923);
40482
40715
  // EXTERNAL MODULE: ./src/utils/is_null_or_undefined.ts
40483
40716
  var is_null_or_undefined = __webpack_require__(1946);
40484
- // EXTERNAL MODULE: ./src/utils/promise.ts
40485
- var promise = __webpack_require__(9589);
40486
40717
  ;// CONCATENATED MODULE: ./src/utils/request/xhr.ts
40487
40718
  /**
40488
40719
  * Copyright 2015 CANAL+ Group
@@ -40503,7 +40734,6 @@ var promise = __webpack_require__(9589);
40503
40734
 
40504
40735
 
40505
40736
 
40506
-
40507
40737
  var DEFAULT_RESPONSE_TYPE = "json";
40508
40738
  function request(options) {
40509
40739
  var _config$getCurrent = config/* default.getCurrent */.Z.getCurrent(),
@@ -40515,7 +40745,7 @@ function request(options) {
40515
40745
  responseType: (0,is_null_or_undefined/* default */.Z)(options.responseType) ? DEFAULT_RESPONSE_TYPE : options.responseType,
40516
40746
  timeout: (0,is_null_or_undefined/* default */.Z)(options.timeout) ? DEFAULT_REQUEST_TIMEOUT : options.timeout
40517
40747
  };
40518
- return new promise/* default */.Z(function (resolve, reject) {
40748
+ return new Promise(function (resolve, reject) {
40519
40749
  var onProgress = options.onProgress,
40520
40750
  cancelSignal = options.cancelSignal;
40521
40751
  var url = requestOptions.url,
@@ -41834,306 +42064,6 @@ module.exports = (function () {
41834
42064
  }());
41835
42065
 
41836
42066
 
41837
- /***/ }),
41838
-
41839
- /***/ 8555:
41840
- /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
41841
-
41842
- "use strict";
41843
-
41844
-
41845
- var PENDING = 'pending';
41846
- var SETTLED = 'settled';
41847
- var FULFILLED = 'fulfilled';
41848
- var REJECTED = 'rejected';
41849
- var NOOP = function () {};
41850
- var isNode = typeof __webpack_require__.g !== 'undefined' && typeof __webpack_require__.g.process !== 'undefined' && typeof __webpack_require__.g.process.emit === 'function';
41851
-
41852
- var asyncSetTimer = typeof setImmediate === 'undefined' ? setTimeout : setImmediate;
41853
- var asyncQueue = [];
41854
- var asyncTimer;
41855
-
41856
- function asyncFlush() {
41857
- // run promise callbacks
41858
- for (var i = 0; i < asyncQueue.length; i++) {
41859
- asyncQueue[i][0](asyncQueue[i][1]);
41860
- }
41861
-
41862
- // reset async asyncQueue
41863
- asyncQueue = [];
41864
- asyncTimer = false;
41865
- }
41866
-
41867
- function asyncCall(callback, arg) {
41868
- asyncQueue.push([callback, arg]);
41869
-
41870
- if (!asyncTimer) {
41871
- asyncTimer = true;
41872
- asyncSetTimer(asyncFlush, 0);
41873
- }
41874
- }
41875
-
41876
- function invokeResolver(resolver, promise) {
41877
- function resolvePromise(value) {
41878
- resolve(promise, value);
41879
- }
41880
-
41881
- function rejectPromise(reason) {
41882
- reject(promise, reason);
41883
- }
41884
-
41885
- try {
41886
- resolver(resolvePromise, rejectPromise);
41887
- } catch (e) {
41888
- rejectPromise(e);
41889
- }
41890
- }
41891
-
41892
- function invokeCallback(subscriber) {
41893
- var owner = subscriber.owner;
41894
- var settled = owner._state;
41895
- var value = owner._data;
41896
- var callback = subscriber[settled];
41897
- var promise = subscriber.then;
41898
-
41899
- if (typeof callback === 'function') {
41900
- settled = FULFILLED;
41901
- try {
41902
- value = callback(value);
41903
- } catch (e) {
41904
- reject(promise, e);
41905
- }
41906
- }
41907
-
41908
- if (!handleThenable(promise, value)) {
41909
- if (settled === FULFILLED) {
41910
- resolve(promise, value);
41911
- }
41912
-
41913
- if (settled === REJECTED) {
41914
- reject(promise, value);
41915
- }
41916
- }
41917
- }
41918
-
41919
- function handleThenable(promise, value) {
41920
- var resolved;
41921
-
41922
- try {
41923
- if (promise === value) {
41924
- throw new TypeError('A promises callback cannot return that same promise.');
41925
- }
41926
-
41927
- if (value && (typeof value === 'function' || typeof value === 'object')) {
41928
- // then should be retrieved only once
41929
- var then = value.then;
41930
-
41931
- if (typeof then === 'function') {
41932
- then.call(value, function (val) {
41933
- if (!resolved) {
41934
- resolved = true;
41935
-
41936
- if (value === val) {
41937
- fulfill(promise, val);
41938
- } else {
41939
- resolve(promise, val);
41940
- }
41941
- }
41942
- }, function (reason) {
41943
- if (!resolved) {
41944
- resolved = true;
41945
-
41946
- reject(promise, reason);
41947
- }
41948
- });
41949
-
41950
- return true;
41951
- }
41952
- }
41953
- } catch (e) {
41954
- if (!resolved) {
41955
- reject(promise, e);
41956
- }
41957
-
41958
- return true;
41959
- }
41960
-
41961
- return false;
41962
- }
41963
-
41964
- function resolve(promise, value) {
41965
- if (promise === value || !handleThenable(promise, value)) {
41966
- fulfill(promise, value);
41967
- }
41968
- }
41969
-
41970
- function fulfill(promise, value) {
41971
- if (promise._state === PENDING) {
41972
- promise._state = SETTLED;
41973
- promise._data = value;
41974
-
41975
- asyncCall(publishFulfillment, promise);
41976
- }
41977
- }
41978
-
41979
- function reject(promise, reason) {
41980
- if (promise._state === PENDING) {
41981
- promise._state = SETTLED;
41982
- promise._data = reason;
41983
-
41984
- asyncCall(publishRejection, promise);
41985
- }
41986
- }
41987
-
41988
- function publish(promise) {
41989
- promise._then = promise._then.forEach(invokeCallback);
41990
- }
41991
-
41992
- function publishFulfillment(promise) {
41993
- promise._state = FULFILLED;
41994
- publish(promise);
41995
- }
41996
-
41997
- function publishRejection(promise) {
41998
- promise._state = REJECTED;
41999
- publish(promise);
42000
- if (!promise._handled && isNode) {
42001
- __webpack_require__.g.process.emit('unhandledRejection', promise._data, promise);
42002
- }
42003
- }
42004
-
42005
- function notifyRejectionHandled(promise) {
42006
- __webpack_require__.g.process.emit('rejectionHandled', promise);
42007
- }
42008
-
42009
- /**
42010
- * @class
42011
- */
42012
- function Promise(resolver) {
42013
- if (typeof resolver !== 'function') {
42014
- throw new TypeError('Promise resolver ' + resolver + ' is not a function');
42015
- }
42016
-
42017
- if (this instanceof Promise === false) {
42018
- throw new TypeError('Failed to construct \'Promise\': Please use the \'new\' operator, this object constructor cannot be called as a function.');
42019
- }
42020
-
42021
- this._then = [];
42022
-
42023
- invokeResolver(resolver, this);
42024
- }
42025
-
42026
- Promise.prototype = {
42027
- constructor: Promise,
42028
-
42029
- _state: PENDING,
42030
- _then: null,
42031
- _data: undefined,
42032
- _handled: false,
42033
-
42034
- then: function (onFulfillment, onRejection) {
42035
- var subscriber = {
42036
- owner: this,
42037
- then: new this.constructor(NOOP),
42038
- fulfilled: onFulfillment,
42039
- rejected: onRejection
42040
- };
42041
-
42042
- if ((onRejection || onFulfillment) && !this._handled) {
42043
- this._handled = true;
42044
- if (this._state === REJECTED && isNode) {
42045
- asyncCall(notifyRejectionHandled, this);
42046
- }
42047
- }
42048
-
42049
- if (this._state === FULFILLED || this._state === REJECTED) {
42050
- // already resolved, call callback async
42051
- asyncCall(invokeCallback, subscriber);
42052
- } else {
42053
- // subscribe
42054
- this._then.push(subscriber);
42055
- }
42056
-
42057
- return subscriber.then;
42058
- },
42059
-
42060
- catch: function (onRejection) {
42061
- return this.then(null, onRejection);
42062
- }
42063
- };
42064
-
42065
- Promise.all = function (promises) {
42066
- if (!Array.isArray(promises)) {
42067
- throw new TypeError('You must pass an array to Promise.all().');
42068
- }
42069
-
42070
- return new Promise(function (resolve, reject) {
42071
- var results = [];
42072
- var remaining = 0;
42073
-
42074
- function resolver(index) {
42075
- remaining++;
42076
- return function (value) {
42077
- results[index] = value;
42078
- if (!--remaining) {
42079
- resolve(results);
42080
- }
42081
- };
42082
- }
42083
-
42084
- for (var i = 0, promise; i < promises.length; i++) {
42085
- promise = promises[i];
42086
-
42087
- if (promise && typeof promise.then === 'function') {
42088
- promise.then(resolver(i), reject);
42089
- } else {
42090
- results[i] = promise;
42091
- }
42092
- }
42093
-
42094
- if (!remaining) {
42095
- resolve(results);
42096
- }
42097
- });
42098
- };
42099
-
42100
- Promise.race = function (promises) {
42101
- if (!Array.isArray(promises)) {
42102
- throw new TypeError('You must pass an array to Promise.race().');
42103
- }
42104
-
42105
- return new Promise(function (resolve, reject) {
42106
- for (var i = 0, promise; i < promises.length; i++) {
42107
- promise = promises[i];
42108
-
42109
- if (promise && typeof promise.then === 'function') {
42110
- promise.then(resolve, reject);
42111
- } else {
42112
- resolve(promise);
42113
- }
42114
- }
42115
- });
42116
- };
42117
-
42118
- Promise.resolve = function (value) {
42119
- if (value && typeof value === 'object' && value.constructor === Promise) {
42120
- return value;
42121
- }
42122
-
42123
- return new Promise(function (resolve) {
42124
- resolve(value);
42125
- });
42126
- };
42127
-
42128
- Promise.reject = function (reason) {
42129
- return new Promise(function (resolve, reject) {
42130
- reject(reason);
42131
- });
42132
- };
42133
-
42134
- module.exports = Promise;
42135
-
42136
-
42137
42067
  /***/ }),
42138
42068
 
42139
42069
  /***/ 5666:
@@ -46531,18 +46461,6 @@ function _wrapNativeSuper(Class) {
46531
46461
  /******/ };
46532
46462
  /******/ }();
46533
46463
  /******/
46534
- /******/ /* webpack/runtime/global */
46535
- /******/ !function() {
46536
- /******/ __webpack_require__.g = (function() {
46537
- /******/ if (typeof globalThis === 'object') return globalThis;
46538
- /******/ try {
46539
- /******/ return this || new Function('return this')();
46540
- /******/ } catch (e) {
46541
- /******/ if (typeof window === 'object') return window;
46542
- /******/ }
46543
- /******/ })();
46544
- /******/ }();
46545
- /******/
46546
46464
  /******/ /* webpack/runtime/hasOwnProperty shorthand */
46547
46465
  /******/ !function() {
46548
46466
  /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
@@ -46853,8 +46771,6 @@ var event_emitter = __webpack_require__(1959);
46853
46771
  var is_null_or_undefined = __webpack_require__(1946);
46854
46772
  // EXTERNAL MODULE: ./src/utils/object_assign.ts
46855
46773
  var object_assign = __webpack_require__(8026);
46856
- // EXTERNAL MODULE: ./src/utils/promise.ts
46857
- var promise = __webpack_require__(9589);
46858
46774
  // EXTERNAL MODULE: ./src/utils/ranges.ts
46859
46775
  var ranges = __webpack_require__(2829);
46860
46776
  // EXTERNAL MODULE: ./src/utils/reference.ts
@@ -47011,7 +46927,6 @@ function shouldUnsetMediaKeys() {
47011
46927
 
47012
46928
 
47013
46929
 
47014
-
47015
46930
  /**
47016
46931
  * Clear DRM-related resources that should be cleared when the current content
47017
46932
  * stops its playback.
@@ -47035,7 +46950,7 @@ function clearOnStop(mediaElement) {
47035
46950
  }
47036
46951
 
47037
46952
  log/* default.info */.Z.info("DRM: Nothing to clear. Returning right away. No state =", currentState === null);
47038
- return promise/* default.resolve */.Z.resolve();
46953
+ return Promise.resolve();
47039
46954
  }
47040
46955
  // EXTERNAL MODULE: ./src/utils/assert.ts
47041
46956
  var assert = __webpack_require__(811);
@@ -47157,7 +47072,6 @@ var get_fuzzed_delay = __webpack_require__(2572);
47157
47072
 
47158
47073
 
47159
47074
 
47160
-
47161
47075
  /**
47162
47076
  * Called on a loader error.
47163
47077
  * Returns whether the loader request should be retried.
@@ -47268,7 +47182,7 @@ function getRequestErrorType(error) {
47268
47182
 
47269
47183
  function tryURLsWithBackoff(urls, performRequest, options, cancellationSignal) {
47270
47184
  if (cancellationSignal.isCancelled) {
47271
- return promise/* default.reject */.Z.reject(cancellationSignal.cancellationError);
47185
+ return Promise.reject(cancellationSignal.cancellationError);
47272
47186
  }
47273
47187
 
47274
47188
  var baseDelay = options.baseDelay,
@@ -47284,7 +47198,7 @@ function tryURLsWithBackoff(urls, performRequest, options, cancellationSignal) {
47284
47198
 
47285
47199
  if (urlsToTry.length === 0) {
47286
47200
  log/* default.warn */.Z.warn("Fetchers: no URL given to `tryURLsWithBackoff`.");
47287
- return promise/* default.reject */.Z.reject(new Error("No URL to request"));
47201
+ return Promise.reject(new Error("No URL to request"));
47288
47202
  }
47289
47203
 
47290
47204
  return tryURLsRecursively(urlsToTry[0], 0);
@@ -47479,7 +47393,6 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
47479
47393
 
47480
47394
 
47481
47395
 
47482
-
47483
47396
  /**
47484
47397
  * Class allowing to facilitate the task of loading and parsing a Manifest.
47485
47398
  * @class ManifestFetcher
@@ -47845,7 +47758,7 @@ var ManifestFetcher = /*#__PURE__*/function () {
47845
47758
 
47846
47759
 
47847
47760
  function isPromise(val) {
47848
- return val instanceof promise/* default */.Z || val instanceof Promise;
47761
+ return val instanceof Promise;
47849
47762
  }
47850
47763
  ;// CONCATENATED MODULE: ./src/core/fetchers/manifest/index.ts
47851
47764
  /**
@@ -54256,7 +54169,7 @@ function appendSegmentToBuffer(playbackObserver, segmentBuffer, dataInfos) {
54256
54169
  throw new media_error/* default */.Z("BUFFER_APPEND_ERROR", reason);
54257
54170
  }
54258
54171
 
54259
- return playbackObserver.observe(true).pipe((0,mergeMap/* mergeMap */.z)(function (observation) {
54172
+ return playbackObserver.observe(true).pipe((0,take/* take */.q)(1), (0,mergeMap/* mergeMap */.z)(function (observation) {
54260
54173
  var currentPos = observation.position + observation.wantedTimeOffset;
54261
54174
  return (0,concat/* concat */.z)(forceGarbageCollection(currentPos, segmentBuffer).pipe((0,ignoreElements/* ignoreElements */.l)()), append$).pipe((0,catchError/* catchError */.K)(function (forcedGCError) {
54262
54175
  var reason = forcedGCError instanceof Error ? forcedGCError.toString() : "Could not clean the buffer";
@@ -55339,8 +55252,10 @@ function getAdaptationSwitchStrategy(segmentBuffer, period, adaptation, playback
55339
55252
  }
55340
55253
 
55341
55254
  var currentTime = playbackInfo.currentTime;
55255
+ var audioTrackSwitchingMode = options.audioTrackSwitchingMode;
55256
+ var hasReloadSwitchingMode = adaptation.type === "video" || adaptation.type === "audio" && audioTrackSwitchingMode === "reload";
55342
55257
 
55343
- if (adaptation.type === "video" && // We're playing the current Period
55258
+ if (hasReloadSwitchingMode && // We're playing the current Period
55344
55259
  (0,ranges/* isTimeInRange */.Ti)({
55345
55260
  start: start,
55346
55261
  end: end
@@ -55358,7 +55273,7 @@ function getAdaptationSwitchStrategy(segmentBuffer, period, adaptation, playback
55358
55273
  } // From here, clean-up data from the previous Adaptation, if one
55359
55274
 
55360
55275
 
55361
- var shouldFlush = adaptation.type === "audio" && options.audioTrackSwitchingMode === "direct";
55276
+ var shouldFlush = adaptation.type === "audio" && audioTrackSwitchingMode === "direct";
55362
55277
  var rangesToExclude = []; // First, we don't want to accidentally remove some segments from the previous
55363
55278
  // Period (which overlap a little with this one)
55364
55279
 
@@ -58421,8 +58336,8 @@ function parseLoadVideoOptions(options) {
58421
58336
  var minimumManifestUpdateInterval = (_e = (_d = options.transportOptions) === null || _d === void 0 ? void 0 : _d.minimumManifestUpdateInterval) !== null && _e !== void 0 ? _e : 0;
58422
58337
  var audioTrackSwitchingMode = (0,is_null_or_undefined/* default */.Z)(options.audioTrackSwitchingMode) ? DEFAULT_AUDIO_TRACK_SWITCHING_MODE : options.audioTrackSwitchingMode;
58423
58338
 
58424
- if (!(0,array_includes/* default */.Z)(["seamless", "direct"], audioTrackSwitchingMode)) {
58425
- log/* default.warn */.Z.warn("The `audioTrackSwitchingMode` loadVideo option must match one of " + "the following strategy name:\n" + "- `seamless`\n" + "- `direct`\n" + "If badly set, " + DEFAULT_AUDIO_TRACK_SWITCHING_MODE + " strategy will be used as default");
58339
+ if (!(0,array_includes/* default */.Z)(["seamless", "direct", "reload"], audioTrackSwitchingMode)) {
58340
+ log/* default.warn */.Z.warn("The `audioTrackSwitchingMode` loadVideo option must match one of " + "the following strategy name:\n" + "- `seamless`\n" + "- `direct`\n" + "- `reload`\n" + "If badly set, " + DEFAULT_AUDIO_TRACK_SWITCHING_MODE + " strategy will be used as default");
58426
58341
  audioTrackSwitchingMode = DEFAULT_AUDIO_TRACK_SWITCHING_MODE;
58427
58342
  }
58428
58343
 
@@ -60463,7 +60378,6 @@ function getRightVideoTrack(adaptation, isTrickModeEnabled) {
60463
60378
 
60464
60379
 
60465
60380
 
60466
-
60467
60381
 
60468
60382
 
60469
60383
  /* eslint-disable @typescript-eslint/naming-convention */
@@ -60526,7 +60440,7 @@ var Player = /*#__PURE__*/function (_EventEmitter) {
60526
60440
  videoElement.preload = "auto";
60527
60441
  _this.version =
60528
60442
  /* PLAYER_VERSION */
60529
- "3.27.0-dev.2022031700";
60443
+ "3.27.0-dev.2022032800";
60530
60444
  _this.log = log/* default */.Z;
60531
60445
  _this.state = "STOPPED";
60532
60446
  _this.videoElement = videoElement;
@@ -61711,7 +61625,7 @@ var Player = /*#__PURE__*/function (_EventEmitter) {
61711
61625
 
61712
61626
  if ((0,is_null_or_undefined/* default */.Z)(playPromise) || typeof playPromise["catch"] !== "function") {
61713
61627
  /* eslint-enable @typescript-eslint/unbound-method */
61714
- return promise/* default.resolve */.Z.resolve();
61628
+ return Promise.resolve();
61715
61629
  }
61716
61630
 
61717
61631
  return playPromise["catch"](function (error) {
@@ -63355,7 +63269,7 @@ var Player = /*#__PURE__*/function (_EventEmitter) {
63355
63269
 
63356
63270
  Player.version =
63357
63271
  /* PLAYER_VERSION */
63358
- "3.27.0-dev.2022031700";
63272
+ "3.27.0-dev.2022032800";
63359
63273
  /* harmony default export */ var public_api = (Player);
63360
63274
  ;// CONCATENATED MODULE: ./src/core/api/index.ts
63361
63275
  /**