rx-player 3.26.2 → 3.27.0-dev.20220317

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 (500) hide show
  1. package/.github/workflows/perfs.yml +22 -0
  2. package/CHANGELOG.md +33 -1
  3. package/FILES.md +5 -4
  4. package/VERSION +1 -1
  5. package/dist/_esm5.processed/compat/browser_detection.d.ts +4 -2
  6. package/dist/_esm5.processed/compat/browser_detection.js +4 -2
  7. package/dist/_esm5.processed/compat/eme/close_session.d.ts +11 -5
  8. package/dist/_esm5.processed/compat/eme/close_session.js +144 -36
  9. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -5
  10. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +27 -24
  11. package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +53 -34
  12. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +43 -41
  13. package/dist/_esm5.processed/compat/eme/generate_key_request.d.ts +2 -3
  14. package/dist/_esm5.processed/compat/eme/generate_key_request.js +22 -26
  15. package/dist/_esm5.processed/compat/eme/load_session.d.ts +1 -2
  16. package/dist/_esm5.processed/compat/eme/load_session.js +68 -17
  17. package/dist/_esm5.processed/compat/event_listeners.js +2 -1
  18. package/dist/_esm5.processed/compat/should_favour_custom_safari_EME.js +2 -2
  19. package/dist/_esm5.processed/config.d.ts +166 -1080
  20. package/dist/_esm5.processed/config.js +17 -1119
  21. package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +4 -1
  22. package/dist/_esm5.processed/core/abr/buffer_based_chooser.d.ts +28 -6
  23. package/dist/_esm5.processed/core/abr/buffer_based_chooser.js +63 -12
  24. package/dist/_esm5.processed/core/abr/network_analyzer.d.ts +1 -1
  25. package/dist/_esm5.processed/core/abr/network_analyzer.js +2 -1
  26. package/dist/_esm5.processed/core/abr/pending_requests_store.js +3 -5
  27. package/dist/_esm5.processed/core/abr/representation_estimator.d.ts +1 -1
  28. package/dist/_esm5.processed/core/abr/representation_estimator.js +2 -2
  29. package/dist/_esm5.processed/core/api/get_player_state.js +1 -1
  30. package/dist/_esm5.processed/core/api/index.d.ts +2 -1
  31. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.d.ts +6 -0
  32. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +22 -4
  33. package/dist/_esm5.processed/core/api/option_utils.d.ts +3 -1
  34. package/dist/_esm5.processed/core/api/option_utils.js +19 -6
  35. package/dist/_esm5.processed/core/api/playback_observer.js +5 -1
  36. package/dist/_esm5.processed/core/api/public_api.d.ts +82 -71
  37. package/dist/_esm5.processed/core/api/public_api.js +72 -33
  38. package/dist/_esm5.processed/core/api/track_choice_manager.d.ts +6 -6
  39. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.d.ts +7 -51
  40. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.js +30 -75
  41. package/dist/_esm5.processed/core/{eme → decrypt}/attach_media_keys.d.ts +12 -12
  42. package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +104 -0
  43. package/dist/_esm5.processed/core/{eme/clear_eme_session.d.ts → decrypt/clear_on_stop.d.ts} +3 -4
  44. package/dist/_esm5.processed/core/decrypt/clear_on_stop.js +41 -0
  45. package/dist/_esm5.processed/core/decrypt/content_decryptor.d.ts +216 -0
  46. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +866 -0
  47. package/dist/_esm5.processed/core/{eme/get_session.d.ts → decrypt/create_or_load_session.d.ts} +28 -26
  48. package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +124 -0
  49. package/dist/_esm5.processed/core/{eme → decrypt}/create_session.d.ts +22 -19
  50. package/dist/_esm5.processed/core/decrypt/create_session.js +174 -0
  51. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.d.ts +21 -0
  52. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.js +81 -0
  53. package/dist/_esm5.processed/core/{eme → decrypt}/find_key_system.d.ts +11 -14
  54. package/dist/_esm5.processed/core/decrypt/find_key_system.js +300 -0
  55. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.d.ts +0 -0
  56. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.js +1 -1
  57. package/dist/_esm5.processed/core/{eme → decrypt}/get_media_keys.d.ts +13 -5
  58. package/dist/_esm5.processed/core/decrypt/get_media_keys.js +153 -0
  59. package/dist/_esm5.processed/core/{eme → decrypt}/index.d.ts +5 -6
  60. package/dist/_esm5.processed/core/{eme → decrypt}/index.js +5 -5
  61. package/dist/_esm5.processed/core/{eme → decrypt}/init_media_keys.d.ts +6 -4
  62. package/dist/_esm5.processed/core/decrypt/init_media_keys.js +82 -0
  63. package/dist/_esm5.processed/core/decrypt/session_events_listener.d.ts +77 -0
  64. package/dist/_esm5.processed/core/{eme → decrypt}/session_events_listener.js +25 -24
  65. package/dist/_esm5.processed/core/{eme → decrypt}/set_server_certificate.d.ts +15 -6
  66. package/dist/_esm5.processed/core/decrypt/set_server_certificate.js +141 -0
  67. package/dist/_esm5.processed/core/{eme → decrypt}/types.d.ts +120 -242
  68. package/dist/_esm5.processed/core/{eme → decrypt}/types.js +0 -0
  69. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.d.ts +3 -3
  70. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.js +5 -5
  71. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.d.ts +2 -2
  72. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.js +4 -3
  73. package/dist/_esm5.processed/core/{eme/utils/close_session.d.ts → decrypt/utils/clean_old_loaded_sessions.d.ts} +8 -7
  74. package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +85 -0
  75. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.d.ts +1 -1
  76. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.js +2 -2
  77. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.d.ts +0 -0
  78. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.js +1 -1
  79. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.d.ts +69 -0
  80. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.js +99 -0
  81. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.d.ts +0 -1
  82. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.js +4 -5
  83. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.d.ts +44 -0
  84. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.js +77 -0
  85. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.d.ts +104 -0
  86. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.js +155 -0
  87. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.d.ts +108 -0
  88. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +303 -0
  89. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.d.ts +4 -4
  90. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.js +0 -0
  91. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.d.ts +8 -18
  92. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.js +119 -97
  93. package/dist/_esm5.processed/core/{eme/utils/init_data_container.d.ts → decrypt/utils/serializable_bytes.d.ts} +8 -5
  94. package/dist/_esm5.processed/core/{eme/utils/init_data_container.js → decrypt/utils/serializable_bytes.js} +9 -9
  95. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.d.ts +1 -1
  96. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.js +1 -1
  97. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +4 -4
  98. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +3 -3
  99. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +2 -2
  100. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +6 -2
  101. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
  102. package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +1 -1
  103. package/dist/_esm5.processed/core/init/get_initial_time.js +1 -1
  104. package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +3 -3
  105. package/dist/_esm5.processed/core/init/initialize_directfile.js +11 -17
  106. package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +5 -3
  107. package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -69
  108. package/dist/_esm5.processed/core/init/link_drm_and_content.d.ts +61 -0
  109. package/dist/_esm5.processed/core/init/link_drm_and_content.js +94 -0
  110. package/dist/_esm5.processed/core/init/manifest_update_scheduler.d.ts +4 -4
  111. package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +2 -1
  112. package/dist/_esm5.processed/core/init/stall_avoider.js +1 -1
  113. package/dist/_esm5.processed/core/init/stream_events_emitter/are_same_stream_events.d.ts +4 -4
  114. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +1 -1
  115. package/dist/_esm5.processed/core/init/stream_events_emitter/types.d.ts +2 -2
  116. package/dist/_esm5.processed/core/init/types.d.ts +2 -4
  117. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +1 -1
  118. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.d.ts +3 -3
  119. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +3 -1
  120. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +32 -31
  121. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +4 -4
  122. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +17 -1
  123. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +22 -5
  124. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +2 -1
  125. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +6 -3
  126. package/dist/_esm5.processed/core/stream/events_generators.d.ts +8 -3
  127. package/dist/_esm5.processed/core/stream/events_generators.js +3 -2
  128. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +1 -0
  129. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +3 -3
  130. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +2 -1
  131. package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.js +1 -1
  132. package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +2 -1
  133. package/dist/_esm5.processed/core/stream/period/period_stream.js +3 -3
  134. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +5 -6
  135. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +6 -1
  136. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +12 -9
  137. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.d.ts +19 -14
  138. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +86 -10
  139. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +1 -1
  140. package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -3
  141. package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +6 -0
  142. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +19 -8
  143. package/dist/_esm5.processed/core/stream/types.d.ts +1 -1
  144. package/dist/_esm5.processed/default_config.d.ts +1114 -0
  145. package/dist/_esm5.processed/default_config.js +1145 -0
  146. package/dist/_esm5.processed/errors/request_error.js +3 -1
  147. package/dist/_esm5.processed/experimental/index.d.ts +2 -0
  148. package/dist/_esm5.processed/experimental/index.js +2 -0
  149. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +1 -0
  150. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.d.ts +2 -2
  151. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +2 -4
  152. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +1 -1
  153. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +1 -1
  154. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +1 -2
  155. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.js +1 -2
  156. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/types.d.ts +3 -3
  157. package/dist/_esm5.processed/features/features_object.js +1 -1
  158. package/dist/_esm5.processed/features/initialize_features.js +1 -1
  159. package/dist/_esm5.processed/features/list/eme.d.ts +3 -3
  160. package/dist/_esm5.processed/features/list/eme.js +5 -5
  161. package/dist/_esm5.processed/features/types.d.ts +3 -3
  162. package/dist/_esm5.processed/manifest/adaptation.d.ts +2 -2
  163. package/dist/_esm5.processed/manifest/adaptation.js +3 -1
  164. package/dist/_esm5.processed/manifest/manifest.d.ts +10 -23
  165. package/dist/_esm5.processed/manifest/manifest.js +10 -74
  166. package/dist/_esm5.processed/manifest/period.d.ts +3 -3
  167. package/dist/_esm5.processed/manifest/representation.d.ts +37 -5
  168. package/dist/_esm5.processed/manifest/representation_index/types.d.ts +18 -18
  169. package/dist/_esm5.processed/manifest/types.d.ts +3 -3
  170. package/dist/_esm5.processed/parsers/manifest/dash/common/get_hdr_information.d.ts +1 -1
  171. package/dist/_esm5.processed/parsers/manifest/dash/common/get_periods_time_infos.d.ts +3 -3
  172. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +6 -6
  173. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.d.ts +3 -3
  174. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +2 -2
  175. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/is_period_fulfilled.js +1 -2
  176. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +14 -14
  177. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +17 -17
  178. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +1 -2
  179. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.js +1 -1
  180. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +28 -20
  181. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +20 -5
  182. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.d.ts +2 -2
  183. package/dist/_esm5.processed/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +1 -1
  184. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.d.ts +17 -35
  185. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +109 -96
  186. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +8 -8
  187. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -2
  188. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.d.ts +18 -27
  189. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +25 -23
  190. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +21 -15
  191. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +19 -19
  192. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.d.ts +15 -38
  193. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +8 -8
  194. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +30 -30
  195. package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.d.ts +3 -3
  196. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +1 -1
  197. package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.d.ts +2 -2
  198. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +7 -7
  199. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -0
  200. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +8 -8
  201. package/dist/_esm5.processed/parsers/manifest/types.d.ts +28 -28
  202. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.d.ts +3 -2
  203. package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +15 -5
  204. package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.d.ts +2 -2
  205. package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.d.ts +11 -1
  206. package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.js +31 -19
  207. package/dist/_esm5.processed/parsers/texttracks/webvtt/html/to_html.d.ts +2 -2
  208. package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_cue_block.d.ts +1 -1
  209. package/dist/_esm5.processed/public_types.d.ts +2 -2
  210. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +2 -1
  211. package/dist/_esm5.processed/transports/dash/image_pipelines.js +4 -1
  212. package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -1
  213. package/dist/_esm5.processed/transports/dash/manifest_parser.js +1 -1
  214. package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +2 -2
  215. package/dist/_esm5.processed/transports/dash/segment_loader.js +2 -2
  216. package/dist/_esm5.processed/transports/dash/segment_parser.d.ts +1 -1
  217. package/dist/_esm5.processed/transports/dash/segment_parser.js +6 -3
  218. package/dist/_esm5.processed/transports/dash/text_loader.d.ts +1 -1
  219. package/dist/_esm5.processed/transports/dash/text_loader.js +1 -1
  220. package/dist/_esm5.processed/transports/dash/text_parser.d.ts +1 -1
  221. package/dist/_esm5.processed/transports/dash/text_parser.js +8 -2
  222. package/dist/_esm5.processed/transports/local/segment_loader.d.ts +1 -2
  223. package/dist/_esm5.processed/transports/local/segment_loader.js +1 -1
  224. package/dist/_esm5.processed/transports/local/segment_parser.js +4 -1
  225. package/dist/_esm5.processed/transports/local/text_parser.js +8 -2
  226. package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.d.ts +1 -1
  227. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +1 -1
  228. package/dist/_esm5.processed/transports/smooth/pipelines.js +69 -11
  229. package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +0 -1
  230. package/dist/_esm5.processed/transports/smooth/segment_loader.js +2 -2
  231. package/dist/_esm5.processed/transports/types.d.ts +58 -30
  232. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -1
  233. package/dist/_esm5.processed/transports/utils/generate_manifest_loader.d.ts +1 -1
  234. package/dist/_esm5.processed/utils/cancellable_sleep.js +1 -1
  235. package/dist/_esm5.processed/utils/cast_to_observable.d.ts +1 -2
  236. package/dist/_esm5.processed/utils/cast_to_observable.js +1 -1
  237. package/dist/_esm5.processed/utils/deep_merge.d.ts +12 -0
  238. package/dist/_esm5.processed/utils/deep_merge.js +53 -0
  239. package/dist/_esm5.processed/utils/reference.d.ts +29 -0
  240. package/dist/_esm5.processed/utils/reference.js +72 -24
  241. package/dist/_esm5.processed/utils/request/fetch.d.ts +4 -5
  242. package/dist/_esm5.processed/utils/request/fetch.js +8 -6
  243. package/dist/_esm5.processed/utils/request/xhr.d.ts +6 -6
  244. package/dist/_esm5.processed/utils/request/xhr.js +3 -2
  245. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.d.ts +1 -2
  246. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.js +7 -2
  247. package/dist/_esm5.processed/utils/task_canceller.d.ts +5 -3
  248. package/dist/_esm5.processed/utils/task_canceller.js +3 -3
  249. package/dist/rx-player.js +5242 -3190
  250. package/dist/rx-player.min.js +1 -1
  251. package/dummy +1 -0
  252. package/{dist/_esm5.processed/core/eme/dispose_eme.d.ts → experimental/index.d.ts} +1 -4
  253. package/{dist/_esm5.processed/core/eme/dispose_media_keys.d.ts → experimental/index.js} +1 -6
  254. package/package.json +33 -36
  255. package/scripts/build/templates/experimental/index.d.ts +16 -0
  256. package/scripts/build/templates/experimental/index.js +16 -0
  257. package/scripts/doc-generator/generate_header_html.js +6 -7
  258. package/scripts/doc-generator/generate_page_html.js +3 -4
  259. package/scripts/doc-generator/generate_page_list_html.js +4 -5
  260. package/scripts/doc-generator/generate_sidebar_html.js +4 -7
  261. package/scripts/doc-generator/utils.js +0 -11
  262. package/scripts/generate_demo_list.js +3 -3
  263. package/scripts/generate_documentation_list.js +3 -3
  264. package/scripts/launch_static_server.js +127 -67
  265. package/scripts/run_standalone_demo.js +1 -0
  266. package/scripts/start_demo_web_server.js +1 -0
  267. package/sonar-project.properties +1 -1
  268. package/src/README.md +6 -6
  269. package/src/compat/__tests__/fullscreen.test.ts +7 -7
  270. package/src/compat/__tests__/is_vtt_cue.test.ts +1 -1
  271. package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +45 -5
  272. package/src/compat/browser_detection.ts +4 -2
  273. package/src/compat/eme/close_session.ts +90 -56
  274. package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +1 -1
  275. package/src/compat/eme/custom_media_keys/index.ts +28 -41
  276. package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +63 -46
  277. package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +51 -49
  278. package/src/compat/eme/generate_key_request.ts +25 -33
  279. package/src/compat/eme/load_session.ts +29 -31
  280. package/src/compat/event_listeners.ts +2 -1
  281. package/src/compat/should_favour_custom_safari_EME.ts +5 -2
  282. package/src/config.ts +17 -1210
  283. package/src/core/README.md +1 -1
  284. package/src/core/abr/__tests__/{get_estimate_from_buffer_levels.test.ts → buffer_based_chooser.test.ts} +94 -123
  285. package/src/core/abr/bandwidth_estimator.ts +4 -4
  286. package/src/core/abr/buffer_based_chooser.ts +85 -20
  287. package/src/core/abr/network_analyzer.ts +6 -7
  288. package/src/core/abr/pending_requests_store.ts +3 -5
  289. package/src/core/abr/representation_estimator.ts +6 -3
  290. package/src/core/api/__tests__/get_player_state.test.ts +3 -3
  291. package/src/core/api/__tests__/option_utils.test.ts +17 -17
  292. package/src/core/api/get_player_state.ts +1 -1
  293. package/src/core/api/index.ts +3 -0
  294. package/src/core/api/media_element_track_choice_manager.ts +22 -3
  295. package/src/core/api/option_utils.ts +37 -20
  296. package/src/core/api/playback_observer.ts +12 -8
  297. package/src/core/api/public_api.ts +152 -112
  298. package/src/core/api/track_choice_manager.ts +10 -9
  299. package/src/core/decrypt/README.md +22 -0
  300. package/src/core/decrypt/__tests__/__global__/get_license.test.ts +418 -0
  301. package/src/core/decrypt/__tests__/__global__/init_data.test.ts +675 -0
  302. package/src/core/{eme → decrypt}/__tests__/__global__/media_key_system_access.test.ts +99 -92
  303. package/src/core/decrypt/__tests__/__global__/media_keys.test.ts +156 -0
  304. package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +262 -0
  305. package/src/core/{eme → decrypt}/__tests__/__global__/utils.ts +36 -103
  306. package/src/core/{eme → decrypt}/attach_media_keys.ts +49 -56
  307. package/src/core/decrypt/clear_on_stop.ts +48 -0
  308. package/src/core/decrypt/content_decryptor.ts +1158 -0
  309. package/src/core/decrypt/create_or_load_session.ts +130 -0
  310. package/src/core/decrypt/create_session.ts +175 -0
  311. package/src/core/decrypt/dispose_decryption_resources.ts +39 -0
  312. package/src/core/{eme → decrypt}/find_key_system.ts +126 -134
  313. package/src/core/{eme → decrypt}/get_current_key_system.ts +1 -1
  314. package/src/core/decrypt/get_media_keys.ts +145 -0
  315. package/src/core/{eme → decrypt}/index.ts +11 -8
  316. package/src/core/decrypt/init_media_keys.ts +51 -0
  317. package/src/core/{eme → decrypt}/session_events_listener.ts +93 -55
  318. package/src/core/decrypt/set_server_certificate.ts +104 -0
  319. package/src/core/{eme → decrypt}/types.ts +129 -259
  320. package/src/core/{eme → decrypt}/utils/__tests__/are_init_values_compatible.test.ts +1 -1
  321. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_loaded_sessions.test.ts +29 -71
  322. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_stored_persistent_info.test.ts +6 -6
  323. package/src/core/{eme → decrypt}/utils/are_init_values_compatible.ts +9 -9
  324. package/src/core/{eme → decrypt/utils}/check_key_statuses.ts +6 -5
  325. package/{dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js → src/core/decrypt/utils/clean_old_loaded_sessions.ts} +20 -20
  326. package/src/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.ts +3 -3
  327. package/src/core/{eme → decrypt/utils}/get_drm_system_id.ts +1 -1
  328. package/src/core/decrypt/utils/init_data_values_container.ts +119 -0
  329. package/src/core/{eme → decrypt}/utils/is_session_usable.ts +4 -5
  330. package/src/core/decrypt/utils/key_id_comparison.ts +82 -0
  331. package/src/core/decrypt/utils/key_session_record.ts +175 -0
  332. package/src/core/decrypt/utils/loaded_sessions_store.ts +318 -0
  333. package/src/core/{eme → decrypt/utils}/media_keys_infos_store.ts +4 -4
  334. package/src/core/{eme → decrypt}/utils/persistent_sessions_store.ts +122 -104
  335. package/src/core/{eme/utils/init_data_container.ts → decrypt/utils/serializable_bytes.ts} +8 -5
  336. package/src/core/{eme → decrypt/utils}/server_certificate_store.ts +2 -2
  337. package/src/core/fetchers/manifest/manifest_fetcher.ts +9 -9
  338. package/src/core/fetchers/segment/segment_fetcher.ts +10 -7
  339. package/src/core/fetchers/segment/segment_fetcher_creator.ts +2 -2
  340. package/src/core/fetchers/utils/try_urls_with_backoff.ts +1 -1
  341. package/src/core/init/.initialize_media_source.ts.un~ +0 -0
  342. package/src/core/init/get_initial_time.ts +2 -1
  343. package/src/core/init/initialize_directfile.ts +19 -22
  344. package/src/core/init/initialize_media_source.ts +43 -106
  345. package/src/core/init/link_drm_and_content.ts +176 -0
  346. package/src/core/init/manifest_update_scheduler.ts +12 -10
  347. package/src/core/init/stall_avoider.ts +6 -5
  348. package/src/core/init/stream_events_emitter/are_same_stream_events.ts +4 -4
  349. package/src/core/init/stream_events_emitter/stream_events_emitter.ts +2 -1
  350. package/src/core/init/stream_events_emitter/types.ts +2 -2
  351. package/src/core/init/types.ts +1 -39
  352. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +2 -1
  353. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +6 -7
  354. package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +32 -31
  355. package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +4 -4
  356. package/src/core/segment_buffers/inventory/segment_inventory.ts +42 -8
  357. package/src/core/stream/adaptation/adaptation_stream.ts +7 -1
  358. package/src/core/stream/events_generators.ts +9 -4
  359. package/src/core/stream/orchestrator/stream_orchestrator.ts +9 -4
  360. package/src/core/stream/period/create_empty_adaptation_stream.ts +2 -1
  361. package/src/core/stream/period/get_adaptation_switch_strategy.ts +1 -1
  362. package/src/core/stream/period/period_stream.ts +5 -2
  363. package/src/core/stream/representation/force_garbage_collection.ts +5 -7
  364. package/src/core/stream/representation/get_buffer_status.ts +28 -16
  365. package/src/core/stream/representation/get_needed_segments.ts +124 -28
  366. package/src/core/stream/representation/get_segment_priority.ts +1 -2
  367. package/src/core/stream/representation/push_media_segment.ts +3 -2
  368. package/src/core/stream/representation/representation_stream.ts +30 -7
  369. package/src/core/stream/types.ts +1 -1
  370. package/src/default_config.ts +1241 -0
  371. package/src/errors/request_error.ts +4 -1
  372. package/src/experimental/index.ts +5 -0
  373. package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +1 -0
  374. package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +5 -7
  375. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +3 -10
  376. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +4 -4
  377. package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +1 -1
  378. package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +3 -3
  379. package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +1 -2
  380. package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.ts +1 -2
  381. package/src/experimental/tools/mediaCapabilitiesProber/types.ts +3 -3
  382. package/src/features/__tests__/initialize_features.test.ts +2 -2
  383. package/src/features/features_object.ts +1 -1
  384. package/src/features/initialize_features.ts +1 -1
  385. package/src/features/list/__tests__/eme.test.ts +5 -5
  386. package/src/features/list/eme.ts +5 -5
  387. package/src/features/types.ts +3 -10
  388. package/src/manifest/adaptation.ts +6 -4
  389. package/src/manifest/manifest.ts +16 -86
  390. package/src/manifest/period.ts +3 -3
  391. package/src/manifest/representation.ts +38 -5
  392. package/src/manifest/representation_index/types.ts +18 -18
  393. package/src/manifest/types.ts +3 -3
  394. package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +1 -0
  395. package/src/parsers/manifest/dash/common/get_hdr_information.ts +1 -1
  396. package/src/parsers/manifest/dash/common/get_periods_time_infos.ts +3 -3
  397. package/src/parsers/manifest/dash/common/indexes/base.ts +6 -6
  398. package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +4 -2
  399. package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +2 -2
  400. package/src/parsers/manifest/dash/common/indexes/is_period_fulfilled.ts +1 -2
  401. package/src/parsers/manifest/dash/common/indexes/list.ts +14 -14
  402. package/src/parsers/manifest/dash/common/indexes/template.ts +18 -18
  403. package/src/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.ts +1 -1
  404. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +51 -23
  405. package/src/parsers/manifest/dash/common/infer_adaptation_type.ts +2 -2
  406. package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +1 -1
  407. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +167 -134
  408. package/src/parsers/manifest/dash/common/parse_mpd.ts +9 -10
  409. package/src/parsers/manifest/dash/common/parse_periods.ts +80 -79
  410. package/src/parsers/manifest/dash/common/parse_representation_index.ts +83 -75
  411. package/src/parsers/manifest/dash/common/parse_representations.ts +44 -63
  412. package/src/parsers/manifest/dash/node_parser_types.ts +30 -30
  413. package/src/parsers/manifest/dash/parsers_types.ts +3 -3
  414. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +1 -1
  415. package/src/parsers/manifest/metaplaylist/metaplaylist_parser.ts +4 -4
  416. package/src/parsers/manifest/smooth/create_parser.ts +24 -21
  417. package/src/parsers/manifest/smooth/representation_index.ts +14 -14
  418. package/src/parsers/manifest/types.ts +28 -28
  419. package/src/parsers/manifest/utils/__tests__/update_segment_timeline.test.ts +31 -33
  420. package/src/parsers/manifest/utils/clear_timeline_from_position.ts +15 -6
  421. package/src/parsers/manifest/utils/index_helpers.ts +2 -2
  422. package/src/parsers/manifest/utils/update_segment_timeline.ts +32 -21
  423. package/src/parsers/texttracks/webvtt/html/__tests__/create_styled_element.test.ts +1 -0
  424. package/src/parsers/texttracks/webvtt/html/to_html.ts +2 -2
  425. package/src/parsers/texttracks/webvtt/parse_cue_block.ts +1 -1
  426. package/src/public_types.ts +5 -1
  427. package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +2 -2
  428. package/src/transports/dash/image_pipelines.ts +4 -1
  429. package/src/transports/dash/init_segment_loader.ts +1 -1
  430. package/src/transports/dash/manifest_parser.ts +1 -1
  431. package/src/transports/dash/segment_loader.ts +7 -7
  432. package/src/transports/dash/segment_parser.ts +8 -1
  433. package/src/transports/dash/text_loader.ts +2 -2
  434. package/src/transports/dash/text_parser.ts +11 -1
  435. package/src/transports/local/segment_loader.ts +4 -4
  436. package/src/transports/local/segment_parser.ts +4 -0
  437. package/src/transports/local/text_parser.ts +8 -0
  438. package/src/transports/metaplaylist/manifest_loader.ts +1 -1
  439. package/src/transports/metaplaylist/pipelines.ts +1 -1
  440. package/src/transports/smooth/pipelines.ts +29 -16
  441. package/src/transports/smooth/segment_loader.ts +8 -8
  442. package/src/transports/types.ts +59 -30
  443. package/src/transports/utils/call_custom_manifest_loader.ts +6 -6
  444. package/src/transports/utils/generate_manifest_loader.ts +1 -1
  445. package/src/utils/__tests__/deep_merge.test.ts +48 -0
  446. package/src/utils/__tests__/flat_map.test.ts +12 -7
  447. package/src/utils/cancellable_sleep.ts +1 -1
  448. package/src/utils/cast_to_observable.ts +1 -2
  449. package/src/utils/deep_merge.ts +46 -0
  450. package/src/utils/reference.ts +116 -23
  451. package/src/utils/request/fetch.ts +17 -15
  452. package/src/utils/request/xhr.ts +11 -8
  453. package/src/utils/rx-from_cancellable_promise.ts +8 -4
  454. package/src/utils/task_canceller.ts +6 -4
  455. package/tsconfig.json +1 -2
  456. package/tsconfig.modules.json +1 -2
  457. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.d.ts +0 -29
  458. package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.js +0 -67
  459. package/dist/_esm5.processed/core/eme/attach_media_keys.js +0 -57
  460. package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.d.ts +0 -59
  461. package/dist/_esm5.processed/core/eme/clear_eme_session.js +0 -50
  462. package/dist/_esm5.processed/core/eme/create_session.js +0 -126
  463. package/dist/_esm5.processed/core/eme/dispose_eme.js +0 -23
  464. package/dist/_esm5.processed/core/eme/dispose_media_keys.js +0 -36
  465. package/dist/_esm5.processed/core/eme/eme_manager.d.ts +0 -31
  466. package/dist/_esm5.processed/core/eme/eme_manager.js +0 -278
  467. package/dist/_esm5.processed/core/eme/find_key_system.js +0 -243
  468. package/dist/_esm5.processed/core/eme/get_media_keys.js +0 -85
  469. package/dist/_esm5.processed/core/eme/get_session.js +0 -68
  470. package/dist/_esm5.processed/core/eme/init_media_keys.js +0 -66
  471. package/dist/_esm5.processed/core/eme/session_events_listener.d.ts +0 -41
  472. package/dist/_esm5.processed/core/eme/set_server_certificate.js +0 -85
  473. package/dist/_esm5.processed/core/eme/utils/close_session.js +0 -81
  474. package/dist/_esm5.processed/core/eme/utils/init_data_store.d.ts +0 -115
  475. package/dist/_esm5.processed/core/eme/utils/init_data_store.js +0 -181
  476. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.d.ts +0 -123
  477. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +0 -173
  478. package/dist/_esm5.processed/core/init/create_eme_manager.d.ts +0 -34
  479. package/dist/_esm5.processed/core/init/create_eme_manager.js +0 -52
  480. package/src/core/abr/get_estimate_from_buffer_levels.ts +0 -85
  481. package/src/core/eme/README.md +0 -26
  482. package/src/core/eme/__tests__/__global__/get_license.test.ts +0 -414
  483. package/src/core/eme/__tests__/__global__/init_data.test.ts +0 -908
  484. package/src/core/eme/__tests__/__global__/media_keys.test.ts +0 -266
  485. package/src/core/eme/__tests__/__global__/server_certificate.test.ts +0 -364
  486. package/src/core/eme/__tests__/init_media_keys.test.ts +0 -182
  487. package/src/core/eme/clean_old_loaded_sessions.ts +0 -96
  488. package/src/core/eme/clear_eme_session.ts +0 -62
  489. package/src/core/eme/create_session.ts +0 -187
  490. package/src/core/eme/dispose_eme.ts +0 -25
  491. package/src/core/eme/dispose_media_keys.ts +0 -46
  492. package/src/core/eme/eme_manager.ts +0 -387
  493. package/src/core/eme/get_media_keys.ts +0 -141
  494. package/src/core/eme/get_session.ts +0 -135
  495. package/src/core/eme/init_media_keys.ts +0 -106
  496. package/src/core/eme/set_server_certificate.ts +0 -115
  497. package/src/core/eme/utils/close_session.ts +0 -113
  498. package/src/core/eme/utils/init_data_store.ts +0 -234
  499. package/src/core/eme/utils/loaded_sessions_store.ts +0 -235
  500. package/src/core/init/create_eme_manager.ts +0 -95
@@ -1,266 +0,0 @@
1
- /**
2
- * Copyright 2015 CANAL+ Group
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
-
17
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
18
- /* eslint-disable @typescript-eslint/no-unsafe-member-access */
19
- /* eslint-disable @typescript-eslint/no-var-requires */
20
- /* eslint-disable @typescript-eslint/no-unsafe-call */
21
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
22
- /* eslint-disable @typescript-eslint/no-unsafe-return */
23
- /* eslint-disable @typescript-eslint/no-explicit-any */
24
- /* eslint-disable no-restricted-properties */
25
-
26
- import {
27
- EMPTY,
28
- of as observableOf,
29
- Subject,
30
- take,
31
- takeUntil,
32
- } from "rxjs";
33
- import {
34
- MediaKeysImpl,
35
- MediaKeySystemAccessImpl,
36
- mockCompat,
37
- testEMEManagerImmediateError,
38
- } from "./utils";
39
-
40
- describe("core - eme - global tests - media key system access", () => {
41
- /** Used to implement every functions that should never be called. */
42
- const neverCalledFn = jest.fn();
43
-
44
- /** Default video element used in our tests. */
45
- const videoElt = document.createElement("video");
46
-
47
- /** Default keySystems configuration used in our tests. */
48
- const ksConfig = [{ type: "com.widevine.alpha", getLicense: neverCalledFn }];
49
-
50
- beforeEach(() => {
51
- jest.resetModules();
52
- jest.restoreAllMocks();
53
- jest.mock("../../set_server_certificate", () => ({ __esModule: true as const,
54
- default: neverCalledFn }));
55
- });
56
-
57
- afterEach(() => {
58
- expect(neverCalledFn).not.toHaveBeenCalled();
59
- });
60
-
61
- it("should throw if createMediaKeys throws", async () => {
62
- // == mocks ==
63
- function requestMediaKeySystemAccessBadMediaKeys(
64
- keySystem : string,
65
- conf : MediaKeySystemConfiguration[]
66
- ) {
67
- return observableOf({ keySystem,
68
- getConfiguration() { return conf; },
69
- createMediaKeys() { throw new Error("No non no"); } });
70
- }
71
- mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessBadMediaKeys });
72
-
73
- // == test ==
74
- const EMEManager = require("../../eme_manager").default;
75
- const error : any =
76
- await testEMEManagerImmediateError(EMEManager, videoElt, ksConfig, EMPTY);
77
- expect(error).toBeInstanceOf(Error);
78
- expect(error.message).toEqual(
79
- "EncryptedMediaError (CREATE_MEDIA_KEYS_ERROR) No non no"
80
- );
81
- expect(error.name).toEqual("EncryptedMediaError");
82
- expect(error.code).toEqual("CREATE_MEDIA_KEYS_ERROR");
83
- });
84
-
85
- it("should throw if createMediaKeys rejects", async () => {
86
- // == mocks ==
87
- function requestMediaKeySystemAccessRejMediaKeys(
88
- keySystem : string,
89
- conf : MediaKeySystemConfiguration[]
90
- ) {
91
- return observableOf({
92
- keySystem,
93
- getConfiguration: () => conf,
94
- createMediaKeys: () => Promise.reject(new Error("No non no")),
95
- });
96
- }
97
- mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessRejMediaKeys });
98
-
99
- // == test ==
100
- const EMEManager = require("../../eme_manager").default;
101
- const error : any =
102
- await testEMEManagerImmediateError(EMEManager, videoElt, ksConfig, EMPTY);
103
- expect(error).toBeInstanceOf(Error);
104
- expect(error.message).toEqual(
105
- "EncryptedMediaError (CREATE_MEDIA_KEYS_ERROR) No non no"
106
- );
107
- expect(error.name).toEqual("EncryptedMediaError");
108
- expect(error.code).toEqual("CREATE_MEDIA_KEYS_ERROR");
109
- });
110
-
111
- /* eslint-disable max-len */
112
- it("should emit a created-media-keys event if createMediaKeys resolves", (done) => {
113
- /* eslint-enable max-len */
114
- mockCompat({});
115
- const EMEManager = require("../../eme_manager").default;
116
- const kill$ = new Subject<void>();
117
- EMEManager(videoElt, ksConfig, EMPTY)
118
- .pipe(takeUntil(kill$))
119
- .subscribe((evt : any) => {
120
- expect(evt.type).toEqual("created-media-keys");
121
- kill$.next();
122
- done();
123
- });
124
- });
125
-
126
- /* eslint-disable max-len */
127
- it("should not create any session until if no encrypted event was received", (done) => {
128
- /* eslint-enable max-len */
129
-
130
- // == mocks ==
131
- const setMediaKeysSpy = jest.fn(() => EMPTY);
132
- mockCompat({ setMediaKeys: setMediaKeysSpy });
133
- const createSessionSpy = jest.spyOn(MediaKeysImpl.prototype, "createSession");
134
-
135
- // == test ==
136
- let eventsReceived = 0;
137
- const kill$ = new Subject<void>();
138
- const EMEManager = require("../../eme_manager").default;
139
- EMEManager(videoElt, ksConfig, EMPTY)
140
- .pipe(takeUntil(kill$), take(1))
141
- .subscribe((evt : any) => {
142
- eventsReceived++;
143
- expect(evt.type).toEqual("created-media-keys");
144
- evt.value.canAttachMediaKeys.setValue(true);
145
- setTimeout(() => {
146
- expect(eventsReceived).toEqual(1);
147
- expect(setMediaKeysSpy).toHaveBeenCalledTimes(1);
148
- expect(setMediaKeysSpy).toHaveBeenCalledWith(videoElt, new MediaKeysImpl());
149
- expect(createSessionSpy).not.toHaveBeenCalled();
150
- done();
151
- }, 10);
152
- });
153
- });
154
-
155
- /* eslint-disable max-len */
156
- it("should emit \"attached-media-keys\" event when the MediaKeys is attached", (done) => {
157
- /* eslint-enable max-len */
158
-
159
- // == mocks ==
160
- const setMediaKeysSpy = jest.fn(() => observableOf(null));
161
- mockCompat({ setMediaKeys: setMediaKeysSpy });
162
-
163
- // == test ==
164
- let eventsReceived = 0;
165
- const kill$ = new Subject<void>();
166
- const EMEManager = require("../../eme_manager").default;
167
- EMEManager(videoElt, ksConfig, EMPTY)
168
- .pipe(takeUntil(kill$))
169
- .subscribe((evt : any) => {
170
- switch (++eventsReceived) {
171
- case 1:
172
- expect(evt.type).toEqual("created-media-keys");
173
- evt.value.canAttachMediaKeys.setValue(true);
174
- break;
175
- case 2:
176
- expect(evt.type).toEqual("attached-media-keys");
177
- kill$.next();
178
- expect(setMediaKeysSpy).toHaveBeenCalledTimes(1);
179
- expect(setMediaKeysSpy).toHaveBeenCalledWith(videoElt, new MediaKeysImpl());
180
- done();
181
- break;
182
- default:
183
- throw new Error("Unexpected event");
184
- }
185
- });
186
- });
187
-
188
- /* eslint-disable max-len */
189
- it("should not create any session until if no encrypted event was received", (done) => {
190
- /* eslint-enable max-len */
191
-
192
- // == mocks ==
193
- const setMediaKeysSpy = jest.fn(() => observableOf(null));
194
- mockCompat({ setMediaKeys: setMediaKeysSpy });
195
- const createSessionSpy = jest.spyOn(MediaKeysImpl.prototype, "createSession");
196
-
197
- // == test ==
198
- let eventsReceived = 0;
199
- const kill$ = new Subject<void>();
200
- const EMEManager = require("../../eme_manager").default;
201
- EMEManager(videoElt, ksConfig, EMPTY)
202
- .pipe(takeUntil(kill$))
203
- .subscribe((evt : any) => {
204
- switch (++eventsReceived) {
205
- case 1:
206
- expect(evt.type).toEqual("created-media-keys");
207
- evt.value.canAttachMediaKeys.setValue(true);
208
- break;
209
- case 2:
210
- expect(evt.type).toEqual("attached-media-keys");
211
- setTimeout(() => {
212
- kill$.next();
213
- expect(createSessionSpy).not.toHaveBeenCalled();
214
- done();
215
- }, 10);
216
- break;
217
- default:
218
- throw new Error("Unexpected event");
219
- }
220
- });
221
- });
222
-
223
- /* eslint-disable max-len */
224
- it("should not attach the MediaKeys but still emit the \"attached-media-keys\" event if already attached", (done) => {
225
- /* eslint-enable max-len */
226
-
227
- // == mocks ==
228
- const mediaElement = document.createElement("video");
229
- const defaultMediaKeys = new MediaKeysImpl();
230
- const setMediaKeysSpy = jest.fn(() => observableOf(null));
231
- mockCompat({ setMediaKeys: setMediaKeysSpy });
232
- jest.spyOn(MediaKeySystemAccessImpl.prototype, "createMediaKeys")
233
- .mockReturnValue(Promise.resolve(defaultMediaKeys));
234
- Object.defineProperty(mediaElement, "mediaKeys", {
235
- get: jest.fn(() => defaultMediaKeys),
236
- set: jest.fn(() => { throw new Error("Should not set MediaKeys manually."); }),
237
- });
238
- const createSessionSpy = jest.spyOn(MediaKeysImpl.prototype, "createSession");
239
-
240
- // == test ==
241
- let eventsReceived = 0;
242
- const kill$ = new Subject<void>();
243
- const EMEManager = require("../../eme_manager").default;
244
- EMEManager(mediaElement, ksConfig, new Subject())
245
- .pipe(takeUntil(kill$))
246
- .subscribe((evt : any) => {
247
- switch (++eventsReceived) {
248
- case 1:
249
- expect(evt.type).toEqual("created-media-keys");
250
- evt.value.canAttachMediaKeys.setValue(true);
251
- break;
252
- case 2:
253
- expect(evt.type).toEqual("attached-media-keys");
254
- setTimeout(() => {
255
- kill$.next();
256
- expect(setMediaKeysSpy).not.toHaveBeenCalled();
257
- expect(createSessionSpy).not.toHaveBeenCalled();
258
- done();
259
- }, 10);
260
- break;
261
- default:
262
- throw new Error("Unexpected event");
263
- }
264
- });
265
- });
266
- });
@@ -1,364 +0,0 @@
1
- /**
2
- * Copyright 2015 CANAL+ Group
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
-
17
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
18
- /* eslint-disable @typescript-eslint/no-unsafe-member-access */
19
- /* eslint-disable @typescript-eslint/no-var-requires */
20
- /* eslint-disable @typescript-eslint/no-unsafe-call */
21
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
22
- /* eslint-disable @typescript-eslint/no-unsafe-return */
23
- /* eslint-disable no-restricted-properties */
24
- /* eslint-disable @typescript-eslint/restrict-template-expressions */
25
-
26
- import {
27
- Subject,
28
- takeUntil,
29
- } from "rxjs";
30
- import { IContentProtection } from "../../types";
31
- import {
32
- expectLicenseRequestMessage,
33
- MediaKeysImpl,
34
- MediaKeySystemAccessImpl,
35
- mockCompat,
36
- } from "./utils";
37
-
38
- describe("core - eme - global tests - server certificate", () => {
39
-
40
- const getLicenseSpy = jest.fn(() => {
41
- return new Promise(() => { /* noop */ });
42
- });
43
-
44
- /** Default video element used in our tests. */
45
- const videoElt = document.createElement("video");
46
-
47
- const serverCertificate = [1, 2, 3];
48
-
49
- /** Default keySystems configuration used in our tests. */
50
- const ksConfigCert = [{ type: "com.widevine.alpha",
51
- getLicense: getLicenseSpy,
52
- serverCertificate }];
53
-
54
- beforeEach(() => {
55
- jest.resetModules();
56
- jest.restoreAllMocks();
57
- });
58
-
59
- /* eslint-disable max-len */
60
- it("should set the serverCertificate only after the MediaKeys is attached", (done) => {
61
- /* eslint-enable max-len */
62
-
63
- // == mocks ==
64
- mockCompat();
65
- const createSessionSpy = jest.spyOn(MediaKeysImpl.prototype, "createSession");
66
- const serverCertificateSpy =
67
- jest.spyOn(MediaKeysImpl.prototype, "setServerCertificate")
68
- .mockImplementation((_serverCertificate : BufferSource) => {
69
- expect(createSessionSpy).not.toHaveBeenCalled();
70
- return Promise.resolve(true);
71
- });
72
-
73
- // == vars ==
74
- let eventsReceived = 0;
75
- const initDataSubject = new Subject<IContentProtection>();
76
- const initData = new Uint8Array([54, 55, 75]);
77
- const kill$ = new Subject<void>();
78
-
79
- // == test ==
80
- const EMEManager = require("../../eme_manager").default;
81
- EMEManager(videoElt, ksConfigCert, initDataSubject)
82
- .pipe(takeUntil(kill$))
83
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
84
- .subscribe((evt : { type : string; value : any }) => {
85
-
86
- switch (++eventsReceived) {
87
- case 1:
88
- expect(evt.type).toEqual("created-media-keys");
89
- evt.value.canAttachMediaKeys.setValue(true);
90
- break;
91
- case 2:
92
- expect(evt.type).toEqual("attached-media-keys");
93
- expect(createSessionSpy).not.toHaveBeenCalled();
94
- expect(serverCertificateSpy).toHaveBeenCalledTimes(1);
95
- expect(serverCertificateSpy).toHaveBeenCalledWith(serverCertificate);
96
- initDataSubject.next({ type: "cenc",
97
- values: [ { systemId: "15", data: initData } ] });
98
- break;
99
- case 3:
100
- expectLicenseRequestMessage(evt,
101
- { type: "cenc",
102
- values: [ { systemId: "15",
103
- data: initData } ] });
104
- setTimeout(() => {
105
- expect(serverCertificateSpy).toHaveBeenCalledTimes(1);
106
- expect(createSessionSpy).toHaveBeenCalledTimes(1);
107
- initDataSubject.next({ type: "cenc2",
108
- values: [ { systemId: "15", data: initData } ] });
109
- }, 10);
110
- break;
111
- case 4:
112
- expectLicenseRequestMessage(evt,
113
- { type: "cenc2",
114
- values: [ { systemId: "15",
115
- data: initData } ] });
116
- setTimeout(() => {
117
- kill$.next();
118
- expect(serverCertificateSpy).toHaveBeenCalledTimes(1);
119
- expect(createSessionSpy).toHaveBeenCalledTimes(2);
120
- done();
121
- }, 10);
122
- break;
123
- default:
124
- throw new Error(`Unexpected event: ${evt.type}`);
125
- }
126
- });
127
- });
128
-
129
- /* eslint-disable max-len */
130
- it("should emit warning if serverCertificate call rejects but still continue", (done) => {
131
- /* eslint-enable max-len */
132
-
133
- // == mocks ==
134
- mockCompat();
135
- const createSessionSpy = jest.spyOn(MediaKeysImpl.prototype, "createSession");
136
- const serverCertificateSpy =
137
- jest.spyOn(MediaKeysImpl.prototype, "setServerCertificate")
138
- .mockImplementation((_serverCertificate : BufferSource) => {
139
- expect(createSessionSpy).not.toHaveBeenCalled();
140
- return Promise.reject("some error");
141
- });
142
-
143
- // == vars ==
144
- let eventsReceived = 0;
145
- const initDataSubject = new Subject<IContentProtection>();
146
- const initData = new Uint8Array([54, 55, 75]);
147
- const kill$ = new Subject<void>();
148
-
149
- // == test ==
150
- const EMEManager = require("../../eme_manager").default;
151
- EMEManager(videoElt, ksConfigCert, initDataSubject)
152
- .pipe(takeUntil(kill$))
153
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
154
- .subscribe((evt : { type : string; value : any }) => {
155
- switch (++eventsReceived) {
156
- case 1:
157
- expect(evt.type).toEqual("created-media-keys");
158
- evt.value.canAttachMediaKeys.setValue(true);
159
- break;
160
- case 2:
161
- expect(evt.type).toEqual("warning");
162
- expect(createSessionSpy).not.toHaveBeenCalled();
163
- expect(serverCertificateSpy).toHaveBeenCalledTimes(1);
164
- expect(serverCertificateSpy).toHaveBeenCalledWith(serverCertificate);
165
- expect(evt.value.name).toEqual("EncryptedMediaError");
166
- expect(evt.value.type).toEqual("ENCRYPTED_MEDIA_ERROR");
167
- expect(evt.value.code).toEqual("LICENSE_SERVER_CERTIFICATE_ERROR");
168
- expect(evt.value.message)
169
- .toEqual(
170
- "EncryptedMediaError (LICENSE_SERVER_CERTIFICATE_ERROR) " +
171
- "`setServerCertificate` error");
172
- break;
173
- case 3:
174
- expect(evt.type).toEqual("attached-media-keys");
175
- expect(createSessionSpy).not.toHaveBeenCalled();
176
- expect(serverCertificateSpy).toHaveBeenCalledTimes(1);
177
- initDataSubject.next({ type: "cenc",
178
- values: [ { systemId: "15", data: initData } ] });
179
- break;
180
- case 4:
181
- expectLicenseRequestMessage(evt,
182
- { type: "cenc",
183
- values: [ { systemId: "15",
184
- data: initData } ] });
185
- setTimeout(() => {
186
- expect(serverCertificateSpy).toHaveBeenCalledTimes(1);
187
- expect(createSessionSpy).toHaveBeenCalledTimes(1);
188
- initDataSubject.next({ type: "cenc2",
189
- values: [ { systemId: "15", data: initData } ] });
190
- }, 10);
191
- break;
192
- case 5:
193
- expectLicenseRequestMessage(evt,
194
- { type: "cenc2",
195
- values: [ { systemId: "15",
196
- data: initData } ] });
197
- setTimeout(() => {
198
- kill$.next();
199
- expect(serverCertificateSpy).toHaveBeenCalledTimes(1);
200
- expect(createSessionSpy).toHaveBeenCalledTimes(2);
201
- done();
202
- }, 10);
203
- break;
204
- default:
205
- throw new Error(`Unexpected event: ${evt.type}`);
206
- }
207
- });
208
- });
209
-
210
- /* eslint-disable max-len */
211
- it("should emit warning if serverCertificate call throws but still continue", (done) => {
212
- /* eslint-enable max-len */
213
-
214
- // == mocks ==
215
- mockCompat();
216
- const createSessionSpy = jest.spyOn(MediaKeysImpl.prototype, "createSession");
217
- const serverCertificateSpy =
218
- jest.spyOn(MediaKeysImpl.prototype, "setServerCertificate")
219
- .mockImplementation((_serverCertificate : BufferSource) => {
220
- expect(createSessionSpy).not.toHaveBeenCalled();
221
- throw new Error("some error");
222
- });
223
-
224
- // == vars ==
225
- let eventsReceived = 0;
226
- const initDataSubject = new Subject<IContentProtection>();
227
- const initData = new Uint8Array([54, 55, 75]);
228
- const kill$ = new Subject<void>();
229
-
230
- // == test ==
231
- const EMEManager = require("../../eme_manager").default;
232
- EMEManager(videoElt, ksConfigCert, initDataSubject)
233
- .pipe(takeUntil(kill$))
234
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
235
- .subscribe((evt : { type : string; value : any }) => {
236
- switch (++eventsReceived) {
237
- case 1:
238
- expect(evt.type).toEqual("created-media-keys");
239
- evt.value.canAttachMediaKeys.setValue(true);
240
- break;
241
- case 2:
242
- expect(evt.type).toEqual("warning");
243
- expect(serverCertificateSpy).toHaveBeenCalledTimes(1);
244
- expect(serverCertificateSpy).toHaveBeenCalledWith(serverCertificate);
245
- expect(evt.value.name).toEqual("EncryptedMediaError");
246
- expect(evt.value.type).toEqual("ENCRYPTED_MEDIA_ERROR");
247
- expect(evt.value.code).toEqual("LICENSE_SERVER_CERTIFICATE_ERROR");
248
- expect(evt.value.message)
249
- .toEqual(
250
- "EncryptedMediaError (LICENSE_SERVER_CERTIFICATE_ERROR) Error: some error"
251
- );
252
- break;
253
- case 3:
254
- expect(evt.type).toEqual("attached-media-keys");
255
- expect(createSessionSpy).not.toHaveBeenCalled();
256
- expect(serverCertificateSpy).toHaveBeenCalledTimes(1);
257
- initDataSubject.next({ type: "cenc",
258
- values: [ { systemId: "15", data: initData } ] });
259
- break;
260
- case 4:
261
- expectLicenseRequestMessage(evt,
262
- { type: "cenc",
263
- values: [ { systemId: "15",
264
- data: initData } ] });
265
- setTimeout(() => {
266
- expect(serverCertificateSpy).toHaveBeenCalledTimes(1);
267
- expect(createSessionSpy).toHaveBeenCalledTimes(1);
268
- initDataSubject.next({ type: "cenc2",
269
- values: [ { systemId: "15", data: initData } ] });
270
- }, 10);
271
- break;
272
- case 5:
273
- expectLicenseRequestMessage(evt,
274
- { type: "cenc2",
275
- values: [ { systemId: "15",
276
- data: initData } ] });
277
- setTimeout(() => {
278
- kill$.next();
279
- expect(serverCertificateSpy).toHaveBeenCalledTimes(1);
280
- expect(createSessionSpy).toHaveBeenCalledTimes(2);
281
- done();
282
- }, 10);
283
- break;
284
- default:
285
- throw new Error(`Unexpected event: ${evt.type}`);
286
- }
287
- });
288
- });
289
-
290
- /* eslint-disable max-len */
291
- it("should just continue if serverCertificate is undefined", (done) => {
292
- /* eslint-enable max-len */
293
-
294
- // == mocks ==
295
- mockCompat();
296
- const createSessionSpy = jest.spyOn(MediaKeysImpl.prototype, "createSession");
297
- jest.spyOn(MediaKeySystemAccessImpl.prototype, "createMediaKeys")
298
- .mockImplementation(() => {
299
- const mediaKeys = new MediaKeysImpl();
300
- (mediaKeys as { setServerCertificate? : unknown })
301
- .setServerCertificate = undefined;
302
- return Promise.resolve(mediaKeys);
303
- });
304
- const serverCertificateSpy =
305
- jest.spyOn(MediaKeysImpl.prototype, "setServerCertificate")
306
- .mockImplementation((_serverCertificate : BufferSource) => {
307
- expect(createSessionSpy).not.toHaveBeenCalled();
308
- return Promise.resolve(true);
309
- });
310
-
311
- // == vars ==
312
- let eventsReceived = 0;
313
- const initDataSubject = new Subject<IContentProtection>();
314
- const initData = new Uint8Array([54, 55, 75]);
315
- const kill$ = new Subject<void>();
316
-
317
- // == test ==
318
- const EMEManager = require("../../eme_manager").default;
319
- EMEManager(videoElt, ksConfigCert, initDataSubject)
320
- .pipe(takeUntil(kill$))
321
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
322
- .subscribe((evt : { type : string; value : any }) => {
323
- switch (++eventsReceived) {
324
- case 1:
325
- expect(evt.type).toEqual("created-media-keys");
326
- evt.value.canAttachMediaKeys.setValue(true);
327
- break;
328
- case 2:
329
- expect(evt.type).toEqual("attached-media-keys");
330
- expect(createSessionSpy).not.toHaveBeenCalled();
331
- expect(serverCertificateSpy).toHaveBeenCalledTimes(0);
332
- initDataSubject.next({ type: "cenc",
333
- values: [ { systemId: "15", data: initData } ] });
334
- break;
335
- case 3:
336
- expectLicenseRequestMessage(evt,
337
- { type: "cenc",
338
- values: [ { systemId: "15",
339
- data: initData } ] });
340
- setTimeout(() => {
341
- expect(serverCertificateSpy).toHaveBeenCalledTimes(0);
342
- expect(createSessionSpy).toHaveBeenCalledTimes(1);
343
- initDataSubject.next({ type: "cenc2",
344
- values: [ { systemId: "15", data: initData } ] });
345
- }, 10);
346
- break;
347
- case 4:
348
- expectLicenseRequestMessage(evt,
349
- { type: "cenc2",
350
- values: [ { systemId: "15",
351
- data: initData } ] });
352
- setTimeout(() => {
353
- kill$.next();
354
- expect(serverCertificateSpy).toHaveBeenCalledTimes(0);
355
- expect(createSessionSpy).toHaveBeenCalledTimes(2);
356
- done();
357
- }, 10);
358
- break;
359
- default:
360
- throw new Error(`Unexpected event: ${evt.type}`);
361
- }
362
- });
363
- });
364
- });