shaka-player 3.2.2 → 3.2.5

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 +145 -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 +1598 -1525
  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/shaka-lab.yaml +163 -0
  64. package/build/shakaBuildHelpers.py +4 -29
  65. package/build/test.py +93 -28
  66. package/build/wrapper.template.js +2 -2
  67. package/demo/TengwarTelcontar.woff2 +0 -0
  68. package/demo/asset_card.js +1 -2
  69. package/demo/cast_receiver/index.html +1 -1
  70. package/demo/cast_receiver/receiver_app.css +14 -14
  71. package/demo/common/assets.js +2 -0
  72. package/demo/config.js +0 -1
  73. package/demo/custom.js +0 -1
  74. package/demo/customWarning.txt +2 -2
  75. package/demo/demo.less +29 -18
  76. package/demo/demo_uncompiled.js +1 -13
  77. package/demo/index.html +1 -1
  78. package/demo/main.js +3 -3
  79. package/dist/controls.css +2 -2
  80. package/dist/controls.css.map +1 -1
  81. package/dist/demo.compiled.debug.js +191 -194
  82. package/dist/demo.compiled.debug.map +4 -4
  83. package/dist/demo.compiled.js +191 -194
  84. package/dist/demo.compiled.map +4 -4
  85. package/dist/demo.css +1 -1
  86. package/dist/demo.css.map +1 -1
  87. package/dist/deps.js +225 -219
  88. package/dist/locales.js +31 -31
  89. package/dist/receiver.compiled.debug.js +43 -45
  90. package/dist/receiver.compiled.debug.map +4 -4
  91. package/dist/receiver.compiled.js +43 -45
  92. package/dist/receiver.compiled.map +4 -4
  93. package/dist/shaka-player.compiled.d.ts +247 -227
  94. package/dist/shaka-player.compiled.debug.d.ts +247 -227
  95. package/dist/shaka-player.compiled.debug.externs.js +43 -16
  96. package/dist/shaka-player.compiled.debug.js +384 -388
  97. package/dist/shaka-player.compiled.debug.map +4 -4
  98. package/dist/shaka-player.compiled.externs.js +43 -16
  99. package/dist/shaka-player.compiled.js +818 -817
  100. package/dist/shaka-player.compiled.map +4 -4
  101. package/dist/shaka-player.ui.d.ts +291 -280
  102. package/dist/shaka-player.ui.debug.d.ts +291 -280
  103. package/dist/shaka-player.ui.debug.externs.js +45 -27
  104. package/dist/shaka-player.ui.debug.js +389 -394
  105. package/dist/shaka-player.ui.debug.map +4 -4
  106. package/dist/shaka-player.ui.externs.js +45 -27
  107. package/dist/shaka-player.ui.js +964 -965
  108. package/dist/shaka-player.ui.map +4 -4
  109. package/docs/design/REDESIGN.md +33 -33
  110. package/docs/design/codec_preferences.md +1 -1
  111. package/docs/design/dash-audio-channels.md +3 -3
  112. package/docs/design/dash-manifests.md +1 -1
  113. package/docs/design/gap-jumping.md +3 -3
  114. package/docs/design/preload.md +2 -2
  115. package/docs/tutorials/faq.md +8 -8
  116. package/docs/tutorials/index.json +1 -0
  117. package/docs/tutorials/plugins.md +3 -3
  118. package/docs/tutorials/selenium-grid-config.md +122 -0
  119. package/docs/tutorials/welcome.md +10 -2
  120. package/externs/shaka/player.js +8 -0
  121. package/externs/shaka/text.js +10 -0
  122. package/karma.conf.js +156 -45
  123. package/lib/abr/simple_abr_manager.js +12 -6
  124. package/lib/ads/ad_manager.js +1 -0
  125. package/lib/cast/cast_proxy.js +6 -4
  126. package/lib/cast/cast_receiver.js +3 -0
  127. package/lib/cea/cea608_data_channel.js +2 -2
  128. package/lib/cea/cea708_service.js +5 -4
  129. package/lib/cea/mp4_cea_parser.js +11 -5
  130. package/lib/cea/sei_processor.js +6 -3
  131. package/lib/dash/dash_parser.js +43 -31
  132. package/lib/dash/mpd_utils.js +4 -5
  133. package/lib/dash/segment_list.js +1 -2
  134. package/lib/dash/segment_template.js +3 -3
  135. package/lib/hls/hls_parser.js +41 -9
  136. package/lib/hls/manifest_text_parser.js +4 -3
  137. package/lib/media/adaptation_set.js +1 -2
  138. package/lib/media/content_workarounds.js +2 -2
  139. package/lib/media/drm_engine.js +3 -2
  140. package/lib/media/media_source_engine.js +3 -2
  141. package/lib/media/mp4_segment_index_parser.js +1 -4
  142. package/lib/media/playhead.js +2 -2
  143. package/lib/media/presentation_timeline.js +18 -8
  144. package/lib/media/region_observer.js +39 -33
  145. package/lib/media/region_timeline.js +17 -19
  146. package/lib/media/segment_index.js +2 -1
  147. package/lib/media/segment_reference.js +19 -1
  148. package/lib/media/streaming_engine.js +12 -9
  149. package/lib/media/time_ranges_utils.js +1 -3
  150. package/lib/media/video_wrapper.js +1 -1
  151. package/lib/net/networking_engine.js +5 -1
  152. package/lib/offline/storage.js +12 -13
  153. package/lib/player.js +77 -36
  154. package/lib/polyfill/all.js +2 -3
  155. package/lib/polyfill/encryption_scheme.js +1 -1
  156. package/lib/polyfill/media_capabilities.js +32 -17
  157. package/lib/polyfill/mediasource.js +1 -1
  158. package/lib/text/cue.js +7 -1
  159. package/lib/text/simple_text_displayer.js +2 -1
  160. package/lib/text/ttml_text_parser.js +92 -63
  161. package/lib/text/ui_text_displayer.js +18 -12
  162. package/lib/util/buffer_utils.js +1 -3
  163. package/lib/util/ebml_parser.js +3 -3
  164. package/lib/util/error.js +1 -1
  165. package/lib/util/fake_event_target.js +21 -1
  166. package/lib/util/iterables.js +0 -46
  167. package/lib/util/mp4_box_parsers.js +1 -4
  168. package/lib/util/mp4_parser.js +5 -7
  169. package/lib/util/periods.js +8 -9
  170. package/lib/util/platform.js +3 -3
  171. package/lib/util/pssh.js +1 -4
  172. package/lib/util/stream_utils.js +88 -11
  173. package/lib/util/string_utils.js +3 -5
  174. package/lib/util/uint8array_utils.js +3 -5
  175. package/lib/util/xml_utils.js +34 -7
  176. package/package.json +62 -40
  177. package/roadmap.md +17 -17
  178. package/test/abr/simple_abr_manager_unit.js +3 -8
  179. package/test/ads/ad_manager_unit.js +0 -6
  180. package/test/cast/cast_proxy_unit.js +0 -8
  181. package/test/cast/cast_receiver_integration.js +1 -18
  182. package/test/cast/cast_receiver_unit.js +1 -9
  183. package/test/cast/cast_sender_unit.js +0 -6
  184. package/test/cast/cast_utils_unit.js +0 -13
  185. package/test/cea/cea608_memory_unit.js +0 -5
  186. package/test/cea/cea708_service_unit.js +0 -7
  187. package/test/cea/cea708_window_unit.js +0 -5
  188. package/test/cea/cea_decoder_unit.js +0 -6
  189. package/test/cea/dtvcc_packet_builder_unit.js +0 -3
  190. package/test/cea/dtvcc_packet_unit.js +0 -5
  191. package/test/cea/mp4_cea_parser_unit.js +0 -4
  192. package/test/dash/dash_parser_content_protection_unit.js +1 -10
  193. package/test/dash/dash_parser_live_unit.js +45 -15
  194. package/test/dash/dash_parser_manifest_unit.js +37 -18
  195. package/test/dash/dash_parser_segment_base_unit.js +1 -8
  196. package/test/dash/dash_parser_segment_list_unit.js +1 -7
  197. package/test/dash/dash_parser_segment_template_unit.js +0 -9
  198. package/test/dash/mpd_utils_unit.js +3 -11
  199. package/test/demo/demo_unit.js +0 -5
  200. package/test/deprecate/enforcer_unit.js +0 -4
  201. package/test/deprecate/version_unit.js +0 -2
  202. package/test/hls/hls_live_unit.js +2 -14
  203. package/test/hls/hls_parser_unit.js +76 -15
  204. package/test/hls/manifest_text_parser_unit.js +0 -10
  205. package/test/media/adaptation_set_criteria_unit.js +3 -7
  206. package/test/media/adaptation_set_unit.js +0 -2
  207. package/test/media/buffering_observer_unit.js +1 -4
  208. package/test/media/closed_caption_parser_unit.js +0 -3
  209. package/test/media/drm_engine_integration.js +2 -15
  210. package/test/media/drm_engine_unit.js +7 -27
  211. package/test/media/manifest_parser_unit.js +0 -4
  212. package/test/media/media_source_engine_integration.js +0 -7
  213. package/test/media/media_source_engine_unit.js +1 -14
  214. package/test/media/mp4_segment_index_parser_unit.js +0 -4
  215. package/test/media/play_rate_controller_unit.js +0 -4
  216. package/test/media/playhead_unit.js +8 -16
  217. package/test/media/presentation_timeline_unit.js +4 -7
  218. package/test/media/region_observer_unit.js +40 -10
  219. package/test/media/region_timeline_unit.js +40 -25
  220. package/test/media/segment_index_unit.js +0 -6
  221. package/test/media/segment_reference_unit.js +0 -3
  222. package/test/media/stall_detector_unit.js +0 -5
  223. package/test/media/streaming_engine_integration.js +11 -37
  224. package/test/media/streaming_engine_unit.js +155 -34
  225. package/test/media/time_ranges_utils_unit.js +0 -2
  226. package/test/media/transmuxer_integration.js +0 -6
  227. package/test/media/webm_segment_index_parser_unit.js +0 -4
  228. package/test/net/data_uri_plugin_unit.js +0 -7
  229. package/test/net/http_plugin_unit.js +0 -9
  230. package/test/net/networking_engine_unit.js +0 -11
  231. package/test/offline/download_progress_estimator_unit.js +0 -2
  232. package/test/offline/indexeddb_storage_unit.js +0 -6
  233. package/test/offline/manifest_convert_unit.js +0 -8
  234. package/test/offline/offline_integration.js +1 -10
  235. package/test/offline/offline_manifest_parser_unit.js +0 -6
  236. package/test/offline/offline_scheme_unit.js +0 -8
  237. package/test/offline/offline_uri_unit.js +0 -2
  238. package/test/offline/storage_compatibility_unit.js +1 -14
  239. package/test/offline/storage_integration.js +1 -25
  240. package/test/player_external.js +2 -10
  241. package/test/player_integration.js +62 -36
  242. package/test/player_load_graph_integration.js +1 -6
  243. package/test/player_src_equals_external.js +3 -9
  244. package/test/player_src_equals_integration.js +41 -15
  245. package/test/player_unit.js +71 -46
  246. package/test/routing/walker_unit.js +0 -8
  247. package/test/test/assets/chapters.vtt +2 -2
  248. package/test/test/assets/chapters2.vtt +10 -0
  249. package/test/test/assets/large_file.mpd +1 -1
  250. package/test/test/boot.js +75 -22
  251. package/test/test/externs/jasmine.js +2 -2
  252. package/test/test/externs/karma.js +4 -0
  253. package/test/test/namespace.js +10 -0
  254. package/test/test/util/canned_idb.js +0 -8
  255. package/test/test/util/cea_utils.js +0 -6
  256. package/test/test/util/dash_parser_util.js +0 -13
  257. package/test/test/util/fake_ad.js +0 -3
  258. package/test/test/util/fake_ad_manager.js +0 -9
  259. package/test/test/util/fake_demo_main.js +0 -5
  260. package/test/test/util/fake_drm_engine.js +0 -6
  261. package/test/test/util/fake_media_source_engine.js +0 -7
  262. package/test/test/util/fake_networking_engine.js +0 -5
  263. package/test/test/util/fake_text_displayer.js +0 -5
  264. package/test/test/util/indexeddb_utils.js +1 -10
  265. package/test/test/util/jasmine_fetch.js +0 -1
  266. package/test/test/util/loader.js +0 -18
  267. package/test/test/util/manifest_generator.js +9 -14
  268. package/test/test/util/manifest_parser_util.js +0 -6
  269. package/test/test/util/offline_utils.js +0 -5
  270. package/test/test/util/simple_fakes.js +9 -26
  271. package/test/test/util/stream_generator.js +0 -14
  272. package/test/test/util/streaming_engine_util.js +0 -15
  273. package/test/test/util/test_scheme.js +1 -19
  274. package/test/test/util/ttml_utils.js +79 -0
  275. package/test/test/util/ui_utils.js +0 -9
  276. package/test/test/util/util.js +15 -26
  277. package/test/test/util/waiter.js +84 -43
  278. package/test/text/cue_integration.js +0 -4
  279. package/test/text/lrc_text_parser_unit.js +0 -4
  280. package/test/text/mp4_ttml_parser_unit.js +10 -23
  281. package/test/text/mp4_vtt_parser_unit.js +1 -7
  282. package/test/text/sbv_text_parser_unit.js +0 -4
  283. package/test/text/simple_text_displayer_unit.js +1 -8
  284. package/test/text/srt_text_parser_unit.js +0 -4
  285. package/test/text/ssa_text_parser_unit.js +0 -5
  286. package/test/text/text_engine_unit.js +2 -7
  287. package/test/text/text_track_integration.js +0 -2
  288. package/test/text/ttml_text_parser_unit.js +495 -237
  289. package/test/text/ui_text_displayer_unit.js +44 -41
  290. package/test/text/vtt_text_parser_unit.js +0 -9
  291. package/test/text/web_vtt_generator_unit.js +0 -3
  292. package/test/ui/ad_ui_unit.js +0 -11
  293. package/test/ui/localization_unit.js +0 -3
  294. package/test/ui/text_displayer_layout_unit.js +9 -19
  295. package/test/ui/ui_customization_unit.js +0 -6
  296. package/test/ui/ui_integration.js +0 -16
  297. package/test/ui/ui_unit.js +1 -17
  298. package/test/util/abortable_operation_unit.js +4 -9
  299. package/test/util/array_utils_unit.js +0 -2
  300. package/test/util/buffer_utils_unit.js +0 -2
  301. package/test/util/data_view_reader_unit.js +0 -4
  302. package/test/util/ebml_parser_unit.js +0 -4
  303. package/test/util/event_manager_unit.js +0 -3
  304. package/test/util/fake_event_target_unit.js +0 -5
  305. package/test/util/functional_unit.js +1 -1
  306. package/test/util/iterables_unit.js +0 -64
  307. package/test/util/language_utils_unit.js +0 -3
  308. package/test/util/manifest_parser_utils_unit.js +0 -2
  309. package/test/util/mp4_box_parsers_unit.js +0 -5
  310. package/test/util/mp4_parser_unit.js +0 -4
  311. package/test/util/multi_map_unit.js +0 -3
  312. package/test/util/object_utils_unit.js +0 -2
  313. package/test/util/periods_unit.js +14 -7
  314. package/test/util/pssh_unit.js +0 -5
  315. package/test/util/state_history_unit.js +0 -2
  316. package/test/util/stream_utils_unit.js +39 -38
  317. package/test/util/string_utils_unit.js +0 -6
  318. package/test/util/text_parser_unit.js +0 -2
  319. package/test/util/xml_utils_unit.js +0 -4
  320. package/ui/controls.js +3 -0
  321. package/ui/less/ad_controls.less +4 -4
  322. package/ui/less/buttons.less +5 -9
  323. package/ui/less/containers.less +5 -7
  324. package/ui/less/overflow_menu.less +4 -4
  325. package/ui/less/range_elements.less +5 -0
  326. package/ui/locales/sjn-translations.yaml +257 -0
  327. package/ui/locales/sjn.json +42 -0
  328. package/ui/localization.js +12 -36
  329. package/ui/text_selection.js +1 -0
  330. package/externs/media_capabilities.js +0 -16
  331. package/externs/svgelement.js +0 -18
@@ -4,19 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('goog.asserts');
8
- goog.require('shaka.hls.HlsParser');
9
- goog.require('shaka.log');
10
- goog.require('shaka.net.NetworkingEngine');
11
- goog.require('shaka.test.FakeNetworkingEngine');
12
- goog.require('shaka.test.ManifestGenerator');
13
- goog.require('shaka.test.ManifestParser');
14
- goog.require('shaka.test.Util');
15
- goog.require('shaka.util.Error');
16
- goog.require('shaka.util.ManifestParserUtils');
17
- goog.require('shaka.util.PlayerConfiguration');
18
- goog.require('shaka.util.Uint8ArrayUtils');
19
-
20
7
  describe('HlsParser', () => {
21
8
  const ContentType = shaka.util.ManifestParserUtils.ContentType;
22
9
  const ManifestParser = shaka.test.ManifestParser;
@@ -209,6 +196,80 @@ describe('HlsParser', () => {
209
196
  expect(actual).toEqual(manifest);
210
197
  });
211
198
 
199
+ it('parses manifest attributes with space', async () => {
200
+ const master = [
201
+ '#EXTM3U\n',
202
+ '#EXT-X-MEDIA:TYPE=AUDIO, GROUP-ID="aud1", LANGUAGE="eng", ',
203
+ 'CHANNELS="16/JOC", URI="audio"\n',
204
+ '#EXT-X-MEDIA:TYPE=SUBTITLES, GROUP-ID="sub1", LANGUAGE="eng", ',
205
+ 'URI="text"\n',
206
+ '#EXT-X-MEDIA:TYPE=SUBTITLES, GROUP-ID="sub2", LANGUAGE="es", ',
207
+ 'URI="text2"\n',
208
+ '#EXT-X-STREAM-INF:BANDWIDTH=200, CODECS="avc1,mp4a", ',
209
+ 'RESOLUTION=960x540, FRAME-RATE=60, AUDIO="aud1"\n',
210
+ 'video\n',
211
+ ].join('');
212
+
213
+ const media = [
214
+ '#EXTM3U\n',
215
+ '#EXT-X-PLAYLIST-TYPE:VOD\n',
216
+ '#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
217
+ '#EXTINF:5,\n',
218
+ '#EXT-X-BYTERANGE:121090@616\n',
219
+ 'main.mp4',
220
+ ].join('');
221
+
222
+ const textMedia = [
223
+ '#EXTM3U\n',
224
+ '#EXT-X-PLAYLIST-TYPE:VOD\n',
225
+ '#EXTINF:5,\n',
226
+ '#EXT-X-BYTERANGE:121090@616\n',
227
+ 'main.vtt',
228
+ ].join('');
229
+
230
+ const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
231
+ manifest.anyTimeline();
232
+ manifest.addPartialVariant((variant) => {
233
+ variant.language = 'en';
234
+ variant.bandwidth = 200;
235
+ variant.addPartialStream(ContentType.VIDEO, (stream) => {
236
+ stream.frameRate = 60;
237
+ stream.mime('video/mp4', 'avc1');
238
+ stream.size(960, 540);
239
+ });
240
+ variant.addPartialStream(ContentType.AUDIO, (stream) => {
241
+ stream.language = 'en';
242
+ stream.channelsCount = 16;
243
+ stream.spatialAudio = true;
244
+ stream.mime('audio/mp4', 'mp4a');
245
+ });
246
+ });
247
+ manifest.addPartialTextStream((stream) => {
248
+ stream.language = 'en';
249
+ stream.kind = TextStreamKind.SUBTITLE;
250
+ stream.mime('text/vtt', '');
251
+ });
252
+ manifest.addPartialTextStream((stream) => {
253
+ stream.language = 'es';
254
+ stream.kind = TextStreamKind.SUBTITLE;
255
+ stream.mime('text/vtt', '');
256
+ });
257
+ });
258
+
259
+ fakeNetEngine
260
+ .setResponseText('test:/master', master)
261
+ .setResponseText('test:/audio', media)
262
+ .setResponseText('test:/video', media)
263
+ .setResponseText('test:/text', textMedia)
264
+ .setResponseText('test:/text2', textMedia)
265
+ .setResponseText('test:/main.vtt', vttText)
266
+ .setResponseValue('test:/init.mp4', initSegmentData)
267
+ .setResponseValue('test:/main.mp4', segmentData);
268
+
269
+ const actual = await parser.start('test:/master', playerInterface);
270
+ expect(actual).toEqual(manifest);
271
+ });
272
+
212
273
  it('prioritize AVERAGE-BANDWIDTH to BANDWIDTH', async () => {
213
274
  const master = [
214
275
  '#EXTM3U\n',
@@ -2868,7 +2929,7 @@ describe('HlsParser', () => {
2868
2929
  expect(audio0).toBe(audio1);
2869
2930
  });
2870
2931
 
2871
- // https://github.com/google/shaka-player/issues/1664
2932
+ // https://github.com/shaka-project/shaka-player/issues/1664
2872
2933
  it('correctly resolves relative playlist URIs', async () => {
2873
2934
  const master = [
2874
2935
  '#EXTM3U\n',
@@ -2911,7 +2972,7 @@ describe('HlsParser', () => {
2911
2972
  expect(manifest.variants.length).toBe(1);
2912
2973
  });
2913
2974
 
2914
- // https://github.com/google/shaka-player/issues/1908
2975
+ // https://github.com/shaka-project/shaka-player/issues/1908
2915
2976
  it('correctly pairs variants with multiple video and audio', async () => {
2916
2977
  const master = [
2917
2978
  '#EXTM3U\n',
@@ -4,16 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
-
8
- goog.require('shaka.hls.Attribute');
9
- goog.require('shaka.hls.ManifestTextParser');
10
- goog.require('shaka.hls.PlaylistType');
11
- goog.require('shaka.hls.Segment');
12
- goog.require('shaka.hls.Tag');
13
- goog.require('shaka.test.Util');
14
- goog.require('shaka.util.Error');
15
- goog.require('shaka.util.StringUtils');
16
-
17
7
  describe('ManifestTextParser', () => {
18
8
  /** @type {!shaka.hls.ManifestTextParser} */
19
9
  let parser;
@@ -4,10 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.PreferenceBasedCriteria');
8
- goog.require('shaka.test.ManifestGenerator');
9
- goog.requireType('shaka.media.AdaptationSet');
10
-
11
7
  describe('AdaptationSetCriteria', () => {
12
8
  describe('preference based selection', () => {
13
9
  it('chooses variants in user\'s preferred language', () => {
@@ -84,7 +80,7 @@ describe('AdaptationSetCriteria', () => {
84
80
  });
85
81
 
86
82
  it('chooses only one role, even if none is preferred', () => {
87
- // Regression test for https://github.com/google/shaka-player/issues/949
83
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/949
88
84
  const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
89
85
  manifest.addVariant(1, (variant) => {
90
86
  variant.language = 'en';
@@ -136,7 +132,7 @@ describe('AdaptationSetCriteria', () => {
136
132
  });
137
133
 
138
134
  it('chooses only one role, even if all are primary', () => {
139
- // Regression test for https://github.com/google/shaka-player/issues/949
135
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/949
140
136
  const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
141
137
  manifest.addVariant(1, (variant) => {
142
138
  variant.language = 'en';
@@ -194,7 +190,7 @@ describe('AdaptationSetCriteria', () => {
194
190
  });
195
191
 
196
192
  it('chooses only one language, even if all are primary', () => {
197
- // Regression test for https://github.com/google/shaka-player/issues/918
193
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/918
198
194
  const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
199
195
  manifest.addVariant(1, (variant) => {
200
196
  variant.language = 'en';
@@ -4,8 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.AdaptationSet');
8
-
9
7
  describe('AdaptationSet', () => {
10
8
  describe('roles', () => {
11
9
  const mimeType = 'mime-type';
@@ -4,9 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.BufferingObserver');
8
- goog.require('shaka.util.Iterables');
9
-
10
7
  describe('BufferingObserver', () => {
11
8
  const BufferingObserver = shaka.media.BufferingObserver;
12
9
  const State = shaka.media.BufferingObserver.State;
@@ -115,7 +112,7 @@ describe('BufferingObserver', () => {
115
112
  /** @type {boolean} */
116
113
  let changed;
117
114
 
118
- for (const lead of shaka.util.Iterables.range(5)) {
115
+ for (let lead = 0; lead < 5; lead++) {
119
116
  changed = controller.update(lead, /* toEnd= */ false);
120
117
  expect(changed).toBeFalsy();
121
118
  }
@@ -4,9 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.ClosedCaptionParser');
8
- goog.require('shaka.test.Util');
9
-
10
7
  describe('ClosedCaptionParser', () => {
11
8
  it('can handle empty caption packets', async () => {
12
9
  const initSegment = await shaka.test.Util.fetch(
@@ -4,21 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.DrmEngine');
8
- goog.require('shaka.media.MediaSourceEngine');
9
- goog.require('shaka.net.NetworkingEngine');
10
- goog.require('shaka.test.FakeClosedCaptionParser');
11
- goog.require('shaka.test.FakeTextDisplayer');
12
- goog.require('shaka.test.ManifestGenerator');
13
- goog.require('shaka.test.UiUtils');
14
- goog.require('shaka.test.Util');
15
- goog.require('shaka.test.Waiter');
16
- goog.require('shaka.util.EventManager');
17
- goog.require('shaka.util.ManifestParserUtils');
18
- goog.require('shaka.util.Platform');
19
- goog.require('shaka.util.PlayerConfiguration');
20
- goog.require('shaka.util.PublicPromise');
21
-
22
7
  describe('DrmEngine', () => {
23
8
  const ContentType = shaka.util.ManifestParserUtils.ContentType;
24
9
 
@@ -271,6 +256,7 @@ describe('DrmEngine', () => {
271
256
  video.play();
272
257
 
273
258
  const waiter = new shaka.test.Waiter(eventManager).timeoutAfter(15);
259
+ waiter.setMediaSourceEngine(mediaSourceEngine);
274
260
  await waiter.waitForMovement(video);
275
261
 
276
262
  // Something should have played by now.
@@ -351,6 +337,7 @@ describe('DrmEngine', () => {
351
337
  video.play();
352
338
 
353
339
  const waiter = new shaka.test.Waiter(eventManager).timeoutAfter(15);
340
+ waiter.setMediaSourceEngine(mediaSourceEngine);
354
341
  await waiter.waitForMovement(video);
355
342
 
356
343
  // Something should have played by now.
@@ -4,26 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.log');
8
- goog.require('shaka.media.DrmEngine');
9
- goog.require('shaka.media.Transmuxer');
10
- goog.require('shaka.net.DataUriPlugin');
11
- goog.require('shaka.net.NetworkingEngine');
12
- goog.require('shaka.test.FakeNetworkingEngine');
13
- goog.require('shaka.test.FakeVideo');
14
- goog.require('shaka.test.ManifestGenerator');
15
- goog.require('shaka.test.Util');
16
- goog.require('shaka.util.AbortableOperation');
17
- goog.require('shaka.util.BufferUtils');
18
- goog.require('shaka.util.Error');
19
- goog.require('shaka.util.Platform');
20
- goog.require('shaka.util.PlayerConfiguration');
21
- goog.require('shaka.util.Platform');
22
- goog.require('shaka.util.PublicPromise');
23
- goog.require('shaka.util.StringUtils');
24
- goog.require('shaka.util.Uint8ArrayUtils');
25
-
26
-
27
7
  describe('DrmEngine', () => {
28
8
  const Util = shaka.test.Util;
29
9
 
@@ -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,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