shaka-player 3.2.2 → 3.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. package/.csslintrc +11 -1
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
  3. package/.github/workflows/build-and-test.yaml +130 -0
  4. package/.github/workflows/custom-actions/prep-for-appspot/action.yaml +56 -0
  5. package/.github/workflows/custom-actions/set-commit-status/action.yaml +41 -0
  6. package/.github/workflows/demo-version-index.yaml +29 -0
  7. package/.github/workflows/nightly-demo.yaml +42 -0
  8. package/.github/workflows/release-please.yaml +145 -0
  9. package/.github/workflows/safari-homedir-launcher.sh +18 -0
  10. package/.github/workflows/selenium-lab-tests.yaml +93 -0
  11. package/AUTHORS +2 -0
  12. package/CHANGELOG.md +1598 -1525
  13. package/CONTRIBUTING.md +2 -2
  14. package/CONTRIBUTORS +2 -0
  15. package/README.md +7 -7
  16. package/app-engine/README.md +9 -0
  17. package/app-engine/demo-version-index/README.md +14 -0
  18. package/app-engine/demo-version-index/app.yaml +2 -0
  19. package/app-engine/demo-version-index/main.py +162 -0
  20. package/app-engine/demo-version-index/requirements.txt +6 -0
  21. package/app-engine/demo-version-index/templates/index.html +114 -0
  22. package/app-engine/shaka-player-demo/README.md +18 -0
  23. package/app-engine/shaka-player-demo/app.yaml +61 -0
  24. package/app-engine/shaka-player-demo/main.py +95 -0
  25. package/app-engine/shaka-player-demo/posters/10yo.png +0 -0
  26. package/app-engine/shaka-player-demo/posters/10yo.xcf +0 -0
  27. package/app-engine/shaka-player-demo/posters/1yo.jpg +0 -0
  28. package/app-engine/shaka-player-demo/posters/2yo.png +0 -0
  29. package/app-engine/shaka-player-demo/posters/2yo.xcf +0 -0
  30. package/app-engine/shaka-player-demo/posters/3yo.png +0 -0
  31. package/app-engine/shaka-player-demo/posters/3yo.xcf +0 -0
  32. package/app-engine/shaka-player-demo/posters/4yo.png +0 -0
  33. package/app-engine/shaka-player-demo/posters/4yo.xcf +0 -0
  34. package/app-engine/shaka-player-demo/posters/5yo.png +0 -0
  35. package/app-engine/shaka-player-demo/posters/5yo.xcf +0 -0
  36. package/app-engine/shaka-player-demo/posters/6yo.png +0 -0
  37. package/app-engine/shaka-player-demo/posters/6yo.xcf +0 -0
  38. package/app-engine/shaka-player-demo/posters/7yo.png +0 -0
  39. package/app-engine/shaka-player-demo/posters/7yo.xcf +0 -0
  40. package/app-engine/shaka-player-demo/posters/8yo.png +0 -0
  41. package/app-engine/shaka-player-demo/posters/8yo.xcf +0 -0
  42. package/app-engine/shaka-player-demo/posters/9yo.png +0 -0
  43. package/app-engine/shaka-player-demo/posters/9yo.xcf +0 -0
  44. package/app-engine/shaka-player-demo/posters/audioOnly.gif +0 -0
  45. package/app-engine/shaka-player-demo/posters/audioRickRoll.gif +0 -0
  46. package/app-engine/shaka-player-demo/posters/colorbars.gif +0 -0
  47. package/app-engine/shaka-player-demo/posters/fireworks.jpg +0 -0
  48. package/app-engine/shaka-player-demo/posters/party-hat.png +0 -0
  49. package/app-engine/shaka-player-demo/posters/sources.txt +46 -0
  50. package/app-engine/shaka-player-demo/posters/standard.png +0 -0
  51. package/app-engine/shaka-player-demo/posters/trek.jpg +0 -0
  52. package/app-engine/shaka-player-demo/posters/valentines.png +0 -0
  53. package/app-engine/shaka-player-demo/posters/zombie.jpg +0 -0
  54. package/app-engine/shaka-player-demo/posters.py +110 -0
  55. package/app-engine/shaka-player-demo/requirements.txt +5 -0
  56. package/app-engine/shaka-player-demo/time.txt +1 -0
  57. package/build/README.md +1 -1
  58. package/build/checkversion.py +1 -1
  59. package/build/conformance.textproto +13 -0
  60. package/build/docker/Dockerfile +20 -0
  61. package/build/docker/docker-compose.yml +10 -0
  62. package/build/gendeps.py +18 -15
  63. package/build/shaka-lab.yaml +163 -0
  64. package/build/shakaBuildHelpers.py +4 -29
  65. package/build/test.py +93 -28
  66. package/build/wrapper.template.js +2 -2
  67. package/demo/TengwarTelcontar.woff2 +0 -0
  68. package/demo/asset_card.js +1 -2
  69. package/demo/cast_receiver/index.html +1 -1
  70. package/demo/cast_receiver/receiver_app.css +14 -14
  71. package/demo/common/assets.js +2 -0
  72. package/demo/config.js +0 -1
  73. package/demo/custom.js +0 -1
  74. package/demo/customWarning.txt +2 -2
  75. package/demo/demo.less +29 -18
  76. package/demo/demo_uncompiled.js +1 -13
  77. package/demo/index.html +1 -1
  78. package/demo/main.js +3 -3
  79. package/dist/controls.css +2 -2
  80. package/dist/controls.css.map +1 -1
  81. package/dist/demo.compiled.debug.js +191 -194
  82. package/dist/demo.compiled.debug.map +4 -4
  83. package/dist/demo.compiled.js +191 -194
  84. package/dist/demo.compiled.map +4 -4
  85. package/dist/demo.css +1 -1
  86. package/dist/demo.css.map +1 -1
  87. package/dist/deps.js +225 -219
  88. package/dist/locales.js +31 -31
  89. package/dist/receiver.compiled.debug.js +43 -45
  90. package/dist/receiver.compiled.debug.map +4 -4
  91. package/dist/receiver.compiled.js +43 -45
  92. package/dist/receiver.compiled.map +4 -4
  93. package/dist/shaka-player.compiled.d.ts +247 -227
  94. package/dist/shaka-player.compiled.debug.d.ts +247 -227
  95. package/dist/shaka-player.compiled.debug.externs.js +43 -16
  96. package/dist/shaka-player.compiled.debug.js +384 -388
  97. package/dist/shaka-player.compiled.debug.map +4 -4
  98. package/dist/shaka-player.compiled.externs.js +43 -16
  99. package/dist/shaka-player.compiled.js +818 -817
  100. package/dist/shaka-player.compiled.map +4 -4
  101. package/dist/shaka-player.ui.d.ts +291 -280
  102. package/dist/shaka-player.ui.debug.d.ts +291 -280
  103. package/dist/shaka-player.ui.debug.externs.js +45 -27
  104. package/dist/shaka-player.ui.debug.js +389 -394
  105. package/dist/shaka-player.ui.debug.map +4 -4
  106. package/dist/shaka-player.ui.externs.js +45 -27
  107. package/dist/shaka-player.ui.js +964 -965
  108. package/dist/shaka-player.ui.map +4 -4
  109. package/docs/design/REDESIGN.md +33 -33
  110. package/docs/design/codec_preferences.md +1 -1
  111. package/docs/design/dash-audio-channels.md +3 -3
  112. package/docs/design/dash-manifests.md +1 -1
  113. package/docs/design/gap-jumping.md +3 -3
  114. package/docs/design/preload.md +2 -2
  115. package/docs/tutorials/faq.md +8 -8
  116. package/docs/tutorials/index.json +1 -0
  117. package/docs/tutorials/plugins.md +3 -3
  118. package/docs/tutorials/selenium-grid-config.md +122 -0
  119. package/docs/tutorials/welcome.md +10 -2
  120. package/externs/shaka/player.js +8 -0
  121. package/externs/shaka/text.js +10 -0
  122. package/karma.conf.js +156 -45
  123. package/lib/abr/simple_abr_manager.js +12 -6
  124. package/lib/ads/ad_manager.js +1 -0
  125. package/lib/cast/cast_proxy.js +6 -4
  126. package/lib/cast/cast_receiver.js +3 -0
  127. package/lib/cea/cea608_data_channel.js +2 -2
  128. package/lib/cea/cea708_service.js +5 -4
  129. package/lib/cea/mp4_cea_parser.js +11 -5
  130. package/lib/cea/sei_processor.js +6 -3
  131. package/lib/dash/dash_parser.js +43 -31
  132. package/lib/dash/mpd_utils.js +4 -5
  133. package/lib/dash/segment_list.js +1 -2
  134. package/lib/dash/segment_template.js +3 -3
  135. package/lib/hls/hls_parser.js +41 -9
  136. package/lib/hls/manifest_text_parser.js +4 -3
  137. package/lib/media/adaptation_set.js +1 -2
  138. package/lib/media/content_workarounds.js +2 -2
  139. package/lib/media/drm_engine.js +3 -2
  140. package/lib/media/media_source_engine.js +3 -2
  141. package/lib/media/mp4_segment_index_parser.js +1 -4
  142. package/lib/media/playhead.js +2 -2
  143. package/lib/media/presentation_timeline.js +18 -8
  144. package/lib/media/region_observer.js +39 -33
  145. package/lib/media/region_timeline.js +17 -19
  146. package/lib/media/segment_index.js +2 -1
  147. package/lib/media/segment_reference.js +19 -1
  148. package/lib/media/streaming_engine.js +12 -9
  149. package/lib/media/time_ranges_utils.js +1 -3
  150. package/lib/media/video_wrapper.js +1 -1
  151. package/lib/net/networking_engine.js +5 -1
  152. package/lib/offline/storage.js +12 -13
  153. package/lib/player.js +77 -36
  154. package/lib/polyfill/all.js +2 -3
  155. package/lib/polyfill/encryption_scheme.js +1 -1
  156. package/lib/polyfill/media_capabilities.js +32 -17
  157. package/lib/polyfill/mediasource.js +1 -1
  158. package/lib/text/cue.js +7 -1
  159. package/lib/text/simple_text_displayer.js +2 -1
  160. package/lib/text/ttml_text_parser.js +92 -63
  161. package/lib/text/ui_text_displayer.js +18 -12
  162. package/lib/util/buffer_utils.js +1 -3
  163. package/lib/util/ebml_parser.js +3 -3
  164. package/lib/util/error.js +1 -1
  165. package/lib/util/fake_event_target.js +21 -1
  166. package/lib/util/iterables.js +0 -46
  167. package/lib/util/mp4_box_parsers.js +1 -4
  168. package/lib/util/mp4_parser.js +5 -7
  169. package/lib/util/periods.js +8 -9
  170. package/lib/util/platform.js +3 -3
  171. package/lib/util/pssh.js +1 -4
  172. package/lib/util/stream_utils.js +88 -11
  173. package/lib/util/string_utils.js +3 -5
  174. package/lib/util/uint8array_utils.js +3 -5
  175. package/lib/util/xml_utils.js +34 -7
  176. package/package.json +62 -40
  177. package/roadmap.md +17 -17
  178. package/test/abr/simple_abr_manager_unit.js +3 -8
  179. package/test/ads/ad_manager_unit.js +0 -6
  180. package/test/cast/cast_proxy_unit.js +0 -8
  181. package/test/cast/cast_receiver_integration.js +1 -18
  182. package/test/cast/cast_receiver_unit.js +1 -9
  183. package/test/cast/cast_sender_unit.js +0 -6
  184. package/test/cast/cast_utils_unit.js +0 -13
  185. package/test/cea/cea608_memory_unit.js +0 -5
  186. package/test/cea/cea708_service_unit.js +0 -7
  187. package/test/cea/cea708_window_unit.js +0 -5
  188. package/test/cea/cea_decoder_unit.js +0 -6
  189. package/test/cea/dtvcc_packet_builder_unit.js +0 -3
  190. package/test/cea/dtvcc_packet_unit.js +0 -5
  191. package/test/cea/mp4_cea_parser_unit.js +0 -4
  192. package/test/dash/dash_parser_content_protection_unit.js +1 -10
  193. package/test/dash/dash_parser_live_unit.js +45 -15
  194. package/test/dash/dash_parser_manifest_unit.js +37 -18
  195. package/test/dash/dash_parser_segment_base_unit.js +1 -8
  196. package/test/dash/dash_parser_segment_list_unit.js +1 -7
  197. package/test/dash/dash_parser_segment_template_unit.js +0 -9
  198. package/test/dash/mpd_utils_unit.js +3 -11
  199. package/test/demo/demo_unit.js +0 -5
  200. package/test/deprecate/enforcer_unit.js +0 -4
  201. package/test/deprecate/version_unit.js +0 -2
  202. package/test/hls/hls_live_unit.js +2 -14
  203. package/test/hls/hls_parser_unit.js +76 -15
  204. package/test/hls/manifest_text_parser_unit.js +0 -10
  205. package/test/media/adaptation_set_criteria_unit.js +3 -7
  206. package/test/media/adaptation_set_unit.js +0 -2
  207. package/test/media/buffering_observer_unit.js +1 -4
  208. package/test/media/closed_caption_parser_unit.js +0 -3
  209. package/test/media/drm_engine_integration.js +2 -15
  210. package/test/media/drm_engine_unit.js +7 -27
  211. package/test/media/manifest_parser_unit.js +0 -4
  212. package/test/media/media_source_engine_integration.js +0 -7
  213. package/test/media/media_source_engine_unit.js +1 -14
  214. package/test/media/mp4_segment_index_parser_unit.js +0 -4
  215. package/test/media/play_rate_controller_unit.js +0 -4
  216. package/test/media/playhead_unit.js +8 -16
  217. package/test/media/presentation_timeline_unit.js +4 -7
  218. package/test/media/region_observer_unit.js +40 -10
  219. package/test/media/region_timeline_unit.js +40 -25
  220. package/test/media/segment_index_unit.js +0 -6
  221. package/test/media/segment_reference_unit.js +0 -3
  222. package/test/media/stall_detector_unit.js +0 -5
  223. package/test/media/streaming_engine_integration.js +11 -37
  224. package/test/media/streaming_engine_unit.js +155 -34
  225. package/test/media/time_ranges_utils_unit.js +0 -2
  226. package/test/media/transmuxer_integration.js +0 -6
  227. package/test/media/webm_segment_index_parser_unit.js +0 -4
  228. package/test/net/data_uri_plugin_unit.js +0 -7
  229. package/test/net/http_plugin_unit.js +0 -9
  230. package/test/net/networking_engine_unit.js +0 -11
  231. package/test/offline/download_progress_estimator_unit.js +0 -2
  232. package/test/offline/indexeddb_storage_unit.js +0 -6
  233. package/test/offline/manifest_convert_unit.js +0 -8
  234. package/test/offline/offline_integration.js +1 -10
  235. package/test/offline/offline_manifest_parser_unit.js +0 -6
  236. package/test/offline/offline_scheme_unit.js +0 -8
  237. package/test/offline/offline_uri_unit.js +0 -2
  238. package/test/offline/storage_compatibility_unit.js +1 -14
  239. package/test/offline/storage_integration.js +1 -25
  240. package/test/player_external.js +2 -10
  241. package/test/player_integration.js +62 -36
  242. package/test/player_load_graph_integration.js +1 -6
  243. package/test/player_src_equals_external.js +3 -9
  244. package/test/player_src_equals_integration.js +41 -15
  245. package/test/player_unit.js +71 -46
  246. package/test/routing/walker_unit.js +0 -8
  247. package/test/test/assets/chapters.vtt +2 -2
  248. package/test/test/assets/chapters2.vtt +10 -0
  249. package/test/test/assets/large_file.mpd +1 -1
  250. package/test/test/boot.js +75 -22
  251. package/test/test/externs/jasmine.js +2 -2
  252. package/test/test/externs/karma.js +4 -0
  253. package/test/test/namespace.js +10 -0
  254. package/test/test/util/canned_idb.js +0 -8
  255. package/test/test/util/cea_utils.js +0 -6
  256. package/test/test/util/dash_parser_util.js +0 -13
  257. package/test/test/util/fake_ad.js +0 -3
  258. package/test/test/util/fake_ad_manager.js +0 -9
  259. package/test/test/util/fake_demo_main.js +0 -5
  260. package/test/test/util/fake_drm_engine.js +0 -6
  261. package/test/test/util/fake_media_source_engine.js +0 -7
  262. package/test/test/util/fake_networking_engine.js +0 -5
  263. package/test/test/util/fake_text_displayer.js +0 -5
  264. package/test/test/util/indexeddb_utils.js +1 -10
  265. package/test/test/util/jasmine_fetch.js +0 -1
  266. package/test/test/util/loader.js +0 -18
  267. package/test/test/util/manifest_generator.js +9 -14
  268. package/test/test/util/manifest_parser_util.js +0 -6
  269. package/test/test/util/offline_utils.js +0 -5
  270. package/test/test/util/simple_fakes.js +9 -26
  271. package/test/test/util/stream_generator.js +0 -14
  272. package/test/test/util/streaming_engine_util.js +0 -15
  273. package/test/test/util/test_scheme.js +1 -19
  274. package/test/test/util/ttml_utils.js +79 -0
  275. package/test/test/util/ui_utils.js +0 -9
  276. package/test/test/util/util.js +15 -26
  277. package/test/test/util/waiter.js +84 -43
  278. package/test/text/cue_integration.js +0 -4
  279. package/test/text/lrc_text_parser_unit.js +0 -4
  280. package/test/text/mp4_ttml_parser_unit.js +10 -23
  281. package/test/text/mp4_vtt_parser_unit.js +1 -7
  282. package/test/text/sbv_text_parser_unit.js +0 -4
  283. package/test/text/simple_text_displayer_unit.js +1 -8
  284. package/test/text/srt_text_parser_unit.js +0 -4
  285. package/test/text/ssa_text_parser_unit.js +0 -5
  286. package/test/text/text_engine_unit.js +2 -7
  287. package/test/text/text_track_integration.js +0 -2
  288. package/test/text/ttml_text_parser_unit.js +495 -237
  289. package/test/text/ui_text_displayer_unit.js +44 -41
  290. package/test/text/vtt_text_parser_unit.js +0 -9
  291. package/test/text/web_vtt_generator_unit.js +0 -3
  292. package/test/ui/ad_ui_unit.js +0 -11
  293. package/test/ui/localization_unit.js +0 -3
  294. package/test/ui/text_displayer_layout_unit.js +9 -19
  295. package/test/ui/ui_customization_unit.js +0 -6
  296. package/test/ui/ui_integration.js +0 -16
  297. package/test/ui/ui_unit.js +1 -17
  298. package/test/util/abortable_operation_unit.js +4 -9
  299. package/test/util/array_utils_unit.js +0 -2
  300. package/test/util/buffer_utils_unit.js +0 -2
  301. package/test/util/data_view_reader_unit.js +0 -4
  302. package/test/util/ebml_parser_unit.js +0 -4
  303. package/test/util/event_manager_unit.js +0 -3
  304. package/test/util/fake_event_target_unit.js +0 -5
  305. package/test/util/functional_unit.js +1 -1
  306. package/test/util/iterables_unit.js +0 -64
  307. package/test/util/language_utils_unit.js +0 -3
  308. package/test/util/manifest_parser_utils_unit.js +0 -2
  309. package/test/util/mp4_box_parsers_unit.js +0 -5
  310. package/test/util/mp4_parser_unit.js +0 -4
  311. package/test/util/multi_map_unit.js +0 -3
  312. package/test/util/object_utils_unit.js +0 -2
  313. package/test/util/periods_unit.js +14 -7
  314. package/test/util/pssh_unit.js +0 -5
  315. package/test/util/state_history_unit.js +0 -2
  316. package/test/util/stream_utils_unit.js +39 -38
  317. package/test/util/string_utils_unit.js +0 -6
  318. package/test/util/text_parser_unit.js +0 -2
  319. package/test/util/xml_utils_unit.js +0 -4
  320. package/ui/controls.js +3 -0
  321. package/ui/less/ad_controls.less +4 -4
  322. package/ui/less/buttons.less +5 -9
  323. package/ui/less/containers.less +5 -7
  324. package/ui/less/overflow_menu.less +4 -4
  325. package/ui/less/range_elements.less +5 -0
  326. package/ui/locales/sjn-translations.yaml +257 -0
  327. package/ui/locales/sjn.json +42 -0
  328. package/ui/localization.js +12 -36
  329. package/ui/text_selection.js +1 -0
  330. package/externs/media_capabilities.js +0 -16
  331. package/externs/svgelement.js +0 -18
package/build/test.py CHANGED
@@ -19,13 +19,22 @@
19
19
  import argparse
20
20
  import json
21
21
  import logging
22
+ import os
22
23
  import platform
24
+ import re
23
25
 
24
26
  import build
25
27
  import gendeps
26
28
  import shakaBuildHelpers
27
29
 
28
30
 
31
+ # Set a higher default for capture_timeout in grid mode. If the test gets
32
+ # queued by the grid, this may prevent Karma from killing the session while
33
+ # waiting.
34
+ LOCAL_CAPTURE_TIMEOUT = 1 * 60 * 1000 # 1m in ms
35
+ SELENIUM_CAPTURE_TIMEOUT = 10 * 60 * 1000 # 10m in ms
36
+
37
+
29
38
  class _HandleMixedListsAction(argparse.Action):
30
39
  '''Action to handle comma-separated and space-separated lists.
31
40
 
@@ -59,6 +68,21 @@ class _HandleKeyValuePairs(argparse.Action):
59
68
  merged[key] = value
60
69
  setattr(namespace, self.dest, merged)
61
70
 
71
+ def _KeyValueValidator(argument):
72
+ '''To validate the option has a key value pair format.
73
+
74
+ When you forget to provide the option in key=value format,
75
+ it reminds you by throwing an error before executing any tests.
76
+ '''
77
+
78
+ keyValuePair = [str for str in argument.split('=') if str != ''];
79
+
80
+ if len(keyValuePair) == 2:
81
+ return argument
82
+ else:
83
+ raise argparse.ArgumentTypeError(
84
+ 'Received %s but expecting format of key=value' % argument
85
+ )
62
86
 
63
87
  def _IntGreaterThanZero(x):
64
88
  i = int(x)
@@ -85,6 +109,8 @@ def _GetDefaultBrowsers():
85
109
  raise Error('Unrecognized system: %s' % platform.uname()[0])
86
110
 
87
111
 
112
+ # TODO(joeyparrish): When internal tools using this Launcher system are removed,
113
+ # simplify this whole mess.
88
114
  class Launcher:
89
115
  """A stateful object for parsing arguments and running Karma commands.
90
116
 
@@ -111,7 +137,7 @@ class Launcher:
111
137
 
112
138
  running_commands = self.parser.add_argument_group(
113
139
  'Running',
114
- 'These commands affect how tests are ran.')
140
+ 'These commands affect how tests are run.')
115
141
  logging_commands = self.parser.add_argument_group(
116
142
  'Logging',
117
143
  'These commands affect what gets logged and how the logs will appear.')
@@ -215,9 +241,9 @@ class Launcher:
215
241
  running_commands.add_argument(
216
242
  '--capture-timeout',
217
243
  help='Kill the browser if it does not capture in the given time [ms]. '
218
- '(default %(default)s)',
219
- type=int,
220
- default=60000)
244
+ '(default {} for local, {} for Selenium)'.format(
245
+ LOCAL_CAPTURE_TIMEOUT, SELENIUM_CAPTURE_TIMEOUT),
246
+ type=int)
221
247
  running_commands.add_argument(
222
248
  '--delay-tests',
223
249
  help='Insert an artificial delay between tests, in seconds. '
@@ -229,6 +255,11 @@ class Launcher:
229
255
  default=None,
230
256
  const=2,
231
257
  nargs='?')
258
+ running_commands.add_argument(
259
+ '--spec-hide-passed',
260
+ help='If provided, configure the spec reporter to hide passing tests.',
261
+ action='store_true',
262
+ default=False)
232
263
  running_commands.add_argument(
233
264
  '--test-custom-asset',
234
265
  help='Run asset playback tests on a custom manifest URI.',
@@ -239,7 +270,7 @@ class Launcher:
239
270
  help='Configure license servers for the custom asset playback test. '
240
271
  'May be specified multiple times to configure multiple key '
241
272
  'systems.',
242
- type=str,
273
+ type=_KeyValueValidator,
243
274
  metavar='KEY_SYSTEM_ID=LICENSE_SERVER_URI',
244
275
  action=_HandleKeyValuePairs)
245
276
  running_commands.add_argument(
@@ -253,6 +284,13 @@ class Launcher:
253
284
  help="Don't use Babel to convert ES6 to ES5.",
254
285
  dest='babel',
255
286
  action='store_false')
287
+ running_commands.add_argument(
288
+ '--grid-address',
289
+ help='Address (hostname:port) of a Selenium grid to run tests on.')
290
+ running_commands.add_argument(
291
+ '--grid-config',
292
+ help='Path to a yaml config defining Selenium grid browsers. '
293
+ '(See docs/selenium-grid-config.md)')
256
294
 
257
295
 
258
296
  logging_commands.add_argument(
@@ -308,6 +346,17 @@ class Launcher:
308
346
  help='Specify the hostname to be used when capturing browsers. This '
309
347
  'defaults to localhost.',
310
348
  default='localhost')
349
+ networking_commands.add_argument(
350
+ '--tls-key',
351
+ help='Specify a TLS key to serve tests over HTTPs.')
352
+ networking_commands.add_argument(
353
+ '--tls-cert',
354
+ help='Specify a TLS cert to serve tests over HTTPs.')
355
+ networking_commands.add_argument(
356
+ '--lets-encrypt-folder',
357
+ help="Specify a Let's Encrypt folder to search for the latest key and "
358
+ "cert, to serve tests over HTTPs. This overrides --tls-key and "
359
+ "--tls-cert.")
311
360
 
312
361
 
313
362
  pre_launch_commands.add_argument(
@@ -340,27 +389,36 @@ class Launcher:
340
389
  pass_through = [
341
390
  'auto_watch',
342
391
  'babel',
392
+ 'browsers',
343
393
  'capture_timeout',
344
394
  'colors',
395
+ 'delay_tests',
345
396
  'drm',
397
+ 'exclude_browsers',
346
398
  'external',
347
399
  'filter',
400
+ 'grid_address',
401
+ 'grid_config',
348
402
  'hostname',
349
403
  'html_coverage_report',
350
404
  'log_level',
351
405
  'logging',
406
+ 'no_browsers',
352
407
  'port',
353
408
  'quarantined',
354
409
  'quick',
355
410
  'random',
411
+ 'reporters',
356
412
  'report_slower_than',
357
413
  'seed',
358
414
  'single_run',
359
- 'uncompiled',
360
- 'delay_tests',
415
+ 'spec_hide_passed',
361
416
  'test_custom_asset',
362
417
  'test_custom_license_server',
363
418
  'test_timeout',
419
+ 'tls_key',
420
+ 'tls_cert',
421
+ 'uncompiled',
364
422
  ]
365
423
 
366
424
  # Check each value before setting it to avoid passing null values.
@@ -369,8 +427,33 @@ class Launcher:
369
427
  if value is not None:
370
428
  self.karma_config[name] = value
371
429
 
372
- if self.parsed_args.reporters:
373
- self.karma_config['reporters'] = self.parsed_args.reporters
430
+ if not self.parsed_args.capture_timeout:
431
+ # The default for capture_timeout depends on whether or not we are using
432
+ # a Selenium grid.
433
+ if self.parsed_args.grid_config:
434
+ self.karma_config['capture_timeout'] = SELENIUM_CAPTURE_TIMEOUT
435
+ else:
436
+ self.karma_config['capture_timeout'] = LOCAL_CAPTURE_TIMEOUT
437
+
438
+ self._HandleLetsEncryptConfig()
439
+
440
+ def _HandleLetsEncryptConfig(self):
441
+ folder = self.parsed_args.lets_encrypt_folder
442
+ if not folder:
443
+ return
444
+
445
+ max_serial_number = 0
446
+ # Go through the contents of the folder to find the latest key & cert.
447
+ for file_name in os.listdir(folder):
448
+ matches = re.match(r'(?:privkey|fullchain)(\d+).pem', file_name)
449
+ if matches:
450
+ serial_number = int(matches.group(1))
451
+ max_serial_number = max(max_serial_number, serial_number)
452
+
453
+ self.karma_config['tls_key'] = os.path.join(
454
+ folder, 'privkey{}.pem'.format(max_serial_number))
455
+ self.karma_config['tls_cert'] = os.path.join(
456
+ folder, 'fullchain{}.pem'.format(max_serial_number))
374
457
 
375
458
  def ResolveBrowsers(self, default_browsers):
376
459
  """Decide what browsers we should use.
@@ -379,25 +462,7 @@ class Launcher:
379
462
  additional logic to derive a browser list from the parsed arguments.
380
463
  """
381
464
  assert(default_browsers and len(default_browsers))
382
-
383
- if self.parsed_args.no_browsers:
384
- logging.warning('In this mode browsers must manually connect to karma.')
385
- elif self.parsed_args.browsers:
386
- self.karma_config['browsers'] = self.parsed_args.browsers
387
- else:
388
- logging.warning('Using default browsers: %s', default_browsers)
389
- self.karma_config['browsers'] = default_browsers
390
-
391
- # Check if there are any browsers that we should remove
392
- if self.parsed_args.exclude_browsers and 'browsers' in self.karma_config:
393
- all_browsers = set(self.karma_config['browsers'])
394
- bad_browsers = set(self.parsed_args.exclude_browsers)
395
- if bad_browsers - all_browsers:
396
- raise RuntimeError('Attempting to exclude unselected browsers: %s' %
397
- ','.join(bad_browsers - all_browsers))
398
-
399
- good_browsers = all_browsers - bad_browsers
400
- self.karma_config['browsers'] = list(good_browsers)
465
+ self.karma_config['default_browsers'] = default_browsers
401
466
 
402
467
  def RunCommand(self, karma_conf):
403
468
  """Build a command and send it to Karma for execution.
@@ -6,7 +6,7 @@
6
6
 
7
7
  (function() {
8
8
  // This is "window" in browsers and "global" in nodejs.
9
- // See https://github.com/google/shaka-player/issues/1445
9
+ // See https://github.com/shaka-project/shaka-player/issues/1445
10
10
  var innerGlobal = typeof window != 'undefined' ? window : global;
11
11
 
12
12
  // This is where our library exports things to. It is "this" in the wrapped
@@ -18,7 +18,7 @@
18
18
  // $jscomp.global, which will be "window", or "global", or "this", depending
19
19
  // on circumstances.
20
20
  // See https://github.com/google/closure-compiler/issues/2957 and
21
- // https://github.com/google/shaka-player/issues/1455#issuecomment-393250035
21
+ // https://github.com/shaka-project/shaka-player/issues/1455#issuecomment-393250035
22
22
 
23
23
  // We provide "global" for use by Closure, and "window" for use by the Shaka
24
24
  // library itself. Both point to "innerGlobal" above.
Binary file
@@ -4,11 +4,10 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
-
8
7
  goog.provide('shakaDemo.AssetCard');
9
8
 
10
-
11
9
  goog.require('goog.asserts');
10
+ goog.require('shakaAssets');
12
11
  goog.require('shakaDemo.MessageIds');
13
12
  goog.require('shakaDemo.Tooltips');
14
13
  goog.requireType('ShakaDemoAssetInfo');
@@ -63,7 +63,7 @@ UNCOMPILED_JS = [
63
63
  <script defer src="../load.js"></script>
64
64
  </head>
65
65
  <body>
66
- <div data-shaka-player-container id="videoContainer">
66
+ <div data-shaka-player-container id="video-container">
67
67
  <video autoplay data-shaka-player id="video"></video>
68
68
  </div>
69
69
  <!-- Covers everything else while idle -->
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- /* Experimentation has revealed that unless html, body, and videoContainer are
7
+ /* Experimentation has revealed that unless html, body, and video-container are
8
8
  * width and height 100%, video can force all its parents to grow larger than
9
9
  * window.innerHeight, causing things to be cut off for some content.
10
10
  */
@@ -25,7 +25,7 @@ body {
25
25
  color: white;
26
26
  }
27
27
 
28
- #videoContainer {
28
+ #video-container {
29
29
  width: 100%;
30
30
  height: 100%;
31
31
  }
@@ -83,29 +83,29 @@ body:after {
83
83
  height: 0;
84
84
  overflow: hidden;
85
85
  z-index: -1;
86
- content: url(idle1.jpg) url(idle2.jpg) url(idle3.jpg);
86
+ content: url("idle1.jpg") url("idle2.jpg") url("idle3.jpg");
87
87
  }
88
88
 
89
89
  @keyframes bg-change {
90
- 0% { background-image: url('idle1.jpg'); padding-left: 0; }
90
+ 0% { background-image: url("idle1.jpg"); padding-left: 0; }
91
91
 
92
- 32% { background-image: url('idle1.jpg'); padding-left: 0; }
92
+ 32% { background-image: url("idle1.jpg"); padding-left: 0; }
93
93
 
94
- 34% { background-image: url('idle2.jpg'); padding-left: 0; }
94
+ 34% { background-image: url("idle2.jpg"); padding-left: 0; }
95
95
 
96
- 49% { background-image: url('idle2.jpg'); padding-left: 0; }
96
+ 49% { background-image: url("idle2.jpg"); padding-left: 0; }
97
97
 
98
- 50% { background-image: url('idle2.jpg'); padding-left: 400px; }
98
+ 50% { background-image: url("idle2.jpg"); padding-left: 400px; }
99
99
 
100
- 65% { background-image: url('idle2.jpg'); padding-left: 400px; }
100
+ 65% { background-image: url("idle2.jpg"); padding-left: 400px; }
101
101
 
102
- 67% { background-image: url('idle3.jpg'); padding-left: 400px; }
102
+ 67% { background-image: url("idle3.jpg"); padding-left: 400px; }
103
103
 
104
- 87% { background-image: url('idle3.jpg'); padding-left: 400px; }
104
+ 87% { background-image: url("idle3.jpg"); padding-left: 400px; }
105
105
 
106
- 88% { background-image: url('idle3.jpg'); padding-left: 0; }
106
+ 88% { background-image: url("idle3.jpg"); padding-left: 0; }
107
107
 
108
- 98% { background-image: url('idle3.jpg'); padding-left: 0; }
108
+ 98% { background-image: url("idle3.jpg"); padding-left: 0; }
109
109
 
110
- 100% { background-image: url('idle1.jpg'); padding-left: 0; }
110
+ 100% { background-image: url("idle1.jpg"); padding-left: 0; }
111
111
  }
@@ -13,6 +13,8 @@
13
13
  goog.require('ShakaDemoAssetInfo');
14
14
  goog.require('shakaDemo.MessageIds');
15
15
 
16
+ goog.provide('shakaAssets');
17
+
16
18
 
17
19
  // Types and enums {{{
18
20
  /**
package/demo/config.js CHANGED
@@ -11,7 +11,6 @@ goog.require('goog.asserts');
11
11
  goog.require('shakaDemo.BoolInput');
12
12
  goog.require('shakaDemo.DatalistInput');
13
13
  goog.require('shakaDemo.InputContainer');
14
- goog.require('shakaDemo.Main');
15
14
  goog.require('shakaDemo.MessageIds');
16
15
  goog.require('shakaDemo.NumberInput');
17
16
  goog.require('shakaDemo.SelectInput');
package/demo/custom.js CHANGED
@@ -12,7 +12,6 @@ goog.require('ShakaDemoAssetInfo');
12
12
  goog.require('shakaDemo.AssetCard');
13
13
  goog.require('shakaDemo.Input');
14
14
  goog.require('shakaDemo.InputContainer');
15
- goog.require('shakaDemo.Main');
16
15
  goog.require('shakaDemo.MessageIds');
17
16
  goog.require('shakaDemo.TextInput');
18
17
 
@@ -4,5 +4,5 @@ of the asset you were playing at the time you pressed the bug report button.
4
4
  We have detected that you were playing a custom asset.
5
5
  If this asset's URL is confidential, you might instead want to fill out an issue
6
6
  template manually:
7
- https://github.com/google/shaka-player/issues/new/choose
8
- -->
7
+ https://github.com/shaka-project/shaka-player/issues/new/choose
8
+ -->
package/demo/demo.less CHANGED
@@ -4,6 +4,8 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
+ /* stylelint-disable selector-class-pattern -- MDL classes can't be changed */
8
+
7
9
  // Import the MDL styles with the desired color scheme.
8
10
  @import (css, inline) "../node_modules/material-design-lite/dist/material.indigo-blue.min.css";
9
11
  @import (css, inline) "../node_modules/dialog-polyfill/dialog-polyfill.css";
@@ -15,7 +17,7 @@
15
17
  @drawer-width: 550px;
16
18
 
17
19
  @mdl-footer-link-color: #9e9e9e; /* copied from MDL stylesheet */
18
- @mdl-button-color: rgb(63,81,181); /* copied from MDL stylesheet */
20
+ @mdl-button-color: rgb(63 81 181); /* copied from MDL stylesheet */
19
21
 
20
22
  @progress-circle-size: 45px;
21
23
  @progress-circle-thickness: 5px;
@@ -24,7 +26,7 @@
24
26
  * here we override the font family for the MDL class. Without this, the menu
25
27
  * on the left side of the screen has no icon. */
26
28
  .material-icons {
27
- font-family: 'Material Icons Round';
29
+ font-family: "Material Icons Round";
28
30
  }
29
31
 
30
32
  /* Conflicting styles between the icons font & the MDL buttons caused some
@@ -73,12 +75,21 @@ main.mdl-layout__content {
73
75
  border-radius: 50%;
74
76
  width: 32px;
75
77
  color: #000;
76
- background: rgba(255, 255, 255, 0.85);
78
+ background: rgba(255 255 255 / 85%);
77
79
  }
78
80
 
79
81
  html, body {
80
82
  /* Ensure everything has a consistent font. */
81
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
83
+ font-family: Roboto-Regular, Roboto, sans-serif, TengwarTelcontar;
84
+ }
85
+
86
+ // This font supports the Sindarin (sjn) translation.
87
+ @font-face {
88
+ font-family: TengwarTelcontar;
89
+ // This could be served from demo/ (uncompiled) or dist (compiled).
90
+ src: url("../demo/TengwarTelcontar.woff2") format("woff2");
91
+ font-weight: normal;
92
+ font-style: normal;
82
93
  }
83
94
 
84
95
  /* Change the default opacity of the ripple container, to get around an iOS bug.
@@ -171,7 +182,7 @@ html, body {
171
182
  background-color: @error-color;
172
183
  color: white;
173
184
  position: relative;
174
- padding: 0 0;
185
+ padding: 0;
175
186
  top: 0;
176
187
  right: 1em;
177
188
  float: right;
@@ -203,56 +214,56 @@ html, body {
203
214
 
204
215
  /* features */
205
216
  &[icon="high_definition"] {
206
- background-image: data-uri('icons/custom_high_definition.svg');
217
+ background-image: data-uri("icons/custom_high_definition.svg");
207
218
  }
208
219
 
209
220
  &[icon="ultra_high_definition"] {
210
- background-image: data-uri('icons/custom_ultra_high_definition.svg');
221
+ background-image: data-uri("icons/custom_ultra_high_definition.svg");
211
222
  }
212
223
 
213
224
  &[icon="subtitles"] {
214
- background-image: data-uri('icons/baseline-subtitles-24px.svg');
225
+ background-image: data-uri("icons/baseline-subtitles-24px.svg");
215
226
  }
216
227
 
217
228
  &[icon="closed_caption"] {
218
- background-image: data-uri('icons/baseline-closed_caption-24px.svg');
229
+ background-image: data-uri("icons/baseline-closed_caption-24px.svg");
219
230
  }
220
231
 
221
232
  &[icon="live"] {
222
- background-image: data-uri('icons/baseline-live_tv-24px.svg');
233
+ background-image: data-uri("icons/baseline-live_tv-24px.svg");
223
234
  }
224
235
 
225
236
  &[icon="trick_mode"] {
226
- background-image: data-uri('icons/baseline-fast_forward-24px.svg');
237
+ background-image: data-uri("icons/baseline-fast_forward-24px.svg");
227
238
  }
228
239
 
229
240
  &[icon="surround_sound"] {
230
- background-image: data-uri('icons/baseline-surround_sound-24px.svg');
241
+ background-image: data-uri("icons/baseline-surround_sound-24px.svg");
231
242
  }
232
243
 
233
244
  &[icon="multiple_languages"] {
234
- background-image: data-uri('icons/baseline-language-24px.svg');
245
+ background-image: data-uri("icons/baseline-language-24px.svg");
235
246
  }
236
247
 
237
248
  &[icon="ad"] {
238
- background-image: data-uri('icons/custom_ad.svg');
249
+ background-image: data-uri("icons/custom_ad.svg");
239
250
  }
240
251
 
241
252
  &[icon="audio_only"] {
242
- background-image: data-uri('icons/baseline-audiotrack-24px.svg');
253
+ background-image: data-uri("icons/baseline-audiotrack-24px.svg");
243
254
  }
244
255
 
245
256
  /* key systems */
246
257
  &[icon="widevine"] {
247
- background-image: data-uri('icons/custom_widevine.svg');
258
+ background-image: data-uri("icons/custom_widevine.svg");
248
259
  }
249
260
 
250
261
  &[icon="clear_key"] {
251
- background-image: data-uri('icons/custom_clear_key.svg');
262
+ background-image: data-uri("icons/custom_clear_key.svg");
252
263
  }
253
264
 
254
265
  &[icon="playready"] {
255
- background-image: data-uri('icons/custom_playready.svg');
266
+ background-image: data-uri("icons/custom_playready.svg");
256
267
  }
257
268
  }
258
269
 
@@ -4,20 +4,8 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shakaDemo.AssetCard');
8
- goog.require('shakaDemo.CloseButton');
9
7
  goog.require('shakaDemo.Config');
10
8
  goog.require('shakaDemo.Custom');
11
- goog.require('shakaDemo.Utils');
12
9
  goog.require('shakaDemo.Front');
13
- goog.require('shakaDemo.BoolInput');
14
- goog.require('shakaDemo.DatalistInput');
15
- goog.require('shakaDemo.Input');
16
- goog.require('shakaDemo.MessageIds');
17
- goog.require('shakaDemo.NumberInput');
18
- goog.require('shakaDemo.SelectInput');
19
- goog.require('shakaDemo.TextInput');
20
- goog.require('shakaDemo.InputContainer');
21
- goog.require('shakaDemo.Main');
22
10
  goog.require('shakaDemo.Search');
23
- goog.require('shakaDemo.Tooltips');
11
+ goog.require('shakaDemo.Main');
package/demo/index.html CHANGED
@@ -141,7 +141,7 @@ UNCOMPILED_JS = [
141
141
  <ul class="mdl-mega-footer__link-list">
142
142
  <li><a rel="noopener" target="_blank" href="../docs/api/index.html" localized-string="DOCUMENTATION"></a></li>
143
143
  <li><a rel="noopener" target="_blank" href="https://www.apache.org/licenses/LICENSE-2.0" localized-string="LICENSE"></a></li>
144
- <li><a rel="noopener" target="_blank" href="https://github.com/google/shaka-player" localized-string="SOURCE"></a></li>
144
+ <li><a rel="noopener" target="_blank" href="https://github.com/shaka-project/shaka-player" localized-string="SOURCE"></a></li>
145
145
  <li><a rel="noopener" target="_blank" href="https://www.npmjs.com/package/shaka-player" localized-string="NPM"></a></li>
146
146
  <li><a rel="noopener" target="_blank" href="../support.html" localized-string="SUPPORT"></a></li>
147
147
  </ul>
package/demo/main.js CHANGED
@@ -164,7 +164,7 @@ shakaDemo.Main = class {
164
164
  case shaka.ui.Overlay.FailReasonCode.NO_BROWSER_SUPPORT:
165
165
  message = this.getLocalizedString(
166
166
  shakaDemo.MessageIds.FAILURE_NO_BROWSER_SUPPORT);
167
- href = 'https://github.com/google/shaka-player#' +
167
+ href = 'https://github.com/shaka-project/shaka-player#' +
168
168
  'platform-and-browser-support-matrix';
169
169
  break;
170
170
  case shaka.ui.Overlay.FailReasonCode.PLAYER_FAILED_TO_LOAD:
@@ -289,7 +289,7 @@ shakaDemo.Main = class {
289
289
 
290
290
  // Navigate to the github issue opening interface, with the
291
291
  // partially-filled template as a preset body.
292
- let url = 'https://github.com/google/shaka-player/issues/new?';
292
+ let url = 'https://github.com/shaka-project/shaka-player/issues/new?';
293
293
  url += 'body=' + encodeURIComponent(text);
294
294
  // Open in another tab.
295
295
  window.open(url, '_blank');
@@ -1608,7 +1608,7 @@ shakaDemo.Main = class {
1608
1608
 
1609
1609
  /**
1610
1610
  * Sets the "version-string" divs to a version string.
1611
- * For example, "v2.5.4-master (uncompiled)".
1611
+ * For example, "v2.5.4-main (uncompiled)".
1612
1612
  * @private
1613
1613
  */
1614
1614
  setUpVersionStrings_() {
package/dist/controls.css CHANGED
@@ -3,7 +3,7 @@
3
3
  * Copyright 2016 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- .shaka-hidden{display:none!important}.shaka-video-container{position:relative;top:0;left:0;display:flex}.shaka-video-container .material-icons-round{font-family:'Material Icons Round';font-size:24px}.shaka-video-container *{font-family:Roboto-Regular,Roboto,sans-serif}.shaka-video-container:fullscreen{width:100%;height:100%;background-color:#000}.shaka-video-container:fullscreen .shaka-text-container{font-size:4.4vmin}.shaka-video-container:-webkit-full-screen{width:100%;height:100%;background-color:#000}.shaka-video-container:-webkit-full-screen .shaka-text-container{font-size:4.4vmin}.shaka-video-container:-moz-full-screen{width:100%;height:100%;background-color:#000}.shaka-video-container:-moz-full-screen .shaka-text-container{font-size:4.4vmin}.shaka-video-container:-ms-fullscreen{width:100%;height:100%;background-color:#000}.shaka-video-container:-ms-fullscreen .shaka-text-container{font-size:4.4vmin}.shaka-controls-container{position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:0;width:100%;height:100%;box-sizing:border-box;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;z-index:1}.shaka-video-container:not([shaka-controls=true]) .shaka-controls-container{display:none}.shaka-controls-container *{flex-shrink:0}.shaka-controls-container[casting=true] .shaka-fullscreen-button{display:none}.shaka-bottom-controls{width:96%;padding:0;padding-bottom:2.5%;z-index:1}.shaka-controls-button-panel{padding:0;margin:0;display:flex;flex-direction:row;justify-content:flex-end;align-items:center;overflow:hidden;min-width:48px;font-size:12px;font-weight:400;font-style:normal;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;opacity:0;transition:opacity cubic-bezier(.4,0,.6,1) .6s}.shaka-controls-container[casting=true] .shaka-controls-button-panel,.shaka-controls-container[shown=true] .shaka-controls-button-panel{opacity:1}.shaka-controls-button-panel>*{color:#fff;height:32px;line-height:.5;margin:1px 6px;padding:0;background:0 0;border:0;cursor:pointer}.shaka-controls-button-panel .shaka-overflow-menu-only{display:none}.shaka-play-button-container{margin:0;width:100%;height:100%;flex-shrink:1;position:absolute;left:0;right:0;top:0;bottom:0;display:flex;justify-content:center;align-items:center}.shaka-scrim-container{margin:0;width:100%;height:100%;flex-shrink:1;position:absolute;left:0;right:0;top:0;bottom:0;opacity:0;transition:opacity cubic-bezier(.4,0,.6,1) .6s;background:linear-gradient(to top,#000 0,rgba(0,0,0,0) 15%)}.shaka-controls-container[casting=true] .shaka-scrim-container,.shaka-controls-container[shown=true] .shaka-scrim-container{opacity:1}.shaka-text-container{position:absolute;left:0;right:0;top:0;bottom:0;pointer-events:none;bottom:0;width:100%;min-width:48px;transition:bottom cubic-bezier(.4,0,.6,1) .1s;transition-delay:.5s;font-size:20px;line-height:1.4;color:#fff}.shaka-text-container span.shaka-text-wrapper{display:inline;background:0 0}.shaka-controls-container[shown=true]~.shaka-text-container{bottom:15%;transition-delay:0s}.shaka-spinner-container{position:absolute;left:0;right:0;top:0;bottom:0;width:100%;height:100%;flex-shrink:1;display:flex;justify-content:center;align-items:center}.shaka-video-container:not([shaka-controls=true]) .shaka-spinner-container{display:none}.shaka-spinner{position:relative;top:0;left:0;margin:0;box-sizing:border-box;padding:7.8%;width:0;height:0;filter:drop-shadow(0 0 2px rgba(255, 255, 255, .5))}.shaka-play-button{box-sizing:border-box;padding:7.5%;width:0;height:0;margin:0;border-radius:50%;box-shadow:rgba(0,0,0,.1) 0 0 20px 0;border:none;background-size:50%;background-repeat:no-repeat;background-position:center center;background-color:rgba(255,255,255,.9);opacity:0;transition:opacity cubic-bezier(.4,0,.6,1) .6s}.shaka-controls-container[casting=true] .shaka-play-button,.shaka-controls-container[shown=true] .shaka-play-button{opacity:1}.shaka-play-button[icon=play]{background-image:url(data:image/svg+xml,%3Csvg%20fill%3D%22%23000000%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20width%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20d%3D%22M8%205v14l11-7z%22%2F%3E%0A%20%20%20%20%3Cpath%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%0A%3C%2Fsvg%3E)}.shaka-play-button[icon=pause]{background-image:url(data:image/svg+xml,%3Csvg%20fill%3D%22%23000000%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20width%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20d%3D%22M6%2019h4V5H6v14zm8-14v14h4V5h-4z%22%2F%3E%0A%20%20%20%20%3Cpath%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%0A%3C%2Fsvg%3E)}.shaka-current-time{font-size:14px;color:#fff;height:auto;cursor:pointer}.shaka-current-time[disabled]{background-color:transparent;color:#fff;cursor:default}.shaka-controls-container button:focus,.shaka-controls-container input:focus{outline:1px solid Highlight}.shaka-controls-container button:-moz-focus-inner,.shaka-controls-container input:-moz-focus-outer{outline:0;border:0}.shaka-controls-container:not(.shaka-keyboard-navigation) button:focus,.shaka-controls-container:not(.shaka-keyboard-navigation) input:focus{outline:0}.shaka-range-container{position:relative;top:0;left:0;margin:4px 6px;height:4px;border-radius:4px;background:#fff}.shaka-volume-bar-container{width:100px}.shaka-range-element{-webkit-appearance:none;background:0 0;position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:0;width:100%;height:100%;height:12px;top:-4px;z-index:1}.shaka-range-element::-webkit-slider-runnable-track{width:100%;height:12px;background:0 0;color:transparent;border:none}.shaka-range-element::-webkit-slider-thumb{-webkit-appearance:none;border:none;border-radius:12px;height:12px;width:12px;background:#fff}.shaka-range-element::-moz-range-track{width:100%;height:12px;background:0 0;color:transparent;border:none}.shaka-range-element::-moz-range-thumb{-webkit-appearance:none;border:none;border-radius:12px;height:12px;width:12px;background:#fff}.shaka-seek-bar-container{opacity:0;transition:opacity cubic-bezier(.4,0,.6,1) .6s}.shaka-controls-container[casting=true] .shaka-seek-bar-container,.shaka-controls-container[shown=true] .shaka-seek-bar-container{opacity:1}.shaka-ad-markers{position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:0;width:100%;height:100%}/*!
6
+ .shaka-hidden{display:none!important}.shaka-video-container{position:relative;top:0;left:0;display:flex}.shaka-video-container .material-icons-round{font-family:"Material Icons Round";font-size:24px}.shaka-video-container *{font-family:Roboto-Regular,Roboto,sans-serif,TengwarTelcontar}.shaka-video-container:fullscreen{width:100%;height:100%;background-color:#000}.shaka-video-container:fullscreen .shaka-text-container{font-size:4.4vmin}.shaka-video-container:-webkit-full-screen{width:100%;height:100%;background-color:#000}.shaka-video-container:-webkit-full-screen .shaka-text-container{font-size:4.4vmin}.shaka-video-container:-moz-full-screen{width:100%;height:100%;background-color:#000}.shaka-video-container:-moz-full-screen .shaka-text-container{font-size:4.4vmin}.shaka-video-container:-ms-fullscreen{width:100%;height:100%;background-color:#000}.shaka-video-container:-ms-fullscreen .shaka-text-container{font-size:4.4vmin}.shaka-controls-container{position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:0;width:100%;height:100%;box-sizing:border-box;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;z-index:1}.shaka-video-container:not([shaka-controls=true]) .shaka-controls-container{display:none}.shaka-controls-container *{flex-shrink:0}.shaka-controls-container[casting=true] .shaka-fullscreen-button{display:none}.shaka-bottom-controls{width:96%;padding:0;padding-bottom:2.5%;z-index:1}.shaka-controls-button-panel{padding:0;margin:0;display:flex;flex-direction:row;justify-content:flex-end;align-items:center;overflow:hidden;min-width:48px;font-size:12px;font-weight:400;font-style:normal;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;opacity:0;transition:opacity cubic-bezier(.4, 0, .6, 1) .6s}.shaka-controls-container[casting=true] .shaka-controls-button-panel,.shaka-controls-container[shown=true] .shaka-controls-button-panel{opacity:1}.shaka-controls-button-panel>*{color:#fff;height:32px;line-height:.5;margin:1px 6px;padding:0;background:0 0;border:0;cursor:pointer}.shaka-controls-button-panel .shaka-overflow-menu-only{display:none}.shaka-play-button-container{margin:0;width:100%;height:100%;flex-shrink:1;position:absolute;left:0;right:0;top:0;bottom:0;display:flex;justify-content:center;align-items:center}.shaka-scrim-container{margin:0;width:100%;height:100%;flex-shrink:1;position:absolute;left:0;right:0;top:0;bottom:0;opacity:0;transition:opacity cubic-bezier(.4, 0, .6, 1) .6s;background:linear-gradient(to top,#000 0,transparent 15%)}.shaka-controls-container[casting=true] .shaka-scrim-container,.shaka-controls-container[shown=true] .shaka-scrim-container{opacity:1}.shaka-text-container{position:absolute;left:0;right:0;top:0;bottom:0;pointer-events:none;bottom:0;width:100%;min-width:48px;transition:bottom cubic-bezier(.4, 0, .6, 1) .1s;transition-delay:0.5s;font-size:20px;line-height:1.4;color:#fff}.shaka-text-container span.shaka-text-wrapper{display:inline;background:0 0}.shaka-controls-container[shown=true]~.shaka-text-container{bottom:15%;transition-delay:0s}.shaka-spinner-container{position:absolute;left:0;right:0;top:0;bottom:0;width:100%;height:100%;flex-shrink:1;display:flex;justify-content:center;align-items:center}.shaka-video-container:not([shaka-controls=true]) .shaka-spinner-container{display:none}.shaka-spinner{position:relative;top:0;left:0;margin:0;box-sizing:border-box;padding:15.6%/2;width:0;height:0;filter:drop-shadow(0 0 2px rgba(255 255 255 / 50%))}.shaka-play-button{box-sizing:border-box;padding:15%/2;width:0;height:0;margin:0;border-radius:50%;box-shadow:rgba(0 0 0 / 10%) 0 0 20px 0;border:none;background-size:50%;background-repeat:no-repeat;background-position:center center;background-color:rgba(255 255 255 / 90%);opacity:0;transition:opacity cubic-bezier(.4, 0, .6, 1) .6s}.shaka-controls-container[casting=true] .shaka-play-button,.shaka-controls-container[shown=true] .shaka-play-button{opacity:1}.shaka-play-button[icon=play]{background-image:url("data:image/svg+xml,%3Csvg%20fill%3D%22%23000000%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20width%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20d%3D%22M8%205v14l11-7z%22%2F%3E%0A%20%20%20%20%3Cpath%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%0A%3C%2Fsvg%3E")}.shaka-play-button[icon=pause]{background-image:url("data:image/svg+xml,%3Csvg%20fill%3D%22%23000000%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20width%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20d%3D%22M6%2019h4V5H6v14zm8-14v14h4V5h-4z%22%2F%3E%0A%20%20%20%20%3Cpath%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%0A%3C%2Fsvg%3E")}.shaka-current-time{font-size:14px;color:#fff;cursor:pointer}.shaka-current-time[disabled]{background-color:transparent;color:#fff;cursor:default}.shaka-controls-container button:focus,.shaka-controls-container input:focus{outline:1px solid Highlight}.shaka-controls-container button:-moz-focus-inner,.shaka-controls-container input:-moz-focus-outer{outline:0;border:0}.shaka-controls-container:not(.shaka-keyboard-navigation) button:focus,.shaka-controls-container:not(.shaka-keyboard-navigation) input:focus{outline:0}.shaka-range-container{position:relative;top:0;left:0;margin:8px/2 6px;height:4px;border-radius:4px;background:#fff}.shaka-volume-bar-container{width:100px}.shaka-range-element{-webkit-appearance:none;background:0 0;position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:0;width:100%;height:100%;height:12px;top:-8px/2;z-index:1}.shaka-range-element::-webkit-slider-runnable-track{width:100%;cursor:pointer;height:12px;background:0 0;color:transparent;border:none}.shaka-range-element::-webkit-slider-thumb{-webkit-appearance:none;border:none;border-radius:12px;height:12px;width:12px;background:#fff}.shaka-range-element::-moz-range-track{width:100%;cursor:pointer;height:12px;background:0 0;color:transparent;border:none}.shaka-range-element::-moz-range-thumb{-webkit-appearance:none;border:none;border-radius:12px;height:12px;width:12px;background:#fff}.shaka-seek-bar-container{opacity:0;transition:opacity cubic-bezier(.4, 0, .6, 1) .6s}.shaka-controls-container[casting=true] .shaka-seek-bar-container,.shaka-controls-container[shown=true] .shaka-seek-bar-container{opacity:1}.shaka-ad-markers{position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:0;width:100%;height:100%}/*!
7
7
  * @license
8
8
  * The SVG/CSS buffering spinner is based on http://codepen.io/jczimm/pen/vEBpoL
9
9
  * Some local modifications have been made.
@@ -27,4 +27,4 @@
27
27
  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
28
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29
29
  * SOFTWARE.
30
- */.shaka-spinner-svg{position:absolute;top:0;left:0;right:0;bottom:0;animation:rotate 2s linear infinite;transform-origin:center center;width:100%;height:100%;margin:0;padding:0}.shaka-spinner-path{stroke:#202124;stroke-dasharray:20,200;stroke-dashoffset:0;animation:dash 1s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{100%{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-124px}}.shaka-spacer{cursor:default;flex-shrink:1;flex-grow:1;margin:0}.shaka-overflow-menu,.shaka-settings-menu{overflow-x:hidden;overflow-y:auto;white-space:nowrap;background:#fff;box-shadow:0 1px 9px 0 rgba(0,0,0,.4);border-radius:2px;max-height:250px;min-width:180px;opacity:0;transition:opacity cubic-bezier(.4,0,.6,1) .6s;display:flex;flex-direction:column;position:absolute;z-index:2;right:15px;bottom:30px}.shaka-controls-container[casting=true] .shaka-overflow-menu,.shaka-controls-container[casting=true] .shaka-settings-menu,.shaka-controls-container[shown=true] .shaka-overflow-menu,.shaka-controls-container[shown=true] .shaka-settings-menu{opacity:1}.shaka-overflow-menu button,.shaka-settings-menu button{font-size:14px;background:0 0;color:#000;border:none;min-height:30px;padding:3.5px 6px;display:flex;align-items:center;cursor:pointer}.shaka-overflow-menu button:hover,.shaka-settings-menu button:hover{background:#e0e0e0}.shaka-overflow-menu button label,.shaka-settings-menu button label{cursor:pointer}.shaka-keyboard-navigation .shaka-overflow-menu button:focus,.shaka-keyboard-navigation .shaka-settings-menu button:focus{background:#e0e0e0}.shaka-overflow-menu i,.shaka-settings-menu i{padding-left:10px;padding-right:10px}.shaka-overflow-menu.shaka-low-position,.shaka-settings-menu.shaka-low-position{bottom:15px}.shaka-overflow-menu span{text-align:left}.shaka-overflow-button-label{position:relative;display:flex;flex-direction:column}.shaka-current-selection-span{color:rgba(0,0,0,.54)}.shaka-settings-menu span{margin-left:54px}.shaka-back-to-overflow-button span{margin-left:0}.shaka-back-to-overflow-button i{padding-right:20px}.shaka-auto-span{left:17px}.shaka-captions-on{color:#000}.shaka-captions-off{color:grey}.shaka-controls-container[ad-active=true]{pointer-events:none}.shaka-controls-container[ad-active=true] .shaka-bottom-controls{pointer-events:auto}.shaka-client-side-ad-container,.shaka-server-side-ad-container{position:absolute;left:0;right:0;top:0;bottom:0}.shaka-video-container[shaka-controls=true] .shaka-client-side-ad-container iframe,.shaka-video-container[shaka-controls=true] .shaka-server-side-ad-container iframe{height:90%}.shaka-server-side-ad-container{width:100%;height:100%;flex-shrink:1}.shaka-server-side-ad-container:not([ad-active=true]){pointer-events:none}.shaka-ad-controls{display:flex;flex-direction:row;z-index:1;padding-bottom:1%}.shaka-video-container:not([shaka-controls=true]) .shaka-ad-controls{display:none}.shaka-ad-controls button,.shaka-ad-controls div{color:#fff;font-size:initial}.shaka-ad-controls div:not(.shaka-skip-ad-counter){margin:1px 6px}.shaka-ad-counter,.shaka-ad-position{display:flex;justify-content:flex-end;flex-direction:column;text-shadow:1px 1px 4px #000}.shaka-skip-ad-container{position:relative;right:-2%;display:flex;flex-direction:row;margin:0}.shaka-skip-ad-button{padding:5px 15px;background:rgba(0,0,0,.7);border:none;cursor:pointer}.shaka-skip-ad-button:disabled{background:rgba(0,0,0,.3)}.shaka-skip-ad-counter{padding:5px 5px;background:rgba(0,0,0,.7);margin:0}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOmCnqEu92Fr1Mu4mxP.ttf) format('truetype')}@font-face{font-family:'Material Icons Round';font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/materialiconsround/v93/LDItaoyNOAY6Uewc665JcIzCKsKc_M9flwmM.otf) format('opentype')}.material-icons-round{font-family:'Material Icons Round';font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr}/*# sourceMappingURL=controls.css.map */
30
+ */.shaka-spinner-svg{position:absolute;top:0;left:0;right:0;bottom:0;animation:rotate 2s linear infinite;transform-origin:center center;width:100%;height:100%;margin:0;padding:0}.shaka-spinner-path{stroke:#202124;stroke-dasharray:20,200;stroke-dashoffset:0;animation:dash 1s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{100%{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-124px}}.shaka-spacer{cursor:default;flex-shrink:1;flex-grow:1;margin:0}.shaka-overflow-menu,.shaka-settings-menu{overflow-x:hidden;overflow-y:auto;white-space:nowrap;background:#fff;box-shadow:0 1px 9px 0 rgba(0 0 0 / 40%);border-radius:2px;max-height:250px;min-width:180px;opacity:0;transition:opacity cubic-bezier(.4, 0, .6, 1) .6s;display:flex;flex-direction:column;position:absolute;z-index:2;right:15px;bottom:30px}.shaka-controls-container[casting=true] .shaka-overflow-menu,.shaka-controls-container[casting=true] .shaka-settings-menu,.shaka-controls-container[shown=true] .shaka-overflow-menu,.shaka-controls-container[shown=true] .shaka-settings-menu{opacity:1}.shaka-overflow-menu button,.shaka-settings-menu button{font-size:14px;background:0 0;color:#000;border:none;min-height:30px;padding:3.5px 6px;display:flex;align-items:center;cursor:pointer}.shaka-overflow-menu button:hover,.shaka-settings-menu button:hover{background:#e0e0e0}.shaka-overflow-menu button label,.shaka-settings-menu button label{cursor:pointer}.shaka-keyboard-navigation .shaka-overflow-menu button:focus,.shaka-keyboard-navigation .shaka-settings-menu button:focus{background:#e0e0e0}.shaka-overflow-menu i,.shaka-settings-menu i{padding-left:10px;padding-right:10px}.shaka-overflow-menu.shaka-low-position,.shaka-settings-menu.shaka-low-position{bottom:15px}.shaka-overflow-menu span{text-align:left}.shaka-overflow-button-label{position:relative;display:flex;flex-direction:column}.shaka-current-selection-span{color:rgba(0 0 0 / 54%)}.shaka-settings-menu span{margin-left:54px}.shaka-back-to-overflow-button span{margin-left:0}.shaka-back-to-overflow-button i{padding-right:20px}.shaka-auto-span{left:17px}.shaka-captions-on{color:#000}.shaka-captions-off{color:grey}.shaka-controls-container[ad-active=true]{pointer-events:none}.shaka-controls-container[ad-active=true] .shaka-bottom-controls{pointer-events:auto}.shaka-client-side-ad-container,.shaka-server-side-ad-container{position:absolute;left:0;right:0;top:0;bottom:0}.shaka-video-container[shaka-controls=true] .shaka-client-side-ad-container iframe,.shaka-video-container[shaka-controls=true] .shaka-server-side-ad-container iframe{height:90%}.shaka-server-side-ad-container{width:100%;height:100%;flex-shrink:1}.shaka-server-side-ad-container:not([ad-active=true]){pointer-events:none}.shaka-ad-controls{display:flex;flex-direction:row;z-index:1;padding-bottom:1%}.shaka-video-container:not([shaka-controls=true]) .shaka-ad-controls{display:none}.shaka-ad-controls button,.shaka-ad-controls div{color:#fff;font-size:initial}.shaka-ad-controls div:not(.shaka-skip-ad-counter){margin:1px 6px}.shaka-ad-counter,.shaka-ad-position{display:flex;justify-content:flex-end;flex-direction:column;text-shadow:1px 1px 4px #000}.shaka-skip-ad-container{position:relative;right:4%/2 * -1;display:flex;flex-direction:row;margin:0}.shaka-skip-ad-button{padding:5px 15px;background:rgba(0 0 0 / 70%);border:none;cursor:pointer}.shaka-skip-ad-button:disabled{background:rgba(0 0 0 / 30%)}.shaka-skip-ad-counter{padding:5px;background:rgba(0 0 0 / 70%);margin:0}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOmCnqEu92Fr1Mu4mxP.ttf) format('truetype')}@font-face{font-family:'Material Icons Round';font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/materialiconsround/v101/LDItaoyNOAY6Uewc665JcIzCKsKc_M9flwmM.otf) format('opentype')}.material-icons-round{font-family:'Material Icons Round';font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr}/*# sourceMappingURL=controls.css.map */