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