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
@@ -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
 
@@ -31,7 +11,7 @@ describe('DrmEngine', () => {
31
11
  navigator.requestMediaKeySystemAccess;
32
12
  const originalLogError = shaka.log.error;
33
13
  const originalBatchTime = shaka.media.DrmEngine.KEY_STATUS_BATCH_TIME;
34
- const originalDecodingInfo = window.shakaMediaCapabilities.decodingInfo;
14
+ const originalDecodingInfo = navigator.mediaCapabilities.decodingInfo;
35
15
 
36
16
  /** @type {!jasmine.Spy} */
37
17
  let decodingInfoSpy;
@@ -76,7 +56,7 @@ describe('DrmEngine', () => {
76
56
 
77
57
  beforeEach(() => {
78
58
  decodingInfoSpy = jasmine.createSpy('decodingInfo');
79
- window.shakaMediaCapabilities.decodingInfo =
59
+ navigator.mediaCapabilities.decodingInfo =
80
60
  shaka.test.Util.spyFunc(decodingInfoSpy);
81
61
 
82
62
  logErrorSpy = jasmine.createSpy('shaka.log.error');
@@ -153,7 +133,7 @@ describe('DrmEngine', () => {
153
133
 
154
134
  navigator.requestMediaKeySystemAccess =
155
135
  originalRequestMediaKeySystemAccess;
156
- window.shakaMediaCapabilities.decodingInfo = originalDecodingInfo;
136
+ navigator.mediaCapabilities.decodingInfo = originalDecodingInfo;
157
137
  shaka.log.error = originalLogError;
158
138
  });
159
139
 
@@ -925,7 +905,7 @@ describe('DrmEngine', () => {
925
905
  .toHaveBeenCalledWith('cenc', initData1);
926
906
  });
927
907
 
928
- // https://github.com/google/shaka-player/issues/2754
908
+ // https://github.com/shaka-project/shaka-player/issues/2754
929
909
  it('ignores duplicate init data from newInitData', async () => {
930
910
  /** @type {!Uint8Array} */
931
911
  const initData = new Uint8Array(1);
@@ -1311,7 +1291,7 @@ describe('DrmEngine', () => {
1311
1291
  expect(onKeyStatusSpy).toHaveBeenCalled();
1312
1292
  });
1313
1293
 
1314
- // See https://github.com/google/shaka-player/issues/1541
1294
+ // See https://github.com/shaka-project/shaka-player/issues/1541
1315
1295
  it('does not update public key statuses before callback', async () => {
1316
1296
  await initAndAttach();
1317
1297
 
@@ -1349,7 +1329,7 @@ describe('DrmEngine', () => {
1349
1329
  expect(keyIds.length).toBe(2);
1350
1330
  });
1351
1331
 
1352
- // See https://github.com/google/shaka-player/issues/1541
1332
+ // See https://github.com/shaka-project/shaka-player/issues/1541
1353
1333
  it('does not invoke callback until all sessions are loaded', async () => {
1354
1334
  // Set up init data overrides in the manifest so that we get multiple
1355
1335
  // sessions.
@@ -1962,7 +1942,7 @@ describe('DrmEngine', () => {
1962
1942
  // this doesn't work if the session is not callable (no license request
1963
1943
  // sent). So |session.closed| should never resolve and |session.close()|
1964
1944
  // should be rejected and destroy() should still succeed.
1965
- // https://github.com/google/shaka-player/issues/664
1945
+ // https://github.com/shaka-project/shaka-player/issues/664
1966
1946
  await initAndAttach();
1967
1947
  session1.closed = new shaka.util.PublicPromise();
1968
1948
  session2.closed = new shaka.util.PublicPromise();
@@ -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});
@@ -4,13 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.ClosedCaptionParser');
8
- goog.require('shaka.media.MediaSourceEngine');
9
- goog.require('shaka.test.FakeTextDisplayer');
10
- goog.require('shaka.test.TestScheme');
11
- goog.require('shaka.test.UiUtils');
12
- goog.require('shaka.util.ManifestParserUtils');
13
-
14
7
  describe('MediaSourceEngine', () => {
15
8
  const ContentType = shaka.util.ManifestParserUtils.ContentType;
16
9
  const presentationDuration = 840;
@@ -4,19 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
-
8
- goog.require('goog.asserts');
9
- goog.require('shaka.media.MediaSourceEngine');
10
- goog.require('shaka.media.Transmuxer');
11
- goog.require('shaka.test.FakeClosedCaptionParser');
12
- goog.require('shaka.test.FakeTextDisplayer');
13
- goog.require('shaka.test.FakeTransmuxer');
14
- goog.require('shaka.test.StatusPromise');
15
- goog.require('shaka.test.Util');
16
- goog.require('shaka.text.TextEngine');
17
- goog.require('shaka.util.Error');
18
- goog.require('shaka.util.ManifestParserUtils');
19
-
20
7
  /**
21
8
  * @typedef {{
22
9
  * length: number,
@@ -1127,7 +1114,7 @@ describe('MediaSourceEngine', () => {
1127
1114
  expect(mockTextEngine.destroy).toHaveBeenCalled();
1128
1115
  });
1129
1116
 
1130
- // Regression test for https://github.com/google/shaka-player/issues/984
1117
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/984
1131
1118
  it('destroys TextDisplayer on destroy', async () => {
1132
1119
  await mediaSourceEngine.destroy();
1133
1120
  expect(mockTextDisplayer.destroySpy).toHaveBeenCalled();
@@ -4,10 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.Mp4SegmentIndexParser');
8
- goog.require('shaka.test.Util');
9
- goog.require('shaka.util.Error');
10
-
11
7
  describe('Mp4SegmentIndexParser', () => {
12
8
  const Util = shaka.test.Util;
13
9
 
@@ -4,10 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
-
8
- goog.require('shaka.media.PlayRateController');
9
- goog.require('shaka.test.Util');
10
-
11
7
  describe('PlayRateController', () => {
12
8
  /** @type {!jasmine.Spy} */
13
9
  let getPlayRateSpy;
@@ -4,14 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
-
8
- goog.require('shaka.media.MediaSourcePlayhead');
9
- goog.require('shaka.test.FakePresentationTimeline');
10
- goog.require('shaka.test.FakeVideo');
11
- goog.require('shaka.test.Util');
12
- goog.require('shaka.util.PlayerConfiguration');
13
- goog.requireType('shaka.media.Playhead');
14
-
15
7
  /**
16
8
  * @typedef {{start: number, end: number}}
17
9
  *
@@ -332,8 +324,8 @@ describe('Playhead', () => {
332
324
  });
333
325
 
334
326
  // This is important for recovering from drift.
335
- // See: https://github.com/google/shaka-player/issues/1105
336
- // TODO: Re-evaluate after https://github.com/google/shaka-player/issues/999
327
+ // See: https://github.com/shaka-project/shaka-player/issues/1105
328
+ // TODO: Re-evaluate after https://github.com/shaka-project/shaka-player/issues/999
337
329
  it('does not change once the initial position is set', () => {
338
330
  timeline.isLive.and.returnValue(true);
339
331
  timeline.getDuration.and.returnValue(Infinity);
@@ -781,9 +773,9 @@ describe('Playhead', () => {
781
773
  }); // clamps playhead even before seeking completes
782
774
 
783
775
  // Regression test for:
784
- // - https://github.com/google/shaka-player/pull/2849
785
- // - https://github.com/google/shaka-player/issues/2748
786
- // - https://github.com/google/shaka-player/issues/2848
776
+ // - https://github.com/shaka-project/shaka-player/pull/2849
777
+ // - https://github.com/shaka-project/shaka-player/issues/2748
778
+ // - https://github.com/shaka-project/shaka-player/issues/2848
787
779
  it('does not apply seek range before initial seek has completed', () => {
788
780
  // These attributes allow the seek range callback to do its thing.
789
781
  video.readyState = HTMLMediaElement.HAVE_METADATA;
@@ -1236,7 +1228,7 @@ describe('Playhead', () => {
1236
1228
  it('works with rounding errors when seeking', () => {
1237
1229
  // If the browser sets the time to slightly before where we seek to, we
1238
1230
  // shouldn't get stuck in an infinite loop trying to jump the tiny gap.
1239
- // https://github.com/google/shaka-player/issues/1309
1231
+ // https://github.com/shaka-project/shaka-player/issues/1309
1240
1232
  const buffered = [{start: 10, end: 20}];
1241
1233
  video.buffered = createFakeBuffered(buffered);
1242
1234
  video.readyState = HTMLMediaElement.HAVE_METADATA;
@@ -1295,7 +1287,7 @@ describe('Playhead', () => {
1295
1287
  expect(video.currentTime).toBe(5);
1296
1288
  });
1297
1289
 
1298
- // Regression test for https://github.com/google/shaka-player/issues/2987
1290
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/2987
1299
1291
  it('does gap jump if paused at 0 and has autoplay', () => {
1300
1292
  const buffered = [{start: 10, end: 20}];
1301
1293
  video.buffered = createFakeBuffered(buffered);
@@ -1320,7 +1312,7 @@ describe('Playhead', () => {
1320
1312
  expect(video.currentTime).toBe(10);
1321
1313
  });
1322
1314
 
1323
- // Regression test for https://github.com/google/shaka-player/issues/3451
1315
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/3451
1324
1316
  it('doesn\'t gap jump if paused at 0 and hasn\'t autoplay', () => {
1325
1317
  const buffered = [{start: 10, end: 20}];
1326
1318
  video.buffered = createFakeBuffered(buffered);
@@ -4,9 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.PresentationTimeline');
8
- goog.require('shaka.test.ManifestParser');
9
-
10
7
  describe('PresentationTimeline', () => {
11
8
  const originalDateNow = Date.now;
12
9
  const makeSegmentReference = (startTime, endTime) => {
@@ -183,7 +180,7 @@ describe('PresentationTimeline', () => {
183
180
 
184
181
  // In spite of the current time, the explicit segment times will decide
185
182
  // the availability window.
186
- // See https://github.com/google/shaka-player/issues/999
183
+ // See https://github.com/shaka-project/shaka-player/issues/999
187
184
  setElapsed(1000);
188
185
  timeline.notifySegments([ref1, ref2, ref3, ref4, ref5]);
189
186
 
@@ -283,7 +280,7 @@ describe('PresentationTimeline', () => {
283
280
 
284
281
  // In spite of the current time, the explicit segment times will decide
285
282
  // the availability window.
286
- // See https://github.com/google/shaka-player/issues/999
283
+ // See https://github.com/shaka-project/shaka-player/issues/999
287
284
  setElapsed(1000);
288
285
  timeline.notifySegments([ref1, ref2, ref3, ref4, ref5]);
289
286
 
@@ -396,12 +393,12 @@ describe('PresentationTimeline', () => {
396
393
  expect(timeline.getSafeSeekRangeStart(25)).toBe(5);
397
394
  });
398
395
 
399
- // Regression test for https://github.com/google/shaka-player/issues/2831
396
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/2831
400
397
  it('will round up to the nearest ms', () => {
401
398
  const timeline = makeVodTimeline(/* duration= */ 60);
402
399
  // Seeking to this exact number may result in seeking to slightly less
403
400
  // than that, due to rounding.
404
- timeline.setUserSeekStart(1.458666666666666666666666);
401
+ timeline.setUserSeekStart(1.458666666666666);
405
402
  // So the safe range start should be slightly higher, with fewer digits.
406
403
  expect(timeline.getSafeSeekRangeStart(0)).toBe(1.459);
407
404
  });
@@ -4,10 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.QualityObserver');
8
- goog.require('shaka.test.Util');
9
-
10
-
11
7
  describe('QualityObserver', () => {
12
8
  /** @type {!shaka.media.QualityObserver} */
13
9
  let observer;
@@ -50,7 +46,10 @@ describe('QualityObserver', () => {
50
46
  beforeEach(() => {
51
47
  onQualityChange = jasmine.createSpy('onQualityChange');
52
48
  observer = new shaka.media.QualityObserver(getBufferedInfo);
53
- observer.setListeners(shaka.test.Util.spyFunc(onQualityChange));
49
+ observer.addEventListener('qualitychange', (event) => {
50
+ shaka.test.Util.spyFunc(onQualityChange)(
51
+ event['quality'], event['position']);
52
+ });
54
53
  emptyBuffer = true;
55
54
  bufferStart = 0;
56
55
  bufferEnd = 0;
@@ -4,17 +4,15 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.RegionObserver');
8
- goog.require('shaka.media.RegionTimeline');
9
- goog.require('shaka.test.Util');
10
- goog.requireType('shaka.media.IPlayheadObserver');
11
-
12
7
  describe('RegionObserver', () => {
13
8
  /** @type {!shaka.media.RegionTimeline} */
14
9
  let timeline;
15
10
  /** @type {!shaka.media.RegionObserver} */
16
11
  let observer;
17
12
 
13
+ /** @type {!jasmine.Spy} */
14
+ let onSeekRange;
15
+
18
16
  /** @type {!jasmine.Spy} */
19
17
  let onEnterRegion;
20
18
  /** @type {!jasmine.Spy} */
@@ -23,18 +21,26 @@ describe('RegionObserver', () => {
23
21
  let onSkipRegion;
24
22
 
25
23
  beforeEach(() => {
24
+ onSeekRange = jasmine.createSpy('onSeekRange');
25
+ onSeekRange.and.returnValue({start: 0, end: 100});
26
+
26
27
  onEnterRegion = jasmine.createSpy('onEnterRegion');
27
28
  onExitRegion = jasmine.createSpy('onExitRegion');
28
29
  onSkipRegion = jasmine.createSpy('onSkipRegion');
29
30
 
30
31
  timeline = new shaka.media.RegionTimeline(
31
- () => { return {start: 0, end: 100}; });
32
+ shaka.test.Util.spyFunc(onSeekRange));
32
33
 
33
34
  observer = new shaka.media.RegionObserver(timeline);
34
- observer.setListeners(
35
- /* onEnter= */ shaka.test.Util.spyFunc(onEnterRegion),
36
- /* onExit= */ shaka.test.Util.spyFunc(onExitRegion),
37
- /* onSkip= */ shaka.test.Util.spyFunc(onSkipRegion));
35
+ observer.addEventListener('enter', (event) => {
36
+ shaka.test.Util.spyFunc(onEnterRegion)(event['region'], event['seeking']);
37
+ });
38
+ observer.addEventListener('exit', (event) => {
39
+ shaka.test.Util.spyFunc(onExitRegion)(event['region'], event['seeking']);
40
+ });
41
+ observer.addEventListener('skip', (event) => {
42
+ shaka.test.Util.spyFunc(onSkipRegion)(event['region'], event['seeking']);
43
+ });
38
44
  });
39
45
 
40
46
  it('fires enter event when adding a region the playhead is in', () => {
@@ -313,6 +319,30 @@ describe('RegionObserver', () => {
313
319
  expect(onSkipRegion).not.toHaveBeenCalled();
314
320
  });
315
321
 
322
+ // See https://github.com/shaka-project/shaka-player/issues/3949
323
+ it('cleans up references to regions', async () => {
324
+ const region = createRegion('my-region', 0, 10);
325
+ timeline.addRegion(region);
326
+
327
+ // Poll so that RegionObserver will store regions.
328
+ poll(observer,
329
+ /* timeInSeconds= */ 5,
330
+ /* seeking= */ false);
331
+
332
+ // Hack to get a private member without the compiler complaining:
333
+ /** @type {Map} */
334
+ const regionMap = (/** @type {?} */(observer))['oldPosition_'];
335
+ expect(regionMap.size).not.toBe(0);
336
+
337
+ // Move the seek range so that the region will be removed.
338
+ onSeekRange.and.returnValue({start: 20, end: 100});
339
+ // Give the timeline time to filter regions
340
+ await shaka.test.Util.delay(
341
+ shaka.media.RegionTimeline.REGION_FILTER_INTERVAL * 2);
342
+
343
+ expect(regionMap.size).toBe(0);
344
+ });
345
+
316
346
  /**
317
347
  * @param {string} id
318
348
  * @param {number} startTimeSeconds
@@ -4,9 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.RegionTimeline');
8
- goog.require('shaka.test.Util');
9
-
10
7
  describe('RegionTimeline', () => {
11
8
  /** @type {!shaka.media.RegionTimeline} */
12
9
  let timeline;
@@ -14,18 +11,27 @@ describe('RegionTimeline', () => {
14
11
  /** @type {!jasmine.Spy} */
15
12
  let onNewRegion;
16
13
 
14
+ /** @type {!jasmine.Spy} */
15
+ let onRemoveRegion;
16
+
17
17
  /** @type {!jasmine.Spy} */
18
18
  let onSeekRange;
19
19
 
20
20
  beforeEach(() => {
21
- onNewRegion = jasmine.createSpy('onNewRegion');
22
-
23
21
  onSeekRange = jasmine.createSpy('onSeekRange');
24
22
  onSeekRange.and.returnValue({start: 0, end: 100});
25
-
26
23
  timeline = new shaka.media.RegionTimeline(
27
24
  shaka.test.Util.spyFunc(onSeekRange));
28
- timeline.setListeners(shaka.test.Util.spyFunc(onNewRegion));
25
+
26
+ onNewRegion = jasmine.createSpy('onNewRegion');
27
+ timeline.addEventListener('regionadd', (event) => {
28
+ shaka.test.Util.spyFunc(onNewRegion)(event['region']);
29
+ });
30
+
31
+ onRemoveRegion = jasmine.createSpy('onRemoveRegion');
32
+ timeline.addEventListener('regionremove', (event) => {
33
+ shaka.test.Util.spyFunc(onRemoveRegion)(event['region']);
34
+ });
29
35
  });
30
36
 
31
37
  afterEach(() => {
@@ -85,24 +91,33 @@ describe('RegionTimeline', () => {
85
91
  ]);
86
92
  });
87
93
 
88
- it('filters out regions that end before the start of the seek range',
89
- async () => {
90
- onSeekRange.and.returnValue({start: 5, end: 100});
91
- const region1 = createRegion('urn:foo', 'my-region', 0, 3);
92
- const region2 = createRegion('urn:foo', 'my-region', 3, 10);
93
- const region3 = createRegion('urn:foo', 'my-region', 5, 10);
94
- timeline.addRegion(region1);
95
- timeline.addRegion(region2);
96
- timeline.addRegion(region3);
97
- expect(onNewRegion).toHaveBeenCalledTimes(3);
98
- let regions = Array.from(timeline.regions());
99
- expect(regions.length).toBe(3);
100
- // Give the timeline time to filter regions
101
- await shaka.test.Util.delay(
102
- shaka.media.RegionTimeline.REGION_FILTER_INTERVAL * 2);
103
- regions = Array.from(timeline.regions());
104
- expect(regions).toEqual([region2, region3]);
105
- });
94
+ it('filters regions that end before the seek range', async () => {
95
+ onSeekRange.and.returnValue({start: 5, end: 100});
96
+
97
+ const region1 = createRegion('urn:foo', 'my-region', 0, 3);
98
+ const region2 = createRegion('urn:foo', 'my-region', 3, 10);
99
+ const region3 = createRegion('urn:foo', 'my-region', 5, 10);
100
+
101
+ timeline.addRegion(region1);
102
+ timeline.addRegion(region2);
103
+ timeline.addRegion(region3);
104
+ expect(onNewRegion).toHaveBeenCalledTimes(3);
105
+ expect(onNewRegion).toHaveBeenCalledWith(region1);
106
+ expect(onNewRegion).toHaveBeenCalledWith(region2);
107
+ expect(onNewRegion).toHaveBeenCalledWith(region3);
108
+
109
+ let regions = Array.from(timeline.regions());
110
+ expect(regions.length).toBe(3);
111
+
112
+ // Give the timeline time to filter regions
113
+ await shaka.test.Util.delay(
114
+ shaka.media.RegionTimeline.REGION_FILTER_INTERVAL * 2);
115
+
116
+ regions = Array.from(timeline.regions());
117
+ expect(regions).toEqual([region2, region3]);
118
+
119
+ expect(onRemoveRegion).toHaveBeenCalledWith(region1);
120
+ });
106
121
 
107
122
  /**
108
123
  * @param {string} schemeIdUri
@@ -4,12 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('goog.asserts');
8
- goog.require('shaka.media.MetaSegmentIndex');
9
- goog.require('shaka.media.SegmentIndex');
10
- goog.require('shaka.media.SegmentReference');
11
- goog.require('shaka.test.Util');
12
-
13
7
  describe('SegmentIndex', /** @suppress {accessControls} */ () => {
14
8
  const actual1 = makeReference(uri(0), 0, 10);
15
9
  const actual2 = makeReference(uri(20), 10, 20);
@@ -4,9 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.InitSegmentReference');
8
- goog.require('shaka.media.SegmentReference');
9
-
10
7
  describe('SegmentReference', () => {
11
8
  it('returns in getters values from constructor parameters', () => {
12
9
  const initSegmentReference = new shaka.media.InitSegmentReference(
@@ -4,11 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
-
8
- goog.require('shaka.media.StallDetector');
9
- goog.require('shaka.media.StallDetector.Implementation');
10
- goog.require('shaka.test.Util');
11
-
12
7
  describe('StallDetector', () => {
13
8
  /**
14
9
  * @implements {shaka.media.StallDetector.Implementation}
@@ -4,31 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.InitSegmentReference');
8
- goog.require('shaka.media.MediaSourceEngine');
9
- goog.require('shaka.media.MediaSourcePlayhead');
10
- goog.require('shaka.media.SegmentIndex');
11
- goog.require('shaka.media.SegmentReference');
12
- goog.require('shaka.media.StreamingEngine');
13
- goog.require('shaka.net.NetworkingEngine');
14
- goog.require('shaka.test.FakeClosedCaptionParser');
15
- goog.require('shaka.test.FakeTextDisplayer');
16
- goog.require('shaka.test.Mp4LiveStreamGenerator');
17
- goog.require('shaka.test.Mp4VodStreamGenerator');
18
- goog.require('shaka.test.StreamingEngineUtil');
19
- goog.require('shaka.test.TestScheme');
20
- goog.require('shaka.test.UiUtils');
21
- goog.require('shaka.test.Util');
22
- goog.require('shaka.test.Waiter');
23
- goog.require('shaka.util.EventManager');
24
- goog.require('shaka.util.ManifestParserUtils');
25
- goog.require('shaka.util.Platform');
26
- goog.require('shaka.util.PlayerConfiguration');
27
- goog.requireType('shaka.media.Playhead');
28
- goog.requireType('shaka.media.PresentationTimeline');
29
- goog.requireType('shaka.test.FakeNetworkingEngine');
30
- goog.requireType('shaka.test.FakePresentationTimeline');
31
-
32
7
  describe('StreamingEngine', () => {
33
8
  const ContentType = shaka.util.ManifestParserUtils.ContentType;
34
9
  const Util = shaka.test.Util;
@@ -93,6 +68,7 @@ describe('StreamingEngine', () => {
93
68
  video,
94
69
  new shaka.test.FakeClosedCaptionParser(),
95
70
  new shaka.test.FakeTextDisplayer());
71
+ waiter.setMediaSourceEngine(mediaSourceEngine);
96
72
  });
97
73
 
98
74
  afterEach(async () => {
@@ -287,7 +263,11 @@ describe('StreamingEngine', () => {
287
263
  streamingEngine.switchVariant(variant);
288
264
  await streamingEngine.start();
289
265
  video.play();
290
- await waiter.timeoutAfter(90).waitForEnd(video);
266
+ // The overall test timeout is 120 seconds, and the content is 60
267
+ // seconds. It should be possible to complete this test in 100 seconds,
268
+ // and if not, we want the error thrown to be within the overall test's
269
+ // timeout window.
270
+ await waiter.timeoutAfter(100).waitForEnd(video);
291
271
  });
292
272
 
293
273
  it('plays at high playback rates', async () => {
@@ -308,14 +288,7 @@ describe('StreamingEngine', () => {
308
288
  await waiter.timeoutAfter(10).waitForMovement(video);
309
289
  video.playbackRate = 10;
310
290
 
311
- // Something weird happens on some platforms (variously Chromecast, legacy
312
- // Edge, and Safari) where the playhead can go past duration.
313
- // To cope with this, don't fail on timeout. If the video never got
314
- // flagged as "ended", check for the playhead to be near or past the end.
315
- await waiter.timeoutAfter(30).failOnTimeout(false).waitForEnd(video);
316
- if (!video.ended) {
317
- expect(video.currentTime).toBeGreaterThan(video.duration - 0.1);
318
- }
291
+ await waiter.timeoutAfter(30).waitForEnd(video);
319
292
  });
320
293
 
321
294
  it('can handle buffered seeks', async () => {
@@ -325,9 +298,9 @@ describe('StreamingEngine', () => {
325
298
  video.play();
326
299
 
327
300
  // After 35 seconds seek back 10 seconds into the first Period.
328
- await waiter.timeoutAfter(60).waitUntilPlayheadReaches(video, 35);
301
+ await waiter.timeoutAfter(80).waitUntilPlayheadReaches(video, 35);
329
302
  video.currentTime = 25;
330
- await waiter.timeoutAfter(60).waitForEnd(video);
303
+ await waiter.timeoutAfter(80).waitForEnd(video);
331
304
  });
332
305
 
333
306
  it('can handle unbuffered seeks', async () => {
@@ -420,8 +393,9 @@ describe('StreamingEngine', () => {
420
393
  // 3. Playhead seeks to force us back inside the window
421
394
  // 4. (maybe) seek if there is a gap at the period boundary
422
395
  // 5. (maybe) seek to flush a pipeline stall
396
+ // 6. (maybe) on slower platforms (e.g. GitHub actions)
423
397
  expect(seekCount).toBeGreaterThan(2);
424
- expect(seekCount).toBeLessThan(6);
398
+ expect(seekCount).toBeLessThan(7);
425
399
  });
426
400
  });
427
401