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,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 () => {
@@ -419,8 +392,9 @@ describe('StreamingEngine', () => {
419
392
  // 3. Playhead seeks to force us back inside the window
420
393
  // 4. (maybe) seek if there is a gap at the period boundary
421
394
  // 5. (maybe) seek to flush a pipeline stall
395
+ // 6. (maybe) on slower platforms (e.g. GitHub actions)
422
396
  expect(seekCount).toBeGreaterThan(2);
423
- expect(seekCount).toBeLessThan(6);
397
+ expect(seekCount).toBeLessThan(7);
424
398
  });
425
399
  });
426
400
 
@@ -4,30 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('goog.asserts');
8
- goog.require('shaka.log');
9
- goog.require('shaka.media.InitSegmentReference');
10
- goog.require('shaka.media.SegmentReference');
11
- goog.require('shaka.media.StreamingEngine');
12
- goog.require('shaka.net.NetworkingEngine');
13
- goog.require('shaka.net.NetworkingEngine.PendingRequest');
14
- goog.require('shaka.test.FakeNetworkingEngine');
15
- goog.require('shaka.test.FakeMediaSourceEngine');
16
- goog.require('shaka.test.ManifestGenerator');
17
- goog.require('shaka.test.StreamingEngineUtil');
18
- goog.require('shaka.test.Util');
19
- goog.require('shaka.util.AbortableOperation');
20
- goog.require('shaka.util.Error');
21
- goog.require('shaka.util.Iterables');
22
- goog.require('shaka.util.ManifestParserUtils');
23
- goog.require('shaka.util.MimeUtils');
24
- goog.require('shaka.util.PlayerConfiguration');
25
- goog.require('shaka.util.PublicPromise');
26
- goog.require('shaka.util.Uint8ArrayUtils');
27
- goog.requireType('shaka.media.PresentationTimeline');
28
- goog.requireType('shaka.test.FakeNetworkingEngine');
29
- goog.requireType('shaka.test.FakePresentationTimeline');
30
-
31
7
  describe('StreamingEngine', () => {
32
8
  const Util = shaka.test.Util;
33
9
  const ContentType = shaka.util.ManifestParserUtils.ContentType;
@@ -97,6 +73,9 @@ describe('StreamingEngine', () => {
97
73
  /** @type {!shaka.media.StreamingEngine} */
98
74
  let streamingEngine;
99
75
 
76
+ /** @type {function(function(), number)} */
77
+ let realSetTimeout;
78
+
100
79
  /**
101
80
  * Runs the fake event loop.
102
81
  * @param {function()=} callback An optional callback that is executed
@@ -116,6 +95,7 @@ describe('StreamingEngine', () => {
116
95
  }
117
96
 
118
97
  beforeAll(() => {
98
+ realSetTimeout = window.setTimeout;
119
99
  jasmine.clock().install();
120
100
  jasmine.clock().mockDate();
121
101
  });
@@ -280,7 +260,7 @@ describe('StreamingEngine', () => {
280
260
  };
281
261
 
282
262
  const segmentsInFirstPeriod = 12;
283
- for (const i of shaka.util.Iterables.range(segmentsInFirstPeriod)) {
263
+ for (let i = 0; i < segmentsInFirstPeriod; i++) {
284
264
  segmentData[ContentType.AUDIO].segments.push(
285
265
  makeBuffer(segmentSizes[ContentType.AUDIO]));
286
266
  segmentData[ContentType.VIDEO].segments.push(
@@ -294,7 +274,7 @@ describe('StreamingEngine', () => {
294
274
  }
295
275
 
296
276
  const segmentsInSecondPeriod = 2;
297
- for (const i of shaka.util.Iterables.range(segmentsInSecondPeriod)) {
277
+ for (let i = 0; i < segmentsInSecondPeriod; i++) {
298
278
  segmentData[ContentType.AUDIO].segments.push(
299
279
  makeBuffer(segmentSizes[ContentType.AUDIO]));
300
280
  segmentData[ContentType.VIDEO].segments.push(
@@ -645,7 +625,7 @@ describe('StreamingEngine', () => {
645
625
  // should be buffered. Those segment numbers are 1-based, and this array
646
626
  // is 0-based, so we expect i >= 9 to be downloaded.
647
627
  const segments = mediaSourceEngine.segments;
648
- for (const i of shaka.util.Iterables.range(14)) {
628
+ for (let i = 0; i < 14; i++) {
649
629
  expect(segments[ContentType.AUDIO][i]).withContext(i).toBe(i >= 9);
650
630
  expect(segments[ContentType.VIDEO][i]).withContext(i).toBe(i >= 9);
651
631
  expect(segments[ContentType.TEXT][i]).withContext(i).toBe(i >= 9);
@@ -751,7 +731,7 @@ describe('StreamingEngine', () => {
751
731
  expect(timeline.setDuration).toHaveBeenCalledWith(35);
752
732
  });
753
733
 
754
- // https://github.com/google/shaka-player/issues/979
734
+ // https://github.com/shaka-project/shaka-player/issues/979
755
735
  it('does not expand the timeline duration', async () => {
756
736
  setupVod();
757
737
  mediaSourceEngine = new shaka.test.FakeMediaSourceEngine(segmentData);
@@ -777,7 +757,7 @@ describe('StreamingEngine', () => {
777
757
  expect(timeline.setDuration).not.toHaveBeenCalled();
778
758
  });
779
759
 
780
- // https://github.com/google/shaka-player/issues/1967
760
+ // https://github.com/shaka-project/shaka-player/issues/1967
781
761
  it('does not change duration when 0', async () => {
782
762
  setupVod();
783
763
  mediaSourceEngine = new shaka.test.FakeMediaSourceEngine(segmentData);
@@ -822,6 +802,53 @@ describe('StreamingEngine', () => {
822
802
  .toHaveBeenCalledWith('video', 0, lt20, gt40);
823
803
  });
824
804
 
805
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/3717
806
+ it('applies fudge factors for the duration', async () => {
807
+ setupVod();
808
+
809
+ // In #3717, the duration was just barely large enough to encompass an
810
+ // additional segment, but that segment didn't exist, so playback never
811
+ // completed. Here, we set the duration to just beyond the 3rd segment, and
812
+ // we make the 4th segment fail when requested.
813
+ const duration = 30.000000005;
814
+ timeline.getDuration.and.returnValue(duration);
815
+
816
+ const targetUri = '1_video_3'; // The URI of the 4th video segment.
817
+ failRequestsForTarget(netEngine, targetUri);
818
+
819
+ mediaSourceEngine = new shaka.test.FakeMediaSourceEngine(segmentData);
820
+ createStreamingEngine();
821
+
822
+ // Here we go!
823
+ streamingEngine.switchVariant(variant);
824
+ streamingEngine.switchTextStream(textStream);
825
+ await streamingEngine.start();
826
+ playing = true;
827
+ await runTest();
828
+
829
+ // The end of the stream should have been reached, and the 4th segment from
830
+ // each type should never have been requested.
831
+ expect(mediaSourceEngine.endOfStream).toHaveBeenCalled();
832
+
833
+ const segmentType = shaka.net.NetworkingEngine.RequestType.SEGMENT;
834
+
835
+ netEngine.expectRequest('0_audio_0', segmentType);
836
+ netEngine.expectRequest('0_video_0', segmentType);
837
+ netEngine.expectRequest('0_text_0', segmentType);
838
+
839
+ netEngine.expectRequest('0_audio_1', segmentType);
840
+ netEngine.expectRequest('0_video_1', segmentType);
841
+ netEngine.expectRequest('0_text_1', segmentType);
842
+
843
+ netEngine.expectRequest('1_audio_2', segmentType);
844
+ netEngine.expectRequest('1_video_2', segmentType);
845
+ netEngine.expectRequest('1_text_2', segmentType);
846
+
847
+ netEngine.expectNoRequest('1_audio_3', segmentType);
848
+ netEngine.expectNoRequest('1_video_3', segmentType);
849
+ netEngine.expectNoRequest('1_text_3', segmentType);
850
+ });
851
+
825
852
  it('does not buffer one media type ahead of another', async () => {
826
853
  setupVod();
827
854
  mediaSourceEngine = new shaka.test.FakeMediaSourceEngine(segmentData);
@@ -878,7 +905,7 @@ describe('StreamingEngine', () => {
878
905
  expect(mediaSourceEngine.appendBuffer).toHaveBeenCalled();
879
906
  });
880
907
 
881
- // https://github.com/google/shaka-player/issues/2957
908
+ // https://github.com/shaka-project/shaka-player/issues/2957
882
909
  it('plays with fewer text segments', async () => {
883
910
  setupVod();
884
911
 
@@ -1040,7 +1067,7 @@ describe('StreamingEngine', () => {
1040
1067
  expect(mediaSourceEngine.resetCaptionParser).not.toHaveBeenCalled();
1041
1068
  });
1042
1069
 
1043
- // See https://github.com/google/shaka-player/issues/2956
1070
+ // See https://github.com/shaka-project/shaka-player/issues/2956
1044
1071
  it('works with fast variant switches during update', async () => {
1045
1072
  // Delay the appendBuffer call until later so we are waiting for this to
1046
1073
  // finish when we switch.
@@ -1389,6 +1416,66 @@ describe('StreamingEngine', () => {
1389
1416
  });
1390
1417
  });
1391
1418
 
1419
+ it('into unbuffered regions when nothing is buffered ' +
1420
+ 'and mediaState is performing an update', async () => {
1421
+ // Here we go!
1422
+ streamingEngine.switchVariant(variant);
1423
+ streamingEngine.switchTextStream(textStream);
1424
+ // ensure init source buffer promise does not resolve before seeked()
1425
+ // so mediaState remains in "performingUpdate" state
1426
+ const initSourceBufferPromise = new shaka.util.PublicPromise();
1427
+ mediaSourceEngine.setStreamProperties.and
1428
+ .returnValue(initSourceBufferPromise);
1429
+ await streamingEngine.start();
1430
+ playing = true;
1431
+
1432
+ // tick to trigger mediaState updates
1433
+ jasmine.clock().tick(1);
1434
+ // give a chance for fetchAndAppend_ to be invoked
1435
+ // by async onUpdate_ callback
1436
+ await Util.shortDelay(realSetTimeout);
1437
+
1438
+ // Nothing is buffered yet.
1439
+ expect(mediaSourceEngine.segments).toEqual({
1440
+ audio: [false, false, false, false],
1441
+ video: [false, false, false, false],
1442
+ text: [false, false, false, false],
1443
+ });
1444
+
1445
+ // Seek forward to an unbuffered region in the first Period.
1446
+ presentationTimeInSeconds = 15;
1447
+ streamingEngine.seeked();
1448
+
1449
+ // resolve initSourceBufferPromise after seeked(), waitingToClearBuffer
1450
+ // should have been set, so this will now trigger the actual flush of
1451
+ // the buffer
1452
+ initSourceBufferPromise.resolve();
1453
+ mediaSourceEngine.setStreamProperties.and
1454
+ .returnValue(Promise.resolve());
1455
+
1456
+ // allow mediaState update to resolve
1457
+ await Util.shortDelay(realSetTimeout);
1458
+
1459
+ onTick.and.callFake(() => {
1460
+ expect(mediaSourceEngine.clear).toHaveBeenCalled();
1461
+ onTick.and.stub();
1462
+ });
1463
+
1464
+ await runTest(Util.spyFunc(onTick));
1465
+
1466
+ // Verify buffers.
1467
+ expect(mediaSourceEngine.initSegments).toEqual({
1468
+ audio: [false, true],
1469
+ video: [false, true],
1470
+ text: [],
1471
+ });
1472
+ expect(mediaSourceEngine.segments).toEqual({
1473
+ audio: [false, true, true, true],
1474
+ video: [false, true, true, true],
1475
+ text: [false, true, true, true],
1476
+ });
1477
+ });
1478
+
1392
1479
  it('into unbuffered regions near segment start', async () => {
1393
1480
  // Here we go!
1394
1481
  streamingEngine.switchVariant(variant);
@@ -1548,7 +1635,7 @@ describe('StreamingEngine', () => {
1548
1635
  });
1549
1636
  });
1550
1637
 
1551
- // https://github.com/google/shaka-player/issues/2670
1638
+ // https://github.com/shaka-project/shaka-player/issues/2670
1552
1639
  it('rapid unbuffered seeks', async () => {
1553
1640
  // This test simulates rapid dragging of the seek bar, as in #2670.
1554
1641
  // In that issue, we would buffer the wrong segments due to a race
@@ -1687,7 +1774,7 @@ describe('StreamingEngine', () => {
1687
1774
 
1688
1775
  // Since we performed an unbuffered seek into the second Period, the
1689
1776
  // first 12 segments should not be buffered.
1690
- for (const i of shaka.util.Iterables.range(14)) {
1777
+ for (let i = 0; i < 14; i++) {
1691
1778
  expect(mediaSourceEngine.segments[ContentType.AUDIO][i]).toBe(i >= 12);
1692
1779
  expect(mediaSourceEngine.segments[ContentType.VIDEO][i]).toBe(i >= 12);
1693
1780
  expect(mediaSourceEngine.segments[ContentType.TEXT][i]).toBe(i >= 12);
@@ -2489,7 +2576,7 @@ describe('StreamingEngine', () => {
2489
2576
  // should be buffered. Those segment numbers are 1-based, and this array
2490
2577
  // is 0-based, so we expect i >= 9 to be downloaded.
2491
2578
  const segments = mediaSourceEngine.segments;
2492
- for (const i of shaka.util.Iterables.range(14)) {
2579
+ for (let i = 0; i < 14; i++) {
2493
2580
  expect(segments[ContentType.AUDIO][i]).withContext(i).toBe(i >= 9);
2494
2581
  expect(segments[ContentType.VIDEO][i]).withContext(i).toBe(i >= 9);
2495
2582
  expect(segments[ContentType.TEXT][i]).withContext(i).toBe(i >= 9);
@@ -3388,6 +3475,40 @@ describe('StreamingEngine', () => {
3388
3475
  segmentAvailability.end++;
3389
3476
  }
3390
3477
 
3478
+ /**
3479
+ * @param {!shaka.test.FakeNetworkingEngine} netEngine A NetworkingEngine
3480
+ * look-alike.
3481
+ * @param {string} targetUri
3482
+ * @param {shaka.util.Error.Code=} errorCode
3483
+ */
3484
+ function failRequestsForTarget(
3485
+ netEngine, targetUri, errorCode=shaka.util.Error.Code.BAD_HTTP_STATUS) {
3486
+ // eslint-disable-next-line no-restricted-syntax
3487
+ const originalNetEngineRequest = netEngine.request.bind(netEngine);
3488
+
3489
+ netEngine.request = jasmine.createSpy('request').and.callFake(
3490
+ (requestType, request) => {
3491
+ if (request.uris[0] == targetUri) {
3492
+ const data = [targetUri];
3493
+
3494
+ if (errorCode == shaka.util.Error.Code.BAD_HTTP_STATUS) {
3495
+ data.push(404);
3496
+ data.push('');
3497
+ }
3498
+
3499
+ // The compiler still sees the error code parameter as potentially
3500
+ // undefined, even though we gave it a default value.
3501
+ goog.asserts.assert(errorCode != undefined, 'Undefined error code');
3502
+
3503
+ return shaka.util.AbortableOperation.failed(new shaka.util.Error(
3504
+ shaka.util.Error.Severity.CRITICAL,
3505
+ shaka.util.Error.Category.NETWORK,
3506
+ errorCode, data));
3507
+ }
3508
+ return originalNetEngineRequest(requestType, request);
3509
+ });
3510
+ }
3511
+
3391
3512
  /**
3392
3513
  * @param {!shaka.test.FakeNetworkingEngine} netEngine A NetworkingEngine
3393
3514
  * look-alike.
@@ -4,8 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.TimeRangesUtils');
8
-
9
7
  describe('TimeRangesUtils', () => {
10
8
  const TimeRangesUtils = shaka.media.TimeRangesUtils;
11
9
 
@@ -3,12 +3,6 @@
3
3
  * Copyright 2016 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- goog.require('goog.asserts');
7
- goog.require('shaka.media.Transmuxer');
8
- goog.require('shaka.test.Util');
9
- goog.require('shaka.util.ManifestParserUtils');
10
- goog.require('shaka.util.Mp4BoxParsers');
11
- goog.require('shaka.util.Mp4Parser');
12
6
 
13
7
  describe('Transmuxer', () => {
14
8
  const ContentType = shaka.util.ManifestParserUtils.ContentType;
@@ -4,10 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.media.WebmSegmentIndexParser');
8
- goog.require('shaka.test.Util');
9
- goog.require('shaka.util.Error');
10
-
11
7
  describe('WebmSegmentIndexParser', () => {
12
8
  const indexSegmentUri = '/base/test/test/assets/index-segment.webm';
13
9
  const initSegmentUri = '/base/test/test/assets/init-segment.webm';
@@ -4,13 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.net.DataUriPlugin');
8
- goog.require('shaka.net.NetworkingEngine');
9
- goog.require('shaka.net.NetworkingEngine.RequestType');
10
- goog.require('shaka.test.Util');
11
- goog.require('shaka.util.Error');
12
- goog.require('shaka.util.StringUtils');
13
-
14
7
  describe('DataUriPlugin', () => {
15
8
  const retryParameters = shaka.net.NetworkingEngine.defaultRetryParameters();
16
9
 
@@ -4,15 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
-
8
- goog.require('shaka.net.HttpFetchPlugin');
9
- goog.require('shaka.net.HttpXHRPlugin');
10
- goog.require('shaka.net.NetworkingEngine');
11
- goog.require('shaka.net.NetworkingEngine.RequestType');
12
- goog.require('shaka.test.Util');
13
- goog.require('shaka.util.BufferUtils');
14
- goog.require('shaka.util.Error');
15
-
16
7
  /**
17
8
  * Add a set of http plugin tests, for the given scheme plugin.
18
9
  *
@@ -4,17 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.net.Backoff');
8
- goog.require('shaka.net.NetworkingEngine');
9
- goog.require('shaka.net.NetworkingEngine.RequestType');
10
- goog.require('shaka.test.StatusPromise');
11
- goog.require('shaka.test.Util');
12
- goog.require('shaka.util.AbortableOperation');
13
- goog.require('shaka.util.Error');
14
- goog.require('shaka.util.Networking');
15
- goog.require('shaka.util.PublicPromise');
16
- goog.requireType('shaka.net.NetworkingEngine.PendingRequest');
17
-
18
7
  describe('NetworkingEngine', /** @suppress {accessControls} */ () => {
19
8
  const StatusPromise = shaka.test.StatusPromise;
20
9
  const Util = shaka.test.Util;
@@ -4,8 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.offline.DownloadProgressEstimator');
8
-
9
7
  describe('DownloadProgressEstimator', () => {
10
8
  /** @type {!shaka.offline.DownloadProgressEstimator} */
11
9
  let estimator;
@@ -4,12 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.offline.indexeddb.V5StorageCell');
8
- goog.require('shaka.test.IndexedDBUtils');
9
- goog.require('shaka.test.OfflineUtils');
10
- goog.require('shaka.test.Util');
11
- goog.require('shaka.util.Error');
12
-
13
7
  filterDescribe('IndexeddbStorageCell', () => window.indexedDB, () => {
14
8
  const IndexedDBUtils = shaka.test.IndexedDBUtils;
15
9
  const OfflineUtils = shaka.test.OfflineUtils;
@@ -4,14 +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.PresentationTimeline');
9
- goog.require('shaka.media.SegmentIndex');
10
- goog.require('shaka.offline.ManifestConverter');
11
- goog.require('shaka.offline.OfflineUri');
12
- goog.require('shaka.util.ManifestParserUtils');
13
- goog.requireType('shaka.media.SegmentReference');
14
-
15
7
  describe('ManifestConverter', () => {
16
8
  describe('createVariants', () => {
17
9
  const audioType = 'audio';
@@ -4,16 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('goog.asserts');
8
- goog.require('shaka.Player');
9
- goog.require('shaka.offline.Storage');
10
- goog.require('shaka.test.TestScheme');
11
- goog.require('shaka.test.UiUtils');
12
- goog.require('shaka.test.Util');
13
- goog.require('shaka.test.Waiter');
14
- goog.require('shaka.util.EventManager');
15
- goog.require('shaka.util.Platform');
16
-
17
7
  /** @return {boolean} */
18
8
  const supportsStorage = () => shaka.offline.Storage.support();
19
9
 
@@ -45,6 +35,7 @@ filterDescribe('Offline', supportsStorage, () => {
45
35
 
46
36
  eventManager = new shaka.util.EventManager();
47
37
  waiter = new shaka.test.Waiter(eventManager);
38
+ waiter.setPlayer(player);
48
39
 
49
40
  // Make sure we are starting with a blank slate.
50
41
  await shaka.offline.Storage.deleteAll();