shaka-player 4.6.4 → 4.7.0
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/README.md +1 -0
- package/dist/controls.css +1 -1
- package/dist/controls.css.map +1 -1
- package/dist/deps.js +9 -5
- package/dist/locales.js +29 -29
- package/dist/shaka-player.compiled.d.ts +46 -3
- package/dist/shaka-player.compiled.debug.d.ts +46 -3
- package/dist/shaka-player.compiled.debug.externs.js +45 -0
- package/dist/shaka-player.compiled.debug.js +382 -351
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +45 -0
- package/dist/shaka-player.compiled.js +1135 -1121
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +68 -4
- package/dist/shaka-player.ui.debug.d.ts +68 -4
- package/dist/shaka-player.ui.debug.externs.js +77 -0
- package/dist/shaka-player.ui.debug.js +428 -392
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +77 -0
- package/dist/shaka-player.ui.js +1304 -1290
- package/dist/shaka-player.ui.map +4 -4
- package/externs/mediasession.js +7 -0
- package/externs/shaka/abr_manager.js +8 -0
- package/externs/shaka/manifest.js +3 -3
- package/externs/shaka/player.js +59 -4
- package/lib/abr/simple_abr_manager.js +41 -15
- package/lib/cea/cea708_service.js +1 -1
- package/lib/cea/cea708_window.js +95 -7
- package/lib/dash/dash_parser.js +55 -11
- package/lib/media/adaptation_set_criteria.js +76 -10
- package/lib/media/media_source_engine.js +42 -18
- package/lib/media/segment_reference.js +12 -0
- package/lib/media/streaming_engine.js +55 -3
- package/lib/player.js +92 -6
- package/lib/util/cmsd_manager.js +269 -0
- package/lib/util/content_steering_manager.js +5 -1
- package/lib/util/mime_utils.js +6 -2
- package/lib/util/periods.js +108 -39
- package/lib/util/player_configuration.js +19 -5
- package/lib/util/stream_utils.js +82 -13
- package/package.json +1 -1
- package/ui/audio_language_selection.js +3 -0
- package/ui/controls.js +60 -0
- package/ui/externs/ui.js +12 -1
- package/ui/hidden_fast_forward_button.js +32 -0
- package/ui/hidden_rewind_button.js +32 -0
- package/ui/hidden_seek_button.js +121 -0
- package/ui/less/buttons.less +50 -0
- package/ui/less/containers.less +18 -0
- package/ui/resolution_selection.js +2 -0
- package/ui/ui.js +2 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -75
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -26
- package/.github/ISSUE_TEMPLATE/question.md +0 -26
- package/.github/config.yml +0 -1
- package/.github/workflows/appspot.yaml +0 -39
- package/.github/workflows/build-and-test.yaml +0 -222
- package/.github/workflows/compute-incremental-coverage.py +0 -265
- package/.github/workflows/custom-actions/prep-for-appspot/action.yaml +0 -56
- package/.github/workflows/custom-actions/set-commit-status/action.yaml +0 -37
- package/.github/workflows/deflake.yaml +0 -31
- package/.github/workflows/demo-version-index.yaml +0 -43
- package/.github/workflows/nightly-demo.yaml +0 -42
- package/.github/workflows/release-please.yaml +0 -193
- package/.github/workflows/report-incremental-coverage.yaml +0 -39
- package/.github/workflows/safari-homedir-launcher.sh +0 -18
- package/.github/workflows/selenium-lab-tests.yaml +0 -370
- package/.github/workflows/shaka-bot-commands/command-help.sh +0 -27
- package/.github/workflows/shaka-bot-commands/command-test.sh +0 -56
- package/.github/workflows/shaka-bot-commands/lib.sh +0 -83
- package/.github/workflows/shaka-bot-commands/main.sh +0 -51
- package/.github/workflows/sync-labels.yaml +0 -33
- package/.github/workflows/talk-to-shaka-bot.yaml +0 -29
- package/.github/workflows/update-issues.yaml +0 -31
- package/.github/workflows/update-screenshots.yaml +0 -142
- package/.github/workflows/validate-pr-title.yaml +0 -27
- package/CHANGELOG.md +0 -5774
- package/CODE_OF_CONDUCT.md +0 -93
- package/CONTRIBUTING.md +0 -76
- package/demo/TengwarTelcontar.woff2 +0 -0
- package/demo/app_logo_144.png +0 -0
- package/demo/app_logo_192.png +0 -0
- package/demo/app_logo_256.png +0 -0
- package/demo/app_logo_384.png +0 -0
- package/demo/app_logo_512.png +0 -0
- package/demo/app_manifest.json +0 -29
- package/demo/asset_card.js +0 -410
- package/demo/autoTemplate.txt +0 -61
- package/demo/cast_receiver/idle1.jpg +0 -0
- package/demo/cast_receiver/idle2.jpg +0 -0
- package/demo/cast_receiver/idle3.jpg +0 -0
- package/demo/cast_receiver/index.html +0 -75
- package/demo/cast_receiver/receiver_app.css +0 -111
- package/demo/cast_receiver/receiver_app.js +0 -158
- package/demo/close_button.js +0 -60
- package/demo/common/asset.js +0 -510
- package/demo/common/assets.js +0 -1634
- package/demo/config.js +0 -859
- package/demo/custom.js +0 -907
- package/demo/customWarning.txt +0 -8
- package/demo/demo.less +0 -591
- package/demo/demo_uncompiled.js +0 -11
- package/demo/demo_utils.js +0 -113
- package/demo/favicon.ico +0 -0
- package/demo/front.js +0 -156
- package/demo/icons/README.md +0 -4
- package/demo/icons/baseline-audiotrack-24px.svg +0 -1
- package/demo/icons/baseline-closed_caption-24px.svg +0 -1
- package/demo/icons/baseline-fast_forward-24px.svg +0 -1
- package/demo/icons/baseline-language-24px.svg +0 -1
- package/demo/icons/baseline-live_tv-24px.svg +0 -1
- package/demo/icons/baseline-subtitles-24px.svg +0 -1
- package/demo/icons/baseline-surround_sound-24px.svg +0 -1
- package/demo/icons/custom_ad.svg +0 -1
- package/demo/icons/custom_box_with_text.svg +0 -1
- package/demo/icons/custom_clear_key.svg +0 -1
- package/demo/icons/custom_high_definition.svg +0 -1
- package/demo/icons/custom_playready.svg +0 -1
- package/demo/icons/custom_ultra_high_definition.svg +0 -1
- package/demo/icons/custom_widevine.svg +0 -1
- package/demo/index.html +0 -173
- package/demo/input.js +0 -270
- package/demo/input_container.js +0 -218
- package/demo/load.js +0 -156
- package/demo/main.js +0 -1854
- package/demo/search.js +0 -452
- package/demo/service_worker.js +0 -355
- package/demo/shaka_logo_trans.png +0 -0
- package/demo/tooltip.js +0 -29
- package/demo/visualizer.js +0 -335
- package/demo/visualizer_button.js +0 -84
- package/dist/demo.compiled.debug.js +0 -340
- package/dist/demo.compiled.debug.map +0 -8
- package/dist/demo.compiled.js +0 -340
- package/dist/demo.compiled.map +0 -8
- package/dist/demo.css +0 -6
- package/dist/demo.css.map +0 -1
- package/dist/receiver.compiled.debug.js +0 -187
- package/dist/receiver.compiled.debug.map +0 -8
- package/dist/receiver.compiled.js +0 -187
- package/dist/receiver.compiled.map +0 -8
- package/docs/announcement-list-join-group.png +0 -0
- package/docs/api-mainpage.md +0 -28
- package/docs/design/REDESIGN.md +0 -283
- package/docs/design/architecture.md +0 -13
- package/docs/design/bg-fetch-after.gv +0 -29
- package/docs/design/bg-fetch-after.gv.png +0 -0
- package/docs/design/bg-fetch-before.gv +0 -18
- package/docs/design/bg-fetch-before.gv.png +0 -0
- package/docs/design/bg-fetch.md +0 -134
- package/docs/design/cast.gv +0 -35
- package/docs/design/cast.gv.png +0 -0
- package/docs/design/chromecast.md +0 -151
- package/docs/design/codec_preferences.md +0 -158
- package/docs/design/dash-audio-channels.md +0 -123
- package/docs/design/dash-manifests.md +0 -248
- package/docs/design/dash-timeline.svg +0 -4
- package/docs/design/dataflow.gv +0 -66
- package/docs/design/dataflow.gv.png +0 -0
- package/docs/design/export.md +0 -70
- package/docs/design/fuzzy-locale-matching.md +0 -40
- package/docs/design/gap-jumping.md +0 -151
- package/docs/design/lcevc-architecture.png +0 -0
- package/docs/design/lcevc-demo.png +0 -0
- package/docs/design/lcevc-integration.md +0 -72
- package/docs/design/locale_compatibility.svg +0 -1
- package/docs/design/locales_tree.svg +0 -1
- package/docs/design/localization-design-principles.md +0 -158
- package/docs/design/newdemo.gv +0 -83
- package/docs/design/newdemo.gv.png +0 -0
- package/docs/design/offline.gv +0 -43
- package/docs/design/offline.gv.png +0 -0
- package/docs/design/offline.md +0 -153
- package/docs/design/ownership.gv +0 -76
- package/docs/design/ownership.gv.png +0 -0
- package/docs/design/preload.md +0 -299
- package/docs/design/preload.png +0 -0
- package/docs/design/talking-about-languages.md +0 -46
- package/docs/design/timeline.svg +0 -152
- package/docs/design/ui.md +0 -31
- package/docs/design/ui_player_relationships.svg +0 -1
- package/docs/jsdoc-plugin.js +0 -74
- package/docs/jsdoc-template/README.md +0 -1
- package/docs/jsdoc-template/publish.js +0 -879
- package/docs/jsdoc-template/static/fonts/OpenSans-Bold-webfont.eot +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-Bold-webfont.svg +0 -1830
- package/docs/jsdoc-template/static/fonts/OpenSans-Bold-webfont.woff +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-BoldItalic-webfont.svg +0 -1830
- package/docs/jsdoc-template/static/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-Italic-webfont.eot +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-Italic-webfont.svg +0 -1830
- package/docs/jsdoc-template/static/fonts/OpenSans-Italic-webfont.woff +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-Light-webfont.eot +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-Light-webfont.svg +0 -1831
- package/docs/jsdoc-template/static/fonts/OpenSans-Light-webfont.woff +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-LightItalic-webfont.eot +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-LightItalic-webfont.svg +0 -1835
- package/docs/jsdoc-template/static/fonts/OpenSans-LightItalic-webfont.woff +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-Regular-webfont.eot +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-Regular-webfont.svg +0 -1831
- package/docs/jsdoc-template/static/fonts/OpenSans-Regular-webfont.woff +0 -0
- package/docs/jsdoc-template/static/scripts/linenumber.js +0 -44
- package/docs/jsdoc-template/static/scripts/show-widget.js +0 -55
- package/docs/jsdoc-template/static/styles/jsdoc-default.css +0 -438
- package/docs/jsdoc-template/tmpl/augments.tmpl +0 -10
- package/docs/jsdoc-template/tmpl/container.tmpl +0 -205
- package/docs/jsdoc-template/tmpl/details.tmpl +0 -152
- package/docs/jsdoc-template/tmpl/example.tmpl +0 -2
- package/docs/jsdoc-template/tmpl/examples.tmpl +0 -13
- package/docs/jsdoc-template/tmpl/exceptions.tmpl +0 -32
- package/docs/jsdoc-template/tmpl/layout.tmpl +0 -50
- package/docs/jsdoc-template/tmpl/mainpage.tmpl +0 -14
- package/docs/jsdoc-template/tmpl/members.tmpl +0 -47
- package/docs/jsdoc-template/tmpl/method.tmpl +0 -140
- package/docs/jsdoc-template/tmpl/modifies.tmpl +0 -14
- package/docs/jsdoc-template/tmpl/params.tmpl +0 -131
- package/docs/jsdoc-template/tmpl/properties.tmpl +0 -125
- package/docs/jsdoc-template/tmpl/returns.tmpl +0 -19
- package/docs/jsdoc-template/tmpl/source.tmpl +0 -8
- package/docs/jsdoc-template/tmpl/tutorial.tmpl +0 -21
- package/docs/jsdoc-template/tmpl/type.tmpl +0 -7
- package/docs/jsdoc.conf.json +0 -38
- package/docs/shaka-player-logo.png +0 -0
- package/docs/style.md +0 -174
- package/docs/tutorials/a11y.md +0 -64
- package/docs/tutorials/ad_monetization.md +0 -292
- package/docs/tutorials/application-level-redirects.md +0 -94
- package/docs/tutorials/architecture.md +0 -32
- package/docs/tutorials/basic-usage.md +0 -89
- package/docs/tutorials/blob-url.md +0 -15
- package/docs/tutorials/config.md +0 -148
- package/docs/tutorials/debugging.md +0 -189
- package/docs/tutorials/drm-config.md +0 -274
- package/docs/tutorials/errors.md +0 -95
- package/docs/tutorials/fairplay.md +0 -242
- package/docs/tutorials/faq.md +0 -252
- package/docs/tutorials/index.json +0 -29
- package/docs/tutorials/lcevc.md +0 -118
- package/docs/tutorials/license-server-auth.md +0 -248
- package/docs/tutorials/license-wrapping.md +0 -168
- package/docs/tutorials/manifest-parser.md +0 -365
- package/docs/tutorials/network-and-buffering-config.md +0 -119
- package/docs/tutorials/offline.md +0 -683
- package/docs/tutorials/plugins.md +0 -184
- package/docs/tutorials/selenium-grid-config.md +0 -174
- package/docs/tutorials/service-worker.md +0 -106
- package/docs/tutorials/ui-customization.md +0 -288
- package/docs/tutorials/ui.md +0 -232
- package/docs/tutorials/upgrade-manifest.md +0 -281
- package/docs/tutorials/upgrade.md +0 -104
- package/docs/tutorials/welcome.md +0 -108
- package/docs/tutorials/widevine-service-certs.md +0 -45
- package/karma.conf.js +0 -879
- package/maintained-branches.md +0 -15
- package/roadmap.md +0 -186
- package/test/abr/simple_abr_manager_unit.js +0 -398
- package/test/ads/ad_manager_unit.js +0 -260
- package/test/assumptions/uint8_array_unit.js +0 -22
- package/test/cast/cast_proxy_unit.js +0 -736
- package/test/cast/cast_receiver_integration.js +0 -488
- package/test/cast/cast_receiver_unit.js +0 -1183
- package/test/cast/cast_sender_unit.js +0 -973
- package/test/cast/cast_utils_unit.js +0 -311
- package/test/cea/cea608_memory_unit.js +0 -411
- package/test/cea/cea708_service_unit.js +0 -674
- package/test/cea/cea708_window_unit.js +0 -373
- package/test/cea/cea_decoder_unit.js +0 -615
- package/test/cea/dtvcc_packet_builder_unit.js +0 -158
- package/test/cea/dtvcc_packet_unit.js +0 -60
- package/test/cea/mp4_cea_parser_unit.js +0 -127
- package/test/codec_switching/codec_switching_integration.js +0 -182
- package/test/dash/dash_parser_content_protection_unit.js +0 -998
- package/test/dash/dash_parser_integration.js +0 -74
- package/test/dash/dash_parser_live_unit.js +0 -1542
- package/test/dash/dash_parser_manifest_unit.js +0 -3121
- package/test/dash/dash_parser_segment_base_unit.js +0 -421
- package/test/dash/dash_parser_segment_list_unit.js +0 -380
- package/test/dash/dash_parser_segment_template_unit.js +0 -910
- package/test/dash/mpd_utils_unit.js +0 -794
- package/test/demo/demo_unit.js +0 -108
- package/test/deprecate/enforcer_unit.js +0 -74
- package/test/deprecate/version_unit.js +0 -57
- package/test/hls/hls_live_unit.js +0 -1330
- package/test/hls/hls_parser_unit.js +0 -5276
- package/test/hls/manifest_text_parser_unit.js +0 -545
- package/test/media/adaptation_set_criteria_unit.js +0 -806
- package/test/media/adaptation_set_unit.js +0 -229
- package/test/media/buffering_observer_unit.js +0 -143
- package/test/media/closed_caption_parser_unit.js +0 -18
- package/test/media/content_workarounds_unit.js +0 -43
- package/test/media/drm_engine_integration.js +0 -356
- package/test/media/drm_engine_unit.js +0 -2805
- package/test/media/media_source_engine_integration.js +0 -691
- package/test/media/media_source_engine_unit.js +0 -1512
- package/test/media/mp4_segment_index_parser_unit.js +0 -80
- package/test/media/play_rate_controller_unit.js +0 -69
- package/test/media/playhead_unit.js +0 -1394
- package/test/media/presentation_timeline_unit.js +0 -477
- package/test/media/quality_observer_unit.js +0 -138
- package/test/media/region_observer_unit.js +0 -374
- package/test/media/region_timeline_unit.js +0 -139
- package/test/media/segment_index_unit.js +0 -1080
- package/test/media/segment_prefetch_unit.js +0 -243
- package/test/media/segment_reference_unit.js +0 -63
- package/test/media/stall_detector_unit.js +0 -184
- package/test/media/streaming_engine_integration.js +0 -632
- package/test/media/streaming_engine_unit.js +0 -4211
- package/test/media/time_ranges_utils_unit.js +0 -123
- package/test/media/webm_segment_index_parser_unit.js +0 -90
- package/test/mss/mss_parser_content_protection_unit.js +0 -49
- package/test/mss/mss_parser_unit.js +0 -474
- package/test/mss/mss_player_integration.js +0 -124
- package/test/net/data_uri_plugin_unit.js +0 -105
- package/test/net/http_plugin_unit.js +0 -439
- package/test/net/networking_engine_unit.js +0 -1236
- package/test/net/networking_utils_unit.js +0 -37
- package/test/offline/download_progress_estimator_unit.js +0 -90
- package/test/offline/indexeddb_storage_unit.js +0 -192
- package/test/offline/manifest_convert_unit.js +0 -622
- package/test/offline/offline_integration.js +0 -168
- package/test/offline/offline_manifest_parser_unit.js +0 -231
- package/test/offline/offline_scheme_unit.js +0 -154
- package/test/offline/offline_uri_unit.js +0 -59
- package/test/offline/storage_compatibility_unit.js +0 -344
- package/test/offline/storage_integration.js +0 -1858
- package/test/player_external.js +0 -237
- package/test/player_integration.js +0 -1371
- package/test/player_load_graph_integration.js +0 -865
- package/test/player_src_equals_external.js +0 -154
- package/test/player_src_equals_integration.js +0 -527
- package/test/player_unit.js +0 -4434
- package/test/polyfill/media_capabilities_unit.js +0 -277
- package/test/polyfill/patchedmediakeys_apple_unit.js +0 -130
- package/test/test/assets/3675/chunk-stream0-00001.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00002.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00003.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00004.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00005.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00006.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00007.m4s +0 -0
- package/test/test/assets/3675/dash_0.mpd +0 -30
- package/test/test/assets/3675/dash_1.mpd +0 -30
- package/test/test/assets/3675/dash_2.mpd +0 -30
- package/test/test/assets/3675/dash_3.mpd +0 -30
- package/test/test/assets/3675/dash_4.mpd +0 -30
- package/test/test/assets/3675/dash_5.mpd +0 -26
- package/test/test/assets/3675/init-stream0.m4s +0 -0
- package/test/test/assets/audio-xhe-aac.mp4 +0 -0
- package/test/test/assets/audio.ts +0 -0
- package/test/test/assets/captions-test.ts +0 -0
- package/test/test/assets/cea-init.mp4 +0 -0
- package/test/test/assets/cea-segment.mp4 +0 -0
- package/test/test/assets/chapters.srt +0 -11
- package/test/test/assets/chapters.vtt +0 -10
- package/test/test/assets/chapters2.vtt +0 -10
- package/test/test/assets/dash-aes-128/Fragments(video=0,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=20000000,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=40000000,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=60000000,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=i,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/dash.mpd +0 -18
- package/test/test/assets/dash-aes-128/license +0 -1
- package/test/test/assets/dash-multi-codec/audio_en_2c_128k_aac.mp4 +0 -0
- package/test/test/assets/dash-multi-codec/audio_es_2c_64k_opus.webm +0 -0
- package/test/test/assets/dash-multi-codec/dash.mpd +0 -32
- package/test/test/assets/dash-multi-codec/video_144p_108k_h264.mp4 +0 -0
- package/test/test/assets/db-dump-v1.json +0 -1
- package/test/test/assets/db-dump-v2-broken.json +0 -1
- package/test/test/assets/db-dump-v2-clean.json +0 -1
- package/test/test/assets/db-dump-v3.json +0 -1
- package/test/test/assets/db-dump-v4-broken.json +0 -1
- package/test/test/assets/db-dump-v5.json +0 -1
- package/test/test/assets/empty_caption_video_init.mp4 +0 -0
- package/test/test/assets/empty_caption_video_segment.mp4 +0 -0
- package/test/test/assets/encrypted-sintel-audio-init.mp4 +0 -0
- package/test/test/assets/encrypted-sintel-audio-segment.mp4 +0 -0
- package/test/test/assets/encrypted-sintel-video-init.mp4 +0 -0
- package/test/test/assets/encrypted-sintel-video-segment.mp4 +0 -0
- package/test/test/assets/green-pixel.mp4 +0 -0
- package/test/test/assets/green-pixel.txt +0 -15
- package/test/test/assets/h265-cea-init.mp4 +0 -0
- package/test/test/assets/h265-cea-segment.mp4 +0 -0
- package/test/test/assets/hls-raw-aac/fileSequence0.aac +0 -0
- package/test/test/assets/hls-raw-aac/fileSequence1.aac +0 -0
- package/test/test/assets/hls-raw-aac/fileSequence2.aac +0 -0
- package/test/test/assets/hls-raw-aac/fileSequence3.aac +0 -0
- package/test/test/assets/hls-raw-aac/manifest.m3u8 +0 -4
- package/test/test/assets/hls-raw-aac/stream.m4a.m3u8 +0 -14
- package/test/test/assets/hls-raw-ac3/fileSequence0.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence1.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence2.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence3.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence4.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence5.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence6.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence7.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/prog_index.m3u8 +0 -31
- package/test/test/assets/hls-raw-ec3/fileSequence0.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence1.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence2.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence3.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence4.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence5.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence6.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence7.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/prog_index.m3u8 +0 -31
- package/test/test/assets/hls-raw-mp3/chunklist_w905519204.m3u8 +0 -13
- package/test/test/assets/hls-raw-mp3/media_w905519204_0.mp3 +0 -0
- package/test/test/assets/hls-raw-mp3/media_w905519204_1.mp3 +0 -0
- package/test/test/assets/hls-raw-mp3/media_w905519204_2.mp3 +0 -0
- package/test/test/assets/hls-raw-mp3/media_w905519204_3.mp3 +0 -0
- package/test/test/assets/hls-raw-mp3/playlist.m3u8 +0 -4
- package/test/test/assets/hls-ts-aac/playlist.m3u8 +0 -23
- package/test/test/assets/hls-ts-aac/segment_0.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_1.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_2.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_3.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_4.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_5.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_6.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_7.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0000.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0001.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0002.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0003.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0004.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0005.ts +0 -0
- package/test/test/assets/hls-ts-ac3/prog_index.m3u8 +0 -19
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0000.ts +0 -0
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0001.ts +0 -0
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0002.ts +0 -0
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0003.ts +0 -0
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0004.ts +0 -0
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0005.ts +0 -0
- package/test/test/assets/hls-ts-ec3/prog_index.m3u8 +0 -19
- package/test/test/assets/hls-ts-h264/fileSequence0.ts +0 -0
- package/test/test/assets/hls-ts-h264/fileSequence1.ts +0 -0
- package/test/test/assets/hls-ts-h264/fileSequence2.ts +0 -0
- package/test/test/assets/hls-ts-h264/fileSequence3.ts +0 -0
- package/test/test/assets/hls-ts-h264/fileSequence4.ts +0 -0
- package/test/test/assets/hls-ts-h264/fileSequence5.ts +0 -0
- package/test/test/assets/hls-ts-h264/prog_index.m3u8 +0 -25
- package/test/test/assets/hls-ts-h265/0.ts +0 -0
- package/test/test/assets/hls-ts-h265/hevc.m3u8 +0 -6
- package/test/test/assets/hls-ts-h265/index.m3u8 +0 -7
- package/test/test/assets/hls-ts-mp3/manifest.m3u8 +0 -13
- package/test/test/assets/hls-ts-mp3/media_w239891843_0.ts +0 -0
- package/test/test/assets/hls-ts-mp3/media_w239891843_1.ts +0 -0
- package/test/test/assets/hls-ts-mp3/media_w239891843_2.ts +0 -0
- package/test/test/assets/hls-ts-mp3/media_w239891843_3.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/chunk.m3u8 +0 -17
- package/test/test/assets/hls-ts-muxed-aac-h264/n_0_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/n_1_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/n_2_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/n_3_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/n_4_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/n_5_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/playlist.m3u8 +0 -4
- package/test/test/assets/hls-ts-muxed-aac-h265/0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h265/1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h265/media.m3u8 +0 -9
- package/test/test/assets/hls-ts-muxed-ac3-h264/media.m3u8 +0 -24
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00000.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00001.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00002.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00003.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00004.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00005.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0000.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0001.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0002.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0003.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/prog_index.m3u8 +0 -14
- package/test/test/assets/hls-ts-muxed-mp3-h264/index.m3u8 +0 -23
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-1-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-2-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-3-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-4-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-5-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-6-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-7-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-8-v1-a1.ts +0 -0
- package/test/test/assets/id3-metadata.aac +0 -0
- package/test/test/assets/id3-metadata.ts +0 -0
- package/test/test/assets/index-segment.mp4 +0 -0
- package/test/test/assets/index-segment.webm +0 -0
- package/test/test/assets/init-segment.webm +0 -0
- package/test/test/assets/large_file.mpd +0 -4930
- package/test/test/assets/multidrm-audio-init.mp4 +0 -0
- package/test/test/assets/multidrm-audio-segment.mp4 +0 -0
- package/test/test/assets/multidrm-video-init.mp4 +0 -0
- package/test/test/assets/multidrm-video-segment.mp4 +0 -0
- package/test/test/assets/multiple-trun-init.mp4 +0 -0
- package/test/test/assets/multiple-trun-segment.mp4 +0 -0
- package/test/test/assets/sintel-audio-init.mp4 +0 -0
- package/test/test/assets/sintel-audio-segment.mp4 +0 -0
- package/test/test/assets/sintel-video-init.mp4 +0 -0
- package/test/test/assets/sintel-video-segment.mp4 +0 -0
- package/test/test/assets/small.mp4 +0 -0
- package/test/test/assets/text-clip-alt.vtt +0 -63
- package/test/test/assets/text-clip.vtt +0 -63
- package/test/test/assets/thumbnails-sprites.vtt +0 -10
- package/test/test/assets/thumbnails.vtt +0 -10
- package/test/test/assets/ttml-init.mp4 +0 -0
- package/test/test/assets/ttml-segment-multiplemdat.mp4 +0 -0
- package/test/test/assets/ttml-segment.mp4 +0 -0
- package/test/test/assets/video.ts +0 -0
- package/test/test/assets/vtt-init.mp4 +0 -0
- package/test/test/assets/vtt-segment-multi-payload.mp4 +0 -0
- package/test/test/assets/vtt-segment-no-duration.mp4 +0 -0
- package/test/test/assets/vtt-segment-settings.mp4 +0 -0
- package/test/test/assets/vtt-segment.mp4 +0 -0
- package/test/test/boot.js +0 -495
- package/test/test/externs/filters.js +0 -44
- package/test/test/externs/fontfaceonload.js +0 -29
- package/test/test/externs/jasmine.js +0 -670
- package/test/test/externs/karma.js +0 -26
- package/test/test/externs/require.js +0 -21
- package/test/test/externs/sprintf.js +0 -18
- package/test/test/namespace.js +0 -10
- package/test/test/util/canned_idb.js +0 -379
- package/test/test/util/cea_utils.js +0 -60
- package/test/test/util/dash_parser_util.js +0 -329
- package/test/test/util/fake_ad.js +0 -321
- package/test/test/util/fake_ad_manager.js +0 -122
- package/test/test/util/fake_demo_main.js +0 -144
- package/test/test/util/fake_drm_engine.js +0 -103
- package/test/test/util/fake_media_source_engine.js +0 -464
- package/test/test/util/fake_networking_engine.js +0 -381
- package/test/test/util/fake_segment_prefetch.js +0 -84
- package/test/test/util/fake_text_displayer.js +0 -60
- package/test/test/util/id3_generator.js +0 -100
- package/test/test/util/indexeddb_utils.js +0 -124
- package/test/test/util/jasmine_fetch.js +0 -382
- package/test/test/util/layout_tests.js +0 -435
- package/test/test/util/loader.js +0 -88
- package/test/test/util/manifest_generator.js +0 -705
- package/test/test/util/manifest_parser_util.js +0 -101
- package/test/test/util/mss_parser_util.js +0 -119
- package/test/test/util/offline_utils.js +0 -105
- package/test/test/util/simple_fakes.js +0 -535
- package/test/test/util/stream_generator.js +0 -676
- package/test/test/util/streaming_engine_util.js +0 -506
- package/test/test/util/test_scheme.js +0 -778
- package/test/test/util/ttml_utils.js +0 -77
- package/test/test/util/ui_utils.js +0 -183
- package/test/test/util/util.js +0 -374
- package/test/test/util/waiter.js +0 -406
- package/test/text/cue_integration.js +0 -51
- package/test/text/lrc_text_parser_unit.js +0 -98
- package/test/text/mp4_ttml_parser_unit.js +0 -171
- package/test/text/mp4_vtt_parser_unit.js +0 -195
- package/test/text/sbv_text_parser_unit.js +0 -81
- package/test/text/simple_text_displayer_unit.js +0 -468
- package/test/text/srt_text_parser_unit.js +0 -163
- package/test/text/ssa_text_parser_unit.js +0 -382
- package/test/text/text_displayer_layout_unit.js +0 -323
- package/test/text/text_engine_unit.js +0 -500
- package/test/text/text_track_integration.js +0 -186
- package/test/text/ttml_text_parser_unit.js +0 -2176
- package/test/text/ui_text_displayer_unit.js +0 -608
- package/test/text/vtt_text_parser_unit.js +0 -1363
- package/test/text/web_vtt_generator_unit.js +0 -144
- package/test/text/web_vtt_layout_integration.js +0 -524
- package/test/transmuxer/transmuxer_engine_integration.js +0 -69
- package/test/transmuxer/transmuxer_integration.js +0 -443
- package/test/ui/ad_ui_unit.js +0 -369
- package/test/ui/localization_unit.js +0 -508
- package/test/ui/ui_customization_unit.js +0 -208
- package/test/ui/ui_integration.js +0 -669
- package/test/ui/ui_unit.js +0 -902
- package/test/util/abortable_operation_unit.js +0 -624
- package/test/util/array_utils_unit.js +0 -58
- package/test/util/buffer_utils_unit.js +0 -185
- package/test/util/cmcd_manager_unit.js +0 -440
- package/test/util/content_steering_manager_unit.js +0 -427
- package/test/util/data_view_reader_unit.js +0 -254
- package/test/util/ebml_parser_unit.js +0 -297
- package/test/util/event_manager_unit.js +0 -185
- package/test/util/fake_event_target_unit.js +0 -123
- package/test/util/id3_utils_unit.js +0 -168
- package/test/util/iterables_unit.js +0 -68
- package/test/util/language_utils_unit.js +0 -240
- package/test/util/manifest_parser_utils_unit.js +0 -55
- package/test/util/mime_utils_unit.js +0 -64
- package/test/util/mp4_box_parsers_unit.js +0 -246
- package/test/util/mp4_parser_unit.js +0 -373
- package/test/util/multi_map_unit.js +0 -94
- package/test/util/object_utils_unit.js +0 -79
- package/test/util/periods_unit.js +0 -1623
- package/test/util/pssh_unit.js +0 -226
- package/test/util/state_history_unit.js +0 -101
- package/test/util/stream_utils_unit.js +0 -1068
- package/test/util/string_utils_unit.js +0 -166
- package/test/util/text_parser_unit.js +0 -165
- package/test/util/ts_parser_unit.js +0 -77
- package/test/util/xml_utils_unit.js +0 -444
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
/*! @license
|
|
2
|
-
* Shaka Player
|
|
3
|
-
* Copyright 2016 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
shaka.test.TtmlUtils = class {
|
|
8
|
-
/**
|
|
9
|
-
* @param {!Array} expectedCues
|
|
10
|
-
* @param {!Array} actualCues
|
|
11
|
-
* @param {!Object} bodyProperties
|
|
12
|
-
* @param {Object=} divProperties
|
|
13
|
-
*/
|
|
14
|
-
static verifyHelper(expectedCues, actualCues, bodyProperties, divProperties) {
|
|
15
|
-
const mapExpected = (cue) => {
|
|
16
|
-
if (cue.region) {
|
|
17
|
-
cue.region = jasmine.objectContaining(cue.region);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
if (cue.nestedCues && (cue.nestedCues instanceof Array)) {
|
|
21
|
-
cue.nestedCues = cue.nestedCues.map(mapExpected);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
if (cue.isContainer == undefined) {
|
|
25
|
-
// If not specified to be true, check for isContainer to be false.
|
|
26
|
-
cue.isContainer = false;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
return jasmine.objectContaining(cue);
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* @param {!Object} properties
|
|
34
|
-
* @return {!shaka.text.Cue}
|
|
35
|
-
*/
|
|
36
|
-
const makeContainer = (properties) => {
|
|
37
|
-
const region = {
|
|
38
|
-
id: '',
|
|
39
|
-
viewportAnchorX: 0,
|
|
40
|
-
viewportAnchorY: 0,
|
|
41
|
-
regionAnchorX: 0,
|
|
42
|
-
regionAnchorY: 0,
|
|
43
|
-
width: 100,
|
|
44
|
-
height: 100,
|
|
45
|
-
widthUnits: shaka.text.CueRegion.units.PERCENTAGE,
|
|
46
|
-
heightUnits: shaka.text.CueRegion.units.PERCENTAGE,
|
|
47
|
-
viewportAnchorUnits: shaka.text.CueRegion.units.PERCENTAGE,
|
|
48
|
-
scroll: '',
|
|
49
|
-
};
|
|
50
|
-
const containerCue = /** @type {!shaka.text.Cue} */ ({
|
|
51
|
-
region,
|
|
52
|
-
nestedCues: jasmine.any(Object),
|
|
53
|
-
payload: '',
|
|
54
|
-
isContainer: true,
|
|
55
|
-
});
|
|
56
|
-
Object.assign(containerCue, properties);
|
|
57
|
-
return mapExpected(containerCue);
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
if (expectedCues.length == 0 && !divProperties) {
|
|
61
|
-
expect(actualCues.length).toBe(0);
|
|
62
|
-
} else {
|
|
63
|
-
// Body.
|
|
64
|
-
expect(actualCues.length).toBe(1);
|
|
65
|
-
const body = actualCues[0];
|
|
66
|
-
expect(body).toEqual(makeContainer(bodyProperties));
|
|
67
|
-
|
|
68
|
-
// Div.
|
|
69
|
-
expect(body.nestedCues.length).toBe(1);
|
|
70
|
-
const div = body.nestedCues[0];
|
|
71
|
-
expect(div).toEqual(makeContainer(divProperties || bodyProperties));
|
|
72
|
-
|
|
73
|
-
// Cues.
|
|
74
|
-
expect(div.nestedCues).toEqual(expectedCues.map(mapExpected));
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
};
|
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
/*! @license
|
|
2
|
-
* Shaka Player
|
|
3
|
-
* Copyright 2016 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
shaka.test.UiUtils = class {
|
|
8
|
-
/**
|
|
9
|
-
* @param {!HTMLElement} videoContainer
|
|
10
|
-
* @param {!HTMLMediaElement} video
|
|
11
|
-
* @param {!Object=} config
|
|
12
|
-
* @return {!Promise.<!shaka.ui.Overlay>}
|
|
13
|
-
*/
|
|
14
|
-
static async createUIThroughAPI(videoContainer, video, config) {
|
|
15
|
-
const player = new shaka.Player();
|
|
16
|
-
await player.attach(video);
|
|
17
|
-
// Create UI
|
|
18
|
-
config = config || {};
|
|
19
|
-
const ui = new shaka.ui.Overlay(player, videoContainer, video);
|
|
20
|
-
// TODO: generate externs automatically from @event types
|
|
21
|
-
// This event should be a shaka.Player.ErrorEvent
|
|
22
|
-
ui.getControls().addEventListener('error', (e) => fail(e['detail']));
|
|
23
|
-
ui.configure(config);
|
|
24
|
-
return ui;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* @param {!Array.<!Element>} containers
|
|
30
|
-
* @param {!Array.<!Element>} videos
|
|
31
|
-
* @suppress {visibility}
|
|
32
|
-
*/
|
|
33
|
-
static async createUIThroughDOMAutoSetup(containers, videos) {
|
|
34
|
-
const eventManager = new shaka.util.EventManager();
|
|
35
|
-
const waiter = new shaka.test.Waiter(eventManager);
|
|
36
|
-
for (const container of containers) {
|
|
37
|
-
container.setAttribute('data-shaka-player-container', '');
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
for (const video of videos) {
|
|
41
|
-
video.setAttribute('data-shaka-player', '');
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// Create the waiter first so we can catch a synchronous event.
|
|
45
|
-
const p =
|
|
46
|
-
waiter.failOnTimeout(false).waitForEvent(document, 'shaka-ui-loaded');
|
|
47
|
-
|
|
48
|
-
// Call UI's private method to scan the page for shaka
|
|
49
|
-
// elements and create the UI.
|
|
50
|
-
shaka.ui.Overlay.scanPageForShakaElements_();
|
|
51
|
-
await p;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* @param {!HTMLElement} parent
|
|
56
|
-
* @param {string} className
|
|
57
|
-
*/
|
|
58
|
-
static confirmElementFound(parent, className) {
|
|
59
|
-
const elements = parent.getElementsByClassName(className);
|
|
60
|
-
expect(elements.length).toBe(1);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* @param {!HTMLElement} parent
|
|
65
|
-
* @param {string} className
|
|
66
|
-
*/
|
|
67
|
-
static confirmElementMissing(parent, className) {
|
|
68
|
-
const elements = parent.getElementsByClassName(className);
|
|
69
|
-
expect(elements.length).toBe(0);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* @param {!HTMLElement} parent
|
|
74
|
-
* @param {string} className
|
|
75
|
-
* @return {!HTMLElement}
|
|
76
|
-
*/
|
|
77
|
-
static getElementByClassName(parent, className) {
|
|
78
|
-
const elements = parent.getElementsByClassName(className);
|
|
79
|
-
expect(elements.length).toBe(1);
|
|
80
|
-
return /** @type {!HTMLElement} */ (elements[0]);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* @param {!HTMLElement} element
|
|
85
|
-
*/
|
|
86
|
-
static confirmElementHidden(element) {
|
|
87
|
-
expect(element.classList.contains('shaka-hidden')).toBe(true);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* @param {!HTMLElement} element
|
|
93
|
-
*/
|
|
94
|
-
static confirmElementDisplayed(element) {
|
|
95
|
-
expect(element.classList.contains('shaka-hidden')).toBe(false);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Thoroughly clean up after UI-related tests.
|
|
100
|
-
*
|
|
101
|
-
* The UI tests can create lots of DOM elements (including videos) that are
|
|
102
|
-
* easy to lose track of. This is a universal cleanup system to avoid leaving
|
|
103
|
-
* anything behind.
|
|
104
|
-
*/
|
|
105
|
-
static async cleanupUI() {
|
|
106
|
-
// If we don't clean up the UI, these tests could pollute the environment
|
|
107
|
-
// for other tests that run later, causing failures in unrelated tests.
|
|
108
|
-
// This is causing particular issues on Tizen.
|
|
109
|
-
const containers =
|
|
110
|
-
document.querySelectorAll('[data-shaka-player-container]');
|
|
111
|
-
|
|
112
|
-
const destroys = [];
|
|
113
|
-
for (const container of containers) {
|
|
114
|
-
const ui = /** @type {shaka.ui.Overlay} */(container['ui']);
|
|
115
|
-
|
|
116
|
-
// Destroying the UI destroys the controls and player inside.
|
|
117
|
-
destroys.push(ui.destroy());
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
const allDestroyed = Promise.all(destroys);
|
|
121
|
-
// 10 seconds should be more than enough to tear down the UI.
|
|
122
|
-
// Adding this silent timeout fixes several tests that inconsistently hang
|
|
123
|
-
// during teardown and cause failures in afterEach() clauses.
|
|
124
|
-
await Promise.race([allDestroyed, shaka.test.Util.delay(10)]);
|
|
125
|
-
|
|
126
|
-
// Now remove all the containers from the DOM.
|
|
127
|
-
for (const container of containers) {
|
|
128
|
-
if (container.parentElement) {
|
|
129
|
-
container.parentElement.removeChild(container);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* @param {!HTMLLinkElement} cssLink
|
|
137
|
-
*/
|
|
138
|
-
static async setupCSS(cssLink) {
|
|
139
|
-
const head = document.head;
|
|
140
|
-
cssLink.type = 'text/css';
|
|
141
|
-
cssLink.rel = 'stylesheet/less';
|
|
142
|
-
cssLink.href ='/base/ui/controls.less';
|
|
143
|
-
head.appendChild(cssLink);
|
|
144
|
-
|
|
145
|
-
// LESS script has been added at the beginning of the test pass
|
|
146
|
-
// (in test/test/boot.js). This tells it that we've added a new
|
|
147
|
-
// stylesheet, so LESS can process it.
|
|
148
|
-
less.registerStylesheetsImmediately();
|
|
149
|
-
await less.refresh(/* reload= */ true,
|
|
150
|
-
/* modifyVars= */ false, /* clearFileCache= */ false);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* Simulates a native event (e.g. 'click') on the given element.
|
|
155
|
-
*
|
|
156
|
-
* @param {EventTarget} target
|
|
157
|
-
* @param {string} name
|
|
158
|
-
*/
|
|
159
|
-
static simulateEvent(target, name) {
|
|
160
|
-
const event = new MouseEvent(name, {'bubbles': true, 'cancelable': true});
|
|
161
|
-
target.dispatchEvent(event);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* Creates a muted, fixed size video element for testing.
|
|
166
|
-
*
|
|
167
|
-
* @return {!HTMLVideoElement}
|
|
168
|
-
*/
|
|
169
|
-
static createVideoElement() {
|
|
170
|
-
const video = /** @type {!HTMLVideoElement} */(document.createElement(
|
|
171
|
-
'video'));
|
|
172
|
-
|
|
173
|
-
// Tizen has issues with audio-only playbacks on muted video elements.
|
|
174
|
-
// Don't mute Tizen.
|
|
175
|
-
if (!shaka.util.Platform.isTizen()) {
|
|
176
|
-
video.muted = true;
|
|
177
|
-
}
|
|
178
|
-
video.width = 600;
|
|
179
|
-
video.height = 400;
|
|
180
|
-
|
|
181
|
-
return video;
|
|
182
|
-
}
|
|
183
|
-
};
|
package/test/test/util/util.js
DELETED
|
@@ -1,374 +0,0 @@
|
|
|
1
|
-
/*! @license
|
|
2
|
-
* Shaka Player
|
|
3
|
-
* Copyright 2016 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* @extends {Promise}
|
|
9
|
-
*/
|
|
10
|
-
shaka.test.StatusPromise = class {
|
|
11
|
-
/**
|
|
12
|
-
* @param {!Promise} p
|
|
13
|
-
* @return {!Object}
|
|
14
|
-
*/
|
|
15
|
-
constructor(p) {
|
|
16
|
-
/** @type {string} */
|
|
17
|
-
this.status;
|
|
18
|
-
|
|
19
|
-
// TODO: investigate using expectAsync() for this when possible.
|
|
20
|
-
const p2 = /** @type {!shaka.test.StatusPromise} */(p);
|
|
21
|
-
p2.status = 'pending';
|
|
22
|
-
p2.then(() => {
|
|
23
|
-
p2.status = 'resolved';
|
|
24
|
-
}, () => {
|
|
25
|
-
p2.status = 'rejected';
|
|
26
|
-
});
|
|
27
|
-
return p2;
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
shaka.test.Util = class {
|
|
32
|
-
/**
|
|
33
|
-
* Fakes an event loop. Each tick processes some number of instantaneous
|
|
34
|
-
* operations and advances the simulated clock forward by 1 second. Calls
|
|
35
|
-
* onTick just before each tick if it's specified.
|
|
36
|
-
*
|
|
37
|
-
* @param {number} duration The number of seconds of simulated time.
|
|
38
|
-
* @param {function(number)=} onTick
|
|
39
|
-
*/
|
|
40
|
-
static async fakeEventLoop(duration, onTick) {
|
|
41
|
-
// Run this synchronously:
|
|
42
|
-
for (let time = 0; time < duration; time++) {
|
|
43
|
-
// We shouldn't need more than 6 rounds.
|
|
44
|
-
for (let i = 0; i < 6; i++) {
|
|
45
|
-
jasmine.clock().tick(0);
|
|
46
|
-
await Promise.resolve(); // eslint-disable-line no-await-in-loop
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
if (onTick) {
|
|
50
|
-
await onTick(time); // eslint-disable-line no-await-in-loop
|
|
51
|
-
}
|
|
52
|
-
jasmine.clock().tick(1000);
|
|
53
|
-
// eslint-disable-next-line no-await-in-loop
|
|
54
|
-
await Promise.resolve();
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Returns a Promise which is resolved after the given delay.
|
|
60
|
-
*
|
|
61
|
-
* @param {number} seconds The delay in seconds.
|
|
62
|
-
* @param {function(function(), number)=} realSetTimeout
|
|
63
|
-
* @return {!Promise}
|
|
64
|
-
*/
|
|
65
|
-
static delay(seconds, realSetTimeout) {
|
|
66
|
-
return new Promise(((resolve, reject) => {
|
|
67
|
-
const timeout = realSetTimeout || setTimeout;
|
|
68
|
-
timeout(() => {
|
|
69
|
-
resolve();
|
|
70
|
-
}, seconds * 1000.0);
|
|
71
|
-
}));
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Returns a Promise which is resolved after a short delay. This should be
|
|
76
|
-
* used for cases where we need to wait for a setTimeout(0) or a Promise to
|
|
77
|
-
* be handled.
|
|
78
|
-
*
|
|
79
|
-
* @param {function(function(), number)=} realSetTimeout
|
|
80
|
-
* @return {!Promise}
|
|
81
|
-
*/
|
|
82
|
-
static shortDelay(realSetTimeout) {
|
|
83
|
-
const delay = 0.01;
|
|
84
|
-
return shaka.test.Util.delay(delay, realSetTimeout);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Creates a custom matcher object that matches a number that is close to the
|
|
89
|
-
* given value.
|
|
90
|
-
*
|
|
91
|
-
* @param {number} val
|
|
92
|
-
* @param {number=} maxDelta
|
|
93
|
-
* @return {number}
|
|
94
|
-
*/
|
|
95
|
-
static closeTo(val, maxDelta = 0.000001) {
|
|
96
|
-
const E = /** @type {number} */(maxDelta);
|
|
97
|
-
return /** @type {number} */(/** @type {?} */({
|
|
98
|
-
asymmetricMatch: (other) => other >= val - E && other <= val + E,
|
|
99
|
-
jasmineToString: () => '<closeTo: ' + val + '>',
|
|
100
|
-
}));
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* @param {!shaka.util.Error} error
|
|
105
|
-
* @return {jasmine.ObjectContainingType}
|
|
106
|
-
*/
|
|
107
|
-
static jasmineError(error) {
|
|
108
|
-
// NOTE: Safari will add extra properties to any thrown object, and some of
|
|
109
|
-
// the properties we compute in debug builds are unhelpful and introduce
|
|
110
|
-
// inconsistency in tests. Therefore we only capture the critical fields
|
|
111
|
-
// below.
|
|
112
|
-
const {severity, category, code, data} = error;
|
|
113
|
-
return jasmine.objectContaining({severity, category, code, data});
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* @param {*} actual
|
|
118
|
-
* @param {!shaka.util.Error} expected
|
|
119
|
-
*/
|
|
120
|
-
static expectToEqualError(actual, expected) {
|
|
121
|
-
expect(actual).toEqual(shaka.test.Util.jasmineError(expected));
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* @param {?} actual
|
|
126
|
-
* @param {!Element} expected
|
|
127
|
-
* @return {!Object} result
|
|
128
|
-
* @private
|
|
129
|
-
*/
|
|
130
|
-
static expectToEqualElementCompare_(actual, expected) {
|
|
131
|
-
const diff =
|
|
132
|
-
shaka.test.Util.expectToEqualElementRecursive_(actual, expected);
|
|
133
|
-
const result = {};
|
|
134
|
-
result.pass = diff == null;
|
|
135
|
-
if (result.pass) {
|
|
136
|
-
result.message = 'Expected ' + actual.innerHTML + ' not to match ';
|
|
137
|
-
result.message += expected.innerHTML + '.';
|
|
138
|
-
} else {
|
|
139
|
-
result.message = 'Expected ' + actual.innerHTML + ' to match ';
|
|
140
|
-
result.message += expected.innerHTML + '. ' + diff;
|
|
141
|
-
}
|
|
142
|
-
return result;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* @param {?} actual
|
|
147
|
-
* @param {!Node} expected
|
|
148
|
-
* @return {?string} failureReason
|
|
149
|
-
* @private
|
|
150
|
-
*/
|
|
151
|
-
static expectToEqualElementRecursive_(actual, expected) {
|
|
152
|
-
const prospectiveDiff = 'The difference was in ' +
|
|
153
|
-
(actual.outerHTML || actual.textContent) + ' vs ' +
|
|
154
|
-
(expected['outerHTML'] || expected.textContent) + ': ';
|
|
155
|
-
const getAttr = (obj, attr) => {
|
|
156
|
-
if (attr.namespaceURI) {
|
|
157
|
-
return shaka.util.XmlUtils.getAttributeNS(
|
|
158
|
-
obj, attr.namespaceURI, attr.localName);
|
|
159
|
-
} else {
|
|
160
|
-
return obj.getAttribute(attr.localName);
|
|
161
|
-
}
|
|
162
|
-
};
|
|
163
|
-
|
|
164
|
-
if (!(actual instanceof Element) && !(expected instanceof Element)) {
|
|
165
|
-
// Compare them as nodes.
|
|
166
|
-
if (actual.textContent != expected.textContent) {
|
|
167
|
-
return prospectiveDiff + 'Nodes are different.';
|
|
168
|
-
}
|
|
169
|
-
} else if (!(actual instanceof Element) || !(expected instanceof Element)) {
|
|
170
|
-
return prospectiveDiff + 'One is element, one isn\'t.';
|
|
171
|
-
} else {
|
|
172
|
-
// Compare them as elements.
|
|
173
|
-
if (actual.tagName != expected.tagName) {
|
|
174
|
-
return prospectiveDiff + 'Different tagName.';
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
if (actual.attributes.length != expected.attributes.length) {
|
|
178
|
-
return prospectiveDiff + 'Different attribute list length.';
|
|
179
|
-
}
|
|
180
|
-
for (const attr of Array.from(actual.attributes)) {
|
|
181
|
-
const valueA = getAttr(actual, attr);
|
|
182
|
-
const valueB = getAttr(expected, attr);
|
|
183
|
-
if (valueA != valueB) {
|
|
184
|
-
const name = (attr.prefix ? attr.prefix + ':' : '') + attr.localName;
|
|
185
|
-
return `${prospectiveDiff} Attribute ${name} was different ` +
|
|
186
|
-
`(${valueA} vs ${valueB})`;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
if (actual.childNodes.length != expected.childNodes.length) {
|
|
191
|
-
return prospectiveDiff + 'Different child node list length.';
|
|
192
|
-
}
|
|
193
|
-
for (let i = 0; i < actual.childNodes.length; i++) {
|
|
194
|
-
const aNode = actual.childNodes[i];
|
|
195
|
-
const eNode = expected.childNodes[i];
|
|
196
|
-
const diff =
|
|
197
|
-
shaka.test.Util.expectToEqualElementRecursive_(aNode, eNode);
|
|
198
|
-
if (diff) {
|
|
199
|
-
return diff;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
return null;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
/**
|
|
208
|
-
* Custom comparer for segment references.
|
|
209
|
-
* @param {*} first
|
|
210
|
-
* @param {*} second
|
|
211
|
-
* @return {boolean|undefined}
|
|
212
|
-
*/
|
|
213
|
-
static compareReferences(first, second) {
|
|
214
|
-
const isSegment = first instanceof shaka.media.SegmentReference &&
|
|
215
|
-
second instanceof shaka.media.SegmentReference;
|
|
216
|
-
const isInit = first instanceof shaka.media.InitSegmentReference &&
|
|
217
|
-
second instanceof shaka.media.InitSegmentReference;
|
|
218
|
-
if (isSegment || isInit) {
|
|
219
|
-
const firstRef = /** @type {shaka.media.AnySegmentReference} */(first);
|
|
220
|
-
const secondRef = /** @type {shaka.media.AnySegmentReference} */(second);
|
|
221
|
-
const a = firstRef.getUris();
|
|
222
|
-
const b = secondRef.getUris();
|
|
223
|
-
if (typeof a !== 'object' || typeof b !== 'object' ||
|
|
224
|
-
typeof a.length != 'number' || typeof b.length !== 'number') {
|
|
225
|
-
return false;
|
|
226
|
-
}
|
|
227
|
-
if (a.length != b.length ||
|
|
228
|
-
!a.every((x, i) => { return x == b[i]; })) {
|
|
229
|
-
return false;
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
// Make shallow copies of each, without their getUris fields.
|
|
233
|
-
const trimmedFirst = Object.assign({}, /** @type {Object} */(firstRef));
|
|
234
|
-
delete trimmedFirst['getUris'];
|
|
235
|
-
delete trimmedFirst['getUrisInner'];
|
|
236
|
-
const trimmedSecond = Object.assign({}, /** @type {Object} */(secondRef));
|
|
237
|
-
delete trimmedSecond['getUris'];
|
|
238
|
-
delete trimmedSecond['getUrisInner'];
|
|
239
|
-
|
|
240
|
-
// Compare those using Jasmine's utility, which will compare the fields of
|
|
241
|
-
// an object and the items of an array.
|
|
242
|
-
const customEqualityTesters = [
|
|
243
|
-
shaka.test.Util.compareReferences,
|
|
244
|
-
];
|
|
245
|
-
return jasmine.matchersUtil.equals(
|
|
246
|
-
trimmedFirst, trimmedSecond, customEqualityTesters);
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
return undefined;
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
/**
|
|
253
|
-
* Fetches the resource at the given URI.
|
|
254
|
-
*
|
|
255
|
-
* @param {string} uri
|
|
256
|
-
* @return {!Promise.<!ArrayBuffer>}
|
|
257
|
-
*/
|
|
258
|
-
static async fetch(uri) {
|
|
259
|
-
const response = await fetch(uri);
|
|
260
|
-
if (!response.ok) {
|
|
261
|
-
throw new Error('shaka.test.Util.fetch failed: ' + uri);
|
|
262
|
-
}
|
|
263
|
-
return response.arrayBuffer();
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
/**
|
|
267
|
-
* Accepts a mock object (i.e. a simple JavaScript object composed of jasmine
|
|
268
|
-
* spies) and makes it strict. This means that every spy in the given object
|
|
269
|
-
* will be made to throw an exception by default.
|
|
270
|
-
* @param {!Object} obj
|
|
271
|
-
*/
|
|
272
|
-
static makeMockObjectStrict(obj) {
|
|
273
|
-
for (const name in obj) {
|
|
274
|
-
obj[name].and.throwError(new Error(name));
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
/**
|
|
279
|
-
* @param {!Function} func
|
|
280
|
-
* @return {!jasmine.Spy}
|
|
281
|
-
*/
|
|
282
|
-
static funcSpy(func) {
|
|
283
|
-
return /** @type {!jasmine.Spy} */(func);
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
/**
|
|
287
|
-
* @param {!jasmine.Spy} spy
|
|
288
|
-
* @return {!Function}
|
|
289
|
-
*/
|
|
290
|
-
static spyFunc(spy) {
|
|
291
|
-
return spy;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
/**
|
|
295
|
-
* @param {!jasmine.Spy} spy
|
|
296
|
-
* @param {...*} varArgs
|
|
297
|
-
* @return {*}
|
|
298
|
-
*/
|
|
299
|
-
static invokeSpy(spy, ...varArgs) {
|
|
300
|
-
// TODO: There should be a way to alter the externs for jasmine.Spy so that
|
|
301
|
-
// this utility is not needed.
|
|
302
|
-
// Why isn't there something like ICallable in Closure?
|
|
303
|
-
// https://github.com/shaka-project/closure-compiler/issues/946
|
|
304
|
-
// Why isn't it enough that jasmine.Spy extends Function?
|
|
305
|
-
// https://github.com/shaka-project/closure-compiler/issues/1422
|
|
306
|
-
return /** @type {Function} */(spy)(...varArgs);
|
|
307
|
-
}
|
|
308
|
-
};
|
|
309
|
-
|
|
310
|
-
/**
|
|
311
|
-
* @const
|
|
312
|
-
* @private
|
|
313
|
-
*/
|
|
314
|
-
shaka.test.Util.customMatchers_ = {
|
|
315
|
-
// Custom matcher for Element objects.
|
|
316
|
-
toEqualElement: (util) => {
|
|
317
|
-
return {
|
|
318
|
-
compare: shaka.test.Util.expectToEqualElementCompare_,
|
|
319
|
-
};
|
|
320
|
-
},
|
|
321
|
-
// Custom matcher for working with spies.
|
|
322
|
-
toHaveBeenCalledOnceMore: (util) => {
|
|
323
|
-
return {
|
|
324
|
-
compare: (actual, expected) => {
|
|
325
|
-
const callCount = actual.calls.count();
|
|
326
|
-
|
|
327
|
-
const result = {};
|
|
328
|
-
|
|
329
|
-
if (callCount != 1) {
|
|
330
|
-
result.pass = false;
|
|
331
|
-
result.message = 'Expected to be called once, not ' + callCount;
|
|
332
|
-
} else {
|
|
333
|
-
result.pass = true;
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
actual.calls.reset();
|
|
337
|
-
|
|
338
|
-
return result;
|
|
339
|
-
},
|
|
340
|
-
};
|
|
341
|
-
},
|
|
342
|
-
toHaveBeenCalledOnceMoreWith: (util) => {
|
|
343
|
-
return {
|
|
344
|
-
compare: (actual, expected) => {
|
|
345
|
-
const callCount = actual.calls.count();
|
|
346
|
-
const callArgs = callCount > 0 ?
|
|
347
|
-
actual.calls.mostRecent().args :
|
|
348
|
-
[];
|
|
349
|
-
|
|
350
|
-
const result = {};
|
|
351
|
-
|
|
352
|
-
if (callCount != 1) {
|
|
353
|
-
result.pass = false;
|
|
354
|
-
result.message = 'Expected to be called once, not ' + callCount;
|
|
355
|
-
} else if (!util.equals(callArgs, expected)) {
|
|
356
|
-
result.pass = false;
|
|
357
|
-
result.message =
|
|
358
|
-
'Expected to be called with ' + expected + ' not ' + callArgs;
|
|
359
|
-
} else {
|
|
360
|
-
result.pass = true;
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
actual.calls.reset();
|
|
364
|
-
|
|
365
|
-
return result;
|
|
366
|
-
},
|
|
367
|
-
};
|
|
368
|
-
},
|
|
369
|
-
};
|
|
370
|
-
|
|
371
|
-
beforeEach(() => {
|
|
372
|
-
jasmine.addCustomEqualityTester(shaka.test.Util.compareReferences);
|
|
373
|
-
jasmine.addMatchers(shaka.test.Util.customMatchers_);
|
|
374
|
-
});
|