shaka-player 4.6.3 → 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 +13 -9
- package/dist/locales.js +33 -33
- package/dist/shaka-player.compiled.d.ts +47 -4
- package/dist/shaka-player.compiled.debug.d.ts +47 -4
- package/dist/shaka-player.compiled.debug.externs.js +50 -2
- package/dist/shaka-player.compiled.debug.js +408 -376
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +50 -2
- package/dist/shaka-player.compiled.js +1134 -1118
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +69 -5
- package/dist/shaka-player.ui.debug.d.ts +69 -5
- package/dist/shaka-player.ui.debug.externs.js +82 -2
- package/dist/shaka-player.ui.debug.js +457 -420
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +82 -2
- package/dist/shaka-player.ui.js +1305 -1289
- 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/ads/client_side_ad_manager.js +4 -0
- package/lib/ads/media_tailor_ad_manager.js +5 -0
- package/lib/ads/server_side_ad_manager.js +4 -0
- 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/hls/hls_parser.js +17 -5
- package/lib/media/adaptation_set_criteria.js +76 -10
- package/lib/media/drm_engine.js +0 -3
- package/lib/media/media_source_engine.js +42 -18
- package/lib/media/segment_reference.js +12 -0
- package/lib/media/streaming_engine.js +58 -5
- package/lib/media/video_wrapper.js +4 -3
- package/lib/player.js +95 -11
- package/lib/text/simple_text_displayer.js +8 -7
- package/lib/text/text_utils.js +39 -13
- package/lib/text/ui_text_displayer.js +20 -11
- package/lib/text/web_vtt_generator.js +1 -1
- 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 -5764
- 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 -511
- package/demo/common/assets.js +0 -1635
- 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 -230
- 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 -2778
- 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 -434
- 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,488 +0,0 @@
|
|
|
1
|
-
/*! @license
|
|
2
|
-
* Shaka Player
|
|
3
|
-
* Copyright 2016 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
// The receiver is only meant to run on the Chromecast, so we have the
|
|
8
|
-
// ability to use modern APIs there that may not be available on all of the
|
|
9
|
-
// browsers our library supports. Because of this, CastReceiver tests will
|
|
10
|
-
// only be run on Chrome and Chromecast.
|
|
11
|
-
/** @return {boolean} */
|
|
12
|
-
const castReceiverIntegrationSupport =
|
|
13
|
-
() => shaka.util.Platform.isChrome() || shaka.util.Platform.isChromecast();
|
|
14
|
-
filterDescribe('CastReceiver', castReceiverIntegrationSupport, () => {
|
|
15
|
-
const CastReceiver = shaka.cast.CastReceiver;
|
|
16
|
-
const CastUtils = shaka.cast.CastUtils;
|
|
17
|
-
|
|
18
|
-
const originalCast = window['cast'];
|
|
19
|
-
const originalUserAgent = navigator.userAgent;
|
|
20
|
-
|
|
21
|
-
const eventManager = new shaka.util.EventManager();
|
|
22
|
-
|
|
23
|
-
let mockReceiverManager;
|
|
24
|
-
let mockReceiverApi;
|
|
25
|
-
let mockShakaMessageBus;
|
|
26
|
-
let mockGenericMessageBus;
|
|
27
|
-
|
|
28
|
-
/** @type {shaka.cast.CastReceiver} */
|
|
29
|
-
let receiver;
|
|
30
|
-
/** @type {shaka.Player} */
|
|
31
|
-
let player;
|
|
32
|
-
/** @type {HTMLVideoElement} */
|
|
33
|
-
let video;
|
|
34
|
-
|
|
35
|
-
/** @type {shaka.util.PublicPromise} */
|
|
36
|
-
let messageWaitPromise;
|
|
37
|
-
/** @type {Array.<string>} */
|
|
38
|
-
let pendingMessages = null;
|
|
39
|
-
|
|
40
|
-
/** @type {!Array.<function()>} */
|
|
41
|
-
let toRestore;
|
|
42
|
-
let pendingWaitWrapperCalls = 0;
|
|
43
|
-
|
|
44
|
-
/** @type {!Object.<string, ?shaka.extern.DrmSupportType>} */
|
|
45
|
-
let support = {};
|
|
46
|
-
|
|
47
|
-
let fakeInitState;
|
|
48
|
-
|
|
49
|
-
beforeAll(async () => {
|
|
50
|
-
// In uncompiled mode, there is a UA check for Chromecast in order to make
|
|
51
|
-
// manual testing easier. For these automated tests, we want to act as if
|
|
52
|
-
// we are running on the Chromecast, even in Chrome.
|
|
53
|
-
// Since we can't write to window.navigator or navigator.userAgent, we use
|
|
54
|
-
// Object.defineProperty.
|
|
55
|
-
Object.defineProperty(window['navigator'],
|
|
56
|
-
'userAgent', {value: 'CrKey', configurable: true});
|
|
57
|
-
|
|
58
|
-
shaka.net.NetworkingEngine.registerScheme(
|
|
59
|
-
'test', shaka.test.TestScheme.plugin);
|
|
60
|
-
shaka.media.ManifestParser.registerParserByMime(
|
|
61
|
-
'application/x-test-manifest',
|
|
62
|
-
shaka.test.TestScheme.ManifestParser.factory);
|
|
63
|
-
|
|
64
|
-
await shaka.test.TestScheme.createManifests(shaka, '');
|
|
65
|
-
support = await shaka.media.DrmEngine.probeSupport();
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
beforeEach(async () => {
|
|
69
|
-
mockReceiverApi = createMockReceiverApi();
|
|
70
|
-
|
|
71
|
-
const mockCanDisplayType = jasmine.createSpy('canDisplayType');
|
|
72
|
-
mockCanDisplayType.and.returnValue(true);
|
|
73
|
-
|
|
74
|
-
// We're using quotes to access window.cast because the compiler
|
|
75
|
-
// knows about lots of Cast-specific APIs we aren't mocking. We
|
|
76
|
-
// don't need this mock strictly type-checked.
|
|
77
|
-
window['cast'] = {
|
|
78
|
-
receiver: mockReceiverApi,
|
|
79
|
-
__platform__: {canDisplayType: mockCanDisplayType},
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
mockReceiverManager = createMockReceiverManager();
|
|
83
|
-
mockShakaMessageBus = createMockMessageBus();
|
|
84
|
-
mockGenericMessageBus = createMockMessageBus();
|
|
85
|
-
|
|
86
|
-
video = shaka.test.UiUtils.createVideoElement();
|
|
87
|
-
|
|
88
|
-
document.body.appendChild(video);
|
|
89
|
-
|
|
90
|
-
player = new shaka.Player();
|
|
91
|
-
await player.attach(video);
|
|
92
|
-
receiver = new CastReceiver(video, player);
|
|
93
|
-
|
|
94
|
-
toRestore = [];
|
|
95
|
-
pendingWaitWrapperCalls = 0;
|
|
96
|
-
|
|
97
|
-
messageWaitPromise = null;
|
|
98
|
-
pendingMessages = null;
|
|
99
|
-
|
|
100
|
-
fakeInitState = {
|
|
101
|
-
player: {
|
|
102
|
-
configure: {},
|
|
103
|
-
},
|
|
104
|
-
playerAfterLoad: {
|
|
105
|
-
setTextTrackVisibility: true,
|
|
106
|
-
},
|
|
107
|
-
video: {
|
|
108
|
-
loop: true,
|
|
109
|
-
playbackRate: 5,
|
|
110
|
-
},
|
|
111
|
-
manifest: 'test:sintel_no_text',
|
|
112
|
-
startTime: 0,
|
|
113
|
-
};
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
afterEach(async () => {
|
|
117
|
-
for (const restoreCallback of toRestore) {
|
|
118
|
-
restoreCallback();
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
await receiver.destroy();
|
|
122
|
-
document.body.removeChild(video);
|
|
123
|
-
|
|
124
|
-
player = null;
|
|
125
|
-
video = null;
|
|
126
|
-
receiver = null;
|
|
127
|
-
|
|
128
|
-
if (messageWaitPromise) {
|
|
129
|
-
messageWaitPromise.resolve([]);
|
|
130
|
-
}
|
|
131
|
-
messageWaitPromise = null;
|
|
132
|
-
pendingMessages = null;
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
afterAll(() => {
|
|
136
|
-
if (originalUserAgent) {
|
|
137
|
-
window['cast'] = originalCast;
|
|
138
|
-
Object.defineProperty(window['navigator'],
|
|
139
|
-
'userAgent', {value: originalUserAgent});
|
|
140
|
-
}
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
describe('state changed event', () => {
|
|
144
|
-
it('does not trigger a stack overflow', async () => {
|
|
145
|
-
const p = waitForLoadedData();
|
|
146
|
-
|
|
147
|
-
// We had a regression in which polling attributes eventually triggered a
|
|
148
|
-
// stack overflow because of a state change event that fired every time
|
|
149
|
-
// we checked the state. The error itself got swallowed and hidden
|
|
150
|
-
// inside CastReceiver, but would cause tests to disconnect in some
|
|
151
|
-
// environments (consistently in GitHub Actions VMs, inconsistently
|
|
152
|
-
// elsewhere).
|
|
153
|
-
//
|
|
154
|
-
// Testing for this is subtle: if we try to catch the error, it will be
|
|
155
|
-
// caught at a point when the stack has already or is about to overflow.
|
|
156
|
-
// Then if we call "fail", Jasmine will grow the stack further,
|
|
157
|
-
// triggering *another* overflow inside of fail(), causing our test to
|
|
158
|
-
// *pass*. So we need to fail fast. The best way I have found is to
|
|
159
|
-
// catch the very first recursion of pollAttributes_, long before we
|
|
160
|
-
// overflow, fail, then return early to avoid the actual recursion.
|
|
161
|
-
const original = /** @type {?} */(receiver).pollAttributes_;
|
|
162
|
-
let numRecursions = 0;
|
|
163
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
164
|
-
/** @type {?} */(receiver).pollAttributes_ = function() {
|
|
165
|
-
try {
|
|
166
|
-
if (numRecursions > 0) {
|
|
167
|
-
fail('Found recursion in pollAttributes_!');
|
|
168
|
-
return undefined;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
numRecursions++;
|
|
172
|
-
return original.apply(receiver, arguments);
|
|
173
|
-
} finally {
|
|
174
|
-
numRecursions--;
|
|
175
|
-
}
|
|
176
|
-
};
|
|
177
|
-
|
|
178
|
-
// Start the process of loading by sending a fake init message.
|
|
179
|
-
fakeConnectedSenders(1);
|
|
180
|
-
fakeIncomingMessage({
|
|
181
|
-
type: 'init',
|
|
182
|
-
initState: fakeInitState,
|
|
183
|
-
appData: {},
|
|
184
|
-
}, mockShakaMessageBus);
|
|
185
|
-
|
|
186
|
-
await p;
|
|
187
|
-
});
|
|
188
|
-
});
|
|
189
|
-
|
|
190
|
-
describe('without drm', () => {
|
|
191
|
-
it('sends reasonably-sized updates', async () => {
|
|
192
|
-
// Use an unencrypted asset.
|
|
193
|
-
fakeInitState.manifest = 'test:sintel';
|
|
194
|
-
|
|
195
|
-
const p = waitForLoadedData();
|
|
196
|
-
|
|
197
|
-
// Start the process of loading by sending a fake init message.
|
|
198
|
-
fakeConnectedSenders(1);
|
|
199
|
-
fakeIncomingMessage({
|
|
200
|
-
type: 'init',
|
|
201
|
-
initState: fakeInitState,
|
|
202
|
-
appData: {},
|
|
203
|
-
}, mockShakaMessageBus);
|
|
204
|
-
|
|
205
|
-
await p;
|
|
206
|
-
// Wait for an update message.
|
|
207
|
-
const messages = await waitForUpdateMessages();
|
|
208
|
-
for (const message of messages) {
|
|
209
|
-
// Check that the update message is of a reasonable size. From previous
|
|
210
|
-
// testing we found that the socket would silently reject data that got
|
|
211
|
-
// too big. 6KB is safely below the limit.
|
|
212
|
-
expect(message.length).toBeLessThan(6000);
|
|
213
|
-
}
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
it('has reasonable average message size', async () => {
|
|
217
|
-
// Use an unencrypted asset.
|
|
218
|
-
fakeInitState.manifest = 'test:sintel';
|
|
219
|
-
|
|
220
|
-
const p = waitForLoadedData();
|
|
221
|
-
|
|
222
|
-
// Start the process of loading by sending a fake init message.
|
|
223
|
-
fakeConnectedSenders(1);
|
|
224
|
-
fakeIncomingMessage({
|
|
225
|
-
type: 'init',
|
|
226
|
-
initState: fakeInitState,
|
|
227
|
-
appData: {},
|
|
228
|
-
}, mockShakaMessageBus);
|
|
229
|
-
|
|
230
|
-
await p;
|
|
231
|
-
|
|
232
|
-
// Collect messages over 50 update cycles, and average their length.
|
|
233
|
-
// Not all properties are passed along on every update message, so
|
|
234
|
-
// the average length is expected to be lower than the length of the first
|
|
235
|
-
// update message.
|
|
236
|
-
let totalLength = 0;
|
|
237
|
-
let totalMessages = 0;
|
|
238
|
-
for (let i = 0; i < 50; i++) {
|
|
239
|
-
// eslint-disable-next-line no-await-in-loop
|
|
240
|
-
const messages = await waitForUpdateMessages();
|
|
241
|
-
for (const message of messages) {
|
|
242
|
-
totalLength += message.length;
|
|
243
|
-
totalMessages += 1;
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
expect(totalLength / totalMessages).toBeLessThan(2000);
|
|
247
|
-
});
|
|
248
|
-
});
|
|
249
|
-
|
|
250
|
-
filterDescribe('with drm', () => support['com.widevine.alpha'], () => {
|
|
251
|
-
drmIt('sends reasonably-sized updates', async () => {
|
|
252
|
-
// Use an encrypted asset, to make sure DRM info doesn't balloon the size.
|
|
253
|
-
fakeInitState.manifest = 'test:sintel-enc';
|
|
254
|
-
fakeInitState.player.configure['drm'] = {
|
|
255
|
-
'servers': {
|
|
256
|
-
'com.widevine.alpha': 'https://cwip-shaka-proxy.appspot.com/no_auth',
|
|
257
|
-
},
|
|
258
|
-
};
|
|
259
|
-
|
|
260
|
-
const p = waitForLoadedData();
|
|
261
|
-
|
|
262
|
-
// Start the process of loading by sending a fake init message.
|
|
263
|
-
fakeConnectedSenders(1);
|
|
264
|
-
fakeIncomingMessage({
|
|
265
|
-
type: 'init',
|
|
266
|
-
initState: fakeInitState,
|
|
267
|
-
appData: {},
|
|
268
|
-
}, mockShakaMessageBus);
|
|
269
|
-
|
|
270
|
-
await p;
|
|
271
|
-
// Wait for an update message.
|
|
272
|
-
const messages = await waitForUpdateMessages();
|
|
273
|
-
for (const message of messages) {
|
|
274
|
-
// Check that the update message is of a reasonable size. From previous
|
|
275
|
-
// testing we found that the socket would silently reject data that got
|
|
276
|
-
// too big. 6KB is safely below the limit.
|
|
277
|
-
expect(message.length).toBeLessThan(6000);
|
|
278
|
-
}
|
|
279
|
-
});
|
|
280
|
-
|
|
281
|
-
drmIt('has reasonable average message size', async () => {
|
|
282
|
-
// Use an encrypted asset, to make sure DRM info doesn't balloon the size.
|
|
283
|
-
fakeInitState.manifest = 'test:sintel-enc';
|
|
284
|
-
fakeInitState.player.configure['drm'] = {
|
|
285
|
-
'servers': {
|
|
286
|
-
'com.widevine.alpha': 'https://cwip-shaka-proxy.appspot.com/no_auth',
|
|
287
|
-
},
|
|
288
|
-
};
|
|
289
|
-
|
|
290
|
-
const p = waitForLoadedData();
|
|
291
|
-
|
|
292
|
-
// Start the process of loading by sending a fake init message.
|
|
293
|
-
fakeConnectedSenders(1);
|
|
294
|
-
fakeIncomingMessage({
|
|
295
|
-
type: 'init',
|
|
296
|
-
initState: fakeInitState,
|
|
297
|
-
appData: {},
|
|
298
|
-
}, mockShakaMessageBus);
|
|
299
|
-
|
|
300
|
-
await p;
|
|
301
|
-
|
|
302
|
-
// Collect messages over 50 update cycles, and average their length.
|
|
303
|
-
// Not all properties are passed along on every update message, so
|
|
304
|
-
// the average length is expected to be lower than the length of the first
|
|
305
|
-
// update message.
|
|
306
|
-
let totalLength = 0;
|
|
307
|
-
let totalMessages = 0;
|
|
308
|
-
for (let i = 0; i < 50; i++) {
|
|
309
|
-
// eslint-disable-next-line no-await-in-loop
|
|
310
|
-
const messages = await waitForUpdateMessages();
|
|
311
|
-
for (const message of messages) {
|
|
312
|
-
totalLength += message.length;
|
|
313
|
-
totalMessages += 1;
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
expect(totalLength / totalMessages).toBeLessThan(2000);
|
|
317
|
-
});
|
|
318
|
-
});
|
|
319
|
-
|
|
320
|
-
it('sends update messages every stage of loading', async () => {
|
|
321
|
-
// Add wrappers to various methods along player.load to make sure that,
|
|
322
|
-
// at each stage, the cast receiver can form an update message without
|
|
323
|
-
// causing an error.
|
|
324
|
-
waitForUpdateMessageWrapper(
|
|
325
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
326
|
-
shaka.test.TestScheme.ManifestParser.prototype, 'ManifestParser',
|
|
327
|
-
'start');
|
|
328
|
-
waitForUpdateMessageWrapper(
|
|
329
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
330
|
-
shaka.media.DrmEngine.prototype, 'DrmEngine', 'initForPlayback');
|
|
331
|
-
waitForUpdateMessageWrapper(
|
|
332
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
333
|
-
shaka.media.DrmEngine.prototype, 'DrmEngine', 'attach');
|
|
334
|
-
waitForUpdateMessageWrapper(
|
|
335
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
336
|
-
shaka.media.StreamingEngine.prototype, 'StreamingEngine', 'start');
|
|
337
|
-
|
|
338
|
-
const p = waitForLoadedData();
|
|
339
|
-
|
|
340
|
-
// Start the process of loading by sending a fake init message.
|
|
341
|
-
fakeConnectedSenders(1);
|
|
342
|
-
fakeIncomingMessage({
|
|
343
|
-
type: 'init',
|
|
344
|
-
initState: fakeInitState,
|
|
345
|
-
appData: {},
|
|
346
|
-
}, mockShakaMessageBus);
|
|
347
|
-
|
|
348
|
-
await p;
|
|
349
|
-
// Make sure that each of the methods covered by
|
|
350
|
-
// waitForUpdateMessageWrapper is called by this point.
|
|
351
|
-
expect(pendingWaitWrapperCalls).toBe(0);
|
|
352
|
-
|
|
353
|
-
// Wait for a final update message before proceeding.
|
|
354
|
-
await waitForUpdateMessages();
|
|
355
|
-
});
|
|
356
|
-
|
|
357
|
-
/**
|
|
358
|
-
* Creates a wrapper around a method on a given prototype, which makes it
|
|
359
|
-
* wait on waitForUpdateMessages before returning, and registers that wrapper
|
|
360
|
-
* to be uninstalled afterwards.
|
|
361
|
-
* The replaced method is expected to be a method that returns a promise.
|
|
362
|
-
* @param {!Object} prototype
|
|
363
|
-
* @param {string} name
|
|
364
|
-
* @param {string} methodName
|
|
365
|
-
*/
|
|
366
|
-
function waitForUpdateMessageWrapper(prototype, name, methodName) {
|
|
367
|
-
pendingWaitWrapperCalls += 1;
|
|
368
|
-
const original = prototype[methodName];
|
|
369
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
370
|
-
prototype[methodName] = /** @this {Object} @return {*} */ async function() {
|
|
371
|
-
pendingWaitWrapperCalls -= 1;
|
|
372
|
-
shaka.log.debug(
|
|
373
|
-
'Waiting for update message before calling ' +
|
|
374
|
-
name + '.' + methodName + '...');
|
|
375
|
-
const originalArguments = Array.from(arguments);
|
|
376
|
-
await waitForUpdateMessages();
|
|
377
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
378
|
-
return original.apply(this, originalArguments);
|
|
379
|
-
};
|
|
380
|
-
toRestore.push(() => {
|
|
381
|
-
prototype[methodName] = original;
|
|
382
|
-
});
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
function waitForLoadedData() {
|
|
386
|
-
return new Promise((resolve, reject) => {
|
|
387
|
-
eventManager.listenOnce(video, 'loadeddata', resolve);
|
|
388
|
-
eventManager.listenOnce(player, 'error', reject);
|
|
389
|
-
});
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
function waitForUpdateMessages() {
|
|
393
|
-
pendingMessages = [];
|
|
394
|
-
messageWaitPromise = new shaka.util.PublicPromise();
|
|
395
|
-
return messageWaitPromise;
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
function createMockReceiverApi() {
|
|
399
|
-
return {
|
|
400
|
-
CastReceiverManager: {
|
|
401
|
-
getInstance: () => mockReceiverManager,
|
|
402
|
-
},
|
|
403
|
-
media: {
|
|
404
|
-
// Defined by the SDK, but we aren't loading it here.
|
|
405
|
-
MetadataType: {
|
|
406
|
-
GENERIC: 0,
|
|
407
|
-
MUSIC_TRACK: 3,
|
|
408
|
-
},
|
|
409
|
-
},
|
|
410
|
-
};
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
function createMockReceiverManager() {
|
|
414
|
-
return {
|
|
415
|
-
start: jasmine.createSpy('CastReceiverManager.start'),
|
|
416
|
-
stop: jasmine.createSpy('CastReceiverManager.stop'),
|
|
417
|
-
setSystemVolumeLevel:
|
|
418
|
-
jasmine.createSpy('CastReceiverManager.setSystemVolumeLevel'),
|
|
419
|
-
setSystemVolumeMuted:
|
|
420
|
-
jasmine.createSpy('CastReceiverManager.setSystemVolumeMuted'),
|
|
421
|
-
getSenders: jasmine.createSpy('CastReceiverManager.getSenders'),
|
|
422
|
-
getSystemVolume: () => ({level: 1, muted: false}),
|
|
423
|
-
getCastMessageBus: (namespace) => {
|
|
424
|
-
if (namespace == CastUtils.SHAKA_MESSAGE_NAMESPACE) {
|
|
425
|
-
return mockShakaMessageBus;
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
return mockGenericMessageBus;
|
|
429
|
-
},
|
|
430
|
-
};
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
function createMockMessageBus() {
|
|
434
|
-
const bus = {
|
|
435
|
-
messages: [],
|
|
436
|
-
broadcast: jasmine.createSpy('CastMessageBus.broadcast'),
|
|
437
|
-
getCastChannel: jasmine.createSpy('CastMessageBus.getCastChannel'),
|
|
438
|
-
};
|
|
439
|
-
// For convenience, deserialize and store sent messages.
|
|
440
|
-
bus.broadcast.and.callFake((message) => {
|
|
441
|
-
bus.messages.push(CastUtils.deserialize(message));
|
|
442
|
-
// Check to see if it's an update message.
|
|
443
|
-
const parsed = CastUtils.deserialize(message);
|
|
444
|
-
if (parsed.type == 'update' && pendingMessages) {
|
|
445
|
-
shaka.log.debug('Received update message. Proceeding...');
|
|
446
|
-
// The code waiting on this Promise will get an array of all of the
|
|
447
|
-
// messages processed within this tick.
|
|
448
|
-
pendingMessages.push(message);
|
|
449
|
-
messageWaitPromise.resolve(pendingMessages);
|
|
450
|
-
}
|
|
451
|
-
});
|
|
452
|
-
const channel = {
|
|
453
|
-
messages: [],
|
|
454
|
-
send: (message) => {
|
|
455
|
-
channel.messages.push(CastUtils.deserialize(message));
|
|
456
|
-
},
|
|
457
|
-
};
|
|
458
|
-
bus.getCastChannel.and.returnValue(channel);
|
|
459
|
-
return bus;
|
|
460
|
-
}
|
|
461
|
-
|
|
462
|
-
/**
|
|
463
|
-
* @param {number} num
|
|
464
|
-
*/
|
|
465
|
-
function fakeConnectedSenders(num) {
|
|
466
|
-
const senderArray = [];
|
|
467
|
-
while (num--) {
|
|
468
|
-
senderArray.push('senderId');
|
|
469
|
-
}
|
|
470
|
-
|
|
471
|
-
mockReceiverManager.getSenders.and.returnValue(senderArray);
|
|
472
|
-
mockReceiverManager.onSenderConnected();
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
/**
|
|
476
|
-
* @param {*} message
|
|
477
|
-
* @param {!cast.receiver.CastMessageBus} bus
|
|
478
|
-
* @param {string=} senderId
|
|
479
|
-
*/
|
|
480
|
-
function fakeIncomingMessage(message, bus, senderId) {
|
|
481
|
-
const serialized = CastUtils.serialize(message);
|
|
482
|
-
const messageEvent = {
|
|
483
|
-
senderId: senderId,
|
|
484
|
-
data: serialized,
|
|
485
|
-
};
|
|
486
|
-
bus.onMessage(messageEvent);
|
|
487
|
-
}
|
|
488
|
-
});
|