shaka-player 3.3.2 → 4.0.0

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 (389) hide show
  1. package/.csslintrc +11 -1
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
  3. package/.github/pull_request_template.md +6 -34
  4. package/.github/workflows/build-and-test.yaml +129 -0
  5. package/.github/workflows/custom-actions/prep-for-appspot/action.yaml +56 -0
  6. package/.github/workflows/custom-actions/set-commit-status/action.yaml +41 -0
  7. package/.github/workflows/demo-version-index.yaml +37 -0
  8. package/.github/workflows/nightly-demo.yaml +42 -0
  9. package/.github/workflows/release-please.yaml +168 -0
  10. package/.github/workflows/safari-homedir-launcher.sh +18 -0
  11. package/.github/workflows/selenium-lab-tests.yaml +92 -0
  12. package/.github/workflows/sync-labels.yaml +33 -0
  13. package/.github/workflows/update-issues.yaml +29 -0
  14. package/.github/workflows/validate-pr-title.yaml +35 -0
  15. package/AUTHORS +3 -0
  16. package/CHANGELOG.md +1866 -1675
  17. package/CONTRIBUTING.md +2 -2
  18. package/CONTRIBUTORS +3 -0
  19. package/README.md +16 -13
  20. package/app-engine/README.md +9 -0
  21. package/app-engine/demo-version-index/README.md +14 -0
  22. package/app-engine/demo-version-index/app.yaml +28 -0
  23. package/app-engine/demo-version-index/generate.py +164 -0
  24. package/app-engine/demo-version-index/main.py +11 -0
  25. package/app-engine/demo-version-index/requirements.txt +5 -0
  26. package/app-engine/demo-version-index/templates/index.html +114 -0
  27. package/app-engine/shaka-player-demo/README.md +18 -0
  28. package/app-engine/shaka-player-demo/app.yaml +61 -0
  29. package/app-engine/shaka-player-demo/main.py +95 -0
  30. package/app-engine/shaka-player-demo/posters/10yo.png +0 -0
  31. package/app-engine/shaka-player-demo/posters/10yo.xcf +0 -0
  32. package/app-engine/shaka-player-demo/posters/1yo.jpg +0 -0
  33. package/app-engine/shaka-player-demo/posters/2yo.png +0 -0
  34. package/app-engine/shaka-player-demo/posters/2yo.xcf +0 -0
  35. package/app-engine/shaka-player-demo/posters/3yo.png +0 -0
  36. package/app-engine/shaka-player-demo/posters/3yo.xcf +0 -0
  37. package/app-engine/shaka-player-demo/posters/4yo.png +0 -0
  38. package/app-engine/shaka-player-demo/posters/4yo.xcf +0 -0
  39. package/app-engine/shaka-player-demo/posters/5yo.png +0 -0
  40. package/app-engine/shaka-player-demo/posters/5yo.xcf +0 -0
  41. package/app-engine/shaka-player-demo/posters/6yo.png +0 -0
  42. package/app-engine/shaka-player-demo/posters/6yo.xcf +0 -0
  43. package/app-engine/shaka-player-demo/posters/7yo.png +0 -0
  44. package/app-engine/shaka-player-demo/posters/7yo.xcf +0 -0
  45. package/app-engine/shaka-player-demo/posters/8yo.png +0 -0
  46. package/app-engine/shaka-player-demo/posters/8yo.xcf +0 -0
  47. package/app-engine/shaka-player-demo/posters/9yo.png +0 -0
  48. package/app-engine/shaka-player-demo/posters/9yo.xcf +0 -0
  49. package/app-engine/shaka-player-demo/posters/audioOnly.gif +0 -0
  50. package/app-engine/shaka-player-demo/posters/audioRickRoll.gif +0 -0
  51. package/app-engine/shaka-player-demo/posters/colorbars.gif +0 -0
  52. package/app-engine/shaka-player-demo/posters/fireworks.jpg +0 -0
  53. package/app-engine/shaka-player-demo/posters/party-hat.png +0 -0
  54. package/app-engine/shaka-player-demo/posters/sources.txt +46 -0
  55. package/app-engine/shaka-player-demo/posters/standard.png +0 -0
  56. package/app-engine/shaka-player-demo/posters/trek.jpg +0 -0
  57. package/app-engine/shaka-player-demo/posters/valentines.png +0 -0
  58. package/app-engine/shaka-player-demo/posters/zombie.jpg +0 -0
  59. package/app-engine/shaka-player-demo/posters.py +110 -0
  60. package/app-engine/shaka-player-demo/requirements.txt +5 -0
  61. package/app-engine/shaka-player-demo/time.txt +1 -0
  62. package/build/README.md +3 -3
  63. package/build/checkversion.py +1 -1
  64. package/build/compiler.py +1 -1
  65. package/build/conformance.textproto +13 -0
  66. package/build/docker/Dockerfile +20 -0
  67. package/build/docker/docker-compose.yml +10 -0
  68. package/build/gendeps.py +18 -15
  69. package/build/shaka-lab.yaml +161 -0
  70. package/build/shakaBuildHelpers.py +4 -29
  71. package/build/test.py +94 -29
  72. package/build/types/core +0 -1
  73. package/build/types/polyfill +1 -3
  74. package/build/wrapper.template.js +2 -2
  75. package/demo/TengwarTelcontar.woff2 +0 -0
  76. package/demo/asset_card.js +1 -2
  77. package/demo/cast_receiver/index.html +1 -1
  78. package/demo/cast_receiver/receiver_app.css +14 -14
  79. package/demo/common/asset.js +17 -1
  80. package/demo/common/assets.js +31 -0
  81. package/demo/common/message_ids.js +6 -3
  82. package/demo/config.js +10 -12
  83. package/demo/custom.js +39 -1
  84. package/demo/customWarning.txt +2 -2
  85. package/demo/demo.less +29 -18
  86. package/demo/demo_uncompiled.js +1 -13
  87. package/demo/demo_utils.js +0 -1
  88. package/demo/index.html +1 -1
  89. package/demo/locales/en.json +6 -3
  90. package/demo/locales/source.json +22 -10
  91. package/demo/main.js +12 -9
  92. package/demo/search.js +2 -1
  93. package/dist/controls.css +3 -3
  94. package/dist/controls.css.map +1 -1
  95. package/dist/demo.compiled.debug.js +236 -232
  96. package/dist/demo.compiled.debug.map +4 -4
  97. package/dist/demo.compiled.js +236 -232
  98. package/dist/demo.compiled.map +4 -4
  99. package/dist/demo.css +1 -1
  100. package/dist/demo.css.map +1 -1
  101. package/dist/deps.js +229 -226
  102. package/dist/locales.js +34 -32
  103. package/dist/receiver.compiled.debug.js +75 -73
  104. package/dist/receiver.compiled.debug.map +4 -4
  105. package/dist/receiver.compiled.js +75 -73
  106. package/dist/receiver.compiled.map +4 -4
  107. package/dist/shaka-player.compiled.d.ts +321 -314
  108. package/dist/shaka-player.compiled.debug.d.ts +321 -314
  109. package/dist/shaka-player.compiled.debug.externs.js +140 -129
  110. package/dist/shaka-player.compiled.debug.js +527 -592
  111. package/dist/shaka-player.compiled.debug.map +4 -4
  112. package/dist/shaka-player.compiled.externs.js +140 -129
  113. package/dist/shaka-player.compiled.js +836 -860
  114. package/dist/shaka-player.compiled.map +4 -4
  115. package/dist/shaka-player.ui.d.ts +367 -358
  116. package/dist/shaka-player.ui.debug.d.ts +367 -358
  117. package/dist/shaka-player.ui.debug.externs.js +148 -129
  118. package/dist/shaka-player.ui.debug.js +586 -649
  119. package/dist/shaka-player.ui.debug.map +4 -4
  120. package/dist/shaka-player.ui.externs.js +148 -129
  121. package/dist/shaka-player.ui.js +1008 -1028
  122. package/dist/shaka-player.ui.map +4 -4
  123. package/docs/design/REDESIGN.md +33 -33
  124. package/docs/design/bg-fetch.md +2 -2
  125. package/docs/design/codec_preferences.md +1 -1
  126. package/docs/design/dash-audio-channels.md +3 -3
  127. package/docs/design/dash-manifests.md +1 -1
  128. package/docs/design/gap-jumping.md +3 -3
  129. package/docs/design/preload.md +2 -2
  130. package/docs/tutorials/config.md +0 -2
  131. package/docs/tutorials/drm-config.md +5 -0
  132. package/docs/tutorials/fairplay.md +7 -22
  133. package/docs/tutorials/faq.md +8 -19
  134. package/docs/tutorials/index.json +3 -8
  135. package/docs/tutorials/plugins.md +4 -6
  136. package/docs/tutorials/selenium-grid-config.md +122 -0
  137. package/docs/tutorials/upgrade.md +83 -11
  138. package/docs/tutorials/welcome.md +10 -2
  139. package/externs/cmcd.js +1 -1
  140. package/externs/polyfill.js +15 -0
  141. package/externs/shaka/manifest.js +5 -1
  142. package/externs/shaka/net.js +12 -0
  143. package/externs/shaka/offline.js +5 -1
  144. package/externs/shaka/player.js +39 -32
  145. package/externs/shaka/text.js +12 -12
  146. package/externs/sourcebuffer.js +15 -0
  147. package/karma.conf.js +137 -30
  148. package/lib/abr/simple_abr_manager.js +12 -6
  149. package/lib/ads/client_side_ad.js +13 -2
  150. package/lib/ads/client_side_ad_manager.js +22 -4
  151. package/lib/cast/cast_proxy.js +3 -4
  152. package/lib/cast/cast_utils.js +0 -1
  153. package/lib/cea/cea608_data_channel.js +2 -2
  154. package/lib/cea/cea708_service.js +5 -4
  155. package/lib/cea/mp4_cea_parser.js +11 -5
  156. package/lib/cea/sei_processor.js +6 -3
  157. package/lib/dash/content_protection.js +85 -5
  158. package/lib/dash/dash_parser.js +10 -12
  159. package/lib/dash/mpd_utils.js +4 -5
  160. package/lib/dash/segment_list.js +1 -2
  161. package/lib/dash/segment_template.js +3 -3
  162. package/lib/hls/hls_parser.js +386 -749
  163. package/lib/hls/manifest_text_parser.js +5 -6
  164. package/lib/media/adaptation_set.js +1 -2
  165. package/lib/media/content_workarounds.js +2 -2
  166. package/lib/media/drm_engine.js +105 -55
  167. package/lib/media/gap_jumping_controller.js +10 -45
  168. package/lib/media/media_source_engine.js +90 -17
  169. package/lib/media/mp4_segment_index_parser.js +1 -4
  170. package/lib/media/playhead.js +4 -7
  171. package/lib/media/presentation_timeline.js +19 -10
  172. package/lib/media/segment_index.js +13 -46
  173. package/lib/media/segment_reference.js +47 -1
  174. package/lib/media/streaming_engine.js +35 -17
  175. package/lib/media/time_ranges_utils.js +5 -12
  176. package/lib/media/video_wrapper.js +1 -1
  177. package/lib/net/networking_engine.js +4 -1
  178. package/lib/offline/indexeddb/v1_storage_cell.js +1 -0
  179. package/lib/offline/indexeddb/v2_storage_cell.js +1 -0
  180. package/lib/offline/manifest_converter.js +1 -0
  181. package/lib/offline/storage.js +104 -136
  182. package/lib/player.js +50 -216
  183. package/lib/polyfill/all.js +2 -3
  184. package/lib/polyfill/encryption_scheme.js +1 -1
  185. package/lib/polyfill/media_capabilities.js +15 -9
  186. package/lib/polyfill/mediasource.js +0 -28
  187. package/lib/polyfill/patchedmediakeys_nop.js +2 -0
  188. package/lib/polyfill/patchedmediakeys_webkit.js +2 -0
  189. package/lib/polyfill/symbol.js +46 -0
  190. package/lib/text/cue.js +1 -7
  191. package/lib/text/lrc_text_parser.js +8 -0
  192. package/lib/text/mp4_ttml_parser.js +8 -0
  193. package/lib/text/mp4_vtt_parser.js +8 -0
  194. package/lib/text/sbv_text_parser.js +8 -0
  195. package/lib/text/simple_text_displayer.js +3 -8
  196. package/lib/text/srt_text_parser.js +8 -0
  197. package/lib/text/ssa_text_parser.js +8 -0
  198. package/lib/text/text_engine.js +19 -3
  199. package/lib/text/ttml_text_parser.js +16 -5
  200. package/lib/text/ui_text_displayer.js +2 -8
  201. package/lib/text/vtt_text_parser.js +24 -2
  202. package/lib/text/web_vtt_generator.js +1 -7
  203. package/lib/util/buffer_utils.js +1 -3
  204. package/lib/util/ebml_parser.js +3 -3
  205. package/lib/util/error.js +10 -14
  206. package/lib/util/fairplay_utils.js +109 -0
  207. package/lib/util/functional.js +0 -42
  208. package/lib/util/iterables.js +0 -46
  209. package/lib/util/mime_utils.js +2 -0
  210. package/lib/util/mp4_box_parsers.js +1 -4
  211. package/lib/util/mp4_parser.js +5 -7
  212. package/lib/util/periods.js +10 -11
  213. package/lib/util/platform.js +48 -3
  214. package/lib/util/player_configuration.js +12 -6
  215. package/lib/util/pssh.js +24 -8
  216. package/lib/util/stream_utils.js +96 -25
  217. package/lib/util/string_utils.js +3 -5
  218. package/lib/util/uint8array_utils.js +3 -21
  219. package/lib/util/xml_utils.js +16 -8
  220. package/package.json +61 -36
  221. package/roadmap.md +27 -27
  222. package/shaka-player.uncompiled.js +1 -3
  223. package/test/abr/simple_abr_manager_unit.js +3 -8
  224. package/test/ads/ad_manager_unit.js +0 -6
  225. package/test/cast/cast_proxy_unit.js +0 -8
  226. package/test/cast/cast_receiver_integration.js +1 -18
  227. package/test/cast/cast_receiver_unit.js +1 -9
  228. package/test/cast/cast_sender_unit.js +0 -6
  229. package/test/cast/cast_utils_unit.js +1 -13
  230. package/test/cea/cea608_memory_unit.js +0 -5
  231. package/test/cea/cea708_service_unit.js +0 -7
  232. package/test/cea/cea708_window_unit.js +0 -5
  233. package/test/cea/cea_decoder_unit.js +0 -6
  234. package/test/cea/dtvcc_packet_builder_unit.js +0 -3
  235. package/test/cea/dtvcc_packet_unit.js +0 -5
  236. package/test/cea/mp4_cea_parser_unit.js +0 -4
  237. package/test/dash/dash_parser_content_protection_unit.js +45 -10
  238. package/test/dash/dash_parser_live_unit.js +2 -15
  239. package/test/dash/dash_parser_manifest_unit.js +2 -40
  240. package/test/dash/dash_parser_segment_base_unit.js +1 -8
  241. package/test/dash/dash_parser_segment_list_unit.js +1 -7
  242. package/test/dash/dash_parser_segment_template_unit.js +3 -13
  243. package/test/dash/mpd_utils_unit.js +3 -11
  244. package/test/demo/demo_unit.js +2 -6
  245. package/test/deprecate/enforcer_unit.js +0 -4
  246. package/test/deprecate/version_unit.js +0 -2
  247. package/test/hls/hls_live_unit.js +101 -234
  248. package/test/hls/hls_parser_unit.js +517 -447
  249. package/test/hls/manifest_text_parser_unit.js +0 -10
  250. package/test/media/adaptation_set_criteria_unit.js +3 -7
  251. package/test/media/adaptation_set_unit.js +0 -2
  252. package/test/media/buffering_observer_unit.js +1 -4
  253. package/test/media/closed_caption_parser_unit.js +0 -3
  254. package/test/media/drm_engine_integration.js +2 -15
  255. package/test/media/drm_engine_unit.js +90 -144
  256. package/test/media/manifest_parser_unit.js +0 -4
  257. package/test/media/media_source_engine_integration.js +26 -10
  258. package/test/media/media_source_engine_unit.js +8 -20
  259. package/test/media/mp4_segment_index_parser_unit.js +0 -4
  260. package/test/media/play_rate_controller_unit.js +0 -4
  261. package/test/media/playhead_unit.js +35 -207
  262. package/test/media/presentation_timeline_unit.js +4 -7
  263. package/test/media/quality_observer_unit.js +0 -4
  264. package/test/media/region_observer_unit.js +1 -6
  265. package/test/media/region_timeline_unit.js +0 -3
  266. package/test/media/segment_index_unit.js +15 -31
  267. package/test/media/segment_reference_unit.js +0 -3
  268. package/test/media/stall_detector_unit.js +0 -5
  269. package/test/media/streaming_engine_integration.js +13 -75
  270. package/test/media/streaming_engine_unit.js +14 -37
  271. package/test/media/time_ranges_utils_unit.js +0 -7
  272. package/test/media/transmuxer_integration.js +0 -6
  273. package/test/media/webm_segment_index_parser_unit.js +0 -4
  274. package/test/net/data_uri_plugin_unit.js +0 -7
  275. package/test/net/http_plugin_unit.js +0 -9
  276. package/test/net/networking_engine_unit.js +0 -11
  277. package/test/offline/download_progress_estimator_unit.js +0 -2
  278. package/test/offline/indexeddb_storage_unit.js +0 -6
  279. package/test/offline/manifest_convert_unit.js +34 -12
  280. package/test/offline/offline_integration.js +1 -10
  281. package/test/offline/offline_manifest_parser_unit.js +1 -6
  282. package/test/offline/offline_scheme_unit.js +0 -8
  283. package/test/offline/offline_uri_unit.js +0 -2
  284. package/test/offline/storage_compatibility_unit.js +1 -14
  285. package/test/offline/storage_integration.js +6 -31
  286. package/test/player_external.js +1 -15
  287. package/test/player_integration.js +38 -28
  288. package/test/player_load_graph_integration.js +1 -6
  289. package/test/player_src_equals_external.js +3 -9
  290. package/test/player_src_equals_integration.js +0 -7
  291. package/test/player_unit.js +78 -37
  292. package/test/routing/walker_unit.js +0 -8
  293. package/test/test/assets/large_file.mpd +1 -1
  294. package/test/test/boot.js +75 -22
  295. package/test/test/externs/jasmine.js +2 -2
  296. package/test/test/externs/karma.js +4 -0
  297. package/test/test/namespace.js +10 -0
  298. package/test/test/util/canned_idb.js +0 -8
  299. package/test/test/util/cea_utils.js +0 -6
  300. package/test/test/util/dash_parser_util.js +0 -13
  301. package/test/test/util/fake_ad.js +0 -3
  302. package/test/test/util/fake_ad_manager.js +0 -9
  303. package/test/test/util/fake_demo_main.js +0 -5
  304. package/test/test/util/fake_drm_engine.js +0 -6
  305. package/test/test/util/fake_media_source_engine.js +11 -11
  306. package/test/test/util/fake_networking_engine.js +0 -5
  307. package/test/test/util/fake_text_displayer.js +0 -5
  308. package/test/test/util/indexeddb_utils.js +1 -10
  309. package/test/test/util/jasmine_fetch.js +0 -1
  310. package/test/test/util/loader.js +0 -18
  311. package/test/test/util/manifest_generator.js +12 -15
  312. package/test/test/util/manifest_parser_util.js +4 -7
  313. package/test/test/util/offline_utils.js +1 -5
  314. package/test/test/util/simple_fakes.js +9 -26
  315. package/test/test/util/stream_generator.js +0 -14
  316. package/test/test/util/streaming_engine_util.js +1 -15
  317. package/test/test/util/test_scheme.js +25 -20
  318. package/test/test/util/ttml_utils.js +0 -2
  319. package/test/test/util/ui_utils.js +0 -9
  320. package/test/test/util/util.js +9 -23
  321. package/test/test/util/waiter.js +84 -43
  322. package/test/text/cue_integration.js +2 -6
  323. package/test/text/lrc_text_parser_unit.js +6 -11
  324. package/test/text/mp4_ttml_parser_unit.js +6 -10
  325. package/test/text/mp4_vtt_parser_unit.js +7 -12
  326. package/test/text/sbv_text_parser_unit.js +5 -10
  327. package/test/text/simple_text_displayer_unit.js +1 -8
  328. package/test/text/srt_text_parser_unit.js +5 -10
  329. package/test/text/ssa_text_parser_unit.js +17 -34
  330. package/test/text/text_engine_unit.js +47 -12
  331. package/test/text/text_track_integration.js +0 -2
  332. package/test/text/ttml_text_parser_unit.js +79 -88
  333. package/test/text/ui_text_displayer_unit.js +44 -41
  334. package/test/text/vtt_text_parser_unit.js +55 -66
  335. package/test/text/web_vtt_generator_unit.js +0 -3
  336. package/test/ui/ad_ui_unit.js +0 -11
  337. package/test/ui/localization_unit.js +0 -3
  338. package/test/ui/text_displayer_layout_unit.js +1 -12
  339. package/test/ui/ui_customization_unit.js +0 -6
  340. package/test/ui/ui_integration.js +0 -32
  341. package/test/ui/ui_unit.js +28 -17
  342. package/test/util/abortable_operation_unit.js +4 -9
  343. package/test/util/array_utils_unit.js +0 -2
  344. package/test/util/buffer_utils_unit.js +0 -2
  345. package/test/util/cmcd_manager_unit.js +3 -3
  346. package/test/util/data_view_reader_unit.js +0 -4
  347. package/test/util/ebml_parser_unit.js +0 -4
  348. package/test/util/event_manager_unit.js +0 -3
  349. package/test/util/fake_event_target_unit.js +0 -5
  350. package/test/util/iterables_unit.js +0 -64
  351. package/test/util/language_utils_unit.js +0 -3
  352. package/test/util/manifest_parser_utils_unit.js +0 -2
  353. package/test/util/mp4_box_parsers_unit.js +0 -5
  354. package/test/util/mp4_parser_unit.js +0 -4
  355. package/test/util/multi_map_unit.js +0 -3
  356. package/test/util/object_utils_unit.js +0 -2
  357. package/test/util/periods_unit.js +14 -7
  358. package/test/util/pssh_unit.js +0 -5
  359. package/test/util/state_history_unit.js +0 -2
  360. package/test/util/stream_utils_unit.js +26 -15
  361. package/test/util/string_utils_unit.js +0 -6
  362. package/test/util/text_parser_unit.js +0 -2
  363. package/test/util/xml_utils_unit.js +0 -4
  364. package/ui/controls.js +65 -40
  365. package/ui/fullscreen_button.js +26 -6
  366. package/ui/less/ad_controls.less +6 -6
  367. package/ui/less/buttons.less +6 -6
  368. package/ui/less/containers.less +10 -12
  369. package/ui/less/overflow_menu.less +4 -4
  370. package/ui/less/range_elements.less +7 -2
  371. package/ui/less/tooltip.less +4 -4
  372. package/ui/locales/en.json +1 -0
  373. package/ui/locales/sjn-translations.yaml +257 -0
  374. package/ui/locales/sjn.json +42 -0
  375. package/ui/locales/source.json +5 -0
  376. package/ui/resolution_selection.js +31 -33
  377. package/ui/seek_bar.js +2 -1
  378. package/ui/ui.js +0 -17
  379. package/.github/workflows/build_and_test.yaml +0 -73
  380. package/.github/workflows/release.yaml +0 -53
  381. package/docs/tutorials/upgrade-v2-5.md +0 -441
  382. package/docs/tutorials/upgrade-v3.md +0 -38
  383. package/externs/svgelement.js +0 -18
  384. package/externs/webcrypto.js +0 -18
  385. package/lib/polyfill/mathround.js +0 -49
  386. package/lib/polyfill/patchedmediakeys_apple.js +0 -744
  387. package/lib/polyfill/patchedmediakeys_ms.js +0 -698
  388. package/lib/util/mutex.js +0 -52
  389. package/test/util/functional_unit.js +0 -82
@@ -4,16 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
-
8
- goog.require('shaka.hls.Attribute');
9
- goog.require('shaka.hls.ManifestTextParser');
10
- goog.require('shaka.hls.PlaylistType');
11
- goog.require('shaka.hls.Segment');
12
- goog.require('shaka.hls.Tag');
13
- goog.require('shaka.test.Util');
14
- goog.require('shaka.util.Error');
15
- goog.require('shaka.util.StringUtils');
16
-
17
7
  describe('ManifestTextParser', () => {
18
8
  /** @type {!shaka.hls.ManifestTextParser} */
19
9
  let parser;
@@ -4,10 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.PreferenceBasedCriteria');
8
- goog.require('shaka.test.ManifestGenerator');
9
- goog.requireType('shaka.media.AdaptationSet');
10
-
11
7
  describe('AdaptationSetCriteria', () => {
12
8
  describe('preference based selection', () => {
13
9
  it('chooses variants in user\'s preferred language', () => {
@@ -84,7 +80,7 @@ describe('AdaptationSetCriteria', () => {
84
80
  });
85
81
 
86
82
  it('chooses only one role, even if none is preferred', () => {
87
- // Regression test for https://github.com/google/shaka-player/issues/949
83
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/949
88
84
  const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
89
85
  manifest.addVariant(1, (variant) => {
90
86
  variant.language = 'en';
@@ -136,7 +132,7 @@ describe('AdaptationSetCriteria', () => {
136
132
  });
137
133
 
138
134
  it('chooses only one role, even if all are primary', () => {
139
- // Regression test for https://github.com/google/shaka-player/issues/949
135
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/949
140
136
  const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
141
137
  manifest.addVariant(1, (variant) => {
142
138
  variant.language = 'en';
@@ -194,7 +190,7 @@ describe('AdaptationSetCriteria', () => {
194
190
  });
195
191
 
196
192
  it('chooses only one language, even if all are primary', () => {
197
- // Regression test for https://github.com/google/shaka-player/issues/918
193
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/918
198
194
  const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
199
195
  manifest.addVariant(1, (variant) => {
200
196
  variant.language = 'en';
@@ -4,8 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.AdaptationSet');
8
-
9
7
  describe('AdaptationSet', () => {
10
8
  describe('roles', () => {
11
9
  const mimeType = 'mime-type';
@@ -4,9 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.BufferingObserver');
8
- goog.require('shaka.util.Iterables');
9
-
10
7
  describe('BufferingObserver', () => {
11
8
  const BufferingObserver = shaka.media.BufferingObserver;
12
9
  const State = shaka.media.BufferingObserver.State;
@@ -115,7 +112,7 @@ describe('BufferingObserver', () => {
115
112
  /** @type {boolean} */
116
113
  let changed;
117
114
 
118
- for (const lead of shaka.util.Iterables.range(5)) {
115
+ for (let lead = 0; lead < 5; lead++) {
119
116
  changed = controller.update(lead, /* toEnd= */ false);
120
117
  expect(changed).toBeFalsy();
121
118
  }
@@ -4,9 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.ClosedCaptionParser');
8
- goog.require('shaka.test.Util');
9
-
10
7
  describe('ClosedCaptionParser', () => {
11
8
  it('can handle empty caption packets', async () => {
12
9
  const initSegment = await shaka.test.Util.fetch(
@@ -4,21 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.DrmEngine');
8
- goog.require('shaka.media.MediaSourceEngine');
9
- goog.require('shaka.net.NetworkingEngine');
10
- goog.require('shaka.test.FakeClosedCaptionParser');
11
- goog.require('shaka.test.FakeTextDisplayer');
12
- goog.require('shaka.test.ManifestGenerator');
13
- goog.require('shaka.test.UiUtils');
14
- goog.require('shaka.test.Util');
15
- goog.require('shaka.test.Waiter');
16
- goog.require('shaka.util.EventManager');
17
- goog.require('shaka.util.ManifestParserUtils');
18
- goog.require('shaka.util.Platform');
19
- goog.require('shaka.util.PlayerConfiguration');
20
- goog.require('shaka.util.PublicPromise');
21
-
22
7
  describe('DrmEngine', () => {
23
8
  const ContentType = shaka.util.ManifestParserUtils.ContentType;
24
9
 
@@ -271,6 +256,7 @@ describe('DrmEngine', () => {
271
256
  video.play();
272
257
 
273
258
  const waiter = new shaka.test.Waiter(eventManager).timeoutAfter(15);
259
+ waiter.setMediaSourceEngine(mediaSourceEngine);
274
260
  await waiter.waitForMovement(video);
275
261
 
276
262
  // Something should have played by now.
@@ -351,6 +337,7 @@ describe('DrmEngine', () => {
351
337
  video.play();
352
338
 
353
339
  const waiter = new shaka.test.Waiter(eventManager).timeoutAfter(15);
340
+ waiter.setMediaSourceEngine(mediaSourceEngine);
354
341
  await waiter.waitForMovement(video);
355
342
 
356
343
  // Something should have played by now.
@@ -4,26 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.log');
8
- goog.require('shaka.media.DrmEngine');
9
- goog.require('shaka.media.Transmuxer');
10
- goog.require('shaka.net.DataUriPlugin');
11
- goog.require('shaka.net.NetworkingEngine');
12
- goog.require('shaka.test.FakeNetworkingEngine');
13
- goog.require('shaka.test.FakeVideo');
14
- goog.require('shaka.test.ManifestGenerator');
15
- goog.require('shaka.test.Util');
16
- goog.require('shaka.util.AbortableOperation');
17
- goog.require('shaka.util.BufferUtils');
18
- goog.require('shaka.util.Error');
19
- goog.require('shaka.util.Platform');
20
- goog.require('shaka.util.PlayerConfiguration');
21
- goog.require('shaka.util.Platform');
22
- goog.require('shaka.util.PublicPromise');
23
- goog.require('shaka.util.StringUtils');
24
- goog.require('shaka.util.Uint8ArrayUtils');
25
-
26
-
27
7
  describe('DrmEngine', () => {
28
8
  const Util = shaka.test.Util;
29
9
 
@@ -776,11 +756,6 @@ describe('DrmEngine', () => {
776
756
  expect(mockVideo.setMediaKeys).not.toHaveBeenCalled();
777
757
  });
778
758
 
779
- it('sets MediaKeys for encrypted content', async () => {
780
- await initAndAttach();
781
- expect(mockVideo.setMediaKeys).toHaveBeenCalledWith(mockMediaKeys);
782
- });
783
-
784
759
  it('sets server certificate if present in config', async () => {
785
760
  const cert = new Uint8Array(1);
786
761
  config.advanced['drm.abc'] = createAdvancedConfig(cert);
@@ -877,7 +852,7 @@ describe('DrmEngine', () => {
877
852
  /** @type {!Uint8Array} */
878
853
  const initData1 = new Uint8Array(5);
879
854
  /** @type {!Uint8Array} */
880
- const initData2 = new Uint8Array(0);
855
+ const initData2 = new Uint8Array(1);
881
856
  /** @type {!Uint8Array} */
882
857
  const initData3 = new Uint8Array(10);
883
858
 
@@ -925,7 +900,7 @@ describe('DrmEngine', () => {
925
900
  .toHaveBeenCalledWith('cenc', initData1);
926
901
  });
927
902
 
928
- // https://github.com/google/shaka-player/issues/2754
903
+ // https://github.com/shaka-project/shaka-player/issues/2754
929
904
  it('ignores duplicate init data from newInitData', async () => {
930
905
  /** @type {!Uint8Array} */
931
906
  const initData = new Uint8Array(1);
@@ -1019,12 +994,23 @@ describe('DrmEngine', () => {
1019
994
  mockVideo.setMediaKeys.and.returnValue(Promise.reject(
1020
995
  new Error('whoops!')));
1021
996
 
1022
- const expected = Util.jasmineError(new shaka.util.Error(
997
+ tweakDrmInfos((drmInfos) => {
998
+ drmInfos[0].initData = [
999
+ {initData: new Uint8Array(1), initDataType: 'cenc', keyId: null},
1000
+ ];
1001
+ });
1002
+
1003
+ onErrorSpy.and.stub();
1004
+
1005
+ await initAndAttach();
1006
+
1007
+ expect(onErrorSpy).toHaveBeenCalled();
1008
+ const error = onErrorSpy.calls.argsFor(0)[0];
1009
+ shaka.test.Util.expectToEqualError(error, new shaka.util.Error(
1023
1010
  shaka.util.Error.Severity.CRITICAL,
1024
1011
  shaka.util.Error.Category.DRM,
1025
1012
  shaka.util.Error.Code.FAILED_TO_ATTACH_TO_VIDEO,
1026
1013
  'whoops!'));
1027
- await expectAsync(initAndAttach()).toBeRejectedWith(expected);
1028
1014
  });
1029
1015
 
1030
1016
  it('fails with an error if setServerCertificate fails', async () => {
@@ -1087,10 +1073,8 @@ describe('DrmEngine', () => {
1087
1073
  const initData1 = new Uint8Array(1);
1088
1074
  const initData2 = new Uint8Array(2);
1089
1075
 
1090
- mockVideo.on['encrypted'](
1091
- {initDataType: 'webm', initData: initData1, keyId: null});
1092
- mockVideo.on['encrypted'](
1093
- {initDataType: 'cenc', initData: initData2, keyId: null});
1076
+ await sendEncryptedEvent('webm', initData1);
1077
+ await sendEncryptedEvent('cenc', initData2);
1094
1078
 
1095
1079
  expect(mockMediaKeys.createSession).toHaveBeenCalledTimes(2);
1096
1080
  expect(session1.generateRequest)
@@ -1101,32 +1085,23 @@ describe('DrmEngine', () => {
1101
1085
 
1102
1086
  it('suppresses duplicate initDatas', async () => {
1103
1087
  await initAndAttach();
1088
+
1104
1089
  const initData1 = new Uint8Array(1);
1105
- const initData2 = new Uint8Array(1); // identical to initData1
1106
1090
 
1107
- mockVideo.on['encrypted'](
1108
- {initDataType: 'webm', initData: initData1, keyId: null});
1109
- mockVideo.on['encrypted'](
1110
- {initDataType: 'cenc', initData: initData2, keyId: null});
1091
+ await sendEncryptedEvent('webm', initData1);
1092
+ await sendEncryptedEvent('cenc'); // identical to webm initData
1111
1093
 
1112
1094
  expect(mockMediaKeys.createSession).toHaveBeenCalledTimes(1);
1113
1095
  expect(session1.generateRequest)
1114
1096
  .toHaveBeenCalledWith('webm', initData1);
1115
1097
  });
1116
1098
 
1117
- it('is ignored when init data is in DrmInfo', async () => {
1118
- // Set up an init data override in the manifest:
1119
- tweakDrmInfos((drmInfos) => {
1120
- drmInfos[0].initData = [
1121
- {initData: new Uint8Array(0), initDataType: 'cenc', keyId: null},
1122
- ];
1123
- });
1124
-
1099
+ it('set media keys when not already done at startup', async () => {
1125
1100
  await initAndAttach();
1126
- // We already created a session for the init data override.
1101
+ await sendEncryptedEvent();
1102
+
1103
+ expect(mockVideo.setMediaKeys).toHaveBeenCalledTimes(1);
1127
1104
  expect(mockMediaKeys.createSession).toHaveBeenCalledTimes(1);
1128
- // We aren't even listening for 'encrypted' events.
1129
- expect(mockVideo.on['encrypted']).toBe(undefined);
1130
1105
  });
1131
1106
 
1132
1107
  it('dispatches an error if createSession fails', async () => {
@@ -1134,9 +1109,7 @@ describe('DrmEngine', () => {
1134
1109
  onErrorSpy.and.stub();
1135
1110
 
1136
1111
  await initAndAttach();
1137
- const initData1 = new Uint8Array(1);
1138
- mockVideo.on['encrypted'](
1139
- {initDataType: 'webm', initData: initData1, keyId: null});
1112
+ await sendEncryptedEvent();
1140
1113
 
1141
1114
  expect(onErrorSpy).toHaveBeenCalled();
1142
1115
  const error = onErrorSpy.calls.argsFor(0)[0];
@@ -1156,9 +1129,7 @@ describe('DrmEngine', () => {
1156
1129
  onErrorSpy.and.stub();
1157
1130
 
1158
1131
  await initAndAttach();
1159
- const initData1 = new Uint8Array(1);
1160
- mockVideo.on['encrypted'](
1161
- {initDataType: 'webm', initData: initData1, keyId: null});
1132
+ await sendEncryptedEvent();
1162
1133
 
1163
1134
  expect(onErrorSpy).toHaveBeenCalled();
1164
1135
  const error = onErrorSpy.calls.argsFor(0)[0];
@@ -1172,9 +1143,7 @@ describe('DrmEngine', () => {
1172
1143
  describe('message', () => {
1173
1144
  it('is listened for', async () => {
1174
1145
  await initAndAttach();
1175
- const initData = new Uint8Array(0);
1176
- mockVideo.on['encrypted'](
1177
- {initDataType: 'webm', initData: initData, keyId: null});
1146
+ await sendEncryptedEvent();
1178
1147
 
1179
1148
  expect(session1.addEventListener).toHaveBeenCalledWith(
1180
1149
  'message', jasmine.any(Function), jasmine.anything());
@@ -1214,9 +1183,7 @@ describe('DrmEngine', () => {
1214
1183
  onErrorSpy.and.stub();
1215
1184
 
1216
1185
  await initAndAttach();
1217
- const initData = new Uint8Array(0);
1218
- mockVideo.on['encrypted'](
1219
- {initDataType: 'webm', initData: initData, keyId: null});
1186
+ await sendEncryptedEvent();
1220
1187
 
1221
1188
  // Simulate a permission error from the web server.
1222
1189
  const netError = new shaka.util.Error(
@@ -1252,9 +1219,7 @@ describe('DrmEngine', () => {
1252
1219
  async function sendMessageTest(
1253
1220
  expectedUrl, messageType = 'license-request') {
1254
1221
  await initAndAttach();
1255
- const initData = new Uint8Array(0);
1256
- mockVideo.on['encrypted'](
1257
- {initDataType: 'webm', initData: initData, keyId: null});
1222
+ await sendEncryptedEvent();
1258
1223
 
1259
1224
  const operation = shaka.util.AbortableOperation.completed({});
1260
1225
  fakeNetEngine.request.and.returnValue(operation);
@@ -1276,9 +1241,7 @@ describe('DrmEngine', () => {
1276
1241
  describe('keystatuseschange', () => {
1277
1242
  it('is listened for', async () => {
1278
1243
  await initAndAttach();
1279
- const initData = new Uint8Array(0);
1280
- mockVideo.on['encrypted'](
1281
- {initDataType: 'webm', initData: initData, keyId: null});
1244
+ await sendEncryptedEvent();
1282
1245
 
1283
1246
  expect(session1.addEventListener).toHaveBeenCalledWith(
1284
1247
  'keystatuseschange', jasmine.any(Function), jasmine.anything());
@@ -1286,9 +1249,7 @@ describe('DrmEngine', () => {
1286
1249
 
1287
1250
  it('triggers callback', async () => {
1288
1251
  await initAndAttach();
1289
- const initData = new Uint8Array(0);
1290
- mockVideo.on['encrypted'](
1291
- {initDataType: 'webm', initData: initData, keyId: null});
1252
+ await sendEncryptedEvent();
1292
1253
 
1293
1254
  const keyId1 = makeKeyId(1);
1294
1255
  const keyId2 = makeKeyId(2);
@@ -1311,13 +1272,10 @@ describe('DrmEngine', () => {
1311
1272
  expect(onKeyStatusSpy).toHaveBeenCalled();
1312
1273
  });
1313
1274
 
1314
- // See https://github.com/google/shaka-player/issues/1541
1275
+ // See https://github.com/shaka-project/shaka-player/issues/1541
1315
1276
  it('does not update public key statuses before callback', async () => {
1316
1277
  await initAndAttach();
1317
-
1318
- const initData = new Uint8Array(0);
1319
- mockVideo.on['encrypted'](
1320
- {initDataType: 'webm', initData: initData, keyId: null});
1278
+ await sendEncryptedEvent();
1321
1279
 
1322
1280
  const keyId1 = makeKeyId(1);
1323
1281
  const keyId2 = makeKeyId(2);
@@ -1349,7 +1307,7 @@ describe('DrmEngine', () => {
1349
1307
  expect(keyIds.length).toBe(2);
1350
1308
  });
1351
1309
 
1352
- // See https://github.com/google/shaka-player/issues/1541
1310
+ // See https://github.com/shaka-project/shaka-player/issues/1541
1353
1311
  it('does not invoke callback until all sessions are loaded', async () => {
1354
1312
  // Set up init data overrides in the manifest so that we get multiple
1355
1313
  // sessions.
@@ -1394,9 +1352,7 @@ describe('DrmEngine', () => {
1394
1352
  await initAndAttach();
1395
1353
  expect(onErrorSpy).not.toHaveBeenCalled();
1396
1354
 
1397
- const initData = new Uint8Array(0);
1398
- mockVideo.on['encrypted'](
1399
- {initDataType: 'webm', initData: initData, keyId: null});
1355
+ await sendEncryptedEvent();
1400
1356
 
1401
1357
  const keyId1 = makeKeyId(1);
1402
1358
  const keyId2 = makeKeyId(2);
@@ -1443,9 +1399,7 @@ describe('DrmEngine', () => {
1443
1399
  await initAndAttach();
1444
1400
  expect(onErrorSpy).not.toHaveBeenCalled();
1445
1401
 
1446
- const initData = new Uint8Array(0);
1447
- mockVideo.on['encrypted'](
1448
- {initDataType: 'webm', initData: initData, keyId: null});
1402
+ await sendEncryptedEvent();
1449
1403
 
1450
1404
  const keyId1 = makeKeyId(1);
1451
1405
  const keyId2 = makeKeyId(2);
@@ -1489,9 +1443,7 @@ describe('DrmEngine', () => {
1489
1443
  const license = new Uint8Array(0);
1490
1444
 
1491
1445
  await initAndAttach();
1492
- const initData = new Uint8Array(0);
1493
- mockVideo.on['encrypted'](
1494
- {initDataType: 'webm', initData: initData, keyId: null});
1446
+ await sendEncryptedEvent();
1495
1447
 
1496
1448
  fakeNetEngine.setResponseValue('http://abc.drm/license', license);
1497
1449
  const message = new Uint8Array(0);
@@ -1550,9 +1502,8 @@ describe('DrmEngine', () => {
1550
1502
 
1551
1503
  it('publishes an event if update succeeds', async () => {
1552
1504
  await initAndAttach();
1553
- const initData = new Uint8Array(1);
1554
- mockVideo.on['encrypted'](
1555
- {initDataType: 'webm', initData: initData, keyId: null});
1505
+ await sendEncryptedEvent();
1506
+
1556
1507
  const message = new Uint8Array(0);
1557
1508
  session1.on['message']({target: session1, message: message});
1558
1509
  session1.update.and.returnValue(Promise.resolve());
@@ -1568,9 +1519,7 @@ describe('DrmEngine', () => {
1568
1519
  const license = new Uint8Array(0);
1569
1520
 
1570
1521
  await initAndAttach();
1571
- const initData = new Uint8Array(0);
1572
- mockVideo.on['encrypted'](
1573
- {initDataType: 'webm', initData: initData, keyId: null});
1522
+ await sendEncryptedEvent();
1574
1523
 
1575
1524
  fakeNetEngine.setResponseValue('http://abc.drm/license', license);
1576
1525
  const message = new Uint8Array(0);
@@ -1591,12 +1540,9 @@ describe('DrmEngine', () => {
1591
1540
  describe('destroy', () => {
1592
1541
  it('tears down MediaKeys and active sessions', async () => {
1593
1542
  await initAndAttach();
1594
- const initData1 = new Uint8Array(1);
1595
- const initData2 = new Uint8Array(2);
1596
- mockVideo.on['encrypted'](
1597
- {initDataType: 'webm', initData: initData1, keyId: null});
1598
- mockVideo.on['encrypted'](
1599
- {initDataType: 'webm', initData: initData2, keyId: null});
1543
+
1544
+ await sendEncryptedEvent('webm');
1545
+ await sendEncryptedEvent('cenc', new Uint8Array(2));
1600
1546
 
1601
1547
  const message = new Uint8Array(0);
1602
1548
  session1.on['message']({target: session1, message: message});
@@ -1621,12 +1567,8 @@ describe('DrmEngine', () => {
1621
1567
  drmEngine.configure(config);
1622
1568
 
1623
1569
  await initAndAttach();
1624
- const initData1 = new Uint8Array(1);
1625
- const initData2 = new Uint8Array(2);
1626
- mockVideo.on['encrypted'](
1627
- {initDataType: 'webm', initData: initData1, keyId: null});
1628
- mockVideo.on['encrypted'](
1629
- {initDataType: 'webm', initData: initData2, keyId: null});
1570
+ await sendEncryptedEvent('webm');
1571
+ await sendEncryptedEvent('cenc', new Uint8Array(2));
1630
1572
 
1631
1573
  const message = new Uint8Array(0);
1632
1574
  session1.on['message']({target: session1, message: message});
@@ -1647,12 +1589,8 @@ describe('DrmEngine', () => {
1647
1589
 
1648
1590
  it('swallows errors when closing sessions', async () => {
1649
1591
  await initAndAttach();
1650
- const initData1 = new Uint8Array(1);
1651
- const initData2 = new Uint8Array(2);
1652
- mockVideo.on['encrypted'](
1653
- {initDataType: 'webm', initData: initData1, keyId: null});
1654
- mockVideo.on['encrypted'](
1655
- {initDataType: 'webm', initData: initData2, keyId: null});
1592
+ await sendEncryptedEvent('webm');
1593
+ await sendEncryptedEvent('cenc', new Uint8Array(2));
1656
1594
 
1657
1595
  const message = new Uint8Array(0);
1658
1596
  session1.on['message']({target: session1, message: message});
@@ -1668,12 +1606,8 @@ describe('DrmEngine', () => {
1668
1606
 
1669
1607
  it('swallows errors when clearing MediaKeys', async () => {
1670
1608
  await initAndAttach();
1671
- const initData1 = new Uint8Array(1);
1672
- const initData2 = new Uint8Array(2);
1673
- mockVideo.on['encrypted'](
1674
- {initDataType: 'webm', initData: initData1, keyId: null});
1675
- mockVideo.on['encrypted'](
1676
- {initDataType: 'webm', initData: initData2, keyId: null});
1609
+ await sendEncryptedEvent('webm');
1610
+ await sendEncryptedEvent('cenc', new Uint8Array(2));
1677
1611
 
1678
1612
  const message = new Uint8Array(0);
1679
1613
  session1.on['message']({target: session1, message: message});
@@ -1752,6 +1686,14 @@ describe('DrmEngine', () => {
1752
1686
  const p1 = new shaka.util.PublicPromise();
1753
1687
  mockVideo.setMediaKeys.and.returnValue(p1);
1754
1688
 
1689
+ onErrorSpy.and.stub();
1690
+
1691
+ tweakDrmInfos((drmInfos) => {
1692
+ drmInfos[0].initData = [
1693
+ {initData: new Uint8Array(1), initDataType: 'cenc', keyId: null},
1694
+ ];
1695
+ });
1696
+
1755
1697
  const init = expectAsync(initAndAttach()).toBeRejected();
1756
1698
 
1757
1699
  await shaka.test.Util.shortDelay();
@@ -1765,10 +1707,12 @@ describe('DrmEngine', () => {
1765
1707
  const destroy = drmEngine.destroy();
1766
1708
  const fail = async () => {
1767
1709
  await shaka.test.Util.shortDelay();
1768
- p1.reject(new Error(''));
1710
+ shaka.log.warning('fail');
1711
+ p1.reject(new Error('titi'));
1769
1712
  };
1770
1713
  const success = async () => {
1771
1714
  await shaka.test.Util.shortDelay();
1715
+ shaka.log.warning('success');
1772
1716
  p2.resolve();
1773
1717
  };
1774
1718
  await Promise.all([init, destroy, fail(), success()]);
@@ -1780,6 +1724,12 @@ describe('DrmEngine', () => {
1780
1724
  const p1 = new shaka.util.PublicPromise();
1781
1725
  mockVideo.setMediaKeys.and.returnValue(p1);
1782
1726
 
1727
+ tweakDrmInfos((drmInfos) => {
1728
+ drmInfos[0].initData = [
1729
+ {initData: new Uint8Array(1), initDataType: 'cenc', keyId: null},
1730
+ ];
1731
+ });
1732
+
1783
1733
  const init = expectAsync(initAndAttach()).toBeRejected();
1784
1734
 
1785
1735
  await shaka.test.Util.shortDelay();
@@ -1857,9 +1807,7 @@ describe('DrmEngine', () => {
1857
1807
  session1.generateRequest.and.returnValue(p);
1858
1808
 
1859
1809
  await initAndAttach();
1860
- const initData1 = new Uint8Array(1);
1861
- mockVideo.on['encrypted'](
1862
- {initDataType: 'webm', initData: initData1, keyId: null});
1810
+ await sendEncryptedEvent();
1863
1811
 
1864
1812
  // We are now blocked on generateRequest:
1865
1813
  expect(session1.generateRequest).toHaveBeenCalledTimes(1);
@@ -1878,9 +1826,7 @@ describe('DrmEngine', () => {
1878
1826
  fakeNetEngine.request.and.returnValue(operation);
1879
1827
 
1880
1828
  await initAndAttach();
1881
- const initData1 = new Uint8Array(1);
1882
- mockVideo.on['encrypted'](
1883
- {initDataType: 'webm', initData: initData1, keyId: null});
1829
+ await sendEncryptedEvent();
1884
1830
 
1885
1831
  const message = new Uint8Array(0);
1886
1832
  session1.on['message']({target: session1, message: message});
@@ -1909,9 +1855,7 @@ describe('DrmEngine', () => {
1909
1855
  fakeNetEngine.request.and.returnValue(operation);
1910
1856
 
1911
1857
  await initAndAttach();
1912
- const initData1 = new Uint8Array(1);
1913
- mockVideo.on['encrypted'](
1914
- {initDataType: 'webm', initData: initData1, keyId: null});
1858
+ await sendEncryptedEvent();
1915
1859
 
1916
1860
  const message = new Uint8Array(0);
1917
1861
  session1.on['message']({target: session1, message: message});
@@ -1939,9 +1883,7 @@ describe('DrmEngine', () => {
1939
1883
  session1.update.and.returnValue(p);
1940
1884
 
1941
1885
  await initAndAttach();
1942
- const initData1 = new Uint8Array(1);
1943
- mockVideo.on['encrypted'](
1944
- {initDataType: 'webm', initData: initData1, keyId: null});
1886
+ await sendEncryptedEvent();
1945
1887
 
1946
1888
  const message = new Uint8Array(0);
1947
1889
  session1.on['message']({target: session1, message: message});
@@ -1962,7 +1904,7 @@ describe('DrmEngine', () => {
1962
1904
  // this doesn't work if the session is not callable (no license request
1963
1905
  // sent). So |session.closed| should never resolve and |session.close()|
1964
1906
  // should be rejected and destroy() should still succeed.
1965
- // https://github.com/google/shaka-player/issues/664
1907
+ // https://github.com/shaka-project/shaka-player/issues/664
1966
1908
  await initAndAttach();
1967
1909
  session1.closed = new shaka.util.PublicPromise();
1968
1910
  session2.closed = new shaka.util.PublicPromise();
@@ -1975,12 +1917,8 @@ describe('DrmEngine', () => {
1975
1917
  session1.close.and.returnValue(rejected);
1976
1918
  session2.close.and.returnValue(rejected);
1977
1919
 
1978
- const initData1 = new Uint8Array(1);
1979
- const initData2 = new Uint8Array(2);
1980
- mockVideo.on['encrypted'](
1981
- {initDataType: 'webm', initData: initData1, keyId: null});
1982
- mockVideo.on['encrypted'](
1983
- {initDataType: 'webm', initData: initData2, keyId: null});
1920
+ await sendEncryptedEvent('webm');
1921
+ await sendEncryptedEvent('cenc', new Uint8Array(2));
1984
1922
 
1985
1923
  // Still resolve these since we are mocking close and closed. This
1986
1924
  // ensures DrmEngine is in the correct state.
@@ -2205,9 +2143,7 @@ describe('DrmEngine', () => {
2205
2143
  mockVideo.paused = true;
2206
2144
 
2207
2145
  await initAndAttach();
2208
- const initData = new Uint8Array(0);
2209
- mockVideo.on['encrypted'](
2210
- {initDataType: 'webm', initData: initData, keyId: null});
2146
+ await sendEncryptedEvent();
2211
2147
 
2212
2148
  const operation = shaka.util.AbortableOperation.completed({});
2213
2149
  fakeNetEngine.request.and.returnValue(operation);
@@ -2233,9 +2169,7 @@ describe('DrmEngine', () => {
2233
2169
  mockVideo.paused = true;
2234
2170
 
2235
2171
  await initAndAttach();
2236
- const initData = new Uint8Array(0);
2237
- mockVideo.on['encrypted'](
2238
- {initDataType: 'webm', initData: initData, keyId: null});
2172
+ await sendEncryptedEvent();
2239
2173
 
2240
2174
  const operation = shaka.util.AbortableOperation.completed({});
2241
2175
  fakeNetEngine.request.and.returnValue(operation);
@@ -2350,10 +2284,9 @@ describe('DrmEngine', () => {
2350
2284
  session1.expiration = NaN;
2351
2285
 
2352
2286
  await initAndAttach();
2353
- const initData = new Uint8Array(0);
2287
+ await sendEncryptedEvent();
2288
+
2354
2289
  const message = new Uint8Array(0);
2355
- mockVideo.on['encrypted'](
2356
- {initDataType: 'webm', initData: initData, keyId: null});
2357
2290
  session1.on['message']({target: session1, message: message});
2358
2291
  session1.update.and.returnValue(Promise.resolve());
2359
2292
  });
@@ -2516,4 +2449,17 @@ describe('DrmEngine', () => {
2516
2449
  callback(manifest.variants[0].audio.drmInfos);
2517
2450
  }
2518
2451
  }
2452
+
2453
+ /**
2454
+ *
2455
+ * @param {string} initDataType
2456
+ * @param {Uint8Array} initData
2457
+ * @param {string|null} keyId
2458
+ */
2459
+ async function sendEncryptedEvent(
2460
+ initDataType = 'cenc', initData = new Uint8Array(1), keyId = null) {
2461
+ mockVideo.on['encrypted']({initDataType, initData, keyId});
2462
+
2463
+ await Util.shortDelay();
2464
+ }
2519
2465
  });
@@ -4,10 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.ManifestParser');
8
- goog.require('shaka.net.NetworkingEngine');
9
- goog.require('shaka.test.FakeNetworkingEngine');
10
-
11
7
  const testGetMimeType = async (expertedMimeType, contentType) => {
12
8
  const netEngine = new shaka.test.FakeNetworkingEngine()
13
9
  .setHeaders('dummy://foo', {'content-type': contentType});