rx-player 3.26.2 → 3.27.0-dev.20220317
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/.github/workflows/perfs.yml +22 -0
- package/CHANGELOG.md +33 -1
- package/FILES.md +5 -4
- package/VERSION +1 -1
- package/dist/_esm5.processed/compat/browser_detection.d.ts +4 -2
- package/dist/_esm5.processed/compat/browser_detection.js +4 -2
- package/dist/_esm5.processed/compat/eme/close_session.d.ts +11 -5
- package/dist/_esm5.processed/compat/eme/close_session.js +144 -36
- package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -5
- package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +27 -24
- package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +53 -34
- package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +43 -41
- package/dist/_esm5.processed/compat/eme/generate_key_request.d.ts +2 -3
- package/dist/_esm5.processed/compat/eme/generate_key_request.js +22 -26
- package/dist/_esm5.processed/compat/eme/load_session.d.ts +1 -2
- package/dist/_esm5.processed/compat/eme/load_session.js +68 -17
- package/dist/_esm5.processed/compat/event_listeners.js +2 -1
- package/dist/_esm5.processed/compat/should_favour_custom_safari_EME.js +2 -2
- package/dist/_esm5.processed/config.d.ts +166 -1080
- package/dist/_esm5.processed/config.js +17 -1119
- package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +4 -1
- package/dist/_esm5.processed/core/abr/buffer_based_chooser.d.ts +28 -6
- package/dist/_esm5.processed/core/abr/buffer_based_chooser.js +63 -12
- package/dist/_esm5.processed/core/abr/network_analyzer.d.ts +1 -1
- package/dist/_esm5.processed/core/abr/network_analyzer.js +2 -1
- package/dist/_esm5.processed/core/abr/pending_requests_store.js +3 -5
- package/dist/_esm5.processed/core/abr/representation_estimator.d.ts +1 -1
- package/dist/_esm5.processed/core/abr/representation_estimator.js +2 -2
- package/dist/_esm5.processed/core/api/get_player_state.js +1 -1
- package/dist/_esm5.processed/core/api/index.d.ts +2 -1
- package/dist/_esm5.processed/core/api/media_element_track_choice_manager.d.ts +6 -0
- package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +22 -4
- package/dist/_esm5.processed/core/api/option_utils.d.ts +3 -1
- package/dist/_esm5.processed/core/api/option_utils.js +19 -6
- package/dist/_esm5.processed/core/api/playback_observer.js +5 -1
- package/dist/_esm5.processed/core/api/public_api.d.ts +82 -71
- package/dist/_esm5.processed/core/api/public_api.js +72 -33
- package/dist/_esm5.processed/core/api/track_choice_manager.d.ts +6 -6
- package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.d.ts +7 -51
- package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.js +30 -75
- package/dist/_esm5.processed/core/{eme → decrypt}/attach_media_keys.d.ts +12 -12
- package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +104 -0
- package/dist/_esm5.processed/core/{eme/clear_eme_session.d.ts → decrypt/clear_on_stop.d.ts} +3 -4
- package/dist/_esm5.processed/core/decrypt/clear_on_stop.js +41 -0
- package/dist/_esm5.processed/core/decrypt/content_decryptor.d.ts +216 -0
- package/dist/_esm5.processed/core/decrypt/content_decryptor.js +866 -0
- package/dist/_esm5.processed/core/{eme/get_session.d.ts → decrypt/create_or_load_session.d.ts} +28 -26
- package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +124 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/create_session.d.ts +22 -19
- package/dist/_esm5.processed/core/decrypt/create_session.js +174 -0
- package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.d.ts +21 -0
- package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.js +81 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/find_key_system.d.ts +11 -14
- package/dist/_esm5.processed/core/decrypt/find_key_system.js +300 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.d.ts +0 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.js +1 -1
- package/dist/_esm5.processed/core/{eme → decrypt}/get_media_keys.d.ts +13 -5
- package/dist/_esm5.processed/core/decrypt/get_media_keys.js +153 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/index.d.ts +5 -6
- package/dist/_esm5.processed/core/{eme → decrypt}/index.js +5 -5
- package/dist/_esm5.processed/core/{eme → decrypt}/init_media_keys.d.ts +6 -4
- package/dist/_esm5.processed/core/decrypt/init_media_keys.js +82 -0
- package/dist/_esm5.processed/core/decrypt/session_events_listener.d.ts +77 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/session_events_listener.js +25 -24
- package/dist/_esm5.processed/core/{eme → decrypt}/set_server_certificate.d.ts +15 -6
- package/dist/_esm5.processed/core/decrypt/set_server_certificate.js +141 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/types.d.ts +120 -242
- package/dist/_esm5.processed/core/{eme → decrypt}/types.js +0 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.d.ts +3 -3
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.js +5 -5
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.d.ts +2 -2
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.js +4 -3
- package/dist/_esm5.processed/core/{eme/utils/close_session.d.ts → decrypt/utils/clean_old_loaded_sessions.d.ts} +8 -7
- package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +85 -0
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.d.ts +1 -1
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.js +2 -2
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.d.ts +0 -0
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.js +1 -1
- package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.d.ts +69 -0
- package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.js +99 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.d.ts +0 -1
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.js +4 -5
- package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.d.ts +44 -0
- package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.js +77 -0
- package/dist/_esm5.processed/core/decrypt/utils/key_session_record.d.ts +104 -0
- package/dist/_esm5.processed/core/decrypt/utils/key_session_record.js +155 -0
- package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.d.ts +108 -0
- package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +303 -0
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.d.ts +4 -4
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.js +0 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.d.ts +8 -18
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.js +119 -97
- package/dist/_esm5.processed/core/{eme/utils/init_data_container.d.ts → decrypt/utils/serializable_bytes.d.ts} +8 -5
- package/dist/_esm5.processed/core/{eme/utils/init_data_container.js → decrypt/utils/serializable_bytes.js} +9 -9
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.d.ts +1 -1
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.js +1 -1
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +4 -4
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +3 -3
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +2 -2
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +6 -2
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
- package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +1 -1
- package/dist/_esm5.processed/core/init/get_initial_time.js +1 -1
- package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +3 -3
- package/dist/_esm5.processed/core/init/initialize_directfile.js +11 -17
- package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +5 -3
- package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -69
- package/dist/_esm5.processed/core/init/link_drm_and_content.d.ts +61 -0
- package/dist/_esm5.processed/core/init/link_drm_and_content.js +94 -0
- package/dist/_esm5.processed/core/init/manifest_update_scheduler.d.ts +4 -4
- package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +2 -1
- package/dist/_esm5.processed/core/init/stall_avoider.js +1 -1
- package/dist/_esm5.processed/core/init/stream_events_emitter/are_same_stream_events.d.ts +4 -4
- package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +1 -1
- package/dist/_esm5.processed/core/init/stream_events_emitter/types.d.ts +2 -2
- package/dist/_esm5.processed/core/init/types.d.ts +2 -4
- package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +1 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.d.ts +3 -3
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +3 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +32 -31
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +4 -4
- package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +17 -1
- package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +22 -5
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +2 -1
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +6 -3
- package/dist/_esm5.processed/core/stream/events_generators.d.ts +8 -3
- package/dist/_esm5.processed/core/stream/events_generators.js +3 -2
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +1 -0
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +3 -3
- package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +2 -1
- package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.js +1 -1
- package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +2 -1
- package/dist/_esm5.processed/core/stream/period/period_stream.js +3 -3
- package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +5 -6
- package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +6 -1
- package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +12 -9
- package/dist/_esm5.processed/core/stream/representation/get_needed_segments.d.ts +19 -14
- package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +86 -10
- package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +1 -1
- package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -3
- package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +6 -0
- package/dist/_esm5.processed/core/stream/representation/representation_stream.js +19 -8
- package/dist/_esm5.processed/core/stream/types.d.ts +1 -1
- package/dist/_esm5.processed/default_config.d.ts +1114 -0
- package/dist/_esm5.processed/default_config.js +1145 -0
- package/dist/_esm5.processed/errors/request_error.js +3 -1
- package/dist/_esm5.processed/experimental/index.d.ts +2 -0
- package/dist/_esm5.processed/experimental/index.js +2 -0
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +1 -0
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.d.ts +2 -2
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +2 -4
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +1 -1
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +1 -1
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +1 -2
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.js +1 -2
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/types.d.ts +3 -3
- package/dist/_esm5.processed/features/features_object.js +1 -1
- package/dist/_esm5.processed/features/initialize_features.js +1 -1
- package/dist/_esm5.processed/features/list/eme.d.ts +3 -3
- package/dist/_esm5.processed/features/list/eme.js +5 -5
- package/dist/_esm5.processed/features/types.d.ts +3 -3
- package/dist/_esm5.processed/manifest/adaptation.d.ts +2 -2
- package/dist/_esm5.processed/manifest/adaptation.js +3 -1
- package/dist/_esm5.processed/manifest/manifest.d.ts +10 -23
- package/dist/_esm5.processed/manifest/manifest.js +10 -74
- package/dist/_esm5.processed/manifest/period.d.ts +3 -3
- package/dist/_esm5.processed/manifest/representation.d.ts +37 -5
- package/dist/_esm5.processed/manifest/representation_index/types.d.ts +18 -18
- package/dist/_esm5.processed/manifest/types.d.ts +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/get_hdr_information.d.ts +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/get_periods_time_infos.d.ts +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +6 -6
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.d.ts +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/is_period_fulfilled.js +1 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +14 -14
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +17 -17
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +1 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +28 -20
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +20 -5
- package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.d.ts +17 -35
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +109 -96
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +8 -8
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.d.ts +18 -27
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +25 -23
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +21 -15
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +19 -19
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.d.ts +15 -38
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +8 -8
- package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +30 -30
- package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.d.ts +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +7 -7
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -0
- package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +8 -8
- package/dist/_esm5.processed/parsers/manifest/types.d.ts +28 -28
- package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.d.ts +3 -2
- package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +15 -5
- package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.d.ts +11 -1
- package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.js +31 -19
- package/dist/_esm5.processed/parsers/texttracks/webvtt/html/to_html.d.ts +2 -2
- package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_cue_block.d.ts +1 -1
- package/dist/_esm5.processed/public_types.d.ts +2 -2
- package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +2 -1
- package/dist/_esm5.processed/transports/dash/image_pipelines.js +4 -1
- package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -1
- package/dist/_esm5.processed/transports/dash/manifest_parser.js +1 -1
- package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +2 -2
- package/dist/_esm5.processed/transports/dash/segment_loader.js +2 -2
- package/dist/_esm5.processed/transports/dash/segment_parser.d.ts +1 -1
- package/dist/_esm5.processed/transports/dash/segment_parser.js +6 -3
- package/dist/_esm5.processed/transports/dash/text_loader.d.ts +1 -1
- package/dist/_esm5.processed/transports/dash/text_loader.js +1 -1
- package/dist/_esm5.processed/transports/dash/text_parser.d.ts +1 -1
- package/dist/_esm5.processed/transports/dash/text_parser.js +8 -2
- package/dist/_esm5.processed/transports/local/segment_loader.d.ts +1 -2
- package/dist/_esm5.processed/transports/local/segment_loader.js +1 -1
- package/dist/_esm5.processed/transports/local/segment_parser.js +4 -1
- package/dist/_esm5.processed/transports/local/text_parser.js +8 -2
- package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.d.ts +1 -1
- package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +1 -1
- package/dist/_esm5.processed/transports/smooth/pipelines.js +69 -11
- package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +0 -1
- package/dist/_esm5.processed/transports/smooth/segment_loader.js +2 -2
- package/dist/_esm5.processed/transports/types.d.ts +58 -30
- package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -1
- package/dist/_esm5.processed/transports/utils/generate_manifest_loader.d.ts +1 -1
- package/dist/_esm5.processed/utils/cancellable_sleep.js +1 -1
- package/dist/_esm5.processed/utils/cast_to_observable.d.ts +1 -2
- package/dist/_esm5.processed/utils/cast_to_observable.js +1 -1
- package/dist/_esm5.processed/utils/deep_merge.d.ts +12 -0
- package/dist/_esm5.processed/utils/deep_merge.js +53 -0
- package/dist/_esm5.processed/utils/reference.d.ts +29 -0
- package/dist/_esm5.processed/utils/reference.js +72 -24
- package/dist/_esm5.processed/utils/request/fetch.d.ts +4 -5
- package/dist/_esm5.processed/utils/request/fetch.js +8 -6
- package/dist/_esm5.processed/utils/request/xhr.d.ts +6 -6
- package/dist/_esm5.processed/utils/request/xhr.js +3 -2
- package/dist/_esm5.processed/utils/rx-from_cancellable_promise.d.ts +1 -2
- package/dist/_esm5.processed/utils/rx-from_cancellable_promise.js +7 -2
- package/dist/_esm5.processed/utils/task_canceller.d.ts +5 -3
- package/dist/_esm5.processed/utils/task_canceller.js +3 -3
- package/dist/rx-player.js +5242 -3190
- package/dist/rx-player.min.js +1 -1
- package/dummy +1 -0
- package/{dist/_esm5.processed/core/eme/dispose_eme.d.ts → experimental/index.d.ts} +1 -4
- package/{dist/_esm5.processed/core/eme/dispose_media_keys.d.ts → experimental/index.js} +1 -6
- package/package.json +33 -36
- package/scripts/build/templates/experimental/index.d.ts +16 -0
- package/scripts/build/templates/experimental/index.js +16 -0
- package/scripts/doc-generator/generate_header_html.js +6 -7
- package/scripts/doc-generator/generate_page_html.js +3 -4
- package/scripts/doc-generator/generate_page_list_html.js +4 -5
- package/scripts/doc-generator/generate_sidebar_html.js +4 -7
- package/scripts/doc-generator/utils.js +0 -11
- package/scripts/generate_demo_list.js +3 -3
- package/scripts/generate_documentation_list.js +3 -3
- package/scripts/launch_static_server.js +127 -67
- package/scripts/run_standalone_demo.js +1 -0
- package/scripts/start_demo_web_server.js +1 -0
- package/sonar-project.properties +1 -1
- package/src/README.md +6 -6
- package/src/compat/__tests__/fullscreen.test.ts +7 -7
- package/src/compat/__tests__/is_vtt_cue.test.ts +1 -1
- package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +45 -5
- package/src/compat/browser_detection.ts +4 -2
- package/src/compat/eme/close_session.ts +90 -56
- package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +1 -1
- package/src/compat/eme/custom_media_keys/index.ts +28 -41
- package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +63 -46
- package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +51 -49
- package/src/compat/eme/generate_key_request.ts +25 -33
- package/src/compat/eme/load_session.ts +29 -31
- package/src/compat/event_listeners.ts +2 -1
- package/src/compat/should_favour_custom_safari_EME.ts +5 -2
- package/src/config.ts +17 -1210
- package/src/core/README.md +1 -1
- package/src/core/abr/__tests__/{get_estimate_from_buffer_levels.test.ts → buffer_based_chooser.test.ts} +94 -123
- package/src/core/abr/bandwidth_estimator.ts +4 -4
- package/src/core/abr/buffer_based_chooser.ts +85 -20
- package/src/core/abr/network_analyzer.ts +6 -7
- package/src/core/abr/pending_requests_store.ts +3 -5
- package/src/core/abr/representation_estimator.ts +6 -3
- package/src/core/api/__tests__/get_player_state.test.ts +3 -3
- package/src/core/api/__tests__/option_utils.test.ts +17 -17
- package/src/core/api/get_player_state.ts +1 -1
- package/src/core/api/index.ts +3 -0
- package/src/core/api/media_element_track_choice_manager.ts +22 -3
- package/src/core/api/option_utils.ts +37 -20
- package/src/core/api/playback_observer.ts +12 -8
- package/src/core/api/public_api.ts +152 -112
- package/src/core/api/track_choice_manager.ts +10 -9
- package/src/core/decrypt/README.md +22 -0
- package/src/core/decrypt/__tests__/__global__/get_license.test.ts +418 -0
- package/src/core/decrypt/__tests__/__global__/init_data.test.ts +675 -0
- package/src/core/{eme → decrypt}/__tests__/__global__/media_key_system_access.test.ts +99 -92
- package/src/core/decrypt/__tests__/__global__/media_keys.test.ts +156 -0
- package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +262 -0
- package/src/core/{eme → decrypt}/__tests__/__global__/utils.ts +36 -103
- package/src/core/{eme → decrypt}/attach_media_keys.ts +49 -56
- package/src/core/decrypt/clear_on_stop.ts +48 -0
- package/src/core/decrypt/content_decryptor.ts +1158 -0
- package/src/core/decrypt/create_or_load_session.ts +130 -0
- package/src/core/decrypt/create_session.ts +175 -0
- package/src/core/decrypt/dispose_decryption_resources.ts +39 -0
- package/src/core/{eme → decrypt}/find_key_system.ts +126 -134
- package/src/core/{eme → decrypt}/get_current_key_system.ts +1 -1
- package/src/core/decrypt/get_media_keys.ts +145 -0
- package/src/core/{eme → decrypt}/index.ts +11 -8
- package/src/core/decrypt/init_media_keys.ts +51 -0
- package/src/core/{eme → decrypt}/session_events_listener.ts +93 -55
- package/src/core/decrypt/set_server_certificate.ts +104 -0
- package/src/core/{eme → decrypt}/types.ts +129 -259
- package/src/core/{eme → decrypt}/utils/__tests__/are_init_values_compatible.test.ts +1 -1
- package/src/core/{eme → decrypt/utils}/__tests__/clean_old_loaded_sessions.test.ts +29 -71
- package/src/core/{eme → decrypt/utils}/__tests__/clean_old_stored_persistent_info.test.ts +6 -6
- package/src/core/{eme → decrypt}/utils/are_init_values_compatible.ts +9 -9
- package/src/core/{eme → decrypt/utils}/check_key_statuses.ts +6 -5
- package/{dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js → src/core/decrypt/utils/clean_old_loaded_sessions.ts} +20 -20
- package/src/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.ts +3 -3
- package/src/core/{eme → decrypt/utils}/get_drm_system_id.ts +1 -1
- package/src/core/decrypt/utils/init_data_values_container.ts +119 -0
- package/src/core/{eme → decrypt}/utils/is_session_usable.ts +4 -5
- package/src/core/decrypt/utils/key_id_comparison.ts +82 -0
- package/src/core/decrypt/utils/key_session_record.ts +175 -0
- package/src/core/decrypt/utils/loaded_sessions_store.ts +318 -0
- package/src/core/{eme → decrypt/utils}/media_keys_infos_store.ts +4 -4
- package/src/core/{eme → decrypt}/utils/persistent_sessions_store.ts +122 -104
- package/src/core/{eme/utils/init_data_container.ts → decrypt/utils/serializable_bytes.ts} +8 -5
- package/src/core/{eme → decrypt/utils}/server_certificate_store.ts +2 -2
- package/src/core/fetchers/manifest/manifest_fetcher.ts +9 -9
- package/src/core/fetchers/segment/segment_fetcher.ts +10 -7
- package/src/core/fetchers/segment/segment_fetcher_creator.ts +2 -2
- package/src/core/fetchers/utils/try_urls_with_backoff.ts +1 -1
- package/src/core/init/.initialize_media_source.ts.un~ +0 -0
- package/src/core/init/get_initial_time.ts +2 -1
- package/src/core/init/initialize_directfile.ts +19 -22
- package/src/core/init/initialize_media_source.ts +43 -106
- package/src/core/init/link_drm_and_content.ts +176 -0
- package/src/core/init/manifest_update_scheduler.ts +12 -10
- package/src/core/init/stall_avoider.ts +6 -5
- package/src/core/init/stream_events_emitter/are_same_stream_events.ts +4 -4
- package/src/core/init/stream_events_emitter/stream_events_emitter.ts +2 -1
- package/src/core/init/stream_events_emitter/types.ts +2 -2
- package/src/core/init/types.ts +1 -39
- package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +2 -1
- package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +6 -7
- package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +32 -31
- package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +4 -4
- package/src/core/segment_buffers/inventory/segment_inventory.ts +42 -8
- package/src/core/stream/adaptation/adaptation_stream.ts +7 -1
- package/src/core/stream/events_generators.ts +9 -4
- package/src/core/stream/orchestrator/stream_orchestrator.ts +9 -4
- package/src/core/stream/period/create_empty_adaptation_stream.ts +2 -1
- package/src/core/stream/period/get_adaptation_switch_strategy.ts +1 -1
- package/src/core/stream/period/period_stream.ts +5 -2
- package/src/core/stream/representation/force_garbage_collection.ts +5 -7
- package/src/core/stream/representation/get_buffer_status.ts +28 -16
- package/src/core/stream/representation/get_needed_segments.ts +124 -28
- package/src/core/stream/representation/get_segment_priority.ts +1 -2
- package/src/core/stream/representation/push_media_segment.ts +3 -2
- package/src/core/stream/representation/representation_stream.ts +30 -7
- package/src/core/stream/types.ts +1 -1
- package/src/default_config.ts +1241 -0
- package/src/errors/request_error.ts +4 -1
- package/src/experimental/index.ts +5 -0
- package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +1 -0
- package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +5 -7
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +3 -10
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +4 -4
- package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +1 -1
- package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +3 -3
- package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +1 -2
- package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.ts +1 -2
- package/src/experimental/tools/mediaCapabilitiesProber/types.ts +3 -3
- package/src/features/__tests__/initialize_features.test.ts +2 -2
- package/src/features/features_object.ts +1 -1
- package/src/features/initialize_features.ts +1 -1
- package/src/features/list/__tests__/eme.test.ts +5 -5
- package/src/features/list/eme.ts +5 -5
- package/src/features/types.ts +3 -10
- package/src/manifest/adaptation.ts +6 -4
- package/src/manifest/manifest.ts +16 -86
- package/src/manifest/period.ts +3 -3
- package/src/manifest/representation.ts +38 -5
- package/src/manifest/representation_index/types.ts +18 -18
- package/src/manifest/types.ts +3 -3
- package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +1 -0
- package/src/parsers/manifest/dash/common/get_hdr_information.ts +1 -1
- package/src/parsers/manifest/dash/common/get_periods_time_infos.ts +3 -3
- package/src/parsers/manifest/dash/common/indexes/base.ts +6 -6
- package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +4 -2
- package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +2 -2
- package/src/parsers/manifest/dash/common/indexes/is_period_fulfilled.ts +1 -2
- package/src/parsers/manifest/dash/common/indexes/list.ts +14 -14
- package/src/parsers/manifest/dash/common/indexes/template.ts +18 -18
- package/src/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.ts +1 -1
- package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +51 -23
- package/src/parsers/manifest/dash/common/infer_adaptation_type.ts +2 -2
- package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +1 -1
- package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +167 -134
- package/src/parsers/manifest/dash/common/parse_mpd.ts +9 -10
- package/src/parsers/manifest/dash/common/parse_periods.ts +80 -79
- package/src/parsers/manifest/dash/common/parse_representation_index.ts +83 -75
- package/src/parsers/manifest/dash/common/parse_representations.ts +44 -63
- package/src/parsers/manifest/dash/node_parser_types.ts +30 -30
- package/src/parsers/manifest/dash/parsers_types.ts +3 -3
- package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +1 -1
- package/src/parsers/manifest/metaplaylist/metaplaylist_parser.ts +4 -4
- package/src/parsers/manifest/smooth/create_parser.ts +24 -21
- package/src/parsers/manifest/smooth/representation_index.ts +14 -14
- package/src/parsers/manifest/types.ts +28 -28
- package/src/parsers/manifest/utils/__tests__/update_segment_timeline.test.ts +31 -33
- package/src/parsers/manifest/utils/clear_timeline_from_position.ts +15 -6
- package/src/parsers/manifest/utils/index_helpers.ts +2 -2
- package/src/parsers/manifest/utils/update_segment_timeline.ts +32 -21
- package/src/parsers/texttracks/webvtt/html/__tests__/create_styled_element.test.ts +1 -0
- package/src/parsers/texttracks/webvtt/html/to_html.ts +2 -2
- package/src/parsers/texttracks/webvtt/parse_cue_block.ts +1 -1
- package/src/public_types.ts +5 -1
- package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +2 -2
- package/src/transports/dash/image_pipelines.ts +4 -1
- package/src/transports/dash/init_segment_loader.ts +1 -1
- package/src/transports/dash/manifest_parser.ts +1 -1
- package/src/transports/dash/segment_loader.ts +7 -7
- package/src/transports/dash/segment_parser.ts +8 -1
- package/src/transports/dash/text_loader.ts +2 -2
- package/src/transports/dash/text_parser.ts +11 -1
- package/src/transports/local/segment_loader.ts +4 -4
- package/src/transports/local/segment_parser.ts +4 -0
- package/src/transports/local/text_parser.ts +8 -0
- package/src/transports/metaplaylist/manifest_loader.ts +1 -1
- package/src/transports/metaplaylist/pipelines.ts +1 -1
- package/src/transports/smooth/pipelines.ts +29 -16
- package/src/transports/smooth/segment_loader.ts +8 -8
- package/src/transports/types.ts +59 -30
- package/src/transports/utils/call_custom_manifest_loader.ts +6 -6
- package/src/transports/utils/generate_manifest_loader.ts +1 -1
- package/src/utils/__tests__/deep_merge.test.ts +48 -0
- package/src/utils/__tests__/flat_map.test.ts +12 -7
- package/src/utils/cancellable_sleep.ts +1 -1
- package/src/utils/cast_to_observable.ts +1 -2
- package/src/utils/deep_merge.ts +46 -0
- package/src/utils/reference.ts +116 -23
- package/src/utils/request/fetch.ts +17 -15
- package/src/utils/request/xhr.ts +11 -8
- package/src/utils/rx-from_cancellable_promise.ts +8 -4
- package/src/utils/task_canceller.ts +6 -4
- package/tsconfig.json +1 -2
- package/tsconfig.modules.json +1 -2
- package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.d.ts +0 -29
- package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.js +0 -67
- package/dist/_esm5.processed/core/eme/attach_media_keys.js +0 -57
- package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.d.ts +0 -59
- package/dist/_esm5.processed/core/eme/clear_eme_session.js +0 -50
- package/dist/_esm5.processed/core/eme/create_session.js +0 -126
- package/dist/_esm5.processed/core/eme/dispose_eme.js +0 -23
- package/dist/_esm5.processed/core/eme/dispose_media_keys.js +0 -36
- package/dist/_esm5.processed/core/eme/eme_manager.d.ts +0 -31
- package/dist/_esm5.processed/core/eme/eme_manager.js +0 -278
- package/dist/_esm5.processed/core/eme/find_key_system.js +0 -243
- package/dist/_esm5.processed/core/eme/get_media_keys.js +0 -85
- package/dist/_esm5.processed/core/eme/get_session.js +0 -68
- package/dist/_esm5.processed/core/eme/init_media_keys.js +0 -66
- package/dist/_esm5.processed/core/eme/session_events_listener.d.ts +0 -41
- package/dist/_esm5.processed/core/eme/set_server_certificate.js +0 -85
- package/dist/_esm5.processed/core/eme/utils/close_session.js +0 -81
- package/dist/_esm5.processed/core/eme/utils/init_data_store.d.ts +0 -115
- package/dist/_esm5.processed/core/eme/utils/init_data_store.js +0 -181
- package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.d.ts +0 -123
- package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +0 -173
- package/dist/_esm5.processed/core/init/create_eme_manager.d.ts +0 -34
- package/dist/_esm5.processed/core/init/create_eme_manager.js +0 -52
- package/src/core/abr/get_estimate_from_buffer_levels.ts +0 -85
- package/src/core/eme/README.md +0 -26
- package/src/core/eme/__tests__/__global__/get_license.test.ts +0 -414
- package/src/core/eme/__tests__/__global__/init_data.test.ts +0 -908
- package/src/core/eme/__tests__/__global__/media_keys.test.ts +0 -266
- package/src/core/eme/__tests__/__global__/server_certificate.test.ts +0 -364
- package/src/core/eme/__tests__/init_media_keys.test.ts +0 -182
- package/src/core/eme/clean_old_loaded_sessions.ts +0 -96
- package/src/core/eme/clear_eme_session.ts +0 -62
- package/src/core/eme/create_session.ts +0 -187
- package/src/core/eme/dispose_eme.ts +0 -25
- package/src/core/eme/dispose_media_keys.ts +0 -46
- package/src/core/eme/eme_manager.ts +0 -387
- package/src/core/eme/get_media_keys.ts +0 -141
- package/src/core/eme/get_session.ts +0 -135
- package/src/core/eme/init_media_keys.ts +0 -106
- package/src/core/eme/set_server_certificate.ts +0 -115
- package/src/core/eme/utils/close_session.ts +0 -113
- package/src/core/eme/utils/init_data_store.ts +0 -234
- package/src/core/eme/utils/loaded_sessions_store.ts +0 -235
- package/src/core/init/create_eme_manager.ts +0 -95
|
@@ -22,31 +22,24 @@
|
|
|
22
22
|
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
23
23
|
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
24
24
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
25
|
+
/* eslint-disable no-restricted-properties */
|
|
25
26
|
|
|
26
|
-
import {
|
|
27
|
-
EMPTY,
|
|
28
|
-
Observable,
|
|
29
|
-
of as observableOf,
|
|
30
|
-
Subject,
|
|
31
|
-
takeUntil,
|
|
32
|
-
throwError as observableThrow,
|
|
33
|
-
} from "rxjs";
|
|
34
27
|
import { ICustomMediaKeySystemAccess } from "../../../../compat";
|
|
35
28
|
import {
|
|
36
29
|
defaultKSConfig,
|
|
37
30
|
defaultWidevineConfig,
|
|
38
31
|
mockCompat,
|
|
39
|
-
|
|
32
|
+
testContentDecryptorError,
|
|
40
33
|
} from "./utils";
|
|
41
34
|
|
|
42
35
|
export function requestMediaKeySystemAccessNoMediaKeys(
|
|
43
36
|
keySystem : string,
|
|
44
37
|
config : MediaKeySystemConfiguration[]
|
|
45
|
-
) :
|
|
38
|
+
) : Promise<ICustomMediaKeySystemAccess> {
|
|
46
39
|
if (config.length === 0) {
|
|
47
40
|
throw new Error("requestMediaKeySystemAccessNoMediaKeys: no config given");
|
|
48
41
|
}
|
|
49
|
-
return
|
|
42
|
+
return Promise.resolve({
|
|
50
43
|
keySystem,
|
|
51
44
|
getConfiguration() { return config[0]; },
|
|
52
45
|
createMediaKeys() { return new Promise(() => { /* noop */ }); },
|
|
@@ -58,7 +51,7 @@ const incompatibleMKSAErrorMessage =
|
|
|
58
51
|
"with your wanted configuration has been found in the current browser.";
|
|
59
52
|
|
|
60
53
|
/**
|
|
61
|
-
* Check that the given `keySystemsConfigs` lead
|
|
54
|
+
* Check that the given `keySystemsConfigs` lead to an
|
|
62
55
|
* `INCOMPATIBLE_KEYSYSTEMS` error.
|
|
63
56
|
* @param {Array.<Object>} keySystemsConfigs
|
|
64
57
|
* @returns {Promise}
|
|
@@ -67,19 +60,18 @@ async function checkIncompatibleKeySystemsErrorMessage(
|
|
|
67
60
|
keySystemsConfigs : unknown[]
|
|
68
61
|
) : Promise<void> {
|
|
69
62
|
const mediaElement = document.createElement("video");
|
|
70
|
-
const
|
|
63
|
+
const ContentDecryptor = require("../../content_decryptor").default;
|
|
71
64
|
|
|
72
|
-
const error : any = await
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
EMPTY);
|
|
65
|
+
const error : any = await testContentDecryptorError(ContentDecryptor,
|
|
66
|
+
mediaElement,
|
|
67
|
+
keySystemsConfigs);
|
|
76
68
|
expect(error).not.toBe(null);
|
|
77
69
|
expect(error.message).toEqual(incompatibleMKSAErrorMessage);
|
|
78
70
|
expect(error.name).toEqual("EncryptedMediaError");
|
|
79
71
|
expect(error.code).toEqual("INCOMPATIBLE_KEYSYSTEMS");
|
|
80
72
|
}
|
|
81
73
|
|
|
82
|
-
describe("core -
|
|
74
|
+
describe("core - decrypt - global tests - media key system access", () => {
|
|
83
75
|
// Used to implement every functions that should never be called.
|
|
84
76
|
const neverCalledFn = jest.fn();
|
|
85
77
|
|
|
@@ -100,7 +92,7 @@ describe("core - eme - global tests - media key system access", () => {
|
|
|
100
92
|
});
|
|
101
93
|
|
|
102
94
|
it("should throw if given a single incompatible keySystemsConfigs", async () => {
|
|
103
|
-
const requestMediaKeySystemAccessSpy = jest.fn(() =>
|
|
95
|
+
const requestMediaKeySystemAccessSpy = jest.fn(() => Promise.reject("nope"));
|
|
104
96
|
mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessSpy });
|
|
105
97
|
const getLicenseFn = neverCalledFn;
|
|
106
98
|
await checkIncompatibleKeySystemsErrorMessage([{ type: "foo",
|
|
@@ -110,7 +102,7 @@ describe("core - eme - global tests - media key system access", () => {
|
|
|
110
102
|
});
|
|
111
103
|
|
|
112
104
|
it("should throw if given multiple incompatible keySystemsConfigs", async () => {
|
|
113
|
-
const requestMediaKeySystemAccessSpy = jest.fn(() =>
|
|
105
|
+
const requestMediaKeySystemAccessSpy = jest.fn(() => Promise.reject("nope"));
|
|
114
106
|
mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessSpy });
|
|
115
107
|
const config = [ { type: "foo", getLicense: neverCalledFn },
|
|
116
108
|
{ type: "bar", getLicense: neverCalledFn },
|
|
@@ -130,20 +122,19 @@ describe("core - eme - global tests - media key system access", () => {
|
|
|
130
122
|
/* eslint-enable max-len */
|
|
131
123
|
mockCompat({ requestMediaKeySystemAccess: undefined });
|
|
132
124
|
const mediaElement = document.createElement("video");
|
|
133
|
-
const
|
|
125
|
+
const ContentDecryptor = require("../../content_decryptor").default;
|
|
134
126
|
|
|
135
127
|
const config = [{ type: "foo", getLicense: neverCalledFn }];
|
|
136
|
-
const error : any = await
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
EMPTY);
|
|
128
|
+
const error : any = await testContentDecryptorError(ContentDecryptor,
|
|
129
|
+
mediaElement,
|
|
130
|
+
config);
|
|
140
131
|
expect(error).not.toBe(null);
|
|
141
132
|
expect(error.message)
|
|
142
133
|
.toEqual("requestMediaKeySystemAccess is not implemented in your browser.");
|
|
143
134
|
});
|
|
144
135
|
|
|
145
136
|
it("should throw if given a single incompatible keySystemsConfigs", async () => {
|
|
146
|
-
const requestMediaKeySystemAccessSpy = jest.fn(() =>
|
|
137
|
+
const requestMediaKeySystemAccessSpy = jest.fn(() => Promise.reject("nope"));
|
|
147
138
|
mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessSpy });
|
|
148
139
|
await checkIncompatibleKeySystemsErrorMessage([{ type: "foo",
|
|
149
140
|
getLicense: neverCalledFn }]);
|
|
@@ -154,7 +145,7 @@ describe("core - eme - global tests - media key system access", () => {
|
|
|
154
145
|
/* eslint-disable max-len */
|
|
155
146
|
it("should change persistentState value if persistentStateRequired is set to true", async () => {
|
|
156
147
|
/* eslint-enable max-len */
|
|
157
|
-
const requestMediaKeySystemAccessSpy = jest.fn(() =>
|
|
148
|
+
const requestMediaKeySystemAccessSpy = jest.fn(() => Promise.reject("nope"));
|
|
158
149
|
mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessSpy });
|
|
159
150
|
await checkIncompatibleKeySystemsErrorMessage([{ type: "foo",
|
|
160
151
|
getLicense: neverCalledFn,
|
|
@@ -170,7 +161,7 @@ describe("core - eme - global tests - media key system access", () => {
|
|
|
170
161
|
/* eslint-disable max-len */
|
|
171
162
|
it("should not change persistentState value if persistentStateRequired is set to false", async () => {
|
|
172
163
|
/* eslint-enable max-len */
|
|
173
|
-
const requestMediaKeySystemAccessSpy = jest.fn(() =>
|
|
164
|
+
const requestMediaKeySystemAccessSpy = jest.fn(() => Promise.reject("nope"));
|
|
174
165
|
mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessSpy });
|
|
175
166
|
await checkIncompatibleKeySystemsErrorMessage([{ type: "foo",
|
|
176
167
|
getLicense: neverCalledFn,
|
|
@@ -182,7 +173,7 @@ describe("core - eme - global tests - media key system access", () => {
|
|
|
182
173
|
/* eslint-disable max-len */
|
|
183
174
|
it("should change distinctiveIdentifier value if distinctiveIdentifierRequired is set to true", async () => {
|
|
184
175
|
/* eslint-enable max-len */
|
|
185
|
-
const requestMediaKeySystemAccessSpy = jest.fn(() =>
|
|
176
|
+
const requestMediaKeySystemAccessSpy = jest.fn(() => Promise.reject("nope"));
|
|
186
177
|
mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessSpy });
|
|
187
178
|
await checkIncompatibleKeySystemsErrorMessage([{
|
|
188
179
|
type: "foo",
|
|
@@ -200,7 +191,7 @@ describe("core - eme - global tests - media key system access", () => {
|
|
|
200
191
|
/* eslint-disable max-len */
|
|
201
192
|
it("should not change distinctiveIdentifier value if distinctiveIdentifierRequired is set to false", async () => {
|
|
202
193
|
/* eslint-enable max-len */
|
|
203
|
-
const requestMediaKeySystemAccessSpy = jest.fn(() =>
|
|
194
|
+
const requestMediaKeySystemAccessSpy = jest.fn(() => Promise.reject("nope"));
|
|
204
195
|
mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessSpy });
|
|
205
196
|
await checkIncompatibleKeySystemsErrorMessage([{
|
|
206
197
|
type: "foo",
|
|
@@ -212,7 +203,7 @@ describe("core - eme - global tests - media key system access", () => {
|
|
|
212
203
|
});
|
|
213
204
|
|
|
214
205
|
it("should do nothing if just licenseStorage is set", async () => {
|
|
215
|
-
const requestMediaKeySystemAccessSpy = jest.fn(() =>
|
|
206
|
+
const requestMediaKeySystemAccessSpy = jest.fn(() => Promise.reject("nope"));
|
|
216
207
|
mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessSpy });
|
|
217
208
|
const licenseStorage = { save() { throw new Error("Should not save."); },
|
|
218
209
|
load() { throw new Error("Should not load."); } };
|
|
@@ -226,7 +217,7 @@ describe("core - eme - global tests - media key system access", () => {
|
|
|
226
217
|
/* eslint-disable max-len */
|
|
227
218
|
it("should want persistent sessions if both persistentLicense and licenseStorage are set", async () => {
|
|
228
219
|
/* eslint-enable max-len */
|
|
229
|
-
const requestMediaKeySystemAccessSpy = jest.fn(() =>
|
|
220
|
+
const requestMediaKeySystemAccessSpy = jest.fn(() => Promise.reject("nope"));
|
|
230
221
|
mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessSpy });
|
|
231
222
|
const licenseStorage = { save() { throw new Error("Should not save."); },
|
|
232
223
|
load() { throw new Error("Should not load."); } };
|
|
@@ -248,7 +239,7 @@ describe("core - eme - global tests - media key system access", () => {
|
|
|
248
239
|
/* eslint-disable max-len */
|
|
249
240
|
it("should want persistent sessions if just persistentLicense is set to true", async () => {
|
|
250
241
|
/* eslint-enable max-len */
|
|
251
|
-
const requestMediaKeySystemAccessSpy = jest.fn(() =>
|
|
242
|
+
const requestMediaKeySystemAccessSpy = jest.fn(() => Promise.reject("nope"));
|
|
252
243
|
mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessSpy });
|
|
253
244
|
await checkIncompatibleKeySystemsErrorMessage([{ type: "foo",
|
|
254
245
|
getLicense: neverCalledFn,
|
|
@@ -264,7 +255,7 @@ describe("core - eme - global tests - media key system access", () => {
|
|
|
264
255
|
});
|
|
265
256
|
|
|
266
257
|
it("should do nothing if persistentLicense is set to false", async () => {
|
|
267
|
-
const requestMediaKeySystemAccessSpy = jest.fn(() =>
|
|
258
|
+
const requestMediaKeySystemAccessSpy = jest.fn(() => Promise.reject("nope"));
|
|
268
259
|
mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessSpy });
|
|
269
260
|
await checkIncompatibleKeySystemsErrorMessage([{ type: "foo",
|
|
270
261
|
getLicense: neverCalledFn,
|
|
@@ -274,7 +265,7 @@ describe("core - eme - global tests - media key system access", () => {
|
|
|
274
265
|
});
|
|
275
266
|
|
|
276
267
|
it("should translate a `clearkey` keySystem", async () => {
|
|
277
|
-
const requestMediaKeySystemAccessSpy = jest.fn(() =>
|
|
268
|
+
const requestMediaKeySystemAccessSpy = jest.fn(() => Promise.reject("nope"));
|
|
278
269
|
mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessSpy });
|
|
279
270
|
await checkIncompatibleKeySystemsErrorMessage([{ type: "clearkey",
|
|
280
271
|
getLicense: neverCalledFn }]);
|
|
@@ -286,7 +277,7 @@ describe("core - eme - global tests - media key system access", () => {
|
|
|
286
277
|
});
|
|
287
278
|
|
|
288
279
|
it("should translate a `widevine` keySystem", async () => {
|
|
289
|
-
const requestMediaKeySystemAccessSpy = jest.fn(() =>
|
|
280
|
+
const requestMediaKeySystemAccessSpy = jest.fn(() => Promise.reject("nope"));
|
|
290
281
|
mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessSpy });
|
|
291
282
|
await checkIncompatibleKeySystemsErrorMessage([{ type: "widevine",
|
|
292
283
|
getLicense: neverCalledFn }]);
|
|
@@ -296,7 +287,7 @@ describe("core - eme - global tests - media key system access", () => {
|
|
|
296
287
|
});
|
|
297
288
|
|
|
298
289
|
it("should translate a `playready` keySystem", async () => {
|
|
299
|
-
const requestMediaKeySystemAccessSpy = jest.fn(() =>
|
|
290
|
+
const requestMediaKeySystemAccessSpy = jest.fn(() => Promise.reject("nope"));
|
|
300
291
|
mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessSpy });
|
|
301
292
|
await checkIncompatibleKeySystemsErrorMessage([{ type: "playready",
|
|
302
293
|
getLicense: neverCalledFn }]);
|
|
@@ -310,7 +301,7 @@ describe("core - eme - global tests - media key system access", () => {
|
|
|
310
301
|
});
|
|
311
302
|
|
|
312
303
|
it("should translate a `fairplay` keySystem", async () => {
|
|
313
|
-
const requestMediaKeySystemAccessSpy = jest.fn(() =>
|
|
304
|
+
const requestMediaKeySystemAccessSpy = jest.fn(() => Promise.reject("nope"));
|
|
314
305
|
mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessSpy });
|
|
315
306
|
await checkIncompatibleKeySystemsErrorMessage([{ type: "fairplay",
|
|
316
307
|
getLicense: neverCalledFn }]);
|
|
@@ -320,7 +311,7 @@ describe("core - eme - global tests - media key system access", () => {
|
|
|
320
311
|
});
|
|
321
312
|
|
|
322
313
|
it("should translate a multiple keySystems at the same time", async () => {
|
|
323
|
-
const requestMediaKeySystemAccessSpy = jest.fn(() =>
|
|
314
|
+
const requestMediaKeySystemAccessSpy = jest.fn(() => Promise.reject("nope"));
|
|
324
315
|
mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessSpy });
|
|
325
316
|
await checkIncompatibleKeySystemsErrorMessage([{ type: "playready",
|
|
326
317
|
getLicense: neverCalledFn },
|
|
@@ -342,7 +333,7 @@ describe("core - eme - global tests - media key system access", () => {
|
|
|
342
333
|
/* eslint-disable max-len */
|
|
343
334
|
it("should translate a multiple keySystems at the same time with different configs", async () => {
|
|
344
335
|
/* eslint-enable max-len */
|
|
345
|
-
const requestMediaKeySystemAccessSpy = jest.fn(() =>
|
|
336
|
+
const requestMediaKeySystemAccessSpy = jest.fn(() => Promise.reject("nope"));
|
|
346
337
|
mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessSpy });
|
|
347
338
|
await checkIncompatibleKeySystemsErrorMessage([{ type: "playready",
|
|
348
339
|
persistentLicense: true,
|
|
@@ -375,7 +366,7 @@ describe("core - eme - global tests - media key system access", () => {
|
|
|
375
366
|
/* eslint-disable max-len */
|
|
376
367
|
it("should set widevine robustnesses for a `com.widevine.alpha` keySystem", async () => {
|
|
377
368
|
/* eslint-enable max-len */
|
|
378
|
-
const requestMediaKeySystemAccessSpy = jest.fn(() =>
|
|
369
|
+
const requestMediaKeySystemAccessSpy = jest.fn(() => Promise.reject("nope"));
|
|
379
370
|
mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessSpy });
|
|
380
371
|
await checkIncompatibleKeySystemsErrorMessage([{ type: "playready",
|
|
381
372
|
persistentLicense: true,
|
|
@@ -416,20 +407,17 @@ describe("core - eme - global tests - media key system access", () => {
|
|
|
416
407
|
getLicense: neverCalledFn }];
|
|
417
408
|
|
|
418
409
|
const mediaElement = document.createElement("video");
|
|
419
|
-
const
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
(
|
|
428
|
-
);
|
|
429
|
-
|
|
430
|
-
expect(requestMediaKeySystemAccessSpy)
|
|
431
|
-
.toHaveBeenCalledWith("com.widevine.alpha", defaultWidevineConfig);
|
|
432
|
-
res();
|
|
410
|
+
const ContentDecryptor = require("../../content_decryptor").default;
|
|
411
|
+
const contentDecryptor = new ContentDecryptor(mediaElement, config);
|
|
412
|
+
contentDecryptor.addEventListener("error", (error: any) => {
|
|
413
|
+
rej(error);
|
|
414
|
+
});
|
|
415
|
+
setTimeout(() => {
|
|
416
|
+
expect(requestMediaKeySystemAccessSpy).toHaveBeenCalledTimes(1);
|
|
417
|
+
expect(requestMediaKeySystemAccessSpy)
|
|
418
|
+
.toHaveBeenCalledWith("com.widevine.alpha", defaultWidevineConfig);
|
|
419
|
+
res();
|
|
420
|
+
}, 10);
|
|
433
421
|
});
|
|
434
422
|
});
|
|
435
423
|
|
|
@@ -442,7 +430,7 @@ describe("core - eme - global tests - media key system access", () => {
|
|
|
442
430
|
if (++callNb === 2) {
|
|
443
431
|
return requestMediaKeySystemAccessNoMediaKeys(keyType, conf);
|
|
444
432
|
}
|
|
445
|
-
return
|
|
433
|
+
return Promise.reject("nope");
|
|
446
434
|
});
|
|
447
435
|
mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessSpy });
|
|
448
436
|
const config = [{ type: "com.widevine.alpha",
|
|
@@ -451,55 +439,74 @@ describe("core - eme - global tests - media key system access", () => {
|
|
|
451
439
|
getLicense: neverCalledFn }];
|
|
452
440
|
|
|
453
441
|
const mediaElement = document.createElement("video");
|
|
454
|
-
const
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
(
|
|
463
|
-
)
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
expect(requestMediaKeySystemAccessSpy)
|
|
468
|
-
.toHaveBeenNthCalledWith(2, "some-other-working-key-system", defaultKSConfig);
|
|
469
|
-
res();
|
|
442
|
+
const ContentDecryptor = require("../../content_decryptor").default;
|
|
443
|
+
const contentDecryptor = new ContentDecryptor(mediaElement, config);
|
|
444
|
+
contentDecryptor.addEventListener("error", (error: any) => {
|
|
445
|
+
rej(error);
|
|
446
|
+
});
|
|
447
|
+
setTimeout(() => {
|
|
448
|
+
expect(requestMediaKeySystemAccessSpy).toHaveBeenCalledTimes(2);
|
|
449
|
+
expect(requestMediaKeySystemAccessSpy)
|
|
450
|
+
.toHaveBeenNthCalledWith(1, "com.widevine.alpha", defaultWidevineConfig);
|
|
451
|
+
expect(requestMediaKeySystemAccessSpy)
|
|
452
|
+
.toHaveBeenNthCalledWith(2, "some-other-working-key-system", defaultKSConfig);
|
|
453
|
+
res();
|
|
454
|
+
}, 10);
|
|
470
455
|
});
|
|
471
456
|
});
|
|
472
457
|
|
|
473
|
-
|
|
458
|
+
it("should not continue to check if the ContentDecryptor is disposed from", () => {
|
|
474
459
|
return new Promise<void>((res, rej) => {
|
|
475
|
-
|
|
460
|
+
let contentDecryptor : any = null;
|
|
476
461
|
let rmksHasBeenCalled = false;
|
|
477
462
|
const requestMediaKeySystemAccessSpy = jest.fn(() => {
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
killSubject$.complete();
|
|
484
|
-
return observableThrow(() => "nope");
|
|
463
|
+
return Promise.resolve().then(() => {
|
|
464
|
+
rmksHasBeenCalled = true;
|
|
465
|
+
contentDecryptor.dispose();
|
|
466
|
+
return Promise.reject("nope");
|
|
467
|
+
});
|
|
485
468
|
});
|
|
486
469
|
mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessSpy });
|
|
487
470
|
const mediaElement = document.createElement("video");
|
|
488
|
-
const
|
|
471
|
+
const ContentDecryptor = require("../../content_decryptor").default;
|
|
489
472
|
|
|
490
473
|
const config = [ { type: "foo", getLicense: neverCalledFn },
|
|
491
474
|
{ type: "bar", getLicense: neverCalledFn },
|
|
492
475
|
{ type: "baz", getLicense: neverCalledFn } ];
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
);
|
|
476
|
+
contentDecryptor = new ContentDecryptor(mediaElement, config);
|
|
477
|
+
contentDecryptor.addEventListener("error", (error: any) => {
|
|
478
|
+
rej(error);
|
|
479
|
+
});
|
|
480
|
+
setTimeout(() => {
|
|
481
|
+
expect(rmksHasBeenCalled).toEqual(true);
|
|
482
|
+
expect(requestMediaKeySystemAccessSpy).toHaveBeenCalledTimes(1);
|
|
483
|
+
expect(requestMediaKeySystemAccessSpy)
|
|
484
|
+
.toHaveBeenNthCalledWith(1, "foo", defaultKSConfig);
|
|
485
|
+
res();
|
|
486
|
+
}, 10);
|
|
487
|
+
});
|
|
488
|
+
});
|
|
489
|
+
|
|
490
|
+
it("should trigger error even if requestMediaKeySystemAccess throws", () => {
|
|
491
|
+
return new Promise<void>((res, rej) => {
|
|
492
|
+
let rmksHasBeenCalled = false;
|
|
493
|
+
const requestMediaKeySystemAccessSpy = jest.fn(() => {
|
|
494
|
+
rmksHasBeenCalled = true;
|
|
495
|
+
throw new Error("nope");
|
|
496
|
+
});
|
|
497
|
+
mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessSpy });
|
|
498
|
+
const mediaElement = document.createElement("video");
|
|
499
|
+
const ContentDecryptor = require("../../content_decryptor").default;
|
|
500
|
+
|
|
501
|
+
const config = [{ type: "foo", getLicense: neverCalledFn }];
|
|
502
|
+
const contentDecryptor = new ContentDecryptor(mediaElement, config);
|
|
503
|
+
contentDecryptor.addEventListener("error", () => {
|
|
504
|
+
expect(rmksHasBeenCalled).toEqual(true);
|
|
505
|
+
res();
|
|
506
|
+
});
|
|
507
|
+
setTimeout(() => {
|
|
508
|
+
rej(new Error("timeout exceeded"));
|
|
509
|
+
}, 10);
|
|
503
510
|
});
|
|
504
511
|
});
|
|
505
512
|
});
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2015 CANAL+ Group
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
18
|
+
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
19
|
+
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
20
|
+
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
|
21
|
+
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
22
|
+
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
23
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
24
|
+
/* eslint-disable no-restricted-properties */
|
|
25
|
+
|
|
26
|
+
import {
|
|
27
|
+
MediaKeysImpl,
|
|
28
|
+
mockCompat,
|
|
29
|
+
testContentDecryptorError,
|
|
30
|
+
} from "./utils";
|
|
31
|
+
|
|
32
|
+
describe("core - decrypt - global tests - media key system access", () => {
|
|
33
|
+
/** Used to implement every functions that should never be called. */
|
|
34
|
+
const neverCalledFn = jest.fn();
|
|
35
|
+
|
|
36
|
+
/** Default video element used in our tests. */
|
|
37
|
+
const videoElt = document.createElement("video");
|
|
38
|
+
|
|
39
|
+
/** Default keySystems configuration used in our tests. */
|
|
40
|
+
const ksConfig = [{ type: "com.widevine.alpha", getLicense: neverCalledFn }];
|
|
41
|
+
|
|
42
|
+
beforeEach(() => {
|
|
43
|
+
jest.resetModules();
|
|
44
|
+
jest.restoreAllMocks();
|
|
45
|
+
jest.mock("../../set_server_certificate", () => ({ __esModule: true as const,
|
|
46
|
+
default: neverCalledFn }));
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
afterEach(() => {
|
|
50
|
+
expect(neverCalledFn).not.toHaveBeenCalled();
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it("should throw if createMediaKeys throws", async () => {
|
|
54
|
+
// == mocks ==
|
|
55
|
+
function requestMediaKeySystemAccessBadMediaKeys(
|
|
56
|
+
keySystem : string,
|
|
57
|
+
conf : MediaKeySystemConfiguration[]
|
|
58
|
+
) {
|
|
59
|
+
return Promise.resolve({ keySystem,
|
|
60
|
+
getConfiguration() { return conf; },
|
|
61
|
+
createMediaKeys() { throw new Error("No non no"); } });
|
|
62
|
+
}
|
|
63
|
+
mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessBadMediaKeys });
|
|
64
|
+
|
|
65
|
+
// == test ==
|
|
66
|
+
const ContentDecryptor = require("../../content_decryptor").default;
|
|
67
|
+
const error : any =
|
|
68
|
+
await testContentDecryptorError(ContentDecryptor, videoElt, ksConfig);
|
|
69
|
+
expect(error).toBeInstanceOf(Error);
|
|
70
|
+
expect(error.message).toEqual(
|
|
71
|
+
"EncryptedMediaError (CREATE_MEDIA_KEYS_ERROR) No non no"
|
|
72
|
+
);
|
|
73
|
+
expect(error.name).toEqual("EncryptedMediaError");
|
|
74
|
+
expect(error.code).toEqual("CREATE_MEDIA_KEYS_ERROR");
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it("should throw if createMediaKeys rejects", async () => {
|
|
78
|
+
// == mocks ==
|
|
79
|
+
function requestMediaKeySystemAccessRejMediaKeys(
|
|
80
|
+
keySystem : string,
|
|
81
|
+
conf : MediaKeySystemConfiguration[]
|
|
82
|
+
) {
|
|
83
|
+
return Promise.resolve({
|
|
84
|
+
keySystem,
|
|
85
|
+
getConfiguration: () => conf,
|
|
86
|
+
createMediaKeys: () => Promise.reject(new Error("No non no")),
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
mockCompat({ requestMediaKeySystemAccess: requestMediaKeySystemAccessRejMediaKeys });
|
|
90
|
+
|
|
91
|
+
// == test ==
|
|
92
|
+
const ContentDecryptor = require("../../content_decryptor").default;
|
|
93
|
+
const error : any =
|
|
94
|
+
await testContentDecryptorError(ContentDecryptor, videoElt, ksConfig);
|
|
95
|
+
expect(error).toBeInstanceOf(Error);
|
|
96
|
+
expect(error.message).toEqual(
|
|
97
|
+
"EncryptedMediaError (CREATE_MEDIA_KEYS_ERROR) No non no"
|
|
98
|
+
);
|
|
99
|
+
expect(error.name).toEqual("EncryptedMediaError");
|
|
100
|
+
expect(error.code).toEqual("CREATE_MEDIA_KEYS_ERROR");
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
/* eslint-disable max-len */
|
|
104
|
+
it("should go into the WaitingForAttachment state if createMediaKeys resolves", () => {
|
|
105
|
+
/* eslint-enable max-len */
|
|
106
|
+
return new Promise<void>((res, rej) => {
|
|
107
|
+
mockCompat({});
|
|
108
|
+
const { ContentDecryptorState } = require("../../content_decryptor");
|
|
109
|
+
const ContentDecryptor = require("../../content_decryptor").default;
|
|
110
|
+
const contentDecryptor = new ContentDecryptor(videoElt, ksConfig);
|
|
111
|
+
let receivedStateChange = 0;
|
|
112
|
+
contentDecryptor.addEventListener("stateChange", (newState: any) => {
|
|
113
|
+
receivedStateChange++;
|
|
114
|
+
try {
|
|
115
|
+
expect(newState).toEqual(ContentDecryptorState.WaitingForAttachment);
|
|
116
|
+
} catch (err) { rej(err); }
|
|
117
|
+
setTimeout(() => {
|
|
118
|
+
try {
|
|
119
|
+
expect(receivedStateChange).toEqual(1);
|
|
120
|
+
expect(contentDecryptor.getState())
|
|
121
|
+
.toEqual(ContentDecryptorState.WaitingForAttachment);
|
|
122
|
+
contentDecryptor.dispose();
|
|
123
|
+
} catch (err) { rej(err); }
|
|
124
|
+
res();
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
/* eslint-disable max-len */
|
|
131
|
+
it("should not create any session if no encrypted event was received", (done) => {
|
|
132
|
+
/* eslint-enable max-len */
|
|
133
|
+
|
|
134
|
+
// == mocks ==
|
|
135
|
+
const setMediaKeysSpy = jest.fn(() => Promise.resolve());
|
|
136
|
+
mockCompat({ setMediaKeys: setMediaKeysSpy });
|
|
137
|
+
const createSessionSpy = jest.spyOn(MediaKeysImpl.prototype, "createSession");
|
|
138
|
+
|
|
139
|
+
// == test ==
|
|
140
|
+
const { ContentDecryptorState } = require("../../content_decryptor");
|
|
141
|
+
const ContentDecryptor = require("../../content_decryptor").default;
|
|
142
|
+
const contentDecryptor = new ContentDecryptor(videoElt, ksConfig);
|
|
143
|
+
contentDecryptor.addEventListener("stateChange", (newState: any) => {
|
|
144
|
+
if (newState === ContentDecryptorState.WaitingForAttachment) {
|
|
145
|
+
contentDecryptor.removeEventListener("stateChange");
|
|
146
|
+
contentDecryptor.attach();
|
|
147
|
+
setTimeout(() => {
|
|
148
|
+
expect(setMediaKeysSpy).toHaveBeenCalledTimes(1);
|
|
149
|
+
expect(setMediaKeysSpy).toHaveBeenCalledWith(videoElt, new MediaKeysImpl());
|
|
150
|
+
expect(createSessionSpy).not.toHaveBeenCalled();
|
|
151
|
+
done();
|
|
152
|
+
}, 5);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
});
|