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,8 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.util.Iterables');
8
-
9
7
  describe('Iterables', () => {
10
8
  const Iterables = shaka.util.Iterables;
11
9
 
@@ -67,66 +65,4 @@ describe('Iterables', () => {
67
65
  expect(Iterables.filter(input, (x) => x < 0)).toEqual([]);
68
66
  });
69
67
  });
70
-
71
- describe('enumerate', () => {
72
- function enumerate(it) {
73
- return Array.from(Iterables.enumerate(it));
74
- }
75
-
76
- it('works with no items', () => {
77
- expect(enumerate([])).toEqual([]);
78
- });
79
-
80
- it('works with one item', () => {
81
- expect(enumerate([999]))
82
- .toEqual([{i: 0, item: 999, prev: undefined, next: undefined}]);
83
- });
84
-
85
- it('works with special values', () => {
86
- expect(enumerate([[]]))
87
- .toEqual([{i: 0, item: [], prev: undefined, next: undefined}]);
88
- expect(enumerate([0]))
89
- .toEqual([{i: 0, item: 0, prev: undefined, next: undefined}]);
90
- expect(enumerate([null]))
91
- .toEqual([{i: 0, item: null, prev: undefined, next: undefined}]);
92
- expect(enumerate([undefined]))
93
- .toEqual([{i: 0, item: undefined, prev: undefined, next: undefined}]);
94
- });
95
-
96
- it('works with two items', () => {
97
- expect(enumerate([888, 999]))
98
- .toEqual([
99
- {i: 0, item: 888, prev: undefined, next: 999},
100
- {i: 1, item: 999, prev: 888, next: undefined},
101
- ]);
102
- });
103
-
104
- it('works with three items', () => {
105
- expect(enumerate([777, 888, 999]))
106
- .toEqual([
107
- {i: 0, item: 777, prev: undefined, next: 888},
108
- {i: 1, item: 888, prev: 777, next: 999},
109
- {i: 2, item: 999, prev: 888, next: undefined},
110
- ]);
111
- });
112
-
113
- it('keeps references', () => {
114
- const expected = [
115
- {a: 'x'},
116
- {b: 'y'},
117
- {c: 'z'},
118
- ];
119
- const actual = enumerate(expected);
120
-
121
- expect(actual[0].item).toBe(expected[0]);
122
- expect(actual[0].next).toBe(expected[1]);
123
-
124
- expect(actual[1].prev).toBe(expected[0]);
125
- expect(actual[1].item).toBe(expected[1]);
126
- expect(actual[1].next).toBe(expected[2]);
127
-
128
- expect(actual[2].prev).toBe(expected[1]);
129
- expect(actual[2].item).toBe(expected[2]);
130
- });
131
- });
132
68
  });
@@ -4,9 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.util.LanguageUtils');
8
- goog.require('shaka.util.ManifestParserUtils');
9
-
10
7
  describe('LanguageUtils', () => {
11
8
  const LanguageUtils = shaka.util.LanguageUtils;
12
9
 
@@ -4,8 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.util.ManifestParserUtils');
8
-
9
7
  describe('ManifestParserUtils', () => {
10
8
  const ManifestParserUtils = shaka.util.ManifestParserUtils;
11
9
 
@@ -4,11 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('goog.asserts');
8
- goog.require('shaka.test.Util');
9
- goog.require('shaka.util.Mp4BoxParsers');
10
- goog.require('shaka.util.Mp4Parser');
11
-
12
7
  describe('Mp4BoxParsers', () => {
13
8
  const videoInitSegmentUri = '/base/test/test/assets/sintel-video-init.mp4';
14
9
  const videoSegmentUri = '/base/test/test/assets/sintel-video-segment.mp4';
@@ -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.util.Error');
9
- goog.require('shaka.util.Mp4Parser');
10
-
11
7
  describe('Mp4Parser', () => {
12
8
  const Util = shaka.test.Util;
13
9
 
@@ -4,9 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.test.Util');
8
- goog.require('shaka.util.MultiMap');
9
-
10
7
  describe('MultiMap', () => {
11
8
  /** @type {shaka.util.MultiMap<number>} */
12
9
  let map;
@@ -4,8 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.util.ObjectUtils');
8
-
9
7
  describe('ObjectUtils', () => {
10
8
  const ObjectUtils = shaka.util.ObjectUtils;
11
9
 
@@ -4,10 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.test.ManifestGenerator');
8
- goog.require('shaka.util.ManifestParserUtils');
9
- goog.require('shaka.util.PeriodCombiner');
10
-
11
7
  describe('PeriodCombiner', () => {
12
8
  // These test cases don't really read well as "it" statements. Phrasing them
13
9
  // that way would make the names very long, so here we break with that
@@ -477,7 +473,7 @@ describe('PeriodCombiner', () => {
477
473
  a3.originalId = 'a3';
478
474
  a3.bandwidth = 97065;
479
475
  a3.roles = ['role1', 'role2'];
480
- a2.codecs = 'mp4a.40.2';
476
+ a3.codecs = 'mp4a.40.2';
481
477
 
482
478
  // a4 has a different label from a3, and should not
483
479
  // be filtered out.
@@ -500,14 +496,24 @@ describe('PeriodCombiner', () => {
500
496
  const t1 = makeTextStream('en');
501
497
  t1.originalId = 't1';
502
498
  t1.roles = ['role1'];
499
+ t1.bandwidth = 1158;
503
500
 
504
501
  const t2 = makeTextStream('en');
505
502
  t2.originalId = 't2';
506
503
  t2.roles = ['role1', 'role2'];
504
+ t2.bandwidth = 1172;
507
505
 
508
506
  const t3 = makeTextStream('en');
509
507
  t3.originalId = 't3';
510
508
  t3.roles = ['role1'];
509
+ t3.bandwidth = 1158;
510
+
511
+ // t4 has a different bandwidth from t3, and should not
512
+ // be filtered out.
513
+ const t4 = makeTextStream('en');
514
+ t4.originalId = 't4';
515
+ t4.roles = ['role1'];
516
+ t4.bandwidth = 1186;
511
517
 
512
518
  // i1 and i3 are duplicates.
513
519
  const i1 = makeImageStream(240);
@@ -539,6 +545,7 @@ describe('PeriodCombiner', () => {
539
545
  t1,
540
546
  t2,
541
547
  t3,
548
+ t4,
542
549
  ],
543
550
  imageStreams: [
544
551
  i1,
@@ -565,7 +572,7 @@ describe('PeriodCombiner', () => {
565
572
  }
566
573
 
567
574
  const textStreams = combiner.getTextStreams();
568
- expect(textStreams.length).toBe(2);
575
+ expect(textStreams.length).toBe(3);
569
576
 
570
577
  // t3 should've been filtered out
571
578
  const textIds = textStreams.map((t) => t.originalId);
@@ -1059,7 +1066,7 @@ describe('PeriodCombiner', () => {
1059
1066
  it('The number of variants stays stable after many periods ' +
1060
1067
  'when going between similar content and varying ads', async () => {
1061
1068
  // This test is based on the content from
1062
- // https://github.com/google/shaka-player/issues/2716
1069
+ // https://github.com/shaka-project/shaka-player/issues/2716
1063
1070
  // that used to cause our period flattening logic to keep
1064
1071
  // creating new variants for every new period added.
1065
1072
  // It's ok to create a few additional varinats/streams,
@@ -4,11 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.test.Util');
8
- goog.require('shaka.util.Error');
9
- goog.require('shaka.util.Pssh');
10
- goog.require('shaka.util.Uint8ArrayUtils');
11
-
12
7
  describe('Pssh', () => {
13
8
  const Uint8ArrayUtils = shaka.util.Uint8ArrayUtils;
14
9
 
@@ -4,8 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.util.StateHistory');
8
-
9
7
  describe('StateHistory', () => {
10
8
  const oldDateNow = Date.now;
11
9
 
@@ -4,11 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.test.FakeDrmEngine');
8
- goog.require('shaka.test.ManifestGenerator');
9
- goog.require('shaka.test.Util');
10
- goog.require('shaka.util.StreamUtils');
11
-
12
7
  describe('StreamUtils', () => {
13
8
  const StreamUtils = shaka.util.StreamUtils;
14
9
 
@@ -16,14 +11,14 @@ describe('StreamUtils', () => {
16
11
  /** @type {!jasmine.Spy} */
17
12
  let decodingInfoSpy;
18
13
 
19
- const originalDecodingInfo = window.shakaMediaCapabilities.decodingInfo;
14
+ const originalDecodingInfo = navigator.mediaCapabilities.decodingInfo;
20
15
 
21
16
  beforeEach(() => {
22
17
  decodingInfoSpy = jasmine.createSpy('decodingInfo');
23
18
  });
24
19
 
25
20
  afterEach(() => {
26
- window.shakaMediaCapabilities.decodingInfo = originalDecodingInfo;
21
+ navigator.mediaCapabilities.decodingInfo = originalDecodingInfo;
27
22
  });
28
23
 
29
24
  describe('filterStreamsByLanguageAndRole', () => {
@@ -184,7 +179,7 @@ describe('StreamUtils', () => {
184
179
  });
185
180
 
186
181
  it('chooses only one role, even if none is preferred', () => {
187
- // Regression test for https://github.com/google/shaka-player/issues/949
182
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/949
188
183
  manifest = shaka.test.ManifestGenerator.generate((manifest) => {
189
184
  manifest.addTextStream(0, (stream) => {
190
185
  stream.language = 'en';
@@ -223,7 +218,7 @@ describe('StreamUtils', () => {
223
218
  });
224
219
 
225
220
  it('chooses only one role, even if all are primary', () => {
226
- // Regression test for https://github.com/google/shaka-player/issues/949
221
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/949
227
222
  manifest = shaka.test.ManifestGenerator.generate((manifest) => {
228
223
  manifest.addTextStream(0, (stream) => {
229
224
  stream.language = 'en';
@@ -269,7 +264,7 @@ describe('StreamUtils', () => {
269
264
  });
270
265
 
271
266
  it('chooses only one language, even if all are primary', () => {
272
- // Regression test for https://github.com/google/shaka-player/issues/918
267
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/918
273
268
  manifest = shaka.test.ManifestGenerator.generate((manifest) => {
274
269
  manifest.addTextStream(0, (stream) => {
275
270
  stream.language = 'en';
@@ -511,7 +506,7 @@ describe('StreamUtils', () => {
511
506
  });
512
507
 
513
508
  it('handles decodingInfo exception', async () => {
514
- window.shakaMediaCapabilities.decodingInfo =
509
+ navigator.mediaCapabilities.decodingInfo =
515
510
  shaka.test.Util.spyFunc(decodingInfoSpy);
516
511
  // If decodingInfo() fails, setDecodingInfo should finish without throwing
517
512
  // an exception, and the variant should have no decodingInfo result.
@@ -539,38 +534,44 @@ describe('StreamUtils', () => {
539
534
  });
540
535
 
541
536
  it('includes transferFunction in config when hdr', async () => {
542
- window.shakaMediaCapabilities.decodingInfo =
543
- shaka.test.Util.spyFunc(decodingInfoSpy);
537
+ const originalDecodingInfo = navigator.mediaCapabilities.decodingInfo;
544
538
 
545
- manifest = shaka.test.ManifestGenerator.generate((manifest) => {
546
- manifest.addVariant(0, (variant) => {
547
- variant.addVideo(0, (stream) => {
548
- stream.mime('video/mp4', 'avc1.640028');
549
- stream.hdr = 'SDR';
539
+ try {
540
+ navigator.mediaCapabilities.decodingInfo =
541
+ shaka.test.Util.spyFunc(decodingInfoSpy);
542
+
543
+ manifest = shaka.test.ManifestGenerator.generate((manifest) => {
544
+ manifest.addVariant(0, (variant) => {
545
+ variant.addVideo(0, (stream) => {
546
+ stream.mime('video/mp4', 'avc1.640028');
547
+ stream.hdr = 'SDR';
548
+ });
550
549
  });
551
- });
552
- manifest.addVariant(1, (variant) => {
553
- variant.addVideo(1, (stream) => {
554
- stream.mime('video/mp4', 'hvc1.2.4.L150.90');
555
- stream.hdr = 'PQ';
550
+ manifest.addVariant(1, (variant) => {
551
+ variant.addVideo(1, (stream) => {
552
+ stream.mime('video/mp4', 'hvc1.2.4.L150.90');
553
+ stream.hdr = 'PQ';
554
+ });
556
555
  });
557
- });
558
- manifest.addVariant(2, (variant) => {
559
- variant.addVideo(2, (stream) => {
560
- stream.mime('video/mp4', 'hvc1.2.4.L153.B0');
561
- stream.hdr = 'HLG';
556
+ manifest.addVariant(2, (variant) => {
557
+ variant.addVideo(2, (stream) => {
558
+ stream.mime('video/mp4', 'hvc1.2.4.L153.B0');
559
+ stream.hdr = 'HLG';
560
+ });
562
561
  });
563
562
  });
564
- });
565
563
 
566
- await StreamUtils.getDecodingInfosForVariants(manifest.variants,
567
- /* usePersistentLicenses= */ false, /* srcEquals= */ false);
568
- expect(decodingInfoSpy.calls.argsFor(0)[0].video.transferFunction)
569
- .toBe('srgb');
570
- expect(decodingInfoSpy.calls.argsFor(1)[0].video.transferFunction)
571
- .toBe('pq');
572
- expect(decodingInfoSpy.calls.argsFor(2)[0].video.transferFunction)
573
- .toBe('hlg');
564
+ await StreamUtils.getDecodingInfosForVariants(manifest.variants,
565
+ /* usePersistentLicenses= */ false, /* srcEquals= */ false);
566
+ expect(decodingInfoSpy.calls.argsFor(0)[0].video.transferFunction)
567
+ .toBe('srgb');
568
+ expect(decodingInfoSpy.calls.argsFor(1)[0].video.transferFunction)
569
+ .toBe('pq');
570
+ expect(decodingInfoSpy.calls.argsFor(2)[0].video.transferFunction)
571
+ .toBe('hlg');
572
+ } finally {
573
+ navigator.mediaCapabilities.decodingInfo = originalDecodingInfo;
574
+ }
574
575
  });
575
576
  });
576
577
 
@@ -861,7 +862,7 @@ describe('StreamUtils', () => {
861
862
  });
862
863
  });
863
864
  });
864
- window.shakaMediaCapabilities.decodingInfo =
865
+ navigator.mediaCapabilities.decodingInfo =
865
866
  shaka.test.Util.spyFunc(decodingInfoSpy);
866
867
  decodingInfoSpy.and.callFake((config) => {
867
868
  const res = config.video.contentType.includes('notsmooth') ?
@@ -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.util.BufferUtils');
9
- goog.require('shaka.util.Error');
10
- goog.require('shaka.util.ManifestParserUtils');
11
- goog.require('shaka.util.StringUtils');
12
-
13
7
  describe('StringUtils', () => {
14
8
  const StringUtils = shaka.util.StringUtils;
15
9
 
@@ -4,8 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.util.TextParser');
8
-
9
7
  describe('TextParser', () => {
10
8
  const TextParser = shaka.util.TextParser;
11
9
 
@@ -4,10 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('goog.asserts');
8
- goog.require('shaka.util.XmlUtils');
9
-
10
-
11
7
  describe('XmlUtils', () => {
12
8
  // A number that cannot be represented as a Javascript number.
13
9
  const HUGE_NUMBER_STRING = new Array(500).join('7');
@@ -808,6 +808,27 @@ goog.Uri.QueryData.prototype.add = function(key, value) {
808
808
  return this;
809
809
  };
810
810
 
811
+ /**
812
+ * Sets a key value pair and removes all other keys with the same value.
813
+ *
814
+ * @param {string} key Name.
815
+ * @param {string} value Value.
816
+ * @return {!goog.Uri.QueryData} Instance of this object.
817
+ */
818
+ goog.Uri.QueryData.prototype.set = function(key, value) {
819
+ this.ensureKeyMapInitialized_();
820
+ // Invalidate the cache.
821
+ this.encodedQuery_ = null;
822
+
823
+ if (!this.keyMap_.hasOwnProperty(key)) {
824
+ this.add(key, value);
825
+ } else {
826
+ this.keyMap_[key] = [value];
827
+ }
828
+
829
+ return this;
830
+ };
831
+
811
832
 
812
833
  /**
813
834
  * @return {string} Encoded query string.
package/ui/controls.js CHANGED
@@ -254,6 +254,9 @@ shaka.ui.Controls = class extends shaka.util.FakeEventTarget {
254
254
 
255
255
  this.localization_ = null;
256
256
  this.pressedKeys_.clear();
257
+
258
+ // FakeEventTarget implements IReleasable
259
+ super.release();
257
260
  }
258
261
 
259
262
 
@@ -90,18 +90,18 @@
90
90
 
91
91
  .shaka-skip-ad-button {
92
92
  padding: 5px 15px;
93
- background: rgba(0, 0, 0, 0.7);
93
+ background: rgba(0 0 0 / 70%);
94
94
  border: none;
95
95
 
96
96
  &:disabled {
97
- background: rgba(0, 0, 0, 0.3);
97
+ background: rgba(0 0 0 / 30%);
98
98
  }
99
99
 
100
100
  cursor: pointer;
101
101
  }
102
102
 
103
103
  .shaka-skip-ad-counter {
104
- padding: 5px 5px;
105
- background: rgba(0, 0, 0, 0.7);
104
+ padding: 5px;
105
+ background: rgba(0 0 0 / 70%);
106
106
  margin: 0;
107
107
  }
@@ -38,7 +38,7 @@
38
38
  border-radius: 50%;
39
39
 
40
40
  /* A small drop shadow below the button. */
41
- box-shadow: rgba(0, 0, 0, 0.1) 0 0 20px 0;
41
+ box-shadow: rgba(0 0 0 / 10%) 0 0 20px 0;
42
42
 
43
43
  /* No border. */
44
44
  border: none;
@@ -51,7 +51,7 @@
51
51
  background-position: center center;
52
52
 
53
53
  /* A background color behind the play arrow. */
54
- background-color: rgba(255, 255, 255, 0.9);
54
+ background-color: rgba(255 255 255 / 90%);
55
55
 
56
56
  .show-when-controls-shown();
57
57
 
@@ -60,11 +60,11 @@
60
60
  * deployed separately from the compiled CSS.
61
61
  * Note that these URIs should relative to ui/controls.less, not this file. */
62
62
  &[icon="play"] {
63
- background-image: data-uri('images/play_arrow.svg');
63
+ background-image: data-uri("images/play_arrow.svg");
64
64
  }
65
65
 
66
66
  &[icon="pause"] {
67
- background-image: data-uri('images/pause.svg');
67
+ background-image: data-uri("images/pause.svg");
68
68
  }
69
69
  }
70
70
 
@@ -74,7 +74,7 @@
74
74
  */
75
75
  .shaka-current-time {
76
76
  font-size: 14px;
77
- color: rgb(255, 255, 255);
77
+ color: white;
78
78
  cursor: pointer;
79
79
 
80
80
  &[disabled] {
@@ -6,8 +6,6 @@
6
6
 
7
7
  /* All of the top-level containers into which various visible features go. */
8
8
 
9
- @transparent: rgba(0, 0, 0, 0);
10
-
11
9
  /* A container for the entire video + controls combo. This is the auto-setup
12
10
  * div which we populate. */
13
11
  .shaka-video-container {
@@ -19,13 +17,13 @@
19
17
 
20
18
  /* Set a special font for material design icons. */
21
19
  .material-icons-round {
22
- font-family: 'Material Icons Round';
20
+ font-family: "Material Icons Round";
23
21
  font-size: 24px;
24
22
  }
25
23
 
26
24
  /* Set the fonts for all other content. */
27
25
  * {
28
- font-family: Roboto-Regular, Roboto, sans-serif;
26
+ font-family: Roboto-Regular, Roboto, sans-serif, TengwarTelcontar;
29
27
  }
30
28
  }
31
29
 
@@ -202,7 +200,7 @@
202
200
  min-width: 300px;
203
201
 
204
202
  color: white;
205
- background-color: rgba(35, 35, 35, 0.9);
203
+ background-color: rgba(35 35 35 / 90%);
206
204
 
207
205
  font-size: 14px;
208
206
 
@@ -223,12 +221,12 @@
223
221
  }
224
222
 
225
223
  span {
226
- color: rgb(150, 150, 150);
224
+ color: rgb(150 150 150);
227
225
  }
228
226
  }
229
227
 
230
228
  .shaka-context-menu {
231
- background-color: rgba(35, 35, 35, 0.9);
229
+ background-color: rgba(35 35 35 / 90%);
232
230
 
233
231
  border-radius: 2px;
234
232
 
@@ -248,7 +246,7 @@
248
246
  cursor: pointer;
249
247
 
250
248
  &:hover {
251
- background-color: rgba(50, 50, 50, 0.9);
249
+ background-color: rgba(50 50 50 / 90%);
252
250
  }
253
251
  }
254
252
 
@@ -277,7 +275,7 @@
277
275
  .show-when-controls-shown();
278
276
 
279
277
  /* A black gradient at the bottom, behind the controls, but only so high. */
280
- background: linear-gradient(to top, rgba(0, 0, 0, 1) 0, @transparent 15%);
278
+ background: linear-gradient(to top, black 0, transparent 15%);
281
279
  }
282
280
 
283
281
  .shaka-text-container {
@@ -305,7 +303,7 @@
305
303
  /* These are defaults which are overridden by JS or cue styles. */
306
304
  font-size: 20px;
307
305
  line-height: 1.4; // relative to font size.
308
- color: rgb(255, 255, 255);
306
+ color: white;
309
307
 
310
308
  span.shaka-text-wrapper {
311
309
  display: inline;
@@ -354,5 +352,5 @@
354
352
 
355
353
  /* Add a bit of a white shadow to keep our black spinner visible
356
354
  on a black background. */
357
- filter: drop-shadow(0 0 2px rgba(255, 255, 255, 0.5));
355
+ filter: drop-shadow(0 0 2px rgba(255 255 255 / 50%));
358
356
  }
@@ -18,7 +18,7 @@
18
18
 
19
19
  /* Styles for the menu itself. */
20
20
  background: white;
21
- box-shadow: 0 1px 9px 0 rgba(0, 0, 0, 0.4);
21
+ box-shadow: 0 1px 9px 0 rgba(0 0 0 / 40%);
22
22
  border-radius: 2px;
23
23
  max-height: 250px;
24
24
  min-width: 180px;
@@ -52,7 +52,7 @@
52
52
 
53
53
  /* When hovered, the button's background is highlighted. */
54
54
  &:hover {
55
- background: rgb(224, 224, 224);
55
+ background: rgb(224 224 224);
56
56
  }
57
57
 
58
58
  /* The button is clickable, showing cursor pointer */
@@ -64,7 +64,7 @@
64
64
  }
65
65
 
66
66
  .shaka-keyboard-navigation &:focus {
67
- background: rgb(224, 224, 224);
67
+ background: rgb(224 224 224);
68
68
  }
69
69
  }
70
70
 
@@ -109,7 +109,7 @@
109
109
  * language, the currently-selected resolution, etc. */
110
110
  .shaka-current-selection-span {
111
111
  /* This is dimmer than the other span, which is the name of the submenu. */
112
- color: rgba(0, 0, 0, 0.54);
112
+ color: rgba(0 0 0 / 54%);
113
113
  }
114
114
 
115
115
  /* The submenus have somewhat different margins inside them. */
@@ -57,6 +57,11 @@
57
57
  /* The track should fill the range element. */
58
58
  width: 100%;
59
59
 
60
+ /* Since range elements are special input elements, they must reflect user
61
+ * interaction, so when the user hovers over the range element, the cursor
62
+ * must be a pointer. */
63
+ cursor: pointer;
64
+
60
65
  /* The track should be tall enough to contain the thumb without clipping it.
61
66
  * It is very tricky to make the thumb show outside the track on IE 11, and
62
67
  * it is incompatible with our background gradients. */
@@ -53,7 +53,7 @@
53
53
  font-size: 13px;
54
54
 
55
55
  /* Styling */
56
- background: rgba(35, 35, 35, 0.9);
56
+ background: rgba(35 35 35 / 90%);
57
57
  color: white;
58
58
  border-radius: 3px;
59
59
  padding: 5px 10px;