shaka-player 3.3.0 → 3.3.3

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 (344) 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 +130 -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 +29 -0
  8. package/.github/workflows/nightly-demo.yaml +42 -0
  9. package/.github/workflows/release-please.yaml +145 -0
  10. package/.github/workflows/safari-homedir-launcher.sh +18 -0
  11. package/.github/workflows/selenium-lab-tests.yaml +93 -0
  12. package/AUTHORS +2 -0
  13. package/CHANGELOG.md +1722 -1640
  14. package/CONTRIBUTING.md +2 -2
  15. package/CONTRIBUTORS +2 -0
  16. package/README.md +7 -7
  17. package/app-engine/README.md +9 -0
  18. package/app-engine/demo-version-index/README.md +14 -0
  19. package/app-engine/demo-version-index/app.yaml +2 -0
  20. package/app-engine/demo-version-index/main.py +162 -0
  21. package/app-engine/demo-version-index/requirements.txt +6 -0
  22. package/app-engine/demo-version-index/templates/index.html +114 -0
  23. package/app-engine/shaka-player-demo/README.md +18 -0
  24. package/app-engine/shaka-player-demo/app.yaml +61 -0
  25. package/app-engine/shaka-player-demo/main.py +95 -0
  26. package/app-engine/shaka-player-demo/posters/10yo.png +0 -0
  27. package/app-engine/shaka-player-demo/posters/10yo.xcf +0 -0
  28. package/app-engine/shaka-player-demo/posters/1yo.jpg +0 -0
  29. package/app-engine/shaka-player-demo/posters/2yo.png +0 -0
  30. package/app-engine/shaka-player-demo/posters/2yo.xcf +0 -0
  31. package/app-engine/shaka-player-demo/posters/3yo.png +0 -0
  32. package/app-engine/shaka-player-demo/posters/3yo.xcf +0 -0
  33. package/app-engine/shaka-player-demo/posters/4yo.png +0 -0
  34. package/app-engine/shaka-player-demo/posters/4yo.xcf +0 -0
  35. package/app-engine/shaka-player-demo/posters/5yo.png +0 -0
  36. package/app-engine/shaka-player-demo/posters/5yo.xcf +0 -0
  37. package/app-engine/shaka-player-demo/posters/6yo.png +0 -0
  38. package/app-engine/shaka-player-demo/posters/6yo.xcf +0 -0
  39. package/app-engine/shaka-player-demo/posters/7yo.png +0 -0
  40. package/app-engine/shaka-player-demo/posters/7yo.xcf +0 -0
  41. package/app-engine/shaka-player-demo/posters/8yo.png +0 -0
  42. package/app-engine/shaka-player-demo/posters/8yo.xcf +0 -0
  43. package/app-engine/shaka-player-demo/posters/9yo.png +0 -0
  44. package/app-engine/shaka-player-demo/posters/9yo.xcf +0 -0
  45. package/app-engine/shaka-player-demo/posters/audioOnly.gif +0 -0
  46. package/app-engine/shaka-player-demo/posters/audioRickRoll.gif +0 -0
  47. package/app-engine/shaka-player-demo/posters/colorbars.gif +0 -0
  48. package/app-engine/shaka-player-demo/posters/fireworks.jpg +0 -0
  49. package/app-engine/shaka-player-demo/posters/party-hat.png +0 -0
  50. package/app-engine/shaka-player-demo/posters/sources.txt +46 -0
  51. package/app-engine/shaka-player-demo/posters/standard.png +0 -0
  52. package/app-engine/shaka-player-demo/posters/trek.jpg +0 -0
  53. package/app-engine/shaka-player-demo/posters/valentines.png +0 -0
  54. package/app-engine/shaka-player-demo/posters/zombie.jpg +0 -0
  55. package/app-engine/shaka-player-demo/posters.py +110 -0
  56. package/app-engine/shaka-player-demo/requirements.txt +5 -0
  57. package/app-engine/shaka-player-demo/time.txt +1 -0
  58. package/build/README.md +1 -1
  59. package/build/checkversion.py +1 -1
  60. package/build/conformance.textproto +196 -169
  61. package/build/docker/Dockerfile +20 -0
  62. package/build/docker/docker-compose.yml +10 -0
  63. package/build/gendeps.py +18 -15
  64. package/build/shaka-lab.yaml +163 -0
  65. package/build/shakaBuildHelpers.py +4 -29
  66. package/build/test.py +93 -28
  67. package/build/types/polyfill +1 -0
  68. package/build/wrapper.template.js +2 -2
  69. package/demo/TengwarTelcontar.woff2 +0 -0
  70. package/demo/asset_card.js +1 -2
  71. package/demo/cast_receiver/index.html +1 -1
  72. package/demo/cast_receiver/receiver_app.css +14 -14
  73. package/demo/common/assets.js +2 -0
  74. package/demo/config.js +0 -1
  75. package/demo/custom.js +0 -1
  76. package/demo/customWarning.txt +2 -2
  77. package/demo/demo.less +29 -18
  78. package/demo/demo_uncompiled.js +1 -13
  79. package/demo/index.html +1 -1
  80. package/demo/main.js +3 -3
  81. package/dist/controls.css +3 -3
  82. package/dist/controls.css.map +1 -1
  83. package/dist/demo.compiled.debug.js +191 -194
  84. package/dist/demo.compiled.debug.map +4 -4
  85. package/dist/demo.compiled.js +191 -194
  86. package/dist/demo.compiled.map +4 -4
  87. package/dist/demo.css +1 -1
  88. package/dist/demo.css.map +1 -1
  89. package/dist/deps.js +233 -226
  90. package/dist/locales.js +30 -30
  91. package/dist/receiver.compiled.debug.js +43 -45
  92. package/dist/receiver.compiled.debug.map +4 -4
  93. package/dist/receiver.compiled.js +43 -45
  94. package/dist/receiver.compiled.map +4 -4
  95. package/dist/shaka-player.compiled.d.ts +272 -238
  96. package/dist/shaka-player.compiled.debug.d.ts +272 -238
  97. package/dist/shaka-player.compiled.debug.externs.js +53 -16
  98. package/dist/shaka-player.compiled.debug.js +393 -394
  99. package/dist/shaka-player.compiled.debug.map +4 -4
  100. package/dist/shaka-player.compiled.externs.js +53 -16
  101. package/dist/shaka-player.compiled.js +840 -843
  102. package/dist/shaka-player.compiled.map +4 -4
  103. package/dist/shaka-player.ui.d.ts +318 -293
  104. package/dist/shaka-player.ui.debug.d.ts +318 -293
  105. package/dist/shaka-player.ui.debug.externs.js +55 -27
  106. package/dist/shaka-player.ui.debug.js +415 -417
  107. package/dist/shaka-player.ui.debug.map +4 -4
  108. package/dist/shaka-player.ui.externs.js +55 -27
  109. package/dist/shaka-player.ui.js +997 -1000
  110. package/dist/shaka-player.ui.map +4 -4
  111. package/docs/design/REDESIGN.md +33 -33
  112. package/docs/design/bg-fetch.md +2 -2
  113. package/docs/design/codec_preferences.md +1 -1
  114. package/docs/design/dash-audio-channels.md +3 -3
  115. package/docs/design/dash-manifests.md +1 -1
  116. package/docs/design/gap-jumping.md +3 -3
  117. package/docs/design/preload.md +2 -2
  118. package/docs/tutorials/faq.md +8 -8
  119. package/docs/tutorials/index.json +1 -0
  120. package/docs/tutorials/plugins.md +3 -3
  121. package/docs/tutorials/selenium-grid-config.md +122 -0
  122. package/docs/tutorials/welcome.md +10 -2
  123. package/externs/cmcd.js +186 -0
  124. package/externs/shaka/player.js +8 -0
  125. package/externs/shaka/text.js +10 -0
  126. package/karma.conf.js +156 -45
  127. package/lib/abr/simple_abr_manager.js +12 -6
  128. package/lib/ads/ad_manager.js +1 -0
  129. package/lib/cast/cast_proxy.js +6 -4
  130. package/lib/cast/cast_receiver.js +3 -0
  131. package/lib/cea/cea608_data_channel.js +2 -2
  132. package/lib/cea/cea708_service.js +5 -4
  133. package/lib/cea/mp4_cea_parser.js +11 -5
  134. package/lib/cea/sei_processor.js +6 -3
  135. package/lib/dash/dash_parser.js +40 -30
  136. package/lib/dash/mpd_utils.js +4 -5
  137. package/lib/dash/segment_list.js +1 -2
  138. package/lib/dash/segment_template.js +3 -3
  139. package/lib/hls/hls_parser.js +41 -9
  140. package/lib/hls/manifest_text_parser.js +4 -3
  141. package/lib/media/adaptation_set.js +1 -2
  142. package/lib/media/content_workarounds.js +2 -2
  143. package/lib/media/drm_engine.js +3 -2
  144. package/lib/media/media_source_engine.js +3 -2
  145. package/lib/media/mp4_segment_index_parser.js +1 -4
  146. package/lib/media/playhead.js +2 -2
  147. package/lib/media/presentation_timeline.js +18 -8
  148. package/lib/media/quality_observer.js +17 -34
  149. package/lib/media/region_observer.js +39 -33
  150. package/lib/media/region_timeline.js +17 -19
  151. package/lib/media/segment_index.js +2 -1
  152. package/lib/media/segment_reference.js +19 -1
  153. package/lib/media/streaming_engine.js +12 -9
  154. package/lib/media/time_ranges_utils.js +1 -3
  155. package/lib/media/video_wrapper.js +1 -1
  156. package/lib/net/networking_engine.js +5 -1
  157. package/lib/offline/storage.js +12 -13
  158. package/lib/player.js +87 -41
  159. package/lib/polyfill/all.js +2 -3
  160. package/lib/polyfill/encryption_scheme.js +1 -1
  161. package/lib/polyfill/media_capabilities.js +32 -17
  162. package/lib/polyfill/mediasource.js +1 -1
  163. package/lib/polyfill/symbol.js +46 -0
  164. package/lib/text/cue.js +7 -1
  165. package/lib/text/simple_text_displayer.js +2 -1
  166. package/lib/text/ttml_text_parser.js +92 -63
  167. package/lib/text/ui_text_displayer.js +18 -12
  168. package/lib/util/buffer_utils.js +1 -3
  169. package/lib/util/cmcd_manager.js +47 -201
  170. package/lib/util/ebml_parser.js +3 -3
  171. package/lib/util/error.js +1 -1
  172. package/lib/util/fake_event_target.js +21 -1
  173. package/lib/util/iterables.js +0 -46
  174. package/lib/util/mp4_box_parsers.js +1 -4
  175. package/lib/util/mp4_parser.js +5 -7
  176. package/lib/util/periods.js +10 -11
  177. package/lib/util/platform.js +3 -3
  178. package/lib/util/pssh.js +1 -4
  179. package/lib/util/stream_utils.js +88 -11
  180. package/lib/util/string_utils.js +3 -5
  181. package/lib/util/uint8array_utils.js +3 -5
  182. package/lib/util/xml_utils.js +34 -7
  183. package/package.json +62 -40
  184. package/roadmap.md +17 -17
  185. package/shaka-player.uncompiled.js +1 -0
  186. package/test/abr/simple_abr_manager_unit.js +3 -8
  187. package/test/ads/ad_manager_unit.js +0 -6
  188. package/test/cast/cast_proxy_unit.js +0 -8
  189. package/test/cast/cast_receiver_integration.js +1 -18
  190. package/test/cast/cast_receiver_unit.js +1 -9
  191. package/test/cast/cast_sender_unit.js +0 -6
  192. package/test/cast/cast_utils_unit.js +0 -13
  193. package/test/cea/cea608_memory_unit.js +0 -5
  194. package/test/cea/cea708_service_unit.js +0 -7
  195. package/test/cea/cea708_window_unit.js +0 -5
  196. package/test/cea/cea_decoder_unit.js +0 -6
  197. package/test/cea/dtvcc_packet_builder_unit.js +0 -3
  198. package/test/cea/dtvcc_packet_unit.js +0 -5
  199. package/test/cea/mp4_cea_parser_unit.js +0 -4
  200. package/test/dash/dash_parser_content_protection_unit.js +1 -10
  201. package/test/dash/dash_parser_live_unit.js +45 -15
  202. package/test/dash/dash_parser_manifest_unit.js +4 -17
  203. package/test/dash/dash_parser_segment_base_unit.js +1 -8
  204. package/test/dash/dash_parser_segment_list_unit.js +1 -7
  205. package/test/dash/dash_parser_segment_template_unit.js +0 -9
  206. package/test/dash/mpd_utils_unit.js +3 -11
  207. package/test/demo/demo_unit.js +0 -5
  208. package/test/deprecate/enforcer_unit.js +0 -4
  209. package/test/deprecate/version_unit.js +0 -2
  210. package/test/hls/hls_live_unit.js +2 -14
  211. package/test/hls/hls_parser_unit.js +76 -15
  212. package/test/hls/manifest_text_parser_unit.js +0 -10
  213. package/test/media/adaptation_set_criteria_unit.js +3 -7
  214. package/test/media/adaptation_set_unit.js +0 -2
  215. package/test/media/buffering_observer_unit.js +1 -4
  216. package/test/media/closed_caption_parser_unit.js +0 -3
  217. package/test/media/drm_engine_integration.js +2 -15
  218. package/test/media/drm_engine_unit.js +7 -27
  219. package/test/media/manifest_parser_unit.js +0 -4
  220. package/test/media/media_source_engine_integration.js +0 -7
  221. package/test/media/media_source_engine_unit.js +1 -14
  222. package/test/media/mp4_segment_index_parser_unit.js +0 -4
  223. package/test/media/play_rate_controller_unit.js +0 -4
  224. package/test/media/playhead_unit.js +8 -16
  225. package/test/media/presentation_timeline_unit.js +4 -7
  226. package/test/media/quality_observer_unit.js +4 -5
  227. package/test/media/region_observer_unit.js +40 -10
  228. package/test/media/region_timeline_unit.js +40 -25
  229. package/test/media/segment_index_unit.js +0 -6
  230. package/test/media/segment_reference_unit.js +0 -3
  231. package/test/media/stall_detector_unit.js +0 -5
  232. package/test/media/streaming_engine_integration.js +11 -37
  233. package/test/media/streaming_engine_unit.js +155 -34
  234. package/test/media/time_ranges_utils_unit.js +0 -2
  235. package/test/media/transmuxer_integration.js +0 -6
  236. package/test/media/webm_segment_index_parser_unit.js +0 -4
  237. package/test/net/data_uri_plugin_unit.js +0 -7
  238. package/test/net/http_plugin_unit.js +0 -9
  239. package/test/net/networking_engine_unit.js +0 -11
  240. package/test/offline/download_progress_estimator_unit.js +0 -2
  241. package/test/offline/indexeddb_storage_unit.js +0 -6
  242. package/test/offline/manifest_convert_unit.js +0 -8
  243. package/test/offline/offline_integration.js +1 -10
  244. package/test/offline/offline_manifest_parser_unit.js +0 -6
  245. package/test/offline/offline_scheme_unit.js +0 -8
  246. package/test/offline/offline_uri_unit.js +0 -2
  247. package/test/offline/storage_compatibility_unit.js +1 -14
  248. package/test/offline/storage_integration.js +1 -27
  249. package/test/player_external.js +2 -10
  250. package/test/player_integration.js +63 -36
  251. package/test/player_load_graph_integration.js +1 -6
  252. package/test/player_src_equals_external.js +3 -9
  253. package/test/player_src_equals_integration.js +41 -15
  254. package/test/player_unit.js +71 -46
  255. package/test/routing/walker_unit.js +0 -8
  256. package/test/test/assets/chapters.vtt +2 -2
  257. package/test/test/assets/chapters2.vtt +10 -0
  258. package/test/test/assets/large_file.mpd +1 -1
  259. package/test/test/boot.js +75 -22
  260. package/test/test/externs/jasmine.js +2 -2
  261. package/test/test/externs/karma.js +4 -0
  262. package/test/test/namespace.js +10 -0
  263. package/test/test/util/canned_idb.js +0 -8
  264. package/test/test/util/cea_utils.js +0 -6
  265. package/test/test/util/dash_parser_util.js +0 -13
  266. package/test/test/util/fake_ad.js +0 -3
  267. package/test/test/util/fake_ad_manager.js +0 -9
  268. package/test/test/util/fake_demo_main.js +0 -5
  269. package/test/test/util/fake_drm_engine.js +0 -6
  270. package/test/test/util/fake_media_source_engine.js +0 -7
  271. package/test/test/util/fake_networking_engine.js +0 -5
  272. package/test/test/util/fake_text_displayer.js +0 -5
  273. package/test/test/util/indexeddb_utils.js +1 -10
  274. package/test/test/util/jasmine_fetch.js +0 -1
  275. package/test/test/util/loader.js +0 -18
  276. package/test/test/util/manifest_generator.js +9 -14
  277. package/test/test/util/manifest_parser_util.js +0 -6
  278. package/test/test/util/offline_utils.js +0 -5
  279. package/test/test/util/simple_fakes.js +9 -26
  280. package/test/test/util/stream_generator.js +0 -14
  281. package/test/test/util/streaming_engine_util.js +0 -15
  282. package/test/test/util/test_scheme.js +1 -19
  283. package/test/test/util/ttml_utils.js +79 -0
  284. package/test/test/util/ui_utils.js +0 -9
  285. package/test/test/util/util.js +15 -26
  286. package/test/test/util/waiter.js +84 -43
  287. package/test/text/cue_integration.js +0 -4
  288. package/test/text/lrc_text_parser_unit.js +0 -4
  289. package/test/text/mp4_ttml_parser_unit.js +10 -23
  290. package/test/text/mp4_vtt_parser_unit.js +1 -7
  291. package/test/text/sbv_text_parser_unit.js +0 -4
  292. package/test/text/simple_text_displayer_unit.js +1 -8
  293. package/test/text/srt_text_parser_unit.js +0 -4
  294. package/test/text/ssa_text_parser_unit.js +0 -5
  295. package/test/text/text_engine_unit.js +2 -7
  296. package/test/text/text_track_integration.js +0 -2
  297. package/test/text/ttml_text_parser_unit.js +499 -239
  298. package/test/text/ui_text_displayer_unit.js +44 -41
  299. package/test/text/vtt_text_parser_unit.js +0 -9
  300. package/test/text/web_vtt_generator_unit.js +0 -3
  301. package/test/ui/ad_ui_unit.js +0 -11
  302. package/test/ui/localization_unit.js +0 -3
  303. package/test/ui/text_displayer_layout_unit.js +9 -19
  304. package/test/ui/ui_customization_unit.js +0 -6
  305. package/test/ui/ui_integration.js +0 -16
  306. package/test/ui/ui_unit.js +1 -17
  307. package/test/util/abortable_operation_unit.js +4 -9
  308. package/test/util/array_utils_unit.js +0 -2
  309. package/test/util/buffer_utils_unit.js +0 -2
  310. package/test/util/cmcd_manager_unit.js +29 -18
  311. package/test/util/data_view_reader_unit.js +0 -4
  312. package/test/util/ebml_parser_unit.js +0 -4
  313. package/test/util/event_manager_unit.js +0 -3
  314. package/test/util/fake_event_target_unit.js +0 -5
  315. package/test/util/functional_unit.js +1 -1
  316. package/test/util/iterables_unit.js +0 -64
  317. package/test/util/language_utils_unit.js +0 -3
  318. package/test/util/manifest_parser_utils_unit.js +0 -2
  319. package/test/util/mp4_box_parsers_unit.js +0 -5
  320. package/test/util/mp4_parser_unit.js +0 -4
  321. package/test/util/multi_map_unit.js +0 -3
  322. package/test/util/object_utils_unit.js +0 -2
  323. package/test/util/periods_unit.js +14 -7
  324. package/test/util/pssh_unit.js +0 -5
  325. package/test/util/state_history_unit.js +0 -2
  326. package/test/util/stream_utils_unit.js +39 -38
  327. package/test/util/string_utils_unit.js +0 -6
  328. package/test/util/text_parser_unit.js +0 -2
  329. package/test/util/xml_utils_unit.js +0 -4
  330. package/third_party/closure-uri/uri.js +21 -0
  331. package/ui/controls.js +3 -0
  332. package/ui/less/ad_controls.less +4 -4
  333. package/ui/less/buttons.less +5 -5
  334. package/ui/less/containers.less +9 -11
  335. package/ui/less/overflow_menu.less +4 -4
  336. package/ui/less/range_elements.less +5 -0
  337. package/ui/less/tooltip.less +1 -1
  338. package/ui/locales/sjn-translations.yaml +257 -0
  339. package/ui/locales/sjn.json +42 -0
  340. package/ui/localization.js +12 -36
  341. package/ui/text_selection.js +1 -0
  342. package/externs/media_capabilities.js +0 -16
  343. package/externs/svgelement.js +0 -18
  344. package/externs/webcrypto.js +0 -18
@@ -3,8 +3,8 @@ WEBVTT
3
3
  00:00.000 --> 00:05.000
4
4
  Chapter 1
5
5
 
6
- 00:05.000 --> 00:30.000
6
+ 00:05.000 --> 00:10.000
7
7
  Chapter 2
8
8
 
9
- 00:30.000 --> 01:01.349
9
+ 00:10.000 --> 00:20.000
10
10
  Chapter 3
@@ -0,0 +1,10 @@
1
+ WEBVTT
2
+
3
+ 00:20.000 --> 00:30.000
4
+ Chapter 4
5
+
6
+ 00:30.000 --> 00:40.000
7
+ Chapter 5
8
+
9
+ 00:40.000 --> 01:01.349
10
+ Chapter 6
@@ -1,5 +1,5 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <!--Generated with https://github.com/google/shaka-packager version v2.4.1-c731217-release-->
2
+ <!--Generated with https://github.com/shaka-project/shaka-packager version v2.4.1-c731217-release-->
3
3
  <MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" minBufferTime="PT2S" type="static" mediaPresentationDuration="PT60S">
4
4
  <Period id="0">
5
5
  <!-- This comment is very long:
package/test/test/boot.js CHANGED
@@ -4,18 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('goog.asserts');
8
- goog.require('shaka.Player');
9
- goog.require('shaka.log');
10
- goog.require('shaka.polyfill');
11
- goog.require('shaka.util.Error');
12
- goog.require('shaka.util.Platform');
13
-
14
- // If ENABLE_DEBUG_LOADER is not set to false, goog.require() will try to load
15
- // extra sources on-the-fly using pre-computed pathes in deps.js, which is not
16
- // applicable for the tests.
17
- goog['ENABLE_DEBUG_LOADER'] = false;
18
-
19
7
  /**
20
8
  * Gets the value of an argument passed from karma.
21
9
  * @param {string} name
@@ -384,9 +372,10 @@ function configureJasmineEnvironment() {
384
372
  };
385
373
  }
386
374
 
387
- // Executed before test utilities and tests are loaded, but after Shaka Player
388
- // is loaded in uncompiled mode.
389
- try {
375
+ /**
376
+ * Set up the Shaka Player test environment.
377
+ */
378
+ function setupTestEnvironment() {
390
379
  failTestsOnFailedAssertions();
391
380
  failTestsOnNamespacedElementOrAttributeNames();
392
381
  failTestsOnUnhandledRejections();
@@ -399,12 +388,76 @@ try {
399
388
  shaka.polyfill.installAll();
400
389
 
401
390
  configureJasmineEnvironment();
391
+ }
402
392
 
403
- // eslint-disable-next-line no-restricted-syntax
404
- } catch (error) {
405
- // Throw this boot-sequence error in place of jasmine's execute method, to
406
- // fail clearly and right away without running any tests.
407
- jasmine.getEnv().execute = () => {
408
- throw error;
409
- };
393
+ /**
394
+ * Load a script dynamically and await completion.
395
+ *
396
+ * @param {string} file
397
+ * @return {!Promise}
398
+ */
399
+ function loadScript(file) {
400
+ return new Promise((resolve, reject) => {
401
+ const script = /** @type {!HTMLScriptElement} */(
402
+ document.createElement('script'));
403
+ script.defer = false;
404
+ script['async'] = false;
405
+ script.onload = resolve;
406
+ script.onerror = reject;
407
+ script.setAttribute('src', '/base/' + file);
408
+ document.head.appendChild(script);
409
+ });
410
410
  }
411
+
412
+ /**
413
+ * Load all test scripts and await completion.
414
+ *
415
+ * @return {!Promise}
416
+ */
417
+ function loadTests() {
418
+ const loadPromises = [];
419
+ for (const file of getClientArg('testFiles')) {
420
+ loadPromises.push(loadScript(file));
421
+ }
422
+ return Promise.all(loadPromises);
423
+ }
424
+
425
+ // Hijack Karma's start() method and start things our way.
426
+ // eslint-disable-next-line no-restricted-syntax
427
+ const originalStart = window.__karma__.start.bind(window.__karma__);
428
+ window.__karma__.start = async () => {
429
+ // Executed when Karma has finished loading everything it loads for us.
430
+ // Those things were all loaded in parallel, and had no interdependencies
431
+ // other than those in the Shaka Player library, tracked by the Closure
432
+ // library's goog.require/goog.provide.
433
+
434
+ // Now we load the tests from here, rather than letting Karma do it. This
435
+ // give us control over the order, so that everything else is loaded and
436
+ // complete before any tests are requested. Then we may reference test
437
+ // utilities and library namespaces in the body of describe() blocks, which
438
+ // are executed synchronously as the test scripts are loaded. Without this
439
+ // ordering, we would have to either:
440
+ // 1. very carefully avoid references in describe() and defer them to
441
+ // beforeAll()
442
+ // or 2. strictly adopt goog.provide/goog.require throughout our tests
443
+ // In those scenarios, failure to do so would only manifest some of the time
444
+ // and on certain platforms. So this seems to be the more robust solution.
445
+
446
+ // See https://github.com/shaka-project/shaka-player/issues/4094
447
+
448
+ try {
449
+ setupTestEnvironment();
450
+ console.log('Set up test environment.');
451
+ await loadTests();
452
+ console.log('Loaded all tests.');
453
+
454
+ // eslint-disable-next-line no-restricted-syntax
455
+ } catch (error) {
456
+ console.error('Error during setup:', error);
457
+ window.__karma__.error(error);
458
+ return;
459
+ }
460
+
461
+ // Finally, start the tests.
462
+ originalStart();
463
+ };
@@ -343,7 +343,7 @@ jasmine.Spy.prototype.and;
343
343
  /**
344
344
  * @param {string} name
345
345
  * @return {!jasmine.Spy}
346
- * @see https://github.com/google/closure-compiler/issues/1422
346
+ * @see https://github.com/shaka-project/closure-compiler/issues/1422
347
347
  */
348
348
  jasmine.createSpy = function(name) {};
349
349
 
@@ -360,7 +360,7 @@ jasmine.createSpyObj = function(name, members) {};
360
360
  * @param {*} obj
361
361
  * @param {string} name
362
362
  * @return {!jasmine.Spy}
363
- * @see https://github.com/google/closure-compiler/issues/1422
363
+ * @see https://github.com/shaka-project/closure-compiler/issues/1422
364
364
  */
365
365
  var spyOn = function(obj, name) {};
366
366
 
@@ -20,3 +20,7 @@ __karma__.config = {};
20
20
 
21
21
  /** @const {!Array.<*>} */
22
22
  __karma__.config.args;
23
+
24
+
25
+ /** @param {?} error */
26
+ __karma__.error = function(error) {};
@@ -0,0 +1,10 @@
1
+ /*! @license
2
+ * Shaka Player
3
+ * Copyright 2016 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ // Define the shaka.test namespace before we load the test utilities.
8
+ // Without goog.provide in the test utils, this has to be explicit and come
9
+ // before we load the utils.
10
+ shaka.test = {};
@@ -4,14 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.CannedIDB');
8
-
9
- goog.require('shaka.log');
10
- goog.require('shaka.offline.indexeddb.DBOperation');
11
- goog.require('shaka.util.BufferUtils');
12
- goog.require('shaka.util.Uint8ArrayUtils');
13
-
14
-
15
7
  /**
16
8
  * A testing utility that can be used to dump and restore entire IndexedDB
17
9
  * databases. This can be inserted into a running app to snapshot databases
@@ -4,12 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.CeaUtils');
8
-
9
- goog.require('shaka.cea.CeaUtils');
10
- goog.require('shaka.text.Cue');
11
-
12
-
13
7
  /**
14
8
  * Testing helpers to assist tests for Closed Caption decoders for CEA captions.
15
9
  */
@@ -4,19 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.Dash');
8
-
9
- goog.require('goog.asserts');
10
- goog.require('shaka.dash.DashParser');
11
- goog.require('shaka.test.FakeNetworkingEngine');
12
- goog.require('shaka.test.ManifestParser');
13
- goog.require('shaka.test.Util');
14
- goog.require('shaka.util.PlayerConfiguration');
15
- goog.require('shaka.util.StringUtils');
16
- goog.requireType('shaka.media.SegmentReference');
17
- goog.requireType('shaka.util.Error');
18
-
19
-
20
7
  /** @summary Utilities for working with the DASH parser. */
21
8
  shaka.test.Dash = class {
22
9
  /**
@@ -4,9 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.FakeAd');
8
-
9
-
10
7
  /**
11
8
  * @implements {shaka.extern.IAd}
12
9
  */
@@ -4,15 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.FakeAdManager');
8
-
9
- goog.require('shaka.ads.AdManager');
10
- goog.require('shaka.ads.AdsStats');
11
- goog.require('shaka.util.FakeEvent');
12
- goog.require('shaka.util.FakeEventTarget');
13
- goog.requireType('shaka.test.FakeAd');
14
-
15
-
16
7
  /**
17
8
  * @implements {shaka.extern.IAdManager}
18
9
  * @final
@@ -4,11 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.FakeDemoMain');
8
-
9
- goog.require('shaka.Player');
10
-
11
-
12
7
  /**
13
8
  * @summary
14
9
  * This simulates the interface between ShakaDemoMain and the various tabs.
@@ -4,12 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.FakeDrmEngine');
8
-
9
- goog.require('shaka.media.DrmEngine');
10
- goog.require('shaka.test.Util');
11
-
12
-
13
7
  /**
14
8
  * A fake DrmEngine.
15
9
  *
@@ -4,13 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.FakeMediaSourceEngine');
8
-
9
- goog.require('shaka.media.MediaSourceEngine');
10
- goog.require('shaka.test.FakeTextDisplayer');
11
- goog.require('shaka.util.ManifestParserUtils');
12
-
13
-
14
7
  /**
15
8
  * @summary
16
9
  * This simulates multiple SourceBuffers. However, it only
@@ -4,11 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.FakeNetworkingEngine');
8
-
9
- /** @fileoverview @suppress {missingRequire} */
10
-
11
-
12
7
  /**
13
8
  * A fake networking engine that returns constant data. The request member
14
9
  * is a jasmine spy and can be used to check the actual calls that occurred.
@@ -4,11 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.FakeTextDisplayer');
8
-
9
- goog.require('shaka.test.Util');
10
-
11
-
12
7
  /**
13
8
  * @implements {shaka.extern.TextDisplayer}
14
9
  * @final
@@ -4,14 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.IndexedDBUtils');
8
-
9
- goog.require('shaka.test.Util');
10
- goog.require('shaka.util.Functional');
11
- goog.require('shaka.util.Iterables');
12
- goog.require('shaka.util.PublicPromise');
13
-
14
-
15
7
  shaka.test.IndexedDBUtils = class {
16
8
  /**
17
9
  * Make a connection to indexeddb. This assumes that it will be a new
@@ -41,8 +33,7 @@ shaka.test.IndexedDBUtils = class {
41
33
  // connection after 5 attempts (with delays in between), just give
42
34
  // up.
43
35
  let lastError;
44
- for (const _ of shaka.util.Iterables.range(5)) {
45
- shaka.util.Functional.ignored(_);
36
+ for (let i = 0; i < 5; i++) {
46
37
  try {
47
38
  return await tryOpen(); // eslint-disable-line no-await-in-loop
48
39
  } catch (e) { // eslint-disable-line no-restricted-syntax
@@ -4,7 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
-
8
7
  // TODO: this only contains the methods that we use; if this is published
9
8
  // it should contain the entire breadth of options in jasmine-ajax.
10
9
 
@@ -4,24 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.Loader');
8
-
9
- goog.require('shaka.log');
10
- goog.require('shaka.test.TestScheme');
11
- goog.require('shaka.util.PublicPromise');
12
- goog.requireType('shaka.Player');
13
- goog.requireType('shaka.media.InitSegmentReference');
14
- goog.requireType('shaka.media.PresentationTimeline');
15
- goog.requireType('shaka.media.SegmentIndex');
16
- goog.requireType('shaka.media.SegmentReference');
17
- goog.requireType('shaka.net.NetworkingEngine');
18
- goog.requireType('shaka.offline.Storage');
19
- goog.requireType('shaka.ui.Controls');
20
- goog.requireType('shaka.ui.Element');
21
- goog.requireType('shaka.ui.Overlay');
22
- goog.requireType('shaka.util.StringUtils');
23
-
24
-
25
7
  /**
26
8
  * A stand-in type for the "shaka" namespace. Used when loading the compiled
27
9
  * library or when referencing it in ManifestGenerator or TestScheme.
@@ -4,18 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.ManifestGenerator');
8
-
9
- goog.require('goog.asserts');
10
- goog.require('shaka.test.Util');
11
- goog.require('shaka.util.Iterables');
12
- goog.require('shaka.util.ManifestParserUtils');
13
- goog.require('shaka.util.Uint8ArrayUtils');
14
- goog.requireType('shaka.media.InitSegmentReference');
15
- goog.requireType('shaka.media.PresentationTimeline');
16
- goog.requireType('shaka.media.SegmentIndex');
17
-
18
-
19
7
  /**
20
8
  * @summary
21
9
  * A helper class used to generate manifests. This is done through a series
@@ -606,13 +594,20 @@ shaka.test.ManifestGenerator.Stream = class {
606
594
  segmentDuration, 'Must pass a non-zero segment duration');
607
595
 
608
596
  const shaka_ = this.manifest_.shaka_;
609
- const totalDuration = this.manifest_.presentationTimeline.getDuration();
597
+ let totalDuration = this.manifest_.presentationTimeline.getDuration();
610
598
  goog.asserts.assert(
611
599
  isFinite(totalDuration), 'Must specify a manifest duration');
600
+ if (!isFinite(totalDuration)) {
601
+ // Without this, a mistake of an infinite duration would result in an
602
+ // infinite loop and a crash, which would in turn prevent you from seeing
603
+ // the above assertion fail.
604
+ totalDuration = 0;
605
+ }
606
+
612
607
  const segmentCount = totalDuration / segmentDuration;
613
608
  const references = [];
614
609
 
615
- for (const index of shaka.util.Iterables.range(segmentCount)) {
610
+ for (let index = 0; index < segmentCount; index++) {
616
611
  const getUris = () => [sprintf(template, index)];
617
612
  const start = index * segmentDuration;
618
613
  const end = Math.min(totalDuration, (index + 1) * segmentDuration);
@@ -4,12 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.ManifestParser');
8
-
9
- goog.require('shaka.media.InitSegmentReference');
10
- goog.require('shaka.media.SegmentReference');
11
-
12
-
13
7
  shaka.test.ManifestParser = class {
14
8
  /**
15
9
  * Verifies the segment references of a stream.
@@ -4,11 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.OfflineUtils');
8
-
9
- goog.require('shaka.util.BufferUtils');
10
-
11
-
12
7
  shaka.test.OfflineUtils = class {
13
8
  /**
14
9
  * @param {string} originalUri
@@ -4,28 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.FakeAbrManager');
8
- goog.provide('shaka.test.FakeClosedCaptionParser');
9
- goog.provide('shaka.test.FakeManifestParser');
10
- goog.provide('shaka.test.FakePlayhead');
11
- goog.provide('shaka.test.FakePlayheadObserver');
12
- goog.provide('shaka.test.FakePresentationTimeline');
13
- goog.provide('shaka.test.FakeSegmentIndex');
14
- goog.provide('shaka.test.FakeStreamingEngine');
15
- goog.provide('shaka.test.FakeTextTrack');
16
- goog.provide('shaka.test.FakeTransmuxer');
17
- goog.provide('shaka.test.FakeVideo');
18
-
19
- goog.require('shaka.test.Util');
20
- goog.require('shaka.abr.SimpleAbrManager');
21
- goog.require('shaka.media.IClosedCaptionParser');
22
- goog.require('shaka.media.Playhead');
23
- goog.require('shaka.media.PresentationTimeline');
24
- goog.require('shaka.media.SegmentIndex');
25
- goog.require('shaka.media.StreamingEngine');
26
- goog.require('shaka.media.Transmuxer');
27
-
28
-
29
7
  /**
30
8
  * @fileoverview Defines simple mocks for library types.
31
9
  * @suppress {checkTypes} Suppress errors about missmatches between the
@@ -351,19 +329,24 @@ shaka.test.FakePlayhead = class {
351
329
  /** @extends {TextTrack} */
352
330
  shaka.test.FakeTextTrack = class {
353
331
  constructor() {
332
+ // The compiler knows TextTrack.cues is const, and we lied and said we
333
+ // "extend" TextTrack, so it won't let us assign to cues here. But we
334
+ // must, because this fake is a from-scratch implementation of the API.
335
+ // This cast-hack works around the issue.
354
336
  /** @type {!Array.<TextTrackCue>} */
355
- this.cues = [];
337
+ const cues = [];
338
+ (/** @type {?} */(this))['cues'] = cues;
356
339
 
357
340
  /** @type {!jasmine.Spy} */
358
341
  this.addCue = jasmine.createSpy('addCue').and.callFake((cue) => {
359
- this.cues.push(cue);
342
+ cues.push(cue);
360
343
  });
361
344
 
362
345
  /** @type {!jasmine.Spy} */
363
346
  this.removeCue = jasmine.createSpy('removeCue').and.callFake((cue) => {
364
- const idx = this.cues.indexOf(cue);
347
+ const idx = cues.indexOf(cue);
365
348
  expect(idx).not.toBeLessThan(0);
366
- this.cues.splice(idx, 1);
349
+ cues.splice(idx, 1);
367
350
  });
368
351
  }
369
352
  };
@@ -4,20 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.IStreamGenerator');
8
- goog.provide('shaka.test.Mp4LiveStreamGenerator');
9
- goog.provide('shaka.test.Mp4VodStreamGenerator');
10
- goog.provide('shaka.test.StreamGenerator');
11
- goog.provide('shaka.test.TSVodStreamGenerator');
12
-
13
- goog.require('goog.asserts');
14
- goog.require('shaka.log');
15
- goog.require('shaka.test.Util');
16
- goog.require('shaka.util.BufferUtils');
17
- goog.require('shaka.util.DataViewReader');
18
- goog.require('shaka.util.Uint8ArrayUtils');
19
-
20
-
21
7
  /**
22
8
  * @summary
23
9
  * Defines an interface to generate streams.
@@ -4,21 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.StreamingEngineUtil');
8
-
9
- goog.require('goog.asserts');
10
- goog.require('shaka.media.InitSegmentReference');
11
- goog.require('shaka.media.SegmentReference');
12
- goog.require('shaka.test.FakeNetworkingEngine');
13
- goog.require('shaka.test.FakePresentationTimeline');
14
- goog.require('shaka.test.FakeSegmentIndex');
15
- goog.require('shaka.test.Util');
16
- goog.require('shaka.util.AbortableOperation');
17
- goog.require('shaka.util.Error');
18
- goog.require('shaka.util.ManifestParserUtils');
19
- goog.requireType('shaka.media.PresentationTimeline');
20
-
21
-
22
7
  shaka.test.StreamingEngineUtil = class {
23
8
  /**
24
9
  * Creates a FakeNetworkingEngine.
@@ -4,24 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.TestScheme');
8
-
9
- goog.require('goog.asserts');
10
- goog.require('goog.Uri');
11
- goog.require('shaka.Player');
12
- goog.require('shaka.media.ManifestParser');
13
- goog.require('shaka.net.NetworkingEngine');
14
- goog.require('shaka.test.ManifestGenerator');
15
- goog.require('shaka.test.Mp4VodStreamGenerator');
16
- goog.require('shaka.test.TSVodStreamGenerator');
17
- goog.require('shaka.test.Util');
18
- goog.require('shaka.util.AbortableOperation');
19
- goog.require('shaka.util.Error');
20
- goog.require('shaka.util.ManifestParserUtils');
21
- goog.requireType('shaka.net.NetworkingEngine.RequestType');
22
- goog.requireType('shaka.test.IStreamGenerator');
23
-
24
-
25
7
  /**
26
8
  * @typedef {{
27
9
  * initSegmentUri: string,
@@ -578,7 +560,7 @@ shaka.test.TestScheme.DATA = {
578
560
  duration: 30,
579
561
  },
580
562
 
581
- // https://github.com/google/shaka-player/issues/2553
563
+ // https://github.com/shaka-project/shaka-player/issues/2553
582
564
  'forced_subs_simulation': {
583
565
  audio: sintelAudioSegment,
584
566
  text: vttSegment,