shaka-player 3.2.4 → 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.
- package/.csslintrc +11 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
- package/.github/workflows/build-and-test.yaml +130 -0
- package/.github/workflows/custom-actions/prep-for-appspot/action.yaml +56 -0
- package/.github/workflows/custom-actions/set-commit-status/action.yaml +41 -0
- package/.github/workflows/demo-version-index.yaml +29 -0
- package/.github/workflows/nightly-demo.yaml +42 -0
- package/.github/workflows/release-please.yaml +145 -0
- package/.github/workflows/safari-homedir-launcher.sh +18 -0
- package/.github/workflows/selenium-lab-tests.yaml +93 -0
- package/AUTHORS +2 -0
- package/CHANGELOG.md +1571 -1556
- package/CONTRIBUTING.md +2 -2
- package/CONTRIBUTORS +2 -0
- package/README.md +7 -7
- package/app-engine/README.md +9 -0
- package/app-engine/demo-version-index/README.md +14 -0
- package/app-engine/demo-version-index/app.yaml +2 -0
- package/app-engine/demo-version-index/main.py +162 -0
- package/app-engine/demo-version-index/requirements.txt +6 -0
- package/app-engine/demo-version-index/templates/index.html +114 -0
- package/app-engine/shaka-player-demo/README.md +18 -0
- package/app-engine/shaka-player-demo/app.yaml +61 -0
- package/app-engine/shaka-player-demo/main.py +95 -0
- package/app-engine/shaka-player-demo/posters/10yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/10yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/1yo.jpg +0 -0
- package/app-engine/shaka-player-demo/posters/2yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/2yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/3yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/3yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/4yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/4yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/5yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/5yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/6yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/6yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/7yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/7yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/8yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/8yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/9yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/9yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/audioOnly.gif +0 -0
- package/app-engine/shaka-player-demo/posters/audioRickRoll.gif +0 -0
- package/app-engine/shaka-player-demo/posters/colorbars.gif +0 -0
- package/app-engine/shaka-player-demo/posters/fireworks.jpg +0 -0
- package/app-engine/shaka-player-demo/posters/party-hat.png +0 -0
- package/app-engine/shaka-player-demo/posters/sources.txt +46 -0
- package/app-engine/shaka-player-demo/posters/standard.png +0 -0
- package/app-engine/shaka-player-demo/posters/trek.jpg +0 -0
- package/app-engine/shaka-player-demo/posters/valentines.png +0 -0
- package/app-engine/shaka-player-demo/posters/zombie.jpg +0 -0
- package/app-engine/shaka-player-demo/posters.py +110 -0
- package/app-engine/shaka-player-demo/requirements.txt +5 -0
- package/app-engine/shaka-player-demo/time.txt +1 -0
- package/build/README.md +1 -1
- package/build/conformance.textproto +13 -0
- package/build/docker/Dockerfile +20 -0
- package/build/docker/docker-compose.yml +10 -0
- package/build/gendeps.py +18 -15
- package/build/shaka-lab.yaml +163 -0
- package/build/shakaBuildHelpers.py +4 -29
- package/build/test.py +87 -28
- package/build/wrapper.template.js +2 -2
- package/demo/TengwarTelcontar.woff2 +0 -0
- package/demo/asset_card.js +1 -2
- package/demo/cast_receiver/index.html +1 -1
- package/demo/cast_receiver/receiver_app.css +14 -14
- package/demo/common/assets.js +2 -0
- package/demo/config.js +0 -1
- package/demo/custom.js +0 -1
- package/demo/customWarning.txt +2 -2
- package/demo/demo.less +29 -18
- package/demo/demo_uncompiled.js +1 -13
- package/demo/index.html +1 -1
- package/demo/main.js +3 -3
- package/dist/controls.css +2 -2
- package/dist/controls.css.map +1 -1
- package/dist/demo.compiled.debug.js +191 -194
- package/dist/demo.compiled.debug.map +4 -4
- package/dist/demo.compiled.js +191 -194
- package/dist/demo.compiled.map +4 -4
- package/dist/demo.css +1 -1
- package/dist/demo.css.map +1 -1
- package/dist/deps.js +225 -219
- package/dist/locales.js +28 -28
- package/dist/receiver.compiled.debug.js +43 -45
- package/dist/receiver.compiled.debug.map +4 -4
- package/dist/receiver.compiled.js +43 -45
- package/dist/receiver.compiled.map +4 -4
- package/dist/shaka-player.compiled.d.ts +224 -224
- package/dist/shaka-player.compiled.debug.d.ts +224 -224
- package/dist/shaka-player.compiled.debug.externs.js +4 -3
- package/dist/shaka-player.compiled.debug.js +294 -303
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +4 -3
- package/dist/shaka-player.compiled.js +817 -822
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +266 -266
- package/dist/shaka-player.ui.debug.d.ts +266 -266
- package/dist/shaka-player.ui.debug.externs.js +4 -3
- package/dist/shaka-player.ui.debug.js +220 -229
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +4 -3
- package/dist/shaka-player.ui.js +964 -970
- package/dist/shaka-player.ui.map +4 -4
- package/docs/design/REDESIGN.md +33 -33
- package/docs/design/codec_preferences.md +1 -1
- package/docs/design/dash-audio-channels.md +3 -3
- package/docs/design/dash-manifests.md +1 -1
- package/docs/design/gap-jumping.md +3 -3
- package/docs/design/preload.md +2 -2
- package/docs/tutorials/faq.md +8 -8
- package/docs/tutorials/index.json +1 -0
- package/docs/tutorials/plugins.md +3 -3
- package/docs/tutorials/selenium-grid-config.md +122 -0
- package/docs/tutorials/welcome.md +10 -2
- package/karma.conf.js +137 -30
- package/lib/abr/simple_abr_manager.js +12 -6
- package/lib/cast/cast_proxy.js +3 -4
- package/lib/cea/cea608_data_channel.js +2 -2
- package/lib/cea/cea708_service.js +5 -4
- package/lib/cea/mp4_cea_parser.js +11 -5
- package/lib/cea/sei_processor.js +6 -3
- package/lib/dash/dash_parser.js +9 -11
- package/lib/dash/mpd_utils.js +4 -5
- package/lib/dash/segment_list.js +1 -2
- package/lib/dash/segment_template.js +3 -3
- package/lib/hls/hls_parser.js +11 -9
- package/lib/hls/manifest_text_parser.js +3 -3
- package/lib/media/adaptation_set.js +1 -2
- package/lib/media/content_workarounds.js +2 -2
- package/lib/media/drm_engine.js +3 -2
- package/lib/media/media_source_engine.js +3 -2
- package/lib/media/mp4_segment_index_parser.js +1 -4
- package/lib/media/playhead.js +2 -2
- package/lib/media/presentation_timeline.js +18 -8
- package/lib/media/streaming_engine.js +6 -6
- package/lib/media/time_ranges_utils.js +1 -3
- package/lib/media/video_wrapper.js +1 -1
- package/lib/net/networking_engine.js +1 -1
- package/lib/offline/storage.js +4 -4
- package/lib/player.js +34 -16
- package/lib/polyfill/all.js +2 -3
- package/lib/polyfill/encryption_scheme.js +1 -1
- package/lib/polyfill/media_capabilities.js +3 -3
- package/lib/polyfill/mediasource.js +1 -1
- package/lib/text/cue.js +1 -1
- package/lib/text/simple_text_displayer.js +2 -1
- package/lib/text/ttml_text_parser.js +8 -5
- package/lib/text/ui_text_displayer.js +1 -1
- package/lib/util/buffer_utils.js +1 -3
- package/lib/util/ebml_parser.js +3 -3
- package/lib/util/error.js +1 -1
- package/lib/util/iterables.js +0 -46
- package/lib/util/mp4_box_parsers.js +1 -4
- package/lib/util/mp4_parser.js +5 -7
- package/lib/util/periods.js +8 -9
- package/lib/util/platform.js +3 -3
- package/lib/util/pssh.js +1 -4
- package/lib/util/stream_utils.js +4 -3
- package/lib/util/string_utils.js +3 -5
- package/lib/util/uint8array_utils.js +3 -5
- package/lib/util/xml_utils.js +15 -7
- package/package.json +61 -36
- package/roadmap.md +17 -17
- package/test/abr/simple_abr_manager_unit.js +3 -8
- package/test/ads/ad_manager_unit.js +0 -6
- package/test/cast/cast_proxy_unit.js +0 -8
- package/test/cast/cast_receiver_integration.js +1 -18
- package/test/cast/cast_receiver_unit.js +1 -9
- package/test/cast/cast_sender_unit.js +0 -6
- package/test/cast/cast_utils_unit.js +0 -13
- package/test/cea/cea608_memory_unit.js +0 -5
- package/test/cea/cea708_service_unit.js +0 -7
- package/test/cea/cea708_window_unit.js +0 -5
- package/test/cea/cea_decoder_unit.js +0 -6
- package/test/cea/dtvcc_packet_builder_unit.js +0 -3
- package/test/cea/dtvcc_packet_unit.js +0 -5
- package/test/cea/mp4_cea_parser_unit.js +0 -4
- package/test/dash/dash_parser_content_protection_unit.js +1 -10
- package/test/dash/dash_parser_live_unit.js +2 -15
- package/test/dash/dash_parser_manifest_unit.js +2 -16
- package/test/dash/dash_parser_segment_base_unit.js +1 -8
- package/test/dash/dash_parser_segment_list_unit.js +1 -7
- package/test/dash/dash_parser_segment_template_unit.js +0 -9
- package/test/dash/mpd_utils_unit.js +3 -11
- package/test/demo/demo_unit.js +0 -5
- package/test/deprecate/enforcer_unit.js +0 -4
- package/test/deprecate/version_unit.js +0 -2
- package/test/hls/hls_live_unit.js +2 -14
- package/test/hls/hls_parser_unit.js +2 -15
- package/test/hls/manifest_text_parser_unit.js +0 -10
- package/test/media/adaptation_set_criteria_unit.js +3 -7
- package/test/media/adaptation_set_unit.js +0 -2
- package/test/media/buffering_observer_unit.js +1 -4
- package/test/media/closed_caption_parser_unit.js +0 -3
- package/test/media/drm_engine_integration.js +2 -15
- package/test/media/drm_engine_unit.js +4 -24
- package/test/media/manifest_parser_unit.js +0 -4
- package/test/media/media_source_engine_integration.js +0 -7
- package/test/media/media_source_engine_unit.js +1 -14
- package/test/media/mp4_segment_index_parser_unit.js +0 -4
- package/test/media/play_rate_controller_unit.js +0 -4
- package/test/media/playhead_unit.js +8 -16
- package/test/media/presentation_timeline_unit.js +4 -7
- package/test/media/region_observer_unit.js +1 -6
- package/test/media/region_timeline_unit.js +0 -3
- package/test/media/segment_index_unit.js +0 -6
- package/test/media/segment_reference_unit.js +0 -3
- package/test/media/stall_detector_unit.js +0 -5
- package/test/media/streaming_engine_integration.js +9 -36
- package/test/media/streaming_engine_unit.js +11 -35
- package/test/media/time_ranges_utils_unit.js +0 -2
- package/test/media/transmuxer_integration.js +0 -6
- package/test/media/webm_segment_index_parser_unit.js +0 -4
- package/test/net/data_uri_plugin_unit.js +0 -7
- package/test/net/http_plugin_unit.js +0 -9
- package/test/net/networking_engine_unit.js +0 -11
- package/test/offline/download_progress_estimator_unit.js +0 -2
- package/test/offline/indexeddb_storage_unit.js +0 -6
- package/test/offline/manifest_convert_unit.js +0 -8
- package/test/offline/offline_integration.js +1 -10
- package/test/offline/offline_manifest_parser_unit.js +0 -6
- package/test/offline/offline_scheme_unit.js +0 -8
- package/test/offline/offline_uri_unit.js +0 -2
- package/test/offline/storage_compatibility_unit.js +1 -14
- package/test/offline/storage_integration.js +1 -25
- package/test/player_external.js +2 -10
- package/test/player_integration.js +21 -28
- package/test/player_load_graph_integration.js +1 -6
- package/test/player_src_equals_external.js +3 -9
- package/test/player_src_equals_integration.js +0 -7
- package/test/player_unit.js +52 -37
- package/test/routing/walker_unit.js +0 -8
- package/test/test/assets/large_file.mpd +1 -1
- package/test/test/boot.js +75 -22
- package/test/test/externs/jasmine.js +2 -2
- package/test/test/externs/karma.js +4 -0
- package/test/test/namespace.js +10 -0
- package/test/test/util/canned_idb.js +0 -8
- package/test/test/util/cea_utils.js +0 -6
- package/test/test/util/dash_parser_util.js +0 -13
- package/test/test/util/fake_ad.js +0 -3
- package/test/test/util/fake_ad_manager.js +0 -9
- package/test/test/util/fake_demo_main.js +0 -5
- package/test/test/util/fake_drm_engine.js +0 -6
- package/test/test/util/fake_media_source_engine.js +0 -7
- package/test/test/util/fake_networking_engine.js +0 -5
- package/test/test/util/fake_text_displayer.js +0 -5
- package/test/test/util/indexeddb_utils.js +1 -10
- package/test/test/util/jasmine_fetch.js +0 -1
- package/test/test/util/loader.js +0 -18
- package/test/test/util/manifest_generator.js +9 -14
- package/test/test/util/manifest_parser_util.js +0 -6
- package/test/test/util/offline_utils.js +0 -5
- package/test/test/util/simple_fakes.js +9 -26
- package/test/test/util/stream_generator.js +0 -14
- package/test/test/util/streaming_engine_util.js +0 -15
- package/test/test/util/test_scheme.js +1 -19
- package/test/test/util/ttml_utils.js +0 -2
- package/test/test/util/ui_utils.js +0 -9
- package/test/test/util/util.js +5 -19
- package/test/test/util/waiter.js +84 -43
- package/test/text/cue_integration.js +0 -4
- package/test/text/lrc_text_parser_unit.js +0 -4
- package/test/text/mp4_ttml_parser_unit.js +0 -6
- package/test/text/mp4_vtt_parser_unit.js +1 -7
- package/test/text/sbv_text_parser_unit.js +0 -4
- package/test/text/simple_text_displayer_unit.js +1 -8
- package/test/text/srt_text_parser_unit.js +0 -4
- package/test/text/ssa_text_parser_unit.js +0 -5
- package/test/text/text_engine_unit.js +2 -7
- package/test/text/text_track_integration.js +0 -2
- package/test/text/ttml_text_parser_unit.js +2 -11
- package/test/text/ui_text_displayer_unit.js +44 -41
- package/test/text/vtt_text_parser_unit.js +0 -9
- package/test/text/web_vtt_generator_unit.js +0 -3
- package/test/ui/ad_ui_unit.js +0 -11
- package/test/ui/localization_unit.js +0 -3
- package/test/ui/text_displayer_layout_unit.js +1 -12
- package/test/ui/ui_customization_unit.js +0 -6
- package/test/ui/ui_integration.js +0 -16
- package/test/ui/ui_unit.js +1 -17
- package/test/util/abortable_operation_unit.js +4 -9
- package/test/util/array_utils_unit.js +0 -2
- package/test/util/buffer_utils_unit.js +0 -2
- package/test/util/data_view_reader_unit.js +0 -4
- package/test/util/ebml_parser_unit.js +0 -4
- package/test/util/event_manager_unit.js +0 -3
- package/test/util/fake_event_target_unit.js +0 -5
- package/test/util/functional_unit.js +1 -1
- package/test/util/iterables_unit.js +0 -64
- package/test/util/language_utils_unit.js +0 -3
- package/test/util/manifest_parser_utils_unit.js +0 -2
- package/test/util/mp4_box_parsers_unit.js +0 -5
- package/test/util/mp4_parser_unit.js +0 -4
- package/test/util/multi_map_unit.js +0 -3
- package/test/util/object_utils_unit.js +0 -2
- package/test/util/periods_unit.js +14 -7
- package/test/util/pssh_unit.js +0 -5
- package/test/util/state_history_unit.js +0 -2
- package/test/util/stream_utils_unit.js +3 -8
- package/test/util/string_utils_unit.js +0 -6
- package/test/util/text_parser_unit.js +0 -2
- package/test/util/xml_utils_unit.js +0 -4
- package/ui/less/ad_controls.less +4 -4
- package/ui/less/buttons.less +5 -5
- package/ui/less/containers.less +5 -7
- package/ui/less/overflow_menu.less +4 -4
- package/ui/less/range_elements.less +5 -0
- package/ui/locales/sjn-translations.yaml +257 -0
- package/ui/locales/sjn.json +42 -0
- package/.github/workflows/build_and_test.yaml +0 -73
- package/.github/workflows/release.yaml +0 -53
- package/externs/svgelement.js +0 -18
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Shaka Player Demo - Poster Definitions
|
|
2
|
+
# Copyright 2022 Google LLC
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
5
|
+
# A Doodle-like service to change the poster on certain days.
|
|
6
|
+
# All posters are chosen based on the current date in PST.
|
|
7
|
+
|
|
8
|
+
# Month constants to make specific dates easier to read.
|
|
9
|
+
JANUARY = 1
|
|
10
|
+
FEBRUARY = 2
|
|
11
|
+
MARCH = 3
|
|
12
|
+
APRIL = 4
|
|
13
|
+
MAY = 5
|
|
14
|
+
JUNE = 6
|
|
15
|
+
JULY = 7
|
|
16
|
+
AUGUST = 8
|
|
17
|
+
SEPTEMBER = 9
|
|
18
|
+
OCTOBER = 10
|
|
19
|
+
NOVEMBER = 11
|
|
20
|
+
DECEMBER = 12
|
|
21
|
+
|
|
22
|
+
# Special posters for certain days.
|
|
23
|
+
VIDEO_POSTERS = {
|
|
24
|
+
# These are the same every year:
|
|
25
|
+
# =====
|
|
26
|
+
(FEBRUARY, 14): 'valentines.png',
|
|
27
|
+
(APRIL, 1): 'colorbars.gif',
|
|
28
|
+
(APRIL, 5): 'trek.jpg', # "First Contact Day": https://bit.ly/2CSXbxw
|
|
29
|
+
(OCTOBER, 31): 'zombie.jpg',
|
|
30
|
+
# =====
|
|
31
|
+
|
|
32
|
+
# These birthday posters changed each year:
|
|
33
|
+
(DECEMBER, 19, 2015): '1yo.jpg',
|
|
34
|
+
(DECEMBER, 19, 2016): '2yo.png',
|
|
35
|
+
(DECEMBER, 19, 2017): '3yo.png',
|
|
36
|
+
|
|
37
|
+
# After this, the birthday poster shows for a whole week:
|
|
38
|
+
(DECEMBER, 17, 2018): '4yo.png',
|
|
39
|
+
(DECEMBER, 18, 2018): '4yo.png',
|
|
40
|
+
(DECEMBER, 19, 2018): '4yo.png',
|
|
41
|
+
(DECEMBER, 20, 2018): '4yo.png',
|
|
42
|
+
|
|
43
|
+
(DECEMBER, 19, 2019): '5yo.png',
|
|
44
|
+
(DECEMBER, 20, 2019): '5yo.png',
|
|
45
|
+
(DECEMBER, 21, 2019): '5yo.png',
|
|
46
|
+
(DECEMBER, 22, 2019): '5yo.png',
|
|
47
|
+
(DECEMBER, 23, 2019): '5yo.png',
|
|
48
|
+
(DECEMBER, 24, 2019): '5yo.png',
|
|
49
|
+
(DECEMBER, 25, 2019): '5yo.png',
|
|
50
|
+
|
|
51
|
+
(DECEMBER, 19, 2020): '6yo.png',
|
|
52
|
+
(DECEMBER, 20, 2020): '6yo.png',
|
|
53
|
+
(DECEMBER, 21, 2020): '6yo.png',
|
|
54
|
+
(DECEMBER, 22, 2020): '6yo.png',
|
|
55
|
+
(DECEMBER, 23, 2020): '6yo.png',
|
|
56
|
+
(DECEMBER, 24, 2020): '6yo.png',
|
|
57
|
+
(DECEMBER, 25, 2020): '6yo.png',
|
|
58
|
+
|
|
59
|
+
(DECEMBER, 19, 2021): '7yo.png',
|
|
60
|
+
(DECEMBER, 20, 2021): '7yo.png',
|
|
61
|
+
(DECEMBER, 21, 2021): '7yo.png',
|
|
62
|
+
(DECEMBER, 22, 2021): '7yo.png',
|
|
63
|
+
(DECEMBER, 23, 2021): '7yo.png',
|
|
64
|
+
(DECEMBER, 24, 2021): '7yo.png',
|
|
65
|
+
(DECEMBER, 25, 2021): '7yo.png',
|
|
66
|
+
|
|
67
|
+
(DECEMBER, 19, 2022): '8yo.png',
|
|
68
|
+
(DECEMBER, 20, 2022): '8yo.png',
|
|
69
|
+
(DECEMBER, 21, 2022): '8yo.png',
|
|
70
|
+
(DECEMBER, 22, 2022): '8yo.png',
|
|
71
|
+
(DECEMBER, 23, 2022): '8yo.png',
|
|
72
|
+
(DECEMBER, 24, 2022): '8yo.png',
|
|
73
|
+
(DECEMBER, 25, 2022): '8yo.png',
|
|
74
|
+
|
|
75
|
+
(DECEMBER, 19, 2023): '9yo.png',
|
|
76
|
+
(DECEMBER, 20, 2023): '9yo.png',
|
|
77
|
+
(DECEMBER, 21, 2023): '9yo.png',
|
|
78
|
+
(DECEMBER, 22, 2023): '9yo.png',
|
|
79
|
+
(DECEMBER, 23, 2023): '9yo.png',
|
|
80
|
+
(DECEMBER, 24, 2023): '9yo.png',
|
|
81
|
+
(DECEMBER, 25, 2023): '9yo.png',
|
|
82
|
+
|
|
83
|
+
(DECEMBER, 19, 2024): '10yo.png',
|
|
84
|
+
(DECEMBER, 20, 2024): '10yo.png',
|
|
85
|
+
(DECEMBER, 21, 2024): '10yo.png',
|
|
86
|
+
(DECEMBER, 22, 2024): '10yo.png',
|
|
87
|
+
(DECEMBER, 23, 2024): '10yo.png',
|
|
88
|
+
(DECEMBER, 24, 2024): '10yo.png',
|
|
89
|
+
(DECEMBER, 25, 2024): '10yo.png',
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
# The default poster.
|
|
93
|
+
VIDEO_DEFAULT = 'standard.png'
|
|
94
|
+
|
|
95
|
+
# Special audio-only posters.
|
|
96
|
+
AUDIO_POSTERS = {
|
|
97
|
+
# http://discordia.wikia.com/wiki/Chaoflux
|
|
98
|
+
(FEBRUARY, 19): 'audioRickRoll.gif',
|
|
99
|
+
# http://discordia.wikia.com/wiki/Discoflux
|
|
100
|
+
(MAY, 3): 'audioRickRoll.gif',
|
|
101
|
+
# http://discordia.wikia.com/wiki/Confuflux
|
|
102
|
+
(JULY, 15): 'audioRickRoll.gif',
|
|
103
|
+
# http://discordia.wikia.com/wiki/Bureflux
|
|
104
|
+
(SEPTEMBER, 26): 'audioRickRoll.gif',
|
|
105
|
+
# http://discordia.wikia.com/wiki/Afflux
|
|
106
|
+
(DECEMBER, 8): 'audioRickRoll.gif',
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
# The default audio-only poster.
|
|
110
|
+
AUDIO_DEFAULT = 'audioOnly.gif'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Time is an illusion; lunchtime doubly so.
|
package/build/README.md
CHANGED
|
@@ -99,7 +99,7 @@ will choose a defaults based on your platform. However, if you pass any
|
|
|
99
99
|
arguments to `test.py`, it will not choose browsers and you *must* pass
|
|
100
100
|
`--browsers`.
|
|
101
101
|
|
|
102
|
-
[lib/debug/log.js]: https://github.com/
|
|
102
|
+
[lib/debug/log.js]: https://github.com/shaka-project/shaka-player/blob/main/lib/debug/log.js
|
|
103
103
|
|
|
104
104
|
## Stats
|
|
105
105
|
|
|
@@ -306,3 +306,16 @@ requirement: {
|
|
|
306
306
|
'instead.'
|
|
307
307
|
whitelist_regexp: 'lib/net/http_fetch_plugin.js'
|
|
308
308
|
}
|
|
309
|
+
|
|
310
|
+
# Disallow the use of generators, which are a major performance issue. See
|
|
311
|
+
# https://github.com/shaka-project/shaka-player/issues/4062#issuecomment-1079428268
|
|
312
|
+
requirement: {
|
|
313
|
+
type: BANNED_CODE_PATTERN
|
|
314
|
+
value:
|
|
315
|
+
"/** @param {*} x */ "
|
|
316
|
+
"function *template(x) { yield x; }"
|
|
317
|
+
error_message:
|
|
318
|
+
"ES6 generators are a major performance issue! Find another solution. "
|
|
319
|
+
"See also https://bit.ly/3wAsoj5"
|
|
320
|
+
whitelist_regexp: "node_modules/"
|
|
321
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Alpine was chosen by providing a node container less than 100mb
|
|
2
|
+
FROM node:17.7.1-alpine3.15
|
|
3
|
+
|
|
4
|
+
WORKDIR /usr/src/app
|
|
5
|
+
|
|
6
|
+
# Install dependencies
|
|
7
|
+
RUN apk add --update --no-cache openssh git python3 openjdk11-jre-headless
|
|
8
|
+
RUN ln -sf python3 /usr/bin/python
|
|
9
|
+
|
|
10
|
+
# Change to non-root user
|
|
11
|
+
USER node
|
|
12
|
+
|
|
13
|
+
# Prevent proxy timeout error (very slow connections)
|
|
14
|
+
RUN npm config set fetch-retry-mintimeout 20000
|
|
15
|
+
RUN npm config set fetch-retry-maxtimeout 120000
|
|
16
|
+
RUN npm config rm proxy
|
|
17
|
+
RUN npm config rm https-proxy
|
|
18
|
+
|
|
19
|
+
# Run compilation
|
|
20
|
+
CMD [ "python", "build/all.py" ]
|
package/build/gendeps.py
CHANGED
|
@@ -24,17 +24,6 @@ import sys
|
|
|
24
24
|
import shakaBuildHelpers
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
# The relative path in each of these is relative to Closure's base.js, which
|
|
28
|
-
# lives at node_modules/google-closure-library/closure/goog/base.js
|
|
29
|
-
deps_args = [
|
|
30
|
-
'--root_with_prefix=lib ../../../../lib',
|
|
31
|
-
'--root_with_prefix=ui ../../../../ui',
|
|
32
|
-
'--root_with_prefix=third_party ../../../../third_party',
|
|
33
|
-
'--root_with_prefix=dist ../../../../dist',
|
|
34
|
-
'--root_with_prefix=demo ../../../../demo',
|
|
35
|
-
]
|
|
36
|
-
|
|
37
|
-
|
|
38
27
|
def main(_):
|
|
39
28
|
"""Generates the uncompiled dependencies files."""
|
|
40
29
|
# Update node modules if needed.
|
|
@@ -50,13 +39,27 @@ def main(_):
|
|
|
50
39
|
except OSError:
|
|
51
40
|
pass
|
|
52
41
|
os.chdir(base)
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
'closure', '
|
|
42
|
+
|
|
43
|
+
make_deps = shakaBuildHelpers.get_node_binary(
|
|
44
|
+
'google-closure-deps', 'closure-make-deps')
|
|
56
45
|
|
|
57
46
|
try:
|
|
58
|
-
cmd_line =
|
|
47
|
+
cmd_line = make_deps + [
|
|
48
|
+
# Folders to search for sources using goog.require/goog.provide
|
|
49
|
+
'-r', 'demo', 'lib', 'ui', 'third_party',
|
|
50
|
+
# Individual files to add to those
|
|
51
|
+
'-f', 'dist/locales.js',
|
|
52
|
+
# The path to the folder containing the Closure library's base.js
|
|
53
|
+
'--closure-path', 'node_modules/google-closure-library/closure/goog',
|
|
54
|
+
]
|
|
59
55
|
deps = shakaBuildHelpers.execute_get_output(cmd_line)
|
|
56
|
+
|
|
57
|
+
# This command doesn't use exit codes for some stupid reason.
|
|
58
|
+
# TODO: Remove when https://github.com/google/closure-library/issues/1162
|
|
59
|
+
# is resolved and we have upgraded.
|
|
60
|
+
if len(deps) == 0:
|
|
61
|
+
return 1
|
|
62
|
+
|
|
60
63
|
with open(os.path.join(base, 'dist', 'deps.js'), 'wb') as f:
|
|
61
64
|
f.write(deps)
|
|
62
65
|
return 0
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# Selenium grid config for the Shaka lab. This is the source of truth for the
|
|
2
|
+
# browsers and devices in the Shaka lab at Google.
|
|
3
|
+
|
|
4
|
+
# For syntax and general information, see docs/selenium-grid-config.md
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
# A set of variables to contain repeated configurations which can then be
|
|
8
|
+
# referenced below. The syntax for the variable is "name: &name", which
|
|
9
|
+
# generates an "anchor" with the given name. Later, you can inject the
|
|
10
|
+
# contents of the variable with "*name".
|
|
11
|
+
vars:
|
|
12
|
+
firefox_config: &firefox_config
|
|
13
|
+
moz:firefoxOptions:
|
|
14
|
+
# Override Firefox default preferences in the temporary profile created
|
|
15
|
+
# for each test run.
|
|
16
|
+
prefs:
|
|
17
|
+
# Overrides Selenium's explicit default setting, to allow Firefox to
|
|
18
|
+
# install the Widevine CDM on demand.
|
|
19
|
+
media.gmp-manager.updateEnabled: true
|
|
20
|
+
# Overrides Firefox's Linux-specific default setting to disable DRM.
|
|
21
|
+
media.eme.enabled: true
|
|
22
|
+
|
|
23
|
+
minimum_chrome_args: &minimum_chrome_args
|
|
24
|
+
# On Chrome m59+ we can test EME on platforms with pop-up prompts, such as
|
|
25
|
+
# Android and ChromeOS. Note that this flag does not take a port number
|
|
26
|
+
# (domain vs origin).
|
|
27
|
+
# This flag requires setting --user-data-dir as well, however, webdriver
|
|
28
|
+
# already takes care of that for us (except on Android).
|
|
29
|
+
- "--unsafely-allow-protected-media-identifier-for-domain=karma.shakalab.rocks"
|
|
30
|
+
# Normally, Chrome disallows autoplaying videos in many cases. Enable it
|
|
31
|
+
# for testing.
|
|
32
|
+
- "--autoplay-policy=no-user-gesture-required"
|
|
33
|
+
|
|
34
|
+
minimum_chrome_android_args: &minimum_chrome_android_args
|
|
35
|
+
# There is no way in YAML to natively merge arrays, so we start by
|
|
36
|
+
# duplicating the flags from minimum_chrome_args above.
|
|
37
|
+
- "--unsafely-allow-protected-media-identifier-for-domain=karma.shakalab.rocks"
|
|
38
|
+
- "--autoplay-policy=no-user-gesture-required"
|
|
39
|
+
# On Android we must set --user-data-dir. WebDriver does not do it for
|
|
40
|
+
# us as it does on other platforms. Without --user-data-dir,
|
|
41
|
+
# --unsafely-allow... does not work.
|
|
42
|
+
- "--user-data-dir=/data/data/com.android.chrome/cache"
|
|
43
|
+
|
|
44
|
+
minimum_chromeos_args: &minimum_chromeos_args
|
|
45
|
+
# There is no way in YAML to natively merge arrays, so we start by
|
|
46
|
+
# duplicating the flags from minimum_chrome_args above.
|
|
47
|
+
- "--unsafely-allow-protected-media-identifier-for-domain=karma.shakalab.rocks"
|
|
48
|
+
- "--autoplay-policy=no-user-gesture-required"
|
|
49
|
+
# Allow remote attestation even though the device may be in dev mode. This
|
|
50
|
+
# is critical for testing involving L1 content licenses.
|
|
51
|
+
- "--allow-ra-in-dev-mode"
|
|
52
|
+
|
|
53
|
+
chrome_config: &chrome_config
|
|
54
|
+
goog:chromeOptions:
|
|
55
|
+
args: *minimum_chrome_args
|
|
56
|
+
|
|
57
|
+
# Instruct chromedriver not to disable component updater. The
|
|
58
|
+
# component updater must run in order for the Widevine CDM to be
|
|
59
|
+
# available when using a new user-data-dir.
|
|
60
|
+
# TODO(http://crbug.com/613581): Remove once Chrome bug is fixed.
|
|
61
|
+
excludeSwitches:
|
|
62
|
+
- "disable-component-update"
|
|
63
|
+
|
|
64
|
+
chrome_android_config: &chrome_android_config
|
|
65
|
+
goog:chromeOptions:
|
|
66
|
+
args: *minimum_chrome_android_args
|
|
67
|
+
|
|
68
|
+
# Once the new session request reaches chromedriver, it will take
|
|
69
|
+
# the androidPackage option as a request to start Chrome through
|
|
70
|
+
# adb on the tethered device.
|
|
71
|
+
androidPackage: com.android.chrome
|
|
72
|
+
|
|
73
|
+
chromeos_config: &chromeos_config
|
|
74
|
+
# Pass these client-specified arguments through generic-webdriver-server.
|
|
75
|
+
# This array will be appended after "--" instead of being set through one
|
|
76
|
+
# specific flag. For example, with ["--foo", "--bar=baz"] in the args,
|
|
77
|
+
# this would generate a command like:
|
|
78
|
+
# chromeos-webdriver-server.js -- --foo --bar=baz
|
|
79
|
+
# Those parameters will be passed on to Chrome instead of used by the
|
|
80
|
+
# WebDriver server.
|
|
81
|
+
generic:args: *minimum_chromeos_args
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
ChromeMac:
|
|
85
|
+
browser: chrome
|
|
86
|
+
os: Mac
|
|
87
|
+
extra_config: *chrome_config
|
|
88
|
+
|
|
89
|
+
FirefoxMac:
|
|
90
|
+
browser: firefox
|
|
91
|
+
os: Mac
|
|
92
|
+
extra_config: *firefox_config
|
|
93
|
+
|
|
94
|
+
Safari:
|
|
95
|
+
browser: safari
|
|
96
|
+
os: Mac
|
|
97
|
+
|
|
98
|
+
SafariTP:
|
|
99
|
+
# TODO(b/152646297): Safari TP not launching as of Safari 15.4
|
|
100
|
+
disabled: true
|
|
101
|
+
browser: safari
|
|
102
|
+
os: Mac
|
|
103
|
+
extra_config:
|
|
104
|
+
safari.options:
|
|
105
|
+
technologyPreview: true
|
|
106
|
+
|
|
107
|
+
ChromeWindows:
|
|
108
|
+
browser: chrome
|
|
109
|
+
os: Windows
|
|
110
|
+
extra_config: *chrome_config
|
|
111
|
+
|
|
112
|
+
FirefoxWindows:
|
|
113
|
+
browser: firefox
|
|
114
|
+
os: Windows
|
|
115
|
+
extra_config: *firefox_config
|
|
116
|
+
|
|
117
|
+
IE11:
|
|
118
|
+
# IE11 support has been removed from the latest release branch.
|
|
119
|
+
disabled: true
|
|
120
|
+
browser: internet explorer
|
|
121
|
+
os: Windows
|
|
122
|
+
extra_config:
|
|
123
|
+
se:ieOptions:
|
|
124
|
+
# The zoom setting must be checked, or screenshot tests will be way off!
|
|
125
|
+
ignoreZoomSetting: false
|
|
126
|
+
ignoreProtectedModeSettings: true
|
|
127
|
+
|
|
128
|
+
Edge:
|
|
129
|
+
browser: msedge
|
|
130
|
+
os: Windows
|
|
131
|
+
|
|
132
|
+
ChromeLinux:
|
|
133
|
+
browser: chrome
|
|
134
|
+
os: Linux
|
|
135
|
+
extra_config: *chrome_config
|
|
136
|
+
|
|
137
|
+
FirefoxLinux:
|
|
138
|
+
browser: firefox
|
|
139
|
+
os: Linux
|
|
140
|
+
extra_config: *firefox_config
|
|
141
|
+
|
|
142
|
+
ChromeAndroid:
|
|
143
|
+
browser: chrome
|
|
144
|
+
os: Android
|
|
145
|
+
extra_config: *chrome_android_config
|
|
146
|
+
|
|
147
|
+
Chromecast:
|
|
148
|
+
browser: chromecast
|
|
149
|
+
|
|
150
|
+
Chromebook:
|
|
151
|
+
# TODO(b/145916766): Persistent license tests failing
|
|
152
|
+
disabled: true
|
|
153
|
+
browser: chromeos
|
|
154
|
+
version: Pixelbook
|
|
155
|
+
extra_config: *chromeos_config
|
|
156
|
+
|
|
157
|
+
Tizen:
|
|
158
|
+
# TODO(joeyparrish): Get Tizen TV mounted in the lab and connected
|
|
159
|
+
disabled: true
|
|
160
|
+
browser: tizen
|
|
161
|
+
|
|
162
|
+
XboxOne:
|
|
163
|
+
browser: xboxone
|
|
@@ -63,23 +63,6 @@ def _modules_need_update():
|
|
|
63
63
|
|
|
64
64
|
return False
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
def _parse_version(version):
|
|
68
|
-
"""Converts the given string version to a tuple of numbers."""
|
|
69
|
-
# Handle any prerelease or build metadata, such as -beta or -g1234
|
|
70
|
-
if '-' in version:
|
|
71
|
-
version, trailer = version.split('-')
|
|
72
|
-
else:
|
|
73
|
-
# Versions without a trailer should sort later than those with a trailer.
|
|
74
|
-
# For example, 2.5.0-beta comes before 2.5.0.
|
|
75
|
-
# To accomplish this, we synthesize a trailer which sorts later than any
|
|
76
|
-
# _reasonable_ alphanumeric version trailer would. These characters have a
|
|
77
|
-
# high value in ASCII.
|
|
78
|
-
trailer = '}}}'
|
|
79
|
-
numeric_parts = [int(i) for i in version.split('.')]
|
|
80
|
-
return tuple(numeric_parts + [trailer])
|
|
81
|
-
|
|
82
|
-
|
|
83
66
|
def get_source_base():
|
|
84
67
|
"""Returns the absolute path to the source code base."""
|
|
85
68
|
return os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
|
|
@@ -338,21 +321,13 @@ def update_node_modules():
|
|
|
338
321
|
|
|
339
322
|
base = cygwin_safe_path(get_source_base())
|
|
340
323
|
|
|
341
|
-
# Check the version of npm.
|
|
342
|
-
version = execute_get_output(['npm', '-v']).decode('utf8')
|
|
343
|
-
|
|
344
|
-
if _parse_version(version) < _parse_version('5.0.0'):
|
|
345
|
-
logging.error('npm version is too old, please upgrade. e.g.:')
|
|
346
|
-
logging.error(' npm install -g npm')
|
|
347
|
-
return False
|
|
348
|
-
|
|
349
324
|
# Update the modules.
|
|
350
325
|
# Actually change directories instead of using npm --prefix.
|
|
351
|
-
# See npm/npm#17027 and
|
|
326
|
+
# See npm/npm#17027 and shaka-project/shaka-player#776 for more details.
|
|
352
327
|
with InDir(base):
|
|
353
|
-
# npm
|
|
354
|
-
#
|
|
355
|
-
execute_get_output(['npm', '
|
|
328
|
+
# npm ci uses package-lock.json to get a stable, reproducible set of
|
|
329
|
+
# packages installed.
|
|
330
|
+
execute_get_output(['npm', 'ci'])
|
|
356
331
|
|
|
357
332
|
# Update the timestamp of the file that tracks when we last updated.
|
|
358
333
|
open(_node_modules_last_update_path(), 'wb').close()
|
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
|
|
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
|
|
219
|
-
|
|
220
|
-
|
|
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. '
|
|
@@ -244,7 +270,7 @@ class Launcher:
|
|
|
244
270
|
help='Configure license servers for the custom asset playback test. '
|
|
245
271
|
'May be specified multiple times to configure multiple key '
|
|
246
272
|
'systems.',
|
|
247
|
-
type=
|
|
273
|
+
type=_KeyValueValidator,
|
|
248
274
|
metavar='KEY_SYSTEM_ID=LICENSE_SERVER_URI',
|
|
249
275
|
action=_HandleKeyValuePairs)
|
|
250
276
|
running_commands.add_argument(
|
|
@@ -258,6 +284,13 @@ class Launcher:
|
|
|
258
284
|
help="Don't use Babel to convert ES6 to ES5.",
|
|
259
285
|
dest='babel',
|
|
260
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)')
|
|
261
294
|
|
|
262
295
|
|
|
263
296
|
logging_commands.add_argument(
|
|
@@ -313,6 +346,17 @@ class Launcher:
|
|
|
313
346
|
help='Specify the hostname to be used when capturing browsers. This '
|
|
314
347
|
'defaults to localhost.',
|
|
315
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.")
|
|
316
360
|
|
|
317
361
|
|
|
318
362
|
pre_launch_commands.add_argument(
|
|
@@ -345,28 +389,36 @@ class Launcher:
|
|
|
345
389
|
pass_through = [
|
|
346
390
|
'auto_watch',
|
|
347
391
|
'babel',
|
|
392
|
+
'browsers',
|
|
348
393
|
'capture_timeout',
|
|
349
394
|
'colors',
|
|
395
|
+
'delay_tests',
|
|
350
396
|
'drm',
|
|
397
|
+
'exclude_browsers',
|
|
351
398
|
'external',
|
|
352
399
|
'filter',
|
|
400
|
+
'grid_address',
|
|
401
|
+
'grid_config',
|
|
353
402
|
'hostname',
|
|
354
403
|
'html_coverage_report',
|
|
355
404
|
'log_level',
|
|
356
405
|
'logging',
|
|
406
|
+
'no_browsers',
|
|
357
407
|
'port',
|
|
358
408
|
'quarantined',
|
|
359
409
|
'quick',
|
|
360
410
|
'random',
|
|
411
|
+
'reporters',
|
|
361
412
|
'report_slower_than',
|
|
362
413
|
'seed',
|
|
363
414
|
'single_run',
|
|
364
|
-
'uncompiled',
|
|
365
|
-
'delay_tests',
|
|
366
415
|
'spec_hide_passed',
|
|
367
416
|
'test_custom_asset',
|
|
368
417
|
'test_custom_license_server',
|
|
369
418
|
'test_timeout',
|
|
419
|
+
'tls_key',
|
|
420
|
+
'tls_cert',
|
|
421
|
+
'uncompiled',
|
|
370
422
|
]
|
|
371
423
|
|
|
372
424
|
# Check each value before setting it to avoid passing null values.
|
|
@@ -375,8 +427,33 @@ class Launcher:
|
|
|
375
427
|
if value is not None:
|
|
376
428
|
self.karma_config[name] = value
|
|
377
429
|
|
|
378
|
-
if self.parsed_args.
|
|
379
|
-
|
|
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))
|
|
380
457
|
|
|
381
458
|
def ResolveBrowsers(self, default_browsers):
|
|
382
459
|
"""Decide what browsers we should use.
|
|
@@ -385,25 +462,7 @@ class Launcher:
|
|
|
385
462
|
additional logic to derive a browser list from the parsed arguments.
|
|
386
463
|
"""
|
|
387
464
|
assert(default_browsers and len(default_browsers))
|
|
388
|
-
|
|
389
|
-
if self.parsed_args.no_browsers:
|
|
390
|
-
logging.warning('In this mode browsers must manually connect to karma.')
|
|
391
|
-
elif self.parsed_args.browsers:
|
|
392
|
-
self.karma_config['browsers'] = self.parsed_args.browsers
|
|
393
|
-
else:
|
|
394
|
-
logging.warning('Using default browsers: %s', default_browsers)
|
|
395
|
-
self.karma_config['browsers'] = default_browsers
|
|
396
|
-
|
|
397
|
-
# Check if there are any browsers that we should remove
|
|
398
|
-
if self.parsed_args.exclude_browsers and 'browsers' in self.karma_config:
|
|
399
|
-
all_browsers = set(self.karma_config['browsers'])
|
|
400
|
-
bad_browsers = set(self.parsed_args.exclude_browsers)
|
|
401
|
-
if bad_browsers - all_browsers:
|
|
402
|
-
raise RuntimeError('Attempting to exclude unselected browsers: %s' %
|
|
403
|
-
','.join(bad_browsers - all_browsers))
|
|
404
|
-
|
|
405
|
-
good_browsers = all_browsers - bad_browsers
|
|
406
|
-
self.karma_config['browsers'] = list(good_browsers)
|
|
465
|
+
self.karma_config['default_browsers'] = default_browsers
|
|
407
466
|
|
|
408
467
|
def RunCommand(self, karma_conf):
|
|
409
468
|
"""Build a command and send it to Karma for execution.
|