shaka-player 3.3.2 → 3.3.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 (339) 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 +129 -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 +147 -0
  10. package/.github/workflows/safari-homedir-launcher.sh +18 -0
  11. package/.github/workflows/selenium-lab-tests.yaml +92 -0
  12. package/AUTHORS +2 -0
  13. package/CHANGELOG.md +1718 -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 +3 -3
  59. package/build/checkversion.py +2 -2
  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 +94 -29
  67. package/build/types/core +0 -1
  68. package/build/types/polyfill +1 -0
  69. package/build/wrapper.template.js +2 -2
  70. package/demo/TengwarTelcontar.woff2 +0 -0
  71. package/demo/asset_card.js +1 -2
  72. package/demo/cast_receiver/index.html +1 -1
  73. package/demo/cast_receiver/receiver_app.css +14 -14
  74. package/demo/common/assets.js +2 -0
  75. package/demo/config.js +0 -1
  76. package/demo/custom.js +0 -1
  77. package/demo/customWarning.txt +2 -2
  78. package/demo/demo.less +29 -18
  79. package/demo/demo_uncompiled.js +1 -13
  80. package/demo/index.html +1 -1
  81. package/demo/main.js +3 -3
  82. package/dist/controls.css +3 -3
  83. package/dist/controls.css.map +1 -1
  84. package/dist/demo.compiled.debug.js +191 -194
  85. package/dist/demo.compiled.debug.map +4 -4
  86. package/dist/demo.compiled.js +191 -194
  87. package/dist/demo.compiled.map +4 -4
  88. package/dist/demo.css +1 -1
  89. package/dist/demo.css.map +1 -1
  90. package/dist/deps.js +232 -226
  91. package/dist/locales.js +30 -30
  92. package/dist/receiver.compiled.debug.js +43 -45
  93. package/dist/receiver.compiled.debug.map +4 -4
  94. package/dist/receiver.compiled.js +43 -45
  95. package/dist/receiver.compiled.map +4 -4
  96. package/dist/shaka-player.compiled.d.ts +247 -236
  97. package/dist/shaka-player.compiled.debug.d.ts +247 -236
  98. package/dist/shaka-player.compiled.debug.externs.js +15 -3
  99. package/dist/shaka-player.compiled.debug.js +284 -290
  100. package/dist/shaka-player.compiled.debug.map +4 -4
  101. package/dist/shaka-player.compiled.externs.js +15 -3
  102. package/dist/shaka-player.compiled.js +855 -859
  103. package/dist/shaka-player.compiled.map +4 -4
  104. package/dist/shaka-player.ui.d.ts +291 -280
  105. package/dist/shaka-player.ui.debug.d.ts +291 -280
  106. package/dist/shaka-player.ui.debug.externs.js +15 -3
  107. package/dist/shaka-player.ui.debug.js +296 -302
  108. package/dist/shaka-player.ui.debug.map +4 -4
  109. package/dist/shaka-player.ui.externs.js +15 -3
  110. package/dist/shaka-player.ui.js +1005 -1009
  111. package/dist/shaka-player.ui.map +4 -4
  112. package/docs/design/REDESIGN.md +33 -33
  113. package/docs/design/bg-fetch.md +2 -2
  114. package/docs/design/codec_preferences.md +1 -1
  115. package/docs/design/dash-audio-channels.md +3 -3
  116. package/docs/design/dash-manifests.md +1 -1
  117. package/docs/design/gap-jumping.md +3 -3
  118. package/docs/design/preload.md +2 -2
  119. package/docs/tutorials/faq.md +8 -8
  120. package/docs/tutorials/index.json +1 -0
  121. package/docs/tutorials/plugins.md +3 -3
  122. package/docs/tutorials/selenium-grid-config.md +122 -0
  123. package/docs/tutorials/welcome.md +10 -2
  124. package/externs/cmcd.js +1 -1
  125. package/karma.conf.js +141 -30
  126. package/lib/abr/simple_abr_manager.js +12 -6
  127. package/lib/cast/cast_proxy.js +3 -4
  128. package/lib/cea/cea608_data_channel.js +2 -2
  129. package/lib/cea/cea708_service.js +5 -4
  130. package/lib/cea/mp4_cea_parser.js +11 -5
  131. package/lib/cea/sei_processor.js +6 -3
  132. package/lib/dash/dash_parser.js +11 -14
  133. package/lib/dash/mpd_utils.js +4 -5
  134. package/lib/dash/segment_list.js +1 -2
  135. package/lib/dash/segment_template.js +3 -3
  136. package/lib/hls/hls_parser.js +34 -20
  137. package/lib/hls/manifest_text_parser.js +3 -3
  138. package/lib/media/adaptation_set.js +1 -2
  139. package/lib/media/content_workarounds.js +2 -2
  140. package/lib/media/drm_engine.js +3 -2
  141. package/lib/media/media_source_engine.js +10 -3
  142. package/lib/media/mp4_segment_index_parser.js +1 -4
  143. package/lib/media/playhead.js +2 -2
  144. package/lib/media/presentation_timeline.js +18 -8
  145. package/lib/media/streaming_engine.js +6 -6
  146. package/lib/media/time_ranges_utils.js +1 -3
  147. package/lib/media/video_wrapper.js +1 -1
  148. package/lib/net/networking_engine.js +1 -1
  149. package/lib/offline/indexeddb/storage_mechanism.js +4 -2
  150. package/lib/offline/storage.js +96 -95
  151. package/lib/player.js +190 -114
  152. package/lib/polyfill/all.js +2 -3
  153. package/lib/polyfill/encryption_scheme.js +1 -1
  154. package/lib/polyfill/media_capabilities.js +3 -3
  155. package/lib/polyfill/mediasource.js +1 -1
  156. package/lib/polyfill/symbol.js +46 -0
  157. package/lib/text/cue.js +1 -1
  158. package/lib/text/simple_text_displayer.js +2 -1
  159. package/lib/text/ttml_text_parser.js +8 -5
  160. package/lib/text/ui_text_displayer.js +1 -1
  161. package/lib/util/buffer_utils.js +1 -3
  162. package/lib/util/config_utils.js +25 -0
  163. package/lib/util/ebml_parser.js +3 -3
  164. package/lib/util/error.js +8 -1
  165. package/lib/util/iterables.js +0 -46
  166. package/lib/util/manifest_parser_utils.js +1 -1
  167. package/lib/util/mime_utils.js +48 -1
  168. package/lib/util/mp4_box_parsers.js +1 -4
  169. package/lib/util/mp4_parser.js +5 -7
  170. package/lib/util/periods.js +15 -15
  171. package/lib/util/platform.js +3 -3
  172. package/lib/util/player_configuration.js +9 -14
  173. package/lib/util/pssh.js +1 -4
  174. package/lib/util/stream_utils.js +8 -5
  175. package/lib/util/string_utils.js +3 -5
  176. package/lib/util/uint8array_utils.js +3 -5
  177. package/lib/util/xml_utils.js +15 -7
  178. package/package.json +61 -36
  179. package/roadmap.md +17 -17
  180. package/shaka-player.uncompiled.js +1 -0
  181. package/test/abr/simple_abr_manager_unit.js +3 -8
  182. package/test/ads/ad_manager_unit.js +0 -6
  183. package/test/cast/cast_proxy_unit.js +0 -8
  184. package/test/cast/cast_receiver_integration.js +1 -18
  185. package/test/cast/cast_receiver_unit.js +1 -9
  186. package/test/cast/cast_sender_unit.js +0 -6
  187. package/test/cast/cast_utils_unit.js +1 -13
  188. package/test/cea/cea608_memory_unit.js +0 -5
  189. package/test/cea/cea708_service_unit.js +0 -7
  190. package/test/cea/cea708_window_unit.js +0 -5
  191. package/test/cea/cea_decoder_unit.js +0 -6
  192. package/test/cea/dtvcc_packet_builder_unit.js +0 -3
  193. package/test/cea/dtvcc_packet_unit.js +0 -5
  194. package/test/cea/mp4_cea_parser_unit.js +0 -4
  195. package/test/dash/dash_parser_content_protection_unit.js +1 -10
  196. package/test/dash/dash_parser_live_unit.js +2 -15
  197. package/test/dash/dash_parser_manifest_unit.js +2 -40
  198. package/test/dash/dash_parser_segment_base_unit.js +1 -8
  199. package/test/dash/dash_parser_segment_list_unit.js +1 -7
  200. package/test/dash/dash_parser_segment_template_unit.js +0 -9
  201. package/test/dash/mpd_utils_unit.js +3 -11
  202. package/test/demo/demo_unit.js +0 -5
  203. package/test/deprecate/enforcer_unit.js +0 -4
  204. package/test/deprecate/version_unit.js +0 -2
  205. package/test/hls/hls_live_unit.js +28 -14
  206. package/test/hls/hls_parser_unit.js +2 -15
  207. package/test/hls/manifest_text_parser_unit.js +19 -10
  208. package/test/media/adaptation_set_criteria_unit.js +3 -7
  209. package/test/media/adaptation_set_unit.js +0 -2
  210. package/test/media/buffering_observer_unit.js +1 -4
  211. package/test/media/closed_caption_parser_unit.js +0 -3
  212. package/test/media/drm_engine_integration.js +2 -15
  213. package/test/media/drm_engine_unit.js +4 -24
  214. package/test/media/manifest_parser_unit.js +0 -4
  215. package/test/media/media_source_engine_integration.js +1 -7
  216. package/test/media/media_source_engine_unit.js +5 -18
  217. package/test/media/mp4_segment_index_parser_unit.js +0 -4
  218. package/test/media/play_rate_controller_unit.js +0 -4
  219. package/test/media/playhead_unit.js +8 -16
  220. package/test/media/presentation_timeline_unit.js +4 -7
  221. package/test/media/quality_observer_unit.js +0 -4
  222. package/test/media/region_observer_unit.js +1 -6
  223. package/test/media/region_timeline_unit.js +0 -3
  224. package/test/media/segment_index_unit.js +0 -6
  225. package/test/media/segment_reference_unit.js +0 -3
  226. package/test/media/stall_detector_unit.js +0 -5
  227. package/test/media/streaming_engine_integration.js +11 -36
  228. package/test/media/streaming_engine_unit.js +11 -35
  229. package/test/media/time_ranges_utils_unit.js +0 -2
  230. package/test/media/transmuxer_integration.js +0 -6
  231. package/test/media/webm_segment_index_parser_unit.js +0 -4
  232. package/test/net/data_uri_plugin_unit.js +0 -7
  233. package/test/net/http_plugin_unit.js +0 -9
  234. package/test/net/networking_engine_unit.js +0 -11
  235. package/test/offline/download_progress_estimator_unit.js +0 -2
  236. package/test/offline/indexeddb_storage_unit.js +1 -7
  237. package/test/offline/manifest_convert_unit.js +0 -8
  238. package/test/offline/offline_integration.js +1 -10
  239. package/test/offline/offline_manifest_parser_unit.js +0 -6
  240. package/test/offline/offline_scheme_unit.js +0 -8
  241. package/test/offline/offline_uri_unit.js +0 -2
  242. package/test/offline/storage_compatibility_unit.js +2 -15
  243. package/test/offline/storage_integration.js +1 -27
  244. package/test/player_external.js +9 -11
  245. package/test/player_integration.js +28 -38
  246. package/test/player_load_graph_integration.js +1 -6
  247. package/test/player_src_equals_external.js +3 -9
  248. package/test/player_src_equals_integration.js +81 -90
  249. package/test/player_unit.js +150 -38
  250. package/test/routing/walker_unit.js +0 -8
  251. package/test/test/assets/large_file.mpd +1 -1
  252. package/test/test/boot.js +84 -22
  253. package/test/test/externs/filters.js +4 -0
  254. package/test/test/externs/jasmine.js +2 -2
  255. package/test/test/externs/karma.js +4 -0
  256. package/test/test/namespace.js +10 -0
  257. package/test/test/util/canned_idb.js +0 -8
  258. package/test/test/util/cea_utils.js +0 -6
  259. package/test/test/util/dash_parser_util.js +0 -13
  260. package/test/test/util/fake_ad.js +0 -3
  261. package/test/test/util/fake_ad_manager.js +0 -9
  262. package/test/test/util/fake_demo_main.js +0 -5
  263. package/test/test/util/fake_drm_engine.js +0 -6
  264. package/test/test/util/fake_media_source_engine.js +0 -7
  265. package/test/test/util/fake_networking_engine.js +0 -5
  266. package/test/test/util/fake_text_displayer.js +0 -5
  267. package/test/test/util/indexeddb_utils.js +1 -10
  268. package/test/test/util/jasmine_fetch.js +0 -1
  269. package/test/test/util/loader.js +0 -18
  270. package/test/test/util/manifest_generator.js +9 -14
  271. package/test/test/util/manifest_parser_util.js +0 -6
  272. package/test/test/util/offline_utils.js +0 -5
  273. package/test/test/util/simple_fakes.js +40 -28
  274. package/test/test/util/stream_generator.js +0 -14
  275. package/test/test/util/streaming_engine_util.js +0 -15
  276. package/test/test/util/test_scheme.js +1 -19
  277. package/test/test/util/ttml_utils.js +0 -2
  278. package/test/test/util/ui_utils.js +0 -9
  279. package/test/test/util/util.js +5 -19
  280. package/test/test/util/waiter.js +84 -43
  281. package/test/text/cue_integration.js +0 -4
  282. package/test/text/lrc_text_parser_unit.js +0 -4
  283. package/test/text/mp4_ttml_parser_unit.js +0 -6
  284. package/test/text/mp4_vtt_parser_unit.js +1 -7
  285. package/test/text/sbv_text_parser_unit.js +0 -4
  286. package/test/text/simple_text_displayer_unit.js +1 -8
  287. package/test/text/srt_text_parser_unit.js +0 -4
  288. package/test/text/ssa_text_parser_unit.js +0 -5
  289. package/test/text/text_engine_unit.js +2 -7
  290. package/test/text/text_track_integration.js +0 -2
  291. package/test/text/ttml_text_parser_unit.js +2 -11
  292. package/test/text/ui_text_displayer_unit.js +44 -41
  293. package/test/text/vtt_text_parser_unit.js +0 -9
  294. package/test/text/web_vtt_generator_unit.js +0 -3
  295. package/test/ui/ad_ui_unit.js +0 -11
  296. package/test/ui/localization_unit.js +0 -3
  297. package/test/ui/text_displayer_layout_unit.js +1 -12
  298. package/test/ui/ui_customization_unit.js +0 -6
  299. package/test/ui/ui_integration.js +0 -16
  300. package/test/ui/ui_unit.js +1 -17
  301. package/test/util/abortable_operation_unit.js +4 -9
  302. package/test/util/array_utils_unit.js +0 -2
  303. package/test/util/buffer_utils_unit.js +0 -2
  304. package/test/util/cmcd_manager_unit.js +0 -3
  305. package/test/util/data_view_reader_unit.js +0 -4
  306. package/test/util/ebml_parser_unit.js +0 -4
  307. package/test/util/event_manager_unit.js +0 -3
  308. package/test/util/fake_event_target_unit.js +0 -5
  309. package/test/util/functional_unit.js +1 -1
  310. package/test/util/iterables_unit.js +0 -64
  311. package/test/util/language_utils_unit.js +0 -3
  312. package/test/util/manifest_parser_utils_unit.js +0 -2
  313. package/test/util/mime_utils_unit.js +54 -0
  314. package/test/util/mp4_box_parsers_unit.js +0 -5
  315. package/test/util/mp4_parser_unit.js +0 -4
  316. package/test/util/multi_map_unit.js +0 -3
  317. package/test/util/object_utils_unit.js +0 -2
  318. package/test/util/periods_unit.js +93 -7
  319. package/test/util/pssh_unit.js +0 -5
  320. package/test/util/state_history_unit.js +0 -2
  321. package/test/util/stream_utils_unit.js +3 -8
  322. package/test/util/string_utils_unit.js +0 -6
  323. package/test/util/text_parser_unit.js +0 -2
  324. package/test/util/xml_utils_unit.js +0 -4
  325. package/ui/less/ad_controls.less +6 -6
  326. package/ui/less/buttons.less +6 -6
  327. package/ui/less/containers.less +13 -15
  328. package/ui/less/overflow_menu.less +4 -4
  329. package/ui/less/range_elements.less +7 -2
  330. package/ui/less/tooltip.less +4 -4
  331. package/ui/locales/sjn-translations.yaml +257 -0
  332. package/ui/locales/sjn.json +42 -0
  333. package/ui/seek_bar.js +2 -1
  334. package/.github/workflows/build_and_test.yaml +0 -73
  335. package/.github/workflows/release.yaml +0 -53
  336. package/docs/tutorials/gsoc-ideas-list.md +0 -3
  337. package/externs/svgelement.js +0 -18
  338. package/externs/webcrypto.js +0 -18
  339. package/lib/util/mutex.js +0 -52
@@ -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.Player');
9
- goog.require('shaka.log');
10
- goog.require('shaka.media.BufferingObserver');
11
- goog.require('shaka.media.ManifestParser');
12
- goog.require('shaka.media.PresentationTimeline');
13
- goog.require('shaka.media.SegmentReference');
14
- goog.require('shaka.media.SegmentIndex');
15
- goog.require('shaka.test.FakeAbrManager');
16
- goog.require('shaka.test.FakeDrmEngine');
17
- goog.require('shaka.test.FakeManifestParser');
18
- goog.require('shaka.test.FakeNetworkingEngine');
19
- goog.require('shaka.test.FakePlayhead');
20
- goog.require('shaka.test.FakeStreamingEngine');
21
- goog.require('shaka.test.FakeTextDisplayer');
22
- goog.require('shaka.test.FakeVideo');
23
- goog.require('shaka.test.ManifestGenerator');
24
- goog.require('shaka.test.Util');
25
- goog.require('shaka.util.ConfigUtils');
26
- goog.require('shaka.util.Error');
27
- goog.require('shaka.util.Iterables');
28
- goog.require('shaka.util.ManifestParserUtils');
29
- goog.requireType('shaka.media.Playhead');
30
-
31
7
  describe('Player', () => {
32
8
  const ContentType = shaka.util.ManifestParserUtils.ContentType;
33
9
  const Util = shaka.test.Util;
@@ -146,7 +122,13 @@ describe('Player', () => {
146
122
 
147
123
  player.createDrmEngine = () => drmEngine;
148
124
  player.createNetworkingEngine = () => networkingEngine;
149
- player.createPlayhead = () => playhead;
125
+ player.createPlayhead = (startTime) => {
126
+ const callableSetStartTime =
127
+ shaka.test.Util.spyFunc(playhead.setStartTime);
128
+ callableSetStartTime(startTime);
129
+ playhead.setStartTime.calls.reset();
130
+ return playhead;
131
+ };
150
132
  player.createMediaSourceEngine = () => mediaSourceEngine;
151
133
  player.createStreamingEngine = () => streamingEngine;
152
134
  }
@@ -178,6 +160,7 @@ describe('Player', () => {
178
160
  window.MediaSource.isTypeSupported = originalIsTypeSupported;
179
161
  shaka.media.ManifestParser.unregisterParserByMime(fakeMimeType);
180
162
  navigator.mediaCapabilities.decodingInfo = originalDecodingInfo;
163
+ onError.calls.reset();
181
164
  }
182
165
  });
183
166
 
@@ -325,7 +308,7 @@ describe('Player', () => {
325
308
  // We used to fire the event /before/ filtering, which meant that for
326
309
  // multi-codec content, the application might select something which will
327
310
  // later be removed during filtering.
328
- // https://github.com/google/shaka-player/issues/1119
311
+ // https://github.com/shaka-project/shaka-player/issues/1119
329
312
  it('fires after tracks have been filtered', async () => {
330
313
  streamingListener.and.callFake(() => {
331
314
  const tracks = player.getVariantTracks();
@@ -621,7 +604,7 @@ describe('Player', () => {
621
604
  expect(logWarnSpy).not.toHaveBeenCalled();
622
605
  });
623
606
 
624
- // Regression test for https://github.com/google/shaka-player/issues/784
607
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/784
625
608
  it('does not throw when overwriting serverCertificate', () => {
626
609
  player.configure({
627
610
  drm: {
@@ -687,9 +670,9 @@ describe('Player', () => {
687
670
  });
688
671
 
689
672
  it('configures play and seek range for VOD', async () => {
690
- player.configure({playRangeStart: 5, playRangeEnd: 10});
691
673
  const timeline = new shaka.media.PresentationTimeline(300, 0);
692
674
  timeline.setStatic(true);
675
+ timeline.setDuration(300);
693
676
  manifest = shaka.test.ManifestGenerator.generate((manifest) => {
694
677
  manifest.presentationTimeline = timeline;
695
678
  manifest.addVariant(0, (variant) => {
@@ -697,7 +680,46 @@ describe('Player', () => {
697
680
  });
698
681
  });
699
682
  goog.asserts.assert(manifest, 'manifest must be non-null');
683
+
684
+ player.configure({playRangeStart: 5, playRangeEnd: 10});
700
685
  await player.load(fakeManifestUri, 0, fakeMimeType);
686
+
687
+ const seekRange = player.seekRange();
688
+ expect(seekRange.start).toBe(5);
689
+ expect(seekRange.end).toBe(10);
690
+ });
691
+
692
+ // Test for https://github.com/shaka-project/shaka-player/issues/4026
693
+ it('configures play and seek range with notifySegments', async () => {
694
+ const timeline = new shaka.media.PresentationTimeline(300, 0);
695
+ timeline.setStatic(true);
696
+ // This duration is used by useSegmentTemplate below to decide how many
697
+ // references to generate.
698
+ timeline.setDuration(300);
699
+ manifest = shaka.test.ManifestGenerator.generate((manifest) => {
700
+ manifest.presentationTimeline = timeline;
701
+ manifest.addVariant(0, (variant) => {
702
+ variant.addVideo(1, (stream) => {
703
+ stream.useSegmentTemplate(
704
+ '$Number$.mp4', /* segmentDuration= */ 10);
705
+ });
706
+ });
707
+ });
708
+ goog.asserts.assert(manifest, 'manifest must be non-null');
709
+
710
+ // Explicitly notify the timeline of the segment references.
711
+ const videoStream = manifest.variants[0].video;
712
+ await videoStream.createSegmentIndex();
713
+ goog.asserts.assert(videoStream.segmentIndex,
714
+ 'SegmentIndex must be non-null');
715
+ const references = Array.from(videoStream.segmentIndex);
716
+ goog.asserts.assert(references.length != 0,
717
+ 'Must have references for this test!');
718
+ timeline.notifySegments(references);
719
+
720
+ player.configure({playRangeStart: 5, playRangeEnd: 10});
721
+ await player.load(fakeManifestUri, 0, fakeMimeType);
722
+
701
723
  const seekRange = player.seekRange();
702
724
  expect(seekRange.start).toBe(5);
703
725
  expect(seekRange.end).toBe(10);
@@ -798,7 +820,7 @@ describe('Player', () => {
798
820
  expect(newConfig.streaming.bufferBehind).toBe(77);
799
821
  });
800
822
 
801
- // https://github.com/google/shaka-player/issues/1524
823
+ // https://github.com/shaka-project/shaka-player/issues/1524
802
824
  it('does not pollute other advanced DRM configs', () => {
803
825
  player.configure('drm.advanced.foo', {});
804
826
  player.configure('drm.advanced.bar', {});
@@ -1668,8 +1690,8 @@ describe('Player', () => {
1668
1690
  expect(getActiveTextTrack().id).toBe(spanishTextTrack.id);
1669
1691
  });
1670
1692
 
1671
- // Regression test for https://github.com/google/shaka-player/issues/2906
1672
- // and https://github.com/google/shaka-player/issues/2909.
1693
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/2906
1694
+ // and https://github.com/shaka-project/shaka-player/issues/2909.
1673
1695
  it('selectAudioLanguage() can choose role-less tracks', async () => {
1674
1696
  // For this test, we use a different (and simpler) manifest.
1675
1697
  // Both audio tracks are English; one has a role, and one has no roles.
@@ -1729,7 +1751,7 @@ describe('Player', () => {
1729
1751
  expect(getActiveVariantTrack().audioRoles).toEqual([]);
1730
1752
  });
1731
1753
 
1732
- // https://github.com/google/shaka-player/issues/3262
1754
+ // https://github.com/shaka-project/shaka-player/issues/3262
1733
1755
  it('selectAudioLanguage() doesn\'t change resolution', () => {
1734
1756
  player.configure('abr.enabled', false);
1735
1757
  abrManager.chooseIndex = 1;
@@ -1807,7 +1829,7 @@ describe('Player', () => {
1807
1829
  expect(getActiveTextTrack().language).toBe('en');
1808
1830
  });
1809
1831
 
1810
- // https://github.com/google/shaka-player/issues/2010
1832
+ // https://github.com/shaka-project/shaka-player/issues/2010
1811
1833
  it('changing text lang changes active stream when not streaming', () => {
1812
1834
  player.setTextTrackVisibility(false);
1813
1835
 
@@ -2112,8 +2134,8 @@ describe('Player', () => {
2112
2134
  async function runTest(languages, preference, expectedIndex) {
2113
2135
  // A manifest we can use to test language selection.
2114
2136
  manifest = shaka.test.ManifestGenerator.generate((manifest) => {
2115
- const enumerate = (it) => shaka.util.Iterables.enumerate(it);
2116
- for (const {i, item: lang} of enumerate(languages)) {
2137
+ for (let i = 0; i < languages.length; i++) {
2138
+ const lang = languages[i];
2117
2139
  if (lang.charAt(0) == '*') {
2118
2140
  manifest.addVariant(i, (variant) => {
2119
2141
  variant.primary = true;
@@ -2548,7 +2570,7 @@ describe('Player', () => {
2548
2570
  expect(variants[0].id).toBe(2);
2549
2571
 
2550
2572
  // Now increase the restriction, AbrManager should still be updated.
2551
- // https://github.com/google/shaka-player/issues/1533
2573
+ // https://github.com/shaka-project/shaka-player/issues/1533
2552
2574
  abrManager.setVariants.calls.reset();
2553
2575
  player.configure({restrictions: {maxBandwidth: Infinity}});
2554
2576
  expect(abrManager.setVariants).toHaveBeenCalledTimes(1);
@@ -2617,6 +2639,51 @@ describe('Player', () => {
2617
2639
  expect(activeVariant.id).toBe(1);
2618
2640
  });
2619
2641
 
2642
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/4190
2643
+ it('throws only one RESTRICTIONS_CANNOT_BE_MET error', async () => {
2644
+ manifest = shaka.test.ManifestGenerator.generate((manifest) => {
2645
+ manifest.addVariant(0, (variant) => {
2646
+ variant.addVideo(1, (stream) => {
2647
+ stream.keyIds = new Set(['abc']);
2648
+ });
2649
+ });
2650
+ });
2651
+
2652
+ // Check that error is RESTRICTIONS_CANNOT_BE_MET
2653
+ onError.and.callFake((e) => {
2654
+ const error = e.detail;
2655
+ shaka.test.Util.expectToEqualError(
2656
+ error,
2657
+ new shaka.util.Error(
2658
+ shaka.util.Error.Severity.CRITICAL,
2659
+ shaka.util.Error.Category.MANIFEST,
2660
+ shaka.util.Error.Code.RESTRICTIONS_CANNOT_BE_MET, {
2661
+ hasAppRestrictions: false,
2662
+ missingKeys: ['abc'],
2663
+ restrictedKeyStatuses: [],
2664
+ }));
2665
+ });
2666
+
2667
+ await player.load(fakeManifestUri, 0, fakeMimeType);
2668
+ const activeVariant = getActiveVariantTrack();
2669
+ expect(activeVariant.id).toBe(0);
2670
+
2671
+ abrManager.chooseIndex = 0;
2672
+ abrManager.chooseVariant.calls.reset();
2673
+
2674
+ onKeyStatus({'abc': 'output-restricted'});
2675
+
2676
+ // Ensure that RESTRICTIONS_CANNOT_BE_MET is thrown once
2677
+ expect(onError).toHaveBeenCalledTimes(1);
2678
+
2679
+ // It does not call chooseVariant
2680
+ expect(abrManager.chooseVariant).not.toHaveBeenCalled();
2681
+
2682
+ // The first variant is disallowed.
2683
+ expect(manifest.variants[0].id).toBe(0);
2684
+ expect(manifest.variants[0].allowedByKeySystem).toBe(false);
2685
+ });
2686
+
2620
2687
  it('doesn\'t switch if the active stream isn\'t restricted', async () => {
2621
2688
  manifest = shaka.test.ManifestGenerator.generate((manifest) => {
2622
2689
  manifest.addVariant(0, (variant) => {
@@ -3186,7 +3253,7 @@ describe('Player', () => {
3186
3253
  // Most of our Player unit tests never adapt. This allowed some assertions
3187
3254
  // to creep in that went uncaught until they happened during manual testing.
3188
3255
  // Repro only happens with audio+video variants in which we only adapt one
3189
- // type. This test covers https://github.com/google/shaka-player/issues/954
3256
+ // type. This test covers https://github.com/shaka-project/shaka-player/issues/954
3190
3257
 
3191
3258
  manifest = shaka.test.ManifestGenerator.generate((manifest) => {
3192
3259
  manifest.addVariant(0, (variant) => {
@@ -3268,7 +3335,7 @@ describe('Player', () => {
3268
3335
 
3269
3336
  describe('load', () => {
3270
3337
  it('tolerates bandwidth of NaN, undefined, or 0', async () => {
3271
- // Regression test for https://github.com/google/shaka-player/issues/938
3338
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/938
3272
3339
  manifest = shaka.test.ManifestGenerator.generate((manifest) => {
3273
3340
  manifest.addVariant(0, (variant) => {
3274
3341
  variant.bandwidth = /** @type {?} */(undefined);
@@ -3623,6 +3690,51 @@ describe('Player', () => {
3623
3690
  });
3624
3691
  });
3625
3692
 
3693
+ describe('config streaming.startAtSegmentBoundary', () => {
3694
+ // Test for https://github.com/shaka-project/shaka-player/issues/4188
3695
+ // In that issue, using streaming.startAtSegmentBoundary in v4.0.0 caused
3696
+ // an exception due to the use of a removed method.
3697
+ it('adjusts start time', async () => {
3698
+ player.configure('streaming.startAtSegmentBoundary', true);
3699
+
3700
+ // In order to adjust the start time to a segment boundary, we need
3701
+ // segment descriptions in the segment index. So create a non-default
3702
+ // fake manifest.
3703
+ const timeline = new shaka.media.PresentationTimeline(300, 0);
3704
+ timeline.setStatic(true);
3705
+ // This duration is used by useSegmentTemplate below to decide how many
3706
+ // references to generate.
3707
+ timeline.setDuration(300);
3708
+ manifest = shaka.test.ManifestGenerator.generate((manifest) => {
3709
+ manifest.presentationTimeline = timeline;
3710
+ manifest.addVariant(0, (variant) => {
3711
+ variant.addVideo(1, (stream) => {
3712
+ stream.useSegmentTemplate(
3713
+ '$Number$.mp4', /* segmentDuration= */ 10);
3714
+ });
3715
+ });
3716
+ });
3717
+
3718
+ await player.load(fakeManifestUri, 12, fakeMimeType);
3719
+
3720
+ expect(playhead.setStartTime).toHaveBeenCalledWith(10);
3721
+ });
3722
+
3723
+ it('does not fail with no segments', async () => {
3724
+ player.configure('streaming.startAtSegmentBoundary', true);
3725
+
3726
+ // Without useSegmentTemplate in the fake manifest, the call to
3727
+ // getIteratorForTime() in Player produces a null iterator. Using the
3728
+ // default fake manifest should cover that case. But just to make sure,
3729
+ // verify that we have no segments before calling load().
3730
+ const variant = manifest.variants[0];
3731
+ expect(variant.video.segmentIndex.getIteratorForTime(0)).toBeNull();
3732
+ expect(variant.audio.segmentIndex.getIteratorForTime(0)).toBeNull();
3733
+
3734
+ await player.load(fakeManifestUri, 0, fakeMimeType);
3735
+ });
3736
+ });
3737
+
3626
3738
  /**
3627
3739
  * Gets the currently active variant track.
3628
3740
  * @return {shaka.extern.Track}
@@ -4,14 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('goog.asserts');
8
- goog.require('shaka.routing.Walker');
9
- goog.require('shaka.test.Util');
10
- goog.require('shaka.util.AbortableOperation');
11
- goog.require('shaka.util.Error');
12
- goog.require('shaka.util.PublicPromise');
13
- goog.requireType('shaka.routing.Node');
14
-
15
7
  describe('Walker', () => {
16
8
  const AbortableOperation = shaka.util.AbortableOperation;
17
9
 
@@ -1,5 +1,5 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <!--Generated with https://github.com/google/shaka-packager version v2.4.1-c731217-release-->
2
+ <!--Generated with https://github.com/shaka-project/shaka-packager version v2.4.1-c731217-release-->
3
3
  <MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" minBufferTime="PT2S" type="static" mediaPresentationDuration="PT60S">
4
4
  <Period id="0">
5
5
  <!-- This comment is very long:
package/test/test/boot.js CHANGED
@@ -4,18 +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.log');
10
- goog.require('shaka.polyfill');
11
- goog.require('shaka.util.Error');
12
- goog.require('shaka.util.Platform');
13
-
14
- // If ENABLE_DEBUG_LOADER is not set to false, goog.require() will try to load
15
- // extra sources on-the-fly using pre-computed pathes in deps.js, which is not
16
- // applicable for the tests.
17
- goog['ENABLE_DEBUG_LOADER'] = false;
18
-
19
7
  /**
20
8
  * Gets the value of an argument passed from karma.
21
9
  * @param {string} name
@@ -254,6 +242,15 @@ window.xfilterDescribe = (describeName, cond, describeBody) => {
254
242
  window['describe'] = oldDescribe;
255
243
  };
256
244
 
245
+ /**
246
+ * A very short alias for filtering offline integration tests.
247
+ *
248
+ * @return {boolean}
249
+ */
250
+ window.offlineSupported = () => {
251
+ return shaka.offline.StorageMuxer.support();
252
+ };
253
+
257
254
  /**
258
255
  * Load node modules used in testing and install them into window.
259
256
  * @return {!Promise}
@@ -384,9 +381,10 @@ function configureJasmineEnvironment() {
384
381
  };
385
382
  }
386
383
 
387
- // Executed before test utilities and tests are loaded, but after Shaka Player
388
- // is loaded in uncompiled mode.
389
- try {
384
+ /**
385
+ * Set up the Shaka Player test environment.
386
+ */
387
+ function setupTestEnvironment() {
390
388
  failTestsOnFailedAssertions();
391
389
  failTestsOnNamespacedElementOrAttributeNames();
392
390
  failTestsOnUnhandledRejections();
@@ -399,12 +397,76 @@ try {
399
397
  shaka.polyfill.installAll();
400
398
 
401
399
  configureJasmineEnvironment();
400
+ }
402
401
 
403
- // eslint-disable-next-line no-restricted-syntax
404
- } catch (error) {
405
- // Throw this boot-sequence error in place of jasmine's execute method, to
406
- // fail clearly and right away without running any tests.
407
- jasmine.getEnv().execute = () => {
408
- throw error;
409
- };
402
+ /**
403
+ * Load a script dynamically and await completion.
404
+ *
405
+ * @param {string} file
406
+ * @return {!Promise}
407
+ */
408
+ function loadScript(file) {
409
+ return new Promise((resolve, reject) => {
410
+ const script = /** @type {!HTMLScriptElement} */(
411
+ document.createElement('script'));
412
+ script.defer = false;
413
+ script['async'] = false;
414
+ script.onload = resolve;
415
+ script.onerror = reject;
416
+ script.setAttribute('src', '/base/' + file);
417
+ document.head.appendChild(script);
418
+ });
410
419
  }
420
+
421
+ /**
422
+ * Load all test scripts and await completion.
423
+ *
424
+ * @return {!Promise}
425
+ */
426
+ function loadTests() {
427
+ const loadPromises = [];
428
+ for (const file of getClientArg('testFiles')) {
429
+ loadPromises.push(loadScript(file));
430
+ }
431
+ return Promise.all(loadPromises);
432
+ }
433
+
434
+ // Hijack Karma's start() method and start things our way.
435
+ // eslint-disable-next-line no-restricted-syntax
436
+ const originalStart = window.__karma__.start.bind(window.__karma__);
437
+ window.__karma__.start = async () => {
438
+ // Executed when Karma has finished loading everything it loads for us.
439
+ // Those things were all loaded in parallel, and had no interdependencies
440
+ // other than those in the Shaka Player library, tracked by the Closure
441
+ // library's goog.require/goog.provide.
442
+
443
+ // Now we load the tests from here, rather than letting Karma do it. This
444
+ // give us control over the order, so that everything else is loaded and
445
+ // complete before any tests are requested. Then we may reference test
446
+ // utilities and library namespaces in the body of describe() blocks, which
447
+ // are executed synchronously as the test scripts are loaded. Without this
448
+ // ordering, we would have to either:
449
+ // 1. very carefully avoid references in describe() and defer them to
450
+ // beforeAll()
451
+ // or 2. strictly adopt goog.provide/goog.require throughout our tests
452
+ // In those scenarios, failure to do so would only manifest some of the time
453
+ // and on certain platforms. So this seems to be the more robust solution.
454
+
455
+ // See https://github.com/shaka-project/shaka-player/issues/4094
456
+
457
+ try {
458
+ setupTestEnvironment();
459
+ console.log('Set up test environment.');
460
+ await loadTests();
461
+ console.log('Loaded all tests.');
462
+
463
+ // eslint-disable-next-line no-restricted-syntax
464
+ } catch (error) {
465
+ console.error('Error during setup:', error);
466
+ window.__karma__.error(error);
467
+ return;
468
+ }
469
+
470
+ // Finally, start the tests.
471
+ originalStart();
472
+ };
@@ -38,3 +38,7 @@ var filterDescribe = function(name, cond, callback) {};
38
38
  * @param {function()} callback
39
39
  */
40
40
  var xfilterDescribe = function(name, cond, callback) {};
41
+
42
+
43
+ /** @return {boolean} */
44
+ var offlineSupported = function() {};
@@ -343,7 +343,7 @@ jasmine.Spy.prototype.and;
343
343
  /**
344
344
  * @param {string} name
345
345
  * @return {!jasmine.Spy}
346
- * @see https://github.com/google/closure-compiler/issues/1422
346
+ * @see https://github.com/shaka-project/closure-compiler/issues/1422
347
347
  */
348
348
  jasmine.createSpy = function(name) {};
349
349
 
@@ -360,7 +360,7 @@ jasmine.createSpyObj = function(name, members) {};
360
360
  * @param {*} obj
361
361
  * @param {string} name
362
362
  * @return {!jasmine.Spy}
363
- * @see https://github.com/google/closure-compiler/issues/1422
363
+ * @see https://github.com/shaka-project/closure-compiler/issues/1422
364
364
  */
365
365
  var spyOn = function(obj, name) {};
366
366
 
@@ -20,3 +20,7 @@ __karma__.config = {};
20
20
 
21
21
  /** @const {!Array.<*>} */
22
22
  __karma__.config.args;
23
+
24
+
25
+ /** @param {?} error */
26
+ __karma__.error = function(error) {};
@@ -0,0 +1,10 @@
1
+ /*! @license
2
+ * Shaka Player
3
+ * Copyright 2016 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ // Define the shaka.test namespace before we load the test utilities.
8
+ // Without goog.provide in the test utils, this has to be explicit and come
9
+ // before we load the utils.
10
+ shaka.test = {};
@@ -4,14 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.CannedIDB');
8
-
9
- goog.require('shaka.log');
10
- goog.require('shaka.offline.indexeddb.DBOperation');
11
- goog.require('shaka.util.BufferUtils');
12
- goog.require('shaka.util.Uint8ArrayUtils');
13
-
14
-
15
7
  /**
16
8
  * A testing utility that can be used to dump and restore entire IndexedDB
17
9
  * databases. This can be inserted into a running app to snapshot databases
@@ -4,12 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.CeaUtils');
8
-
9
- goog.require('shaka.cea.CeaUtils');
10
- goog.require('shaka.text.Cue');
11
-
12
-
13
7
  /**
14
8
  * Testing helpers to assist tests for Closed Caption decoders for CEA captions.
15
9
  */
@@ -4,19 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.Dash');
8
-
9
- goog.require('goog.asserts');
10
- goog.require('shaka.dash.DashParser');
11
- goog.require('shaka.test.FakeNetworkingEngine');
12
- goog.require('shaka.test.ManifestParser');
13
- goog.require('shaka.test.Util');
14
- goog.require('shaka.util.PlayerConfiguration');
15
- goog.require('shaka.util.StringUtils');
16
- goog.requireType('shaka.media.SegmentReference');
17
- goog.requireType('shaka.util.Error');
18
-
19
-
20
7
  /** @summary Utilities for working with the DASH parser. */
21
8
  shaka.test.Dash = class {
22
9
  /**
@@ -4,9 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.FakeAd');
8
-
9
-
10
7
  /**
11
8
  * @implements {shaka.extern.IAd}
12
9
  */
@@ -4,15 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.FakeAdManager');
8
-
9
- goog.require('shaka.ads.AdManager');
10
- goog.require('shaka.ads.AdsStats');
11
- goog.require('shaka.util.FakeEvent');
12
- goog.require('shaka.util.FakeEventTarget');
13
- goog.requireType('shaka.test.FakeAd');
14
-
15
-
16
7
  /**
17
8
  * @implements {shaka.extern.IAdManager}
18
9
  * @final
@@ -4,11 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.FakeDemoMain');
8
-
9
- goog.require('shaka.Player');
10
-
11
-
12
7
  /**
13
8
  * @summary
14
9
  * This simulates the interface between ShakaDemoMain and the various tabs.
@@ -4,12 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.FakeDrmEngine');
8
-
9
- goog.require('shaka.media.DrmEngine');
10
- goog.require('shaka.test.Util');
11
-
12
-
13
7
  /**
14
8
  * A fake DrmEngine.
15
9
  *
@@ -4,13 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.FakeMediaSourceEngine');
8
-
9
- goog.require('shaka.media.MediaSourceEngine');
10
- goog.require('shaka.test.FakeTextDisplayer');
11
- goog.require('shaka.util.ManifestParserUtils');
12
-
13
-
14
7
  /**
15
8
  * @summary
16
9
  * This simulates multiple SourceBuffers. However, it only
@@ -4,11 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.FakeNetworkingEngine');
8
-
9
- /** @fileoverview @suppress {missingRequire} */
10
-
11
-
12
7
  /**
13
8
  * A fake networking engine that returns constant data. The request member
14
9
  * is a jasmine spy and can be used to check the actual calls that occurred.
@@ -4,11 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.provide('shaka.test.FakeTextDisplayer');
8
-
9
- goog.require('shaka.test.Util');
10
-
11
-
12
7
  /**
13
8
  * @implements {shaka.extern.TextDisplayer}
14
9
  * @final