rx-player 3.26.3-dev.2022021400 → 3.27.0-dev.2022032100

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 (400) hide show
  1. package/.eslintrc.js +0 -4
  2. package/CHANGELOG.md +17 -2
  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 +143 -36
  9. package/dist/_esm5.processed/compat/eme/custom_key_system_access.d.ts +15 -0
  10. package/dist/_esm5.processed/compat/eme/custom_key_system_access.js +1 -17
  11. package/dist/_esm5.processed/compat/eme/custom_media_keys/ie11_media_keys.js +6 -7
  12. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -5
  13. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +20 -22
  14. package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +58 -40
  15. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +49 -48
  16. package/dist/_esm5.processed/compat/eme/generate_key_request.d.ts +2 -3
  17. package/dist/_esm5.processed/compat/eme/generate_key_request.js +22 -26
  18. package/dist/_esm5.processed/compat/eme/load_session.d.ts +1 -2
  19. package/dist/_esm5.processed/compat/eme/load_session.js +67 -17
  20. package/dist/_esm5.processed/compat/event_listeners.js +2 -1
  21. package/dist/_esm5.processed/compat/should_favour_custom_safari_EME.js +2 -2
  22. package/dist/_esm5.processed/config.d.ts +166 -1080
  23. package/dist/_esm5.processed/config.js +17 -1119
  24. package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +4 -1
  25. package/dist/_esm5.processed/core/abr/network_analyzer.js +2 -1
  26. package/dist/_esm5.processed/core/api/get_player_state.js +1 -1
  27. package/dist/_esm5.processed/core/api/index.d.ts +2 -1
  28. package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +2 -1
  29. package/dist/_esm5.processed/core/api/option_utils.d.ts +6 -3
  30. package/dist/_esm5.processed/core/api/option_utils.js +21 -7
  31. package/dist/_esm5.processed/core/api/playback_observer.js +5 -1
  32. package/dist/_esm5.processed/core/api/public_api.d.ts +82 -71
  33. package/dist/_esm5.processed/core/api/public_api.js +73 -35
  34. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.d.ts +7 -49
  35. package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.js +25 -65
  36. package/dist/_esm5.processed/core/{eme → decrypt}/attach_media_keys.d.ts +12 -12
  37. package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +103 -0
  38. package/dist/_esm5.processed/core/{eme/clear_eme_session.d.ts → decrypt/clear_on_stop.d.ts} +3 -4
  39. package/dist/_esm5.processed/core/decrypt/clear_on_stop.js +40 -0
  40. package/dist/_esm5.processed/core/decrypt/content_decryptor.d.ts +216 -0
  41. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +865 -0
  42. package/dist/_esm5.processed/core/{eme/get_session.d.ts → decrypt/create_or_load_session.d.ts} +28 -26
  43. package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +124 -0
  44. package/dist/_esm5.processed/core/{eme → decrypt}/create_session.d.ts +22 -19
  45. package/dist/_esm5.processed/core/decrypt/create_session.js +173 -0
  46. package/dist/_esm5.processed/core/{eme/dispose_media_keys.d.ts → decrypt/dispose_decryption_resources.d.ts} +4 -4
  47. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.js +81 -0
  48. package/dist/_esm5.processed/core/{eme → decrypt}/find_key_system.d.ts +11 -14
  49. package/dist/_esm5.processed/core/decrypt/find_key_system.js +299 -0
  50. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.d.ts +0 -0
  51. package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.js +1 -1
  52. package/dist/_esm5.processed/core/{eme → decrypt}/get_media_keys.d.ts +13 -5
  53. package/dist/_esm5.processed/core/decrypt/get_media_keys.js +153 -0
  54. package/dist/_esm5.processed/core/{eme → decrypt}/index.d.ts +5 -6
  55. package/dist/_esm5.processed/core/{eme → decrypt}/index.js +5 -5
  56. package/dist/_esm5.processed/core/{eme → decrypt}/init_media_keys.d.ts +6 -4
  57. package/dist/_esm5.processed/core/decrypt/init_media_keys.js +82 -0
  58. package/dist/_esm5.processed/core/decrypt/session_events_listener.d.ts +77 -0
  59. package/dist/_esm5.processed/core/{eme → decrypt}/session_events_listener.js +25 -24
  60. package/dist/_esm5.processed/core/{eme → decrypt}/set_server_certificate.d.ts +15 -6
  61. package/dist/_esm5.processed/core/decrypt/set_server_certificate.js +141 -0
  62. package/dist/_esm5.processed/core/{eme → decrypt}/types.d.ts +119 -241
  63. package/dist/_esm5.processed/core/{eme → decrypt}/types.js +0 -0
  64. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.d.ts +3 -3
  65. package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.js +5 -5
  66. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.d.ts +2 -2
  67. package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.js +4 -3
  68. package/dist/_esm5.processed/core/{eme/utils/close_session.d.ts → decrypt/utils/clean_old_loaded_sessions.d.ts} +8 -7
  69. package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +84 -0
  70. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.d.ts +1 -1
  71. package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.js +2 -2
  72. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.d.ts +0 -0
  73. package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.js +1 -1
  74. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.d.ts +69 -0
  75. package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.js +99 -0
  76. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.d.ts +0 -1
  77. package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.js +4 -5
  78. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.d.ts +44 -0
  79. package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.js +77 -0
  80. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.d.ts +104 -0
  81. package/dist/_esm5.processed/core/decrypt/utils/key_session_record.js +155 -0
  82. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.d.ts +108 -0
  83. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +302 -0
  84. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.d.ts +4 -4
  85. package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.js +0 -0
  86. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.d.ts +8 -18
  87. package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.js +119 -97
  88. package/dist/_esm5.processed/core/{eme/utils/init_data_container.d.ts → decrypt/utils/serializable_bytes.d.ts} +8 -5
  89. package/dist/_esm5.processed/core/{eme/utils/init_data_container.js → decrypt/utils/serializable_bytes.js} +9 -9
  90. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.d.ts +1 -1
  91. package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.js +1 -1
  92. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +3 -5
  93. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +1 -1
  94. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
  95. package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +2 -3
  96. package/dist/_esm5.processed/core/init/get_initial_time.js +1 -1
  97. package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +1 -1
  98. package/dist/_esm5.processed/core/init/initialize_directfile.js +11 -17
  99. package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +6 -3
  100. package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -69
  101. package/dist/_esm5.processed/core/init/link_drm_and_content.d.ts +61 -0
  102. package/dist/_esm5.processed/core/init/link_drm_and_content.js +94 -0
  103. package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +2 -1
  104. package/dist/_esm5.processed/core/init/stall_avoider.js +1 -1
  105. package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +1 -1
  106. package/dist/_esm5.processed/core/init/types.d.ts +2 -4
  107. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +1 -1
  108. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +3 -1
  109. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +17 -1
  110. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +22 -5
  111. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +2 -1
  112. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +6 -3
  113. package/dist/_esm5.processed/core/stream/events_generators.d.ts +8 -3
  114. package/dist/_esm5.processed/core/stream/events_generators.js +3 -2
  115. package/dist/_esm5.processed/core/stream/index.d.ts +1 -0
  116. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +1 -0
  117. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +3 -3
  118. package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +2 -1
  119. package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.d.ts +15 -11
  120. package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.js +6 -3
  121. package/dist/_esm5.processed/core/stream/period/index.d.ts +1 -0
  122. package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +5 -12
  123. package/dist/_esm5.processed/core/stream/period/period_stream.js +3 -3
  124. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +2 -2
  125. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +6 -1
  126. package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +12 -9
  127. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.d.ts +19 -14
  128. package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +86 -10
  129. package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +1 -1
  130. package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -3
  131. package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +6 -0
  132. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +19 -8
  133. package/dist/_esm5.processed/core/stream/types.d.ts +1 -1
  134. package/dist/_esm5.processed/default_config.d.ts +1114 -0
  135. package/dist/_esm5.processed/default_config.js +1145 -0
  136. package/dist/_esm5.processed/experimental/index.d.ts +2 -0
  137. package/dist/_esm5.processed/experimental/index.js +2 -0
  138. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +1 -0
  139. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +6 -7
  140. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/index.js +2 -3
  141. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +15 -0
  142. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +1 -2
  143. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +3 -5
  144. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.js +3 -5
  145. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.js +1 -2
  146. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.js +1 -2
  147. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.js +1 -2
  148. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.js +1 -2
  149. package/dist/_esm5.processed/features/features_object.js +1 -1
  150. package/dist/_esm5.processed/features/initialize_features.js +1 -1
  151. package/dist/_esm5.processed/features/list/eme.d.ts +3 -3
  152. package/dist/_esm5.processed/features/list/eme.js +5 -5
  153. package/dist/_esm5.processed/features/types.d.ts +3 -3
  154. package/dist/_esm5.processed/manifest/manifest.d.ts +1 -14
  155. package/dist/_esm5.processed/manifest/manifest.js +10 -74
  156. package/dist/_esm5.processed/manifest/representation.d.ts +35 -3
  157. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/is_period_fulfilled.js +1 -2
  158. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +1 -2
  159. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +1 -1
  160. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +87 -75
  161. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -2
  162. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +4 -5
  163. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -0
  164. package/dist/_esm5.processed/public_types.d.ts +3 -2
  165. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +1 -2
  166. package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +4 -3
  167. package/dist/_esm5.processed/transports/dash/image_pipelines.js +60 -11
  168. package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -2
  169. package/dist/_esm5.processed/transports/dash/manifest_parser.js +2 -3
  170. package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +1 -1
  171. package/dist/_esm5.processed/transports/dash/segment_loader.js +3 -4
  172. package/dist/_esm5.processed/transports/dash/segment_parser.js +6 -3
  173. package/dist/_esm5.processed/transports/dash/text_loader.js +1 -2
  174. package/dist/_esm5.processed/transports/dash/text_parser.js +8 -2
  175. package/dist/_esm5.processed/transports/local/segment_loader.js +2 -3
  176. package/dist/_esm5.processed/transports/local/segment_parser.js +4 -1
  177. package/dist/_esm5.processed/transports/local/text_parser.js +8 -2
  178. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +2 -3
  179. package/dist/_esm5.processed/transports/smooth/pipelines.js +71 -14
  180. package/dist/_esm5.processed/transports/smooth/segment_loader.js +3 -4
  181. package/dist/_esm5.processed/transports/types.d.ts +22 -0
  182. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -2
  183. package/dist/_esm5.processed/utils/cancellable_sleep.js +1 -2
  184. package/dist/_esm5.processed/utils/cast_to_observable.js +1 -3
  185. package/dist/_esm5.processed/utils/deep_merge.d.ts +12 -0
  186. package/dist/_esm5.processed/utils/deep_merge.js +53 -0
  187. package/dist/_esm5.processed/utils/reference.d.ts +29 -0
  188. package/dist/_esm5.processed/utils/reference.js +72 -24
  189. package/dist/_esm5.processed/utils/request/fetch.js +1 -2
  190. package/dist/_esm5.processed/utils/request/xhr.js +2 -3
  191. package/dist/_esm5.processed/utils/rx-from_cancellable_promise.js +7 -2
  192. package/dist/_esm5.processed/utils/task_canceller.d.ts +5 -3
  193. package/dist/_esm5.processed/utils/task_canceller.js +3 -3
  194. package/dist/rx-player.js +4936 -3340
  195. package/dist/rx-player.min.js +1 -1
  196. package/dummy +1 -0
  197. package/{dist/_esm5.processed/utils/promise.d.ts → experimental/index.d.ts} +1 -2
  198. package/{dist/_esm5.processed/utils/promise.js → experimental/index.js} +1 -3
  199. package/package.json +32 -35
  200. package/{src/typings/pinkie.d.ts → scripts/build/templates/experimental/index.d.ts} +1 -4
  201. package/scripts/build/templates/experimental/index.js +16 -0
  202. package/scripts/update-version +2 -2
  203. package/sonar-project.properties +1 -1
  204. package/src/README.md +6 -6
  205. package/src/compat/__tests__/play.test.ts +2 -4
  206. package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +45 -5
  207. package/src/compat/browser_detection.ts +4 -2
  208. package/src/compat/eme/close_session.ts +89 -56
  209. package/src/compat/eme/custom_key_system_access.ts +1 -2
  210. package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +6 -7
  211. package/src/compat/eme/custom_media_keys/index.ts +20 -38
  212. package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +68 -52
  213. package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +57 -56
  214. package/src/compat/eme/generate_key_request.ts +25 -33
  215. package/src/compat/eme/load_session.ts +28 -31
  216. package/src/compat/event_listeners.ts +2 -1
  217. package/src/compat/should_favour_custom_safari_EME.ts +5 -2
  218. package/src/config.ts +17 -1210
  219. package/src/core/README.md +1 -1
  220. package/src/core/abr/bandwidth_estimator.ts +4 -4
  221. package/src/core/abr/network_analyzer.ts +5 -6
  222. package/src/core/api/__tests__/get_player_state.test.ts +3 -3
  223. package/src/core/api/__tests__/option_utils.test.ts +29 -17
  224. package/src/core/api/get_player_state.ts +1 -1
  225. package/src/core/api/index.ts +3 -0
  226. package/src/core/api/option_utils.ts +42 -23
  227. package/src/core/api/playback_observer.ts +12 -8
  228. package/src/core/api/public_api.ts +152 -113
  229. package/src/core/decrypt/README.md +22 -0
  230. package/src/core/decrypt/__tests__/__global__/get_license.test.ts +418 -0
  231. package/src/core/decrypt/__tests__/__global__/init_data.test.ts +675 -0
  232. package/src/core/{eme → decrypt}/__tests__/__global__/media_key_system_access.test.ts +99 -92
  233. package/src/core/decrypt/__tests__/__global__/media_keys.test.ts +156 -0
  234. package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +262 -0
  235. package/src/core/{eme → decrypt}/__tests__/__global__/utils.ts +31 -93
  236. package/src/core/{eme → decrypt}/attach_media_keys.ts +48 -56
  237. package/src/core/decrypt/clear_on_stop.ts +47 -0
  238. package/src/core/decrypt/content_decryptor.ts +1157 -0
  239. package/src/core/decrypt/create_or_load_session.ts +130 -0
  240. package/src/core/decrypt/create_session.ts +174 -0
  241. package/src/core/decrypt/dispose_decryption_resources.ts +39 -0
  242. package/src/core/{eme → decrypt}/find_key_system.ts +111 -122
  243. package/src/core/{eme → decrypt}/get_current_key_system.ts +1 -1
  244. package/src/core/decrypt/get_media_keys.ts +145 -0
  245. package/src/core/{eme → decrypt}/index.ts +11 -8
  246. package/src/core/decrypt/init_media_keys.ts +51 -0
  247. package/src/core/{eme → decrypt}/session_events_listener.ts +93 -55
  248. package/src/core/decrypt/set_server_certificate.ts +104 -0
  249. package/src/core/{eme → decrypt}/types.ts +128 -258
  250. package/src/core/{eme → decrypt}/utils/__tests__/are_init_values_compatible.test.ts +1 -1
  251. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_loaded_sessions.test.ts +29 -71
  252. package/src/core/{eme → decrypt/utils}/__tests__/clean_old_stored_persistent_info.test.ts +6 -6
  253. package/src/core/{eme → decrypt}/utils/are_init_values_compatible.ts +9 -9
  254. package/src/core/{eme → decrypt/utils}/check_key_statuses.ts +6 -5
  255. package/{dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js → src/core/decrypt/utils/clean_old_loaded_sessions.ts} +19 -20
  256. package/src/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.ts +3 -3
  257. package/src/core/{eme → decrypt/utils}/get_drm_system_id.ts +1 -1
  258. package/src/core/decrypt/utils/init_data_values_container.ts +119 -0
  259. package/src/core/{eme → decrypt}/utils/is_session_usable.ts +4 -5
  260. package/src/core/decrypt/utils/key_id_comparison.ts +82 -0
  261. package/src/core/decrypt/utils/key_session_record.ts +175 -0
  262. package/src/core/decrypt/utils/loaded_sessions_store.ts +317 -0
  263. package/src/core/{eme → decrypt/utils}/media_keys_infos_store.ts +4 -4
  264. package/src/core/{eme → decrypt}/utils/persistent_sessions_store.ts +122 -104
  265. package/src/core/{eme/utils/init_data_container.ts → decrypt/utils/serializable_bytes.ts} +8 -5
  266. package/src/core/{eme → decrypt/utils}/server_certificate_store.ts +2 -2
  267. package/src/core/fetchers/manifest/manifest_fetcher.ts +5 -7
  268. package/src/core/fetchers/segment/segment_fetcher.ts +4 -4
  269. package/src/core/fetchers/segment/segment_fetcher_creator.ts +2 -2
  270. package/src/core/fetchers/utils/try_urls_with_backoff.ts +2 -3
  271. package/src/core/init/.initialize_media_source.ts.un~ +0 -0
  272. package/src/core/init/get_initial_time.ts +2 -1
  273. package/src/core/init/initialize_directfile.ts +17 -20
  274. package/src/core/init/initialize_media_source.ts +44 -106
  275. package/src/core/init/link_drm_and_content.ts +176 -0
  276. package/src/core/init/manifest_update_scheduler.ts +5 -3
  277. package/src/core/init/stall_avoider.ts +6 -5
  278. package/src/core/init/stream_events_emitter/stream_events_emitter.ts +2 -1
  279. package/src/core/init/types.ts +1 -39
  280. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +2 -1
  281. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +3 -4
  282. package/src/core/segment_buffers/inventory/segment_inventory.ts +42 -8
  283. package/src/core/stream/adaptation/adaptation_stream.ts +7 -1
  284. package/src/core/stream/events_generators.ts +9 -4
  285. package/src/core/stream/index.ts +1 -0
  286. package/src/core/stream/orchestrator/stream_orchestrator.ts +9 -4
  287. package/src/core/stream/period/create_empty_adaptation_stream.ts +2 -1
  288. package/src/core/stream/period/get_adaptation_switch_strategy.ts +25 -15
  289. package/src/core/stream/period/index.ts +1 -0
  290. package/src/core/stream/period/period_stream.ts +10 -16
  291. package/src/core/stream/representation/force_garbage_collection.ts +2 -2
  292. package/src/core/stream/representation/get_buffer_status.ts +28 -16
  293. package/src/core/stream/representation/get_needed_segments.ts +124 -28
  294. package/src/core/stream/representation/get_segment_priority.ts +1 -2
  295. package/src/core/stream/representation/push_media_segment.ts +3 -2
  296. package/src/core/stream/representation/representation_stream.ts +30 -7
  297. package/src/core/stream/types.ts +1 -1
  298. package/src/default_config.ts +1241 -0
  299. package/src/experimental/index.ts +5 -0
  300. package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +1 -0
  301. package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +7 -7
  302. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +3 -10
  303. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +9 -10
  304. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/decodingInfos.test.ts +2 -4
  305. package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +2 -3
  306. package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +1 -2
  307. package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +3 -5
  308. package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.ts +3 -5
  309. package/src/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.ts +1 -2
  310. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.ts +1 -2
  311. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.ts +1 -2
  312. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.ts +1 -2
  313. package/src/features/__tests__/initialize_features.test.ts +2 -2
  314. package/src/features/features_object.ts +1 -1
  315. package/src/features/initialize_features.ts +1 -1
  316. package/src/features/list/__tests__/eme.test.ts +5 -5
  317. package/src/features/list/eme.ts +5 -5
  318. package/src/features/types.ts +3 -10
  319. package/src/manifest/manifest.ts +6 -76
  320. package/src/manifest/representation.ts +36 -3
  321. package/src/parsers/manifest/dash/common/indexes/is_period_fulfilled.ts +1 -2
  322. package/src/parsers/manifest/dash/common/indexes/template.ts +1 -2
  323. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +1 -1
  324. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +109 -64
  325. package/src/parsers/manifest/dash/common/parse_mpd.ts +1 -2
  326. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +4 -5
  327. package/src/parsers/manifest/smooth/create_parser.ts +1 -0
  328. package/src/parsers/texttracks/webvtt/html/__tests__/create_styled_element.test.ts +1 -0
  329. package/src/public_types.ts +6 -1
  330. package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +1 -2
  331. package/src/transports/dash/image_pipelines.ts +15 -14
  332. package/src/transports/dash/init_segment_loader.ts +1 -2
  333. package/src/transports/dash/manifest_parser.ts +2 -3
  334. package/src/transports/dash/segment_loader.ts +4 -5
  335. package/src/transports/dash/segment_parser.ts +5 -0
  336. package/src/transports/dash/text_loader.ts +2 -3
  337. package/src/transports/dash/text_parser.ts +8 -0
  338. package/src/transports/local/segment_loader.ts +2 -3
  339. package/src/transports/local/segment_parser.ts +4 -0
  340. package/src/transports/local/text_parser.ts +8 -0
  341. package/src/transports/metaplaylist/pipelines.ts +2 -3
  342. package/src/transports/smooth/pipelines.ts +26 -14
  343. package/src/transports/smooth/segment_loader.ts +5 -6
  344. package/src/transports/types.ts +22 -0
  345. package/src/transports/utils/call_custom_manifest_loader.ts +1 -2
  346. package/src/utils/__tests__/deep_merge.test.ts +48 -0
  347. package/src/utils/cancellable_sleep.ts +1 -2
  348. package/src/utils/cast_to_observable.ts +0 -2
  349. package/src/utils/deep_merge.ts +46 -0
  350. package/src/utils/reference.ts +116 -23
  351. package/src/utils/request/fetch.ts +1 -2
  352. package/src/utils/request/xhr.ts +3 -3
  353. package/src/utils/rx-from_cancellable_promise.ts +7 -2
  354. package/src/utils/task_canceller.ts +6 -4
  355. package/tsconfig.json +0 -1
  356. package/tsconfig.modules.json +0 -1
  357. package/dist/_esm5.processed/core/eme/attach_media_keys.js +0 -57
  358. package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.d.ts +0 -59
  359. package/dist/_esm5.processed/core/eme/clear_eme_session.js +0 -50
  360. package/dist/_esm5.processed/core/eme/create_session.js +0 -126
  361. package/dist/_esm5.processed/core/eme/dispose_eme.d.ts +0 -19
  362. package/dist/_esm5.processed/core/eme/dispose_eme.js +0 -23
  363. package/dist/_esm5.processed/core/eme/dispose_media_keys.js +0 -36
  364. package/dist/_esm5.processed/core/eme/eme_manager.d.ts +0 -31
  365. package/dist/_esm5.processed/core/eme/eme_manager.js +0 -278
  366. package/dist/_esm5.processed/core/eme/find_key_system.js +0 -253
  367. package/dist/_esm5.processed/core/eme/get_media_keys.js +0 -85
  368. package/dist/_esm5.processed/core/eme/get_session.js +0 -68
  369. package/dist/_esm5.processed/core/eme/init_media_keys.js +0 -66
  370. package/dist/_esm5.processed/core/eme/session_events_listener.d.ts +0 -41
  371. package/dist/_esm5.processed/core/eme/set_server_certificate.js +0 -85
  372. package/dist/_esm5.processed/core/eme/utils/close_session.js +0 -81
  373. package/dist/_esm5.processed/core/eme/utils/init_data_store.d.ts +0 -115
  374. package/dist/_esm5.processed/core/eme/utils/init_data_store.js +0 -181
  375. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.d.ts +0 -123
  376. package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +0 -173
  377. package/dist/_esm5.processed/core/init/create_eme_manager.d.ts +0 -34
  378. package/dist/_esm5.processed/core/init/create_eme_manager.js +0 -52
  379. package/src/core/eme/README.md +0 -26
  380. package/src/core/eme/__tests__/__global__/get_license.test.ts +0 -414
  381. package/src/core/eme/__tests__/__global__/init_data.test.ts +0 -908
  382. package/src/core/eme/__tests__/__global__/media_keys.test.ts +0 -266
  383. package/src/core/eme/__tests__/__global__/server_certificate.test.ts +0 -364
  384. package/src/core/eme/__tests__/init_media_keys.test.ts +0 -182
  385. package/src/core/eme/clean_old_loaded_sessions.ts +0 -96
  386. package/src/core/eme/clear_eme_session.ts +0 -62
  387. package/src/core/eme/create_session.ts +0 -187
  388. package/src/core/eme/dispose_eme.ts +0 -25
  389. package/src/core/eme/dispose_media_keys.ts +0 -46
  390. package/src/core/eme/eme_manager.ts +0 -387
  391. package/src/core/eme/get_media_keys.ts +0 -141
  392. package/src/core/eme/get_session.ts +0 -135
  393. package/src/core/eme/init_media_keys.ts +0 -106
  394. package/src/core/eme/set_server_certificate.ts +0 -115
  395. package/src/core/eme/utils/close_session.ts +0 -113
  396. package/src/core/eme/utils/init_data_store.ts +0 -234
  397. package/src/core/eme/utils/loaded_sessions_store.ts +0 -235
  398. package/src/core/init/create_eme_manager.ts +0 -95
  399. package/src/utils/__tests__/promise.test.ts +0 -23
  400. package/src/utils/promise.ts +0 -20
@@ -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
- });