shaka-player 3.3.0 → 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 (344) 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 +1722 -1640
  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 +196 -169
  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 +93 -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 +30 -30
  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 +272 -238
  96. package/dist/shaka-player.compiled.debug.d.ts +272 -238
  97. package/dist/shaka-player.compiled.debug.externs.js +53 -16
  98. package/dist/shaka-player.compiled.debug.js +393 -394
  99. package/dist/shaka-player.compiled.debug.map +4 -4
  100. package/dist/shaka-player.compiled.externs.js +53 -16
  101. package/dist/shaka-player.compiled.js +840 -843
  102. package/dist/shaka-player.compiled.map +4 -4
  103. package/dist/shaka-player.ui.d.ts +318 -293
  104. package/dist/shaka-player.ui.debug.d.ts +318 -293
  105. package/dist/shaka-player.ui.debug.externs.js +55 -27
  106. package/dist/shaka-player.ui.debug.js +415 -417
  107. package/dist/shaka-player.ui.debug.map +4 -4
  108. package/dist/shaka-player.ui.externs.js +55 -27
  109. package/dist/shaka-player.ui.js +997 -1000
  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 +186 -0
  124. package/externs/shaka/player.js +8 -0
  125. package/externs/shaka/text.js +10 -0
  126. package/karma.conf.js +156 -45
  127. package/lib/abr/simple_abr_manager.js +12 -6
  128. package/lib/ads/ad_manager.js +1 -0
  129. package/lib/cast/cast_proxy.js +6 -4
  130. package/lib/cast/cast_receiver.js +3 -0
  131. package/lib/cea/cea608_data_channel.js +2 -2
  132. package/lib/cea/cea708_service.js +5 -4
  133. package/lib/cea/mp4_cea_parser.js +11 -5
  134. package/lib/cea/sei_processor.js +6 -3
  135. package/lib/dash/dash_parser.js +40 -30
  136. package/lib/dash/mpd_utils.js +4 -5
  137. package/lib/dash/segment_list.js +1 -2
  138. package/lib/dash/segment_template.js +3 -3
  139. package/lib/hls/hls_parser.js +41 -9
  140. package/lib/hls/manifest_text_parser.js +4 -3
  141. package/lib/media/adaptation_set.js +1 -2
  142. package/lib/media/content_workarounds.js +2 -2
  143. package/lib/media/drm_engine.js +3 -2
  144. package/lib/media/media_source_engine.js +3 -2
  145. package/lib/media/mp4_segment_index_parser.js +1 -4
  146. package/lib/media/playhead.js +2 -2
  147. package/lib/media/presentation_timeline.js +18 -8
  148. package/lib/media/quality_observer.js +17 -34
  149. package/lib/media/region_observer.js +39 -33
  150. package/lib/media/region_timeline.js +17 -19
  151. package/lib/media/segment_index.js +2 -1
  152. package/lib/media/segment_reference.js +19 -1
  153. package/lib/media/streaming_engine.js +12 -9
  154. package/lib/media/time_ranges_utils.js +1 -3
  155. package/lib/media/video_wrapper.js +1 -1
  156. package/lib/net/networking_engine.js +5 -1
  157. package/lib/offline/storage.js +12 -13
  158. package/lib/player.js +87 -41
  159. package/lib/polyfill/all.js +2 -3
  160. package/lib/polyfill/encryption_scheme.js +1 -1
  161. package/lib/polyfill/media_capabilities.js +32 -17
  162. package/lib/polyfill/mediasource.js +1 -1
  163. package/lib/polyfill/symbol.js +46 -0
  164. package/lib/text/cue.js +7 -1
  165. package/lib/text/simple_text_displayer.js +2 -1
  166. package/lib/text/ttml_text_parser.js +92 -63
  167. package/lib/text/ui_text_displayer.js +18 -12
  168. package/lib/util/buffer_utils.js +1 -3
  169. package/lib/util/cmcd_manager.js +47 -201
  170. package/lib/util/ebml_parser.js +3 -3
  171. package/lib/util/error.js +1 -1
  172. package/lib/util/fake_event_target.js +21 -1
  173. package/lib/util/iterables.js +0 -46
  174. package/lib/util/mp4_box_parsers.js +1 -4
  175. package/lib/util/mp4_parser.js +5 -7
  176. package/lib/util/periods.js +10 -11
  177. package/lib/util/platform.js +3 -3
  178. package/lib/util/pssh.js +1 -4
  179. package/lib/util/stream_utils.js +88 -11
  180. package/lib/util/string_utils.js +3 -5
  181. package/lib/util/uint8array_utils.js +3 -5
  182. package/lib/util/xml_utils.js +34 -7
  183. package/package.json +62 -40
  184. package/roadmap.md +17 -17
  185. package/shaka-player.uncompiled.js +1 -0
  186. package/test/abr/simple_abr_manager_unit.js +3 -8
  187. package/test/ads/ad_manager_unit.js +0 -6
  188. package/test/cast/cast_proxy_unit.js +0 -8
  189. package/test/cast/cast_receiver_integration.js +1 -18
  190. package/test/cast/cast_receiver_unit.js +1 -9
  191. package/test/cast/cast_sender_unit.js +0 -6
  192. package/test/cast/cast_utils_unit.js +0 -13
  193. package/test/cea/cea608_memory_unit.js +0 -5
  194. package/test/cea/cea708_service_unit.js +0 -7
  195. package/test/cea/cea708_window_unit.js +0 -5
  196. package/test/cea/cea_decoder_unit.js +0 -6
  197. package/test/cea/dtvcc_packet_builder_unit.js +0 -3
  198. package/test/cea/dtvcc_packet_unit.js +0 -5
  199. package/test/cea/mp4_cea_parser_unit.js +0 -4
  200. package/test/dash/dash_parser_content_protection_unit.js +1 -10
  201. package/test/dash/dash_parser_live_unit.js +45 -15
  202. package/test/dash/dash_parser_manifest_unit.js +4 -17
  203. package/test/dash/dash_parser_segment_base_unit.js +1 -8
  204. package/test/dash/dash_parser_segment_list_unit.js +1 -7
  205. package/test/dash/dash_parser_segment_template_unit.js +0 -9
  206. package/test/dash/mpd_utils_unit.js +3 -11
  207. package/test/demo/demo_unit.js +0 -5
  208. package/test/deprecate/enforcer_unit.js +0 -4
  209. package/test/deprecate/version_unit.js +0 -2
  210. package/test/hls/hls_live_unit.js +2 -14
  211. package/test/hls/hls_parser_unit.js +76 -15
  212. package/test/hls/manifest_text_parser_unit.js +0 -10
  213. package/test/media/adaptation_set_criteria_unit.js +3 -7
  214. package/test/media/adaptation_set_unit.js +0 -2
  215. package/test/media/buffering_observer_unit.js +1 -4
  216. package/test/media/closed_caption_parser_unit.js +0 -3
  217. package/test/media/drm_engine_integration.js +2 -15
  218. package/test/media/drm_engine_unit.js +7 -27
  219. package/test/media/manifest_parser_unit.js +0 -4
  220. package/test/media/media_source_engine_integration.js +0 -7
  221. package/test/media/media_source_engine_unit.js +1 -14
  222. package/test/media/mp4_segment_index_parser_unit.js +0 -4
  223. package/test/media/play_rate_controller_unit.js +0 -4
  224. package/test/media/playhead_unit.js +8 -16
  225. package/test/media/presentation_timeline_unit.js +4 -7
  226. package/test/media/quality_observer_unit.js +4 -5
  227. package/test/media/region_observer_unit.js +40 -10
  228. package/test/media/region_timeline_unit.js +40 -25
  229. package/test/media/segment_index_unit.js +0 -6
  230. package/test/media/segment_reference_unit.js +0 -3
  231. package/test/media/stall_detector_unit.js +0 -5
  232. package/test/media/streaming_engine_integration.js +11 -37
  233. package/test/media/streaming_engine_unit.js +155 -34
  234. package/test/media/time_ranges_utils_unit.js +0 -2
  235. package/test/media/transmuxer_integration.js +0 -6
  236. package/test/media/webm_segment_index_parser_unit.js +0 -4
  237. package/test/net/data_uri_plugin_unit.js +0 -7
  238. package/test/net/http_plugin_unit.js +0 -9
  239. package/test/net/networking_engine_unit.js +0 -11
  240. package/test/offline/download_progress_estimator_unit.js +0 -2
  241. package/test/offline/indexeddb_storage_unit.js +0 -6
  242. package/test/offline/manifest_convert_unit.js +0 -8
  243. package/test/offline/offline_integration.js +1 -10
  244. package/test/offline/offline_manifest_parser_unit.js +0 -6
  245. package/test/offline/offline_scheme_unit.js +0 -8
  246. package/test/offline/offline_uri_unit.js +0 -2
  247. package/test/offline/storage_compatibility_unit.js +1 -14
  248. package/test/offline/storage_integration.js +1 -27
  249. package/test/player_external.js +2 -10
  250. package/test/player_integration.js +63 -36
  251. package/test/player_load_graph_integration.js +1 -6
  252. package/test/player_src_equals_external.js +3 -9
  253. package/test/player_src_equals_integration.js +41 -15
  254. package/test/player_unit.js +71 -46
  255. package/test/routing/walker_unit.js +0 -8
  256. package/test/test/assets/chapters.vtt +2 -2
  257. package/test/test/assets/chapters2.vtt +10 -0
  258. package/test/test/assets/large_file.mpd +1 -1
  259. package/test/test/boot.js +75 -22
  260. package/test/test/externs/jasmine.js +2 -2
  261. package/test/test/externs/karma.js +4 -0
  262. package/test/test/namespace.js +10 -0
  263. package/test/test/util/canned_idb.js +0 -8
  264. package/test/test/util/cea_utils.js +0 -6
  265. package/test/test/util/dash_parser_util.js +0 -13
  266. package/test/test/util/fake_ad.js +0 -3
  267. package/test/test/util/fake_ad_manager.js +0 -9
  268. package/test/test/util/fake_demo_main.js +0 -5
  269. package/test/test/util/fake_drm_engine.js +0 -6
  270. package/test/test/util/fake_media_source_engine.js +0 -7
  271. package/test/test/util/fake_networking_engine.js +0 -5
  272. package/test/test/util/fake_text_displayer.js +0 -5
  273. package/test/test/util/indexeddb_utils.js +1 -10
  274. package/test/test/util/jasmine_fetch.js +0 -1
  275. package/test/test/util/loader.js +0 -18
  276. package/test/test/util/manifest_generator.js +9 -14
  277. package/test/test/util/manifest_parser_util.js +0 -6
  278. package/test/test/util/offline_utils.js +0 -5
  279. package/test/test/util/simple_fakes.js +9 -26
  280. package/test/test/util/stream_generator.js +0 -14
  281. package/test/test/util/streaming_engine_util.js +0 -15
  282. package/test/test/util/test_scheme.js +1 -19
  283. package/test/test/util/ttml_utils.js +79 -0
  284. package/test/test/util/ui_utils.js +0 -9
  285. package/test/test/util/util.js +15 -26
  286. package/test/test/util/waiter.js +84 -43
  287. package/test/text/cue_integration.js +0 -4
  288. package/test/text/lrc_text_parser_unit.js +0 -4
  289. package/test/text/mp4_ttml_parser_unit.js +10 -23
  290. package/test/text/mp4_vtt_parser_unit.js +1 -7
  291. package/test/text/sbv_text_parser_unit.js +0 -4
  292. package/test/text/simple_text_displayer_unit.js +1 -8
  293. package/test/text/srt_text_parser_unit.js +0 -4
  294. package/test/text/ssa_text_parser_unit.js +0 -5
  295. package/test/text/text_engine_unit.js +2 -7
  296. package/test/text/text_track_integration.js +0 -2
  297. package/test/text/ttml_text_parser_unit.js +499 -239
  298. package/test/text/ui_text_displayer_unit.js +44 -41
  299. package/test/text/vtt_text_parser_unit.js +0 -9
  300. package/test/text/web_vtt_generator_unit.js +0 -3
  301. package/test/ui/ad_ui_unit.js +0 -11
  302. package/test/ui/localization_unit.js +0 -3
  303. package/test/ui/text_displayer_layout_unit.js +9 -19
  304. package/test/ui/ui_customization_unit.js +0 -6
  305. package/test/ui/ui_integration.js +0 -16
  306. package/test/ui/ui_unit.js +1 -17
  307. package/test/util/abortable_operation_unit.js +4 -9
  308. package/test/util/array_utils_unit.js +0 -2
  309. package/test/util/buffer_utils_unit.js +0 -2
  310. package/test/util/cmcd_manager_unit.js +29 -18
  311. package/test/util/data_view_reader_unit.js +0 -4
  312. package/test/util/ebml_parser_unit.js +0 -4
  313. package/test/util/event_manager_unit.js +0 -3
  314. package/test/util/fake_event_target_unit.js +0 -5
  315. package/test/util/functional_unit.js +1 -1
  316. package/test/util/iterables_unit.js +0 -64
  317. package/test/util/language_utils_unit.js +0 -3
  318. package/test/util/manifest_parser_utils_unit.js +0 -2
  319. package/test/util/mp4_box_parsers_unit.js +0 -5
  320. package/test/util/mp4_parser_unit.js +0 -4
  321. package/test/util/multi_map_unit.js +0 -3
  322. package/test/util/object_utils_unit.js +0 -2
  323. package/test/util/periods_unit.js +14 -7
  324. package/test/util/pssh_unit.js +0 -5
  325. package/test/util/state_history_unit.js +0 -2
  326. package/test/util/stream_utils_unit.js +39 -38
  327. package/test/util/string_utils_unit.js +0 -6
  328. package/test/util/text_parser_unit.js +0 -2
  329. package/test/util/xml_utils_unit.js +0 -4
  330. package/third_party/closure-uri/uri.js +21 -0
  331. package/ui/controls.js +3 -0
  332. package/ui/less/ad_controls.less +4 -4
  333. package/ui/less/buttons.less +5 -5
  334. package/ui/less/containers.less +9 -11
  335. package/ui/less/overflow_menu.less +4 -4
  336. package/ui/less/range_elements.less +5 -0
  337. package/ui/less/tooltip.less +1 -1
  338. package/ui/locales/sjn-translations.yaml +257 -0
  339. package/ui/locales/sjn.json +42 -0
  340. package/ui/localization.js +12 -36
  341. package/ui/text_selection.js +1 -0
  342. package/externs/media_capabilities.js +0 -16
  343. package/externs/svgelement.js +0 -18
  344. package/externs/webcrypto.js +0 -18
@@ -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(
@@ -647,7 +627,7 @@ describe('StreamingEngine', () => {
647
627
  // should be buffered. Those segment numbers are 1-based, and this array
648
628
  // is 0-based, so we expect i >= 9 to be downloaded.
649
629
  const segments = mediaSourceEngine.segments;
650
- for (const i of shaka.util.Iterables.range(14)) {
630
+ for (let i = 0; i < 14; i++) {
651
631
  expect(segments[ContentType.AUDIO][i]).withContext(i).toBe(i >= 9);
652
632
  expect(segments[ContentType.VIDEO][i]).withContext(i).toBe(i >= 9);
653
633
  expect(segments[ContentType.TEXT][i]).withContext(i).toBe(i >= 9);
@@ -753,7 +733,7 @@ describe('StreamingEngine', () => {
753
733
  expect(timeline.setDuration).toHaveBeenCalledWith(35);
754
734
  });
755
735
 
756
- // https://github.com/google/shaka-player/issues/979
736
+ // https://github.com/shaka-project/shaka-player/issues/979
757
737
  it('does not expand the timeline duration', async () => {
758
738
  setupVod();
759
739
  mediaSourceEngine = new shaka.test.FakeMediaSourceEngine(segmentData);
@@ -779,7 +759,7 @@ describe('StreamingEngine', () => {
779
759
  expect(timeline.setDuration).not.toHaveBeenCalled();
780
760
  });
781
761
 
782
- // https://github.com/google/shaka-player/issues/1967
762
+ // https://github.com/shaka-project/shaka-player/issues/1967
783
763
  it('does not change duration when 0', async () => {
784
764
  setupVod();
785
765
  mediaSourceEngine = new shaka.test.FakeMediaSourceEngine(segmentData);
@@ -824,6 +804,53 @@ describe('StreamingEngine', () => {
824
804
  .toHaveBeenCalledWith('video', 0, lt20, gt40);
825
805
  });
826
806
 
807
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/3717
808
+ it('applies fudge factors for the duration', async () => {
809
+ setupVod();
810
+
811
+ // In #3717, the duration was just barely large enough to encompass an
812
+ // additional segment, but that segment didn't exist, so playback never
813
+ // completed. Here, we set the duration to just beyond the 3rd segment, and
814
+ // we make the 4th segment fail when requested.
815
+ const duration = 30.000000005;
816
+ timeline.getDuration.and.returnValue(duration);
817
+
818
+ const targetUri = '1_video_3'; // The URI of the 4th video segment.
819
+ failRequestsForTarget(netEngine, targetUri);
820
+
821
+ mediaSourceEngine = new shaka.test.FakeMediaSourceEngine(segmentData);
822
+ createStreamingEngine();
823
+
824
+ // Here we go!
825
+ streamingEngine.switchVariant(variant);
826
+ streamingEngine.switchTextStream(textStream);
827
+ await streamingEngine.start();
828
+ playing = true;
829
+ await runTest();
830
+
831
+ // The end of the stream should have been reached, and the 4th segment from
832
+ // each type should never have been requested.
833
+ expect(mediaSourceEngine.endOfStream).toHaveBeenCalled();
834
+
835
+ const segmentType = shaka.net.NetworkingEngine.RequestType.SEGMENT;
836
+
837
+ netEngine.expectRequest('0_audio_0', segmentType);
838
+ netEngine.expectRequest('0_video_0', segmentType);
839
+ netEngine.expectRequest('0_text_0', segmentType);
840
+
841
+ netEngine.expectRequest('0_audio_1', segmentType);
842
+ netEngine.expectRequest('0_video_1', segmentType);
843
+ netEngine.expectRequest('0_text_1', segmentType);
844
+
845
+ netEngine.expectRequest('1_audio_2', segmentType);
846
+ netEngine.expectRequest('1_video_2', segmentType);
847
+ netEngine.expectRequest('1_text_2', segmentType);
848
+
849
+ netEngine.expectNoRequest('1_audio_3', segmentType);
850
+ netEngine.expectNoRequest('1_video_3', segmentType);
851
+ netEngine.expectNoRequest('1_text_3', segmentType);
852
+ });
853
+
827
854
  it('does not buffer one media type ahead of another', async () => {
828
855
  setupVod();
829
856
  mediaSourceEngine = new shaka.test.FakeMediaSourceEngine(segmentData);
@@ -880,7 +907,7 @@ describe('StreamingEngine', () => {
880
907
  expect(mediaSourceEngine.appendBuffer).toHaveBeenCalled();
881
908
  });
882
909
 
883
- // https://github.com/google/shaka-player/issues/2957
910
+ // https://github.com/shaka-project/shaka-player/issues/2957
884
911
  it('plays with fewer text segments', async () => {
885
912
  setupVod();
886
913
 
@@ -1042,7 +1069,7 @@ describe('StreamingEngine', () => {
1042
1069
  expect(mediaSourceEngine.resetCaptionParser).not.toHaveBeenCalled();
1043
1070
  });
1044
1071
 
1045
- // See https://github.com/google/shaka-player/issues/2956
1072
+ // See https://github.com/shaka-project/shaka-player/issues/2956
1046
1073
  it('works with fast variant switches during update', async () => {
1047
1074
  // Delay the appendBuffer call until later so we are waiting for this to
1048
1075
  // finish when we switch.
@@ -1391,6 +1418,66 @@ describe('StreamingEngine', () => {
1391
1418
  });
1392
1419
  });
1393
1420
 
1421
+ it('into unbuffered regions when nothing is buffered ' +
1422
+ 'and mediaState is performing an update', async () => {
1423
+ // Here we go!
1424
+ streamingEngine.switchVariant(variant);
1425
+ streamingEngine.switchTextStream(textStream);
1426
+ // ensure init source buffer promise does not resolve before seeked()
1427
+ // so mediaState remains in "performingUpdate" state
1428
+ const initSourceBufferPromise = new shaka.util.PublicPromise();
1429
+ mediaSourceEngine.setStreamProperties.and
1430
+ .returnValue(initSourceBufferPromise);
1431
+ await streamingEngine.start();
1432
+ playing = true;
1433
+
1434
+ // tick to trigger mediaState updates
1435
+ jasmine.clock().tick(1);
1436
+ // give a chance for fetchAndAppend_ to be invoked
1437
+ // by async onUpdate_ callback
1438
+ await Util.shortDelay(realSetTimeout);
1439
+
1440
+ // Nothing is buffered yet.
1441
+ expect(mediaSourceEngine.segments).toEqual({
1442
+ audio: [false, false, false, false],
1443
+ video: [false, false, false, false],
1444
+ text: [false, false, false, false],
1445
+ });
1446
+
1447
+ // Seek forward to an unbuffered region in the first Period.
1448
+ presentationTimeInSeconds = 15;
1449
+ streamingEngine.seeked();
1450
+
1451
+ // resolve initSourceBufferPromise after seeked(), waitingToClearBuffer
1452
+ // should have been set, so this will now trigger the actual flush of
1453
+ // the buffer
1454
+ initSourceBufferPromise.resolve();
1455
+ mediaSourceEngine.setStreamProperties.and
1456
+ .returnValue(Promise.resolve());
1457
+
1458
+ // allow mediaState update to resolve
1459
+ await Util.shortDelay(realSetTimeout);
1460
+
1461
+ onTick.and.callFake(() => {
1462
+ expect(mediaSourceEngine.clear).toHaveBeenCalled();
1463
+ onTick.and.stub();
1464
+ });
1465
+
1466
+ await runTest(Util.spyFunc(onTick));
1467
+
1468
+ // Verify buffers.
1469
+ expect(mediaSourceEngine.initSegments).toEqual({
1470
+ audio: [false, true],
1471
+ video: [false, true],
1472
+ text: [],
1473
+ });
1474
+ expect(mediaSourceEngine.segments).toEqual({
1475
+ audio: [false, true, true, true],
1476
+ video: [false, true, true, true],
1477
+ text: [false, true, true, true],
1478
+ });
1479
+ });
1480
+
1394
1481
  it('into unbuffered regions near segment start', async () => {
1395
1482
  // Here we go!
1396
1483
  streamingEngine.switchVariant(variant);
@@ -1550,7 +1637,7 @@ describe('StreamingEngine', () => {
1550
1637
  });
1551
1638
  });
1552
1639
 
1553
- // https://github.com/google/shaka-player/issues/2670
1640
+ // https://github.com/shaka-project/shaka-player/issues/2670
1554
1641
  it('rapid unbuffered seeks', async () => {
1555
1642
  // This test simulates rapid dragging of the seek bar, as in #2670.
1556
1643
  // In that issue, we would buffer the wrong segments due to a race
@@ -1689,7 +1776,7 @@ describe('StreamingEngine', () => {
1689
1776
 
1690
1777
  // Since we performed an unbuffered seek into the second Period, the
1691
1778
  // first 12 segments should not be buffered.
1692
- for (const i of shaka.util.Iterables.range(14)) {
1779
+ for (let i = 0; i < 14; i++) {
1693
1780
  expect(mediaSourceEngine.segments[ContentType.AUDIO][i]).toBe(i >= 12);
1694
1781
  expect(mediaSourceEngine.segments[ContentType.VIDEO][i]).toBe(i >= 12);
1695
1782
  expect(mediaSourceEngine.segments[ContentType.TEXT][i]).toBe(i >= 12);
@@ -2491,7 +2578,7 @@ describe('StreamingEngine', () => {
2491
2578
  // should be buffered. Those segment numbers are 1-based, and this array
2492
2579
  // is 0-based, so we expect i >= 9 to be downloaded.
2493
2580
  const segments = mediaSourceEngine.segments;
2494
- for (const i of shaka.util.Iterables.range(14)) {
2581
+ for (let i = 0; i < 14; i++) {
2495
2582
  expect(segments[ContentType.AUDIO][i]).withContext(i).toBe(i >= 9);
2496
2583
  expect(segments[ContentType.VIDEO][i]).withContext(i).toBe(i >= 9);
2497
2584
  expect(segments[ContentType.TEXT][i]).withContext(i).toBe(i >= 9);
@@ -3390,6 +3477,40 @@ describe('StreamingEngine', () => {
3390
3477
  segmentAvailability.end++;
3391
3478
  }
3392
3479
 
3480
+ /**
3481
+ * @param {!shaka.test.FakeNetworkingEngine} netEngine A NetworkingEngine
3482
+ * look-alike.
3483
+ * @param {string} targetUri
3484
+ * @param {shaka.util.Error.Code=} errorCode
3485
+ */
3486
+ function failRequestsForTarget(
3487
+ netEngine, targetUri, errorCode=shaka.util.Error.Code.BAD_HTTP_STATUS) {
3488
+ // eslint-disable-next-line no-restricted-syntax
3489
+ const originalNetEngineRequest = netEngine.request.bind(netEngine);
3490
+
3491
+ netEngine.request = jasmine.createSpy('request').and.callFake(
3492
+ (requestType, request) => {
3493
+ if (request.uris[0] == targetUri) {
3494
+ const data = [targetUri];
3495
+
3496
+ if (errorCode == shaka.util.Error.Code.BAD_HTTP_STATUS) {
3497
+ data.push(404);
3498
+ data.push('');
3499
+ }
3500
+
3501
+ // The compiler still sees the error code parameter as potentially
3502
+ // undefined, even though we gave it a default value.
3503
+ goog.asserts.assert(errorCode != undefined, 'Undefined error code');
3504
+
3505
+ return shaka.util.AbortableOperation.failed(new shaka.util.Error(
3506
+ shaka.util.Error.Severity.CRITICAL,
3507
+ shaka.util.Error.Category.NETWORK,
3508
+ errorCode, data));
3509
+ }
3510
+ return originalNetEngineRequest(requestType, request);
3511
+ });
3512
+ }
3513
+
3393
3514
  /**
3394
3515
  * @param {!shaka.test.FakeNetworkingEngine} netEngine A NetworkingEngine
3395
3516
  * 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();
@@ -4,12 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.offline.OfflineManifestParser');
8
- goog.require('shaka.offline.OfflineUri');
9
- goog.require('shaka.offline.StorageMuxer');
10
- goog.require('shaka.test.Util');
11
- goog.require('shaka.util.Error');
12
-
13
7
  /** @return {boolean} */
14
8
  const offlineManifestParserSupport = () => shaka.offline.StorageMuxer.support();
15
9
  filterDescribe('OfflineManifestParser', offlineManifestParserSupport, () => {
@@ -4,14 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.net.NetworkingEngine');
8
- goog.require('shaka.net.NetworkingEngine.RequestType');
9
- goog.require('shaka.offline.OfflineScheme');
10
- goog.require('shaka.offline.OfflineUri');
11
- goog.require('shaka.offline.StorageMuxer');
12
- goog.require('shaka.test.Util');
13
- goog.require('shaka.util.Error');
14
-
15
7
  /** @return {boolean} */
16
8
  const offlineSchemeSupport = () => shaka.offline.StorageMuxer.support();
17
9
  filterDescribe('OfflineScheme', offlineSchemeSupport, () => {
@@ -4,8 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.offline.OfflineUri');
8
-
9
7
  describe('OfflineUri', () => {
10
8
  const OfflineUri = shaka.offline.OfflineUri;
11
9
 
@@ -4,19 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('goog.asserts');
8
- goog.require('shaka.offline.ManifestConverter');
9
- goog.require('shaka.offline.indexeddb.V1StorageCell');
10
- goog.require('shaka.offline.indexeddb.V2StorageCell');
11
- goog.require('shaka.offline.indexeddb.V5StorageCell');
12
- goog.require('shaka.test.CannedIDB');
13
- goog.require('shaka.test.IndexedDBUtils');
14
- goog.require('shaka.test.ManifestGenerator');
15
- goog.require('shaka.test.Util');
16
- goog.require('shaka.util.Error');
17
- goog.require('shaka.util.ManifestParserUtils');
18
- goog.require('shaka.util.StringUtils');
19
-
20
7
  // All of the database dumps referenced below were originally made from the
21
8
  // "Heliocentrism" content in our demo app.
22
9
  // https://storage.googleapis.com/shaka-demo-assets/heliocentrism/heliocentrism.mpd
@@ -80,7 +67,7 @@ const compatibilityTestsMetadata = [
80
67
  // This is the v4 version of the database as written by v2.5.0 - v2.5.9. A
81
68
  // bug in v2.5 caused the stream metadata from all periods to be written to
82
69
  // each period. This was corrected in v2.5.10.
83
- // See https://github.com/google/shaka-player/issues/2389
70
+ // See https://github.com/shaka-project/shaka-player/issues/2389
84
71
  name: 'v4-broken',
85
72
  dbImagePath: '/base/test/test/assets/db-dump-v4-broken.json',
86
73
  manifestKey: 1,
@@ -4,32 +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.media.DrmEngine');
10
- goog.require('shaka.media.ManifestParser');
11
- goog.require('shaka.media.SegmentIndex');
12
- goog.require('shaka.net.NetworkingEngine.RequestType');
13
- goog.require('shaka.offline.ManifestConverter');
14
- goog.require('shaka.offline.OfflineUri');
15
- goog.require('shaka.offline.Storage');
16
- goog.require('shaka.offline.StorageMuxer');
17
- goog.require('shaka.test.FakeDrmEngine');
18
- goog.require('shaka.test.FakeManifestParser');
19
- goog.require('shaka.test.FakeNetworkingEngine');
20
- goog.require('shaka.test.Loader');
21
- goog.require('shaka.test.ManifestGenerator');
22
- goog.require('shaka.test.TestScheme');
23
- goog.require('shaka.test.Util');
24
- goog.require('shaka.util.AbortableOperation');
25
- goog.require('shaka.util.BufferUtils');
26
- goog.require('shaka.util.Error');
27
- goog.require('shaka.util.EventManager');
28
- goog.require('shaka.util.PlayerConfiguration');
29
- goog.require('shaka.util.PublicPromise');
30
- goog.require('shaka.util.Uint8ArrayUtils');
31
- goog.requireType('shaka.media.SegmentReference');
32
-
33
7
  /** @return {boolean} */
34
8
  function storageSupport() {
35
9
  return shaka.offline.Storage.support();
@@ -1323,7 +1297,7 @@ filterDescribe('Storage', storageSupport, () => {
1323
1297
  const testSchemeMimeType = 'application/x-test-manifest';
1324
1298
  const manifestUri = 'test:sintel';
1325
1299
 
1326
- // Regression test for https://github.com/google/shaka-player/issues/2781
1300
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/2781
1327
1301
  it('does not cache failures or cancellations', async () => {
1328
1302
  /** @type {shaka.offline.Storage} */
1329
1303
  const storage = new shaka.offline.Storage();
@@ -4,15 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('ShakaDemoAssetInfo');
8
- goog.require('shaka.test.Loader');
9
- goog.require('shaka.test.UiUtils');
10
- goog.require('shaka.test.Util');
11
- goog.require('shaka.test.Waiter');
12
- goog.require('shaka.util.EventManager');
13
- goog.requireType('shaka.Player');
14
- goog.requireType('shaka.net.NetworkingEngine.RequestType');
15
-
16
7
  describe('Player', () => {
17
8
  const Util = shaka.test.Util;
18
9
  const Feature = shakaAssets.Feature;
@@ -48,6 +39,7 @@ describe('Player', () => {
48
39
  // Grab event manager from the uncompiled library:
49
40
  eventManager = new shaka.util.EventManager();
50
41
  waiter = new shaka.test.Waiter(eventManager);
42
+ waiter.setPlayer(player);
51
43
 
52
44
  onErrorSpy = jasmine.createSpy('onError');
53
45
  onErrorSpy.and.callFake((event) => fail(event.detail));
@@ -117,7 +109,7 @@ describe('Player', () => {
117
109
 
118
110
  // Make sure we don't get stuck on gaps that only appear in some
119
111
  // browsers (Safari, Firefox).
120
- // TODO(https://github.com/google/shaka-player/issues/1702):
112
+ // TODO(https://github.com/shaka-project/shaka-player/issues/1702):
121
113
  // Is this necessary because of a bug in Shaka Player?
122
114
  player.configure('streaming.jumpLargeGaps', true);
123
115