shaka-player 3.1.5 → 3.1.8

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 (331) hide show
  1. package/.csslintrc +11 -1
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
  3. package/.github/workflows/build-and-test.yaml +130 -0
  4. package/.github/workflows/custom-actions/prep-for-appspot/action.yaml +56 -0
  5. package/.github/workflows/custom-actions/set-commit-status/action.yaml +41 -0
  6. package/.github/workflows/demo-version-index.yaml +29 -0
  7. package/.github/workflows/nightly-demo.yaml +42 -0
  8. package/.github/workflows/release-please.yaml +147 -0
  9. package/.github/workflows/safari-homedir-launcher.sh +18 -0
  10. package/.github/workflows/selenium-lab-tests.yaml +93 -0
  11. package/AUTHORS +2 -0
  12. package/CHANGELOG.md +1532 -1496
  13. package/CONTRIBUTING.md +2 -2
  14. package/CONTRIBUTORS +2 -0
  15. package/README.md +7 -7
  16. package/app-engine/README.md +9 -0
  17. package/app-engine/demo-version-index/README.md +14 -0
  18. package/app-engine/demo-version-index/app.yaml +2 -0
  19. package/app-engine/demo-version-index/main.py +162 -0
  20. package/app-engine/demo-version-index/requirements.txt +6 -0
  21. package/app-engine/demo-version-index/templates/index.html +114 -0
  22. package/app-engine/shaka-player-demo/README.md +18 -0
  23. package/app-engine/shaka-player-demo/app.yaml +61 -0
  24. package/app-engine/shaka-player-demo/main.py +95 -0
  25. package/app-engine/shaka-player-demo/posters/10yo.png +0 -0
  26. package/app-engine/shaka-player-demo/posters/10yo.xcf +0 -0
  27. package/app-engine/shaka-player-demo/posters/1yo.jpg +0 -0
  28. package/app-engine/shaka-player-demo/posters/2yo.png +0 -0
  29. package/app-engine/shaka-player-demo/posters/2yo.xcf +0 -0
  30. package/app-engine/shaka-player-demo/posters/3yo.png +0 -0
  31. package/app-engine/shaka-player-demo/posters/3yo.xcf +0 -0
  32. package/app-engine/shaka-player-demo/posters/4yo.png +0 -0
  33. package/app-engine/shaka-player-demo/posters/4yo.xcf +0 -0
  34. package/app-engine/shaka-player-demo/posters/5yo.png +0 -0
  35. package/app-engine/shaka-player-demo/posters/5yo.xcf +0 -0
  36. package/app-engine/shaka-player-demo/posters/6yo.png +0 -0
  37. package/app-engine/shaka-player-demo/posters/6yo.xcf +0 -0
  38. package/app-engine/shaka-player-demo/posters/7yo.png +0 -0
  39. package/app-engine/shaka-player-demo/posters/7yo.xcf +0 -0
  40. package/app-engine/shaka-player-demo/posters/8yo.png +0 -0
  41. package/app-engine/shaka-player-demo/posters/8yo.xcf +0 -0
  42. package/app-engine/shaka-player-demo/posters/9yo.png +0 -0
  43. package/app-engine/shaka-player-demo/posters/9yo.xcf +0 -0
  44. package/app-engine/shaka-player-demo/posters/audioOnly.gif +0 -0
  45. package/app-engine/shaka-player-demo/posters/audioRickRoll.gif +0 -0
  46. package/app-engine/shaka-player-demo/posters/colorbars.gif +0 -0
  47. package/app-engine/shaka-player-demo/posters/fireworks.jpg +0 -0
  48. package/app-engine/shaka-player-demo/posters/party-hat.png +0 -0
  49. package/app-engine/shaka-player-demo/posters/sources.txt +46 -0
  50. package/app-engine/shaka-player-demo/posters/standard.png +0 -0
  51. package/app-engine/shaka-player-demo/posters/trek.jpg +0 -0
  52. package/app-engine/shaka-player-demo/posters/valentines.png +0 -0
  53. package/app-engine/shaka-player-demo/posters/zombie.jpg +0 -0
  54. package/app-engine/shaka-player-demo/posters.py +110 -0
  55. package/app-engine/shaka-player-demo/requirements.txt +5 -0
  56. package/app-engine/shaka-player-demo/time.txt +1 -0
  57. package/build/README.md +1 -1
  58. package/build/checkversion.py +1 -1
  59. package/build/conformance.textproto +13 -0
  60. package/build/docker/Dockerfile +20 -0
  61. package/build/docker/docker-compose.yml +10 -0
  62. package/build/gendeps.py +18 -15
  63. package/build/generateTsDefs.py +2 -0
  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/wrapper.template.js +2 -2
  68. package/demo/TengwarTelcontar.woff2 +0 -0
  69. package/demo/asset_card.js +1 -2
  70. package/demo/cast_receiver/index.html +1 -1
  71. package/demo/cast_receiver/receiver_app.css +14 -14
  72. package/demo/common/assets.js +2 -0
  73. package/demo/config.js +0 -1
  74. package/demo/custom.js +0 -1
  75. package/demo/customWarning.txt +2 -2
  76. package/demo/demo.less +29 -18
  77. package/demo/demo_uncompiled.js +1 -13
  78. package/demo/index.html +1 -1
  79. package/demo/main.js +3 -3
  80. package/dist/controls.css +2 -2
  81. package/dist/controls.css.map +1 -1
  82. package/dist/demo.compiled.debug.js +191 -194
  83. package/dist/demo.compiled.debug.map +4 -4
  84. package/dist/demo.compiled.js +191 -194
  85. package/dist/demo.compiled.map +4 -4
  86. package/dist/demo.css +1 -1
  87. package/dist/demo.css.map +1 -1
  88. package/dist/deps.js +224 -218
  89. package/dist/locales.js +29 -29
  90. package/dist/receiver.compiled.debug.js +43 -45
  91. package/dist/receiver.compiled.debug.map +4 -4
  92. package/dist/receiver.compiled.js +43 -45
  93. package/dist/receiver.compiled.map +4 -4
  94. package/dist/shaka-player.compiled.d.ts +225 -222
  95. package/dist/shaka-player.compiled.debug.d.ts +225 -222
  96. package/dist/shaka-player.compiled.debug.externs.js +9 -3
  97. package/dist/shaka-player.compiled.debug.js +235 -241
  98. package/dist/shaka-player.compiled.debug.map +4 -4
  99. package/dist/shaka-player.compiled.externs.js +9 -3
  100. package/dist/shaka-player.compiled.js +811 -815
  101. package/dist/shaka-player.compiled.map +4 -4
  102. package/dist/shaka-player.ui.d.ts +269 -275
  103. package/dist/shaka-player.ui.debug.d.ts +269 -275
  104. package/dist/shaka-player.ui.debug.externs.js +23 -26
  105. package/dist/shaka-player.ui.debug.js +255 -262
  106. package/dist/shaka-player.ui.debug.map +4 -4
  107. package/dist/shaka-player.ui.externs.js +23 -26
  108. package/dist/shaka-player.ui.js +945 -950
  109. package/dist/shaka-player.ui.map +4 -4
  110. package/docs/design/REDESIGN.md +33 -33
  111. package/docs/design/codec_preferences.md +1 -1
  112. package/docs/design/dash-audio-channels.md +3 -3
  113. package/docs/design/dash-manifests.md +1 -1
  114. package/docs/design/gap-jumping.md +3 -3
  115. package/docs/design/preload.md +2 -2
  116. package/docs/tutorials/faq.md +8 -8
  117. package/docs/tutorials/index.json +1 -0
  118. package/docs/tutorials/plugins.md +3 -3
  119. package/docs/tutorials/selenium-grid-config.md +122 -0
  120. package/docs/tutorials/welcome.md +10 -2
  121. package/karma.conf.js +156 -45
  122. package/lib/abr/simple_abr_manager.js +12 -6
  123. package/lib/ads/ad_manager.js +1 -0
  124. package/lib/cast/cast_proxy.js +6 -4
  125. package/lib/cast/cast_receiver.js +3 -0
  126. package/lib/cea/cea608_data_channel.js +3 -3
  127. package/lib/cea/cea608_memory.js +1 -1
  128. package/lib/cea/cea708_service.js +6 -5
  129. package/lib/cea/cea_decoder.js +1 -1
  130. package/lib/cea/i_caption_decoder.js +2 -3
  131. package/lib/cea/mp4_cea_parser.js +11 -5
  132. package/lib/cea/sei_processor.js +6 -3
  133. package/lib/dash/dash_parser.js +40 -30
  134. package/lib/dash/mpd_utils.js +4 -5
  135. package/lib/dash/segment_list.js +1 -2
  136. package/lib/dash/segment_template.js +3 -3
  137. package/lib/hls/hls_parser.js +11 -9
  138. package/lib/hls/manifest_text_parser.js +4 -3
  139. package/lib/media/adaptation_set.js +1 -2
  140. package/lib/media/closed_caption_parser.js +0 -1
  141. package/lib/media/content_workarounds.js +2 -2
  142. package/lib/media/drm_engine.js +3 -2
  143. package/lib/media/media_source_engine.js +3 -2
  144. package/lib/media/mp4_segment_index_parser.js +1 -4
  145. package/lib/media/playhead.js +2 -2
  146. package/lib/media/presentation_timeline.js +18 -8
  147. package/lib/media/region_observer.js +39 -33
  148. package/lib/media/region_timeline.js +17 -19
  149. package/lib/media/streaming_engine.js +7 -7
  150. package/lib/media/time_ranges_utils.js +1 -3
  151. package/lib/media/video_wrapper.js +1 -1
  152. package/lib/net/networking_engine.js +5 -1
  153. package/lib/offline/storage.js +14 -15
  154. package/lib/player.js +52 -22
  155. package/lib/polyfill/all.js +2 -3
  156. package/lib/polyfill/encryption_scheme.js +1 -1
  157. package/lib/polyfill/media_capabilities.js +3 -3
  158. package/lib/polyfill/mediasource.js +1 -1
  159. package/lib/routing/walker.js +2 -3
  160. package/lib/text/cue.js +1 -1
  161. package/lib/text/simple_text_displayer.js +2 -1
  162. package/lib/text/text_engine.js +1 -1
  163. package/lib/text/ttml_text_parser.js +8 -5
  164. package/lib/text/ui_text_displayer.js +1 -1
  165. package/lib/util/buffer_utils.js +1 -3
  166. package/lib/util/ebml_parser.js +3 -3
  167. package/lib/util/error.js +1 -1
  168. package/lib/util/fake_event_target.js +21 -1
  169. package/lib/util/iterables.js +0 -46
  170. package/lib/util/mp4_box_parsers.js +1 -4
  171. package/lib/util/mp4_parser.js +5 -7
  172. package/lib/util/periods.js +8 -9
  173. package/lib/util/platform.js +3 -3
  174. package/lib/util/pssh.js +1 -4
  175. package/lib/util/stream_utils.js +4 -3
  176. package/lib/util/string_utils.js +3 -5
  177. package/lib/util/uint8array_utils.js +3 -5
  178. package/lib/util/xml_utils.js +15 -7
  179. package/package.json +62 -40
  180. package/roadmap.md +17 -17
  181. package/test/abr/simple_abr_manager_unit.js +3 -8
  182. package/test/ads/ad_manager_unit.js +0 -6
  183. package/test/cast/cast_proxy_unit.js +0 -8
  184. package/test/cast/cast_receiver_integration.js +1 -18
  185. package/test/cast/cast_receiver_unit.js +1 -9
  186. package/test/cast/cast_sender_unit.js +0 -6
  187. package/test/cast/cast_utils_unit.js +0 -13
  188. package/test/cea/cea608_memory_unit.js +0 -5
  189. package/test/cea/cea708_service_unit.js +0 -7
  190. package/test/cea/cea708_window_unit.js +0 -5
  191. package/test/cea/cea_decoder_unit.js +0 -6
  192. package/test/cea/dtvcc_packet_builder_unit.js +0 -3
  193. package/test/cea/dtvcc_packet_unit.js +0 -5
  194. package/test/cea/mp4_cea_parser_unit.js +0 -4
  195. package/test/dash/dash_parser_content_protection_unit.js +1 -10
  196. package/test/dash/dash_parser_live_unit.js +45 -15
  197. package/test/dash/dash_parser_manifest_unit.js +4 -17
  198. package/test/dash/dash_parser_segment_base_unit.js +1 -8
  199. package/test/dash/dash_parser_segment_list_unit.js +1 -7
  200. package/test/dash/dash_parser_segment_template_unit.js +0 -9
  201. package/test/dash/mpd_utils_unit.js +3 -11
  202. package/test/demo/demo_unit.js +0 -5
  203. package/test/deprecate/enforcer_unit.js +0 -4
  204. package/test/deprecate/version_unit.js +0 -2
  205. package/test/hls/hls_live_unit.js +2 -14
  206. package/test/hls/hls_parser_unit.js +76 -15
  207. package/test/hls/manifest_text_parser_unit.js +0 -10
  208. package/test/media/adaptation_set_criteria_unit.js +3 -7
  209. package/test/media/adaptation_set_unit.js +0 -2
  210. package/test/media/buffering_observer_unit.js +1 -4
  211. package/test/media/closed_caption_parser_unit.js +0 -3
  212. package/test/media/drm_engine_integration.js +3 -17
  213. package/test/media/drm_engine_unit.js +4 -23
  214. package/test/media/manifest_parser_unit.js +0 -4
  215. package/test/media/media_source_engine_integration.js +0 -7
  216. package/test/media/media_source_engine_unit.js +1 -14
  217. package/test/media/mp4_segment_index_parser_unit.js +0 -4
  218. package/test/media/play_rate_controller_unit.js +0 -4
  219. package/test/media/playhead_unit.js +8 -16
  220. package/test/media/presentation_timeline_unit.js +4 -7
  221. package/test/media/region_observer_unit.js +40 -10
  222. package/test/media/region_timeline_unit.js +40 -25
  223. package/test/media/segment_index_unit.js +0 -6
  224. package/test/media/segment_reference_unit.js +0 -3
  225. package/test/media/stall_detector_unit.js +0 -5
  226. package/test/media/streaming_engine_integration.js +9 -36
  227. package/test/media/streaming_engine_unit.js +11 -35
  228. package/test/media/time_ranges_utils_unit.js +0 -2
  229. package/test/media/transmuxer_integration.js +0 -6
  230. package/test/media/webm_segment_index_parser_unit.js +0 -4
  231. package/test/net/data_uri_plugin_unit.js +0 -7
  232. package/test/net/http_plugin_unit.js +0 -9
  233. package/test/net/networking_engine_unit.js +0 -11
  234. package/test/offline/download_progress_estimator_unit.js +0 -2
  235. package/test/offline/indexeddb_storage_unit.js +0 -6
  236. package/test/offline/manifest_convert_unit.js +0 -8
  237. package/test/offline/offline_integration.js +1 -10
  238. package/test/offline/offline_manifest_parser_unit.js +0 -6
  239. package/test/offline/offline_scheme_unit.js +0 -8
  240. package/test/offline/offline_uri_unit.js +0 -2
  241. package/test/offline/storage_compatibility_unit.js +1 -14
  242. package/test/offline/storage_integration.js +1 -25
  243. package/test/player_external.js +2 -10
  244. package/test/player_integration.js +21 -28
  245. package/test/player_load_graph_integration.js +1 -6
  246. package/test/player_src_equals_external.js +3 -9
  247. package/test/player_src_equals_integration.js +0 -7
  248. package/test/player_unit.js +52 -37
  249. package/test/routing/walker_unit.js +0 -8
  250. package/test/test/assets/large_file.mpd +1 -1
  251. package/test/test/boot.js +75 -22
  252. package/test/test/externs/jasmine.js +2 -2
  253. package/test/test/externs/karma.js +4 -0
  254. package/test/test/namespace.js +10 -0
  255. package/test/test/util/canned_idb.js +0 -8
  256. package/test/test/util/cea_utils.js +0 -6
  257. package/test/test/util/dash_parser_util.js +0 -13
  258. package/test/test/util/fake_ad.js +0 -3
  259. package/test/test/util/fake_ad_manager.js +0 -9
  260. package/test/test/util/fake_demo_main.js +0 -5
  261. package/test/test/util/fake_drm_engine.js +0 -6
  262. package/test/test/util/fake_media_source_engine.js +0 -7
  263. package/test/test/util/fake_networking_engine.js +0 -5
  264. package/test/test/util/fake_text_displayer.js +0 -5
  265. package/test/test/util/indexeddb_utils.js +1 -10
  266. package/test/test/util/jasmine_fetch.js +0 -1
  267. package/test/test/util/loader.js +0 -18
  268. package/test/test/util/manifest_generator.js +9 -14
  269. package/test/test/util/manifest_parser_util.js +0 -6
  270. package/test/test/util/offline_utils.js +0 -5
  271. package/test/test/util/simple_fakes.js +9 -26
  272. package/test/test/util/stream_generator.js +0 -14
  273. package/test/test/util/streaming_engine_util.js +0 -15
  274. package/test/test/util/test_scheme.js +1 -19
  275. package/test/test/util/ttml_utils.js +0 -2
  276. package/test/test/util/ui_utils.js +0 -9
  277. package/test/test/util/util.js +15 -26
  278. package/test/test/util/waiter.js +84 -43
  279. package/test/text/cue_integration.js +0 -4
  280. package/test/text/lrc_text_parser_unit.js +0 -4
  281. package/test/text/mp4_ttml_parser_unit.js +0 -6
  282. package/test/text/mp4_vtt_parser_unit.js +1 -7
  283. package/test/text/sbv_text_parser_unit.js +0 -4
  284. package/test/text/simple_text_displayer_unit.js +1 -8
  285. package/test/text/srt_text_parser_unit.js +0 -4
  286. package/test/text/ssa_text_parser_unit.js +0 -5
  287. package/test/text/text_engine_unit.js +2 -7
  288. package/test/text/text_track_integration.js +0 -2
  289. package/test/text/ttml_text_parser_unit.js +2 -11
  290. package/test/text/ui_text_displayer_unit.js +44 -41
  291. package/test/text/vtt_text_parser_unit.js +0 -9
  292. package/test/text/web_vtt_generator_unit.js +0 -3
  293. package/test/ui/ad_ui_unit.js +0 -11
  294. package/test/ui/localization_unit.js +0 -3
  295. package/test/ui/text_displayer_layout_unit.js +9 -19
  296. package/test/ui/ui_customization_unit.js +0 -6
  297. package/test/ui/ui_integration.js +0 -16
  298. package/test/ui/ui_unit.js +1 -17
  299. package/test/util/abortable_operation_unit.js +4 -9
  300. package/test/util/array_utils_unit.js +0 -2
  301. package/test/util/buffer_utils_unit.js +0 -2
  302. package/test/util/data_view_reader_unit.js +0 -4
  303. package/test/util/ebml_parser_unit.js +0 -4
  304. package/test/util/event_manager_unit.js +0 -3
  305. package/test/util/fake_event_target_unit.js +0 -5
  306. package/test/util/functional_unit.js +1 -1
  307. package/test/util/iterables_unit.js +0 -64
  308. package/test/util/language_utils_unit.js +0 -3
  309. package/test/util/manifest_parser_utils_unit.js +0 -2
  310. package/test/util/mp4_box_parsers_unit.js +0 -5
  311. package/test/util/mp4_parser_unit.js +0 -4
  312. package/test/util/multi_map_unit.js +0 -3
  313. package/test/util/object_utils_unit.js +0 -2
  314. package/test/util/periods_unit.js +14 -7
  315. package/test/util/pssh_unit.js +0 -5
  316. package/test/util/state_history_unit.js +0 -2
  317. package/test/util/stream_utils_unit.js +3 -8
  318. package/test/util/string_utils_unit.js +0 -6
  319. package/test/util/text_parser_unit.js +0 -2
  320. package/test/util/xml_utils_unit.js +0 -4
  321. package/ui/controls.js +3 -0
  322. package/ui/less/ad_controls.less +6 -6
  323. package/ui/less/buttons.less +6 -6
  324. package/ui/less/containers.less +9 -11
  325. package/ui/less/overflow_menu.less +4 -4
  326. package/ui/less/range_elements.less +7 -2
  327. package/ui/locales/sjn-translations.yaml +257 -0
  328. package/ui/locales/sjn.json +42 -0
  329. package/ui/localization.js +12 -36
  330. package/ui/seek_bar.js +2 -1
  331. package/externs/svgelement.js +0 -18
@@ -4,10 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.PreferenceBasedCriteria');
8
- goog.require('shaka.test.ManifestGenerator');
9
- goog.requireType('shaka.media.AdaptationSet');
10
-
11
7
  describe('AdaptationSetCriteria', () => {
12
8
  describe('preference based selection', () => {
13
9
  it('chooses variants in user\'s preferred language', () => {
@@ -84,7 +80,7 @@ describe('AdaptationSetCriteria', () => {
84
80
  });
85
81
 
86
82
  it('chooses only one role, even if none is preferred', () => {
87
- // Regression test for https://github.com/google/shaka-player/issues/949
83
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/949
88
84
  const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
89
85
  manifest.addVariant(1, (variant) => {
90
86
  variant.language = 'en';
@@ -136,7 +132,7 @@ describe('AdaptationSetCriteria', () => {
136
132
  });
137
133
 
138
134
  it('chooses only one role, even if all are primary', () => {
139
- // Regression test for https://github.com/google/shaka-player/issues/949
135
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/949
140
136
  const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
141
137
  manifest.addVariant(1, (variant) => {
142
138
  variant.language = 'en';
@@ -194,7 +190,7 @@ describe('AdaptationSetCriteria', () => {
194
190
  });
195
191
 
196
192
  it('chooses only one language, even if all are primary', () => {
197
- // Regression test for https://github.com/google/shaka-player/issues/918
193
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/918
198
194
  const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
199
195
  manifest.addVariant(1, (variant) => {
200
196
  variant.language = 'en';
@@ -4,8 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.AdaptationSet');
8
-
9
7
  describe('AdaptationSet', () => {
10
8
  describe('roles', () => {
11
9
  const mimeType = 'mime-type';
@@ -4,9 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.BufferingObserver');
8
- goog.require('shaka.util.Iterables');
9
-
10
7
  describe('BufferingObserver', () => {
11
8
  const BufferingObserver = shaka.media.BufferingObserver;
12
9
  const State = shaka.media.BufferingObserver.State;
@@ -115,7 +112,7 @@ describe('BufferingObserver', () => {
115
112
  /** @type {boolean} */
116
113
  let changed;
117
114
 
118
- for (const lead of shaka.util.Iterables.range(5)) {
115
+ for (let lead = 0; lead < 5; lead++) {
119
116
  changed = controller.update(lead, /* toEnd= */ false);
120
117
  expect(changed).toBeFalsy();
121
118
  }
@@ -4,9 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.ClosedCaptionParser');
8
- goog.require('shaka.test.Util');
9
-
10
7
  describe('ClosedCaptionParser', () => {
11
8
  it('can handle empty caption packets', async () => {
12
9
  const initSegment = await shaka.test.Util.fetch(
@@ -4,21 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.DrmEngine');
8
- goog.require('shaka.media.MediaSourceEngine');
9
- goog.require('shaka.net.NetworkingEngine');
10
- goog.require('shaka.test.FakeClosedCaptionParser');
11
- goog.require('shaka.test.FakeTextDisplayer');
12
- goog.require('shaka.test.ManifestGenerator');
13
- goog.require('shaka.test.UiUtils');
14
- goog.require('shaka.test.Util');
15
- goog.require('shaka.test.Waiter');
16
- goog.require('shaka.util.EventManager');
17
- goog.require('shaka.util.ManifestParserUtils');
18
- goog.require('shaka.util.Platform');
19
- goog.require('shaka.util.PlayerConfiguration');
20
- goog.require('shaka.util.PublicPromise');
21
-
22
7
  describe('DrmEngine', () => {
23
8
  const ContentType = shaka.util.ManifestParserUtils.ContentType;
24
9
 
@@ -277,11 +262,12 @@ describe('DrmEngine', () => {
277
262
  video.play();
278
263
 
279
264
  const waiter = new shaka.test.Waiter(eventManager).timeoutAfter(15);
265
+ waiter.setMediaSourceEngine(mediaSourceEngine);
280
266
  await waiter.waitForMovement(video);
281
267
 
282
268
  // Something should have played by now.
283
269
  expect(video.readyState).toBeGreaterThan(1);
284
270
  expect(video.currentTime).toBeGreaterThan(0);
285
- });
286
- } // describe('basic flow')
271
+ }); // describe('basic flow')
272
+ }
287
273
  });
@@ -4,25 +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
7
  for (const useMediaCapabilities of [true, false]) {
27
8
  const isEnabled = useMediaCapabilities ? 'enabled' : 'disabled';
28
9
  describe('DrmEngine with MediaCapabilities ' + isEnabled, () => {
@@ -1054,7 +1035,7 @@ function testDrmEngine(useMediaCapabilities) {
1054
1035
  .toHaveBeenCalledWith('cenc', initData1);
1055
1036
  });
1056
1037
 
1057
- // https://github.com/google/shaka-player/issues/2754
1038
+ // https://github.com/shaka-project/shaka-player/issues/2754
1058
1039
  it('ignores duplicate init data from newInitData', async () => {
1059
1040
  /** @type {!Uint8Array} */
1060
1041
  const initData = new Uint8Array(1);
@@ -1440,7 +1421,7 @@ function testDrmEngine(useMediaCapabilities) {
1440
1421
  expect(onKeyStatusSpy).toHaveBeenCalled();
1441
1422
  });
1442
1423
 
1443
- // See https://github.com/google/shaka-player/issues/1541
1424
+ // See https://github.com/shaka-project/shaka-player/issues/1541
1444
1425
  it('does not update public key statuses before callback', async () => {
1445
1426
  await initAndAttach();
1446
1427
 
@@ -1478,7 +1459,7 @@ function testDrmEngine(useMediaCapabilities) {
1478
1459
  expect(keyIds.length).toBe(2);
1479
1460
  });
1480
1461
 
1481
- // See https://github.com/google/shaka-player/issues/1541
1462
+ // See https://github.com/shaka-project/shaka-player/issues/1541
1482
1463
  it('does not invoke callback until all sessions are loaded', async () => {
1483
1464
  // Set up init data overrides in the manifest so that we get multiple
1484
1465
  // sessions.
@@ -2113,7 +2094,7 @@ function testDrmEngine(useMediaCapabilities) {
2113
2094
  // this doesn't work if the session is not callable (no license request
2114
2095
  // sent). So |session.closed| should never resolve and |session.close()|
2115
2096
  // should be rejected and destroy() should still succeed.
2116
- // https://github.com/google/shaka-player/issues/664
2097
+ // https://github.com/shaka-project/shaka-player/issues/664
2117
2098
  await initAndAttach();
2118
2099
  session1.closed = new shaka.util.PublicPromise();
2119
2100
  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,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;
@@ -94,6 +69,7 @@ describe('StreamingEngine', () => {
94
69
  video,
95
70
  new shaka.test.FakeClosedCaptionParser(),
96
71
  new shaka.test.FakeTextDisplayer());
72
+ waiter.setMediaSourceEngine(mediaSourceEngine);
97
73
  });
98
74
 
99
75
  afterEach(async () => {
@@ -286,7 +262,11 @@ describe('StreamingEngine', () => {
286
262
  streamingEngine.switchVariant(variant);
287
263
  await streamingEngine.start();
288
264
  video.play();
289
- await waiter.timeoutAfter(90).waitForEnd(video);
265
+ // The overall test timeout is 120 seconds, and the content is 60
266
+ // seconds. It should be possible to complete this test in 100 seconds,
267
+ // and if not, we want the error thrown to be within the overall test's
268
+ // timeout window.
269
+ await waiter.timeoutAfter(100).waitForEnd(video);
290
270
  });
291
271
 
292
272
  it('plays at high playback rates', async () => {
@@ -307,14 +287,7 @@ describe('StreamingEngine', () => {
307
287
  await waiter.timeoutAfter(10).waitForMovement(video);
308
288
  video.playbackRate = 10;
309
289
 
310
- // Something weird happens on some platforms (variously Chromecast, legacy
311
- // Edge, and Safari) where the playhead can go past duration.
312
- // To cope with this, don't fail on timeout. If the video never got
313
- // flagged as "ended", check for the playhead to be near or past the end.
314
- await waiter.timeoutAfter(30).failOnTimeout(false).waitForEnd(video);
315
- if (!video.ended) {
316
- expect(video.currentTime).toBeGreaterThan(video.duration - 0.1);
317
- }
290
+ await waiter.timeoutAfter(30).waitForEnd(video);
318
291
  });
319
292
 
320
293
  it('can handle buffered seeks', async () => {
@@ -324,9 +297,9 @@ describe('StreamingEngine', () => {
324
297
  video.play();
325
298
 
326
299
  // After 35 seconds seek back 10 seconds into the first Period.
327
- await waiter.timeoutAfter(60).waitUntilPlayheadReaches(video, 35);
300
+ await waiter.timeoutAfter(80).waitUntilPlayheadReaches(video, 35);
328
301
  video.currentTime = 25;
329
- await waiter.timeoutAfter(60).waitForEnd(video);
302
+ await waiter.timeoutAfter(80).waitForEnd(video);
330
303
  });
331
304
 
332
305
  it('can handle unbuffered seeks', async () => {