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,10 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.test.Util');
8
- goog.require('shaka.text.Cue');
9
- goog.require('shaka.text.UITextDisplayer');
10
-
11
7
  describe('UITextDisplayer', () => {
12
8
  /** @type {!HTMLElement} */
13
9
  let videoContainer;
@@ -65,7 +61,18 @@ describe('UITextDisplayer', () => {
65
61
  document.body.removeChild(videoContainer);
66
62
  });
67
63
 
68
- it('correctly displays styles for cues', async () => {
64
+ /**
65
+ * @suppress {visibility}
66
+ * "suppress visibility" has function scope, so this is a mini-function that
67
+ * exists solely to suppress visibility rules for these actions.
68
+ */
69
+ function updateCaptions() {
70
+ // Rather than wait for a timer, which can be unreliable on Safari when the
71
+ // device is heavily loaded, trigger the update explicitly.
72
+ textDisplayer.updateCaptions_();
73
+ }
74
+
75
+ it('correctly displays styles for cues', () => {
69
76
  /** @type {!shaka.text.Cue} */
70
77
  const cue = new shaka.text.Cue(0, 100, 'Captain\'s log.');
71
78
  cue.color = 'green';
@@ -81,8 +88,7 @@ describe('UITextDisplayer', () => {
81
88
 
82
89
  textDisplayer.setTextVisibility(true);
83
90
  textDisplayer.append([cue]);
84
- // Wait until updateCaptions_() gets called.
85
- await shaka.test.Util.delay(0.5);
91
+ updateCaptions();
86
92
 
87
93
  const textContainer = videoContainer.querySelector('.shaka-text-container');
88
94
  const captions = textContainer.querySelector('div');
@@ -114,7 +120,7 @@ describe('UITextDisplayer', () => {
114
120
  .toEqual(jasmine.objectContaining({'background-color': 'black'}));
115
121
  });
116
122
 
117
- it('correctly displays styles for nested cues', async () => {
123
+ it('correctly displays styles for nested cues', () => {
118
124
  /** @type {!shaka.text.Cue} */
119
125
  const cue = new shaka.text.Cue(0, 100, '');
120
126
  const nestedCue = new shaka.text.Cue(0, 100, 'Captain\'s log.');
@@ -131,8 +137,7 @@ describe('UITextDisplayer', () => {
131
137
 
132
138
  textDisplayer.setTextVisibility(true);
133
139
  textDisplayer.append([cue]);
134
- // Wait until updateCaptions_() gets called.
135
- await shaka.test.Util.delay(0.5);
140
+ updateCaptions();
136
141
 
137
142
  // Verify styles applied to the nested cues.
138
143
  const textContainer = videoContainer.querySelector('.shaka-text-container');
@@ -165,7 +170,7 @@ describe('UITextDisplayer', () => {
165
170
  .toEqual(jasmine.objectContaining({'background-color': 'black'}));
166
171
  });
167
172
 
168
- it('correctly displays styles for cellResolution units', async () => {
173
+ it('correctly displays styles for cellResolution units', () => {
169
174
  /** @type {!shaka.text.Cue} */
170
175
  const cue = new shaka.text.Cue(0, 100, 'Captain\'s log.');
171
176
  cue.fontSize = '0.80c';
@@ -177,8 +182,7 @@ describe('UITextDisplayer', () => {
177
182
 
178
183
  textDisplayer.setTextVisibility(true);
179
184
  textDisplayer.append([cue]);
180
- // Wait until updateCaptions_() gets called.
181
- await shaka.test.Util.delay(0.5);
185
+ updateCaptions();
182
186
 
183
187
  // Expected value is calculated based on ttp:cellResolution="60 20"
184
188
  // videoContainerHeight=450px and tts:fontSize="0.80c" on the default style.
@@ -200,7 +204,7 @@ describe('UITextDisplayer', () => {
200
204
  }));
201
205
  });
202
206
 
203
- it('correctly displays styles for percentages units', async () => {
207
+ it('correctly displays styles for percentages units', () => {
204
208
  /** @type {!shaka.text.Cue} */
205
209
  const cue = new shaka.text.Cue(0, 100, 'Captain\'s log.');
206
210
  cue.fontSize = '90%';
@@ -211,8 +215,7 @@ describe('UITextDisplayer', () => {
211
215
 
212
216
  textDisplayer.setTextVisibility(true);
213
217
  textDisplayer.append([cue]);
214
- // Wait until updateCaptions_() gets called.
215
- await shaka.test.Util.delay(0.5);
218
+ updateCaptions();
216
219
 
217
220
  // Expected value is calculated based on ttp:cellResolution="32 15"
218
221
  // videoContainerHeight=450px and tts:fontSize="90%" on the default style.
@@ -225,15 +228,15 @@ describe('UITextDisplayer', () => {
225
228
  jasmine.objectContaining({'font-size': expectedFontSize}));
226
229
  });
227
230
 
228
- it('does not display duplicate cues', async () => {
231
+ it('does not display duplicate cues', () => {
229
232
  // These are identical.
230
233
  const cue1 = new shaka.text.Cue(0, 100, 'Captain\'s log.');
231
234
  const cue2 = new shaka.text.Cue(0, 100, 'Captain\'s log.');
232
235
 
233
236
  textDisplayer.setTextVisibility(true);
234
237
  textDisplayer.append([cue1]);
235
- // Wait until updateCaptions_() gets called.
236
- await shaka.test.Util.delay(0.5);
238
+ updateCaptions();
239
+
237
240
  /** @type {Element} */
238
241
  const textContainer = videoContainer.querySelector('.shaka-text-container');
239
242
  let captions = textContainer.querySelectorAll('div');
@@ -241,14 +244,14 @@ describe('UITextDisplayer', () => {
241
244
  expect(captions.length).toBe(1);
242
245
 
243
246
  textDisplayer.append([cue2]);
244
- // Wait until updateCaptions_() gets called.
245
- await shaka.test.Util.delay(0.5);
247
+ updateCaptions();
248
+
246
249
  captions = textContainer.querySelectorAll('div');
247
250
  // Expect textContainer to display one cue without duplication.
248
251
  expect(captions.length).toBe(1);
249
252
  });
250
253
 
251
- it('does not mistake cues with nested cues as duplicates', async () => {
254
+ it('does not mistake cues with nested cues as duplicates', () => {
252
255
  // These are not identical, but might look like it at the top level.
253
256
  const cue1 = new shaka.text.Cue(0, 100, '');
254
257
  cue1.nestedCues = [
@@ -265,8 +268,8 @@ describe('UITextDisplayer', () => {
265
268
 
266
269
  textDisplayer.setTextVisibility(true);
267
270
  textDisplayer.append([cue1]);
268
- // Wait until updateCaptions_() gets called.
269
- await shaka.test.Util.delay(0.5);
271
+ updateCaptions();
272
+
270
273
  /** @type {Element} */
271
274
  const textContainer = videoContainer.querySelector('.shaka-text-container');
272
275
  let captions = textContainer.querySelectorAll('div');
@@ -274,15 +277,15 @@ describe('UITextDisplayer', () => {
274
277
  expect(captions.length).toBe(1);
275
278
 
276
279
  textDisplayer.append([cue2, cue3]);
277
- // Wait until updateCaptions_() gets called.
278
- await shaka.test.Util.delay(0.5);
280
+ updateCaptions();
281
+
279
282
  captions = textContainer.querySelectorAll('div');
280
283
  // Expect textContainer to display all three cues, since they are not truly
281
284
  // duplicates.
282
285
  expect(captions.length).toBe(3);
283
286
  });
284
287
 
285
- it('does not mistake cues with different styles duplicates', async () => {
288
+ it('does not mistake cues with different styles duplicates', () => {
286
289
  // These all have the same text and timing, but different styles.
287
290
  const cue1 = new shaka.text.Cue(0, 100, 'Hello!');
288
291
  cue1.color = 'green';
@@ -296,8 +299,8 @@ describe('UITextDisplayer', () => {
296
299
 
297
300
  textDisplayer.setTextVisibility(true);
298
301
  textDisplayer.append([cue1]);
299
- // Wait until updateCaptions_() gets called.
300
- await shaka.test.Util.delay(0.5);
302
+ updateCaptions();
303
+
301
304
  /** @type {Element} */
302
305
  const textContainer = videoContainer.querySelector('.shaka-text-container');
303
306
  let captions = textContainer.querySelectorAll('div');
@@ -305,20 +308,20 @@ describe('UITextDisplayer', () => {
305
308
  expect(captions.length).toBe(1);
306
309
 
307
310
  textDisplayer.append([cue2, cue3]);
308
- // Wait until updateCaptions_() gets called.
309
- await shaka.test.Util.delay(0.5);
311
+ updateCaptions();
312
+
310
313
  captions = textContainer.querySelectorAll('div');
311
314
  // Expect textContainer to display all three cues, since they are not truly
312
315
  // duplicates.
313
316
  expect(captions.length).toBe(3);
314
317
  });
315
318
 
316
- it('hides currently displayed cue when removed', async () => {
319
+ it('hides currently displayed cue when removed', () => {
317
320
  const cue = new shaka.text.Cue(0, 50, 'One');
318
321
  textDisplayer.setTextVisibility(true);
319
322
  textDisplayer.append([cue]);
320
323
  video.currentTime = 10;
321
- await shaka.test.Util.delay(0.5);
324
+ updateCaptions();
322
325
  const textContainer = videoContainer.querySelector('.shaka-text-container');
323
326
 
324
327
  let cueElements = textContainer.querySelectorAll('div');
@@ -331,7 +334,7 @@ describe('UITextDisplayer', () => {
331
334
  expect(cueElements.length).toBe(0);
332
335
  });
333
336
 
334
- it('hides and shows nested cues at appropriate times', async () => {
337
+ it('hides and shows nested cues at appropriate times', () => {
335
338
  const parentCue1 = new shaka.text.Cue(0, 100, '');
336
339
  const cue1 = new shaka.text.Cue(0, 50, 'One');
337
340
  parentCue1.nestedCues.push(cue1);
@@ -348,7 +351,7 @@ describe('UITextDisplayer', () => {
348
351
  textDisplayer.append([parentCue1, parentCue2]);
349
352
 
350
353
  video.currentTime = 10;
351
- await shaka.test.Util.delay(0.5);
354
+ updateCaptions();
352
355
  /** @type {Element} */
353
356
  const textContainer = videoContainer.querySelector('.shaka-text-container');
354
357
  let parentCueElements = textContainer.querySelectorAll('div');
@@ -357,38 +360,38 @@ describe('UITextDisplayer', () => {
357
360
  expect(parentCueElements[0].textContent).toBe('One');
358
361
 
359
362
  video.currentTime = 35;
360
- await shaka.test.Util.delay(0.5);
363
+ updateCaptions();
361
364
  parentCueElements = textContainer.querySelectorAll('div');
362
365
  expect(parentCueElements.length).toBe(1);
363
366
  expect(parentCueElements[0].textContent).toBe('OneTwo');
364
367
 
365
368
  video.currentTime = 60;
366
- await shaka.test.Util.delay(0.5);
369
+ updateCaptions();
367
370
  parentCueElements = textContainer.querySelectorAll('div');
368
371
  expect(parentCueElements.length).toBe(1);
369
372
  expect(parentCueElements[0].textContent).toBe('TwoThree');
370
373
 
371
374
  video.currentTime = 85;
372
- await shaka.test.Util.delay(0.5);
375
+ updateCaptions();
373
376
  parentCueElements = textContainer.querySelectorAll('div');
374
377
  expect(parentCueElements.length).toBe(1);
375
378
  expect(parentCueElements[0].textContent).toBe('Three');
376
379
 
377
380
  video.currentTime = 95;
378
- await shaka.test.Util.delay(0.5);
381
+ updateCaptions();
379
382
  parentCueElements = textContainer.querySelectorAll('div');
380
383
  expect(parentCueElements.length).toBe(2);
381
384
  expect(parentCueElements[0].textContent).toBe('Three');
382
385
  expect(parentCueElements[1].textContent).toBe('Four');
383
386
 
384
387
  video.currentTime = 105;
385
- await shaka.test.Util.delay(0.5);
388
+ updateCaptions();
386
389
  parentCueElements = textContainer.querySelectorAll('div');
387
390
  expect(parentCueElements.length).toBe(1);
388
391
  expect(parentCueElements[0].textContent).toBe('Four');
389
392
 
390
393
  video.currentTime = 150;
391
- await shaka.test.Util.delay(0.5);
394
+ updateCaptions();
392
395
  parentCueElements = textContainer.querySelectorAll('div');
393
396
  expect(parentCueElements.length).toBe(1);
394
397
  expect(parentCueElements[0].textContent).toBe('');