shaka-player 3.3.2 → 3.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. package/.csslintrc +11 -1
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
  3. package/.github/pull_request_template.md +6 -34
  4. package/.github/workflows/build-and-test.yaml +130 -0
  5. package/.github/workflows/custom-actions/prep-for-appspot/action.yaml +56 -0
  6. package/.github/workflows/custom-actions/set-commit-status/action.yaml +41 -0
  7. package/.github/workflows/demo-version-index.yaml +29 -0
  8. package/.github/workflows/nightly-demo.yaml +42 -0
  9. package/.github/workflows/release-please.yaml +145 -0
  10. package/.github/workflows/safari-homedir-launcher.sh +18 -0
  11. package/.github/workflows/selenium-lab-tests.yaml +93 -0
  12. package/AUTHORS +2 -0
  13. package/CHANGELOG.md +1691 -1675
  14. package/CONTRIBUTING.md +2 -2
  15. package/CONTRIBUTORS +2 -0
  16. package/README.md +7 -7
  17. package/app-engine/README.md +9 -0
  18. package/app-engine/demo-version-index/README.md +14 -0
  19. package/app-engine/demo-version-index/app.yaml +2 -0
  20. package/app-engine/demo-version-index/main.py +162 -0
  21. package/app-engine/demo-version-index/requirements.txt +6 -0
  22. package/app-engine/demo-version-index/templates/index.html +114 -0
  23. package/app-engine/shaka-player-demo/README.md +18 -0
  24. package/app-engine/shaka-player-demo/app.yaml +61 -0
  25. package/app-engine/shaka-player-demo/main.py +95 -0
  26. package/app-engine/shaka-player-demo/posters/10yo.png +0 -0
  27. package/app-engine/shaka-player-demo/posters/10yo.xcf +0 -0
  28. package/app-engine/shaka-player-demo/posters/1yo.jpg +0 -0
  29. package/app-engine/shaka-player-demo/posters/2yo.png +0 -0
  30. package/app-engine/shaka-player-demo/posters/2yo.xcf +0 -0
  31. package/app-engine/shaka-player-demo/posters/3yo.png +0 -0
  32. package/app-engine/shaka-player-demo/posters/3yo.xcf +0 -0
  33. package/app-engine/shaka-player-demo/posters/4yo.png +0 -0
  34. package/app-engine/shaka-player-demo/posters/4yo.xcf +0 -0
  35. package/app-engine/shaka-player-demo/posters/5yo.png +0 -0
  36. package/app-engine/shaka-player-demo/posters/5yo.xcf +0 -0
  37. package/app-engine/shaka-player-demo/posters/6yo.png +0 -0
  38. package/app-engine/shaka-player-demo/posters/6yo.xcf +0 -0
  39. package/app-engine/shaka-player-demo/posters/7yo.png +0 -0
  40. package/app-engine/shaka-player-demo/posters/7yo.xcf +0 -0
  41. package/app-engine/shaka-player-demo/posters/8yo.png +0 -0
  42. package/app-engine/shaka-player-demo/posters/8yo.xcf +0 -0
  43. package/app-engine/shaka-player-demo/posters/9yo.png +0 -0
  44. package/app-engine/shaka-player-demo/posters/9yo.xcf +0 -0
  45. package/app-engine/shaka-player-demo/posters/audioOnly.gif +0 -0
  46. package/app-engine/shaka-player-demo/posters/audioRickRoll.gif +0 -0
  47. package/app-engine/shaka-player-demo/posters/colorbars.gif +0 -0
  48. package/app-engine/shaka-player-demo/posters/fireworks.jpg +0 -0
  49. package/app-engine/shaka-player-demo/posters/party-hat.png +0 -0
  50. package/app-engine/shaka-player-demo/posters/sources.txt +46 -0
  51. package/app-engine/shaka-player-demo/posters/standard.png +0 -0
  52. package/app-engine/shaka-player-demo/posters/trek.jpg +0 -0
  53. package/app-engine/shaka-player-demo/posters/valentines.png +0 -0
  54. package/app-engine/shaka-player-demo/posters/zombie.jpg +0 -0
  55. package/app-engine/shaka-player-demo/posters.py +110 -0
  56. package/app-engine/shaka-player-demo/requirements.txt +5 -0
  57. package/app-engine/shaka-player-demo/time.txt +1 -0
  58. package/build/README.md +1 -1
  59. package/build/checkversion.py +1 -1
  60. package/build/conformance.textproto +13 -0
  61. package/build/docker/Dockerfile +20 -0
  62. package/build/docker/docker-compose.yml +10 -0
  63. package/build/gendeps.py +18 -15
  64. package/build/shaka-lab.yaml +163 -0
  65. package/build/shakaBuildHelpers.py +4 -29
  66. package/build/test.py +87 -28
  67. package/build/types/polyfill +1 -0
  68. package/build/wrapper.template.js +2 -2
  69. package/demo/TengwarTelcontar.woff2 +0 -0
  70. package/demo/asset_card.js +1 -2
  71. package/demo/cast_receiver/index.html +1 -1
  72. package/demo/cast_receiver/receiver_app.css +14 -14
  73. package/demo/common/assets.js +2 -0
  74. package/demo/config.js +0 -1
  75. package/demo/custom.js +0 -1
  76. package/demo/customWarning.txt +2 -2
  77. package/demo/demo.less +29 -18
  78. package/demo/demo_uncompiled.js +1 -13
  79. package/demo/index.html +1 -1
  80. package/demo/main.js +3 -3
  81. package/dist/controls.css +3 -3
  82. package/dist/controls.css.map +1 -1
  83. package/dist/demo.compiled.debug.js +191 -194
  84. package/dist/demo.compiled.debug.map +4 -4
  85. package/dist/demo.compiled.js +191 -194
  86. package/dist/demo.compiled.map +4 -4
  87. package/dist/demo.css +1 -1
  88. package/dist/demo.css.map +1 -1
  89. package/dist/deps.js +233 -226
  90. package/dist/locales.js +31 -31
  91. package/dist/receiver.compiled.debug.js +43 -45
  92. package/dist/receiver.compiled.debug.map +4 -4
  93. package/dist/receiver.compiled.js +43 -45
  94. package/dist/receiver.compiled.map +4 -4
  95. package/dist/shaka-player.compiled.d.ts +246 -236
  96. package/dist/shaka-player.compiled.debug.d.ts +246 -236
  97. package/dist/shaka-player.compiled.debug.externs.js +14 -3
  98. package/dist/shaka-player.compiled.debug.js +214 -222
  99. package/dist/shaka-player.compiled.debug.map +4 -4
  100. package/dist/shaka-player.compiled.externs.js +14 -3
  101. package/dist/shaka-player.compiled.js +845 -851
  102. package/dist/shaka-player.compiled.map +4 -4
  103. package/dist/shaka-player.ui.d.ts +290 -280
  104. package/dist/shaka-player.ui.debug.d.ts +290 -280
  105. package/dist/shaka-player.ui.debug.externs.js +14 -3
  106. package/dist/shaka-player.ui.debug.js +295 -303
  107. package/dist/shaka-player.ui.debug.map +4 -4
  108. package/dist/shaka-player.ui.externs.js +14 -3
  109. package/dist/shaka-player.ui.js +1000 -1006
  110. package/dist/shaka-player.ui.map +4 -4
  111. package/docs/design/REDESIGN.md +33 -33
  112. package/docs/design/bg-fetch.md +2 -2
  113. package/docs/design/codec_preferences.md +1 -1
  114. package/docs/design/dash-audio-channels.md +3 -3
  115. package/docs/design/dash-manifests.md +1 -1
  116. package/docs/design/gap-jumping.md +3 -3
  117. package/docs/design/preload.md +2 -2
  118. package/docs/tutorials/faq.md +8 -8
  119. package/docs/tutorials/index.json +1 -0
  120. package/docs/tutorials/plugins.md +3 -3
  121. package/docs/tutorials/selenium-grid-config.md +122 -0
  122. package/docs/tutorials/welcome.md +10 -2
  123. package/externs/cmcd.js +1 -1
  124. package/karma.conf.js +137 -30
  125. package/lib/abr/simple_abr_manager.js +12 -6
  126. package/lib/cast/cast_proxy.js +3 -4
  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 +9 -11
  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 +11 -9
  136. package/lib/hls/manifest_text_parser.js +3 -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/streaming_engine.js +6 -6
  145. package/lib/media/time_ranges_utils.js +1 -3
  146. package/lib/media/video_wrapper.js +1 -1
  147. package/lib/net/networking_engine.js +1 -1
  148. package/lib/offline/storage.js +4 -4
  149. package/lib/player.js +34 -16
  150. package/lib/polyfill/all.js +2 -3
  151. package/lib/polyfill/encryption_scheme.js +1 -1
  152. package/lib/polyfill/media_capabilities.js +3 -3
  153. package/lib/polyfill/mediasource.js +1 -1
  154. package/lib/polyfill/symbol.js +46 -0
  155. package/lib/text/cue.js +1 -1
  156. package/lib/text/simple_text_displayer.js +2 -1
  157. package/lib/text/ttml_text_parser.js +8 -5
  158. package/lib/text/ui_text_displayer.js +1 -1
  159. package/lib/util/buffer_utils.js +1 -3
  160. package/lib/util/ebml_parser.js +3 -3
  161. package/lib/util/error.js +1 -1
  162. package/lib/util/iterables.js +0 -46
  163. package/lib/util/mp4_box_parsers.js +1 -4
  164. package/lib/util/mp4_parser.js +5 -7
  165. package/lib/util/periods.js +10 -11
  166. package/lib/util/platform.js +3 -3
  167. package/lib/util/pssh.js +1 -4
  168. package/lib/util/stream_utils.js +4 -3
  169. package/lib/util/string_utils.js +3 -5
  170. package/lib/util/uint8array_utils.js +3 -5
  171. package/lib/util/xml_utils.js +15 -7
  172. package/package.json +61 -36
  173. package/roadmap.md +17 -17
  174. package/shaka-player.uncompiled.js +1 -0
  175. package/test/abr/simple_abr_manager_unit.js +3 -8
  176. package/test/ads/ad_manager_unit.js +0 -6
  177. package/test/cast/cast_proxy_unit.js +0 -8
  178. package/test/cast/cast_receiver_integration.js +1 -18
  179. package/test/cast/cast_receiver_unit.js +1 -9
  180. package/test/cast/cast_sender_unit.js +0 -6
  181. package/test/cast/cast_utils_unit.js +0 -13
  182. package/test/cea/cea608_memory_unit.js +0 -5
  183. package/test/cea/cea708_service_unit.js +0 -7
  184. package/test/cea/cea708_window_unit.js +0 -5
  185. package/test/cea/cea_decoder_unit.js +0 -6
  186. package/test/cea/dtvcc_packet_builder_unit.js +0 -3
  187. package/test/cea/dtvcc_packet_unit.js +0 -5
  188. package/test/cea/mp4_cea_parser_unit.js +0 -4
  189. package/test/dash/dash_parser_content_protection_unit.js +1 -10
  190. package/test/dash/dash_parser_live_unit.js +2 -15
  191. package/test/dash/dash_parser_manifest_unit.js +2 -16
  192. package/test/dash/dash_parser_segment_base_unit.js +1 -8
  193. package/test/dash/dash_parser_segment_list_unit.js +1 -7
  194. package/test/dash/dash_parser_segment_template_unit.js +0 -9
  195. package/test/dash/mpd_utils_unit.js +3 -11
  196. package/test/demo/demo_unit.js +0 -5
  197. package/test/deprecate/enforcer_unit.js +0 -4
  198. package/test/deprecate/version_unit.js +0 -2
  199. package/test/hls/hls_live_unit.js +2 -14
  200. package/test/hls/hls_parser_unit.js +2 -15
  201. package/test/hls/manifest_text_parser_unit.js +0 -10
  202. package/test/media/adaptation_set_criteria_unit.js +3 -7
  203. package/test/media/adaptation_set_unit.js +0 -2
  204. package/test/media/buffering_observer_unit.js +1 -4
  205. package/test/media/closed_caption_parser_unit.js +0 -3
  206. package/test/media/drm_engine_integration.js +2 -15
  207. package/test/media/drm_engine_unit.js +4 -24
  208. package/test/media/manifest_parser_unit.js +0 -4
  209. package/test/media/media_source_engine_integration.js +0 -7
  210. package/test/media/media_source_engine_unit.js +1 -14
  211. package/test/media/mp4_segment_index_parser_unit.js +0 -4
  212. package/test/media/play_rate_controller_unit.js +0 -4
  213. package/test/media/playhead_unit.js +8 -16
  214. package/test/media/presentation_timeline_unit.js +4 -7
  215. package/test/media/quality_observer_unit.js +0 -4
  216. package/test/media/region_observer_unit.js +1 -6
  217. package/test/media/region_timeline_unit.js +0 -3
  218. package/test/media/segment_index_unit.js +0 -6
  219. package/test/media/segment_reference_unit.js +0 -3
  220. package/test/media/stall_detector_unit.js +0 -5
  221. package/test/media/streaming_engine_integration.js +9 -36
  222. package/test/media/streaming_engine_unit.js +11 -35
  223. package/test/media/time_ranges_utils_unit.js +0 -2
  224. package/test/media/transmuxer_integration.js +0 -6
  225. package/test/media/webm_segment_index_parser_unit.js +0 -4
  226. package/test/net/data_uri_plugin_unit.js +0 -7
  227. package/test/net/http_plugin_unit.js +0 -9
  228. package/test/net/networking_engine_unit.js +0 -11
  229. package/test/offline/download_progress_estimator_unit.js +0 -2
  230. package/test/offline/indexeddb_storage_unit.js +0 -6
  231. package/test/offline/manifest_convert_unit.js +0 -8
  232. package/test/offline/offline_integration.js +1 -10
  233. package/test/offline/offline_manifest_parser_unit.js +0 -6
  234. package/test/offline/offline_scheme_unit.js +0 -8
  235. package/test/offline/offline_uri_unit.js +0 -2
  236. package/test/offline/storage_compatibility_unit.js +1 -14
  237. package/test/offline/storage_integration.js +1 -27
  238. package/test/player_external.js +2 -10
  239. package/test/player_integration.js +22 -28
  240. package/test/player_load_graph_integration.js +1 -6
  241. package/test/player_src_equals_external.js +3 -9
  242. package/test/player_src_equals_integration.js +0 -7
  243. package/test/player_unit.js +52 -37
  244. package/test/routing/walker_unit.js +0 -8
  245. package/test/test/assets/large_file.mpd +1 -1
  246. package/test/test/boot.js +75 -22
  247. package/test/test/externs/jasmine.js +2 -2
  248. package/test/test/externs/karma.js +4 -0
  249. package/test/test/namespace.js +10 -0
  250. package/test/test/util/canned_idb.js +0 -8
  251. package/test/test/util/cea_utils.js +0 -6
  252. package/test/test/util/dash_parser_util.js +0 -13
  253. package/test/test/util/fake_ad.js +0 -3
  254. package/test/test/util/fake_ad_manager.js +0 -9
  255. package/test/test/util/fake_demo_main.js +0 -5
  256. package/test/test/util/fake_drm_engine.js +0 -6
  257. package/test/test/util/fake_media_source_engine.js +0 -7
  258. package/test/test/util/fake_networking_engine.js +0 -5
  259. package/test/test/util/fake_text_displayer.js +0 -5
  260. package/test/test/util/indexeddb_utils.js +1 -10
  261. package/test/test/util/jasmine_fetch.js +0 -1
  262. package/test/test/util/loader.js +0 -18
  263. package/test/test/util/manifest_generator.js +9 -14
  264. package/test/test/util/manifest_parser_util.js +0 -6
  265. package/test/test/util/offline_utils.js +0 -5
  266. package/test/test/util/simple_fakes.js +9 -26
  267. package/test/test/util/stream_generator.js +0 -14
  268. package/test/test/util/streaming_engine_util.js +0 -15
  269. package/test/test/util/test_scheme.js +1 -19
  270. package/test/test/util/ttml_utils.js +0 -2
  271. package/test/test/util/ui_utils.js +0 -9
  272. package/test/test/util/util.js +5 -19
  273. package/test/test/util/waiter.js +84 -43
  274. package/test/text/cue_integration.js +0 -4
  275. package/test/text/lrc_text_parser_unit.js +0 -4
  276. package/test/text/mp4_ttml_parser_unit.js +0 -6
  277. package/test/text/mp4_vtt_parser_unit.js +1 -7
  278. package/test/text/sbv_text_parser_unit.js +0 -4
  279. package/test/text/simple_text_displayer_unit.js +1 -8
  280. package/test/text/srt_text_parser_unit.js +0 -4
  281. package/test/text/ssa_text_parser_unit.js +0 -5
  282. package/test/text/text_engine_unit.js +2 -7
  283. package/test/text/text_track_integration.js +0 -2
  284. package/test/text/ttml_text_parser_unit.js +2 -11
  285. package/test/text/ui_text_displayer_unit.js +44 -41
  286. package/test/text/vtt_text_parser_unit.js +0 -9
  287. package/test/text/web_vtt_generator_unit.js +0 -3
  288. package/test/ui/ad_ui_unit.js +0 -11
  289. package/test/ui/localization_unit.js +0 -3
  290. package/test/ui/text_displayer_layout_unit.js +1 -12
  291. package/test/ui/ui_customization_unit.js +0 -6
  292. package/test/ui/ui_integration.js +0 -16
  293. package/test/ui/ui_unit.js +1 -17
  294. package/test/util/abortable_operation_unit.js +4 -9
  295. package/test/util/array_utils_unit.js +0 -2
  296. package/test/util/buffer_utils_unit.js +0 -2
  297. package/test/util/cmcd_manager_unit.js +0 -3
  298. package/test/util/data_view_reader_unit.js +0 -4
  299. package/test/util/ebml_parser_unit.js +0 -4
  300. package/test/util/event_manager_unit.js +0 -3
  301. package/test/util/fake_event_target_unit.js +0 -5
  302. package/test/util/functional_unit.js +1 -1
  303. package/test/util/iterables_unit.js +0 -64
  304. package/test/util/language_utils_unit.js +0 -3
  305. package/test/util/manifest_parser_utils_unit.js +0 -2
  306. package/test/util/mp4_box_parsers_unit.js +0 -5
  307. package/test/util/mp4_parser_unit.js +0 -4
  308. package/test/util/multi_map_unit.js +0 -3
  309. package/test/util/object_utils_unit.js +0 -2
  310. package/test/util/periods_unit.js +14 -7
  311. package/test/util/pssh_unit.js +0 -5
  312. package/test/util/state_history_unit.js +0 -2
  313. package/test/util/stream_utils_unit.js +3 -8
  314. package/test/util/string_utils_unit.js +0 -6
  315. package/test/util/text_parser_unit.js +0 -2
  316. package/test/util/xml_utils_unit.js +0 -4
  317. package/ui/less/ad_controls.less +4 -4
  318. package/ui/less/buttons.less +5 -5
  319. package/ui/less/containers.less +9 -11
  320. package/ui/less/overflow_menu.less +4 -4
  321. package/ui/less/range_elements.less +5 -0
  322. package/ui/less/tooltip.less +1 -1
  323. package/ui/locales/sjn-translations.yaml +257 -0
  324. package/ui/locales/sjn.json +42 -0
  325. package/.github/workflows/build_and_test.yaml +0 -73
  326. package/.github/workflows/release.yaml +0 -53
  327. package/externs/svgelement.js +0 -18
  328. package/externs/webcrypto.js +0 -18
@@ -4,14 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.Waiter');
8
-
9
- goog.require('shaka.log');
10
- goog.require('shaka.media.TimeRangesUtils');
11
- goog.require('shaka.test.Util');
12
- goog.require('shaka.util.EventManager');
13
-
14
-
15
7
  shaka.test.Waiter = class {
16
8
  /** @param {!shaka.util.EventManager} eventManager */
17
9
  constructor(eventManager) {
@@ -23,6 +15,12 @@ shaka.test.Waiter = class {
23
15
 
24
16
  /** @private {number} */
25
17
  this.timeoutSeconds_ = 5;
18
+
19
+ /** @private {shaka.Player} */
20
+ this.player_ = null;
21
+
22
+ /** @private {shaka.media.MediaSourceEngine} */
23
+ this.mediaSourceEngine_ = null;
26
24
  }
27
25
 
28
26
  // TODO: Consider replacing this with a settings argument on the individual
@@ -51,6 +49,30 @@ shaka.test.Waiter = class {
51
49
  return this;
52
50
  }
53
51
 
52
+ /**
53
+ * For tests with access to MediaSourceEngine, this can provide better
54
+ * debugging for buffered ranges on failure.
55
+ *
56
+ * @param {shaka.Player} player
57
+ * @return {!shaka.test.Waiter}
58
+ */
59
+ setPlayer(player) {
60
+ this.player_ = player;
61
+ return this;
62
+ }
63
+
64
+ /**
65
+ * For tests with access to MediaSourceEngine, this can provide better
66
+ * debugging for buffered ranges on failure.
67
+ *
68
+ * @param {shaka.media.MediaSourceEngine} mediaSourceEngine
69
+ * @return {!shaka.test.Waiter}
70
+ */
71
+ setMediaSourceEngine(mediaSourceEngine) {
72
+ this.mediaSourceEngine_ = mediaSourceEngine;
73
+ return this;
74
+ }
75
+
54
76
  /**
55
77
  * Wait for the video playhead to move forward by some meaningful delta. The
56
78
  * Promise is resolved when the playhead moves or the video ends.
@@ -109,7 +131,6 @@ shaka.test.Waiter = class {
109
131
  return this.waitUntilGeneric_(goalName, p, cleanup, mediaElement);
110
132
  }
111
133
 
112
-
113
134
  /**
114
135
  * Wait for the video playhead to reach a certain target time.
115
136
  * If the playhead reaches |timeGoal| or the video ends before |timeout|
@@ -132,40 +153,51 @@ shaka.test.Waiter = class {
132
153
  * @return {!Promise}
133
154
  */
134
155
  waitForEnd(mediaElement) {
135
- // Sometimes, the ended flag is not set, or the event does not fire,
136
- // (I'm looking at **you**, Safari), so also check if we've reached the
137
- // duration.
138
- if (mediaElement.ended ||
139
- mediaElement.currentTime >= mediaElement.duration) {
140
- return Promise.resolve();
141
- }
142
-
143
156
  // The name of what we're waiting for.
144
157
  const goalName = 'end of media';
145
158
 
159
+ // The conditions for success. Don't rely on either time, or the ended
160
+ // flag, or the ended event, specifically. Any of these is sufficient.
161
+ // This flexibility cuts down on test flake on Safari (currently 14) in
162
+ // particular, where the flag might be set, but the ended event did not
163
+ // fire. We also see flake on Firefox (currently 99), where test playbacks
164
+ // sometimes stop right before duration is reached. (Duration 60.01, audio
165
+ // buffered to 60.01, video buffered to exactly 60.)
166
+ const hasEnded = () => {
167
+ return mediaElement.currentTime >= mediaElement.duration - 0.1 ||
168
+ mediaElement.ended;
169
+ };
170
+
171
+ if (hasEnded()) {
172
+ return Promise.resolve();
173
+ }
174
+
146
175
  // Cleanup on timeout.
176
+ let timer = null;
147
177
  const cleanup = () => {
178
+ if (timer) {
179
+ timer.stop();
180
+ }
148
181
  this.eventManager_.unlisten(mediaElement, 'timeupdate');
149
182
  this.eventManager_.unlisten(mediaElement, 'ended');
150
183
  };
151
184
 
152
- // The conditions for success. Don't rely on either time, or the ended
153
- // flag, or the ended event, specifically. Any of these is sufficient.
154
- // This flexibility cuts down on test flake on Safari (currently 14) in
155
- // particular, where the flag might be set, but the ended event did not
156
- // fire.
157
185
  const p = new Promise((resolve) => {
158
- this.eventManager_.listen(mediaElement, 'timeupdate', () => {
159
- if (mediaElement.currentTime >= mediaElement.duration ||
160
- mediaElement.ended) {
186
+ const check = () => {
187
+ if (hasEnded()) {
161
188
  cleanup();
162
189
  resolve();
163
190
  }
164
- });
165
- this.eventManager_.listen(mediaElement, 'ended', () => {
166
- cleanup();
167
- resolve();
168
- });
191
+ };
192
+
193
+ // In Firefox 99, there appears to be some bug in the browser preventing
194
+ // events from being triggered at the end of the presentation. So we
195
+ // check for the end once per second. Without this, StreamingEngine
196
+ // integration tests were failing.
197
+ timer = new shaka.util.Timer(check);
198
+ timer.tickEvery(/* seconds= */ 1);
199
+ this.eventManager_.listen(mediaElement, 'timeupdate', check);
200
+ this.eventManager_.listen(mediaElement, 'ended', check);
169
201
  });
170
202
 
171
203
  return this.waitUntilGeneric_(goalName, p, cleanup, mediaElement);
@@ -263,7 +295,7 @@ shaka.test.Waiter = class {
263
295
 
264
296
  // Improve the error message with media-specific debug info.
265
297
  if (target instanceof HTMLMediaElement) {
266
- this.logDebugInfoForMedia_(error.message, target);
298
+ this.logDebugInfoForMedia_(error, target);
267
299
  }
268
300
 
269
301
  // Reject or resolve based on our settings.
@@ -276,20 +308,29 @@ shaka.test.Waiter = class {
276
308
  }
277
309
 
278
310
  /**
279
- * @param {string} message
311
+ * @param {!Error} error
280
312
  * @param {!HTMLMediaElement} mediaElement
281
313
  * @private
282
314
  */
283
- logDebugInfoForMedia_(message, mediaElement) {
284
- const buffered =
285
- shaka.media.TimeRangesUtils.getBufferedInfo(mediaElement.buffered);
286
- shaka.log.error(message,
287
- 'current time', mediaElement.currentTime,
288
- 'duration', mediaElement.duration,
289
- 'ready state', mediaElement.readyState,
290
- 'playback rate', mediaElement.playbackRate,
291
- 'paused', mediaElement.paused,
292
- 'ended', mediaElement.ended,
293
- 'buffered', buffered);
315
+ logDebugInfoForMedia_(error, mediaElement) {
316
+ let buffered;
317
+ if (this.player_) {
318
+ buffered = this.player_.getBufferedInfo();
319
+ } else if (this.mediaSourceEngine_) {
320
+ buffered = this.mediaSourceEngine_.getBufferedInfo();
321
+ } else {
322
+ buffered = shaka.media.TimeRangesUtils.getBufferedInfo(
323
+ mediaElement.buffered);
324
+ }
325
+
326
+ error.message += '\n' +
327
+ `current time: ${mediaElement.currentTime}\n` +
328
+ `duration: ${mediaElement.duration}\n` +
329
+ `ready state: ${mediaElement.readyState}\n` +
330
+ `playback rate: ${mediaElement.playbackRate}\n` +
331
+ `paused: ${mediaElement.paused}\n` +
332
+ `ended: ${mediaElement.ended}\n` +
333
+ `buffered: ${JSON.stringify(buffered)}\n`;
334
+ shaka.log.error(error.message);
294
335
  }
295
336
  };
@@ -4,10 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.text.VttTextParser');
8
- goog.require('shaka.util.BufferUtils');
9
- goog.require('shaka.util.StringUtils');
10
-
11
7
  describe('Cue', () => {
12
8
  // This integration test checks platform support for various cue scenarios
13
9
  // that have caused platform-specific issues. The unit tests for each parser
@@ -4,10 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.text.LrcTextParser');
8
- goog.require('shaka.util.BufferUtils');
9
- goog.require('shaka.util.StringUtils');
10
-
11
7
  describe('LrcTextParser', () => {
12
8
  it('supports no cues', () => {
13
9
  verifyHelper([],
@@ -4,12 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.test.TtmlUtils');
8
- goog.require('shaka.test.Util');
9
- goog.require('shaka.text.Mp4TtmlParser');
10
- goog.require('shaka.util.BufferUtils');
11
- goog.require('shaka.util.Error');
12
-
13
7
  describe('Mp4TtmlParser', () => {
14
8
  const ttmlInitSegmentUri = '/base/test/test/assets/ttml-init.mp4';
15
9
  const ttmlSegmentUri = '/base/test/test/assets/ttml-segment.mp4';
@@ -4,12 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.test.Util');
8
- goog.require('shaka.text.Cue');
9
- goog.require('shaka.text.Mp4VttParser');
10
- goog.require('shaka.util.BufferUtils');
11
- goog.require('shaka.util.Error');
12
-
13
7
  describe('Mp4VttParser', () => {
14
8
  const vttInitSegmentUri = '/base/test/test/assets/vtt-init.mp4';
15
9
  const vttSegmentUri = '/base/test/test/assets/vtt-segment.mp4';
@@ -133,7 +127,7 @@ describe('Mp4VttParser', () => {
133
127
  });
134
128
 
135
129
  it('parses media segments without a sample duration', () => {
136
- // Regression test for https://github.com/google/shaka-player/issues/919
130
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/919
137
131
  const cues = [
138
132
  {startTime: 10, endTime: 11, payload: 'cue 10'},
139
133
  {startTime: 11, endTime: 12, payload: 'cue 11'},
@@ -4,10 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.text.SbvTextParser');
8
- goog.require('shaka.util.BufferUtils');
9
- goog.require('shaka.util.StringUtils');
10
-
11
7
  describe('SbvTextParser', () => {
12
8
  it('supports no cues', () => {
13
9
  verifyHelper([],
@@ -4,13 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
-
8
- goog.require('shaka.test.FakeVideo');
9
- goog.require('shaka.text.Cue');
10
- goog.require('shaka.text.SimpleTextDisplayer');
11
- goog.require('shaka.util.Functional');
12
- goog.requireType('shaka.test.FakeTextTrack');
13
-
14
7
  describe('SimpleTextDisplayer', () => {
15
8
  const originalVTTCue = window.VTTCue;
16
9
  const Cue = shaka.text.Cue;
@@ -74,7 +67,7 @@ describe('SimpleTextDisplayer', () => {
74
67
  });
75
68
 
76
69
  it('appends equal time cues in reverse order', () => {
77
- // Regression test for https://github.com/google/shaka-player/issues/848
70
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/848
78
71
 
79
72
  // When VTTCue is seen as the real thing (because of the presence of
80
73
  // VTTCue.prototype.line), then the reverse-order behavior comes into
@@ -4,10 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.text.SrtTextParser');
8
- goog.require('shaka.util.BufferUtils');
9
- goog.require('shaka.util.StringUtils');
10
-
11
7
  describe('SrtTextParser', () => {
12
8
  it('supports no cues', () => {
13
9
  verifyHelper([],
@@ -4,11 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.text.Cue');
8
- goog.require('shaka.text.SsaTextParser');
9
- goog.require('shaka.util.BufferUtils');
10
- goog.require('shaka.util.StringUtils');
11
-
12
7
  describe('SsaTextParser', () => {
13
8
  const Cue = shaka.text.Cue;
14
9
 
@@ -4,11 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.test.FakeTextDisplayer');
8
- goog.require('shaka.text.Cue');
9
- goog.require('shaka.text.TextEngine');
10
- goog.require('shaka.util.MimeUtils');
11
-
12
7
  describe('TextEngine', () => {
13
8
  const TextEngine = shaka.text.TextEngine;
14
9
 
@@ -336,7 +331,7 @@ describe('TextEngine', () => {
336
331
  it('does not use timestamp offset', async () => {
337
332
  // The start and end times passed to appendBuffer are now absolute, so
338
333
  // they already account for timestampOffset and period offset.
339
- // See https://github.com/google/shaka-player/issues/1562
334
+ // See https://github.com/shaka-project/shaka-player/issues/1562
340
335
  textEngine.setTimestampOffset(60);
341
336
  await textEngine.appendBuffer(dummyData, 0, 3);
342
337
  expect(textEngine.bufferStart()).toBe(0);
@@ -379,7 +374,7 @@ describe('TextEngine', () => {
379
374
  it('does not use timestamp offset', async () => {
380
375
  // The start and end times passed to appendBuffer are now absolute, so
381
376
  // they already account for timestampOffset and period offset.
382
- // See https://github.com/google/shaka-player/issues/1562
377
+ // See https://github.com/shaka-project/shaka-player/issues/1562
383
378
  textEngine.setTimestampOffset(60);
384
379
  await textEngine.appendBuffer(dummyData, 3, 6);
385
380
  expect(textEngine.bufferedAheadOf(4)).toBe(2);
@@ -4,8 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.test.UiUtils');
8
-
9
7
  // This tests three assumptions we make about text tracks in Shaka Player:
10
8
  // 1. If a non-null value for cues is stored, it will always be the
11
9
  // non-null value for cues when cues returns a non-null value.
@@ -4,15 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.test.TtmlUtils');
8
- goog.require('shaka.test.Util');
9
- goog.require('shaka.text.Cue');
10
- goog.require('shaka.text.CueRegion');
11
- goog.require('shaka.text.TtmlTextParser');
12
- goog.require('shaka.util.BufferUtils');
13
- goog.require('shaka.util.Error');
14
- goog.require('shaka.util.StringUtils');
15
-
16
7
  describe('TtmlTextParser', () => {
17
8
  const Cue = shaka.text.Cue;
18
9
  const CueRegion = shaka.text.CueRegion;
@@ -1718,7 +1709,7 @@ describe('TtmlTextParser', () => {
1718
1709
  {startTime: 1, endTime: 4});
1719
1710
  });
1720
1711
 
1721
- // Regression test for https://github.com/google/shaka-player/issues/2478
1712
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/2478
1722
1713
  it('supports nested cues with only non-ASCII characters', () => {
1723
1714
  verifyHelper(
1724
1715
  [
@@ -1920,7 +1911,7 @@ describe('TtmlTextParser', () => {
1920
1911
  );
1921
1912
  });
1922
1913
 
1923
- // Regression test for https://github.com/google/shaka-player/issues/3743
1914
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/3743
1924
1915
  it('inherits styles from other styles on nestedCues', () => {
1925
1916
  verifyHelper(
1926
1917
  [
@@ -4,10 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.test.Util');
8
- goog.require('shaka.text.Cue');
9
- goog.require('shaka.text.UITextDisplayer');
10
-
11
7
  describe('UITextDisplayer', () => {
12
8
  /** @type {!HTMLElement} */
13
9
  let videoContainer;
@@ -65,7 +61,18 @@ describe('UITextDisplayer', () => {
65
61
  document.body.removeChild(videoContainer);
66
62
  });
67
63
 
68
- it('correctly displays styles for cues', async () => {
64
+ /**
65
+ * @suppress {visibility}
66
+ * "suppress visibility" has function scope, so this is a mini-function that
67
+ * exists solely to suppress visibility rules for these actions.
68
+ */
69
+ function updateCaptions() {
70
+ // Rather than wait for a timer, which can be unreliable on Safari when the
71
+ // device is heavily loaded, trigger the update explicitly.
72
+ textDisplayer.updateCaptions_();
73
+ }
74
+
75
+ it('correctly displays styles for cues', () => {
69
76
  /** @type {!shaka.text.Cue} */
70
77
  const cue = new shaka.text.Cue(0, 100, 'Captain\'s log.');
71
78
  cue.color = 'green';
@@ -81,8 +88,7 @@ describe('UITextDisplayer', () => {
81
88
 
82
89
  textDisplayer.setTextVisibility(true);
83
90
  textDisplayer.append([cue]);
84
- // Wait until updateCaptions_() gets called.
85
- await shaka.test.Util.delay(0.5);
91
+ updateCaptions();
86
92
 
87
93
  const textContainer = videoContainer.querySelector('.shaka-text-container');
88
94
  const captions = textContainer.querySelector('div');
@@ -114,7 +120,7 @@ describe('UITextDisplayer', () => {
114
120
  .toEqual(jasmine.objectContaining({'background-color': 'black'}));
115
121
  });
116
122
 
117
- it('correctly displays styles for nested cues', async () => {
123
+ it('correctly displays styles for nested cues', () => {
118
124
  /** @type {!shaka.text.Cue} */
119
125
  const cue = new shaka.text.Cue(0, 100, '');
120
126
  const nestedCue = new shaka.text.Cue(0, 100, 'Captain\'s log.');
@@ -131,8 +137,7 @@ describe('UITextDisplayer', () => {
131
137
 
132
138
  textDisplayer.setTextVisibility(true);
133
139
  textDisplayer.append([cue]);
134
- // Wait until updateCaptions_() gets called.
135
- await shaka.test.Util.delay(0.5);
140
+ updateCaptions();
136
141
 
137
142
  // Verify styles applied to the nested cues.
138
143
  const textContainer = videoContainer.querySelector('.shaka-text-container');
@@ -165,7 +170,7 @@ describe('UITextDisplayer', () => {
165
170
  .toEqual(jasmine.objectContaining({'background-color': 'black'}));
166
171
  });
167
172
 
168
- it('correctly displays styles for cellResolution units', async () => {
173
+ it('correctly displays styles for cellResolution units', () => {
169
174
  /** @type {!shaka.text.Cue} */
170
175
  const cue = new shaka.text.Cue(0, 100, 'Captain\'s log.');
171
176
  cue.fontSize = '0.80c';
@@ -177,8 +182,7 @@ describe('UITextDisplayer', () => {
177
182
 
178
183
  textDisplayer.setTextVisibility(true);
179
184
  textDisplayer.append([cue]);
180
- // Wait until updateCaptions_() gets called.
181
- await shaka.test.Util.delay(0.5);
185
+ updateCaptions();
182
186
 
183
187
  // Expected value is calculated based on ttp:cellResolution="60 20"
184
188
  // videoContainerHeight=450px and tts:fontSize="0.80c" on the default style.
@@ -200,7 +204,7 @@ describe('UITextDisplayer', () => {
200
204
  }));
201
205
  });
202
206
 
203
- it('correctly displays styles for percentages units', async () => {
207
+ it('correctly displays styles for percentages units', () => {
204
208
  /** @type {!shaka.text.Cue} */
205
209
  const cue = new shaka.text.Cue(0, 100, 'Captain\'s log.');
206
210
  cue.fontSize = '90%';
@@ -211,8 +215,7 @@ describe('UITextDisplayer', () => {
211
215
 
212
216
  textDisplayer.setTextVisibility(true);
213
217
  textDisplayer.append([cue]);
214
- // Wait until updateCaptions_() gets called.
215
- await shaka.test.Util.delay(0.5);
218
+ updateCaptions();
216
219
 
217
220
  // Expected value is calculated based on ttp:cellResolution="32 15"
218
221
  // videoContainerHeight=450px and tts:fontSize="90%" on the default style.
@@ -225,15 +228,15 @@ describe('UITextDisplayer', () => {
225
228
  jasmine.objectContaining({'font-size': expectedFontSize}));
226
229
  });
227
230
 
228
- it('does not display duplicate cues', async () => {
231
+ it('does not display duplicate cues', () => {
229
232
  // These are identical.
230
233
  const cue1 = new shaka.text.Cue(0, 100, 'Captain\'s log.');
231
234
  const cue2 = new shaka.text.Cue(0, 100, 'Captain\'s log.');
232
235
 
233
236
  textDisplayer.setTextVisibility(true);
234
237
  textDisplayer.append([cue1]);
235
- // Wait until updateCaptions_() gets called.
236
- await shaka.test.Util.delay(0.5);
238
+ updateCaptions();
239
+
237
240
  /** @type {Element} */
238
241
  const textContainer = videoContainer.querySelector('.shaka-text-container');
239
242
  let captions = textContainer.querySelectorAll('div');
@@ -241,14 +244,14 @@ describe('UITextDisplayer', () => {
241
244
  expect(captions.length).toBe(1);
242
245
 
243
246
  textDisplayer.append([cue2]);
244
- // Wait until updateCaptions_() gets called.
245
- await shaka.test.Util.delay(0.5);
247
+ updateCaptions();
248
+
246
249
  captions = textContainer.querySelectorAll('div');
247
250
  // Expect textContainer to display one cue without duplication.
248
251
  expect(captions.length).toBe(1);
249
252
  });
250
253
 
251
- it('does not mistake cues with nested cues as duplicates', async () => {
254
+ it('does not mistake cues with nested cues as duplicates', () => {
252
255
  // These are not identical, but might look like it at the top level.
253
256
  const cue1 = new shaka.text.Cue(0, 100, '');
254
257
  cue1.nestedCues = [
@@ -265,8 +268,8 @@ describe('UITextDisplayer', () => {
265
268
 
266
269
  textDisplayer.setTextVisibility(true);
267
270
  textDisplayer.append([cue1]);
268
- // Wait until updateCaptions_() gets called.
269
- await shaka.test.Util.delay(0.5);
271
+ updateCaptions();
272
+
270
273
  /** @type {Element} */
271
274
  const textContainer = videoContainer.querySelector('.shaka-text-container');
272
275
  let captions = textContainer.querySelectorAll('div');
@@ -274,15 +277,15 @@ describe('UITextDisplayer', () => {
274
277
  expect(captions.length).toBe(1);
275
278
 
276
279
  textDisplayer.append([cue2, cue3]);
277
- // Wait until updateCaptions_() gets called.
278
- await shaka.test.Util.delay(0.5);
280
+ updateCaptions();
281
+
279
282
  captions = textContainer.querySelectorAll('div');
280
283
  // Expect textContainer to display all three cues, since they are not truly
281
284
  // duplicates.
282
285
  expect(captions.length).toBe(3);
283
286
  });
284
287
 
285
- it('does not mistake cues with different styles duplicates', async () => {
288
+ it('does not mistake cues with different styles duplicates', () => {
286
289
  // These all have the same text and timing, but different styles.
287
290
  const cue1 = new shaka.text.Cue(0, 100, 'Hello!');
288
291
  cue1.color = 'green';
@@ -296,8 +299,8 @@ describe('UITextDisplayer', () => {
296
299
 
297
300
  textDisplayer.setTextVisibility(true);
298
301
  textDisplayer.append([cue1]);
299
- // Wait until updateCaptions_() gets called.
300
- await shaka.test.Util.delay(0.5);
302
+ updateCaptions();
303
+
301
304
  /** @type {Element} */
302
305
  const textContainer = videoContainer.querySelector('.shaka-text-container');
303
306
  let captions = textContainer.querySelectorAll('div');
@@ -305,20 +308,20 @@ describe('UITextDisplayer', () => {
305
308
  expect(captions.length).toBe(1);
306
309
 
307
310
  textDisplayer.append([cue2, cue3]);
308
- // Wait until updateCaptions_() gets called.
309
- await shaka.test.Util.delay(0.5);
311
+ updateCaptions();
312
+
310
313
  captions = textContainer.querySelectorAll('div');
311
314
  // Expect textContainer to display all three cues, since they are not truly
312
315
  // duplicates.
313
316
  expect(captions.length).toBe(3);
314
317
  });
315
318
 
316
- it('hides currently displayed cue when removed', async () => {
319
+ it('hides currently displayed cue when removed', () => {
317
320
  const cue = new shaka.text.Cue(0, 50, 'One');
318
321
  textDisplayer.setTextVisibility(true);
319
322
  textDisplayer.append([cue]);
320
323
  video.currentTime = 10;
321
- await shaka.test.Util.delay(0.5);
324
+ updateCaptions();
322
325
  const textContainer = videoContainer.querySelector('.shaka-text-container');
323
326
 
324
327
  let cueElements = textContainer.querySelectorAll('div');
@@ -331,7 +334,7 @@ describe('UITextDisplayer', () => {
331
334
  expect(cueElements.length).toBe(0);
332
335
  });
333
336
 
334
- it('hides and shows nested cues at appropriate times', async () => {
337
+ it('hides and shows nested cues at appropriate times', () => {
335
338
  const parentCue1 = new shaka.text.Cue(0, 100, '');
336
339
  const cue1 = new shaka.text.Cue(0, 50, 'One');
337
340
  parentCue1.nestedCues.push(cue1);
@@ -348,7 +351,7 @@ describe('UITextDisplayer', () => {
348
351
  textDisplayer.append([parentCue1, parentCue2]);
349
352
 
350
353
  video.currentTime = 10;
351
- await shaka.test.Util.delay(0.5);
354
+ updateCaptions();
352
355
  /** @type {Element} */
353
356
  const textContainer = videoContainer.querySelector('.shaka-text-container');
354
357
  let parentCueElements = textContainer.querySelectorAll('div');
@@ -357,38 +360,38 @@ describe('UITextDisplayer', () => {
357
360
  expect(parentCueElements[0].textContent).toBe('One');
358
361
 
359
362
  video.currentTime = 35;
360
- await shaka.test.Util.delay(0.5);
363
+ updateCaptions();
361
364
  parentCueElements = textContainer.querySelectorAll('div');
362
365
  expect(parentCueElements.length).toBe(1);
363
366
  expect(parentCueElements[0].textContent).toBe('OneTwo');
364
367
 
365
368
  video.currentTime = 60;
366
- await shaka.test.Util.delay(0.5);
369
+ updateCaptions();
367
370
  parentCueElements = textContainer.querySelectorAll('div');
368
371
  expect(parentCueElements.length).toBe(1);
369
372
  expect(parentCueElements[0].textContent).toBe('TwoThree');
370
373
 
371
374
  video.currentTime = 85;
372
- await shaka.test.Util.delay(0.5);
375
+ updateCaptions();
373
376
  parentCueElements = textContainer.querySelectorAll('div');
374
377
  expect(parentCueElements.length).toBe(1);
375
378
  expect(parentCueElements[0].textContent).toBe('Three');
376
379
 
377
380
  video.currentTime = 95;
378
- await shaka.test.Util.delay(0.5);
381
+ updateCaptions();
379
382
  parentCueElements = textContainer.querySelectorAll('div');
380
383
  expect(parentCueElements.length).toBe(2);
381
384
  expect(parentCueElements[0].textContent).toBe('Three');
382
385
  expect(parentCueElements[1].textContent).toBe('Four');
383
386
 
384
387
  video.currentTime = 105;
385
- await shaka.test.Util.delay(0.5);
388
+ updateCaptions();
386
389
  parentCueElements = textContainer.querySelectorAll('div');
387
390
  expect(parentCueElements.length).toBe(1);
388
391
  expect(parentCueElements[0].textContent).toBe('Four');
389
392
 
390
393
  video.currentTime = 150;
391
- await shaka.test.Util.delay(0.5);
394
+ updateCaptions();
392
395
  parentCueElements = textContainer.querySelectorAll('div');
393
396
  expect(parentCueElements.length).toBe(1);
394
397
  expect(parentCueElements[0].textContent).toBe('');
@@ -4,15 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.log');
8
- goog.require('shaka.test.Util');
9
- goog.require('shaka.text.Cue');
10
- goog.require('shaka.text.CueRegion');
11
- goog.require('shaka.text.VttTextParser');
12
- goog.require('shaka.util.BufferUtils');
13
- goog.require('shaka.util.Error');
14
- goog.require('shaka.util.StringUtils');
15
-
16
7
  describe('VttTextParser', () => {
17
8
  const Cue = shaka.text.Cue;
18
9
  const CueRegion = shaka.text.CueRegion;
@@ -4,9 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.text.Cue');
8
- goog.require('shaka.text.WebVttGenerator');
9
-
10
7
  describe('WebVttGenerator', () => {
11
8
  it('supports no cues', () => {
12
9
  verifyHelper([], [], 'WEBVTT\n\n');