@amazon/vinyl 1.2.0 → 1.2.2
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/dist/index.cjs +24 -6
- package/dist/index.cjs.map +2 -2
- package/dist/index.js +33 -13
- package/dist/index.js.map +3 -3
- package/dist/test/integ.es5.js +62 -62
- package/dist/test/integ.js +119 -6
- package/dist/test/integ.js.map +2 -2
- package/dist/types/current/ad/AdBreakInfo.d.ts +160 -0
- package/dist/types/current/ad/AdBreakInfo.d.ts.map +1 -0
- package/dist/types/current/ad/AdBreakInfo.js +5 -0
- package/dist/types/current/ad/AdController.d.ts +229 -0
- package/dist/types/current/ad/AdController.d.ts.map +1 -0
- package/dist/types/current/ad/AdController.js +19 -0
- package/dist/types/current/ad/AdControllerImpl.d.ts +162 -0
- package/dist/types/current/ad/AdControllerImpl.d.ts.map +1 -0
- package/dist/types/current/ad/AdControllerImpl.js +741 -0
- package/dist/types/current/ad/AdError.d.ts +6 -0
- package/dist/types/current/ad/AdError.d.ts.map +1 -0
- package/dist/types/current/ad/AdError.js +14 -0
- package/dist/types/current/ad/AdsProvider.d.ts +28 -0
- package/dist/types/current/ad/AdsProvider.d.ts.map +1 -0
- package/dist/types/current/ad/AdsProvider.js +5 -0
- package/dist/types/current/ad/defaultAdLoadOptionsResolver.d.ts +12 -0
- package/dist/types/current/ad/defaultAdLoadOptionsResolver.d.ts.map +1 -0
- package/dist/types/current/ad/defaultAdLoadOptionsResolver.js +26 -0
- package/dist/types/current/ad/discoverHlsInterstitials.d.ts +22 -0
- package/dist/types/current/ad/discoverHlsInterstitials.d.ts.map +1 -0
- package/dist/types/current/ad/discoverHlsInterstitials.js +248 -0
- package/dist/types/current/drm/DrmControllerImpl.d.ts +6 -0
- package/dist/types/current/drm/DrmControllerImpl.d.ts.map +1 -1
- package/dist/types/current/drm/DrmControllerImpl.js +23 -1
- package/dist/types/current/playback/PlaybackControllerImpl.d.ts +1 -1
- package/dist/types/current/playback/createStallDetector.d.ts +43 -0
- package/dist/types/current/playback/createStallDetector.d.ts.map +1 -0
- package/dist/types/current/playback/createStallDetector.js +101 -0
- package/dist/types/current/playback/createStallMonitor.d.ts +45 -0
- package/dist/types/current/playback/createStallMonitor.d.ts.map +1 -0
- package/dist/types/current/playback/createStallMonitor.js +99 -0
- package/dist/types/current/streaming/AudioOptions.d.ts +66 -0
- package/dist/types/current/streaming/AudioOptions.d.ts.map +1 -0
- package/dist/types/current/streaming/AudioOptions.js +19 -0
- package/dist/types/current/streaming/LoadMetric.d.ts +72 -0
- package/dist/types/current/streaming/LoadMetric.d.ts.map +1 -0
- package/dist/types/current/streaming/LoadMetric.js +5 -0
- package/dist/types/current/streaming/ManifestControllerImpl.d.ts +43 -0
- package/dist/types/current/streaming/ManifestControllerImpl.d.ts.map +1 -0
- package/dist/types/current/streaming/ManifestControllerImpl.js +104 -0
- package/dist/types/current/streaming/buffering/codecDenylist.d.ts +23 -0
- package/dist/types/current/streaming/buffering/codecDenylist.d.ts.map +1 -0
- package/dist/types/current/streaming/buffering/codecDenylist.js +62 -0
- package/dist/types/current/streaming/createAllowedContentTypesValue.d.ts +30 -0
- package/dist/types/current/streaming/createAllowedContentTypesValue.d.ts.map +1 -0
- package/dist/types/current/streaming/createAllowedContentTypesValue.js +43 -0
- package/dist/types/current/streaming/createTimelineContentTypesValue.d.ts +21 -0
- package/dist/types/current/streaming/createTimelineContentTypesValue.d.ts.map +1 -0
- package/dist/types/current/streaming/createTimelineContentTypesValue.js +25 -0
- package/dist/types/current/streaming/mediaTimelineAccessibilityFilter.d.ts +35 -0
- package/dist/types/current/streaming/mediaTimelineAccessibilityFilter.d.ts.map +1 -0
- package/dist/types/current/streaming/mediaTimelineAccessibilityFilter.js +75 -0
- package/dist/types/current/text/HtmlTextTrackRenderer.d.ts +60 -0
- package/dist/types/current/text/HtmlTextTrackRenderer.d.ts.map +1 -0
- package/dist/types/current/text/HtmlTextTrackRenderer.js +231 -0
- package/dist/types/current/text/SidecarTextTrackController.d.ts +103 -0
- package/dist/types/current/text/SidecarTextTrackController.d.ts.map +1 -0
- package/dist/types/current/text/SidecarTextTrackController.js +250 -0
- package/dist/types/current/text/SidecarTextTrackLoader.d.ts +65 -0
- package/dist/types/current/text/SidecarTextTrackLoader.d.ts.map +1 -0
- package/dist/types/current/text/SidecarTextTrackLoader.js +150 -0
- package/dist/types/current/text/TextTrack.d.ts +179 -0
- package/dist/types/current/text/TextTrack.d.ts.map +1 -0
- package/dist/types/current/text/TextTrack.js +29 -0
- package/dist/types/current/text/TextTrackRenderer.d.ts +24 -0
- package/dist/types/current/text/TextTrackRenderer.d.ts.map +1 -0
- package/dist/types/current/text/TextTrackRenderer.js +5 -0
- package/dist/types/current/text/VttCueStyle.d.ts +41 -0
- package/dist/types/current/text/VttCueStyle.d.ts.map +1 -0
- package/dist/types/current/text/VttCueStyle.js +45 -0
- package/dist/types/current/text/discoverDashTextTracks.d.ts +24 -0
- package/dist/types/current/text/discoverDashTextTracks.d.ts.map +1 -0
- package/dist/types/current/text/discoverDashTextTracks.js +110 -0
- package/dist/types/current/text/discoverHlsTextTracks.d.ts +19 -0
- package/dist/types/current/text/discoverHlsTextTracks.d.ts.map +1 -0
- package/dist/types/current/text/discoverHlsTextTracks.js +49 -0
- package/dist/types/current/text/mediaTextTrackProvider.d.ts +34 -0
- package/dist/types/current/text/mediaTextTrackProvider.d.ts.map +1 -0
- package/dist/types/current/text/mediaTextTrackProvider.js +42 -0
- package/dist/types/current/text/parseWebVtt.d.ts +60 -0
- package/dist/types/current/text/parseWebVtt.d.ts.map +1 -0
- package/dist/types/current/text/parseWebVtt.js +249 -0
- package/dist/types/current/text/pickPreferredTextTrack.d.ts +15 -0
- package/dist/types/current/text/pickPreferredTextTrack.d.ts.map +1 -0
- package/dist/types/current/text/pickPreferredTextTrack.js +71 -0
- package/dist/types/current/track/SeekRange.d.ts +9 -0
- package/dist/types/current/track/SeekRange.d.ts.map +1 -0
- package/dist/types/current/track/SeekRange.js +5 -0
- package/dist/types/current/track/hls/HlsManifestData.d.ts +19 -0
- package/dist/types/current/track/hls/HlsManifestData.d.ts.map +1 -0
- package/dist/types/current/track/hls/HlsManifestData.js +5 -0
- package/dist/types/current/track/hls/createHlsManifestProvider.d.ts +6 -0
- package/dist/types/current/track/hls/createHlsManifestProvider.d.ts.map +1 -0
- package/dist/types/current/track/hls/createHlsManifestProvider.js +9 -0
- package/dist/types/current/track/inferLoadOptionsFromUri.d.ts +15 -0
- package/dist/types/current/track/inferLoadOptionsFromUri.d.ts.map +1 -0
- package/dist/types/current/track/inferLoadOptionsFromUri.js +55 -0
- package/dist/types/current/track/mse/MseTrack.d.ts +0 -1
- package/dist/types/current/track/mse/MseTrack.d.ts.map +1 -1
- package/dist/types/current/track/mse/MseTrack.js +4 -5
- package/dist/types/current/tsconfig.tsbuildinfo +1 -1
- package/dist/types/current/util/media/codecOverrides.d.ts +33 -0
- package/dist/types/current/util/media/codecOverrides.d.ts.map +1 -0
- package/dist/types/current/util/media/codecOverrides.js +37 -0
- package/dist/types/current/util/media/codecSupport.d.ts +6 -0
- package/dist/types/current/util/media/codecSupport.d.ts.map +1 -0
- package/dist/types/current/util/media/codecSupport.js +17 -0
- package/dist/types/current/util/media/mimeType.d.ts +8 -0
- package/dist/types/current/util/media/mimeType.d.ts.map +1 -0
- package/dist/types/current/util/media/mimeType.js +13 -0
- package/dist/types/ts3.7/ad/AdBreakInfo.d.ts +160 -0
- package/dist/types/ts3.7/ad/AdController.d.ts +243 -0
- package/dist/types/ts3.7/ad/AdControllerImpl.d.ts +162 -0
- package/dist/types/ts3.7/ad/AdError.d.ts +6 -0
- package/dist/types/ts3.7/ad/AdsProvider.d.ts +28 -0
- package/dist/types/ts3.7/ad/defaultAdLoadOptionsResolver.d.ts +12 -0
- package/dist/types/ts3.7/ad/discoverHlsInterstitials.d.ts +22 -0
- package/dist/types/ts3.7/drm/DrmControllerImpl.d.ts +6 -0
- package/dist/types/ts3.7/playback/PlaybackControllerImpl.d.ts +1 -1
- package/dist/types/ts3.7/playback/createStallDetector.d.ts +43 -0
- package/dist/types/ts3.7/playback/createStallMonitor.d.ts +45 -0
- package/dist/types/ts3.7/streaming/AudioOptions.d.ts +66 -0
- package/dist/types/ts3.7/streaming/LoadMetric.d.ts +72 -0
- package/dist/types/ts3.7/streaming/ManifestControllerImpl.d.ts +40 -0
- package/dist/types/ts3.7/streaming/buffering/codecDenylist.d.ts +23 -0
- package/dist/types/ts3.7/streaming/createAllowedContentTypesValue.d.ts +30 -0
- package/dist/types/ts3.7/streaming/createTimelineContentTypesValue.d.ts +21 -0
- package/dist/types/ts3.7/streaming/mediaTimelineAccessibilityFilter.d.ts +35 -0
- package/dist/types/ts3.7/text/HtmlTextTrackRenderer.d.ts +60 -0
- package/dist/types/ts3.7/text/SidecarTextTrackController.d.ts +103 -0
- package/dist/types/ts3.7/text/SidecarTextTrackLoader.d.ts +65 -0
- package/dist/types/ts3.7/text/TextTrack.d.ts +183 -0
- package/dist/types/ts3.7/text/TextTrackRenderer.d.ts +24 -0
- package/dist/types/ts3.7/text/VttCueStyle.d.ts +41 -0
- package/dist/types/ts3.7/text/discoverDashTextTracks.d.ts +24 -0
- package/dist/types/ts3.7/text/discoverHlsTextTracks.d.ts +19 -0
- package/dist/types/ts3.7/text/mediaTextTrackProvider.d.ts +34 -0
- package/dist/types/ts3.7/text/parseWebVtt.d.ts +60 -0
- package/dist/types/ts3.7/text/pickPreferredTextTrack.d.ts +15 -0
- package/dist/types/ts3.7/track/SeekRange.d.ts +9 -0
- package/dist/types/ts3.7/track/hls/HlsManifestData.d.ts +19 -0
- package/dist/types/ts3.7/track/hls/createHlsManifestProvider.d.ts +6 -0
- package/dist/types/ts3.7/track/inferLoadOptionsFromUri.d.ts +15 -0
- package/dist/types/ts3.7/track/mse/MseTrack.d.ts +0 -1
- package/dist/types/ts3.7/util/media/codecOverrides.d.ts +33 -0
- package/dist/types/ts3.7/util/media/codecSupport.d.ts +6 -0
- package/dist/types/ts3.7/util/media/mimeType.d.ts +8 -0
- package/dist/types/ts4.1/ad/AdBreakInfo.d.ts +160 -0
- package/dist/types/ts4.1/ad/AdController.d.ts +243 -0
- package/dist/types/ts4.1/ad/AdControllerImpl.d.ts +162 -0
- package/dist/types/ts4.1/ad/AdError.d.ts +6 -0
- package/dist/types/ts4.1/ad/AdsProvider.d.ts +28 -0
- package/dist/types/ts4.1/ad/defaultAdLoadOptionsResolver.d.ts +12 -0
- package/dist/types/ts4.1/ad/discoverHlsInterstitials.d.ts +22 -0
- package/dist/types/ts4.1/drm/DrmControllerImpl.d.ts +6 -0
- package/dist/types/ts4.1/playback/PlaybackControllerImpl.d.ts +1 -1
- package/dist/types/ts4.1/playback/createStallDetector.d.ts +43 -0
- package/dist/types/ts4.1/playback/createStallMonitor.d.ts +45 -0
- package/dist/types/ts4.1/streaming/AudioOptions.d.ts +66 -0
- package/dist/types/ts4.1/streaming/LoadMetric.d.ts +72 -0
- package/dist/types/ts4.1/streaming/ManifestControllerImpl.d.ts +40 -0
- package/dist/types/ts4.1/streaming/buffering/codecDenylist.d.ts +23 -0
- package/dist/types/ts4.1/streaming/createAllowedContentTypesValue.d.ts +30 -0
- package/dist/types/ts4.1/streaming/createTimelineContentTypesValue.d.ts +21 -0
- package/dist/types/ts4.1/streaming/mediaTimelineAccessibilityFilter.d.ts +35 -0
- package/dist/types/ts4.1/text/HtmlTextTrackRenderer.d.ts +60 -0
- package/dist/types/ts4.1/text/SidecarTextTrackController.d.ts +104 -0
- package/dist/types/ts4.1/text/SidecarTextTrackLoader.d.ts +65 -0
- package/dist/types/ts4.1/text/TextTrack.d.ts +183 -0
- package/dist/types/ts4.1/text/TextTrackRenderer.d.ts +24 -0
- package/dist/types/ts4.1/text/VttCueStyle.d.ts +41 -0
- package/dist/types/ts4.1/text/discoverDashTextTracks.d.ts +24 -0
- package/dist/types/ts4.1/text/discoverHlsTextTracks.d.ts +19 -0
- package/dist/types/ts4.1/text/mediaTextTrackProvider.d.ts +34 -0
- package/dist/types/ts4.1/text/parseWebVtt.d.ts +60 -0
- package/dist/types/ts4.1/text/pickPreferredTextTrack.d.ts +15 -0
- package/dist/types/ts4.1/track/SeekRange.d.ts +9 -0
- package/dist/types/ts4.1/track/hls/HlsManifestData.d.ts +19 -0
- package/dist/types/ts4.1/track/hls/createHlsManifestProvider.d.ts +6 -0
- package/dist/types/ts4.1/track/inferLoadOptionsFromUri.d.ts +15 -0
- package/dist/types/ts4.1/track/mse/MseTrack.d.ts +0 -1
- package/dist/types/ts4.1/util/media/codecOverrides.d.ts +33 -0
- package/dist/types/ts4.1/util/media/codecSupport.d.ts +6 -0
- package/dist/types/ts4.1/util/media/mimeType.d.ts +8 -0
- package/dist/types/ts4.7/ad/AdBreakInfo.d.ts +160 -0
- package/dist/types/ts4.7/ad/AdController.d.ts +243 -0
- package/dist/types/ts4.7/ad/AdControllerImpl.d.ts +162 -0
- package/dist/types/ts4.7/ad/AdError.d.ts +6 -0
- package/dist/types/ts4.7/ad/AdsProvider.d.ts +28 -0
- package/dist/types/ts4.7/ad/defaultAdLoadOptionsResolver.d.ts +12 -0
- package/dist/types/ts4.7/ad/discoverHlsInterstitials.d.ts +22 -0
- package/dist/types/ts4.7/drm/DrmControllerImpl.d.ts +6 -0
- package/dist/types/ts4.7/playback/PlaybackControllerImpl.d.ts +1 -1
- package/dist/types/ts4.7/playback/createStallDetector.d.ts +43 -0
- package/dist/types/ts4.7/playback/createStallMonitor.d.ts +45 -0
- package/dist/types/ts4.7/streaming/AudioOptions.d.ts +66 -0
- package/dist/types/ts4.7/streaming/LoadMetric.d.ts +72 -0
- package/dist/types/ts4.7/streaming/ManifestControllerImpl.d.ts +43 -0
- package/dist/types/ts4.7/streaming/buffering/codecDenylist.d.ts +23 -0
- package/dist/types/ts4.7/streaming/createAllowedContentTypesValue.d.ts +30 -0
- package/dist/types/ts4.7/streaming/createTimelineContentTypesValue.d.ts +21 -0
- package/dist/types/ts4.7/streaming/mediaTimelineAccessibilityFilter.d.ts +35 -0
- package/dist/types/ts4.7/text/HtmlTextTrackRenderer.d.ts +60 -0
- package/dist/types/ts4.7/text/SidecarTextTrackController.d.ts +103 -0
- package/dist/types/ts4.7/text/SidecarTextTrackLoader.d.ts +65 -0
- package/dist/types/ts4.7/text/TextTrack.d.ts +183 -0
- package/dist/types/ts4.7/text/TextTrackRenderer.d.ts +24 -0
- package/dist/types/ts4.7/text/VttCueStyle.d.ts +41 -0
- package/dist/types/ts4.7/text/discoverDashTextTracks.d.ts +24 -0
- package/dist/types/ts4.7/text/discoverHlsTextTracks.d.ts +19 -0
- package/dist/types/ts4.7/text/mediaTextTrackProvider.d.ts +34 -0
- package/dist/types/ts4.7/text/parseWebVtt.d.ts +60 -0
- package/dist/types/ts4.7/text/pickPreferredTextTrack.d.ts +15 -0
- package/dist/types/ts4.7/track/SeekRange.d.ts +9 -0
- package/dist/types/ts4.7/track/hls/HlsManifestData.d.ts +19 -0
- package/dist/types/ts4.7/track/hls/createHlsManifestProvider.d.ts +6 -0
- package/dist/types/ts4.7/track/inferLoadOptionsFromUri.d.ts +15 -0
- package/dist/types/ts4.7/track/mse/MseTrack.d.ts +0 -1
- package/dist/types/ts4.7/util/media/codecOverrides.d.ts +33 -0
- package/dist/types/ts4.7/util/media/codecSupport.d.ts +6 -0
- package/dist/types/ts4.7/util/media/mimeType.d.ts +8 -0
- package/dist/unit/types/current/ad/AdController.test.d.ts +2 -0
- package/dist/unit/types/current/ad/AdController.test.d.ts.map +1 -0
- package/dist/unit/types/current/ad/AdController.test.js +10 -0
- package/dist/unit/types/current/ad/AdControllerImpl.test.d.ts +2 -0
- package/dist/unit/types/current/ad/AdControllerImpl.test.d.ts.map +1 -0
- package/dist/unit/types/current/ad/AdControllerImpl.test.js +1654 -0
- package/dist/unit/types/current/ad/defaultAdLoadOptionsResolver.test.d.ts +2 -0
- package/dist/unit/types/current/ad/defaultAdLoadOptionsResolver.test.d.ts.map +1 -0
- package/dist/unit/types/current/ad/defaultAdLoadOptionsResolver.test.js +56 -0
- package/dist/unit/types/current/ad/discoverHlsInterstitials.test.d.ts +2 -0
- package/dist/unit/types/current/ad/discoverHlsInterstitials.test.d.ts.map +1 -0
- package/dist/unit/types/current/ad/discoverHlsInterstitials.test.js +757 -0
- package/dist/unit/types/current/drm/DrmControllerImpl.test.js +96 -2
- package/dist/unit/types/current/playback/createStallDetector.test.d.ts +2 -0
- package/dist/unit/types/current/playback/createStallDetector.test.d.ts.map +1 -0
- package/dist/unit/types/current/playback/createStallDetector.test.js +163 -0
- package/dist/unit/types/current/playback/createStallMonitor.test.d.ts +2 -0
- package/dist/unit/types/current/playback/createStallMonitor.test.d.ts.map +1 -0
- package/dist/unit/types/current/playback/createStallMonitor.test.js +163 -0
- package/dist/unit/types/current/streaming/ManifestControllerImpl.test.d.ts +2 -0
- package/dist/unit/types/current/streaming/ManifestControllerImpl.test.d.ts.map +1 -0
- package/dist/unit/types/current/streaming/ManifestControllerImpl.test.js +197 -0
- package/dist/unit/types/current/streaming/MseTrack.test.js +15 -0
- package/dist/unit/types/current/streaming/buffering/codecDenylist.test.d.ts +2 -0
- package/dist/unit/types/current/streaming/buffering/codecDenylist.test.d.ts.map +1 -0
- package/dist/unit/types/current/streaming/buffering/codecDenylist.test.js +56 -0
- package/dist/unit/types/current/streaming/createAllowedContentTypesValue.test.d.ts +2 -0
- package/dist/unit/types/current/streaming/createAllowedContentTypesValue.test.d.ts.map +1 -0
- package/dist/unit/types/current/streaming/createAllowedContentTypesValue.test.js +77 -0
- package/dist/unit/types/current/streaming/createTimelineContentTypesValue.test.d.ts +2 -0
- package/dist/unit/types/current/streaming/createTimelineContentTypesValue.test.d.ts.map +1 -0
- package/dist/unit/types/current/streaming/createTimelineContentTypesValue.test.js +57 -0
- package/dist/unit/types/current/streaming/mediaTimelineAccessibilityFilter.test.d.ts +2 -0
- package/dist/unit/types/current/streaming/mediaTimelineAccessibilityFilter.test.d.ts.map +1 -0
- package/dist/unit/types/current/streaming/mediaTimelineAccessibilityFilter.test.js +99 -0
- package/dist/unit/types/current/text/HtmlTextTrackRenderer.test.d.ts +2 -0
- package/dist/unit/types/current/text/HtmlTextTrackRenderer.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/HtmlTextTrackRenderer.test.js +231 -0
- package/dist/unit/types/current/text/SidecarTextTrackController.test.d.ts +2 -0
- package/dist/unit/types/current/text/SidecarTextTrackController.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/SidecarTextTrackController.test.js +686 -0
- package/dist/unit/types/current/text/SidecarTextTrackLoader.test.d.ts +2 -0
- package/dist/unit/types/current/text/SidecarTextTrackLoader.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/SidecarTextTrackLoader.test.js +365 -0
- package/dist/unit/types/current/text/TextTrack.test.d.ts +2 -0
- package/dist/unit/types/current/text/TextTrack.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/TextTrack.test.js +12 -0
- package/dist/unit/types/current/text/VttCueStyle.test.d.ts +2 -0
- package/dist/unit/types/current/text/VttCueStyle.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/VttCueStyle.test.js +76 -0
- package/dist/unit/types/current/text/discoverDashTextTracks.test.d.ts +2 -0
- package/dist/unit/types/current/text/discoverDashTextTracks.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/discoverDashTextTracks.test.js +216 -0
- package/dist/unit/types/current/text/discoverHlsTextTracks.test.d.ts +2 -0
- package/dist/unit/types/current/text/discoverHlsTextTracks.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/discoverHlsTextTracks.test.js +177 -0
- package/dist/unit/types/current/text/mediaTextTrackProvider.test.d.ts +2 -0
- package/dist/unit/types/current/text/mediaTextTrackProvider.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/mediaTextTrackProvider.test.js +86 -0
- package/dist/unit/types/current/text/parseWebVtt.test.d.ts +2 -0
- package/dist/unit/types/current/text/parseWebVtt.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/parseWebVtt.test.js +419 -0
- package/dist/unit/types/current/text/pickPreferredTextTrack.test.d.ts +2 -0
- package/dist/unit/types/current/text/pickPreferredTextTrack.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/pickPreferredTextTrack.test.js +78 -0
- package/dist/unit/types/current/track/inferLoadOptionsFromUri.test.d.ts +2 -0
- package/dist/unit/types/current/track/inferLoadOptionsFromUri.test.d.ts.map +1 -0
- package/dist/unit/types/current/track/inferLoadOptionsFromUri.test.js +165 -0
- package/dist/unit/types/current/tsconfig.tsbuildinfo +1 -1
- package/dist/unit/types/current/util/media/codecOverrides.test.d.ts +2 -0
- package/dist/unit/types/current/util/media/codecOverrides.test.d.ts.map +1 -0
- package/dist/unit/types/current/util/media/codecOverrides.test.js +42 -0
- package/dist/unit/types/current/util/media/codecSupport.test.d.ts +2 -0
- package/dist/unit/types/current/util/media/codecSupport.test.d.ts.map +1 -0
- package/dist/unit/types/current/util/media/codecSupport.test.js +26 -0
- package/dist/unit/types/current/util/media/mimeType.test.d.ts +2 -0
- package/dist/unit/types/current/util/media/mimeType.test.d.ts.map +1 -0
- package/dist/unit/types/current/util/media/mimeType.test.js +22 -0
- package/dist/unit/types/current/vinyl/VinylPlayerAdBreaks.test.d.ts +2 -0
- package/dist/unit/types/current/vinyl/VinylPlayerAdBreaks.test.d.ts.map +1 -0
- package/dist/unit/types/current/vinyl/VinylPlayerAdBreaks.test.js +142 -0
- package/dist/unit/types/current/vinyl/VinylPlayerTextTracks.test.d.ts +2 -0
- package/dist/unit/types/current/vinyl/VinylPlayerTextTracks.test.d.ts.map +1 -0
- package/dist/unit/types/current/vinyl/VinylPlayerTextTracks.test.js +188 -0
- package/dist/vinylTestUtil/types/current/mock/ad/MockAdController.d.ts +15 -0
- package/dist/vinylTestUtil/types/current/mock/ad/MockAdController.d.ts.map +1 -0
- package/dist/vinylTestUtil/types/current/mock/ad/MockAdController.js +26 -0
- package/dist/vinylTestUtil/types/current/mock/dash/mockDashManifest.d.ts +84 -84
- package/dist/vinylTestUtil/types/current/mock/text/MockTextTrackController.d.ts +10 -0
- package/dist/vinylTestUtil/types/current/mock/text/MockTextTrackController.d.ts.map +1 -0
- package/dist/vinylTestUtil/types/current/mock/text/MockTextTrackController.js +14 -0
- package/dist/vinylTestUtil/types/current/tsconfig.tsbuildinfo +1 -1
- package/dist/vinylTestUtil/types/ts3.7/mock/ad/MockAdController.d.ts +15 -0
- package/dist/vinylTestUtil/types/ts3.7/mock/dash/mockDashManifest.d.ts +84 -84
- package/dist/vinylTestUtil/types/ts3.7/mock/text/MockTextTrackController.d.ts +10 -0
- package/dist/vinylTestUtil/types/ts4.1/mock/ad/MockAdController.d.ts +15 -0
- package/dist/vinylTestUtil/types/ts4.1/mock/dash/mockDashManifest.d.ts +84 -84
- package/dist/vinylTestUtil/types/ts4.1/mock/text/MockTextTrackController.d.ts +10 -0
- package/dist/vinylTestUtil/types/ts4.7/mock/ad/MockAdController.d.ts +15 -0
- package/dist/vinylTestUtil/types/ts4.7/mock/dash/mockDashManifest.d.ts +84 -84
- package/dist/vinylTestUtil/types/ts4.7/mock/text/MockTextTrackController.d.ts +10 -0
- package/package.json +10 -11
package/dist/test/integ.es5.js
CHANGED
|
@@ -852,7 +852,7 @@ function setMockNavigator(){var navigator2=new MockNavigator;spyOnPropertySafe(g
|
|
|
852
852
|
function overrideGlobalInit(initHandle,initOverride){beforeEach(function(){initHandle.set(initOverride)});return initHandle}// ../vinyl-util/test/testUtil/mock/logging/MockLogger.ts
|
|
853
853
|
var createSpy4=jasmine.createSpy;var spyFactory4=createSpyFactory();var MockLogger=/*#__PURE__*/function(_MockEventHost4){function MockLogger(){var _this42;_classCallCheck(this,MockLogger);_this42=_callSuper(this,MockLogger,arguments);__publicField(_this42,"logLevel",1/* DEBUG */);__publicField(_this42,"log",spyFactory4("log").and.callFake(function(target,level){var _this43,_this44,_this45,_this46,_this47;for(var _len16=arguments.length,messages=new Array(_len16>2?_len16-2:0),_key17=2;_key17<_len16;_key17++){messages[_key17-2]=arguments[_key17]}switch(level){// Delegates logs to spies separated by log level.
|
|
854
854
|
case 0/* VERBOSE */:(_this43=_this42).verbose.apply(_this43,[target].concat(messages));break;case 1/* DEBUG */:(_this44=_this42).debug.apply(_this44,[target].concat(messages));break;case 2/* INFO */:(_this45=_this42).info.apply(_this45,[target].concat(messages));break;case 3/* WARN */:(_this46=_this42).warn.apply(_this46,[target].concat(messages));break;case 4/* ERROR */:(_this47=_this42).error.apply(_this47,[target].concat(messages));break}}));__publicField(_this42,"verbose",createSpy4("verbose"));__publicField(_this42,"debug",createSpy4("debug"));__publicField(_this42,"info",createSpy4("info"));__publicField(_this42,"warn",createSpy4("warn"));__publicField(_this42,"error",createSpy4("error"));return _this42}_inherits(MockLogger,_MockEventHost4);return _createClass(MockLogger)}(MockEventHost);function useMockLogger(){return overrideGlobalInit(loggerRef,function(){return new MockLogger})}// test/vinylTestUtil/util/playback/playbackStateExpectations.ts
|
|
855
|
-
function expectTimeDoesNotElapse(_x12){return _expectTimeDoesNotElapse.apply(this,arguments)}function _expectTimeDoesNotElapse(){_expectTimeDoesNotElapse=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
855
|
+
function expectTimeDoesNotElapse(_x12){return _expectTimeDoesNotElapse.apply(this,arguments)}function _expectTimeDoesNotElapse(){_expectTimeDoesNotElapse=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee566(player){var startTime;return _regenerator().w(function(_context566){while(1)switch(_context566.n){case 0:startTime=player.currentTime;_context566.n=1;return _sleep(0.5);case 1:if(!closeTo(player.currentTime,startTime,0.1)){_context566.n=2;break}expectNothing();_context566.n=4;break;case 2:_context566.n=3;return _sleep(2);case 3:expect(player.currentTime).withContext("expectTimeDoesNotElapse").toBeCloseToWithin(startTime,0.3);case 4:return _context566.a(2)}},_callee566)}));return _expectTimeDoesNotElapse.apply(this,arguments)}function expectTimeElapses(_x13){return _expectTimeElapses.apply(this,arguments)}function _expectTimeElapses(){_expectTimeElapses=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee567(player){var minTimeDelta,startTime;return _regenerator().w(function(_context567){while(1)switch(_context567.n){case 0:minTimeDelta=0.5;startTime=player.currentTime;_context567.n=1;return nextEventAsPromise(player,"timeUpdate",{filter:function filter(){return player.currentTime>startTime+minTimeDelta},timeout:4,timeoutMessage:"currentTime did not progress at least ".concat(minTimeDelta,"s after {time} seconds.")});case 1:return _context567.a(2)}},_callee567)}));return _expectTimeElapses.apply(this,arguments)}function expectPausedState(player){expect(player.paused).withContext("paused").toBeTrue();expect(player.playing).withContext("not playing").toBeFalse()}function expectPlayingState(player){expect(player.playIsPending).withContext("not pending play").toBeFalse();expect(player.paused).withContext("not paused").toBeFalse();expect(player.playing).withContext("playing").toBeTrue()}function expectPendingPlaying(player){expect(player.playIsPending).withContext("pending play").toBeTrue();expect(player.playing).withContext("pending, not playing").toBeFalse()}// ../vinyl-observable/src/observable/observableValue.ts
|
|
856
856
|
var MutableValueBase=/*#__PURE__*/function(){function MutableValueBase(){_classCallCheck(this,MutableValueBase)}return _createClass(MutableValueBase,[{key:"getValue",value:function getValue(){return this.value}},{key:"setValue",value:function setValue(value){this.value=value}},{key:"map",value:function map(transform,setData){return new SubDataController(this,transform,setData!=null?setData:throwSaveNotProvidedError)}},{key:"pick",value:function pick(prop){var _this48=this;return new SubDataController(this,function(value){return value==null?void 0:value[prop]},function(subValue){var current=_this48.value;if(current==null)return current;var newValue=__spreadValues({},current);newValue[prop]=subValue;return newValue})}}])}();var MutableValueImpl=/*#__PURE__*/function(_MutableValueBase){function MutableValueImpl(currentValue){var _this49;_classCallCheck(this,MutableValueImpl);_this49=_callSuper(this,MutableValueImpl);__publicField(_this49,"currentValue",currentValue);__publicField(_this49,"_disposed",false);__publicField(_this49,"currentIndex",-1);__publicField(_this49,"n",0);__publicField(_this49,"callbacks",[]);__publicField(_this49,"_changeId",0);return _this49}_inherits(MutableValueImpl,_MutableValueBase);return _createClass(MutableValueImpl,[{key:"changeId",get:function get(){return this._changeId}},{key:"hasAnyListeners",value:function hasAnyListeners(){return this.callbacks.length>0}},{key:"onData",value:function onData(callback){var _this50=this;if(this._disposed)throw new DisposedError;this.callbacks.push(callback);callback(this.currentValue,void 0);return function(){var index=_this50.callbacks.indexOf(callback);if(index!==-1){_this50.callbacks.splice(index,1);if(index<=_this50.currentIndex)_this50.currentIndex--;_this50.n--}}}},{key:"value",get:function get(){return this.currentValue},set:function set(value){if(this.currentIndex!==-1){throw new Error("data cannot be set from onData callback")}if(this._disposed)throw new DisposedError;var previousValue=this.currentValue;if(value===previousValue)return;this.currentValue=value;this.notify(value,previousValue)}},{key:"invalidate",value:function invalidate(){this.notify(this.currentValue,this.currentValue)}},{key:"disposed",get:function get(){return this._disposed}},{key:"dispose",value:function dispose(){this._disposed=true;this.callbacks.length=0}},{key:"notify",value:function notify(value,previousValue){this._changeId++;this.n=this.callbacks.length;try{while(this.currentIndex<this.n-1){this.callbacks[++this.currentIndex](value,previousValue)}}finally{this.currentIndex=-1}}}])}(MutableValueBase);var SubDataController=/*#__PURE__*/function(_MutableValueBase2){function SubDataController(source,getter,setter){var _this51;_classCallCheck(this,SubDataController);_this51=_callSuper(this,SubDataController);__publicField(_this51,"source",source);__publicField(_this51,"getter",getter);__publicField(_this51,"setter",setter);__publicField(_this51,"needsValidation",false);__publicField(_this51,"cachedChangeId",-1);__publicField(_this51,"cachedValue");return _this51}_inherits(SubDataController,_MutableValueBase2);return _createClass(SubDataController,[{key:"changeId",get:function get(){return this.source.changeId}},{key:"getTransformed",value:function getTransformed(){var id=this.source.changeId;if(this.cachedChangeId===id)return this.cachedValue;var value=this.getter(this.source.value);this.cachedChangeId=id;this.cachedValue=value;return value}},{key:"value",get:function get(){return this.getTransformed()},set:function set(value){this.source.value=this.setter(value,this.source.value)}},{key:"onData",value:function onData(callback){var _this52=this;var previous;var firstCall=true;return this.source.onData(function(){var newValue=_this52.getTransformed();if(firstCall||_this52.needsValidation||newValue!==previous){callback(newValue,previous);firstCall=false;previous=newValue}})}},{key:"invalidate",value:function invalidate(){this.needsValidation=true;this.source.invalidate();this.needsValidation=false}}])}(MutableValueBase);function data(value){return new MutableValueImpl(value)}function throwSaveNotProvidedError(){throw new Error("data cannot be set, a `setData` function must be provided")}var ExternalMutableValue=/*#__PURE__*/function(_MutableValueBase3){function ExternalMutableValue(currentValue,onDataRequested){var _this53;_classCallCheck(this,ExternalMutableValue);_this53=_callSuper(this,ExternalMutableValue);__publicField(_this53,"onDataRequested",onDataRequested);__publicField(_this53,"_data");__publicField(_this53,"externalDataSub",null);_this53._data=data(currentValue);return _this53}_inherits(ExternalMutableValue,_MutableValueBase3);return _createClass(ExternalMutableValue,[{key:"value",get:function get(){return this._data.value},set:function set(_value){throw new Error("set value not supported")}},{key:"changeId",get:function get(){return this._data.changeId}},{key:"onData",value:function onData(callback){var _this54=this;if(!this._data.hasAnyListeners()){this.externalDataSub=this.onDataRequested(function(value){_this54._data.value=value})}var sub=this._data.onData(callback);return function(){var _a3;sub();if(!_this54._data.hasAnyListeners()){(_a3=_this54.externalDataSub)==null?void 0:_a3.call(_this54);_this54.externalDataSub=null}}}},{key:"invalidate",value:function invalidate(){throw new Error("invalidate not supported")}}])}(MutableValueBase);function externalData(initialValue,onDataRequested){return new ExternalMutableValue(initialValue,onDataRequested)}// ../vinyl-observable/src/observable/combineData.ts
|
|
857
857
|
function combineData(inputs){var keys=Object.keys(inputs);var providers={};var current={};for(var _i7=0,_keys=keys;_i7<_keys.length;_i7++){var key=_keys[_i7];var provider=inputs[key];providers[key]=provider;current[key]=provider.value}return externalData(current,function(setData){var subs=[];var _loop6=function _loop6(){var key=_keys2[_i8];var provider=providers[key];var isFirst=true;subs.push(provider.onData(function(value){if(isFirst){isFirst=false;return}current[key]=value;setData(__spreadValues({},current))}))};for(var _i8=0,_keys2=keys;_i8<_keys2.length;_i8++){_loop6()}setData(current);return function(){for(var _i9=0,_subs=subs;_i9<_subs.length;_i9++){var unsub=_subs[_i9];unsub()}}})}// src/vinyl/playerConfigFactory.ts
|
|
858
858
|
function playerConfigFactory(defaults,validator){return function(_deps,add){var config=data(defaults);add(config.onData(function(data2){validator.assert(data2)}));return config}}// src/util/media/mediaSource.ts
|
|
@@ -1238,7 +1238,7 @@ var CyclicDependencyError=/*#__PURE__*/function(_IllegalArgumentError2){function
|
|
|
1238
1238
|
var ExternalDependency=/* @__PURE__ */Symbol("externalDependency");function externalDependencies(deps){var out={};var _loop0=function _loop0(){var key=_Object$keys[_i12];var provider=function provider(){return deps[key]};provider[ExternalDependency]=true;out[key]=provider};for(var _i12=0,_Object$keys=Object.keys(deps);_i12<_Object$keys.length;_i12++){_loop0()}return out}function createContainer(factories){var disposed=false;var disposables=[];var o={};var creationCount=0;Object.defineProperty(o,"__enumerableGuard",{get:function get(){if(creationCount!==0){throw new IllegalStateError("Enumeration is not supported within factories.")}},configurable:false,enumerable:true});var _loop1=function _loop1(key){if(key==="__enumerableGuard")return 1;// continue
|
|
1239
1239
|
var creating=false;var created=false;var value=null;Object.defineProperty(o,key,{get:function get(){if(disposed)throw new DisposedError;if(!created){if(creating)throw new CyclicDependencyError("The dependency with key '".concat(key,"' is cyclical. Check to ensure dependencies are not used in a property iterator."));creationCount++;creating=true;var provider=factories[key];var index=disposables.length;var add=function add(disposableOrUnsub){if(disposableOrUnsub){var disposable=isDisposable(disposableOrUnsub)?disposableOrUnsub:toDisposable(disposableOrUnsub);disposables.splice(index,0,disposable)}return disposableOrUnsub};value=provider(o,add);if(isPromiseLike(value)){value=toDisposablePromise(value)}if(isDisposable(value)&&!(ExternalDependency in provider))disposables.splice(index,0,value);creating=false;created=true;creationCount--}return value},configurable:false,enumerable:true})};for(var key in factories){if(_loop1(key))continue}return{dependencies:o,dispose:function dispose(){if(disposed)throw new DisposedError;disposeAll(disposables);disposed=true;disposables.length=0}}}// src/streaming/MediaTimeline.ts
|
|
1240
1240
|
function getMediaPeriodAtTime(timeline,time){var index=sortedInsertionIndex(timeline.periods,time,function(time2,period2){return time2-period2.startTime})-1;if(index<0)return null;var period=timeline.periods[index];return time>=period.endTime?null:period}// src/track/mse/MseTrack.ts
|
|
1241
|
-
var MseTrack=/*#__PURE__*/function(_TrackBase2){function MseTrack(uri,type,dependencyFactories){var _this73;_classCallCheck(this,MseTrack);var depsContainer=createContainer(dependencyFactories);var deps=depsContainer.dependencies;_this73=_callSuper(this,MseTrack,[uri,type,deps]);__publicField(_this73,"streams",[]);__publicField(_this73,"
|
|
1241
|
+
var MseTrack=/*#__PURE__*/function(_TrackBase2){function MseTrack(uri,type,dependencyFactories){var _this73;_classCallCheck(this,MseTrack);var depsContainer=createContainer(dependencyFactories);var deps=depsContainer.dependencies;_this73=_callSuper(this,MseTrack,[uri,type,deps]);__publicField(_this73,"streams",[]);__publicField(_this73,"lastPreloadOptions",null);__publicField(_this73,"activateOptions",null);__publicField(_this73,"allFetchedRanges",[]);__publicField(_this73,"_fetchedRanges",new IntersectionRanges(_this73.allFetchedRanges,{useCache:true}));__publicField(_this73,"_contentTypes",/* @__PURE__ */new Set);__publicField(_this73,"_qualities",null);__publicField(_this73,"_qualitiesUnfiltered",null);__publicField(_this73,"timeUpdateSub",null);__publicField(_this73,"_cachedPeriod",null);logDebug(_this73,"constructed");var add=_this73.disposer.add;add(depsContainer);_this73.deps=deps;add(deps.contentTypesValue.onData(function(contentTypesPromise){contentTypesPromise.then(function(contentTypes){if(_this73.disposer.disposed)return;if(equalDeep(_this73.contentTypes,contentTypes))return;logDebug(_this73,"content types:",contentTypes);_this73.clearStreams();var _iterator43=_createForOfIteratorHelper(contentTypes),_step43;try{for(_iterator43.s();!(_step43=_iterator43.n()).done;){var contentType2=_step43.value;_this73.createStream(contentType2)}}catch(err){_iterator43.e(err)}finally{_iterator43.f()}_this73.contentTypes=contentTypes})["catch"](_this73.errorHandler)}));_this73.on("streamingQualityChange",function(event){if(_this73.activateOptions){_this73.deps.drmController.initializeForPlayback(event.current,_this73.drmSessionAbort.value)}});_this73.on("bufferingQualityChange",function(event){_this73.deps.drmController.setBufferingDrmInfo(event.current,_this73.drmSessionAbort.value)});add(deps.mediaTimelineTransformed.onData(function(){_this73._cachedPeriod=null;_this73.updateQualities()}));add(deps.mediaTimeline.onData(function(){_this73._cachedPeriod=null;_this73.updateQualitiesUnfiltered()}));return _this73}_inherits(MseTrack,_TrackBase2);return _createClass(MseTrack,[{key:Symbol.toStringTag,get:function get(){return"MseTrack"}/**
|
|
1242
1242
|
* Updates the cached qualities list from the transformed timeline for the current period.
|
|
1243
1243
|
*/},{key:"updateQualities",value:function updateQualities(){var _this74=this;var time=this.deps.playbackController.currentTime;this.deps.mediaTimelineTransformed.value.then(function(timeline){if(_this74.disposer.disposed)return;var period=getMediaPeriodAtTime(timeline,time);_this74._cachedPeriod=period;var newQualities=period?period.qualities.map(function(q){return q.metadata}):null;if(!equalDeep(newQualities,_this74._qualities)){var previous=_this74._qualities;_this74._qualities=newQualities;if(newQualities){_this74.dispatch("qualitiesChange",{previous:previous!=null?previous:[],current:newQualities})}}})["catch"](this.errorHandler)}/**
|
|
1244
1244
|
* Updates the cached unfiltered qualities list from the raw timeline for the current period.
|
|
@@ -1253,7 +1253,7 @@ var MseTrack=/*#__PURE__*/function(_TrackBase2){function MseTrack(uri,type,depen
|
|
|
1253
1253
|
*/},{key:"clearPrefetch",value:function clearPrefetch(){logDebug(this,"clearPrefetch");this.callOnStreams("clearPrefetch")}/**
|
|
1254
1254
|
* Resets the track to recover from error states.
|
|
1255
1255
|
* Resets both the segment controller and buffering controller to clear failed segments and error conditions.
|
|
1256
|
-
*/},{key:"reset",value:function reset(){if(!this.error){logDebug(this,"reset no-op");return}this.deps.manifestController.reset();this.callOnStreams("reset");_superPropGet(MseTrack,"reset",this,3)([])}},{key:"onActivated",value:function onActivated(loadOptions){var _this77=this;this.activateOptions=loadOptions;this.deps.playbackSource.disableRemotePlayback=true;this.streams.forEach(function(stream){_this77.deps.drmController.initializeForPlayback(stream.streamingQuality,_this77.
|
|
1256
|
+
*/},{key:"reset",value:function reset(){if(!this.error){logDebug(this,"reset no-op");return}this.deps.manifestController.reset();this.callOnStreams("reset");_superPropGet(MseTrack,"reset",this,3)([])}},{key:"onActivated",value:function onActivated(loadOptions){var _this77=this;this.activateOptions=loadOptions;this.deps.playbackSource.disableRemotePlayback=true;this.streams.forEach(function(stream){_this77.deps.drmController.initializeForPlayback(stream.streamingQuality,_this77.drmSessionAbort.value)});this.deps.playbackSource.src=this.deps.mediaSourceController.createUrl();this.callOnStreams("activate",loadOptions);this.timeUpdateSub=this.deps.playbackController.on("timeUpdate",function(){var time=_this77.deps.playbackController.currentTime;var cached=_this77._cachedPeriod;if(cached&&time>=cached.startTime&&time<cached.endTime){return}_this77.updateQualities();_this77.updateQualitiesUnfiltered()})}},{key:"onDeactivated",value:function onDeactivated(){var _a3;this.activateOptions=null;(_a3=this.timeUpdateSub)==null?void 0:_a3.call(this);this.timeUpdateSub=null;this.callOnStreams("deactivate");this.deps.playbackSource.src=null;this.deps.playbackSource.load()}},{key:"getStreamingQuality",value:function getStreamingQuality(contentType2){var _a3,_b;return(_b=(_a3=this.getStream(contentType2))==null?void 0:_a3.streamingQuality)!=null?_b:null}},{key:"getBufferingQuality",value:function getBufferingQuality(contentType2){var _a3,_b;return(_b=(_a3=this.getStream(contentType2))==null?void 0:_a3.bufferingQuality)!=null?_b:null}},{key:"getPlaybackQuality",value:function getPlaybackQuality(contentType2){var _a3,_b;return(_b=(_a3=this.getStream(contentType2))==null?void 0:_a3.playbackQuality)!=null?_b:null}/**
|
|
1257
1257
|
* Calls the specified method on all streams with the provided arguments.
|
|
1258
1258
|
*/},{key:"callOnStreams",value:function callOnStreams(functionName){for(var _len21=arguments.length,args=new Array(_len21>1?_len21-1:0),_key22=1;_key22<_len21;_key22++){args[_key22-1]=arguments[_key22]}this.streams.forEach(function(stream){;stream[functionName].apply(stream,args)})}},{key:"getStream",value:function getStream(contentType2){return this.streams.find(function(s){return s.contentType===contentType2})}},{key:"clearStreams",value:function clearStreams(){this.callOnStreams("dispose");this.streams.length=0;this.allFetchedRanges.length=0;this._fetchedRanges.invalidate()}},{key:"bufferingEnded",get:function get(){return this.streams.every(function(stream){return stream.bufferingEnded})}},{key:"dispose",value:function dispose(){var _a3;logDebug(this,"dispose");(_a3=this.timeUpdateSub)==null?void 0:_a3.call(this);this.timeUpdateSub=null;this.clearStreams();_superPropGet(MseTrack,"dispose",this,3)([])}}])}(TrackBase);// src/track/dash/DashTrack.ts
|
|
1259
1259
|
var loadOptionsValidator3=object({config:trackBaseOptionsValidator.maybe().optional(),manifestProvider:func().maybe().optional(),requestInit:object({}).cast().maybe().optional(),segmentRequestInit:object({}).cast().maybe().optional(),type:isOneOf("dash"),uri:string().notEmpty()});function createDashTrackFactory(deps){return{validate:function validate(options){loadOptionsValidator3.assert(options,ErrorOrigin.API)},createTrack:function createTrack(loadOptions){return new MseTrack(loadOptions.uri,loadOptions.type,deps.createDashFactories(loadOptions))}}}// src/track/hls/HlsTrack.ts
|
|
@@ -1511,15 +1511,15 @@ var ContentStreamImpl=/*#__PURE__*/function(_EventHostImpl11){function ContentSt
|
|
|
1511
1511
|
*/},{key:"reset",value:function reset(){this.segmentController.reset();this.bufferingController.reset()}},{key:"activate",value:function activate(options){var _a3;this.segmentController.configure({startTime:(_a3=options.startTime)!=null?_a3:0});this.segmentController.activate();this.bufferingController.activate()}},{key:"deactivate",value:function deactivate(){this.segmentController.deactivate();this.bufferingController.deactivate()}},{key:"dispose",value:function dispose(){_superPropGet(ContentStreamImpl,"dispose",this,3)([]);this.disposer.dispose()}}])}(EventHostImpl);function createContentStreamFactory(deps){return function(contentType2){return new ContentStreamImpl(deps.createContentStreamFactories(contentType2),contentType2)}}// src/track/dash/createDashContentTypesValue.ts
|
|
1512
1512
|
function createDashContentTypesValue(deps){return deps.manifestTransformed.map(/*#__PURE__*/function(){var _ref26=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee32(manifestAndPath){var _t6,_t7;return _regenerator().w(function(_context32){while(1)switch(_context32.n){case 0:_t6=getContentTypes;_t7=deps;_context32.n=1;return manifestAndPath;case 1:return _context32.a(2,_t6(_t7,_context32.v.manifest))}},_callee32)}));return function(_x28){return _ref26.apply(this,arguments)}}())}function getContentTypes(deps,manifest3){var contentTypes=/* @__PURE__ */new Set;var _iterator61=_createForOfIteratorHelper(manifest3.MPD.Period),_step61;try{for(_iterator61.s();!(_step61=_iterator61.n()).done;){var period=_step61.value;if(!period.AdaptationSet)continue;var mediaMetadata=flattenRepresentations(period).map(deps.mediaQualityMetadataResolver);var _iterator62=_createForOfIteratorHelper(mediaMetadata),_step62;try{for(_iterator62.s();!(_step62=_iterator62.n()).done;){var contentType2=_step62.value.contentType;if(contentType2)contentTypes.add(contentType2)}}catch(err){_iterator62.e(err)}finally{_iterator62.f()}}}catch(err){_iterator61.e(err)}finally{_iterator61.f()}return contentTypes}// src/track/createSegmentDataProvider.ts
|
|
1513
1513
|
function createSegmentDataProvider(deps,options){return/*#__PURE__*/function(){var _ref27=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee33(abort){var _a3,init,params,serviceId,requestStart,response,responseEnd,arrayBuffer,contentEnd,responseStart,lastRequest;return _regenerator().w(function(_context33){while(1)switch(_context33.n){case 0:init=__spreadValues({},deps.segmentRequestInit);if(options.mediaRange){init.headers=__spreadProps(__spreadValues({},normalizeHeadersInit(init.headers)),{Range:"bytes=".concat(stringifyByteRange(options.mediaRange))})}params={input:options.url,init:init};deps.requestInterceptor(params);serviceId=(_a3=options.serviceId)!=null?_a3:getHostname(options.url);requestStart=Date.now();_context33.n=1;return requestWithRetry(params.input,params.init,{serviceId:serviceId,abort:abort});case 1:response=_context33.v;responseEnd=Date.now();_context33.n=2;return response.arrayBuffer();case 2:arrayBuffer=_context33.v;contentEnd=Date.now();responseStart=null;if("getEntriesByName"in performance){lastRequest=last(performance.getEntriesByName(params.input));if(lastRequest){if(lastRequest.responseStart){responseStart=performance.timeOrigin+lastRequest.responseStart}}}if(options.reportDownlinkMetrics){networkMetricsController.value.addDownlinkTransferEntry({bytes:arrayBuffer.byteLength,serviceId:serviceId,requestStart:requestStart,responseStart:responseStart,responseEnd:responseEnd,contentEnd:contentEnd})}return _context33.a(2,arrayBuffer)}},_callee33)}));return function(_x29){return _ref27.apply(this,arguments)}}()}// src/track/dash/timeline/DashRepresentationSegmentProvider.ts
|
|
1514
|
-
function createDashRepresentationSegmentProvider(deps,baseUrl,representation){var _a3;var quality=deps.mediaQualityMetadataResolver(representation);var options={baseUrl:baseUrl,periodTimeRange:calculatePeriodTimeRange(representation.parent.parent),representation:representation};var segmentTemplate=getSegmentTemplate(representation);var segmentList=getSegmentList(representation);var segmentBase=getSegmentBase(representation);var segmentsPromise=null;var initUri;var initRange;if(segmentTemplate==null?void 0:segmentTemplate.initialization){initUri=segmentTemplateUrl(segmentTemplate.initialization,{representation:representation})}var commonSegmentBase=(_a3=segmentTemplate!=null?segmentTemplate:segmentList)!=null?_a3:segmentBase;if(!commonSegmentBase)throw new ValidationError("Manifest must have one of SegmentList, SegmentTemplate, or SegmentBase",ErrorOrigin.MEDIA);if(commonSegmentBase.Initialization){initUri=commonSegmentBase.Initialization.sourceURL;initRange=commonSegmentBase.Initialization.range}if(!initUri&&!initRange)throw new ValidationError("Missing initialization range",ErrorOrigin.MEDIA);var _resolveDashUri=resolveDashUri(deps,{baseUrl:baseUrl,representation:representation,uri:initUri}),initUrl=_resolveDashUri.url,initServiceLocation=_resolveDashUri.serviceLocation;var initData=createSegmentDataProvider(deps,{url:initUrl,mediaRange:initRange,serviceId:initServiceLocation,reportDownlinkMetrics:false});var getSegmentReferences;if(segmentList){getSegmentReferences=function getSegmentReferences(){return createSegmentsFromSegmentList(deps,__spreadProps(__spreadValues({},options),{segmentList:segmentList}))}}else if(segmentTemplate){getSegmentReferences=function getSegmentReferences(){return createSegmentsFromSegmentTemplate(deps,__spreadProps(__spreadValues({},options),{segmentTemplate:segmentTemplate}))}}else if(segmentBase){getSegmentReferences=function getSegmentReferences(){return createSegmentsFromSegmentBase(deps,__spreadProps(__spreadValues({},options),{segmentBase:segmentBase}))}}return{getSegment:function getSegment(time){var _arguments2=arguments;return _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee34(){var affordance,segments,segment;return _regenerator().w(function(_context34){while(1)switch(_context34.n){case 0:affordance=_arguments2.length>1&&_arguments2[1]!==undefined?_arguments2[1]:0;if(!segmentsPromise)segmentsPromise=getSegmentReferences();_context34.n=1;return Promise.resolve(segmentsPromise)["catch"](function(error){segmentsPromise=null;throw error});case 1:segments=_context34.v;segment=getSegmentAtTime(time,segments,affordance);if(segment){_context34.n=2;break}return _context34.a(2,null);case 2:return _context34.a(2,__spreadProps(__spreadValues({quality:quality},segment),{initData:initData}))}},_callee34)}))()}}}function createSegmentsFromSegmentList(deps,options){var _a3;var baseUrl=options.baseUrl,periodTimeRange=options.periodTimeRange,representation=options.representation,segmentList=options.segmentList;var segmentUrls=segmentList.SegmentURL;if(segmentUrls){var timescale=getTimescale(segmentList);var sampleTimes=calculateSegmentSampleTimes({multipleSegmentBase:segmentList,periodTimeRange:periodTimeRange,numSegments:segmentUrls.length});var presentationTimeOffset=(_a3=segmentList.presentationTimeOffset)!=null?_a3:0;return createTimeline({sampleTimes:sampleTimes,presentationTimeOffset:presentationTimeOffset,periodTimeRange:periodTimeRange,timescale:timescale},function(i){var segmentUrl=segmentUrls[i];var _resolveDashUri2=resolveDashUri(deps,{baseUrl:baseUrl,uri:segmentUrl.media,representation:representation}),url=_resolveDashUri2.url,serviceLocation=_resolveDashUri2.serviceLocation;return createSegmentDataProvider(deps,{url:url,mediaRange:segmentUrl.mediaRange,serviceId:serviceLocation,reportDownlinkMetrics:true})})}else{if(segmentList.href){throw new ValidationError("SegmentList.href currently unsupported",ErrorOrigin.MEDIA)}else{throw new ValidationError("could not determine segments from SegmentList",ErrorOrigin.MEDIA)}}}function createSegmentsFromSegmentTemplate(deps,options){var _a3,_b;var baseUrl=options.baseUrl,periodTimeRange=options.periodTimeRange,representation=options.representation,segmentTemplate=options.segmentTemplate;if(!segmentTemplate.media){throw new ValidationError("SegmentTemplate.media required",ErrorOrigin.MEDIA)}var media=segmentTemplate.media;var presentationTimeOffset=(_a3=segmentTemplate.presentationTimeOffset)!=null?_a3:0;var sampleTimes=calculateSegmentSampleTimes({multipleSegmentBase:segmentTemplate,periodTimeRange:periodTimeRange});var timescale=getTimescale(segmentTemplate);var segmentNumber=(_b=segmentTemplate.startNumber)!=null?_b:1;return createTimeline({timescale:timescale,presentationTimeOffset:presentationTimeOffset,periodTimeRange:periodTimeRange,sampleTimes:sampleTimes},function(_,sampleTime){var uri=segmentTemplateUrl(media,{representation:representation,sampleTime:sampleTime,segmentNumber:segmentNumber++});var _resolveDashUri3=resolveDashUri(deps,{baseUrl:baseUrl,uri:uri,representation:representation}),url=_resolveDashUri3.url,serviceLocation=_resolveDashUri3.serviceLocation;return createSegmentDataProvider(deps,{url:url,serviceId:serviceLocation,reportDownlinkMetrics:true})})}function createSegmentsFromSegmentBase(_x30,_x31){return _createSegmentsFromSegmentBase.apply(this,arguments)}function _createSegmentsFromSegmentBase(){_createSegmentsFromSegmentBase=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1514
|
+
function createDashRepresentationSegmentProvider(deps,baseUrl,representation){var _a3;var quality=deps.mediaQualityMetadataResolver(representation);var options={baseUrl:baseUrl,periodTimeRange:calculatePeriodTimeRange(representation.parent.parent),representation:representation};var segmentTemplate=getSegmentTemplate(representation);var segmentList=getSegmentList(representation);var segmentBase=getSegmentBase(representation);var segmentsPromise=null;var initUri;var initRange;if(segmentTemplate==null?void 0:segmentTemplate.initialization){initUri=segmentTemplateUrl(segmentTemplate.initialization,{representation:representation})}var commonSegmentBase=(_a3=segmentTemplate!=null?segmentTemplate:segmentList)!=null?_a3:segmentBase;if(!commonSegmentBase)throw new ValidationError("Manifest must have one of SegmentList, SegmentTemplate, or SegmentBase",ErrorOrigin.MEDIA);if(commonSegmentBase.Initialization){initUri=commonSegmentBase.Initialization.sourceURL;initRange=commonSegmentBase.Initialization.range}if(!initUri&&!initRange)throw new ValidationError("Missing initialization range",ErrorOrigin.MEDIA);var _resolveDashUri=resolveDashUri(deps,{baseUrl:baseUrl,representation:representation,uri:initUri}),initUrl=_resolveDashUri.url,initServiceLocation=_resolveDashUri.serviceLocation;var initData=createSegmentDataProvider(deps,{url:initUrl,mediaRange:initRange,serviceId:initServiceLocation,reportDownlinkMetrics:false});var getSegmentReferences;if(segmentList){getSegmentReferences=function getSegmentReferences(){return createSegmentsFromSegmentList(deps,__spreadProps(__spreadValues({},options),{segmentList:segmentList}))}}else if(segmentTemplate){getSegmentReferences=function getSegmentReferences(){return createSegmentsFromSegmentTemplate(deps,__spreadProps(__spreadValues({},options),{segmentTemplate:segmentTemplate}))}}else if(segmentBase){getSegmentReferences=function getSegmentReferences(){return createSegmentsFromSegmentBase(deps,__spreadProps(__spreadValues({},options),{segmentBase:segmentBase}))}}return{getSegment:function getSegment(time){var _arguments2=arguments;return _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee34(){var affordance,segments,segment;return _regenerator().w(function(_context34){while(1)switch(_context34.n){case 0:affordance=_arguments2.length>1&&_arguments2[1]!==undefined?_arguments2[1]:0;if(!segmentsPromise)segmentsPromise=getSegmentReferences();_context34.n=1;return Promise.resolve(segmentsPromise)["catch"](function(error){segmentsPromise=null;throw error});case 1:segments=_context34.v;segment=getSegmentAtTime(time,segments,affordance);if(segment){_context34.n=2;break}return _context34.a(2,null);case 2:return _context34.a(2,__spreadProps(__spreadValues({quality:quality},segment),{initData:initData}))}},_callee34)}))()}}}function createSegmentsFromSegmentList(deps,options){var _a3;var baseUrl=options.baseUrl,periodTimeRange=options.periodTimeRange,representation=options.representation,segmentList=options.segmentList;var segmentUrls=segmentList.SegmentURL;if(segmentUrls){var timescale=getTimescale(segmentList);var sampleTimes=calculateSegmentSampleTimes({multipleSegmentBase:segmentList,periodTimeRange:periodTimeRange,numSegments:segmentUrls.length});var presentationTimeOffset=(_a3=segmentList.presentationTimeOffset)!=null?_a3:0;return createTimeline({sampleTimes:sampleTimes,presentationTimeOffset:presentationTimeOffset,periodTimeRange:periodTimeRange,timescale:timescale},function(i){var segmentUrl=segmentUrls[i];var _resolveDashUri2=resolveDashUri(deps,{baseUrl:baseUrl,uri:segmentUrl.media,representation:representation}),url=_resolveDashUri2.url,serviceLocation=_resolveDashUri2.serviceLocation;return createSegmentDataProvider(deps,{url:url,mediaRange:segmentUrl.mediaRange,serviceId:serviceLocation,reportDownlinkMetrics:true})})}else{if(segmentList.href){throw new ValidationError("SegmentList.href currently unsupported",ErrorOrigin.MEDIA)}else{throw new ValidationError("could not determine segments from SegmentList",ErrorOrigin.MEDIA)}}}function createSegmentsFromSegmentTemplate(deps,options){var _a3,_b;var baseUrl=options.baseUrl,periodTimeRange=options.periodTimeRange,representation=options.representation,segmentTemplate=options.segmentTemplate;if(!segmentTemplate.media){throw new ValidationError("SegmentTemplate.media required",ErrorOrigin.MEDIA)}var media=segmentTemplate.media;var presentationTimeOffset=(_a3=segmentTemplate.presentationTimeOffset)!=null?_a3:0;var sampleTimes=calculateSegmentSampleTimes({multipleSegmentBase:segmentTemplate,periodTimeRange:periodTimeRange});var timescale=getTimescale(segmentTemplate);var segmentNumber=(_b=segmentTemplate.startNumber)!=null?_b:1;return createTimeline({timescale:timescale,presentationTimeOffset:presentationTimeOffset,periodTimeRange:periodTimeRange,sampleTimes:sampleTimes},function(_,sampleTime){var uri=segmentTemplateUrl(media,{representation:representation,sampleTime:sampleTime,segmentNumber:segmentNumber++});var _resolveDashUri3=resolveDashUri(deps,{baseUrl:baseUrl,uri:uri,representation:representation}),url=_resolveDashUri3.url,serviceLocation=_resolveDashUri3.serviceLocation;return createSegmentDataProvider(deps,{url:url,serviceId:serviceLocation,reportDownlinkMetrics:true})})}function createSegmentsFromSegmentBase(_x30,_x31){return _createSegmentsFromSegmentBase.apply(this,arguments)}function _createSegmentsFromSegmentBase(){_createSegmentsFromSegmentBase=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee568(deps,options){var _a3,baseUrl,periodTimeRange,representation,segmentBase,indexRange,_resolveDashUri4,indexUrl,indexServiceLocation,sidx,sampleTimes,rangeStart,_t51;return _regenerator().w(function(_context568){while(1)switch(_context568.n){case 0:baseUrl=options.baseUrl,periodTimeRange=options.periodTimeRange,representation=options.representation,segmentBase=options.segmentBase;if(!segmentBase.indexRange){_context568.n=2;break}indexRange=segmentBase.indexRange;_resolveDashUri4=resolveDashUri(deps,{baseUrl:baseUrl,representation:representation}),indexUrl=_resolveDashUri4.url,indexServiceLocation=_resolveDashUri4.serviceLocation;_t51=parseSidxBox;_context568.n=1;return createSegmentDataProvider(deps,{url:indexUrl,mediaRange:indexRange,serviceId:indexServiceLocation,reportDownlinkMetrics:false})();case 1:sidx=_t51(_context568.v);sampleTimes=getSidxSampleTimes(sidx);rangeStart=Number(sidx.firstOffset)+indexRange[1]+1;return _context568.a(2,createTimeline({sampleTimes:sampleTimes,periodTimeRange:periodTimeRange,presentationTimeOffset:(_a3=segmentBase.presentationTimeOffset)!=null?_a3:0,timescale:sidx.timescale},function(i){var segmentReference=sidx.references[i];var size=segmentReference.referencedSize;var provider=createSegmentDataProvider(deps,{url:indexUrl,mediaRange:[rangeStart,rangeStart+size-1],serviceId:indexServiceLocation,reportDownlinkMetrics:true});rangeStart+=size;return provider}));case 2:throw new ValidationError("Manifest missing segments");case 3:return _context568.a(2)}},_callee568)}));return _createSegmentsFromSegmentBase.apply(this,arguments)}function calculateSegmentSampleTimes(options){var multipleSegmentBase=options.multipleSegmentBase,periodTimeRange=options.periodTimeRange;var timescale=getTimescale(multipleSegmentBase);var startTimes;if(multipleSegmentBase.SegmentTimeline){startTimes=calculateSampleTimesFromSegmentTimeline(multipleSegmentBase.SegmentTimeline)}else{var sampleDuration=getSampleDuration(multipleSegmentBase);startTimes=calculateFixedSegmentSampleTimes({timescale:timescale,periodTimeRange:periodTimeRange,sampleDuration:sampleDuration,numSegments:options.numSegments})}return startTimes}function calculateSampleTimesFromSegmentTimeline(segmentTimeline){var _a3,_b,_c;var out=new Array(((_b=(_a3=segmentTimeline.S)==null?void 0:_a3.length)!=null?_b:0)+1);var startTime=0;var c=0;(_c=segmentTimeline.S)==null?void 0:_c.forEach(function(s){startTime=s.t!=null?s.t:startTime;for(var i=0;i<=s.r;i++){out[c++]=startTime;startTime+=s.d}});out[c++]=startTime;return out}function calculateFixedSegmentSampleTimes(options){var _a3;var sampleDuration=options.sampleDuration,timescale=options.timescale;var _options$periodTimeRa=_slicedToArray(options.periodTimeRange,2),periodStart=_options$periodTimeRa[0],periodEnd=_options$periodTimeRa[1];if(periodEnd==null)throw new ValidationError("MPD.mediaPresentationDuration or Period.duration required",ErrorOrigin.MEDIA);var numSegments=(_a3=options.numSegments)!=null?_a3:Math.ceil((periodEnd-periodStart)/(sampleDuration/timescale));var out=new Array(numSegments+1);var startTime=0;for(var i=0;i<numSegments;i++){out[i]=startTime;startTime+=sampleDuration}out[numSegments]=periodEnd*timescale;return out}function createTimeline(_ref28,dataProviderFactory){var sampleTimes=_ref28.sampleTimes,periodTimeRange=_ref28.periodTimeRange,presentationTimeOffset=_ref28.presentationTimeOffset,timescale=_ref28.timescale;var _periodTimeRange=_slicedToArray(periodTimeRange,2),periodStart=_periodTimeRange[0],periodEnd=_periodTimeRange[1];var mpdTimes=sampleTimes.map(function(sampleTime){return sampleToMpdTime(sampleTime,periodStart,presentationTimeOffset,timescale)});var n=mpdTimes.length-1;var out=new Array(n);for(var i=0;i<n;i++){var startTime=mpdTimes[i];var endTime=mpdTimes[i+1];out[i]={data:dataProviderFactory(i,sampleTimes[i]),timestampOffset:startTime,startTime:Math.max(periodStart,startTime),endTime:periodEnd==null?endTime:Math.min(periodEnd,endTime)}}return out}function getTimescale(multipleSegmentBase){if(!multipleSegmentBase.timescale)throw new ValidationError("invalid timescale",ErrorOrigin.MEDIA);return multipleSegmentBase.timescale}function getSampleDuration(multipleSegmentBase){if(!multipleSegmentBase.duration)throw new ValidationError("invalid duration",ErrorOrigin.MEDIA);return multipleSegmentBase.duration}// src/track/dash/buildDashMediaTimeline.ts
|
|
1515
1515
|
function buildDashMediaTimeline(deps,data2){var manifest3=data2.manifest,baseUrl=data2.baseUrl;var periods=manifest3.MPD.Period.map(function(period){var _a3;var startTime=calculatePeriodStart(period);var endTime=(_a3=calculatePeriodEnd(period))!=null?_a3:Infinity;var representations=flattenRepresentations(period);var qualities=representations.map(function(representation){var metadata=deps.mediaQualityMetadataResolver(representation);var segmentProvider=createDashRepresentationSegmentProvider(deps,baseUrl,representation);return{metadata:metadata,getSegment:function getSegment(time,affordance){return segmentProvider.getSegment(time,affordance)}}});return{startTime:startTime,endTime:endTime,qualities:qualities}});var duration=calculateDuration(manifest3);return{periods:periods,minBufferTime:manifest3.MPD.minBufferTime,getDuration:function getDuration(){return Promise.resolve(duration)}}}// src/track/filters/languageFilter.ts
|
|
1516
1516
|
function throwLanguagesUnsupported(){throw new MediaUnsupportedError("No content matching preferred language","language")}var iso3to2=/* @__PURE__ */new Map([["aar","aa"],["abk","ab"],["afr","af"],["aka","ak"],["amh","am"],["ara","ar"],["arg","an"],["asm","as"],["ava","av"],["ave","ae"],["aym","ay"],["aze","az"],["bak","ba"],["bam","bm"],["bel","be"],["ben","bn"],["bis","bi"],["bod","bo"],["bos","bs"],["bre","br"],["bul","bg"],["cat","ca"],["ces","cs"],["cha","ch"],["che","ce"],["chu","cu"],["chv","cv"],["cor","kw"],["cos","co"],["cre","cr"],["cym","cy"],["dan","da"],["deu","de"],["div","dv"],["dzo","dz"],["ell","el"],["eng","en"],["epo","eo"],["est","et"],["eus","eu"],["ewe","ee"],["fao","fo"],["fas","fa"],["fij","fj"],["fin","fi"],["fra","fr"],["fry","fy"],["ful","ff"],["gla","gd"],["gle","ga"],["glg","gl"],["glv","gv"],["grn","gn"],["guj","gu"],["hat","ht"],["hau","ha"],["heb","he"],["her","hz"],["hin","hi"],["hmo","ho"],["hrv","hr"],["hun","hu"],["hye","hy"],["ibo","ig"],["ido","io"],["iii","ii"],["iku","iu"],["ile","ie"],["ina","ia"],["ind","id"],["ipk","ik"],["isl","is"],["ita","it"],["jav","jv"],["jpn","ja"],["kal","kl"],["kan","kn"],["kas","ks"],["kat","ka"],["kau","kr"],["kaz","kk"],["khm","km"],["kik","ki"],["kin","rw"],["kir","ky"],["kom","kv"],["kon","kg"],["kor","ko"],["kua","kj"],["kur","ku"],["lao","lo"],["lat","la"],["lav","lv"],["lim","li"],["lin","ln"],["lit","lt"],["ltz","lb"],["lub","lu"],["lug","lg"],["mah","mh"],["mal","ml"],["mar","mr"],["mkd","mk"],["mlg","mg"],["mlt","mt"],["mon","mn"],["mri","mi"],["msa","ms"],["mya","my"],["nau","na"],["nav","nv"],["nbl","nr"],["nde","nd"],["ndo","ng"],["nep","ne"],["nld","nl"],["nno","nn"],["nob","nb"],["nor","no"],["nya","ny"],["oci","oc"],["oji","oj"],["ori","or"],["orm","om"],["oss","os"],["pan","pa"],["pli","pi"],["pol","pl"],["por","pt"],["pus","ps"],["que","qu"],["roh","rm"],["ron","ro"],["run","rn"],["rus","ru"],["sag","sg"],["san","sa"],["sin","si"],["slk","sk"],["slv","sl"],["sme","se"],["smo","sm"],["sna","sn"],["snd","sd"],["som","so"],["sot","st"],["spa","es"],["sqi","sq"],["srd","sc"],["srp","sr"],["ssw","ss"],["sun","su"],["swa","sw"],["swe","sv"],["tah","ty"],["tam","ta"],["tat","tt"],["tel","te"],["tgk","tg"],["tgl","tl"],["tha","th"],["tir","ti"],["ton","to"],["tsn","tn"],["tso","ts"],["tuk","tk"],["tur","tr"],["twi","tw"],["uig","ug"],["ukr","uk"],["urd","ur"],["uzb","uz"],["ven","ve"],["vie","vi"],["vol","vo"],["wln","wa"],["wol","wo"],["xho","xh"],["yid","yi"],["yor","yo"],["zha","za"],["zho","zh"],["zul","zu"],// Bibliographic codes (ISO 639-2/B) that differ from terminological codes
|
|
1517
1517
|
["alb","sq"],["arm","hy"],["baq","eu"],["bur","my"],["chi","zh"],["cze","cs"],["dut","nl"],["fre","fr"],["geo","ka"],["ger","de"],["gre","el"],["ice","is"],["mac","mk"],["mao","mi"],["may","ms"],["per","fa"],["rum","ro"],["slo","sk"],["tib","bo"],["wel","cy"]]);function normalizeLanguage(locale21){var parts=locale21.split("-");var language=(parts[0]||"").toLowerCase();language=iso3to2.get(language)||language;var region=parts[1]?parts[1].toUpperCase():"";return region?"".concat(language,"-").concat(region):language}function languageRelatedness(target,candidate){var t=normalizeLanguage(target);var c=normalizeLanguage(candidate);if(c===t)return 4;var tParts=t.split("-");var cParts=c.split("-");if(tParts[0]!==cParts[0])return 0;if(cParts.length===1&&tParts.length===2)return 3;if(cParts.length===2&&tParts.length===2)return 2;return 1}function findBestLanguageMatch(target,available){return max(available,compareBy(function(lang){return languageRelatedness(target,lang)}))}// src/streaming/mediaTimelineLanguageFilter.ts
|
|
1518
1518
|
function createLanguageFilter(preferredLanguage,contentType2){if(!preferredLanguage)return null;var bestRelevanceForPeriod=memoize(function(array2){var langs=Array.from(array2).filter(function(q){return q.contentType===contentType2&&q.lang}).map(function(q){return q.lang});return languageRelatedness(preferredLanguage,findBestLanguageMatch(preferredLanguage,langs))},function(array2){return array2},1);return function(quality,_index,array2){if(quality.contentType!==contentType2)return true;if(!quality.lang)return true;var bestScore=bestRelevanceForPeriod(array2);return languageRelatedness(preferredLanguage,quality.lang)>=bestScore}}// src/streaming/mediaTimelineFilter.ts
|
|
1519
1519
|
function filterTimelineQualities(filter,throwError,timeline){if(!filter)return timeline;var mapMetadataArray=memoize(function(qualities){return map(qualities,function(q){return q.metadata})},function(qualities){return qualities},1);var periods=timeline.periods.map(function(period){var filtered=period.qualities.filter(function(q,index){return filter(q.metadata,index,mapMetadataArray(period.qualities))});return __spreadProps(__spreadValues({},period),{qualities:filtered})});if(periods.some(function(p){return p.qualities.length===0})){throwError()}return __spreadProps(__spreadValues({},timeline),{periods:periods})}function filterTimelineQualitiesAsync(_x32,_x33,_x34){return _filterTimelineQualitiesAsync.apply(this,arguments)}// src/track/filters/resourceTypeFilter.ts
|
|
1520
|
-
function _filterTimelineQualitiesAsync(){_filterTimelineQualitiesAsync=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1520
|
+
function _filterTimelineQualitiesAsync(){_filterTimelineQualitiesAsync=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee569(filter,throwError,timeline){var mapMetadataArray,periods,_iterator90,_step90,period,filtered,metadataArray,i,_t52;return _regenerator().w(function(_context569){while(1)switch(_context569.p=_context569.n){case 0:mapMetadataArray=memoize(function(qualities){return map(qualities,function(q){return q.metadata})},function(qualities){return qualities},1);periods=[];_iterator90=_createForOfIteratorHelper(timeline.periods);_context569.p=1;_iterator90.s();case 2:if((_step90=_iterator90.n()).done){_context569.n=8;break}period=_step90.value;filtered=[];metadataArray=mapMetadataArray(period.qualities);i=0;case 3:if(!(i<period.qualities.length)){_context569.n=6;break}_context569.n=4;return filter(period.qualities[i].metadata,i,metadataArray);case 4:if(!_context569.v){_context569.n=5;break}filtered.push(period.qualities[i]);case 5:i++;_context569.n=3;break;case 6:periods.push(__spreadProps(__spreadValues({},period),{qualities:filtered}));case 7:_context569.n=2;break;case 8:_context569.n=10;break;case 9:_context569.p=9;_t52=_context569.v;_iterator90.e(_t52);case 10:_context569.p=10;_iterator90.f();return _context569.f(10);case 11:if(periods.some(function(p){return p.qualities.length===0})){throwError()}return _context569.a(2,__spreadProps(__spreadValues({},timeline),{periods:periods}))}},_callee569,null,[[1,9,10,11]])}));return _filterTimelineQualitiesAsync.apply(this,arguments)}function throwMimeTypesUnsupported(){throw new MediaUnsupportedError("No resource type supported (container/codec).","resource-type")}function canPlayMimeType(deps,metadata){if(!metadata.mimeType)return false;return deps.capabilities.canPlayTypeMse(metadata.mimeType)}// src/track/filters/keySystemFilter.ts
|
|
1521
1521
|
function throwKeySystemsUnsupported(){throw new MediaUnsupportedError("No key system supported.","key-system")}function canPlayKeySystem(_x35,_x36){return _canPlayKeySystem.apply(this,arguments)}// src/track/filters/sampleRateFilter.ts
|
|
1522
|
-
function _canPlayKeySystem(){_canPlayKeySystem=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1522
|
+
function _canPlayKeySystem(){_canPlayKeySystem=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee570(deps,metadata){return _regenerator().w(function(_context570){while(1)switch(_context570.n){case 0:if(metadata.contentProtections.length){_context570.n=1;break}return _context570.a(2,true);case 1:_context570.n=2;return deps.drmController.isSupported(metadata);case 2:return _context570.a(2,_context570.v.supported)}},_callee570)}));return _canPlayKeySystem.apply(this,arguments)}function throwSamplingRatesUnsupported(){throw new MediaUnsupportedError("No supported sample rate","sampling-rate")}function supportsAudioSamplingRate(deps,metadata,_index,array2){var isFirefox=hasBrowser("Firefox"/* FIREFOX */);var maxSampleRate=deps.capabilities.sampleRate;var samplingRate=last(metadata.audioSamplingRate);if(!samplingRate||!maxSampleRate)return true;if(isFirefox){return samplingRate<=48e3}if(samplingRate<=maxSampleRate)return true;var allAboveMax=every(array2,function(item){var itemSamplingRate=last(item.audioSamplingRate);return itemSamplingRate!=null&&itemSamplingRate>maxSampleRate});if(allAboveMax){var samplingRates=map(array2,function(item){return last(item.audioSamplingRate)}).filter(function(rate){return rate!=null});var lowestSamplingRate=min(samplingRates);return samplingRate===lowestSamplingRate}return false}// src/streaming/createDefaultMediaTimelineTransformer.ts
|
|
1523
1523
|
function createDefaultMediaTimelineTransformer(deps){function transformTimeline(_x37){return _transformTimeline.apply(this,arguments)}function _transformTimeline(){_transformTimeline=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee36(timeline){var t;return _regenerator().w(function(_context36){while(1)switch(_context36.n){case 0:t=filterTimelineQualities(function(quality){return canPlayMimeType(deps,quality)},throwMimeTypesUnsupported,timeline);_context36.n=1;return filterTimelineQualitiesAsync(function(quality){return canPlayKeySystem(deps,quality)},throwKeySystemsUnsupported,t);case 1:t=_context36.v;t=filterTimelineQualities(function(quality,index,array2){return supportsAudioSamplingRate(deps,quality,index,array2)},throwSamplingRatesUnsupported,t);t=filterTimelineQualities(createLanguageFilter(deps.options.value.preferredAudioLanguage,"audio"),throwLanguagesUnsupported,t);return _context36.a(2,t)}},_callee36)}));return _transformTimeline.apply(this,arguments)}return combineData({timeline:deps.mediaTimeline,preferredAudioLanguage:deps.options.pick("preferredAudioLanguage")}).map(/*#__PURE__*/function(){var _ref30=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee35(_ref29){var timeline,_t8;return _regenerator().w(function(_context35){while(1)switch(_context35.n){case 0:timeline=_ref29.timeline;_t8=transformTimeline;_context35.n=1;return timeline;case 1:return _context35.a(2,_t8(_context35.v))}},_callee35)}));return function(_x38){return _ref30.apply(this,arguments)}}())}// src/track/dash/createDashFactories.ts
|
|
1524
1524
|
function createDashFactories(options){return function(deps){return function(loadOptions){return validateFactories(__spreadProps(__spreadValues({},externalDependencies(deps)),{contentTypesValue:createDashContentTypesValue,baseUrlSelector:function baseUrlSelector(){return pickFirstBaseUrlSelector},segmentRequestInit:function segmentRequestInit(){return loadOptions.segmentRequestInit},manifestProvider:createDashManifestProvider(loadOptions),manifestController:function manifestController(deps2){return new DashManifestControllerImpl(deps2)},mediaSourceFactory:function mediaSourceFactory(){return createMediaSource},mediaQualityMetadataResolver:function mediaQualityMetadataResolver(deps2){return createDefaultDashMediaQualityMetadataResolver(deps2)},mediaSourceController:function mediaSourceController(deps2){return new MediaSourceControllerImpl(deps2)},createContentStreamFactories:createDashContentStreamFactories(options==null?void 0:options.streaming),contentStreamFactory:createContentStreamFactory,qualitySelector:function qualitySelector(deps2){return new QualitySelectorImpl({options:deps2.options.pick("abr")})},manifestTransformed:createDefaultDashManifestTransformer,mediaTimeline:function mediaTimeline(deps2){return deps2.manifestTransformed.map(/*#__PURE__*/function(){var _ref31=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee37(manifestPromise){var data2;return _regenerator().w(function(_context37){while(1)switch(_context37.n){case 0:_context37.n=1;return manifestPromise;case 1:data2=_context37.v;return _context37.a(2,buildDashMediaTimeline(deps2,data2))}},_callee37)}));return function(_x39){return _ref31.apply(this,arguments)}}())},mediaTimelineTransformed:createDefaultMediaTimelineTransformer}))}}}// src/track/hls/HlsMediaQualityMetadataResolver.ts
|
|
1525
1525
|
function createDefaultHlsMediaQualityMetadataResolver(){return function(variant2,renditions){var _a3,_b,_c;var codecs=variant2.codecs||null;var contentType2=codecs?codecToContentType(codecs.split(",")[0]):null;var audioRendition=variant2.audioGroup?renditions.find(function(r){return r.type==="AUDIO"&&r.groupId===variant2.audioGroup}):void 0;return{qualityId:"".concat(variant2.bandwidth,"-").concat(codecs!=null?codecs:""),decoderId:variant2.uri,groupId:"0",switchingGroupIds:null,mimeType:contentType2?contentTypeToMimeType(contentType2,codecs):null,contentType:contentType2,codecs:codecs,bandwidth:null,bandwidthTotal:variant2.bandwidth,audioSamplingRate:null,width:(_a3=variant2.width)!=null?_a3:null,height:(_b=variant2.height)!=null?_b:null,frameRate:variant2.frameRate?[variant2.frameRate,1]:null,lang:(_c=audioRendition==null?void 0:audioRendition.language)!=null?_c:null,contentProtections:[],encryptionScheme:null,initDataType:null,supplementalProperties:{}}}}// src/track/hls/HlsManifestController.ts
|
|
@@ -1533,7 +1533,7 @@ var EQUALS=_char("=");var COMMA=_char(",");var QUOTE=_char("\"");function parseA
|
|
|
1533
1533
|
var HLS_VARIABLE_PATTERN=/\{\$([^}]+)}/g;var EXTM3U="#EXTM3U";var EXTINF="#EXTINF:";var EXT_X_TARGETDURATION="#EXT-X-TARGETDURATION:";var EXT_X_MEDIA_SEQUENCE="#EXT-X-MEDIA-SEQUENCE:";var EXT_X_ENDLIST="#EXT-X-ENDLIST";var EXT_X_PLAYLIST_TYPE="#EXT-X-PLAYLIST-TYPE:";var EXT_X_VERSION="#EXT-X-VERSION:";var EXT_X_KEY="#EXT-X-KEY:";var EXT_X_BYTERANGE="#EXT-X-BYTERANGE:";var EXT_X_DISCONTINUITY="#EXT-X-DISCONTINUITY";var EXT_X_PROGRAM_DATE_TIME="#EXT-X-PROGRAM-DATE-TIME:";var EXT_X_MAP="#EXT-X-MAP:";function parseMediaPlaylist(text,variables){var reader=new StringReader(text);reader.white();if(!reader.stringIf(EXTM3U)){reader.err("Expected #EXTM3U")}readLine(reader);var version=1;var targetDuration=0;var mediaSequence=0;var playlistType="LIVE";var ended=false;var currentKey;var currentMap;var pendingByteRange;var pendingDiscontinuity=false;var pendingDateTime;var segments=[];var sequenceCounter=0;while(reader.hasNext()){if(skipWhitespaceLine(reader))continue;var line=readLine(reader);var trimmed=line.trim();if(!trimmed)continue;if(trimmed.startsWith(EXTINF)){var durationStr=trimmed.substring(EXTINF.length).split(",")[0];var duration=Number(durationStr);var uri="";while(reader.hasNext()){if(skipWhitespaceLine(reader))continue;var nextLine=readLine(reader).trim();if(!nextLine.startsWith("#")){uri=variables?substitute(nextLine,variables,HLS_VARIABLE_PATTERN):nextLine;break}if(nextLine.startsWith(EXT_X_BYTERANGE)){var rangeStr=nextLine.substring(EXT_X_BYTERANGE.length);pendingByteRange=parseByteRangeString(rangeStr)}else if(nextLine===EXT_X_DISCONTINUITY){pendingDiscontinuity=true}else if(nextLine.startsWith(EXT_X_PROGRAM_DATE_TIME)){pendingDateTime=nextLine.substring(EXT_X_PROGRAM_DATE_TIME.length)}else if(nextLine.startsWith(EXT_X_MAP)){var attrStr=nextLine.substring(EXT_X_MAP.length);var attrReader=new StringReader(attrStr);var attrs=parseAttributes(attrReader);var mapUri=attrs["URI"];if(mapUri){var byteRangeStr=attrs["BYTERANGE"];currentMap=__spreadValues({uri:mapUri},byteRangeStr&&{byteRange:parseByteRangeString(byteRangeStr)})}}}segments.push(__spreadValues(__spreadProps(__spreadValues(__spreadValues(__spreadValues({uri:uri,duration:duration,sequenceNumber:mediaSequence+sequenceCounter},currentKey&&{key:currentKey}),currentMap&&{map:currentMap}),pendingByteRange&&{byteRange:pendingByteRange}),{discontinuity:pendingDiscontinuity}),pendingDateTime&&{programDateTime:pendingDateTime}));sequenceCounter++;pendingByteRange=void 0;pendingDiscontinuity=false;pendingDateTime=void 0}else if(trimmed.startsWith(EXT_X_TARGETDURATION)){targetDuration=Number(trimmed.substring(EXT_X_TARGETDURATION.length))}else if(trimmed.startsWith(EXT_X_MEDIA_SEQUENCE)){mediaSequence=Number(trimmed.substring(EXT_X_MEDIA_SEQUENCE.length))}else if(trimmed===EXT_X_ENDLIST){ended=true}else if(trimmed.startsWith(EXT_X_PLAYLIST_TYPE)){var val=trimmed.substring(EXT_X_PLAYLIST_TYPE.length).trim();if(val==="VOD"||val==="EVENT"){playlistType=val}}else if(trimmed.startsWith(EXT_X_VERSION)){version=Number(trimmed.substring(EXT_X_VERSION.length))}else if(trimmed.startsWith(EXT_X_KEY)){var _attrStr=trimmed.substring(EXT_X_KEY.length);var _attrReader=new StringReader(_attrStr);var _attrs=parseAttributes(_attrReader);var method=_attrs["METHOD"];encryptionMethodValidator.assert(method);currentKey=addIfPresent({method:method},_attrs,{URI:"uri",IV:"iv",KEYFORMAT:"keyFormat",KEYFORMATVERSIONS:"keyFormatVersions"})}else if(trimmed.startsWith(EXT_X_MAP)){var _attrStr2=trimmed.substring(EXT_X_MAP.length);var _attrReader2=new StringReader(_attrStr2);var _attrs2=parseAttributes(_attrReader2);var _mapUri=_attrs2["URI"];if(_mapUri){var _byteRangeStr=_attrs2["BYTERANGE"];currentMap=__spreadValues({uri:_mapUri},_byteRangeStr&&{byteRange:parseByteRangeString(_byteRangeStr)})}}else if(trimmed.startsWith(EXT_X_BYTERANGE)){var _rangeStr=trimmed.substring(EXT_X_BYTERANGE.length);pendingByteRange=parseByteRangeString(_rangeStr)}else if(trimmed===EXT_X_DISCONTINUITY){pendingDiscontinuity=true}else if(trimmed.startsWith(EXT_X_PROGRAM_DATE_TIME)){pendingDateTime=trimmed.substring(EXT_X_PROGRAM_DATE_TIME.length)}}return{version:version,targetDuration:targetDuration,mediaSequence:mediaSequence,playlistType:playlistType,ended:ended,segments:segments}}function parseByteRangeString(str){var parts=str.split("@");return{length:Number(parts[0]),offset:parts.length>1?Number(parts[1]):0}}// ../vinyl-hls-parser/src/parse/parseMainPlaylist.ts
|
|
1534
1534
|
var EXTM3U2="#EXTM3U";var EXT_X_STREAM_INF="#EXT-X-STREAM-INF:";var EXT_X_MEDIA="#EXT-X-MEDIA:";var EXT_X_SESSION_DATA="#EXT-X-SESSION-DATA:";var EXT_X_DEFINE="#EXT-X-DEFINE:";function parseMainPlaylist(text){var reader=new StringReader(text);reader.white();if(!reader.stringIf(EXTM3U2)){reader.err("Expected #EXTM3U")}readLine(reader);var variants=[];var alternativeRenditions=[];var sessionData=[];var defines={};while(reader.hasNext()){if(skipWhitespaceLine(reader))continue;var line=readLine(reader);var trimmed=line.trim();if(!trimmed)continue;if(trimmed.startsWith(EXT_X_STREAM_INF)){var attrStr=trimmed.substring(EXT_X_STREAM_INF.length);var attrReader=new StringReader(attrStr);var attrs=parseAttributes(attrReader);var uri="";while(reader.hasNext()){if(skipWhitespaceLine(reader))continue;uri=readLine(reader).trim();break}variants.push(addIfPresent(__spreadValues(__spreadValues({bandwidth:Number(attrs["BANDWIDTH"]),uri:substituteHlsVariables(uri,defines)},attrs["FRAME-RATE"]&&{frameRate:Number(attrs["FRAME-RATE"])}),attrs.RESOLUTION&&parseResolution(attrs.RESOLUTION)),attrs,{CODECS:"codecs",AUDIO:"audioGroup",VIDEO:"videoGroup",SUBTITLES:"subtitlesGroup","CLOSED-CAPTIONS":"closedCaptionsGroup"}))}else if(trimmed.startsWith(EXT_X_MEDIA)){var _attrStr3=trimmed.substring(EXT_X_MEDIA.length);var _attrReader3=new StringReader(_attrStr3);var _attrs3=parseAttributes(_attrReader3);var type=_attrs3["TYPE"];renditionTypeValidator.assert(type);if(_attrs3["URI"]){_attrs3["URI"]=substituteHlsVariables(_attrs3["URI"],defines)}alternativeRenditions.push(addIfPresent(__spreadValues(__spreadValues({type:type,groupId:_attrs3["GROUP-ID"],name:_attrs3["NAME"]},_attrs3["DEFAULT"]&&{"default":_attrs3["DEFAULT"]==="YES"}),_attrs3["AUTOSELECT"]&&{autoSelect:_attrs3["AUTOSELECT"]==="YES"}),_attrs3,{URI:"uri",LANGUAGE:"language"}))}else if(trimmed.startsWith(EXT_X_SESSION_DATA)){var _attrStr4=trimmed.substring(EXT_X_SESSION_DATA.length);var _attrReader4=new StringReader(_attrStr4);var _attrs4=parseAttributes(_attrReader4);sessionData.push(addIfPresent({dataId:_attrs4["DATA-ID"]},_attrs4,{VALUE:"value",URI:"uri",LANGUAGE:"language"}))}else if(trimmed.startsWith(EXT_X_DEFINE)){var _attrStr5=trimmed.substring(EXT_X_DEFINE.length);var _attrReader5=new StringReader(_attrStr5);var _attrs5=parseAttributes(_attrReader5);if(_attrs5["NAME"]&&_attrs5["VALUE"]){defines[_attrs5["NAME"]]=_attrs5["VALUE"]}}}return{variants:variants,alternativeRenditions:alternativeRenditions,sessionData:sessionData,defines:defines}}function substituteHlsVariables(value,variables){if(!value||Object.keys(variables).length===0)return value;return substitute(value,variables,HLS_VARIABLE_PATTERN)}function parseResolution(resolution){var parts=resolution.split("x");if(parts.length!==2){throw new ValidationError("Invalid resolution format, expected WIDTHxHEIGHT")}var width=Number(parts[0]);var height=Number(parts[1]);if(!Number.isInteger(width)||!Number.isInteger(height)||width<=0||height<=0){throw new ValidationError("Invalid resolution values, width and height must be positive integers")}return{width:width,height:height}}// src/track/hls/createUrlHlsManifestProvider.ts
|
|
1535
1535
|
function createUrlHlsManifestProvider(url,requestInit){return/*#__PURE__*/function(){var _ref32=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee38(abort){var mainResponse,mainText,mainPlaylist,baseUrl,getMediaPlaylist;return _regenerator().w(function(_context38){while(1)switch(_context38.n){case 0:_context38.n=1;return requestWithRetry(url,requestInit,{abort:abort});case 1:mainResponse=_context38.v;_context38.n=2;return mainResponse.text();case 2:mainText=_context38.v;mainPlaylist=parseMainPlaylist(mainText);baseUrl=mainResponse.url||url;getMediaPlaylist=memoize(function(uri){return fetchMediaPlaylist({uri:uri,baseUrl:baseUrl,defines:mainPlaylist.defines,requestInit:requestInit,abort:abort})},function(uri){return uri});return _context38.a(2,{mainPlaylist:mainPlaylist,baseUrl:baseUrl,getMediaPlaylist:getMediaPlaylist})}},_callee38)}));return function(_x40){return _ref32.apply(this,arguments)}}()}function fetchMediaPlaylist(_x41){return _fetchMediaPlaylist.apply(this,arguments)}// src/track/hls/createHlsContentTypesValue.ts
|
|
1536
|
-
function _fetchMediaPlaylist(){_fetchMediaPlaylist=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1536
|
+
function _fetchMediaPlaylist(){_fetchMediaPlaylist=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee571(options){var uri,baseUrl,defines,requestInit,abort,variantUrl,response,text;return _regenerator().w(function(_context571){while(1)switch(_context571.n){case 0:uri=options.uri,baseUrl=options.baseUrl,defines=options.defines,requestInit=options.requestInit,abort=options.abort;variantUrl=resolveUrl(uri,baseUrl);_context571.n=1;return requestWithRetry(variantUrl,requestInit,{abort:abort});case 1:response=_context571.v;_context571.n=2;return response.text();case 2:text=_context571.v;return _context571.a(2,parseMediaPlaylist(text,defines))}},_callee571)}));return _fetchMediaPlaylist.apply(this,arguments)}function createHlsContentTypesValue(deps){return deps.manifestTransformed.map(/*#__PURE__*/function(){var _ref33=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee39(manifestData2){var _t9;return _regenerator().w(function(_context39){while(1)switch(_context39.n){case 0:_t9=getContentTypes2;_context39.n=1;return manifestData2;case 1:return _context39.a(2,_t9(_context39.v.mainPlaylist))}},_callee39)}));return function(_x42){return _ref33.apply(this,arguments)}}())}function getContentTypes2(mainPlaylist){var contentTypes=/* @__PURE__ */new Set;var _iterator63=_createForOfIteratorHelper(mainPlaylist.variants),_step63;try{for(_iterator63.s();!(_step63=_iterator63.n()).done;){var variant2=_step63.value;if(variant2.codecs){var _iterator65=_createForOfIteratorHelper(codecsToContentTypes(variant2.codecs)),_step65;try{for(_iterator65.s();!(_step65=_iterator65.n()).done;){var type=_step65.value;if(type==="audio"||type==="video"){contentTypes.add(type)}}}catch(err){_iterator65.e(err)}finally{_iterator65.f()}}}}catch(err){_iterator63.e(err)}finally{_iterator63.f()}var _iterator64=_createForOfIteratorHelper(mainPlaylist.alternativeRenditions),_step64;try{for(_iterator64.s();!(_step64=_iterator64.n()).done;){var rendition=_step64.value;if(rendition.type==="AUDIO")contentTypes.add("audio");if(rendition.type==="VIDEO")contentTypes.add("video")}}catch(err){_iterator64.e(err)}finally{_iterator64.f()}return contentTypes}// src/track/hls/createHlsContentStreamFactories.ts
|
|
1537
1537
|
function createHlsContentStreamFactories(options){return function(deps){return memoize(function(contentType2){return validateFactories(__spreadProps(__spreadValues({},externalDependencies(deps)),{sourceBufferControllerFactory:function sourceBufferControllerFactory(deps2){return function(){return new SourceBufferControllerImpl(deps2,contentType2)}},bufferingController:function bufferingController(deps2){return new BufferingControllerImpl(deps2,contentType2,options==null?void 0:options.buffering)},segmentController:function segmentController(deps2){return new SegmentControllerImpl(deps2,contentType2,options==null?void 0:options.segmentController)}}))},function(contentType2){return contentType2})}}// src/track/hls/createDefaultHlsManifestTransformer.ts
|
|
1538
1538
|
function createDefaultHlsManifestTransformer(deps){return deps.manifestController.map(/*#__PURE__*/function(){var _ref34=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee40(v){var data2,sorted;return _regenerator().w(function(_context40){while(1)switch(_context40.n){case 0:_context40.n=1;return v;case 1:data2=_context40.v;sorted=_toConsumableArray(data2.mainPlaylist.variants).sort(function(a,b){return b.bandwidth-a.bandwidth});return _context40.a(2,__spreadProps(__spreadValues({},data2),{mainPlaylist:__spreadProps(__spreadValues({},data2.mainPlaylist),{variants:sorted})}))}},_callee40)}));return function(_x43){return _ref34.apply(this,arguments)}}())}// src/track/hls/util/hlsByteRangeToMediaRange.ts
|
|
1539
1539
|
function hlsByteRangeToMediaRange(byteRange){return[byteRange.offset,byteRange.offset+byteRange.length-1]}// src/track/hls/util/hlsSegmentTime.ts
|
|
@@ -1575,7 +1575,7 @@ function extractContentId(initData){var bufferStr=bufferToUtf16(initData.buffer)
|
|
|
1575
1575
|
function createFairPlaySessionInitData(initData,contentId,certificateData){var contentIdUint16=utf16ToUint16Array(contentId);var certificateDataUint8=certificateData;var offset=0;var buffer=new ArrayBuffer(initData.byteLength+4+// contentId length
|
|
1576
1576
|
contentIdUint16.byteLength+4+// certificateDataUint8 length
|
|
1577
1577
|
certificateDataUint8.byteLength);var initDataArray=new Uint8Array(buffer,offset,initData.byteLength);initDataArray.set(initData);offset+=initData.byteLength;var dataView=new DataView(buffer);dataView.setUint32(offset,contentIdUint16.byteLength,true);offset+=4;var idArray=new Uint16Array(buffer,offset,contentIdUint16.length);idArray.set(contentIdUint16);offset+=idArray.byteLength;dataView.setUint32(offset,certificateDataUint8.byteLength,true);offset+=4;var certArray=new Uint8Array(buffer,offset,certificateDataUint8.byteLength);certArray.set(certificateDataUint8);return new Uint8Array(buffer,0,buffer.byteLength)}// src/drm/DrmControllerImpl.ts
|
|
1578
|
-
var LICENSE_TIMEOUT=90;var LICENSE_TIMEOUT_MESSAGE="License provider timed out after {time}s";var DrmControllerImpl=/*#__PURE__*/function(_EventHostImpl15){function DrmControllerImpl(deps,options){var _this112;_classCallCheck(this,DrmControllerImpl);_this112=_callSuper(this,DrmControllerImpl);__publicField(_this112,"deps",deps);__publicField(_this112,"optionsBase");__publicField(_this112,"options");__publicField(_this112,"mediaKeys",null);__publicField(_this112,"mediaKeysPromise",null);__publicField(_this112,"sessions",[]);__publicField(_this112,"_error",null);__publicField(_this112,"drmInfo",null);__publicField(_this112,"sessionAbort",null);__publicField(_this112,"pendingMessageProps",null);__publicField(_this112,"disposer",createDisposer());__publicField(_this112,"checkIsSupportedCached",memoize(/*#__PURE__*/function(){var _ref37=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee50(params){var _t0;return _regenerator().w(function(_context50){while(1)switch(_context50.p=_context50.n){case 0:_context50.p=0;_context50.n=1;return _this112.deps.commonEme.requestMediaKeySystemAccess(params.keySystem,[params.config]);case 1:logVerbose(_this112,"requestMediaKeySystemAccess supported",params);return _context50.a(2,{supported:true,persistentState:params.config.persistentState==="required"});case 2:_context50.p=2;_t0=_context50.v;logVerbose(_this112,"requestMediaKeySystemAccess rejected",params);return _context50.a(2,{supported:false,persistentState:false})}},_callee50,null,[[0,2]])}));return function(_x54){return _ref37.apply(this,arguments)}}(),function(options){return options.cacheKey},20// capacity
|
|
1578
|
+
var LICENSE_TIMEOUT=90;var LICENSE_TIMEOUT_MESSAGE="License provider timed out after {time}s";var EXCESSIVE_SESSION_COUNT=20;var DrmControllerImpl=/*#__PURE__*/function(_EventHostImpl15){function DrmControllerImpl(deps,options){var _this112;_classCallCheck(this,DrmControllerImpl);_this112=_callSuper(this,DrmControllerImpl);__publicField(_this112,"deps",deps);__publicField(_this112,"optionsBase");__publicField(_this112,"options");__publicField(_this112,"mediaKeys",null);__publicField(_this112,"mediaKeysPromise",null);__publicField(_this112,"sessions",[]);__publicField(_this112,"_error",null);__publicField(_this112,"drmInfo",null);__publicField(_this112,"sessionAbort",null);__publicField(_this112,"pendingMessageProps",null);__publicField(_this112,"disposer",createDisposer());__publicField(_this112,"checkIsSupportedCached",memoize(/*#__PURE__*/function(){var _ref37=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee50(params){var _t0;return _regenerator().w(function(_context50){while(1)switch(_context50.p=_context50.n){case 0:_context50.p=0;_context50.n=1;return _this112.deps.commonEme.requestMediaKeySystemAccess(params.keySystem,[params.config]);case 1:logVerbose(_this112,"requestMediaKeySystemAccess supported",params);return _context50.a(2,{supported:true,persistentState:params.config.persistentState==="required"});case 2:_context50.p=2;_t0=_context50.v;logVerbose(_this112,"requestMediaKeySystemAccess rejected",params);return _context50.a(2,{supported:false,persistentState:false})}},_callee50,null,[[0,2]])}));return function(_x54){return _ref37.apply(this,arguments)}}(),function(options){return options.cacheKey},20// capacity
|
|
1579
1579
|
));__publicField(_this112,"handleEncryptedEvent",function(event){if(_this112.disposed)return;_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee51(){var _a3,initData,initDataType;return _regenerator().w(function(_context51){while(1)switch(_context51.n){case 0:initData=event.initData,initDataType=event.initDataType;if(initData){_context51.n=1;break}throw new DrmError("encrypted event provided null initData. Check CORS policies.");case 1:logDebug(_this112,"encrypted, initDataType: ".concat(initDataType,", initData.byteLength: ").concat(initData.byteLength));if((_a3=_this112.drmInfo)==null?void 0:_a3.contentProtections.length){_context51.n=2;break}throw new DrmError("Encrypted content not configured with content protections.");case 2:_context51.n=3;return _this112.maybeCreateSession(_this112.drmInfo,initDataType,initData,_this112.sessionAbort);case 3:return _context51.a(2)}},_callee51)}))()["catch"](_this112.handleError)});/**
|
|
1580
1580
|
* A handler which dispatches an error event.
|
|
1581
1581
|
* Only one error event will be emitted per unique PSSH.
|
|
@@ -1589,14 +1589,14 @@ var LICENSE_TIMEOUT=90;var LICENSE_TIMEOUT_MESSAGE="License provider timed out a
|
|
|
1589
1589
|
* Creates a session for the given initialization data if none currently exists.
|
|
1590
1590
|
* This will be done either after an 'encrypted' event or when drm metadata contains initialization data.
|
|
1591
1591
|
* The new session will be added to the current sessions list.
|
|
1592
|
-
*/)},{key:"maybeCreateSession",value:(function(){var _maybeCreateSession=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee55(drmInfo,initDataType,initData,abort){var _this114=this;var _a3,mediaKeys,keySystemOptions,licenseServerOptionsProvider,licenseServerOptions,existingSession,newSession;return _regenerator().w(function(_context55){while(1)switch(_context55.n){case 0:if(hasMimeType(drmInfo)){_context55.n=1;break}throw new DrmError("Encrypted content must have a mimeType.");case 1:_context55.n=2;return this.attachMediaKeys(drmInfo);case 2:mediaKeys=_context55.v;this.abortIfDisposed();keySystemOptions=(_a3=this.options.keySystems[mediaKeys.keySystem])!=null?_a3:this.options.keySystems["*"];licenseServerOptionsProvider=keySystemOptions==null?void 0:keySystemOptions.licenseServer;_context55.n=3;return resolveValueProvider(licenseServerOptionsProvider!=null?licenseServerOptionsProvider:{});case 3:licenseServerOptions=_context55.v;this.abortIfDisposed();existingSession=this.getSessionByInitData(initData);if(!existingSession){_context55.n=4;break}logDebug(this,"reusing session");return _context55.a(2,existingSession);case 4:_context55.n=5;return this.createNewSession(licenseServerOptions.serverCertificate,mediaKeys,initData,initDataType,drmInfo,keySystemOptions==null?void 0:keySystemOptions.initDataTransformer);case 5:newSession=_context55.v;this.sessions.push(newSession);this.dispatch("sessionCreate",{initDataType:newSession.initDataType,mimeType:newSession.mimeType});newSession.on("closed",function(){return _this114.closeSession(newSession)});abort==null?void 0:abort.onAborted(function(){logDebug(_this114,"abort session");_this114.closeSession(newSession)});return _context55.a(2,newSession);case 6:return _context55.a(2)}},_callee55,this)}));function maybeCreateSession(_x57,_x58,_x59,_x60){return _maybeCreateSession.apply(this,arguments)}return maybeCreateSession}())},{key:"initializeForPlayback",value:function initializeForPlayback(drmInfo,abort){logDebug(this,"initializeForPlayback",drmInfo);if(drmInfo==null?void 0:drmInfo.contentProtections.length){this.createSessionFromInitData(drmInfo,abort)["catch"](this.handleError)}}},{key:"setBufferingDrmInfo",value:function setBufferingDrmInfo(drmInfo,abort){logDebug(this,"setBufferingDrmInfo",drmInfo);this.reset();this.drmInfo=drmInfo;this.sessionAbort=abort!=null?abort:null}/**
|
|
1592
|
+
*/)},{key:"maybeCreateSession",value:(function(){var _maybeCreateSession=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee55(drmInfo,initDataType,initData,abort){var _this114=this;var _a3,mediaKeys,keySystemOptions,licenseServerOptionsProvider,licenseServerOptions,existingSession,newSession;return _regenerator().w(function(_context55){while(1)switch(_context55.n){case 0:if(hasMimeType(drmInfo)){_context55.n=1;break}throw new DrmError("Encrypted content must have a mimeType.");case 1:_context55.n=2;return this.attachMediaKeys(drmInfo);case 2:mediaKeys=_context55.v;this.abortIfDisposed();keySystemOptions=(_a3=this.options.keySystems[mediaKeys.keySystem])!=null?_a3:this.options.keySystems["*"];licenseServerOptionsProvider=keySystemOptions==null?void 0:keySystemOptions.licenseServer;_context55.n=3;return resolveValueProvider(licenseServerOptionsProvider!=null?licenseServerOptionsProvider:{});case 3:licenseServerOptions=_context55.v;this.abortIfDisposed();existingSession=this.getSessionByInitData(initData);if(!existingSession){_context55.n=4;break}logDebug(this,"reusing session");return _context55.a(2,existingSession);case 4:_context55.n=5;return this.createNewSession(licenseServerOptions.serverCertificate,mediaKeys,initData,initDataType,drmInfo,keySystemOptions==null?void 0:keySystemOptions.initDataTransformer);case 5:newSession=_context55.v;this.sessions.push(newSession);logVerbose(this,"total sessions: ".concat(this.sessions.length));if(this.sessions.length===EXCESSIVE_SESSION_COUNT+1){logWarn(this,"".concat(this.sessions.length," open key sessions exceeds ").concat(EXCESSIVE_SESSION_COUNT,"; sessions may be leaking (not closing on track deactivation)"))}this.dispatch("sessionCreate",{initDataType:newSession.initDataType,mimeType:newSession.mimeType});newSession.on("closed",function(){return _this114.closeSession(newSession)});abort==null?void 0:abort.onAborted(function(){if(_this114.disposed)return;logDebug(_this114,"abort session");_this114.closeSession(newSession)});return _context55.a(2,newSession);case 6:return _context55.a(2)}},_callee55,this)}));function maybeCreateSession(_x57,_x58,_x59,_x60){return _maybeCreateSession.apply(this,arguments)}return maybeCreateSession}())},{key:"initializeForPlayback",value:function initializeForPlayback(drmInfo,abort){logDebug(this,"initializeForPlayback",drmInfo);if(drmInfo==null?void 0:drmInfo.contentProtections.length){this.createSessionFromInitData(drmInfo,abort)["catch"](this.handleError)}}},{key:"setBufferingDrmInfo",value:function setBufferingDrmInfo(drmInfo,abort){logDebug(this,"setBufferingDrmInfo",drmInfo);this.reset();this.drmInfo=drmInfo;this.sessionAbort=abort!=null?abort:null}/**
|
|
1593
1593
|
* If the drm metadata contains initialization data for the current key system, create a new session.
|
|
1594
1594
|
* Otherwise, wait for the 'encrypted' event for the initialization data.
|
|
1595
1595
|
*/},{key:"createSessionFromInitData",value:(function(){var _createSessionFromInitData=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee56(drmInfo,abort){var _a3,_b,mediaKeys,drmProtection;return _regenerator().w(function(_context56){while(1)switch(_context56.n){case 0:if(this.deps.commonEme){_context56.n=1;break}this.handleError(new DrmError("DRM not supported."));return _context56.a(2);case 1:_context56.n=2;return this.attachMediaKeys(drmInfo);case 2:mediaKeys=_context56.v;drmProtection=(_a3=drmInfo.contentProtections.find(function(cP){return cP.keySystem===mediaKeys.keySystem}))!=null?_a3:null;if(drmProtection){_context56.n=3;break}throw new DrmError("Encrypted content does not support set keySystem: '".concat(mediaKeys.keySystem,"'."),{drmInfo:drmInfo});case 3:if(!drmProtection.pssh){_context56.n=4;break}_context56.n=4;return this.maybeCreateSession(drmInfo,(_b=drmInfo.initDataType)!=null?_b:"cenc",base64ToByteArray(drmProtection.pssh),abort);case 4:return _context56.a(2)}},_callee56,this)}));function createSessionFromInitData(_x61,_x62){return _createSessionFromInitData.apply(this,arguments)}return createSessionFromInitData}()/**
|
|
1596
1596
|
* Creates a CommonMediaKeySystemAccess object from the given content protection settings.
|
|
1597
1597
|
*/)},{key:"createAccess",value:(function(){var _createAccess=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee57(drmInfo){var accessParamsList,_iterator83,_step83,_step83$value,keySystem,config,access,_t10,_t11;return _regenerator().w(function(_context57){while(1)switch(_context57.p=_context57.n){case 0:accessParamsList=this.createMediaKeySystemAccessParams(drmInfo);_iterator83=_createForOfIteratorHelper(accessParamsList);_context57.p=1;_iterator83.s();case 2:if((_step83=_iterator83.n()).done){_context57.n=7;break}_step83$value=_step83.value,keySystem=_step83$value.keySystem,config=_step83$value.config;_context57.p=3;_context57.n=4;return this.deps.commonEme.requestMediaKeySystemAccess(keySystem,[config]);case 4:access=_context57.v;logDebug(this,"created media key system access for keySystem: ".concat(access.keySystem,"}"),config);return _context57.a(2,access);case 5:_context57.p=5;_t10=_context57.v;case 6:_context57.n=2;break;case 7:_context57.n=9;break;case 8:_context57.p=8;_t11=_context57.v;_iterator83.e(_t11);case 9:_context57.p=9;_iterator83.f();return _context57.f(9);case 10:throw new DrmError("No keySystem supported",{contentProtections:drmInfo,attemptedKeySystems:accessParamsList.map(function(arr){return arr.keySystem})},ErrorOrigin.DRM);case 11:return _context57.a(2)}},_callee57,this,[[3,5],[1,8,9,10]])}));function createAccess(_x63){return _createAccess.apply(this,arguments)}return createAccess}()/**
|
|
1598
1598
|
* Creates a list of the MediaKeySystemAccess configurations to try for the given media format options.
|
|
1599
|
-
*/)},{key:"createMediaKeySystemAccessParams",value:function createMediaKeySystemAccessParams(drmInfo){var _this115=this;var keySystems=drmInfo.contentProtections.map(function(protection){return protection.keySystem}).sort(this.keySystemComparator);return keySystems.map(function(keySystem){var _a3,_b;var mediaOptions=_this115.getMediaKeySystemOptions(keySystem,drmInfo.contentType);var capability={robustness:(_a3=mediaOptions==null?void 0:mediaOptions.robustness)!=null?_a3:"SW_SECURE_CRYPTO"/* SW_SECURE_CRYPTO */,encryptionScheme:drmInfo.encryptionScheme};if(drmInfo.mimeType){capability.contentType=drmInfo.mimeType}var config={initDataTypes:[(_b=drmInfo.initDataType)!=null?_b:"cenc"]};var contentType2=drmInfo.contentType;if(contentType2==="video"){config.videoCapabilities=[capability]}else if(contentType2==="audio"){config.audioCapabilities=[capability]}return{keySystem:keySystem,config:config,// Concatenate a list of inputs to use as a cache key for isSupported checks.
|
|
1599
|
+
*/)},{key:"createMediaKeySystemAccessParams",value:function createMediaKeySystemAccessParams(drmInfo){var _this115=this;var keySystems=drmInfo.contentProtections.map(function(protection){return protection.keySystem}).sort(this.keySystemComparator);return keySystems.map(function(keySystem){var _a3,_b,_c;var mediaOptions=_this115.getMediaKeySystemOptions(keySystem,drmInfo.contentType);var capability={robustness:(_a3=mediaOptions==null?void 0:mediaOptions.robustness)!=null?_a3:"SW_SECURE_CRYPTO"/* SW_SECURE_CRYPTO */,encryptionScheme:drmInfo.encryptionScheme};if(drmInfo.mimeType){capability.contentType=drmInfo.mimeType}var config={initDataTypes:[(_b=drmInfo.initDataType)!=null?_b:"cenc"]};var contentType2=drmInfo.contentType;if(contentType2==="video"){config.videoCapabilities=[capability]}else if(contentType2==="audio"){config.audioCapabilities=[capability];if(((_c=getUserAgentInfo().os)==null?void 0:_c.name)==="chromeOS"/* CHROME_OS */){logDebug(_this115,"Adding video avc1 drm capabilities for VMP");config.videoCapabilities=[{contentType:"video/mp4; codecs=\"avc1.4d401f\"",robustness:"SW_SECURE_DECODE"}]}}return{keySystem:keySystem,config:config,// Concatenate a list of inputs to use as a cache key for isSupported checks.
|
|
1600
1600
|
cacheKey:[keySystem,drmInfo.mimeType,drmInfo.contentType,capability.robustness,drmInfo.encryptionScheme,drmInfo.initDataType].map(String).join("|")}})}},{key:"getMediaKeySystemOptions",value:function getMediaKeySystemOptions(keySystem,contentType2){var _a3;var keySystems=this.options.keySystems;var keySystemOptions=(_a3=keySystems[keySystem])!=null?_a3:keySystems["*"];if(!keySystemOptions)return void 0;switch(contentType2){case"video":return keySystemOptions.video;case"audio":return keySystemOptions.audio;default:return void 0}}/**
|
|
1601
1601
|
* Creates a new key session and adds a message handler.
|
|
1602
1602
|
*/},{key:"createNewSession",value:(function(){var _createNewSession=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee58(serverCertificate,mediaKeys,initData,initDataType,drmInfo,initDataTransformer){var _this116=this;var certBytes,transform,session;return _regenerator().w(function(_context58){while(1)switch(_context58.n){case 0:certBytes=serverCertificate?typeof serverCertificate==="string"?base64ToByteArray(serverCertificate):bufferToByteArray(serverCertificate):null;if(!certBytes){_context58.n=1;break}_context58.n=1;return mediaKeys.setServerCertificate(certBytes);case 1:transform=initDataTransformer!=null?initDataTransformer:defaultInitDataTransformer(mediaKeys.keySystem,certBytes);initData=transform(bufferToByteArray(initData),initDataType,drmInfo);logDebug(this,"createSession",drmInfo.mimeType,initDataType);session=mediaKeys.createSession(drmInfo.mimeType,initDataType,initData);session.on("message",function(event){withTimeout(_this116.messageHandler({mediaKeys:mediaKeys,session:session,event:event}),LICENSE_TIMEOUT,LICENSE_TIMEOUT_MESSAGE)["catch"](_this116.handleError)});session.on("error",function(event){_this116.closeSession(session);_this116.handleError(event.error)});return _context58.a(2,session)}},_callee58,this)}));function createNewSession(_x64,_x65,_x66,_x67,_x68,_x69){return _createNewSession.apply(this,arguments)}return createNewSession}()/**
|
|
@@ -1631,7 +1631,7 @@ function createVinylFactories(options){var _a3;var patches=mergeDeep([defaultPat
|
|
|
1631
1631
|
var locale20={maxPlayersWarning:"{count} Vinyl Players have been constructed without disposal. Check that player.dispose is properly being called, then increase the maxPlayersWarning option if this was intentional."};var DEFAULT_MAX_PLAYERS=5;var PlayerRegistryImpl=/*#__PURE__*/function(){function PlayerRegistryImpl(){var maxPlayersWarning=arguments.length>0&&arguments[0]!==undefined?arguments[0]:DEFAULT_MAX_PLAYERS;_classCallCheck(this,PlayerRegistryImpl);__publicField(this,"maxPlayersWarning",maxPlayersWarning);__publicField(this,"_players",[]);__publicField(this,"gaveMaxPlayersWarning",false)}return _createClass(PlayerRegistryImpl,[{key:"players",get:function get(){return this._players}},{key:"addPlayer",value:function addPlayer(player){this._players.push(player);var n=this._players.length;if(n>this.maxPlayersWarning&&!this.gaveMaxPlayersWarning){this.gaveMaxPlayersWarning=true;logWarn(globalTarget,substitute(locale20.maxPlayersWarning,{count:n}))}}},{key:"removePlayer",value:function removePlayer(player){remove(this._players,player)}/**
|
|
1632
1632
|
* @throws An IllegalStateError if all players have not been removed.
|
|
1633
1633
|
*/},{key:"dispose",value:function dispose(){if(this._players.length)throw new IllegalStateError("All players must be removed before disposing VinylGlobal")}}])}();var playerRegistryRef=globalRef(function(){return new PlayerRegistryImpl});// src/global/environment.ts
|
|
1634
|
-
var vinylVersion=parseVersion(/* istanbul ignore next */"1.2.
|
|
1634
|
+
var vinylVersion=parseVersion(/* istanbul ignore next */"1.2.1");// src/global/globalRef.ts
|
|
1635
1635
|
var VinylGlobal=/*#__PURE__*/function(){function VinylGlobal(){_classCallCheck(this,VinylGlobal)}return _createClass(VinylGlobal,[{key:"players",get:function get(){return playerRegistryRef.value.players}/**
|
|
1636
1636
|
* Returns the first player.
|
|
1637
1637
|
*/},{key:"player",get:function get(){return playerRegistryRef.value.players[0]}},{key:"logs",get:function get(){var _a3;return(_a3=historyLogHandler.value)==null?void 0:_a3.history}},{key:"version",get:function get(){return vinylVersion.str}},{key:"userAgentInfo",get:function get(){return getUserAgentInfo()}},{key:"network",get:function get(){return getNetworkMetrics()}/**
|
|
@@ -1721,18 +1721,18 @@ var VinylPlayer=/*#__PURE__*/function(_EventHostImpl18){/**
|
|
|
1721
1721
|
*/},{key:"dispose",value:function dispose(){logDebug(this,"dispose");_superPropGet(VinylPlayer,"dispose",this,3)([]);this.disposer.dispose();playerRegistryRef.value.removePlayer(this)}}])}(EventHostImpl);function createVinylPlayer(options,factoryOverrides){var player=new VinylPlayer(__spreadValues(__spreadValues({},createVinylFactories(options)),factoryOverrides));logInfo(player,"VinylPlayer initialized");return player}function notResetEvent(type){return type!=="reset"}var qualityEventsAndGetters=[["streamingQualityChange","getStreamingQuality"],["bufferingQualityChange","getBufferingQuality"],["playbackQualityChange","getPlaybackQuality"]];var emptyContentTypes=/* @__PURE__ */new Set;// src/track/dash/createSegmentControllerFactory.ts
|
|
1722
1722
|
function createSegmentControllerFactory(playerDeps,contentType2,options){return function(trackDeps){return new SegmentControllerImpl(__spreadValues(__spreadValues({},playerDeps),trackDeps),contentType2,options)}}// src/global/configureVinylGlobal.ts
|
|
1723
1723
|
var logLevelValidator=function(){return isOneOf(0/* VERBOSE */,1/* DEBUG */,2/* INFO */,3/* WARN */,4/* ERROR */,5/* NONE */)}();var vinylGlobalOptionsValidator=object({logging:object({console:object({logLevel:logLevelValidator}),history:object({logLevel:logLevelValidator,maxHistorySize:number()}),logLevel:logLevelValidator}),maxPlayersWarning:number()});var vinylGlobalOptionsPartialValidator=vinylGlobalOptionsValidator.partialDeep();function configureVinylGlobal(options){var _a3;vinylGlobalOptionsPartialValidator.assert(options);if(options.logging){var logging=options.logging;if(logging.logLevel!=null)setLogLevel(logging.logLevel);if(logging.history){var history=logging.history;if(historyLogHandler.value){if(history.maxHistorySize!=null)historyLogHandler.value.maxHistorySize=history.maxHistorySize;if(history.logLevel!=null)historyLogHandler.value.logLevel=history.logLevel}}if(((_a3=logging.console)==null?void 0:_a3.logLevel)!=null){if(consoleLogHandler.value){consoleLogHandler.value.logLevel=logging.console.logLevel}}}if(options.maxPlayersWarning!=null&&playerRegistryRef.value instanceof PlayerRegistryImpl){playerRegistryRef.value.maxPlayersWarning=options.maxPlayersWarning}}// test/vinylTestUtil/util/playback/eventPromises.ts
|
|
1724
|
-
function onPlaying(_x71){return _onPlaying.apply(this,arguments)}function _onPlaying(){_onPlaying=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1724
|
+
function onPlaying(_x71){return _onPlaying.apply(this,arguments)}function _onPlaying(){_onPlaying=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee572(playbackController){var timeout2,_args572=arguments;return _regenerator().w(function(_context572){while(1)switch(_context572.n){case 0:timeout2=_args572.length>1&&_args572[1]!==undefined?_args572[1]:10;if(!playbackController.playing){_context572.n=1;break}return _context572.a(2,Promise.resolve());case 1:return _context572.a(2,nextEventAsPromise(playbackController,"playing",{timeout:timeout2,timeoutMessage:"playing timed out after {time}s"}).then(function(){return void 0}))}},_callee572)}));return _onPlaying.apply(this,arguments)}function onEnded(_x72){return _onEnded.apply(this,arguments)}function _onEnded(){_onEnded=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee573(playbackController){var timeout2,metadataTimeout,_args573=arguments;return _regenerator().w(function(_context573){while(1)switch(_context573.n){case 0:timeout2=_args573.length>1&&_args573[1]!==undefined?_args573[1]:10;metadataTimeout=_args573.length>2&&_args573[2]!==undefined?_args573[2]:10;if(!playbackController.ended){_context573.n=1;break}return _context573.a(2,Promise.resolve());case 1:_context573.n=2;return nextHasMetadata(playbackController,{timeout:metadataTimeout});case 2:return _context573.a(2,nextEventAsPromise(playbackController,"ended",{// Set the timeout to be the remaining track duration plus a large margin of error for stalls and seek
|
|
1725
1725
|
// inaccuracy.
|
|
1726
|
-
timeout:playbackController.duration-playbackController.currentTime+timeout2,timeoutMessage:"ended timed out after {time}s"}).then(function(){return void 0}))}},
|
|
1726
|
+
timeout:playbackController.duration-playbackController.currentTime+timeout2,timeoutMessage:"ended timed out after {time}s"}).then(function(){return void 0}))}},_callee573)}));return _onEnded.apply(this,arguments)}function onTimeUpdate(playbackController){var timeout2=arguments.length>1&&arguments[1]!==undefined?arguments[1]:5;return nextEventAsPromise(playbackController,"timeUpdate",{timeout:timeout2,timeoutMessage:"timeUpdate timed out after {time}s"})}function onDuration(playbackController){var timeout2=arguments.length>1&&arguments[1]!==undefined?arguments[1]:10;if(playbackController.duration>0)return Promise.resolve();return nextEventAsPromise(playbackController,"durationChange",{timeout:timeout2,timeoutMessage:"durationChange timed out after {time}s"}).then(function(){return void 0})}// test/vinylTestUtil/player/mediaRef.ts
|
|
1727
1727
|
var mediaRef=lazy(function(){var media=document.createElement("video");media.muted=true;media.playsInline=true;media.disableRemotePlayback=true;return media});afterEach(function(){if(mediaRef.constructed){var media=mediaRef.value;media.removeAttribute("src");media.load()}});// test/vinylTestUtil/ui/requireUserInteraction.ts
|
|
1728
1728
|
function requireUserInteraction(){return _requireUserInteraction.apply(this,arguments)}// test/vinylTestUtil/assets/vinylTestAssets.ts
|
|
1729
|
-
function _requireUserInteraction(){_requireUserInteraction=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1729
|
+
function _requireUserInteraction(){_requireUserInteraction=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee574(){var audioPrompt,body;return _regenerator().w(function(_context574){while(1)switch(_context574.n){case 0:audioPrompt=document.getElementById("unlockAudioPrompt");audioPrompt.style.removeProperty("display");body=document.body;body.focus();_context574.n=1;return new Promise(function(resolve){var _done=function done(){body.removeEventListener("click",_done);body.removeEventListener("keypress",_done);body.removeEventListener("touchend",_done);return resolve(void 0)};body.addEventListener("click",_done);body.addEventListener("keypress",_done);body.addEventListener("touchend",_done)});case 1:audioPrompt.style.display="none";case 2:return _context574.a(2)}},_callee574)}));return _requireUserInteraction.apply(this,arguments)}var VINYL_ASSETS_HOST="https://assets.dev.vinyl.music.amazon.dev";var vinylTestAssets={prog:{libmp3lame_60s_2ch_16bit_44100Hz_48kbps:"".concat(VINYL_ASSETS_HOST,"/prog/libmp3lame_60s_2ch_16bit_44100Hz_48kbps.mp3"),libmp3lame_1800s_2ch_16bit_44100Hz_48kbps:"".concat(VINYL_ASSETS_HOST,"/prog/libmp3lame_1800s_2ch_16bit_44100Hz_48kbps.mp3")},dash:{live_static_aac_opus_flac_60s_segmentTemplate:"".concat(VINYL_ASSETS_HOST,"/dash/live_static_aac_opus_flac_60s_segmentTemplate/manifest.mpd"),live_static_aac_opus_flac_60s_segmentBase:"".concat(VINYL_ASSETS_HOST,"/dash/live_static_aac_opus_flac_60s_segmentBase/manifest.mpd"),live_static_video_audio_60s_2s_segmentTemplate:"".concat(VINYL_ASSETS_HOST,"/dash/live_static_video_audio_60s_2s_segmentTemplate/manifest.mpd"),live_static_video_audio_60s_4s_segmentTemplate:"".concat(VINYL_ASSETS_HOST,"/dash/live_static_video_audio_60s_4s_segmentTemplate/manifest.mpd"),live_static_video_audio_60s_2s_segmentTemplate_widevine_cl10:"".concat(VINYL_ASSETS_HOST,"/dash/live_static_video_audio_60s_2s_segmentTemplate_widevine_cl10/manifest.mpd"),live_static_video_audio_60s_4s_segmentTemplate_widevine_cl10:"".concat(VINYL_ASSETS_HOST,"/dash/live_static_video_audio_60s_4s_segmentTemplate_widevine_cl10/manifest.mpd"),live_static_video_60s_2s_segmentTemplate:"".concat(VINYL_ASSETS_HOST,"/dash/live_static_video_60s_2s_segmentTemplate/manifest.mpd"),live_static_video_60s_4s_segmentTemplate:"".concat(VINYL_ASSETS_HOST,"/dash/live_static_video_60s_4s_segmentTemplate/manifest.mpd"),live_static_aac_opus_flac_60s_segmentBase_widevine_cl10:"".concat(VINYL_ASSETS_HOST,"/dash/live_static_aac_opus_flac_60s_segmentBase_widevine_cl10/manifest.mpd"),live_static_aac_opus_flac_60s_segmentBase_widevine:"".concat(VINYL_ASSETS_HOST,"/dash/live_static_aac_opus_flac_60s_segmentBase_widevine/manifest.mpd"),live_static_aac_1800s_segmentBase_widevine_cl30:"".concat(VINYL_ASSETS_HOST,"/dash/live_static_aac_1800s_segmentBase_widevine_cl30/manifest.mpd")},hls:{live_static_video_audio_60s_2s:"".concat(VINYL_ASSETS_HOST,"/hls/live_static_video_audio_60s_2s/main.m3u8"),live_static_video_audio_60s_4s:"".concat(VINYL_ASSETS_HOST,"/hls/live_static_video_audio_60s_4s/main.m3u8"),live_static_aac_opus_flac_60s:"".concat(VINYL_ASSETS_HOST,"/hls/live_static_aac_opus_flac_60s/main.m3u8"),live_static_aac_60s_mpegts:"".concat(VINYL_ASSETS_HOST,"/hls/live_static_aac_60s_mpegts/main.m3u8"),live_static_video_60s_2s:"".concat(VINYL_ASSETS_HOST,"/hls/live_static_video_60s_2s/main.m3u8"),live_static_video_60s_4s:"".concat(VINYL_ASSETS_HOST,"/hls/live_static_video_60s_4s/main.m3u8"),live_static_video_60s_2s_mpegts:"".concat(VINYL_ASSETS_HOST,"/hls/live_static_video_60s_2s_mpegts/main.m3u8"),live_static_video_60s_4s_mpegts:"".concat(VINYL_ASSETS_HOST,"/hls/live_static_video_60s_4s_mpegts/main.m3u8"),live_static_video_audio_60s_2s_mpegts:"".concat(VINYL_ASSETS_HOST,"/hls/live_static_video_audio_60s_2s_mpegts/main.m3u8"),live_static_video_audio_60s_4s_mpegts:"".concat(VINYL_ASSETS_HOST,"/hls/live_static_video_audio_60s_4s_mpegts/main.m3u8")},// Segmented streaming is added by hand, ControlledMediaSource provides a way to test
|
|
1730
1730
|
// Media source extensions without reading a dash manifest.
|
|
1731
1731
|
segmentedStreaming:{aac_60s_2ch_16bit_44100Hz_48kbps:{init:"".concat(VINYL_ASSETS_HOST,"/dash/live_static_aac_opus_flac_60s_segmentTemplate/segments/aac_60s_2ch_16bit_44100Hz_48kbps/sample.mp4"),part:"".concat(VINYL_ASSETS_HOST,"/dash/live_static_aac_opus_flac_60s_segmentTemplate/segments/aac_60s_2ch_16bit_44100Hz_48kbps/part_{index}.m4s"),numSegments:6,duration:60},// For testing Widevine, use a ControlledMediaSource with this asset.
|
|
1732
1732
|
// EME requires using a media source, but DRM testing does not need to test buffering.
|
|
1733
1733
|
aac_60s_2ch_16bit_44100Hz_48kbps_widevine_cl10:{init:"".concat(VINYL_ASSETS_HOST,"/dash/live_static_aac_opus_flac_segmentBase_widevine_60s_cl10/representations/aac_60s_2ch_16bit_44100Hz_48kbps.mp4"),part:"",numSegments:0,duration:60}}};// test/vinylTestUtil/media/unlockMediaElement.ts
|
|
1734
1734
|
function unlockMediaElement(){return _unlockMediaElement.apply(this,arguments)}// test/vinylTestUtil/media/FrequencyAnalyzer.ts
|
|
1735
|
-
function _unlockMediaElement(){_unlockMediaElement=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1735
|
+
function _unlockMediaElement(){_unlockMediaElement=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee575(){var media;return _regenerator().w(function(_context575){while(1)switch(_context575.n){case 0:media=mediaRef.value;media.src=vinylTestAssets.prog.libmp3lame_60s_2ch_16bit_44100Hz_48kbps;_context575.n=1;return media.play()["catch"](noop);case 1:media.pause();media.removeAttribute("src");media.load();case 2:return _context575.a(2)}},_callee575)}));return _unlockMediaElement.apply(this,arguments)}var TIME_ESTIMATE_TOLERANCE=0.02;var defaultFrequencyAnalyzerOptions={startFrequency:100,endFrequency:6e3,fftSize:4096};var FrequencyAnalyzer=/*#__PURE__*/function(){function FrequencyAnalyzer(audioContext,source,options){_classCallCheck(this,FrequencyAnalyzer);__publicField(this,"audioContext",audioContext);__publicField(this,"source",source);__publicField(this,"data");__publicField(this,"analyser");__publicField(this,"options");__publicField(this,"logPrefix",createLogPrefix("FrequencyAnalyzer"));this.options=__spreadValues(__spreadValues({},defaultFrequencyAnalyzerOptions),options);this.analyser=this.audioContext.createAnalyser();this.analyser.fftSize=this.options.fftSize;this.analyser.connect(this.audioContext.destination);this.data=new Float32Array(this.analyser.frequencyBinCount);this.source.connect(this.analyser)}/**
|
|
1736
1736
|
* Estimates the frequency of the current frame window.
|
|
1737
1737
|
*
|
|
1738
1738
|
* The frequency estimate is the frequency of the highest decibel bin within the frame window. The number of
|
|
@@ -1741,9 +1741,9 @@ function _unlockMediaElement(){_unlockMediaElement=_asyncToGenerator(/*#__PURE__
|
|
|
1741
1741
|
* Asserts that the next samples of audio plays at its expected frequency.
|
|
1742
1742
|
*/},{key:"assertFrequency",value:(function(){var _assertFrequency=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee60(){var timeout2,media,startTime,mediaStartTime,playbackTime2,maxDifference,estimatedTime,diff,elapsed,percentFormatter,_args60=arguments;return _regenerator().w(function(_context60){while(1)switch(_context60.n){case 0:timeout2=_args60.length>0&&_args60[0]!==undefined?_args60[0]:10;this.analyser.disconnect();this.analyser.connect(this.audioContext.destination);media=this.source.mediaElement;if(isNaN(media.duration))fail("media is not loaded");if(media.paused)fail("media is paused");startTime=Date.now();mediaStartTime=media.currentTime;playbackTime2=0.25;maxDifference=media.duration*TIME_ESTIMATE_TOLERANCE;if(!(media.currentTime+playbackTime2>=media.duration)){_context60.n=1;break}logDebug(this,"Ignoring assertFrequency, currentTime is at duration");return _context60.a(2);case 1:if(!(Date.now()-startTime>timeout2*1e3)){_context60.n=2;break}throw new TimeoutError("Frequency data could not be filled, media is not playing.");case 2:elapsed=media.currentTime-mediaStartTime;estimatedTime=this.estimatedTime;diff=Math.abs(estimatedTime-media.currentTime);_context60.n=3;return _sleep(playbackTime2);case 3:if(elapsed<playbackTime2&&diff>maxDifference){_context60.n=1;break}case 4:logDebug(this,"time from frequency:",estimatedTime.toFixed(2),"actual time:",media.currentTime.toFixed(2));if(diff>maxDifference){percentFormatter=new Intl.NumberFormat("en-US",{style:"percent"});fail("The measured frequency at time ".concat(media.currentTime.toFixed(2)," was measured to be ").concat(this.frequency.toFixed(2),"Hz. The expected time is ").concat(estimatedTime.toFixed(2),", the actual time is ").concat(media.currentTime.toFixed(2),", for a difference of ").concat(percentFormatter.format(diff/media.duration)," track duration. (Tolerance is ").concat(percentFormatter.format(TIME_ESTIMATE_TOLERANCE),")"))}case 5:return _context60.a(2)}},_callee60,this)}));function assertFrequency(){return _assertFrequency.apply(this,arguments)}return assertFrequency}())}])}();var _a2;var shouldCheckAudio=parseBoolean(((_a2=getSearchParams().get("checkAudio"))!=null?_a2:"0").toLowerCase());var frequencyAnalyzer=null;function assertFrequency(){var _a3;return(_a3=frequencyAnalyzer==null?void 0:frequencyAnalyzer.assertFrequency())!=null?_a3:Promise.resolve()}function initializeFrequencyAnalyzer(){if(shouldCheckAudio){setNextTestTimeout(300);beforeAll(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee61(){var media,audioContext,source;return _regenerator().w(function(_context61){while(1)switch(_context61.n){case 0:media=mediaRef.value;media.crossOrigin="anonymous";media.muted=false;media.volume=0.01;_context61.n=1;return requireUserInteraction();case 1:audioContext=getAudioContext();_context61.n=2;return unlockMediaElement();case 2:if(audioContext){source=audioContext.createMediaElementSource(mediaRef.value);frequencyAnalyzer=new FrequencyAnalyzer(audioContext,source)}else{console.warn("AudioContext not supported")}case 3:return _context61.a(2)}},_callee61)})))}}// test/vinylTestUtil/util/playback/expectTrackPlaysUntil.ts
|
|
1743
1743
|
var sleepInterval=1;var affordanceBefore=1;var affordanceAfter=3;function expectTrackPlaysUntil(_x73,_x74){return _expectTrackPlaysUntil.apply(this,arguments)}// test/vinylTestUtil/util/playback/expectTrackPlays.ts
|
|
1744
|
-
function _expectTrackPlaysUntil(){_expectTrackPlaysUntil=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1745
|
-
function _expectPlaylistPlays(){_expectPlaylistPlays=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1746
|
-
function _expectTrackCanSeekTo(){_expectTrackCanSeekTo=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1744
|
+
function _expectTrackPlaysUntil(){_expectTrackPlaysUntil=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee576(player,endTime){var timeout2,elapsed,maxTime,_args576=arguments;return _regenerator().w(function(_context576){while(1)switch(_context576.n){case 0:timeout2=_args576.length>2&&_args576[2]!==undefined?_args576[2]:10;_context576.n=1;return onPlaying(player);case 1:_context576.n=2;return onTimeUpdate(player);case 2:expect(player.currentTime).withContext("currentTime must be less than endTime").toBeLessThan(endTime);_context576.n=3;return assertFrequency();case 3:elapsed=0;maxTime=endTime-player.currentTime+timeout2;case 4:if(!(!player.ended&&player.currentTime<endTime&&elapsed<maxTime)){_context576.n=6;break}_context576.n=5;return _sleep(sleepInterval);case 5:elapsed+=sleepInterval;_context576.n=4;break;case 6:expect(player.currentTime).withContext("currentTime").toBeGreaterThanOrEqual(endTime-affordanceBefore);expect(player.currentTime).withContext("currentTime").toBeLessThan(endTime+affordanceAfter);case 7:return _context576.a(2)}},_callee576)}));return _expectTrackPlaysUntil.apply(this,arguments)}var PLAYBACK_DURATION=6;function expectTrackPlays(_x75){return _expectTrackPlays.apply(this,arguments)}function _expectTrackPlays(){_expectTrackPlays=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee577(player){var _createDisposer9,dispose,add,ended,timeUpdate,duration,_time2;return _regenerator().w(function(_context577){while(1)switch(_context577.n){case 0:_createDisposer9=createDisposer(),dispose=_createDisposer9.dispose,add=_createDisposer9.add;ended=add(createEventSpy(player,"ended"));timeUpdate=add(createEventSpy(player,"timeUpdate"));expect(player.currentTime).withContext("currentTime starts near the beginning").toBeLessThan(1);_context577.n=1;return onDuration(player);case 1:duration=player.duration;expect(duration).withContext("duration should be non-zero").toBeGreaterThan(0);if(!(player.duration>PLAYBACK_DURATION)){_context577.n=3;break}_context577.n=2;return expectTrackPlaysUntil(player,player.currentTime+PLAYBACK_DURATION/2);case 2:_time2=player.duration-PLAYBACK_DURATION/2;_context577.n=3;return player.seekTo(_time2);case 3:_context577.n=4;return ended.next(PLAYBACK_DURATION+10);case 4:expect(player.currentTime).toBeCloseToWithin(duration,3);expect(player.ended).withContext("ended").toBeTrue();expect(timeUpdate.calls.count()).toBeGreaterThanOrEqual(Math.floor(PLAYBACK_DURATION));dispose();case 5:return _context577.a(2)}},_callee577)}));return _expectTrackPlays.apply(this,arguments)}function expectPlaylistPlays(_x76,_x77){return _expectPlaylistPlays.apply(this,arguments)}// test/vinylTestUtil/util/playback/expectTrackCanSeek.ts
|
|
1745
|
+
function _expectPlaylistPlays(){_expectPlaylistPlays=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee578(player,playlist){var _a3,_createDisposer0,dispose,add,trackTimeout,queueEnded,queueChange,trackChange,assertQueueChangeCount,i,isLastTrack,nextTrack;return _regenerator().w(function(_context578){while(1)switch(_context578.n){case 0:assertQueueChangeCount=function _assertQueueChangeCou(count){expect(queueChange).toHaveBeenCalledTimes(count);queueChange.calls.reset()};_createDisposer0=createDisposer(),dispose=_createDisposer0.dispose,add=_createDisposer0.add;trackTimeout=PLAYBACK_DURATION+60;queueEnded=add(createEventSpy(player,"queueEnded"));queueChange=add(createEventSpy(player,"queueChange"));trackChange=add(createEventSpy(player,"currentTrackChange"));player.load.apply(player,_toConsumableArray(playlist));assertQueueChangeCount(1);_context578.n=1;return player.play();case 1:i=0;case 2:if(!(i<playlist.length)){_context578.n=6;break}isLastTrack=i===playlist.length-1;expect((_a3=player.currentTrack)==null?void 0:_a3.uri).withContext("currentTrack uri").toBe(playlist[i].uri);nextTrack=isLastTrack?queueEnded.next(trackTimeout):trackChange.next(trackTimeout);_context578.n=3;return expectTrackPlays(player);case 3:_context578.n=4;return nextTrack;case 4:assertQueueChangeCount(isLastTrack?0:1);case 5:i++;_context578.n=2;break;case 6:dispose();case 7:return _context578.a(2)}},_callee578)}));return _expectPlaylistPlays.apply(this,arguments)}function expectTrackCanSeekTo(_x78,_x79){return _expectTrackCanSeekTo.apply(this,arguments)}// test/vinylTestUtil/player/createVinylSuite.ts
|
|
1746
|
+
function _expectTrackCanSeekTo(){_expectTrackCanSeekTo=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee579(player,time){var tolerance,_createDisposer1,dispose,add,playedSpy,seekingSpy,seekedSpy,wasPaused,expectNoop,expectedTime;return _regenerator().w(function(_context579){while(1)switch(_context579.n){case 0:tolerance=0.5;_createDisposer1=createDisposer(),dispose=_createDisposer1.dispose,add=_createDisposer1.add;playedSpy=add(createEventSpy(player,"played"));seekingSpy=add(createEventSpy(player,"seeking"));seekedSpy=add(createEventSpy(player,"seeked"));wasPaused=player.paused;if(player.playing){seekingSpy.next().then(function(){expect(playedSpy).toHaveBeenCalledBefore(seekingSpy)})["catch"](noop)}expectNoop=closeTo(player.currentTime,time,tolerance);_context579.n=1;return player.seekTo(time,tolerance);case 1:expectedTime=clamp(time,0,player.duration-getMinSeekableBufferDefault());expect(player.currentTime).toBeCloseToWithin(expectedTime,1);if(!expectNoop){_context579.n=2;break}expect(seekingSpy).not.toHaveBeenCalled();expect(seekedSpy).not.toHaveBeenCalled();_context579.n=6;break;case 2:expect(seekingSpy).toHaveBeenCalledBefore(seekedSpy);expect(player.paused).withContext("paused").toBe(wasPaused);if(!wasPaused){_context579.n=4;break}expectPausedState(player);_context579.n=3;return expectTimeDoesNotElapse(player);case 3:_context579.n=6;break;case 4:_context579.n=5;return onPlaying(player);case 5:expectPlayingState(player);_context579.n=6;return assertFrequency();case 6:dispose();case 7:return _context579.a(2)}},_callee579)}));return _expectTrackCanSeekTo.apply(this,arguments)}var VinylSuite=/*#__PURE__*/function(){function VinylSuite(playerFactory,options){_classCallCheck(this,VinylSuite);__publicField(this,"playerFactory",playerFactory);__publicField(this,"options",options);__publicField(this,"logPrefix",createLogPrefix(this));__publicField(this,"_player",null);__publicField(this,"visibilityChangeHandler",function(){if(document.visibilityState==="hidden"){fail("The window must remain visible during the tests.")}})}return _createClass(VinylSuite,[{key:Symbol.toStringTag,get:function get(){return"VinylSuite"}},{key:"player",get:function get(){if(!this._player)throw new IllegalStateError("player cannot be accessed outside of a test");return this._player}/**
|
|
1747
1747
|
* Initializes jasmine test setup.
|
|
1748
1748
|
*/},{key:"init",value:function init(){var _this125=this;var _a3,_b;var playerErrorSub=null;setTestTimeout((_b=(_a3=this.options)==null?void 0:_a3.timeout)!=null?_b:60);beforeEach(function(){var _a4;document.addEventListener("visibilitychange",_this125.visibilityChangeHandler);_this125._player=_this125.playerFactory();if(((_a4=_this125.options)==null?void 0:_a4.failOnError)!==false){playerErrorSub=_this125._player.on("error",function(e){fail(e)})}});afterEach(function(){var _a4;logDebug(_this125,"disposing");if(playerErrorSub)playerErrorSub();(_a4=_this125._player)==null?void 0:_a4.dispose();_this125._player=null;document.removeEventListener("visibilitychange",_this125.visibilityChangeHandler);getGlobalRegistry().reset()})}}])}();function createVinylSuite(playerDependencyOptions,options){var suite=new VinylSuite(function(){return createVinylPlayer(__spreadProps(__spreadValues({},playerDependencyOptions),{media:mediaRef.value}))},options);suite.init();return suite}// test/vinylTestUtil/mock/track/MockTrackFactory.ts
|
|
1749
1749
|
var MockTrackFactory=/*#__PURE__*/_createClass(function MockTrackFactory(){_classCallCheck(this,MockTrackFactory);__publicField(this,"spyFactory",createSpyFactory());__publicField(this,"validate",this.spyFactory("validate"));__publicField(this,"createTrack",this.spyFactory("createTrack"))});// test/vinylTestUtil/mock/track/MockTrackController.ts
|
|
@@ -1793,7 +1793,7 @@ var mimeCodec="audio/mp4;codecs=\"mp4a.40.5\"";var ControlledMediaSource=/*#__PU
|
|
|
1793
1793
|
* This promise resolves when all assets are ready.
|
|
1794
1794
|
* Note: in Firefox, you must set this object url on the element immediately. Creating the
|
|
1795
1795
|
* URL and setting it later can cause errors.
|
|
1796
|
-
*/)},{key:"getMediaSource",value:(function(){var _getMediaSource=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee63(){return _regenerator().w(function(_context63){while(1)switch(_context63.n){case 0:_context63.n=1;return this.getSegments();case 1:this.segments=_context63.v;return _context63.a(2,this.mediaSource)}},_callee63,this)}));function getMediaSource(){return _getMediaSource.apply(this,arguments)}return getMediaSource}())},{key:"appendNext",value:function(){var _appendNext2=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee64(){var sourceBuffer,buff,updateEnd;return _regenerator().w(function(_context64){while(1)switch(_context64.n){case 0:if(this.segments){_context64.n=1;break}throw new IllegalStateError("cannot append before getMediaSource");case 1:_context64.n=2;return this.sourceBufferPromise;case 2:sourceBuffer=_context64.v;if(!(this._currentIndex>=this.length)){_context64.n=3;break}throw new Error("Only ".concat(this.length," segments"));case 3:buff=this.segments[this._currentIndex++];_context64.n=4;return onSourceBufferReady(sourceBuffer);case 4:updateEnd=onUpdateEnd(sourceBuffer);sourceBuffer.appendBuffer(buff);_context64.n=5;return updateEnd;case 5:if(this._currentIndex===this.length){this.mediaSource.endOfStream()}case 6:return _context64.a(2)}},_callee64,this)}));function appendNext(){return _appendNext2.apply(this,arguments)}return appendNext}()}])}();function onSourceBufferReady(_x80){return _onSourceBufferReady.apply(this,arguments)}function _onSourceBufferReady(){_onSourceBufferReady=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1796
|
+
*/)},{key:"getMediaSource",value:(function(){var _getMediaSource=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee63(){return _regenerator().w(function(_context63){while(1)switch(_context63.n){case 0:_context63.n=1;return this.getSegments();case 1:this.segments=_context63.v;return _context63.a(2,this.mediaSource)}},_callee63,this)}));function getMediaSource(){return _getMediaSource.apply(this,arguments)}return getMediaSource}())},{key:"appendNext",value:function(){var _appendNext2=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee64(){var sourceBuffer,buff,updateEnd;return _regenerator().w(function(_context64){while(1)switch(_context64.n){case 0:if(this.segments){_context64.n=1;break}throw new IllegalStateError("cannot append before getMediaSource");case 1:_context64.n=2;return this.sourceBufferPromise;case 2:sourceBuffer=_context64.v;if(!(this._currentIndex>=this.length)){_context64.n=3;break}throw new Error("Only ".concat(this.length," segments"));case 3:buff=this.segments[this._currentIndex++];_context64.n=4;return onSourceBufferReady(sourceBuffer);case 4:updateEnd=onUpdateEnd(sourceBuffer);sourceBuffer.appendBuffer(buff);_context64.n=5;return updateEnd;case 5:if(this._currentIndex===this.length){this.mediaSource.endOfStream()}case 6:return _context64.a(2)}},_callee64,this)}));function appendNext(){return _appendNext2.apply(this,arguments)}return appendNext}()}])}();function onSourceBufferReady(_x80){return _onSourceBufferReady.apply(this,arguments)}function _onSourceBufferReady(){_onSourceBufferReady=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee580(sourceBuffer){return _regenerator().w(function(_context580){while(1)switch(_context580.n){case 0:if(sourceBuffer.updating){_context580.n=1;break}return _context580.a(2);case 1:_context580.n=2;return onUpdateEnd(sourceBuffer);case 2:return _context580.a(2,onSourceBufferReady(sourceBuffer))}},_callee580)}));return _onSourceBufferReady.apply(this,arguments)}function onUpdateEnd(sourceBuffer){return new Promise(function(resolve){sourceBuffer.addEventListener("updateend",function(){resolve(void 0)},{once:true})})}// test/vinylTestUtil/assets/dash_segmentList.ts
|
|
1797
1797
|
var dash_segmentList="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<MPD minBufferTime=\"PT10S\" type=\"static\" mediaPresentationDuration=\"PT2M59.515S\" profiles=\"urn:mpeg:dash:profile:isoff-live:2011\" xmlns=\"urn:mpeg:dash:schema:mpd:2011\" xmlns:amz-music=\"urn:amazon:music:drm:2019\" xmlns:cenc=\"urn:mpeg:cenc:2013\" xmlns:mspr=\"urn:microsoft:playready\">\n <Period>\n <AdaptationSet segmentAlignment=\"true\" mimeType=\"audio/mp4\" startWithSAP=\"1\">\n <ContentProtection schemeIdUri=\"urn:mpeg:dash:mp4protection:2011\" cenc:default_KID=\"5e2905f0-1f87-1c2a-cdc9-a698b13460a0\" value=\"cenc\"/>\n <ContentProtection schemeIdUri=\"urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95\" value=\"2.0\">\n <mspr:pro>gAIAAAEAAQB2AjwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AOABBAFUAcABYAG8AYwBmAEsAaAB6AE4AeQBhAGEAWQBzAFQAUgBnAG8AQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBvAHYAQwA0AFQAaQA0AFgAOQBRADAAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBtAHUAcwBpAGMALgBhAG0AYQB6AG8AbgAuAGMAbwBtAC8AZABtAGwAcwAvAGEAYwBxAHUAaQByAGUATABpAGMAZQBuAHMAZQA8AC8ATABBAF8AVQBSAEwAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==</mspr:pro>\n <cenc:pssh>AAACoHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAoCAAgAAAQABAHYCPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgA4AEEAVQBwAFgAbwBjAGYASwBoAHoATgB5AGEAYQBZAHMAVABSAGcAbwBBAD0APQA8AC8ASwBJAEQAPgA8AEMASABFAEMASwBTAFUATQA+AG8AdgBDADQAVABpADQAWAA5AFEAMAA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAG0AdQBzAGkAYwAuAGEAbQBhAHoAbwBuAC4AYwBvAG0ALwBkAG0AbABzAC8AYQBjAHEAdQBpAHIAZQBMAGkAYwBlAG4AcwBlADwALwBMAEEAXwBVAFIATAA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A</cenc:pssh>\n </ContentProtection>\n <ContentProtection schemeIdUri=\"urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed\">\n <cenc:pssh>AAAAZnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEYIARIQXikF8B+HHCrNyaaYsTRgoBoLQW1hem9uTXVzaWMiHGNpZDpYaWtGOEIrSEhDck55YWFZc1RSZ29BPT0qBUFVRElP</cenc:pssh>\n </ContentProtection>\n <Representation id=\"48kbps\" bitrate=\"48\" codecs=\"mp4a.40.5\" audioSamplingRate=\"44100\" bandwidth=\"49207\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <SegmentList timescale=\"1000\" duration=\"9999\">\n <Initialization sourceURL=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/e995b206-11e7-3b45-97c2-b6a3547d2f4e.mp4?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/7074f18b-9540-330a-afe2-219d0ce7833c.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/5f820f1c-2afc-3131-bed4-fb5bdef897f0.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/cd6c620a-04de-3782-92b2-c662b6c1072f.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/f7f821c5-5e35-3add-ad3a-9bbe0dbb1e3e.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/9746d8ad-cff5-3494-9496-81f4f55e1ef6.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/5f3f7a43-ab6d-3c3a-911b-eead57689bd6.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/fd21ca6a-2754-33ea-8880-6b5ef5b20ee4.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/d12751c0-7376-3f3e-93d4-aaa2e0604a27.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/deb6a2fe-cf1c-3cd3-b0c0-14605b19b6f7.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/b4f7e818-9b5d-3961-a30a-efb5662b4266.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/44654895-2ecc-3a8d-8314-b38554bd7cab.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/8bdf4924-bd51-376f-93f5-1a681f67b5f0.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/d376f5de-404a-3ec6-9c9b-ec4f1a0bb396.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/1cb253cb-53e0-3ce0-899e-66ab521b243e.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/5189c800-ada3-3851-af3f-1eb221eb1e46.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/aaba2b17-fb35-34ef-9e02-f5d4751537af.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/7c91714e-b106-3738-88b6-a6de127876ab.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/181177ec-f49d-3adf-9e54-54bc8829a4aa.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n </SegmentList>\n </Representation>\n <Representation id=\"128kbps\" bitrate=\"128\" codecs=\"mp4a.40.5\" audioSamplingRate=\"44100\" bandwidth=\"128940\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <SegmentList timescale=\"1000\" duration=\"9999\">\n <Initialization sourceURL=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/48ad8390-8f20-3375-ad88-a6b9e30443c9.mp4?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/b60dac8a-6ef4-3831-a94a-1c45fcee6b2d.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/657d1268-facc-3395-88e9-27c5c126ce48.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/5195eaa4-b1fe-35db-a6a2-f44b2f5c5ab3.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/4c03a31b-a7df-348f-85ba-849be71d8429.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/892c0d03-6f0a-3816-bab9-f086b1cc58ca.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/47997981-1b94-33a6-a49b-f213625515c0.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/4363a296-1ee3-386a-b866-bbc3209a70af.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/1080dd32-1782-3329-aa25-9f70425726f6.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/2afd08bd-9018-365e-a7ca-215ec749d5f4.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/db3c6e55-4dcd-32f4-9d86-d699760e37c9.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/38bc1afd-2930-3e41-809c-1c2472b2f7e2.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/df6643b3-5b9e-31cf-a3fa-e271e9f70040.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/6e833e36-ed37-3d57-8d2c-dbe058e04b9d.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/ec9caaf6-2205-3ef9-b456-b91fdea6991e.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/f1b8ccdf-9848-3b00-9d12-bab2ca18f857.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/da935cc3-be5e-3b3e-b1eb-7f91bd507a90.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/dbbae462-fd17-38d3-9b2a-ce25d1e67583.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/75b367ea-5dc3-3c95-8ff1-e727723ca423.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n </SegmentList>\n </Representation>\n </AdaptationSet>\n <AdaptationSet segmentAlignment=\"true\" mimeType=\"audio/mp4\" startWithSAP=\"1\">\n <ContentProtection schemeIdUri=\"urn:mpeg:dash:mp4protection:2011\" cenc:default_KID=\"5e2905f0-1f87-1c2a-cdc9-a698b13460a0\" value=\"cenc\"/>\n <ContentProtection schemeIdUri=\"urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95\" value=\"2.0\">\n <mspr:pro>gAIAAAEAAQB2AjwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AOABBAFUAcABYAG8AYwBmAEsAaAB6AE4AeQBhAGEAWQBzAFQAUgBnAG8AQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBvAHYAQwA0AFQAaQA0AFgAOQBRADAAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBtAHUAcwBpAGMALgBhAG0AYQB6AG8AbgAuAGMAbwBtAC8AZABtAGwAcwAvAGEAYwBxAHUAaQByAGUATABpAGMAZQBuAHMAZQA8AC8ATABBAF8AVQBSAEwAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==</mspr:pro>\n <cenc:pssh>AAACoHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAoCAAgAAAQABAHYCPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgA4AEEAVQBwAFgAbwBjAGYASwBoAHoATgB5AGEAYQBZAHMAVABSAGcAbwBBAD0APQA8AC8ASwBJAEQAPgA8AEMASABFAEMASwBTAFUATQA+AG8AdgBDADQAVABpADQAWAA5AFEAMAA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAG0AdQBzAGkAYwAuAGEAbQBhAHoAbwBuAC4AYwBvAG0ALwBkAG0AbABzAC8AYQBjAHEAdQBpAHIAZQBMAGkAYwBlAG4AcwBlADwALwBMAEEAXwBVAFIATAA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A</cenc:pssh>\n </ContentProtection>\n <ContentProtection schemeIdUri=\"urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed\">\n <cenc:pssh>AAAAZnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEYIARIQXikF8B+HHCrNyaaYsTRgoBoLQW1hem9uTXVzaWMiHGNpZDpYaWtGOEIrSEhDck55YWFZc1RSZ29BPT0qBUFVRElP</cenc:pssh>\n </ContentProtection>\n <Representation id=\"256kbps\" bitrate=\"256\" codecs=\"mp4a.40.2\" audioSamplingRate=\"44100\" bandwidth=\"257571\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <SegmentList timescale=\"1000\" duration=\"10001\">\n <Initialization sourceURL=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/491172b7-47c7-3c85-8d21-d1b5932f17a2.mp4?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/826bac71-7b31-3a24-9d49-37847e2a6729.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/388d5f9e-91a8-3f11-af1a-ae4a05f97ec9.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/a33b04dd-497b-32a8-8d79-185c3ff64abc.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/5177f418-6081-3d74-962e-a22103b0bd9b.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/21130156-4c73-34e4-8d9f-3bb4835907f5.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/e38d0c76-959c-3ea2-9194-a909b79dcb2e.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/280aa567-f6e5-355b-910e-86dd3d877058.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/a00d6c29-4f5d-3fec-a925-238376fccb23.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/547acecd-34c8-308d-afa7-4cabfa08828a.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/dade48dd-b7b7-3584-8282-d485b4dcb4ac.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/06a7b39c-bf4c-3a84-8c3a-3130cf8d8796.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/e23e7877-351f-3907-bc21-5ad52e79bea3.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/8bd58682-d178-31e8-9158-647294632481.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/9940b7d6-a080-36e9-bc74-701bc86f1d04.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/d3f0bf8f-c7bb-390f-a69f-6c5f76fea173.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/85d1acbe-8bdb-3eb9-a6f1-dabbd39dcac7.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/55329bcb-7009-36c2-acc5-38100b7e7299.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n <SegmentURL media=\"https://dfqzuzzcqflbd.cloudfront.net/4b931ac5-5bcb-4200000551204497/d12a306c-2d45-3e5b-8240-8ebea0437442.m4s?r=1ded475a-27b5-4a3d-848b-8e430140b3ed&rs=NA&mt=US\"/>\n </SegmentList>\n </Representation>\n </AdaptationSet>\n </Period>\n</MPD>\n";// test/vinylTestUtil/assets/dash_segmentBase.ts
|
|
1798
1798
|
var dash_segmentBase="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--Generated with https://github.com/google/shaka-packager version v2.6.1-634af65-release-->\n<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd\" profiles=\"urn:mpeg:dash:profile:isoff-on-demand:2011\" minBufferTime=\"PT2S\" type=\"static\" mediaPresentationDuration=\"PT60S\">\n <Period id=\"0\">\n <AdaptationSet id=\"0\" contentType=\"audio\" subsegmentAlignment=\"true\">\n <SupplementalProperty schemeIdUri=\"urn:mpeg:dash:adaptation-set-switching:2016\" value=\"1,2\"/>\n <Representation id=\"0\" bandwidth=\"51160\" codecs=\"mp4a.40.2\" mimeType=\"audio/mp4\" audioSamplingRate=\"44100\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/aac_60s_2ch_16bit_44100Hz_48kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"826-929\" timescale=\"44100\">\n <Initialization range=\"0-825\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"14\" bandwidth=\"124766\" codecs=\"mp4a.40.2\" mimeType=\"audio/mp4\" audioSamplingRate=\"44100\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/aac_60s_2ch_16bit_44100Hz_256kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"826-929\" timescale=\"44100\">\n <Initialization range=\"0-825\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"15\" bandwidth=\"114639\" codecs=\"mp4a.40.2\" mimeType=\"audio/mp4\" audioSamplingRate=\"44100\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/aac_60s_2ch_16bit_44100Hz_128kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"826-929\" timescale=\"44100\">\n <Initialization range=\"0-825\"/>\n </SegmentBase>\n </Representation>\n </AdaptationSet>\n <AdaptationSet id=\"1\" contentType=\"audio\">\n <SupplementalProperty schemeIdUri=\"urn:mpeg:dash:adaptation-set-switching:2016\" value=\"0,2\"/>\n <Representation id=\"1\" bandwidth=\"141719\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"44100\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_16bit_44100Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"44100\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"3\" bandwidth=\"541361\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_24bit_48000Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"48000\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"4\" bandwidth=\"470315\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"0\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_16bit_192000Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"192000\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"6\" bandwidth=\"2192360\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"0\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_24bit_192000Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"192000\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"8\" bandwidth=\"153326\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_16bit_48000Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"48000\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"10\" bandwidth=\"257514\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"0\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_16bit_96000Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"96000\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"11\" bandwidth=\"495381\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"44100\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_24bit_44100Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"44100\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"16\" bandwidth=\"1074424\" codecs=\"flac\" mimeType=\"audio/mp4\" audioSamplingRate=\"0\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/flac_60s_2ch_24bit_96000Hz.mp4</BaseURL>\n <SegmentBase indexRange=\"772-875\" timescale=\"96000\">\n <Initialization range=\"0-771\"/>\n </SegmentBase>\n </Representation>\n </AdaptationSet>\n <AdaptationSet id=\"2\" contentType=\"audio\" subsegmentAlignment=\"true\">\n <SupplementalProperty schemeIdUri=\"urn:mpeg:dash:adaptation-set-switching:2016\" value=\"0,1\"/>\n <Representation id=\"2\" bandwidth=\"322671\" codecs=\"opus\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/opus_60s_2ch_16bit_44100Hz_320kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"803-906\" timescale=\"48000\">\n <Initialization range=\"0-802\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"5\" bandwidth=\"50194\" codecs=\"opus\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/opus_60s_2ch_16bit_44100Hz_48kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"803-906\" timescale=\"48000\">\n <Initialization range=\"0-802\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"7\" bandwidth=\"50194\" codecs=\"opus\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/opus_60s_2ch_16bit_192000Hz_48kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"803-906\" timescale=\"48000\">\n <Initialization range=\"0-802\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"9\" bandwidth=\"162390\" codecs=\"opus\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/opus_60s_2ch_16bit_192000Hz_160kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"803-906\" timescale=\"48000\">\n <Initialization range=\"0-802\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"12\" bandwidth=\"322671\" codecs=\"opus\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/opus_60s_2ch_16bit_192000Hz_320kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"803-906\" timescale=\"48000\">\n <Initialization range=\"0-802\"/>\n </SegmentBase>\n </Representation>\n <Representation id=\"13\" bandwidth=\"162390\" codecs=\"opus\" mimeType=\"audio/mp4\" audioSamplingRate=\"48000\">\n <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>\n <BaseURL>representations/opus_60s_2ch_16bit_44100Hz_160kbps.mp4</BaseURL>\n <SegmentBase indexRange=\"803-906\" timescale=\"48000\">\n <Initialization range=\"0-802\"/>\n </SegmentBase>\n </Representation>\n </AdaptationSet>\n </Period>\n</MPD>\n";// test/unit/setup.ts
|
|
1799
1799
|
addCustomMatchers();setGlobalRefDebug(true);jasmine.getEnv().configure({stopOnSpecFailure:true,stopSpecOnExpectationFailure:true,failSpecWithNoExpectations:true});jasmine.getEnv().addReporter(new ConsoleReporter);RestApiReporter.installFromSearchParam();initializeFrequencyAnalyzer();afterEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee65(){return _regenerator().w(function(_context65){while(1)switch(_context65.n){case 0:_context65.n=1;return flushPromises();case 1:getGlobalRegistry().reset();case 2:return _context65.a(2)}},_callee65)})));// test/unit/vinylTestUtil/util/playback/createEventSpy.test.ts
|
|
@@ -1891,10 +1891,10 @@ var any17=jasmine.any;var createSpy24=jasmine.createSpy;var objectContaining12=j
|
|
|
1891
1891
|
]);segmentController.deactivate();_context236.n=5;return clock.tick();case 5:expect(segmentController.fetchedRanges.ranges).toEqual([[0,20]// 0-20 inactive range
|
|
1892
1892
|
]);case 6:return _context236.a(2)}},_callee236)})));describe("after a seeking event",function(){it("should prefetch from new position",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee237(){return _regenerator().w(function(_context237){while(1)switch(_context237.n){case 0:segmentController.configure(defaultConfigOptions);_context237.n=1;return flushPromises();case 1:segmentController.activate();playbackController.currentTime=30;playbackController.dispatch("seeking",{});_context237.n=2;return clock.tick(PREFETCH_POLL_THROTTLE);case 2:expect(segmentController.fetchedRanges.ranges).toEqual([[0,10],[30,40]]);case 3:return _context237.a(2)}},_callee237)})));it("should reset ended state",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee238(){return _regenerator().w(function(_context238){while(1)switch(_context238.n){case 0:segmentController.configure(defaultConfigOptions);playbackController.currentTime=95;segmentController.activate();_context238.n=1;return clock.tick(PREFETCH_POLL_THROTTLE);case 1:playbackController.currentTime=30;playbackController.dispatch("seeking",{});_context238.n=2;return clock.tick(PREFETCH_POLL_THROTTLE);case 2:expect(segmentController.fetchedRanges.ranges).toEqual([[0,10],[30,40]]);case 3:return _context238.a(2)}},_callee238)})))});describe("when mediaTimelineTransformed changes",function(){it("should reset bufferingEnded state",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee239(){var extendedTimeline;return _regenerator().w(function(_context239){while(1)switch(_context239.n){case 0:playbackController.currentTime=95;segmentController.activate();segmentController.configure(defaultConfigOptions);_context239.n=1;return fillPrefetch();case 1:extendedTimeline={periods:[{startTime:0,endTime:110,qualities:[{metadata:__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{contentType:"audio",decoderId:"1"}),getSegment:function getSegment(time){if(time>=110)return Promise.resolve(null);return Promise.resolve(createMockMediaSegment(time))}}]}],minBufferTime:10,getDuration:function getDuration(){return Promise.resolve(110)}};timelineData.value=Promise.resolve(extendedTimeline);_context239.n=2;return fillPrefetch();case 2:expect(segmentController.fetchedRanges.getRangeAt(90)).toEqual([90,110]);case 3:return _context239.a(2)}},_callee239)})))})});describe("when inactive",function(){it("prefetches from startTime",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee240(){return _regenerator().w(function(_context240){while(1)switch(_context240.n){case 0:segmentController.configure({startTime:20,trackPrefetchPriority:0});_context240.n=1;return fillPrefetch();case 1:expect(segmentController.fetchedRanges.ranges).toEqual([[20,40]]);case 2:return _context240.a(2)}},_callee240)})))});describe("when a segment prefetch fails",function(){describe("and the error is not silent",function(){var error=new Error("failed segment");beforeEach(function(){segmentProvider.getSegment.and.callFake(function(time){return Promise.resolve(__spreadProps(__spreadValues({},createMockMediaSegment(time)),{data:function data(){return Promise.reject(error)}}))})});it("logs the error",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee241(){return _regenerator().w(function(_context241){while(1)switch(_context241.n){case 0:segmentController.configure(defaultConfigOptions);_context241.n=1;return flushPromises();case 1:expect(loggerRef2.value.error).toHaveBeenCalledOnceWith(any17(Object),"Error prefetching segment",error);case 2:return _context241.a(2)}},_callee241)})));it("stops prefetching",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee242(){return _regenerator().w(function(_context242){while(1)switch(_context242.n){case 0:segmentController.configure(defaultConfigOptions);_context242.n=1;return flushPromises();case 1:expect(segmentController.error).not.toBeNull();segmentProvider.getSegment.calls.reset();playbackController.dispatch("timeUpdate",timeUpdateEvent);_context242.n=2;return clock.tick(PREFETCH_POLL_THROTTLE);case 2:expect(segmentProvider.getSegment).not.toHaveBeenCalled();case 3:return _context242.a(2)}},_callee242)})))});describe("and the error is silent",function(){var mockSegmentReference;beforeEach(function(){mockSegmentReference=__spreadProps(__spreadValues({},createMockMediaSegment(0)),{initData:createSpy24("initData").and.resolveTo(new ArrayBuffer(0)),data:createSpy24("data").and.rejectWith(new AbortError)// AbortError is silent.
|
|
1893
1893
|
});segmentProvider.getSegment.and.callFake(function(){return Promise.resolve(mockSegmentReference)})});it("does not log the error",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee243(){return _regenerator().w(function(_context243){while(1)switch(_context243.n){case 0:segmentController.configure(defaultConfigOptions);_context243.n=1;return flushPromises();case 1:expect(loggerRef2.value.error).not.toHaveBeenCalled();case 2:return _context243.a(2)}},_callee243)})));it("allows the segment to be requested again",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee244(){return _regenerator().w(function(_context244){while(1)switch(_context244.n){case 0:segmentController.configure(defaultConfigOptions);_context244.n=1;return expectAsync(segmentController.getSegment(0)).toBeRejectedWith(new AbortError);case 1:mockSegmentReference.data.and.resolveTo(new ArrayBuffer(0));_context244.n=2;return expectAsync(segmentController.getSegment(0)).toBeResolvedTo(objectContaining12({data:any17(ArrayBuffer)}));case 2:return _context244.a(2)}},_callee244)})))})});describe("getSegment",function(){it("immediately requests and returns a segment at a specified time",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee245(){var segment90,_t31;return _regenerator().w(function(_context245){while(1)switch(_context245.n){case 0:_context245.n=1;return segmentController.getSegment(95);case 1:segment90=_context245.v;expect(segment90==null?void 0:segment90.startTime).toBe(90);expect(segment90==null?void 0:segment90.initData).toEqual(any17(ArrayBuffer));expect(segment90==null?void 0:segment90.data).toEqual(any17(ArrayBuffer));_t31=expect;_context245.n=2;return segmentController.getSegment(100);case 2:_t31(_context245.v).toBeNull();case 3:return _context245.a(2)}},_callee245)})));it("returns null when no qualities match the content type",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee246(){var _t32;return _regenerator().w(function(_context246){while(1)switch(_context246.n){case 0:timelineData.value=Promise.resolve({periods:[{startTime:0,endTime:100,qualities:[{metadata:__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{contentType:"video"}),getSegment:function getSegment(){return Promise.resolve(null)}}]}],minBufferTime:10,getDuration:function getDuration(){return Promise.resolve(100)}});_t32=expect;_context246.n=1;return segmentController.getSegment(5);case 1:_t32(_context246.v).toBeNull();case 2:return _context246.a(2)}},_callee246)})));it("returns null when quality getSegment returns null within period",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee247(){var _t33;return _regenerator().w(function(_context247){while(1)switch(_context247.n){case 0:_context247.n=1;return fillPrefetch();case 1:segmentController.clear();_context247.n=2;return flushPromises();case 2:segmentProvider.getSegment.and.returnValue(Promise.resolve(null));_t33=expect;_context247.n=3;return segmentController.getSegment(50);case 3:_t33(_context247.v).toBeNull();case 4:return _context247.a(2)}},_callee247)})));it("caches segment data",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee248(){var _a3,_b,segment90,_t34,_t35,_t36,_t37,_t38,_t39;return _regenerator().w(function(_context248){while(1)switch(_context248.n){case 0:_context248.n=1;return segmentController.getSegment(95);case 1:segment90=_context248.v;expect(segment90==null?void 0:segment90.startTime).toBe(90);_t34=expect;_context248.n=2;return segmentController.getSegment(90);case 2:_t35=_a3=_context248.v;if(!(_t35==null)){_context248.n=3;break}_t36=void 0;_context248.n=4;break;case 3:_t36=_a3.data;case 4:_t34(_t36).toBe(segment90==null?void 0:segment90.data);_t37=expect;_context248.n=5;return segmentController.getSegment(80);case 5:_t38=_b=_context248.v;if(!(_t38==null)){_context248.n=6;break}_t39=void 0;_context248.n=7;break;case 6:_t39=_b.data;case 7:_t37(_t39).not.toBe(segment90==null?void 0:segment90.data);case 8:return _context248.a(2)}},_callee248)})));it("returns cached result when multiple segment slots are requested without waiting",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee250(){var CREATE_SEGMENT_DELAY,promise1,promise2,segment1,segment2;return _regenerator().w(function(_context250){while(1)switch(_context250.n){case 0:_context250.n=1;return fillPrefetch();case 1:segmentController.clear();CREATE_SEGMENT_DELAY=1;segmentProvider.getSegment.and.callFake(/*#__PURE__*/function(){var _ref221=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee249(time){return _regenerator().w(function(_context249){while(1)switch(_context249.n){case 0:_context249.n=1;return _sleep(CREATE_SEGMENT_DELAY);case 1:return _context249.a(2,createMockMediaSegment(time))}},_callee249)}));return function(_x89){return _ref221.apply(this,arguments)}}());promise1=segmentController.getSegment(10);promise2=segmentController.getSegment(10);_context250.n=2;return flushPromises();case 2:_context250.n=3;return clock.tick(CREATE_SEGMENT_DELAY);case 3:_context250.n=4;return promise1;case 4:segment1=_context250.v;_context250.n=5;return promise2;case 5:segment2=_context250.v;expect(segment1==null?void 0:segment1.data).toBe(segment2==null?void 0:segment2.data);case 6:return _context250.a(2)}},_callee250)})));it("reuses init slots when decoderId is the same",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee251(){var s1,s2,s5,s6;return _regenerator().w(function(_context251){while(1)switch(_context251.n){case 0:_context251.n=1;return fillPrefetch();case 1:segmentController.clear();segmentProvider.getSegment.and.callFake(function(time){var use1=time<50;return Promise.resolve(mergeDeep([createMockMediaSegment(time),{quality:__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{decoderId:use1?"1":"2"})}]))});_context251.n=2;return segmentController.getSegment(0);case 2:s1=_context251.v;_context251.n=3;return segmentController.getSegment(10);case 3:s2=_context251.v;expect(s2.initData).toBe(s1.initData);_context251.n=4;return segmentController.getSegment(50);case 4:s5=_context251.v;expect(s5.initData).not.toBe(s1.initData);_context251.n=5;return segmentController.getSegment(60);case 5:s6=_context251.v;expect(s6.initData).toBe(s5.initData);case 6:return _context251.a(2)}},_callee251)})));it("blocks new prefetches until active segments settle",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee253(){var resolvePendingDataRequests,_resolvePendingDataRequests,segmentPromise;return _regenerator().w(function(_context253){while(1)switch(_context253.n){case 0:_resolvePendingDataRequests=function _resolvePendingDataRe2(){_resolvePendingDataRequests=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee252(){var _iterator87,_step87,call,_deferred,_t40;return _regenerator().w(function(_context252){while(1)switch(_context252.p=_context252.n){case 0:_iterator87=_createForOfIteratorHelper(mockSegmentDataProvider.calls.all());_context252.p=1;_iterator87.s();case 2:if((_step87=_iterator87.n()).done){_context252.n=4;break}call=_step87.value;_deferred=call.returnValue;_deferred.resolve(new ArrayBuffer(0));_context252.n=3;return _deferred;case 3:_context252.n=2;break;case 4:_context252.n=6;break;case 5:_context252.p=5;_t40=_context252.v;_iterator87.e(_t40);case 6:_context252.p=6;_iterator87.f();return _context252.f(6);case 7:return _context252.a(2)}},_callee252,null,[[1,5,6,7]])}));return _resolvePendingDataRequests.apply(this,arguments)};resolvePendingDataRequests=function _resolvePendingDataRe(){return _resolvePendingDataRequests.apply(this,arguments)};_context253.n=1;return fillPrefetch();case 1:segmentController.clear();_context253.n=2;return flushPromises();case 2:mockSegmentDataProvider.and.callFake(function(){return new Deferred});mockSegmentDataProvider.calls.reset();playbackController.currentTime=40;segmentPromise=segmentController.getSegment(45);_context253.n=3;return flushPromises();case 3:expect(mockSegmentDataProvider).toHaveBeenCalledTimes(2);segmentController.configure(defaultConfigOptions);playbackController.currentTime=50;expect(mockSegmentDataProvider).toHaveBeenCalledTimes(2);_context253.n=4;return resolvePendingDataRequests();case 4:_context253.n=5;return segmentPromise;case 5:_context253.n=6;return fillPrefetch();case 6:expect(mockSegmentDataProvider).toHaveBeenCalledTimes(3);case 7:return _context253.a(2)}},_callee253)})));describe("when requested quality changes",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee254(){return _regenerator().w(function(_context254){while(1)switch(_context254.n){case 0:segmentController.dispose();segmentProvider.getSegment.and.callFake(function(time){if(time>=100)return Promise.resolve(null);var mockSegment=createMockMediaSegment(time);mockSegment.quality.qualityId=time<30?"1":"2";return Promise.resolve(mockSegment)});segmentController=new SegmentControllerImpl(mockDeps,"audio",{prefetchActive:40,prefetchInactive:20,retainTail:30});_context254.n=1;return fillPrefetch();case 1:segmentController.clear();case 2:return _context254.a(2)}},_callee254)})));it("updates streamingQuality",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee255(){var _a3,_b,_c,streamingQualityChangeSpy;return _regenerator().w(function(_context255){while(1)switch(_context255.n){case 0:streamingQualityChangeSpy=createEventSpy(segmentController,"streamingQualityChange");_context255.n=1;return segmentController.getSegment(1);case 1:expect((_a3=segmentController.streamingQuality)==null?void 0:_a3.qualityId).toEqual("1");streamingQualityChangeSpy.calls.reset();_context255.n=2;return segmentController.getSegment(25);case 2:expect((_b=segmentController.streamingQuality)==null?void 0:_b.qualityId).toEqual("2");streamingQualityChangeSpy.calls.reset();_context255.n=3;return segmentController.getSegment(30);case 3:expect((_c=segmentController.streamingQuality)==null?void 0:_c.qualityId).toEqual("2");expect(streamingQualityChangeSpy).not.toHaveBeenCalled();case 4:return _context255.a(2)}},_callee255)})))});describe("when aborted",function(){it("unblocks prefetch queue",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee256(){var abort,segmentPromise;return _regenerator().w(function(_context256){while(1)switch(_context256.n){case 0:_context256.n=1;return fillPrefetch();case 1:segmentController.clear();_context256.n=2;return flushPromises();case 2:mockSegmentDataProvider.and.callFake(function(){return new Deferred});mockSegmentDataProvider.calls.reset();playbackController.currentTime=40;abort=new Abort;segmentPromise=segmentController.getSegment(45,abort);_context256.n=3;return flushPromises();case 3:expect(mockSegmentDataProvider).toHaveBeenCalledTimes(2);playbackController.currentTime=50;segmentController.configure(defaultConfigOptions);expect(mockSegmentDataProvider).toHaveBeenCalledTimes(2);abort.abort();_context256.n=4;return segmentPromise["catch"](noop);case 4:_context256.n=5;return fillPrefetch();case 5:expect(mockSegmentDataProvider).toHaveBeenCalledTimes(3);case 6:return _context256.a(2)}},_callee256)})))});describe("when disposed",function(){it("rejects with AbortError",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee257(){var segmentPromise;return _regenerator().w(function(_context257){while(1)switch(_context257.n){case 0:segmentPromise=segmentController.getSegment(1);segmentController.dispose();_context257.n=1;return expectAsync(segmentPromise).toBeRejectedWithError(AbortError);case 1:return _context257.a(2)}},_callee257)})))});describe("error recovery",function(){var error=new Error("segment failed");beforeEach(function(){var failCount=0;mockSegmentDataProvider.and.callFake(function(){return++failCount<=2?Promise.reject(error):Promise.resolve(new ArrayBuffer(0))})});it("retries failed prefetched segments and init segments",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee258(){var segment;return _regenerator().w(function(_context258){while(1)switch(_context258.n){case 0:segmentController.configure(defaultConfigOptions);_context258.n=1;return flushPromises();case 1:expect(loggerRef2.value.error).toHaveBeenCalledTimes(1);_context258.n=2;return segmentController.getSegment(0);case 2:segment=_context258.v;expect(segment==null?void 0:segment.startTime).toBe(0);expect(segment==null?void 0:segment.data).toEqual(any17(ArrayBuffer));expect(segment==null?void 0:segment.initData).toEqual(any17(ArrayBuffer));case 3:return _context258.a(2)}},_callee258)})))})});describe("minBufferTime",function(){describe("when the requested time is within minBufferTime of the segment end",function(){describe("and there is a next segment",function(){it("awaits fetching the next segment before resolving",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee259(){return _regenerator().w(function(_context259){while(1)switch(_context259.n){case 0:_context259.n=1;return segmentController.getSegment(1);case 1:expect(segmentController.fetchedRanges.ranges).toEqual([[0,20]]);case 2:return _context259.a(2)}},_callee259)})))});describe("and there is not a next segment",function(){it("resolves normally",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee260(){return _regenerator().w(function(_context260){while(1)switch(_context260.n){case 0:_context260.n=1;return segmentController.getSegment(91);case 1:expect(segmentController.fetchedRanges.getRangeAt(90)).toEqual([90,100]);case 2:return _context260.a(2)}},_callee260)})))})})});describe("clear",function(){it("clears all cached segments",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee261(){return _regenerator().w(function(_context261){while(1)switch(_context261.n){case 0:segmentController.configure(defaultConfigOptions);_context261.n=1;return clock.tick(PREFETCH_POLL_THROTTLE,PREFETCH_POLL_THROTTLE);case 1:expect(segmentController.fetchedRanges.ranges).toEqual([[0,20]]);segmentController.clear();expect(segmentController.fetchedRanges.ranges).toEqual([]);segmentController.activate();playbackController.currentTime=35;playbackController.dispatch("timeUpdate",timeUpdateEvent);_context261.n=2;return clock.tick(PREFETCH_POLL_THROTTLE,PREFETCH_POLL_THROTTLE);case 2:expect(segmentController.fetchedRanges.ranges).toEqual([[30,50]]);segmentController.clear();expect(segmentController.fetchedRanges.ranges).toEqual([]);case 3:return _context261.a(2)}},_callee261)})));it("should reset the prefetching state",function(){segmentController.activate();segmentController.clear();expect(segmentController["ended"]).toBeFalse()})});describe("configure",function(){describe("providing trackPrefetchPriority",function(){it("sets the track priority for prefetching",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee262(){var spy;return _regenerator().w(function(_context262){while(1)switch(_context262.n){case 0:_context262.n=1;return fillPrefetch();case 1:spy=spyOn(prefetchPriorityQueuesRef.value.audio,"enqueue").and.resolveTo();segmentController.clear();segmentController.configure({trackPrefetchPriority:3,startTime:0});expect(segmentController.trackPrefetchPriority).toBe(3);_context262.n=2;return flushPromises();case 2:expect(spy.calls.mostRecent().args[1].trackPriority).toBe(3);case 3:return _context262.a(2)}},_callee262)})))});it("allows for partial options",function(){segmentController.configure({trackPrefetchPriority:1,startTime:2});expect(segmentController.trackPrefetchPriority).toBe(1);expect(segmentController.startTime).toBe(2);segmentController.configure({trackPrefetchPriority:3});expect(segmentController.trackPrefetchPriority).toBe(3);expect(segmentController.startTime).toBe(2);segmentController.configure({startTime:4});expect(segmentController.trackPrefetchPriority).toBe(3);expect(segmentController.startTime).toBe(4)})});describe("fetchedTime",function(){it("returns the number of seconds currently prefetched",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee263(){return _regenerator().w(function(_context263){while(1)switch(_context263.n){case 0:segmentController.configure(defaultConfigOptions);_context263.n=1;return fillPrefetch();case 1:expect(segmentController.fetchedTime).toBe(20);playbackController.currentTime=30;segmentController.activate();expect(segmentController.fetchedTime).toBe(0);_context263.n=2;return fillPrefetch();case 2:expect(segmentController.fetchedTime).toBe(40);playbackController.currentTime=65;playbackController.dispatch("timeUpdate",timeUpdateEvent);expect(segmentController.fetchedTime).toBe(5);_context263.n=3;return fillPrefetch();case 3:expect(segmentController.fetchedTime).toBe(35);case 4:return _context263.a(2)}},_callee263)})))});describe("dispose",function(){it("removes all playbackController listeners",function(){segmentController.dispose();expect(segmentController.disposed).toBeTrue();expect(playbackController.hasAnyListeners()).toBeFalse()});it("clears all cached segments",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee264(){return _regenerator().w(function(_context264){while(1)switch(_context264.n){case 0:segmentController.configure(defaultConfigOptions);_context264.n=1;return clock.tick(PREFETCH_POLL_THROTTLE,PREFETCH_POLL_THROTTLE);case 1:segmentController.dispose();expect(segmentController.fetchedRanges.ranges).toEqual([]);_context264.n=2;return clock.tick(PREFETCH_POLL_THROTTLE,PREFETCH_POLL_THROTTLE);case 2:expect(segmentController.fetchedRanges.ranges).toEqual([]);case 3:return _context264.a(2)}},_callee264)})));it("deactivates if active",function(){segmentController.activate();segmentController.dispose();expect(segmentController.active).toBeFalse()});it("aborts enqueued prefetch operations",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee265(){var segmentPromise;return _regenerator().w(function(_context265){while(1)switch(_context265.n){case 0:mockSegmentDataProvider.and.callFake(function(){return new Deferred});segmentController.configure(defaultConfigOptions);segmentPromise=segmentController.getSegment(0);segmentController.dispose();_context265.n=1;return expectAsync(segmentPromise).toBeRejectedWithError(AbortError);case 1:_context265.n=2;return flushPromises();case 2:expect(prefetchPriorityQueuesRef.value.audio.running).toBe(0);case 3:return _context265.a(2)}},_callee265)})));describe("when an enqueued prefetch reaches its turn",function(){it("does not fetch a segment",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee266(){return _regenerator().w(function(_context266){while(1)switch(_context266.n){case 0:_context266.n=1;return fillPrefetch();case 1:segmentProvider.getSegment.calls.reset();segmentController.dispose();_context266.n=2;return clock.tick(PREFETCH_POLL_THROTTLE);case 2:expect(segmentProvider.getSegment).not.toHaveBeenCalled();case 3:return _context266.a(2)}},_callee266)})))});it("throws AbortError when disposed during quality getSegment",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee267(){var deferred,promise2;return _regenerator().w(function(_context267){while(1)switch(_context267.n){case 0:_context267.n=1;return fillPrefetch();case 1:segmentController.clear();_context267.n=2;return flushPromises();case 2:deferred=new Deferred;segmentProvider.getSegment.and.returnValue(deferred);promise2=segmentController.getSegment(50);_context267.n=3;return flushPromises();case 3:segmentController.dispose();deferred.resolve(null);_context267.n=4;return flushPromises();case 4:_context267.n=5;return expectAsync(promise2).toBeRejectedWithError(AbortError);case 5:return _context267.a(2)}},_callee267)})));it("removes network state listener",function(){segmentController.dispose();expect(mockNetworkStateRef.value.hasAnyListeners()).toBeFalse()})});describe("reset",function(){var error=new Error("segment failed");beforeEach(function(){var failCount=0;mockSegmentDataProvider.and.callFake(function(){return++failCount<=2?Promise.reject(error):Promise.resolve(new ArrayBuffer(0))})});it("resets failed prefetched segments and init segments",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee268(){return _regenerator().w(function(_context268){while(1)switch(_context268.n){case 0:segmentController.configure(defaultConfigOptions);_context268.n=1;return expectAsync(segmentController.getSegment(0)).toBeRejectedWith(error);case 1:segmentController.reset();_context268.n=2;return expectAsync(segmentController.getSegment(0)).toBeResolved();case 2:return _context268.a(2)}},_callee268)})))});describe("network state",function(){it("resets prefetch when network comes online",function(){var resetSpy=spyOn(segmentController,"reset");mockNetworkStateRef.value.dispatch("online",mockEvent("online"));expect(resetSpy).toHaveBeenCalledOnceWith()})})});// test/unit/streaming/MseTrack.test.ts
|
|
1894
|
-
var any18=jasmine.any;describe("MseTrack",function(){useMockLogger();var deps;var track;function createTrack(){var uri=arguments.length>0&&arguments[0]!==undefined?arguments[0]:"uri";var type=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"mse";return new MseTrack(uri,type,externalDependencies(deps))}function getAllStreams(){return deps.contentStreamFactory.calls.all().map(function(call){return call.returnValue})}function getStream(contentType2){var _a3,_b;return(_b=(_a3=deps.contentStreamFactory.calls.all().find(function(c){return c.args[0]===contentType2}))==null?void 0:_a3.returnValue)!=null?_b:null}function getAudioStream(){return getStream("audio")}function getVideoStream(){return getStream("video")}beforeEach(function(){track=null;deps=createMockDashDependencies();deps.contentTypesValue.value=Promise.resolve(/* @__PURE__ */new Set(["audio","video"]))});afterEach(function(){if(!(track==null?void 0:track.disposed))track==null?void 0:track.dispose()});function awaitContentTypes(){return _awaitContentTypes.apply(this,arguments)}function _awaitContentTypes(){_awaitContentTypes=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1894
|
+
var any18=jasmine.any;describe("MseTrack",function(){useMockLogger();var deps;var track;function createTrack(){var uri=arguments.length>0&&arguments[0]!==undefined?arguments[0]:"uri";var type=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"mse";return new MseTrack(uri,type,externalDependencies(deps))}function getAllStreams(){return deps.contentStreamFactory.calls.all().map(function(call){return call.returnValue})}function getStream(contentType2){var _a3,_b;return(_b=(_a3=deps.contentStreamFactory.calls.all().find(function(c){return c.args[0]===contentType2}))==null?void 0:_a3.returnValue)!=null?_b:null}function getAudioStream(){return getStream("audio")}function getVideoStream(){return getStream("video")}beforeEach(function(){track=null;deps=createMockDashDependencies();deps.contentTypesValue.value=Promise.resolve(/* @__PURE__ */new Set(["audio","video"]))});afterEach(function(){if(!(track==null?void 0:track.disposed))track==null?void 0:track.dispose()});function awaitContentTypes(){return _awaitContentTypes.apply(this,arguments)}function _awaitContentTypes(){_awaitContentTypes=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee304(){return _regenerator().w(function(_context304){while(1)switch(_context304.n){case 0:_context304.n=1;return deps.contentTypesValue.value;case 1:return _context304.a(2)}},_callee304)}));return _awaitContentTypes.apply(this,arguments)}describe("fetchedRanges",function(){it("returns intersection of all content stream ranges",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee270(){var audioStream,videoStream;return _regenerator().w(function(_context270){while(1)switch(_context270.n){case 0:track=createTrack();expect(track.fetchedRanges.empty).toBeTrue();_context270.n=1;return awaitContentTypes();case 1:audioStream=getAudioStream();videoStream=getVideoStream();expect(track.fetchedRanges.empty).toBeTrue();audioStream.fetchedRanges.add(0,10);audioStream.fetchedRanges.add(20,30);audioStream.dispatch("fetchedRangesChange",{});expect(track.fetchedRanges.empty).toBeTrue();videoStream.fetchedRanges.add(5,15);videoStream.fetchedRanges.add(25,35);videoStream.dispatch("fetchedRangesChange",{});expect(track.fetchedRanges.ranges).toEqual([[5,10],// intersection of [0,10] and [5,15]
|
|
1895
1895
|
[25,30]// intersection of [20,30] and [25,35]
|
|
1896
|
-
]);case 2:return _context270.a(2)}},_callee270)})));it("updates ranges when content streams change",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee271(){var audioStream,videoStream;return _regenerator().w(function(_context271){while(1)switch(_context271.n){case 0:track=createTrack();_context271.n=1;return awaitContentTypes();case 1:audioStream=getAudioStream();videoStream=getVideoStream();audioStream.fetchedRanges.add(0,10);videoStream.fetchedRanges.add(5,15);audioStream.dispatch("fetchedRangesChange",{});videoStream.dispatch("fetchedRangesChange",{});expect(track.fetchedRanges.ranges).toEqual([[5,10]]);audioStream.fetchedRanges.clear();audioStream.dispatch("fetchedRangesChange",{});expect(track.fetchedRanges.empty).toBeTrue();audioStream.fetchedRanges.add(8,12);audioStream.dispatch("fetchedRangesChange",{});expect(track.fetchedRanges.ranges).toEqual([[8,12]]);case 2:return _context271.a(2)}},_callee271)})))});describe("clearPrefetch",function(){it("calls clearPrefetch on the streams",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee272(){return _regenerator().w(function(_context272){while(1)switch(_context272.n){case 0:track=createTrack();_context272.n=1;return awaitContentTypes();case 1:track.clearPrefetch();expect(getAudioStream().clearPrefetch).toHaveBeenCalledOnceWith();expect(getVideoStream().clearPrefetch).toHaveBeenCalledOnceWith();case 2:return _context272.a(2)}},_callee272)})))});describe("reset",function(){it("no-ops if no error",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee273(){return _regenerator().w(function(_context273){while(1)switch(_context273.n){case 0:track=createTrack();_context273.n=1;return awaitContentTypes();case 1:track.reset();expect(deps.manifestController.reset).not.toHaveBeenCalled();expect(getAudioStream().reset).not.toHaveBeenCalled();expect(getVideoStream().reset).not.toHaveBeenCalled();case 2:return _context273.a(2)}},_callee273)})));describe("when in an error state",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee274(){return _regenerator().w(function(_context274){while(1)switch(_context274.n){case 0:track=createTrack();_context274.n=1;return awaitContentTypes();case 1:getAudioStream().dispatch("error",{error:new Error("error"),target:getAudioStream()});case 2:return _context274.a(2)}},_callee274)})));it("calls reset on the streams and manifestController",function(){track.reset();expect(deps.manifestController.reset).toHaveBeenCalledOnceWith();expect(getAudioStream().reset).toHaveBeenCalledOnceWith();expect(getVideoStream().reset).toHaveBeenCalledOnceWith()});it("dispatches a reset event",function(){var resetSpy=createEventSpy(track,"reset");track.reset();expect(resetSpy).toHaveBeenCalledTimes(1)})})});describe("preload",function(){it("calls preload on the streams",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee275(){var trackOptions,loadOptions;return _regenerator().w(function(_context275){while(1)switch(_context275.n){case 0:track=createTrack();_context275.n=1;return awaitContentTypes();case 1:trackOptions={prefetchPriority:3};loadOptions={startTime:4};track.preload(trackOptions,loadOptions);expect(getAudioStream().preload).toHaveBeenCalledOnceWith({prefetchPriority:3,startTime:4});expect(getVideoStream().preload).toHaveBeenCalledOnceWith({prefetchPriority:3,startTime:4});case 2:return _context275.a(2)}},_callee275)})))});describe("activate",function(){it("activates successfully",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee276(){return _regenerator().w(function(_context276){while(1)switch(_context276.n){case 0:track=createTrack();_context276.n=1;return awaitContentTypes();case 1:expect(function(){return track.activate({})}).not.toThrow();case 2:return _context276.a(2)}},_callee276)})));it("seeks to startTime",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee277(){return _regenerator().w(function(_context277){while(1)switch(_context277.n){case 0:track=createTrack();_context277.n=1;return awaitContentTypes();case 1:track.activate({startTime:20});expect(deps.playbackController.seekTo).toHaveBeenCalledOnceWith(20);case 2:return _context277.a(2)}},_callee277)})));it("disables remote playback",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee278(){return _regenerator().w(function(_context278){while(1)switch(_context278.n){case 0:track=createTrack();_context278.n=1;return awaitContentTypes();case 1:track.activate({});expect(deps.playbackSource.disableRemotePlayback).toBeTrue();case 2:return _context278.a(2)}},_callee278)})));it("sets the src",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee279(){return _regenerator().w(function(_context279){while(1)switch(_context279.n){case 0:deps.mediaSourceController.createUrl.and.returnValue("test1");track=createTrack();_context279.n=1;return awaitContentTypes();case 1:expect(deps.playbackSource.src).toBeNull();track.activate({});expect(deps.playbackSource.src).toBe("test1");case 2:return _context279.a(2)}},_callee279)})));it("initializes the drm controller with the streaming metadata for audio and video",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee280(){var audioMetadata,videoMetadata;return _regenerator().w(function(_context280){while(1)switch(_context280.n){case 0:track=createTrack();_context280.n=1;return awaitContentTypes();case 1:audioMetadata=createEmptyMediaQualityMetadata();videoMetadata=createEmptyMediaQualityMetadata();getAudioStream().streamingQuality=audioMetadata;getVideoStream().streamingQuality=videoMetadata;track.activate({});expect(deps.drmController.initializeForPlayback).toHaveBeenCalledTimes(2);expect(deps.drmController.initializeForPlayback).toHaveBeenCalledWith(audioMetadata,any18(Abort));expect(deps.drmController.initializeForPlayback).toHaveBeenCalledWith(videoMetadata,any18(Abort));case 2:return _context280.a(2)}},_callee280)})))});describe("deactivate",function(){it("clears playback state",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee281(){return _regenerator().w(function(_context281){while(1)switch(_context281.n){case 0:track=createTrack();_context281.n=1;return awaitContentTypes();case 1:track.activate({});track.deactivate();expect(deps.playbackSource.src).toBeNull();expect(deps.playbackSource.load).toHaveBeenCalledOnceWith();expect(deps.playbackController.pause).toHaveBeenCalledOnceWith();case 2:return _context281.a(2)}},_callee281)})))});describe("error",function(){it("returns the first emitted error",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee282(){var error1,error2;return _regenerator().w(function(_context282){while(1)switch(_context282.n){case 0:track=createTrack();_context282.n=1;return awaitContentTypes();case 1:error1=new Error("expected");getAudioStream().dispatch("error",{error:error1,target:getAudioStream()});expect(track.error).toBe(error1);error2=new Error("not expected");getVideoStream().dispatch("error",{error:error2,target:getVideoStream()});expect(track.error).toBe(error1);track.reset();expect(track.error).toBeNull();getVideoStream().dispatch("error",{error:error2,target:getVideoStream()});expect(track.error).toBe(error2);case 2:return _context282.a(2)}},_callee282)})))});describe("when streamingQualityChange is emitted",function(){it("initializes drm controller protections when track is active",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee283(){var _deps2,drmController,metadata1,metadata2;return _regenerator().w(function(_context283){while(1)switch(_context283.n){case 0:_deps2=deps,drmController=_deps2.drmController;metadata1=createEmptyMediaQualityMetadata();track=createTrack();_context283.n=1;return awaitContentTypes();case 1:getAudioStream().dispatch("streamingQualityChange",{previous:null,current:metadata1});expect(drmController.initializeForPlayback).not.toHaveBeenCalled();track.activate({});drmController.initializeForPlayback.calls.reset();getAudioStream().dispatch("streamingQualityChange",{previous:null,current:metadata1});expect(drmController.initializeForPlayback).toHaveBeenCalledOnceWith(metadata1,any18(Abort));drmController.initializeForPlayback.calls.reset();metadata2=createEmptyMediaQualityMetadata();getVideoStream().dispatch("streamingQualityChange",{previous:null,current:metadata2});expect(drmController.initializeForPlayback).toHaveBeenCalledOnceWith(metadata2,any18(Abort));case 2:return _context283.a(2)}},_callee283)})))});describe("when bufferingQualityChange is emitted",function(){it("updates drm content protections",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee284(){var metadata;return _regenerator().w(function(_context284){while(1)switch(_context284.n){case 0:metadata=createEmptyMediaQualityMetadata();track=createTrack();_context284.n=1;return awaitContentTypes();case 1:getAudioStream().dispatch("bufferingQualityChange",{previous:null,current:metadata});expect(deps.drmController.setBufferingDrmInfo).toHaveBeenCalledOnceWith(metadata,any18(Abort));deps.drmController.setBufferingDrmInfo.calls.reset();getVideoStream().dispatch("bufferingQualityChange",{previous:null,current:metadata});expect(deps.drmController.setBufferingDrmInfo).toHaveBeenCalledOnceWith(metadata,any18(Abort));case 2:return _context284.a(2)}},_callee284)})))});describe("getStreamingQuality",function(){it("returns the streaming quality for the given stream",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee285(){var quality;return _regenerator().w(function(_context285){while(1)switch(_context285.n){case 0:track=createTrack();_context285.n=1;return awaitContentTypes();case 1:quality=createEmptyMediaQualityMetadata();expect(track.getStreamingQuality("audio")).toBeNull();getStream("audio").streamingQuality=quality;expect(track.getStreamingQuality("audio")).toBe(quality);expect(track.getStreamingQuality("video")).toBeNull();getStream("video").streamingQuality=quality;expect(track.getStreamingQuality("video")).toBe(quality);case 2:return _context285.a(2)}},_callee285)})))});describe("getBufferingQuality",function(){it("returns streamAudio.bufferingQuality",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee286(){var quality;return _regenerator().w(function(_context286){while(1)switch(_context286.n){case 0:track=createTrack();_context286.n=1;return awaitContentTypes();case 1:quality=createEmptyMediaQualityMetadata();expect(track.getBufferingQuality("audio")).toBeNull();getStream("audio").bufferingQuality=quality;expect(track.getBufferingQuality("audio")).toBe(quality);expect(track.getBufferingQuality("video")).toBeNull();getStream("video").bufferingQuality=quality;expect(track.getBufferingQuality("video")).toBe(quality);case 2:return _context286.a(2)}},_callee286)})))});describe("getPlaybackQuality",function(){it("returns streamAudio.playbackQuality",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee287(){var quality;return _regenerator().w(function(_context287){while(1)switch(_context287.n){case 0:track=createTrack();_context287.n=1;return awaitContentTypes();case 1:quality=createEmptyMediaQualityMetadata();expect(track.getPlaybackQuality("audio")).toBeNull();getStream("audio").playbackQuality=quality;expect(track.getPlaybackQuality("audio")).toBe(quality);expect(track.getPlaybackQuality("video")).toBeNull();getStream("video").playbackQuality=quality;expect(track.getPlaybackQuality("video")).toBe(quality);case 2:return _context287.a(2)}},_callee287)})))});describe("bufferingEnded",function(){it("returns true when all streams have ended buffering",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee288(){return _regenerator().w(function(_context288){while(1)switch(_context288.n){case 0:track=createTrack();_context288.n=1;return awaitContentTypes();case 1:getAudioStream().bufferingEnded=true;getVideoStream().bufferingEnded=true;expect(track.bufferingEnded).toBe(true);case 2:return _context288.a(2)}},_callee288)})));it("returns false when not all streams have ended buffering",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee289(){return _regenerator().w(function(_context289){while(1)switch(_context289.n){case 0:track=createTrack();_context289.n=1;return awaitContentTypes();case 1:getAudioStream().bufferingEnded=true;getVideoStream().bufferingEnded=false;expect(track.bufferingEnded).toBe(false);case 2:return _context289.a(2)}},_callee289)})))});describe("checkBufferingEnded",function(){it("calls endOfStream and dispatches bufferingEnded when all streams are done",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee290(){var bufferingEndedSpy;return _regenerator().w(function(_context290){while(1)switch(_context290.n){case 0:track=createTrack();_context290.n=1;return awaitContentTypes();case 1:getAudioStream().bufferingEnded=true;getVideoStream().bufferingEnded=true;bufferingEndedSpy=createEventSpy(track,"bufferingEnded");getAudioStream().dispatch("bufferingEnded",{});expect(deps.mediaSourceController.endOfStream).toHaveBeenCalledOnceWith();expect(bufferingEndedSpy).toHaveBeenCalledOnceWith({});case 2:return _context290.a(2)}},_callee290)})));it("does not call endOfStream when not all streams are done",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee291(){var bufferingEndedSpy;return _regenerator().w(function(_context291){while(1)switch(_context291.n){case 0:track=createTrack();_context291.n=1;return awaitContentTypes();case 1:getAudioStream().bufferingEnded=false;getVideoStream().bufferingEnded=true;bufferingEndedSpy=createEventSpy(track,"bufferingEnded");getVideoStream().dispatch("bufferingEnded",{});expect(deps.mediaSourceController.endOfStream).not.toHaveBeenCalled();expect(bufferingEndedSpy).not.toHaveBeenCalled();case 2:return _context291.a(2)}},_callee291)})))});describe("dispose",function(){it("clears streams and calls super dispose",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee292(){var audioStream,videoStream;return _regenerator().w(function(_context292){while(1)switch(_context292.n){case 0:track=createTrack();_context292.n=1;return awaitContentTypes();case 1:audioStream=getAudioStream();videoStream=getVideoStream();track.dispose();expect(audioStream.dispose).toHaveBeenCalledOnceWith();expect(videoStream.dispose).toHaveBeenCalledOnceWith();expect(track.disposed).toBe(true);case 2:return _context292.a(2)}},_callee292)})))});describe("when contentTypesValue promise rejects",function(){it("emits an error event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee293(){var expectedError,errorSpy;return _regenerator().w(function(_context293){while(1)switch(_context293.n){case 0:expectedError=new Error("contentTypes failed");deps.contentTypesValue.value=Promise.reject(expectedError);track=createTrack();errorSpy=createEventSpy(track,"error");_context293.n=1;return flushPromises();case 1:expect(errorSpy).toHaveBeenCalledOnceWith({target:track,error:expectedError});case 2:return _context293.a(2)}},_callee293)})))});describe("when contentTypesValue changes",function(){describe("and content types are not equal",function(){it("clears and recreates the streams",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee294(){var streamsBeforeChange,_iterator88,_step88,stream;return _regenerator().w(function(_context294){while(1)switch(_context294.n){case 0:track=createTrack();_context294.n=1;return awaitContentTypes();case 1:streamsBeforeChange=getAllStreams();expect(streamsBeforeChange.length).toBe(2);deps.contentStreamFactory.calls.reset();deps.contentTypesValue.value=Promise.resolve(/* @__PURE__ */new Set(["audio"]));_context294.n=2;return awaitContentTypes();case 2:_iterator88=_createForOfIteratorHelper(streamsBeforeChange);try{for(_iterator88.s();!(_step88=_iterator88.n()).done;){stream=_step88.value;expect(stream.dispose).toHaveBeenCalled()}}catch(err){_iterator88.e(err)}finally{_iterator88.f()}expect(getAllStreams().length).toBe(1);expect(getAllStreams()[0].contentType).toBe("audio");case 3:return _context294.a(2)}},_callee294)})));it("emits contentTypesChange event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee295(){var contentTypesChangeSpy,previousContentTypes;return _regenerator().w(function(_context295){while(1)switch(_context295.n){case 0:track=createTrack();contentTypesChangeSpy=createEventSpy(track,"contentTypesChange");_context295.n=1;return awaitContentTypes();case 1:contentTypesChangeSpy.calls.reset();previousContentTypes=track.contentTypes;deps.contentTypesValue.value=Promise.resolve(/* @__PURE__ */new Set(["audio"]));_context295.n=2;return awaitContentTypes();case 2:expect(contentTypesChangeSpy).toHaveBeenCalledOnceWith({previous:previousContentTypes,current:/* @__PURE__ */new Set(["audio"])});case 3:return _context295.a(2)}},_callee295)})))});describe("and content types are equal",function(){it("does not recreate the streams",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee296(){var streamsBeforeChange,_iterator89,_step89,stream;return _regenerator().w(function(_context296){while(1)switch(_context296.n){case 0:track=createTrack();_context296.n=1;return awaitContentTypes();case 1:streamsBeforeChange=getAllStreams();expect(streamsBeforeChange.length).toBe(2);deps.contentStreamFactory.calls.reset();deps.contentTypesValue.value=Promise.resolve(/* @__PURE__ */new Set(["video","audio"])// order does not matter
|
|
1897
|
-
);
|
|
1896
|
+
]);case 2:return _context270.a(2)}},_callee270)})));it("updates ranges when content streams change",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee271(){var audioStream,videoStream;return _regenerator().w(function(_context271){while(1)switch(_context271.n){case 0:track=createTrack();_context271.n=1;return awaitContentTypes();case 1:audioStream=getAudioStream();videoStream=getVideoStream();audioStream.fetchedRanges.add(0,10);videoStream.fetchedRanges.add(5,15);audioStream.dispatch("fetchedRangesChange",{});videoStream.dispatch("fetchedRangesChange",{});expect(track.fetchedRanges.ranges).toEqual([[5,10]]);audioStream.fetchedRanges.clear();audioStream.dispatch("fetchedRangesChange",{});expect(track.fetchedRanges.empty).toBeTrue();audioStream.fetchedRanges.add(8,12);audioStream.dispatch("fetchedRangesChange",{});expect(track.fetchedRanges.ranges).toEqual([[8,12]]);case 2:return _context271.a(2)}},_callee271)})))});describe("clearPrefetch",function(){it("calls clearPrefetch on the streams",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee272(){return _regenerator().w(function(_context272){while(1)switch(_context272.n){case 0:track=createTrack();_context272.n=1;return awaitContentTypes();case 1:track.clearPrefetch();expect(getAudioStream().clearPrefetch).toHaveBeenCalledOnceWith();expect(getVideoStream().clearPrefetch).toHaveBeenCalledOnceWith();case 2:return _context272.a(2)}},_callee272)})))});describe("reset",function(){it("no-ops if no error",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee273(){return _regenerator().w(function(_context273){while(1)switch(_context273.n){case 0:track=createTrack();_context273.n=1;return awaitContentTypes();case 1:track.reset();expect(deps.manifestController.reset).not.toHaveBeenCalled();expect(getAudioStream().reset).not.toHaveBeenCalled();expect(getVideoStream().reset).not.toHaveBeenCalled();case 2:return _context273.a(2)}},_callee273)})));describe("when in an error state",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee274(){return _regenerator().w(function(_context274){while(1)switch(_context274.n){case 0:track=createTrack();_context274.n=1;return awaitContentTypes();case 1:getAudioStream().dispatch("error",{error:new Error("error"),target:getAudioStream()});case 2:return _context274.a(2)}},_callee274)})));it("calls reset on the streams and manifestController",function(){track.reset();expect(deps.manifestController.reset).toHaveBeenCalledOnceWith();expect(getAudioStream().reset).toHaveBeenCalledOnceWith();expect(getVideoStream().reset).toHaveBeenCalledOnceWith()});it("dispatches a reset event",function(){var resetSpy=createEventSpy(track,"reset");track.reset();expect(resetSpy).toHaveBeenCalledTimes(1)})})});describe("preload",function(){it("calls preload on the streams",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee275(){var trackOptions,loadOptions;return _regenerator().w(function(_context275){while(1)switch(_context275.n){case 0:track=createTrack();_context275.n=1;return awaitContentTypes();case 1:trackOptions={prefetchPriority:3};loadOptions={startTime:4};track.preload(trackOptions,loadOptions);expect(getAudioStream().preload).toHaveBeenCalledOnceWith({prefetchPriority:3,startTime:4});expect(getVideoStream().preload).toHaveBeenCalledOnceWith({prefetchPriority:3,startTime:4});case 2:return _context275.a(2)}},_callee275)})))});describe("activate",function(){it("activates successfully",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee276(){return _regenerator().w(function(_context276){while(1)switch(_context276.n){case 0:track=createTrack();_context276.n=1;return awaitContentTypes();case 1:expect(function(){return track.activate({})}).not.toThrow();case 2:return _context276.a(2)}},_callee276)})));it("seeks to startTime",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee277(){return _regenerator().w(function(_context277){while(1)switch(_context277.n){case 0:track=createTrack();_context277.n=1;return awaitContentTypes();case 1:track.activate({startTime:20});expect(deps.playbackController.seekTo).toHaveBeenCalledOnceWith(20);case 2:return _context277.a(2)}},_callee277)})));it("disables remote playback",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee278(){return _regenerator().w(function(_context278){while(1)switch(_context278.n){case 0:track=createTrack();_context278.n=1;return awaitContentTypes();case 1:track.activate({});expect(deps.playbackSource.disableRemotePlayback).toBeTrue();case 2:return _context278.a(2)}},_callee278)})));it("sets the src",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee279(){return _regenerator().w(function(_context279){while(1)switch(_context279.n){case 0:deps.mediaSourceController.createUrl.and.returnValue("test1");track=createTrack();_context279.n=1;return awaitContentTypes();case 1:expect(deps.playbackSource.src).toBeNull();track.activate({});expect(deps.playbackSource.src).toBe("test1");case 2:return _context279.a(2)}},_callee279)})));it("initializes the drm controller with the streaming metadata for audio and video",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee280(){var audioMetadata,videoMetadata;return _regenerator().w(function(_context280){while(1)switch(_context280.n){case 0:track=createTrack();_context280.n=1;return awaitContentTypes();case 1:audioMetadata=createEmptyMediaQualityMetadata();videoMetadata=createEmptyMediaQualityMetadata();getAudioStream().streamingQuality=audioMetadata;getVideoStream().streamingQuality=videoMetadata;track.activate({});expect(deps.drmController.initializeForPlayback).toHaveBeenCalledTimes(2);expect(deps.drmController.initializeForPlayback).toHaveBeenCalledWith(audioMetadata,any18(Abort));expect(deps.drmController.initializeForPlayback).toHaveBeenCalledWith(videoMetadata,any18(Abort));case 2:return _context280.a(2)}},_callee280)})))});describe("deactivate",function(){it("clears playback state",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee281(){return _regenerator().w(function(_context281){while(1)switch(_context281.n){case 0:track=createTrack();_context281.n=1;return awaitContentTypes();case 1:track.activate({});track.deactivate();expect(deps.playbackSource.src).toBeNull();expect(deps.playbackSource.load).toHaveBeenCalledOnceWith();expect(deps.playbackController.pause).toHaveBeenCalledOnceWith();case 2:return _context281.a(2)}},_callee281)})));it("aborts the drm session abort so key sessions close",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee282(){var abort;return _regenerator().w(function(_context282){while(1)switch(_context282.n){case 0:track=createTrack();_context282.n=1;return awaitContentTypes();case 1:getAudioStream().streamingQuality=createEmptyMediaQualityMetadata();track.activate({});abort=deps.drmController.initializeForPlayback.calls.mostRecent().args[1];expect(abort.aborted()).toBeFalse();track.deactivate();expect(abort.aborted()).toBeTrue();case 2:return _context282.a(2)}},_callee282)})))});describe("error",function(){it("returns the first emitted error",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee283(){var error1,error2;return _regenerator().w(function(_context283){while(1)switch(_context283.n){case 0:track=createTrack();_context283.n=1;return awaitContentTypes();case 1:error1=new Error("expected");getAudioStream().dispatch("error",{error:error1,target:getAudioStream()});expect(track.error).toBe(error1);error2=new Error("not expected");getVideoStream().dispatch("error",{error:error2,target:getVideoStream()});expect(track.error).toBe(error1);track.reset();expect(track.error).toBeNull();getVideoStream().dispatch("error",{error:error2,target:getVideoStream()});expect(track.error).toBe(error2);case 2:return _context283.a(2)}},_callee283)})))});describe("when streamingQualityChange is emitted",function(){it("initializes drm controller protections when track is active",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee284(){var _deps2,drmController,metadata1,metadata2;return _regenerator().w(function(_context284){while(1)switch(_context284.n){case 0:_deps2=deps,drmController=_deps2.drmController;metadata1=createEmptyMediaQualityMetadata();track=createTrack();_context284.n=1;return awaitContentTypes();case 1:getAudioStream().dispatch("streamingQualityChange",{previous:null,current:metadata1});expect(drmController.initializeForPlayback).not.toHaveBeenCalled();track.activate({});drmController.initializeForPlayback.calls.reset();getAudioStream().dispatch("streamingQualityChange",{previous:null,current:metadata1});expect(drmController.initializeForPlayback).toHaveBeenCalledOnceWith(metadata1,any18(Abort));drmController.initializeForPlayback.calls.reset();metadata2=createEmptyMediaQualityMetadata();getVideoStream().dispatch("streamingQualityChange",{previous:null,current:metadata2});expect(drmController.initializeForPlayback).toHaveBeenCalledOnceWith(metadata2,any18(Abort));case 2:return _context284.a(2)}},_callee284)})))});describe("when bufferingQualityChange is emitted",function(){it("updates drm content protections",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee285(){var metadata;return _regenerator().w(function(_context285){while(1)switch(_context285.n){case 0:metadata=createEmptyMediaQualityMetadata();track=createTrack();_context285.n=1;return awaitContentTypes();case 1:getAudioStream().dispatch("bufferingQualityChange",{previous:null,current:metadata});expect(deps.drmController.setBufferingDrmInfo).toHaveBeenCalledOnceWith(metadata,any18(Abort));deps.drmController.setBufferingDrmInfo.calls.reset();getVideoStream().dispatch("bufferingQualityChange",{previous:null,current:metadata});expect(deps.drmController.setBufferingDrmInfo).toHaveBeenCalledOnceWith(metadata,any18(Abort));case 2:return _context285.a(2)}},_callee285)})))});describe("getStreamingQuality",function(){it("returns the streaming quality for the given stream",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee286(){var quality;return _regenerator().w(function(_context286){while(1)switch(_context286.n){case 0:track=createTrack();_context286.n=1;return awaitContentTypes();case 1:quality=createEmptyMediaQualityMetadata();expect(track.getStreamingQuality("audio")).toBeNull();getStream("audio").streamingQuality=quality;expect(track.getStreamingQuality("audio")).toBe(quality);expect(track.getStreamingQuality("video")).toBeNull();getStream("video").streamingQuality=quality;expect(track.getStreamingQuality("video")).toBe(quality);case 2:return _context286.a(2)}},_callee286)})))});describe("getBufferingQuality",function(){it("returns streamAudio.bufferingQuality",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee287(){var quality;return _regenerator().w(function(_context287){while(1)switch(_context287.n){case 0:track=createTrack();_context287.n=1;return awaitContentTypes();case 1:quality=createEmptyMediaQualityMetadata();expect(track.getBufferingQuality("audio")).toBeNull();getStream("audio").bufferingQuality=quality;expect(track.getBufferingQuality("audio")).toBe(quality);expect(track.getBufferingQuality("video")).toBeNull();getStream("video").bufferingQuality=quality;expect(track.getBufferingQuality("video")).toBe(quality);case 2:return _context287.a(2)}},_callee287)})))});describe("getPlaybackQuality",function(){it("returns streamAudio.playbackQuality",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee288(){var quality;return _regenerator().w(function(_context288){while(1)switch(_context288.n){case 0:track=createTrack();_context288.n=1;return awaitContentTypes();case 1:quality=createEmptyMediaQualityMetadata();expect(track.getPlaybackQuality("audio")).toBeNull();getStream("audio").playbackQuality=quality;expect(track.getPlaybackQuality("audio")).toBe(quality);expect(track.getPlaybackQuality("video")).toBeNull();getStream("video").playbackQuality=quality;expect(track.getPlaybackQuality("video")).toBe(quality);case 2:return _context288.a(2)}},_callee288)})))});describe("bufferingEnded",function(){it("returns true when all streams have ended buffering",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee289(){return _regenerator().w(function(_context289){while(1)switch(_context289.n){case 0:track=createTrack();_context289.n=1;return awaitContentTypes();case 1:getAudioStream().bufferingEnded=true;getVideoStream().bufferingEnded=true;expect(track.bufferingEnded).toBe(true);case 2:return _context289.a(2)}},_callee289)})));it("returns false when not all streams have ended buffering",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee290(){return _regenerator().w(function(_context290){while(1)switch(_context290.n){case 0:track=createTrack();_context290.n=1;return awaitContentTypes();case 1:getAudioStream().bufferingEnded=true;getVideoStream().bufferingEnded=false;expect(track.bufferingEnded).toBe(false);case 2:return _context290.a(2)}},_callee290)})))});describe("checkBufferingEnded",function(){it("calls endOfStream and dispatches bufferingEnded when all streams are done",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee291(){var bufferingEndedSpy;return _regenerator().w(function(_context291){while(1)switch(_context291.n){case 0:track=createTrack();_context291.n=1;return awaitContentTypes();case 1:getAudioStream().bufferingEnded=true;getVideoStream().bufferingEnded=true;bufferingEndedSpy=createEventSpy(track,"bufferingEnded");getAudioStream().dispatch("bufferingEnded",{});expect(deps.mediaSourceController.endOfStream).toHaveBeenCalledOnceWith();expect(bufferingEndedSpy).toHaveBeenCalledOnceWith({});case 2:return _context291.a(2)}},_callee291)})));it("does not call endOfStream when not all streams are done",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee292(){var bufferingEndedSpy;return _regenerator().w(function(_context292){while(1)switch(_context292.n){case 0:track=createTrack();_context292.n=1;return awaitContentTypes();case 1:getAudioStream().bufferingEnded=false;getVideoStream().bufferingEnded=true;bufferingEndedSpy=createEventSpy(track,"bufferingEnded");getVideoStream().dispatch("bufferingEnded",{});expect(deps.mediaSourceController.endOfStream).not.toHaveBeenCalled();expect(bufferingEndedSpy).not.toHaveBeenCalled();case 2:return _context292.a(2)}},_callee292)})))});describe("dispose",function(){it("clears streams and calls super dispose",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee293(){var audioStream,videoStream;return _regenerator().w(function(_context293){while(1)switch(_context293.n){case 0:track=createTrack();_context293.n=1;return awaitContentTypes();case 1:audioStream=getAudioStream();videoStream=getVideoStream();track.dispose();expect(audioStream.dispose).toHaveBeenCalledOnceWith();expect(videoStream.dispose).toHaveBeenCalledOnceWith();expect(track.disposed).toBe(true);case 2:return _context293.a(2)}},_callee293)})))});describe("when contentTypesValue promise rejects",function(){it("emits an error event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee294(){var expectedError,errorSpy;return _regenerator().w(function(_context294){while(1)switch(_context294.n){case 0:expectedError=new Error("contentTypes failed");deps.contentTypesValue.value=Promise.reject(expectedError);track=createTrack();errorSpy=createEventSpy(track,"error");_context294.n=1;return flushPromises();case 1:expect(errorSpy).toHaveBeenCalledOnceWith({target:track,error:expectedError});case 2:return _context294.a(2)}},_callee294)})))});describe("when contentTypesValue changes",function(){describe("and content types are not equal",function(){it("clears and recreates the streams",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee295(){var streamsBeforeChange,_iterator88,_step88,stream;return _regenerator().w(function(_context295){while(1)switch(_context295.n){case 0:track=createTrack();_context295.n=1;return awaitContentTypes();case 1:streamsBeforeChange=getAllStreams();expect(streamsBeforeChange.length).toBe(2);deps.contentStreamFactory.calls.reset();deps.contentTypesValue.value=Promise.resolve(/* @__PURE__ */new Set(["audio"]));_context295.n=2;return awaitContentTypes();case 2:_iterator88=_createForOfIteratorHelper(streamsBeforeChange);try{for(_iterator88.s();!(_step88=_iterator88.n()).done;){stream=_step88.value;expect(stream.dispose).toHaveBeenCalled()}}catch(err){_iterator88.e(err)}finally{_iterator88.f()}expect(getAllStreams().length).toBe(1);expect(getAllStreams()[0].contentType).toBe("audio");case 3:return _context295.a(2)}},_callee295)})));it("emits contentTypesChange event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee296(){var contentTypesChangeSpy,previousContentTypes;return _regenerator().w(function(_context296){while(1)switch(_context296.n){case 0:track=createTrack();contentTypesChangeSpy=createEventSpy(track,"contentTypesChange");_context296.n=1;return awaitContentTypes();case 1:contentTypesChangeSpy.calls.reset();previousContentTypes=track.contentTypes;deps.contentTypesValue.value=Promise.resolve(/* @__PURE__ */new Set(["audio"]));_context296.n=2;return awaitContentTypes();case 2:expect(contentTypesChangeSpy).toHaveBeenCalledOnceWith({previous:previousContentTypes,current:/* @__PURE__ */new Set(["audio"])});case 3:return _context296.a(2)}},_callee296)})))});describe("and content types are equal",function(){it("does not recreate the streams",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee297(){var streamsBeforeChange,_iterator89,_step89,stream;return _regenerator().w(function(_context297){while(1)switch(_context297.n){case 0:track=createTrack();_context297.n=1;return awaitContentTypes();case 1:streamsBeforeChange=getAllStreams();expect(streamsBeforeChange.length).toBe(2);deps.contentStreamFactory.calls.reset();deps.contentTypesValue.value=Promise.resolve(/* @__PURE__ */new Set(["video","audio"])// order does not matter
|
|
1897
|
+
);_context297.n=2;return awaitContentTypes();case 2:_iterator89=_createForOfIteratorHelper(streamsBeforeChange);try{for(_iterator89.s();!(_step89=_iterator89.n()).done;){stream=_step89.value;expect(stream.dispose).not.toHaveBeenCalled()}}catch(err){_iterator89.e(err)}finally{_iterator89.f()}expect(deps.contentStreamFactory).not.toHaveBeenCalled();case 3:return _context297.a(2)}},_callee297)})))})});describe("stream creation after preload/activate",function(){it("calls preload on new streams when lastPreloadOptions exists",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee298(){return _regenerator().w(function(_context298){while(1)switch(_context298.n){case 0:track=createTrack();track.preload({prefetchPriority:5},{startTime:10});_context298.n=1;return awaitContentTypes();case 1:expect(getAudioStream().preload).toHaveBeenCalledWith({prefetchPriority:5,startTime:10});expect(getVideoStream().preload).toHaveBeenCalledWith({prefetchPriority:5,startTime:10});case 2:return _context298.a(2)}},_callee298)})));it("calls activate on new streams when activateOptions exists",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee299(){return _regenerator().w(function(_context299){while(1)switch(_context299.n){case 0:track=createTrack();track.activate({startTime:15});_context299.n=1;return awaitContentTypes();case 1:expect(getAudioStream().activate).toHaveBeenCalledWith({startTime:15});expect(getVideoStream().activate).toHaveBeenCalledWith({startTime:15});case 2:return _context299.a(2)}},_callee299)})))});describe("qualities",function(){var qualityMetadata=__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{contentType:"audio",qualityId:"q1"});var qualityMetadata2=__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{contentType:"audio",qualityId:"q2"});function setTimeline(timeline){;deps.mediaTimeline=data(Promise.resolve(timeline));deps.mediaTimelineTransformed=data(Promise.resolve(timeline))}it("returns null when timeline has no periods",function(){track=createTrack();expect(track.qualities).toBeNull();expect(track.qualitiesUnfiltered).toBeNull()});it("exposes qualities from the current period",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee300(){return _regenerator().w(function(_context300){while(1)switch(_context300.n){case 0:setTimeline({periods:[{startTime:0,endTime:100,qualities:[{metadata:qualityMetadata,getSegment:function getSegment(){return Promise.resolve(null)}}]}],minBufferTime:2,getDuration:function getDuration(){return Promise.resolve(Infinity)}});track=createTrack();_context300.n=1;return flushPromises();case 1:expect(track.qualities).toEqual([qualityMetadata]);expect(track.qualitiesUnfiltered).toEqual([qualityMetadata]);case 2:return _context300.a(2)}},_callee300)})));it("dispatches qualitiesChange event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee301(){var spy;return _regenerator().w(function(_context301){while(1)switch(_context301.n){case 0:setTimeline({periods:[{startTime:0,endTime:100,qualities:[{metadata:qualityMetadata,getSegment:function getSegment(){return Promise.resolve(null)}}]}],minBufferTime:2,getDuration:function getDuration(){return Promise.resolve(Infinity)}});track=createTrack();spy=createEventSpy(track,"qualitiesChange");_context301.n=1;return flushPromises();case 1:expect(spy).toHaveBeenCalledOnceWith({previous:[],current:[qualityMetadata]});case 2:return _context301.a(2)}},_callee301)})));it("updates qualities on period change via timeUpdate",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee302(){var timeline;return _regenerator().w(function(_context302){while(1)switch(_context302.n){case 0:timeline={periods:[{startTime:0,endTime:50,qualities:[{metadata:qualityMetadata,getSegment:function getSegment(){return Promise.resolve(null)}}]},{startTime:50,endTime:100,qualities:[{metadata:qualityMetadata2,getSegment:function getSegment(){return Promise.resolve(null)}}]}],minBufferTime:2,getDuration:function getDuration(){return Promise.resolve(Infinity)}};setTimeline(timeline);track=createTrack();_context302.n=1;return flushPromises();case 1:expect(track.qualities).toEqual([qualityMetadata]);track.activate({});_context302.n=2;return flushPromises();case 2:deps.playbackController.currentTime=55;deps.playbackController.dispatch("timeUpdate",{previous:0,current:55});_context302.n=3;return flushPromises();case 3:expect(track.qualities).toEqual([qualityMetadata2]);case 4:return _context302.a(2)}},_callee302)})));it("skips update when period has not changed",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee303(){var spy;return _regenerator().w(function(_context303){while(1)switch(_context303.n){case 0:setTimeline({periods:[{startTime:0,endTime:100,qualities:[{metadata:qualityMetadata,getSegment:function getSegment(){return Promise.resolve(null)}}]}],minBufferTime:2,getDuration:function getDuration(){return Promise.resolve(Infinity)}});track=createTrack();_context303.n=1;return flushPromises();case 1:track.activate({});_context303.n=2;return flushPromises();case 2:spy=createEventSpy(track,"qualitiesChange");deps.playbackController.currentTime=10;deps.playbackController.dispatch("timeUpdate",{previous:0,current:10});_context303.n=3;return flushPromises();case 3:expect(spy).not.toHaveBeenCalled();case 4:return _context303.a(2)}},_callee303)})))})});// test/unit/streaming/MediaTimeline.test.ts
|
|
1898
1898
|
describe("getMediaPeriodAtTime",function(){var period1={startTime:0,endTime:10,qualities:[]};var period2={startTime:10,endTime:20,qualities:[]};var period3={startTime:20,endTime:30,qualities:[]};var timeline={periods:[period1,period2,period3],minBufferTime:2,getDuration:function getDuration(){return Promise.resolve(30)}};it("returns the first period for time 0",function(){expect(getMediaPeriodAtTime(timeline,0)).toBe(period1)});it("returns the first period for time within range",function(){expect(getMediaPeriodAtTime(timeline,5)).toBe(period1)});it("returns the second period at the boundary",function(){expect(getMediaPeriodAtTime(timeline,10)).toBe(period2)});it("returns the third period",function(){expect(getMediaPeriodAtTime(timeline,25)).toBe(period3)});it("returns null for time past the last period",function(){expect(getMediaPeriodAtTime(timeline,30)).toBeNull()});it("returns null for negative time",function(){expect(getMediaPeriodAtTime(timeline,-1)).toBeNull()});it("returns null for empty timeline",function(){var empty={periods:[],minBufferTime:0,getDuration:function getDuration(){return Promise.resolve(0)}};expect(getMediaPeriodAtTime(empty,5)).toBeNull()})});// test/unit/streaming/MediaQualityMetadata.test.ts
|
|
1899
1899
|
describe("drmProtectionValidator",function(){it("validates a complete DrmProtection",function(){expect(drmProtectionValidator.isValid({keySystem:"com.widevine.alpha"/* WIDEVINE */,pssh:"abc",pro:"def"})).toBeTrue()});it("allows optional pssh and pro to be omitted",function(){expect(drmProtectionValidator.isValid({keySystem:"com.apple.fps.1_0"/* FAIR_PLAY_1_0 */})).toBeTrue()});it("allows optional pssh and pro to be null",function(){expect(drmProtectionValidator.isValid({keySystem:"com.widevine.alpha"/* WIDEVINE */,pssh:null,pro:null})).toBeTrue()});it("allows optional pssh and pro to be undefined",function(){expect(drmProtectionValidator.isValid({keySystem:"com.widevine.alpha"/* WIDEVINE */,pssh:void 0,pro:void 0})).toBeTrue()});it("rejects missing keySystem",function(){expect(drmProtectionValidator.isValid({})).toBeFalse()});it("rejects invalid keySystem",function(){expect(drmProtectionValidator.isValid({keySystem:123})).toBeFalse()})});// test/unit/streaming/DescriptorRecord.test.ts
|
|
1900
1900
|
describe("getDescriptorValue",function(){it("returns null when the URI does not exist in the record",function(){expect(getDescriptorValue({},"nonexistent-uri")).toBeNull()});it("returns null when no descriptors match the given id",function(){var record2={"test-uri":[{id:"1",value:"value1"},{id:"2",value:"value2"}]};expect(getDescriptorValue(record2,"test-uri","nonexistent-id")).toBeNull()});it("returns the value of the first descriptor when id is not provided",function(){var record2={"test-uri":[{id:"1",value:"value1"},{id:"2",value:"value2"}]};expect(getDescriptorValue(record2,"test-uri")).toBe("value1")});it("returns the value of the descriptor that matches the given id",function(){var record2={"test-uri":[{id:"1",value:"value1"},{id:"2",value:"value2"}]};expect(getDescriptorValue(record2,"test-uri","2")).toBe("value2")})});// test/unit/streaming/ContentStream.test.ts
|
|
@@ -1902,27 +1902,27 @@ describe("ContentStreamImpl",function(){var _segmentController;var _bufferingCon
|
|
|
1902
1902
|
var objectContaining13=jasmine.objectContaining;describe("segment utils",function(){var segments=[{timestampOffset:0,startTime:0,endTime:10},{timestampOffset:10,startTime:10,endTime:20},{timestampOffset:20,startTime:20,endTime:30},{timestampOffset:30,startTime:30,endTime:40}];describe("getSegmentAtTime",function(){it("returns the segment at the given time",function(){expect(getSegmentAtTime(0,segments)).toEqual(objectContaining13({startTime:0}));expect(getSegmentAtTime(10,segments)).toEqual(objectContaining13({startTime:10}));expect(getSegmentAtTime(19.99,segments)).toEqual(objectContaining13({startTime:10}));expect(getSegmentAtTime(20,segments)).toEqual(objectContaining13({startTime:20}));expect(getSegmentAtTime(25,segments)).toEqual(objectContaining13({startTime:20}));expect(getSegmentAtTime(30,segments)).toEqual(objectContaining13({startTime:30}));expect(getSegmentAtTime(39.999,segments)).toEqual(objectContaining13({startTime:30}))});describe("when no segments span the provided time",function(){it("returns null",function(){expect(getSegmentAtTime(0,[])).toBeNull();expect(getSegmentAtTime(10,[])).toBeNull();expect(getSegmentAtTime(100,segments)).toBeNull();expect(getSegmentAtTime(-1,segments)).toBeNull();expect(getSegmentAtTime(40,segments)).toBeNull()})});describe("with a forward-snap affordance",function(){it("snaps forward to the next segment when time is within affordance of its start",function(){expect(getSegmentAtTime(9.9,segments,0.2)).toEqual(objectContaining13({startTime:10}));expect(getSegmentAtTime(19.85,segments,0.2)).toEqual(objectContaining13({startTime:20}))});it("does not snap forward when the gap exceeds affordance",function(){expect(getSegmentAtTime(9.5,segments,0.2)).toEqual(objectContaining13({startTime:0}))});it("returns the next segment even when the previous one still covers time",function(){expect(getSegmentAtTime(9.9,segments,0.2)).toEqual(objectContaining13({startTime:10}))});it("snaps forward into the first segment when time is just before 0",function(){expect(getSegmentAtTime(-0.1,segments,0.2)).toEqual(objectContaining13({startTime:0}))});it("returns null when the snapped lookup lands past the last segment",function(){expect(getSegmentAtTime(40,segments,0.2)).toBeNull();expect(getSegmentAtTime(39.9,segments,0.2)).toEqual(objectContaining13({startTime:30}))});it("still gates on the original time against endTime",function(){expect(getSegmentAtTime(10,segments,0)).toEqual(objectContaining13({startTime:10}));var oneSegment=[segments[0]];expect(getSegmentAtTime(10,oneSegment,0.2)).toBeNull()})})});describe("getSegmentInsertionIndexAtTime",function(){it("returns the segment insertion index at the given time",function(){expect(getSegmentInsertionIndexAtTime(0,[])).toBe(0);expect(getSegmentInsertionIndexAtTime(-10,segments)).toBe(0);expect(getSegmentInsertionIndexAtTime(0,segments)).toBe(1);expect(getSegmentInsertionIndexAtTime(10,segments)).toBe(2);expect(getSegmentInsertionIndexAtTime(19.99,segments)).toBe(2);expect(getSegmentInsertionIndexAtTime(20,segments)).toBe(3);expect(getSegmentInsertionIndexAtTime(30,segments)).toBe(4);expect(getSegmentInsertionIndexAtTime(40,segments)).toBe(4);expect(getSegmentInsertionIndexAtTime(50,segments)).toBe(4)})})});// test/unit/streaming/loudness/LoudnessNormalizationControllerImpl.test.ts
|
|
1903
1903
|
describe("LoudnessNormalizationControllerImpl",function(){var controller;var options;beforeEach(function(){options=data(defaultLoudnessNormalizationControllerImplOptions);controller=new LoudnessNormalizationControllerImpl({options:options})});describe("when calculating gain values",function(){it("gain is calculated correctly for tracks louder than target",function(){controller.setTrackLoudness(-9);options.value={enabled:true,targetLufs:-14,maxGainDb:10};var gain=controller.gain;expect(gain).toBeCloseTo(0.316,3)});it("gain is set to 1.0 when track is quieter than target",function(){controller.setTrackLoudness(-16);options.value={enabled:true,targetLufs:-14,maxGainDb:10};var gain=controller.gain;expect(gain).toBeCloseTo(1,3)});it("gain is limited by maxGainDb setting",function(){controller.setTrackLoudness(-4);options.value={enabled:true,targetLufs:-14,maxGainDb:6// Limit to 6dB reduction
|
|
1904
1904
|
};var gain=controller.gain;expect(gain).toBeCloseTo(0.251,3)});it("gain is set to 1.0 when loudness normalization is disabled",function(){controller.setTrackLoudness(-9);options.value={enabled:false,targetLufs:-14,maxGainDb:10};var gain=controller.gain;expect(gain).toBe(1)});it("gain is set to 1.0 when track loudness is null",function(){controller.setTrackLoudness(null);options.value={enabled:true,targetLufs:-14,maxGainDb:10};var gain=controller.gain;expect(gain).toBe(1)})});describe("when handling change events",function(){it("change event is emitted when gain changes",function(){var changeListener=jasmine.createSpy("changeListener");controller.on("change",changeListener);controller.setTrackLoudness(-9);options.value={enabled:true,targetLufs:-14,maxGainDb:10};expect(changeListener).toHaveBeenCalled()});it("change event is not emitted when gain remains the same",function(){controller.setTrackLoudness(-9);options.value={enabled:true,targetLufs:-14,maxGainDb:10};var changeListener=jasmine.createSpy("changeListener");controller.on("change",changeListener);options.value={enabled:true,targetLufs:-14,maxGainDb:10};expect(changeListener).not.toHaveBeenCalled()});it("gain is refreshed when track loudness is set",function(){options.value={enabled:true,targetLufs:-14,maxGainDb:10};expect(controller.gain).toBe(1);controller.setTrackLoudness(-9);expect(controller.gain).toBeCloseTo(0.316,3)})})});// test/unit/streaming/buffering/SourceBufferController.test.ts
|
|
1905
|
-
var createSpy25=jasmine.createSpy;var objectContaining14=jasmine.objectContaining;describe("SourceBufferControllerImpl",function(){useMockLogger();var data2=new ArrayBuffer(0);var mimeType1="video/mp4; codecs=\"avc1\"";var mimeType2="audio/mp4; codecs=\"flac\"";var controller;var sourceBuffer;var mediaSourceController;function getMockSourceBufferRef(){return mediaSourceController.createSourceBuffer.calls.mostRecent().returnValue}function updateDone(){return _updateDone.apply(this,arguments)}function _updateDone(){_updateDone=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee335(){return _regenerator().w(function(_context335){while(1)switch(_context335.n){case 0:sourceBuffer.updating=false;sourceBuffer.dispatchEvent(mockEvent("update"));_context335.n=1;return flushPromises();case 1:return _context335.a(2)}},_callee335)}));return _updateDone.apply(this,arguments)}function updateAbort(){return _updateAbort.apply(this,arguments)}function _updateAbort(){_updateAbort=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee336(){return _regenerator().w(function(_context336){while(1)switch(_context336.n){case 0:sourceBuffer.updating=false;sourceBuffer.dispatchEvent(mockEvent("abort"));_context336.n=1;return flushPromises();case 1:return _context336.a(2)}},_callee336)}));return _updateAbort.apply(this,arguments)}function updateError(){return _updateError.apply(this,arguments)}function _updateError(){_updateError=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee337(){return _regenerator().w(function(_context337){while(1)switch(_context337.n){case 0:sourceBuffer.updating=false;sourceBuffer.dispatchEvent(mockEvent("error"));_context337.n=1;return flushPromises();case 1:return _context337.a(2)}},_callee337)}));return _updateError.apply(this,arguments)}beforeEach(function(){sourceBuffer=null;mediaSourceController=new MockMediaSourceController;mediaSourceController.readyToAppend=true;mediaSourceController.createSourceBuffer.and.callFake(function(){sourceBuffer=new MockSourceBuffer;sourceBuffer.buffered=new MockTimeRanges;implementEventFakes(sourceBuffer);var appendWindowStart=0;var appendWindowEnd=Number.POSITIVE_INFINITY;var timestampOffset=0;function assertValidWindow(){expect(appendWindowStart).withContext("appendWindowStart").toBeLessThanOrEqual(appendWindowEnd)}Object.defineProperty(sourceBuffer,"timestampOffset",{get:function get(){return timestampOffset},set:function set(value){timestampOffset=value}});Object.defineProperty(sourceBuffer,"appendWindowStart",{get:function get(){return appendWindowStart},set:function set(value){appendWindowStart=value;assertValidWindow()}});Object.defineProperty(sourceBuffer,"appendWindowEnd",{get:function get(){return appendWindowEnd},set:function set(value){appendWindowEnd=value;assertValidWindow()}});return{get value(){return sourceBuffer},dispose:createSpy25("dispose").and.callFake(function(){sourceBuffer=null})}});controller=new SourceBufferControllerImpl({mediaSourceController:mediaSourceController},"audio")});afterEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee304(){return _regenerator().w(function(_context304){while(1)switch(_context304.n){case 0:_context304.n=1;return flushPromises();case 1:expect(controller.isBusy()).withContext("isBusy").toBeFalse();case 2:return _context304.a(2)}},_callee304)})));describe("enqueue",function(){it("enqueues a task to execute when the source buffer is next idle",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee305(){var task,_t41;return _regenerator().w(function(_context305){while(1)switch(_context305.n){case 0:_t41=expect;_context305.n=1;return controller.enqueue(function(){return Promise.resolve(3)});case 1:_t41(_context305.v).toBe(3);_context305.n=2;return controller.appendInit(data2,mimeType1);case 2:sourceBuffer.updating=true;task=controller.enqueue(function(){return Promise.resolve(4)});_context305.n=3;return expectAsync(task).toBePending();case 3:_context305.n=4;return updateDone();case 4:_context305.n=5;return expectAsync(task).toBeResolvedTo(4);case 5:return _context305.a(2)}},_callee305)})))});describe("appendInit",function(){describe("when first called",function(){it("creates a new backing source buffer",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee306(){return _regenerator().w(function(_context306){while(1)switch(_context306.n){case 0:_context306.n=1;return controller.appendInit(data2,mimeType1);case 1:expect(sourceBuffer).not.toBeNull();expect(mediaSourceController.createSourceBuffer).toHaveBeenCalledOnceWith("audio","video/mp4; codecs=\"avc1\"");expect(sourceBuffer.appendBuffer).toHaveBeenCalled();case 2:return _context306.a(2)}},_callee306)})));it("waits for mediaSourceController.readyToAppend before appending",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee307(){var appendPromise;return _regenerator().w(function(_context307){while(1)switch(_context307.n){case 0:mediaSourceController.readyToAppend=false;appendPromise=controller.appendInit(data2,mimeType1);expect(sourceBuffer).not.toBeNull();expect(sourceBuffer.appendBuffer).not.toHaveBeenCalled();_context307.n=1;return expectAsync(appendPromise).toBePending();case 1:mediaSourceController.readyToAppend=true;mediaSourceController.dispatch("readyToAppend",{});_context307.n=2;return expectAsync(appendPromise).toBeResolved();case 2:expect(sourceBuffer.appendBuffer).toHaveBeenCalledTimes(1);case 3:return _context307.a(2)}},_callee307)})));describe("then called again",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee308(){return _regenerator().w(function(_context308){while(1)switch(_context308.n){case 0:_context308.n=1;return controller.appendInit(data2,mimeType1);case 1:return _context308.a(2)}},_callee308)})));describe("when changeType is supported",function(){it("calls changeType with the new mime type",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee309(){var previousSourceBuffer;return _regenerator().w(function(_context309){while(1)switch(_context309.n){case 0:previousSourceBuffer=sourceBuffer;mediaSourceController.createSourceBuffer.calls.reset();_context309.n=1;return controller.appendInit(data2,mimeType2);case 1:expect(sourceBuffer).not.toBeNull();expect(mediaSourceController.createSourceBuffer).not.toHaveBeenCalled();expect(previousSourceBuffer).toBe(sourceBuffer);expect(sourceBuffer.changeType).toHaveBeenCalledOnceWith("audio/mp4; codecs=\"flac\"");case 2:return _context309.a(2)}},_callee309)})))});describe("when changeType is not supported",function(){beforeEach(function(){delete sourceBuffer.changeType});it("creates a new backing source buffer",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee310(){var previousSourceBuffer,previousSourceBufferRef;return _regenerator().w(function(_context310){while(1)switch(_context310.n){case 0:previousSourceBuffer=sourceBuffer;previousSourceBufferRef=getMockSourceBufferRef();mediaSourceController.createSourceBuffer.calls.reset();_context310.n=1;return controller.appendInit(data2,mimeType2);case 1:expect(previousSourceBufferRef.dispose).toHaveBeenCalledOnceWith();expect(sourceBuffer).not.toBeNull();expect(mediaSourceController.createSourceBuffer).toHaveBeenCalledOnceWith("audio","audio/mp4; codecs=\"flac\"");expect(previousSourceBuffer).not.toBe(sourceBuffer);case 2:return _context310.a(2)}},_callee310)})))})})})});describe("when append is called before appendInit",function(){it("throws a SourceBufferError with INTERNAL origin",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee311(){return _regenerator().w(function(_context311){while(1)switch(_context311.n){case 0:_context311.n=1;return expectAsync(controller.append(data2)).toBeRejectedWith(objectContaining14({message:"media segment provided before init segment",name:"SourceBufferError",origin:ErrorOrigin.INTERNAL}));case 1:return _context311.a(2)}},_callee311)})))});describe("setTimestampOffset",function(){describe("when initialized",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee312(){return _regenerator().w(function(_context312){while(1)switch(_context312.n){case 0:_context312.n=1;return controller.appendInit(data2,mimeType1);case 1:return _context312.a(2)}},_callee312)})));it("sets timestampOffset",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee313(){return _regenerator().w(function(_context313){while(1)switch(_context313.n){case 0:_context313.n=1;return controller.setTimestampOffset(5);case 1:expect(sourceBuffer.timestampOffset).toEqual(5);_context313.n=2;return controller.setTimestampOffset(6);case 2:expect(sourceBuffer.timestampOffset).toEqual(6);_context313.n=3;return controller.setTimestampOffset(6);case 3:_context313.n=4;return controller.setTimestampOffset(0);case 4:expect(sourceBuffer.timestampOffset).toBe(0);case 5:return _context313.a(2)}},_callee313)})))});describe("when not initialized",function(){it("rejects",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee314(){return _regenerator().w(function(_context314){while(1)switch(_context314.n){case 0:_context314.n=1;return expectAsync(controller.setTimestampOffset(0)).toBeRejectedWithError(IllegalStateError);case 1:return _context314.a(2)}},_callee314)})))})});describe("setAppendWindow",function(){describe("when initialized",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee315(){return _regenerator().w(function(_context315){while(1)switch(_context315.n){case 0:_context315.n=1;return controller.appendInit(data2,mimeType1);case 1:return _context315.a(2)}},_callee315)})));it("sets appendWindowStart and appendWindowEnd such that end is always greater than start",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee316(){return _regenerator().w(function(_context316){while(1)switch(_context316.n){case 0:_context316.n=1;return controller.setAppendWindow(20,30);case 1:expect(sourceBuffer.appendWindowStart).toEqual(20-APPEND_WINDOW_START_OFFSET);expect(sourceBuffer.appendWindowEnd).toEqual(30+APPEND_WINDOW_END_OFFSET);_context316.n=2;return controller.setAppendWindow(0,10);case 2:expect(sourceBuffer.appendWindowStart).toEqual(0);expect(sourceBuffer.appendWindowEnd).toEqual(10+APPEND_WINDOW_END_OFFSET);_context316.n=3;return controller.setAppendWindow(0,10);case 3:_context316.n=4;return controller.setAppendWindow();case 4:expect(sourceBuffer.appendWindowStart).toEqual(0);expect(sourceBuffer.appendWindowEnd).toEqual(Number.POSITIVE_INFINITY);case 5:return _context316.a(2)}},_callee316)})))});describe("when not initialized",function(){it("rejects",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee317(){return _regenerator().w(function(_context317){while(1)switch(_context317.n){case 0:_context317.n=1;return expectAsync(controller.setAppendWindow()).toBeRejectedWithError(IllegalStateError);case 1:return _context317.a(2)}},_callee317)})))})});describe("append",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee318(){return _regenerator().w(function(_context318){while(1)switch(_context318.n){case 0:_context318.n=1;return controller.appendInit(data2,mimeType1);case 1:return _context318.a(2)}},_callee318)})));it("appends media segments to the source buffer",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee319(){return _regenerator().w(function(_context319){while(1)switch(_context319.n){case 0:_context319.n=1;return controller.append(data2);case 1:expect(sourceBuffer.appendBuffer).toHaveBeenCalledWith(data2);expect(sourceBuffer.timestampOffset).toEqual(0);expect(sourceBuffer.appendWindowStart).toEqual(0);expect(sourceBuffer.appendWindowEnd).toEqual(Number.POSITIVE_INFINITY);case 2:return _context319.a(2)}},_callee319)})));it("enqueues append operation until source buffer is idle",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee320(){var appendPromise,appendPromise2;return _regenerator().w(function(_context320){while(1)switch(_context320.n){case 0:sourceBuffer.appendBuffer.and.callFake(function(){sourceBuffer.updating=true});appendPromise=controller.append(data2);appendPromise2=controller.append(data2);_context320.n=1;return expectAsync(appendPromise).toBePending();case 1:_context320.n=2;return flushPromises();case 2:_context320.n=3;return updateDone();case 3:_context320.n=4;return expectAsync(appendPromise).toBeResolved();case 4:_context320.n=5;return expectAsync(appendPromise2).toBePending();case 5:_context320.n=6;return updateDone();case 6:_context320.n=7;return expectAsync(appendPromise2).toBeResolved();case 7:return _context320.a(2)}},_callee320)})));describe("when update is aborted",function(){it("rejects append promise with an an AbortError",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee321(){var appendPromise;return _regenerator().w(function(_context321){while(1)switch(_context321.n){case 0:sourceBuffer.appendBuffer.and.callFake(function(){sourceBuffer.updating=true});appendPromise=controller.append(data2);_context321.n=1;return expectAsync(appendPromise).toBePending();case 1:_context321.n=2;return updateAbort();case 2:_context321.n=3;return expectAsync(appendPromise).toBeRejectedWith(new AbortError);case 3:return _context321.a(2)}},_callee321)})))});describe("when update errs",function(){it("rejects append promise with a SourceBufferError",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee322(){var appendPromise;return _regenerator().w(function(_context322){while(1)switch(_context322.n){case 0:sourceBuffer.appendBuffer.and.callFake(function(){sourceBuffer.updating=true});appendPromise=controller.append(data2);_context322.n=1;return expectAsync(appendPromise).toBePending();case 1:_context322.n=2;return updateError();case 2:_context322.n=3;return expectAsync(appendPromise).toBeRejectedWithError(SourceBufferError);case 3:return _context322.a(2)}},_callee322)})))})});describe("remove",function(){describe("when a backing source buffer has been created",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee323(){return _regenerator().w(function(_context323){while(1)switch(_context323.n){case 0:_context323.n=1;return controller.appendInit(data2,mimeType1);case 1:return _context323.a(2)}},_callee323)})));it("removes specified time range",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee324(){var removePromise;return _regenerator().w(function(_context324){while(1)switch(_context324.n){case 0:sourceBuffer.remove.and.callFake(function(){sourceBuffer.updating=true});removePromise=controller.remove(10,20);_context324.n=1;return flushPromises();case 1:_context324.n=2;return expectAsync(removePromise).toBePending();case 2:_context324.n=3;return updateDone();case 3:_context324.n=4;return expectAsync(removePromise).toBeResolved();case 4:expect(sourceBuffer.remove).toHaveBeenCalledWith(10,20);case 5:return _context324.a(2)}},_callee324)})));describe("when startTime is after endTime",function(){it("does not call remove on backing source buffer",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee325(){return _regenerator().w(function(_context325){while(1)switch(_context325.n){case 0:_context325.n=1;return controller.remove(20,10);case 1:expect(sourceBuffer.remove).not.toHaveBeenCalled();case 2:return _context325.a(2)}},_callee325)})))})});describe("when a backing source buffer has not been created",function(){it("does nothing",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee326(){return _regenerator().w(function(_context326){while(1)switch(_context326.n){case 0:_context326.n=1;return expectAsync(controller.remove(10,20)).toBeResolved();case 1:return _context326.a(2)}},_callee326)})))})});describe("clear",function(){describe("when a backing source buffer has been created",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee327(){return _regenerator().w(function(_context327){while(1)switch(_context327.n){case 0:_context327.n=1;return controller.appendInit(data2,mimeType1);case 1:return _context327.a(2)}},_callee327)})));it("clears all buffered data",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee328(){return _regenerator().w(function(_context328){while(1)switch(_context328.n){case 0:_context328.n=1;return controller.clear();case 1:expect(sourceBuffer.remove).toHaveBeenCalledWith(0,Number.POSITIVE_INFINITY);case 2:return _context328.a(2)}},_callee328)})))});describe("when a backing source buffer has not been created",function(){it("does nothing",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee329(){return _regenerator().w(function(_context329){while(1)switch(_context329.n){case 0:_context329.n=1;return expectAsync(controller.clear()).toBeResolved();case 1:return _context329.a(2)}},_callee329)})))})});describe("buffered",function(){describe("when a backing buffer has not been created",function(){it("returns empty ranges",function(){expect(controller.buffered).toBe(emptyRanges)})});describe("when a backing buffer has been created",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee330(){return _regenerator().w(function(_context330){while(1)switch(_context330.n){case 0:_context330.n=1;return controller.appendInit(data2,mimeType1);case 1:return _context330.a(2)}},_callee330)})));it("returns the backing buffer ranges",function(){sourceBuffer.buffered=new MockTimeRanges([[1,20],[30,40]]);expect(Array.from(controller.buffered)).toEqual([[1,20],[30,40]])});it("caches the buffered ranges until the next update",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee331(){var cachedRanges;return _regenerator().w(function(_context331){while(1)switch(_context331.n){case 0:sourceBuffer.buffered=new MockTimeRanges([[1,20],[30,40]]);cachedRanges=controller.buffered;_context331.n=1;return controller.remove(0,10);case 1:expect(controller.buffered).not.toBe(cachedRanges);cachedRanges=controller.buffered;_context331.n=2;return controller.append(data2);case 2:expect(controller.buffered).not.toBe(cachedRanges);case 3:return _context331.a(2)}},_callee331)})))})});describe("dispose",function(){describe("when source buffer is creating",function(){it("disposes the source buffer",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee332(){var appendPromise;return _regenerator().w(function(_context332){while(1)switch(_context332.n){case 0:appendPromise=controller.appendInit(data2,mimeType1);controller.dispose();_context332.n=1;return expectAsync(appendPromise).toBeRejected();case 1:expect(getMockSourceBufferRef().dispose).toHaveBeenCalledOnceWith();case 2:return _context332.a(2)}},_callee332)})));it("aborts awaiting readyToAppend and disposes the source buffer",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee333(){var appendPromise;return _regenerator().w(function(_context333){while(1)switch(_context333.n){case 0:mediaSourceController.readyToAppend=false;appendPromise=controller.appendInit(data2,mimeType1);controller.dispose();_context333.n=1;return expectAsync(appendPromise).toBeRejected();case 1:expect(getMockSourceBufferRef().dispose).toHaveBeenCalledOnceWith();case 2:return _context333.a(2)}},_callee333)})))});it("disposes the source buffer",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee334(){return _regenerator().w(function(_context334){while(1)switch(_context334.n){case 0:_context334.n=1;return controller.appendInit(data2,mimeType1);case 1:controller.dispose();expect(getMockSourceBufferRef().dispose).toHaveBeenCalledOnceWith();case 2:return _context334.a(2)}},_callee334)})))})});// test/unit/streaming/buffering/MediaSourceController.test.ts
|
|
1906
|
-
var createSpy26=jasmine.createSpy;var objectContaining15=jasmine.objectContaining;var VOD_DURATION=60;function createVodTimeline(){var duration=arguments.length>0&&arguments[0]!==undefined?arguments[0]:VOD_DURATION;return{periods:[],minBufferTime:0,getDuration:function getDuration(){return Promise.resolve(duration)}}}var liveTimeline={periods:[],minBufferTime:0,getDuration:function getDuration(){return Promise.resolve(Infinity)}};describe("MediaSourceControllerImpl",function(){var mediaSourceFactory;var contentTypesValue;var mediaTimelineTransformed;var mockMediaSource;var deps;var controller;function open(){mockMediaSource.readyState="open";mockMediaSource.dispatchEvent(mockEvent("sourceopen"))}beforeEach(function(){mockMediaSource=new MockMediaSource;implementEventFakes(mockMediaSource);mockMediaSource.addSourceBuffer.and.callFake(function(){return new MockSourceBuffer});mediaSourceFactory=createSpy26("mediaSourceFactory").and.returnValue(mockMediaSource);contentTypesValue=data(Promise.resolve(/* @__PURE__ */new Set(["audio"])));mediaTimelineTransformed=data(Promise.resolve(createVodTimeline()));deps={mediaSourceFactory:mediaSourceFactory,contentTypesValue:contentTypesValue,mediaTimelineTransformed:mediaTimelineTransformed};controller=new MediaSourceControllerImpl(deps)});afterEach(function(){controller.dispose()});describe("constructor",function(){it("creates media source using factory",function(){expect(mediaSourceFactory).toHaveBeenCalledOnceWith()})});describe("readyState",function(){it("returns media source ready state",function(){mockMediaSource.readyState="open";expect(controller.readyState).toBe("open")})});describe("duration",function(){it("sets media source duration after sourceopen",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1907
|
-
var any19=jasmine.any;var objectContaining16=jasmine.objectContaining;var INIT_DATA_SIZE=1;var SEGMENT_DURATION=10;var DURATION=100;var MIN_BUFFER_TIME=2;var MockQuotaExceededError=/*#__PURE__*/function(_Error2){function MockQuotaExceededError(){var _this147;_classCallCheck(this,MockQuotaExceededError);_this147=_callSuper(this,MockQuotaExceededError);_this147.name="QuotaExceededError";return _this147}_inherits(MockQuotaExceededError,_Error2);return _createClass(MockQuotaExceededError)}(/*#__PURE__*/_wrapNativeSuper(Error));var timeUpdateEvent2={previous:null,current:0};function createMockSegment(time){var size=arguments.length>1&&arguments[1]!==undefined?arguments[1]:1;var snapped=Math.max(0,time)+SEGMENT_START_AFFORDANCE;var startTime=floorToNearest(snapped,10);var endTime=Math.min(DURATION,startTime+SEGMENT_DURATION);return{initData:new ArrayBuffer(INIT_DATA_SIZE),data:new ArrayBuffer(size),timestampOffset:startTime,startTime:startTime,endTime:endTime,quality:__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:size/SEGMENT_DURATION,contentType:"audio"})}}describe("BufferingControllerImpl",function(){var mediaSourceController;var playbackController;var segmentController;var sourceBufferController;var bufferingController;var clock=useMockTime();var loggerRef2=useMockLogger();function nextPollImmediate(){return clock.tick(0,0)}function setSegmentList(sizes){var _segmentController$ge;var timeOffset=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;var contentType2=arguments.length>2&&arguments[2]!==undefined?arguments[2]:"audio";var segments=new Array(sizes.length);for(var i=0;i<sizes.length;i++){var segment=createMockSegment(i*10+timeOffset,sizes[i]);segment.quality.contentType=contentType2;segments[i]=Promise.resolve(segment)}(_segmentController$ge=segmentController.getSegment.and).returnValues.apply(_segmentController$ge,segments.concat([Promise.resolve(null)]));segmentController.dispatch("change",{})}function setTime(_x90){return _setTime.apply(this,arguments)}function _setTime(){_setTime=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1908
|
-
100-2*400/10);sourceBufferController.append.calls.reset();_context351.n=4;return setTime(0.99);case 4:expect(sourceBufferController.append).not.toHaveBeenCalled();_context351.n=5;return setTime(1);case 5:expect(sourceBufferController.append).toHaveBeenCalledTimes(1);sourceBufferController.append.calls.reset();case 6:return _context351.a(2)}},_callee351)})));describe("when min buffer exceeds max append size",function(){it("does not append",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee352(){return _regenerator().w(function(_context352){while(1)switch(_context352.n){case 0:setSegmentList([1e3]);_context352.n=1;return open();case 1:sourceBufferController.append.calls.reset();_context352.n=2;return setTime(0);case 2:expect(sourceBufferController.append).not.toHaveBeenCalled();_context352.n=3;return setTime(1);case 3:expect(sourceBufferController.append).toHaveBeenCalled();case 4:return _context352.a(2)}},_callee352)})))});describe("when contentType is video",function(){it("uses video settings",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee353(){return _regenerator().w(function(_context353){while(1)switch(_context353.n){case 0:setSegmentList([1200,1860,1380],0,"video");_context353.n=1;return open();case 1:expect(sourceBufferController.append).toHaveBeenCalledTimes(1);expect(getMostRecentAppendData().byteLength).toEqual(300);expect(bufferingController.getBufferedTime()).toBeCloseToWithin(2.5);sourceBufferController.append.calls.reset();_context353.n=2;return setTime(0.49);case 2:expect(sourceBufferController.append).not.toHaveBeenCalled();_context353.n=3;return setTime(0.5);case 3:expect(sourceBufferController.append).toHaveBeenCalledTimes(1);case 4:return _context353.a(2)}},_callee353)})))});describe("when contentType is undefined",function(){it("uses DEFAULT_MAX_APPEND_SIZE for max byte length",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee354(){return _regenerator().w(function(_context354){while(1)switch(_context354.n){case 0:setSegmentList([DEFAULT_MAX_APPEND_SIZE*2],0,"unknown");_context354.n=1;return open();case 1:expect(sourceBufferController.append).toHaveBeenCalledTimes(1);expect(getMostRecentAppendData().byteLength).toEqual(DEFAULT_MAX_APPEND_SIZE);case 2:return _context354.a(2)}},_callee354)})))})});describe("when buffer is filled",function(){beforeEach(function(){bufferingController=createBufferingController();bufferingController.activate()});it("does not append segments",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee355(){return _regenerator().w(function(_context355){while(1)switch(_context355.n){case 0:_context355.n=1;return open();case 1:expect(bufferingController.getBufferedTime()).toBe(10);segmentController.getSegment.calls.reset();_context355.n=2;return setTime(1);case 2:expect(segmentController.getSegment).not.toHaveBeenCalled();expect(bufferingController.getBufferedTime()).toBe(9);case 3:return _context355.a(2)}},_callee355)})))});describe("when seeking",function(){beforeEach(function(){bufferingController=createBufferingController();bufferingController.activate()});it("clears and sets a new offset",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee356(){return _regenerator().w(function(_context356){while(1)switch(_context356.n){case 0:_context356.n=1;return open();case 1:expect(bufferingController.getBufferedTime()).toBe(10);playbackController.currentTime=20;playbackController.dispatch("seeking",{});_context356.n=2;return nextPollImmediate();case 2:expect(sourceBufferController.buffered.ranges).toEqual([[20,30]]);case 3:return _context356.a(2)}},_callee356)})))});describe("when log level is verbose",function(){beforeEach(function(){bufferingController=createBufferingController();bufferingController.activate();loggerRef2.value.logLevel=0/* VERBOSE */});it("logs poll buffer messages",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee357(){return _regenerator().w(function(_context357){while(1)switch(_context357.n){case 0:_context357.n=1;return open();case 1:expect(loggerRef2.value.verbose).toHaveBeenCalledWith(bufferingController,"pollBuffer time: 0, bufferedTime: 0, busy: false, error: false, readyState: open");case 2:return _context357.a(2)}},_callee357)})))});describe("clear",function(){beforeEach(function(){bufferingController=createBufferingController({maxAppendSize:{audio:1e3,video:3e3},minBuffer:2});bufferingController.activate()});it("clears the source buffer",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee358(){return _regenerator().w(function(_context358){while(1)switch(_context358.n){case 0:_context358.n=1;return open();case 1:bufferingController.clear();_context358.n=2;return nextPollImmediate();case 2:expect(sourceBufferController.clear).toHaveBeenCalledOnceWith();sourceBufferController.clear.calls.reset();playbackController.currentTime=9;playbackController.dispatch("timeUpdate",timeUpdateEvent2);bufferingController.clear();bufferingController.deactivate();_context358.n=3;return nextPollImmediate();case 3:expect(sourceBufferController.clear).not.toHaveBeenCalled();case 4:return _context358.a(2)}},_callee358)})));it("aborts the current segment request",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee359(){var deferred,abort;return _regenerator().w(function(_context359){while(1)switch(_context359.n){case 0:deferred=new Deferred;segmentController.getSegment.and.returnValue(deferred);_context359.n=1;return open();case 1:abort=segmentController.getSegment.calls.mostRecent().args[1];bufferingController.clear();expect(abort==null?void 0:abort.aborted()).toBeTrue();case 2:return _context359.a(2)}},_callee359)})));it("emits a playbackQualityChange with null quality",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee360(){var changeSpy,previous;return _regenerator().w(function(_context360){while(1)switch(_context360.n){case 0:_context360.n=1;return open();case 1:playbackController.dispatch("timeUpdate",timeUpdateEvent2);_context360.n=2;return clock.tick(POLL_BUFFER_THROTTLE);case 2:changeSpy=createEventSpy(bufferingController,"playbackQualityChange");previous=bufferingController.playbackQuality;expect(previous).not.toBeNull();bufferingController.clear();_context360.n=3;return flushPromises();case 3:expect(changeSpy).toHaveBeenCalledOnceWith({previous:previous,current:null});expect(bufferingController.playbackQuality).toBeNull();case 4:return _context360.a(2)}},_callee360)})));it("resets bufferingEnded to false when in buffering ended state",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee361(){return _regenerator().w(function(_context361){while(1)switch(_context361.n){case 0:setSegmentList([]);_context361.n=1;return open();case 1:_context361.n=2;return nextPollImmediate();case 2:expect(bufferingController.bufferingEnded).toBeTrue();bufferingController.clear();_context361.n=3;return flushPromises();case 3:expect(bufferingController.bufferingEnded).toBeFalse();case 4:return _context361.a(2)}},_callee361)})));describe("when not active",function(){it("does nothing",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee362(){return _regenerator().w(function(_context362){while(1)switch(_context362.n){case 0:_context362.n=1;return open();case 1:bufferingController.deactivate();bufferingController.clear();expect(sourceBufferController.clear).not.toHaveBeenCalled();case 2:return _context362.a(2)}},_callee362)})))})});describe("when decoderId changes",function(){beforeEach(function(){bufferingController=createBufferingController();bufferingController.activate()});it("re-initializes the decoder",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee363(){return _regenerator().w(function(_context363){while(1)switch(_context363.n){case 0:_context363.n=1;return open();case 1:expect(sourceBufferController.appendInit).toHaveBeenCalledTimes(1);sourceBufferController.appendInit.calls.reset();segmentController.getSegment.and.callFake(function(time){var mockSegment=createMockSegment(time);mockSegment.quality.decoderId="different";mockSegment.quality.mimeType="opus";return Promise.resolve(mockSegment)});playbackController.currentTime=9;playbackController.dispatch("seeking",{});_context363.n=2;return nextPollImmediate();case 2:expect(sourceBufferController.appendInit).toHaveBeenCalledOnceWith(any19(ArrayBuffer),"opus");case 3:return _context363.a(2)}},_callee363)})))});describe("when segment controller returns null",function(){beforeEach(function(){bufferingController=createBufferingController();bufferingController.activate()});it("ends the stream",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee364(){var endedSpy;return _regenerator().w(function(_context364){while(1)switch(_context364.n){case 0:setSegmentList([]);endedSpy=createEventSpy(bufferingController,"bufferingEnded");_context364.n=1;return open();case 1:_context364.n=2;return nextPollImmediate();case 2:expect(endedSpy).toHaveBeenCalledTimes(1);expect(bufferingController.bufferingQuality).toBeNull();expect(bufferingController.bufferingEnded).toBeTrue();expect(bufferingController.busy).toBeFalse();case 3:return _context364.a(2)}},_callee364)})));describe("then segment controller emits a change event",function(){it("reopens the stream",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee365(){return _regenerator().w(function(_context365){while(1)switch(_context365.n){case 0:setSegmentList([]);_context365.n=1;return open();case 1:_context365.n=2;return flushPromises();case 2:mediaSourceController.dispatch("sourceEnded",{});_context365.n=3;return flushPromises();case 3:segmentController.getSegment.calls.reset();mediaSourceController.readyState="ended";setSegmentList([1,1,1]);_context365.n=4;return nextPollImmediate();case 4:expect(segmentController.getSegment).toHaveBeenCalledTimes(1);case 5:return _context365.a(2)}},_callee365)})))})});describe("when append throws a QuotaExceededError",function(){afterEach(function(){clearSourceBufferQuota()});it("does not set to an erred state",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee366(){return _regenerator().w(function(_context366){while(1)switch(_context366.n){case 0:bufferingController=createBufferingController();bufferingController.activate();sourceBufferController.append.and.rejectWith(new MockQuotaExceededError);_context366.n=1;return open();case 1:expect(bufferingController.error).toBeNull();expect(loggerRef2.value.warn).toHaveBeenCalledTimes(1);case 2:return _context366.a(2)}},_callee366)})));it("sets the sourceBufferQuota for the current content type",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee367(){var _a3;return _regenerator().w(function(_context367){while(1)switch(_context367.n){case 0:setSegmentList(Array(20).fill(1),0,"video");bufferingController=createBufferingController({minBuffer:Number.MAX_VALUE,// Buffer all segments
|
|
1905
|
+
var createSpy25=jasmine.createSpy;var objectContaining14=jasmine.objectContaining;describe("SourceBufferControllerImpl",function(){useMockLogger();var data2=new ArrayBuffer(0);var mimeType1="video/mp4; codecs=\"avc1\"";var mimeType2="audio/mp4; codecs=\"flac\"";var controller;var sourceBuffer;var mediaSourceController;function getMockSourceBufferRef(){return mediaSourceController.createSourceBuffer.calls.mostRecent().returnValue}function updateDone(){return _updateDone.apply(this,arguments)}function _updateDone(){_updateDone=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee336(){return _regenerator().w(function(_context336){while(1)switch(_context336.n){case 0:sourceBuffer.updating=false;sourceBuffer.dispatchEvent(mockEvent("update"));_context336.n=1;return flushPromises();case 1:return _context336.a(2)}},_callee336)}));return _updateDone.apply(this,arguments)}function updateAbort(){return _updateAbort.apply(this,arguments)}function _updateAbort(){_updateAbort=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee337(){return _regenerator().w(function(_context337){while(1)switch(_context337.n){case 0:sourceBuffer.updating=false;sourceBuffer.dispatchEvent(mockEvent("abort"));_context337.n=1;return flushPromises();case 1:return _context337.a(2)}},_callee337)}));return _updateAbort.apply(this,arguments)}function updateError(){return _updateError.apply(this,arguments)}function _updateError(){_updateError=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee338(){return _regenerator().w(function(_context338){while(1)switch(_context338.n){case 0:sourceBuffer.updating=false;sourceBuffer.dispatchEvent(mockEvent("error"));_context338.n=1;return flushPromises();case 1:return _context338.a(2)}},_callee338)}));return _updateError.apply(this,arguments)}beforeEach(function(){sourceBuffer=null;mediaSourceController=new MockMediaSourceController;mediaSourceController.readyToAppend=true;mediaSourceController.createSourceBuffer.and.callFake(function(){sourceBuffer=new MockSourceBuffer;sourceBuffer.buffered=new MockTimeRanges;implementEventFakes(sourceBuffer);var appendWindowStart=0;var appendWindowEnd=Number.POSITIVE_INFINITY;var timestampOffset=0;function assertValidWindow(){expect(appendWindowStart).withContext("appendWindowStart").toBeLessThanOrEqual(appendWindowEnd)}Object.defineProperty(sourceBuffer,"timestampOffset",{get:function get(){return timestampOffset},set:function set(value){timestampOffset=value}});Object.defineProperty(sourceBuffer,"appendWindowStart",{get:function get(){return appendWindowStart},set:function set(value){appendWindowStart=value;assertValidWindow()}});Object.defineProperty(sourceBuffer,"appendWindowEnd",{get:function get(){return appendWindowEnd},set:function set(value){appendWindowEnd=value;assertValidWindow()}});return{get value(){return sourceBuffer},dispose:createSpy25("dispose").and.callFake(function(){sourceBuffer=null})}});controller=new SourceBufferControllerImpl({mediaSourceController:mediaSourceController},"audio")});afterEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee305(){return _regenerator().w(function(_context305){while(1)switch(_context305.n){case 0:_context305.n=1;return flushPromises();case 1:expect(controller.isBusy()).withContext("isBusy").toBeFalse();case 2:return _context305.a(2)}},_callee305)})));describe("enqueue",function(){it("enqueues a task to execute when the source buffer is next idle",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee306(){var task,_t41;return _regenerator().w(function(_context306){while(1)switch(_context306.n){case 0:_t41=expect;_context306.n=1;return controller.enqueue(function(){return Promise.resolve(3)});case 1:_t41(_context306.v).toBe(3);_context306.n=2;return controller.appendInit(data2,mimeType1);case 2:sourceBuffer.updating=true;task=controller.enqueue(function(){return Promise.resolve(4)});_context306.n=3;return expectAsync(task).toBePending();case 3:_context306.n=4;return updateDone();case 4:_context306.n=5;return expectAsync(task).toBeResolvedTo(4);case 5:return _context306.a(2)}},_callee306)})))});describe("appendInit",function(){describe("when first called",function(){it("creates a new backing source buffer",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee307(){return _regenerator().w(function(_context307){while(1)switch(_context307.n){case 0:_context307.n=1;return controller.appendInit(data2,mimeType1);case 1:expect(sourceBuffer).not.toBeNull();expect(mediaSourceController.createSourceBuffer).toHaveBeenCalledOnceWith("audio","video/mp4; codecs=\"avc1\"");expect(sourceBuffer.appendBuffer).toHaveBeenCalled();case 2:return _context307.a(2)}},_callee307)})));it("waits for mediaSourceController.readyToAppend before appending",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee308(){var appendPromise;return _regenerator().w(function(_context308){while(1)switch(_context308.n){case 0:mediaSourceController.readyToAppend=false;appendPromise=controller.appendInit(data2,mimeType1);expect(sourceBuffer).not.toBeNull();expect(sourceBuffer.appendBuffer).not.toHaveBeenCalled();_context308.n=1;return expectAsync(appendPromise).toBePending();case 1:mediaSourceController.readyToAppend=true;mediaSourceController.dispatch("readyToAppend",{});_context308.n=2;return expectAsync(appendPromise).toBeResolved();case 2:expect(sourceBuffer.appendBuffer).toHaveBeenCalledTimes(1);case 3:return _context308.a(2)}},_callee308)})));describe("then called again",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee309(){return _regenerator().w(function(_context309){while(1)switch(_context309.n){case 0:_context309.n=1;return controller.appendInit(data2,mimeType1);case 1:return _context309.a(2)}},_callee309)})));describe("when changeType is supported",function(){it("calls changeType with the new mime type",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee310(){var previousSourceBuffer;return _regenerator().w(function(_context310){while(1)switch(_context310.n){case 0:previousSourceBuffer=sourceBuffer;mediaSourceController.createSourceBuffer.calls.reset();_context310.n=1;return controller.appendInit(data2,mimeType2);case 1:expect(sourceBuffer).not.toBeNull();expect(mediaSourceController.createSourceBuffer).not.toHaveBeenCalled();expect(previousSourceBuffer).toBe(sourceBuffer);expect(sourceBuffer.changeType).toHaveBeenCalledOnceWith("audio/mp4; codecs=\"flac\"");case 2:return _context310.a(2)}},_callee310)})))});describe("when changeType is not supported",function(){beforeEach(function(){delete sourceBuffer.changeType});it("creates a new backing source buffer",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee311(){var previousSourceBuffer,previousSourceBufferRef;return _regenerator().w(function(_context311){while(1)switch(_context311.n){case 0:previousSourceBuffer=sourceBuffer;previousSourceBufferRef=getMockSourceBufferRef();mediaSourceController.createSourceBuffer.calls.reset();_context311.n=1;return controller.appendInit(data2,mimeType2);case 1:expect(previousSourceBufferRef.dispose).toHaveBeenCalledOnceWith();expect(sourceBuffer).not.toBeNull();expect(mediaSourceController.createSourceBuffer).toHaveBeenCalledOnceWith("audio","audio/mp4; codecs=\"flac\"");expect(previousSourceBuffer).not.toBe(sourceBuffer);case 2:return _context311.a(2)}},_callee311)})))})})})});describe("when append is called before appendInit",function(){it("throws a SourceBufferError with INTERNAL origin",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee312(){return _regenerator().w(function(_context312){while(1)switch(_context312.n){case 0:_context312.n=1;return expectAsync(controller.append(data2)).toBeRejectedWith(objectContaining14({message:"media segment provided before init segment",name:"SourceBufferError",origin:ErrorOrigin.INTERNAL}));case 1:return _context312.a(2)}},_callee312)})))});describe("setTimestampOffset",function(){describe("when initialized",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee313(){return _regenerator().w(function(_context313){while(1)switch(_context313.n){case 0:_context313.n=1;return controller.appendInit(data2,mimeType1);case 1:return _context313.a(2)}},_callee313)})));it("sets timestampOffset",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee314(){return _regenerator().w(function(_context314){while(1)switch(_context314.n){case 0:_context314.n=1;return controller.setTimestampOffset(5);case 1:expect(sourceBuffer.timestampOffset).toEqual(5);_context314.n=2;return controller.setTimestampOffset(6);case 2:expect(sourceBuffer.timestampOffset).toEqual(6);_context314.n=3;return controller.setTimestampOffset(6);case 3:_context314.n=4;return controller.setTimestampOffset(0);case 4:expect(sourceBuffer.timestampOffset).toBe(0);case 5:return _context314.a(2)}},_callee314)})))});describe("when not initialized",function(){it("rejects",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee315(){return _regenerator().w(function(_context315){while(1)switch(_context315.n){case 0:_context315.n=1;return expectAsync(controller.setTimestampOffset(0)).toBeRejectedWithError(IllegalStateError);case 1:return _context315.a(2)}},_callee315)})))})});describe("setAppendWindow",function(){describe("when initialized",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee316(){return _regenerator().w(function(_context316){while(1)switch(_context316.n){case 0:_context316.n=1;return controller.appendInit(data2,mimeType1);case 1:return _context316.a(2)}},_callee316)})));it("sets appendWindowStart and appendWindowEnd such that end is always greater than start",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee317(){return _regenerator().w(function(_context317){while(1)switch(_context317.n){case 0:_context317.n=1;return controller.setAppendWindow(20,30);case 1:expect(sourceBuffer.appendWindowStart).toEqual(20-APPEND_WINDOW_START_OFFSET);expect(sourceBuffer.appendWindowEnd).toEqual(30+APPEND_WINDOW_END_OFFSET);_context317.n=2;return controller.setAppendWindow(0,10);case 2:expect(sourceBuffer.appendWindowStart).toEqual(0);expect(sourceBuffer.appendWindowEnd).toEqual(10+APPEND_WINDOW_END_OFFSET);_context317.n=3;return controller.setAppendWindow(0,10);case 3:_context317.n=4;return controller.setAppendWindow();case 4:expect(sourceBuffer.appendWindowStart).toEqual(0);expect(sourceBuffer.appendWindowEnd).toEqual(Number.POSITIVE_INFINITY);case 5:return _context317.a(2)}},_callee317)})))});describe("when not initialized",function(){it("rejects",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee318(){return _regenerator().w(function(_context318){while(1)switch(_context318.n){case 0:_context318.n=1;return expectAsync(controller.setAppendWindow()).toBeRejectedWithError(IllegalStateError);case 1:return _context318.a(2)}},_callee318)})))})});describe("append",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee319(){return _regenerator().w(function(_context319){while(1)switch(_context319.n){case 0:_context319.n=1;return controller.appendInit(data2,mimeType1);case 1:return _context319.a(2)}},_callee319)})));it("appends media segments to the source buffer",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee320(){return _regenerator().w(function(_context320){while(1)switch(_context320.n){case 0:_context320.n=1;return controller.append(data2);case 1:expect(sourceBuffer.appendBuffer).toHaveBeenCalledWith(data2);expect(sourceBuffer.timestampOffset).toEqual(0);expect(sourceBuffer.appendWindowStart).toEqual(0);expect(sourceBuffer.appendWindowEnd).toEqual(Number.POSITIVE_INFINITY);case 2:return _context320.a(2)}},_callee320)})));it("enqueues append operation until source buffer is idle",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee321(){var appendPromise,appendPromise2;return _regenerator().w(function(_context321){while(1)switch(_context321.n){case 0:sourceBuffer.appendBuffer.and.callFake(function(){sourceBuffer.updating=true});appendPromise=controller.append(data2);appendPromise2=controller.append(data2);_context321.n=1;return expectAsync(appendPromise).toBePending();case 1:_context321.n=2;return flushPromises();case 2:_context321.n=3;return updateDone();case 3:_context321.n=4;return expectAsync(appendPromise).toBeResolved();case 4:_context321.n=5;return expectAsync(appendPromise2).toBePending();case 5:_context321.n=6;return updateDone();case 6:_context321.n=7;return expectAsync(appendPromise2).toBeResolved();case 7:return _context321.a(2)}},_callee321)})));describe("when update is aborted",function(){it("rejects append promise with an an AbortError",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee322(){var appendPromise;return _regenerator().w(function(_context322){while(1)switch(_context322.n){case 0:sourceBuffer.appendBuffer.and.callFake(function(){sourceBuffer.updating=true});appendPromise=controller.append(data2);_context322.n=1;return expectAsync(appendPromise).toBePending();case 1:_context322.n=2;return updateAbort();case 2:_context322.n=3;return expectAsync(appendPromise).toBeRejectedWith(new AbortError);case 3:return _context322.a(2)}},_callee322)})))});describe("when update errs",function(){it("rejects append promise with a SourceBufferError",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee323(){var appendPromise;return _regenerator().w(function(_context323){while(1)switch(_context323.n){case 0:sourceBuffer.appendBuffer.and.callFake(function(){sourceBuffer.updating=true});appendPromise=controller.append(data2);_context323.n=1;return expectAsync(appendPromise).toBePending();case 1:_context323.n=2;return updateError();case 2:_context323.n=3;return expectAsync(appendPromise).toBeRejectedWithError(SourceBufferError);case 3:return _context323.a(2)}},_callee323)})))})});describe("remove",function(){describe("when a backing source buffer has been created",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee324(){return _regenerator().w(function(_context324){while(1)switch(_context324.n){case 0:_context324.n=1;return controller.appendInit(data2,mimeType1);case 1:return _context324.a(2)}},_callee324)})));it("removes specified time range",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee325(){var removePromise;return _regenerator().w(function(_context325){while(1)switch(_context325.n){case 0:sourceBuffer.remove.and.callFake(function(){sourceBuffer.updating=true});removePromise=controller.remove(10,20);_context325.n=1;return flushPromises();case 1:_context325.n=2;return expectAsync(removePromise).toBePending();case 2:_context325.n=3;return updateDone();case 3:_context325.n=4;return expectAsync(removePromise).toBeResolved();case 4:expect(sourceBuffer.remove).toHaveBeenCalledWith(10,20);case 5:return _context325.a(2)}},_callee325)})));describe("when startTime is after endTime",function(){it("does not call remove on backing source buffer",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee326(){return _regenerator().w(function(_context326){while(1)switch(_context326.n){case 0:_context326.n=1;return controller.remove(20,10);case 1:expect(sourceBuffer.remove).not.toHaveBeenCalled();case 2:return _context326.a(2)}},_callee326)})))})});describe("when a backing source buffer has not been created",function(){it("does nothing",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee327(){return _regenerator().w(function(_context327){while(1)switch(_context327.n){case 0:_context327.n=1;return expectAsync(controller.remove(10,20)).toBeResolved();case 1:return _context327.a(2)}},_callee327)})))})});describe("clear",function(){describe("when a backing source buffer has been created",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee328(){return _regenerator().w(function(_context328){while(1)switch(_context328.n){case 0:_context328.n=1;return controller.appendInit(data2,mimeType1);case 1:return _context328.a(2)}},_callee328)})));it("clears all buffered data",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee329(){return _regenerator().w(function(_context329){while(1)switch(_context329.n){case 0:_context329.n=1;return controller.clear();case 1:expect(sourceBuffer.remove).toHaveBeenCalledWith(0,Number.POSITIVE_INFINITY);case 2:return _context329.a(2)}},_callee329)})))});describe("when a backing source buffer has not been created",function(){it("does nothing",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee330(){return _regenerator().w(function(_context330){while(1)switch(_context330.n){case 0:_context330.n=1;return expectAsync(controller.clear()).toBeResolved();case 1:return _context330.a(2)}},_callee330)})))})});describe("buffered",function(){describe("when a backing buffer has not been created",function(){it("returns empty ranges",function(){expect(controller.buffered).toBe(emptyRanges)})});describe("when a backing buffer has been created",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee331(){return _regenerator().w(function(_context331){while(1)switch(_context331.n){case 0:_context331.n=1;return controller.appendInit(data2,mimeType1);case 1:return _context331.a(2)}},_callee331)})));it("returns the backing buffer ranges",function(){sourceBuffer.buffered=new MockTimeRanges([[1,20],[30,40]]);expect(Array.from(controller.buffered)).toEqual([[1,20],[30,40]])});it("caches the buffered ranges until the next update",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee332(){var cachedRanges;return _regenerator().w(function(_context332){while(1)switch(_context332.n){case 0:sourceBuffer.buffered=new MockTimeRanges([[1,20],[30,40]]);cachedRanges=controller.buffered;_context332.n=1;return controller.remove(0,10);case 1:expect(controller.buffered).not.toBe(cachedRanges);cachedRanges=controller.buffered;_context332.n=2;return controller.append(data2);case 2:expect(controller.buffered).not.toBe(cachedRanges);case 3:return _context332.a(2)}},_callee332)})))})});describe("dispose",function(){describe("when source buffer is creating",function(){it("disposes the source buffer",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee333(){var appendPromise;return _regenerator().w(function(_context333){while(1)switch(_context333.n){case 0:appendPromise=controller.appendInit(data2,mimeType1);controller.dispose();_context333.n=1;return expectAsync(appendPromise).toBeRejected();case 1:expect(getMockSourceBufferRef().dispose).toHaveBeenCalledOnceWith();case 2:return _context333.a(2)}},_callee333)})));it("aborts awaiting readyToAppend and disposes the source buffer",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee334(){var appendPromise;return _regenerator().w(function(_context334){while(1)switch(_context334.n){case 0:mediaSourceController.readyToAppend=false;appendPromise=controller.appendInit(data2,mimeType1);controller.dispose();_context334.n=1;return expectAsync(appendPromise).toBeRejected();case 1:expect(getMockSourceBufferRef().dispose).toHaveBeenCalledOnceWith();case 2:return _context334.a(2)}},_callee334)})))});it("disposes the source buffer",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee335(){return _regenerator().w(function(_context335){while(1)switch(_context335.n){case 0:_context335.n=1;return controller.appendInit(data2,mimeType1);case 1:controller.dispose();expect(getMockSourceBufferRef().dispose).toHaveBeenCalledOnceWith();case 2:return _context335.a(2)}},_callee335)})))})});// test/unit/streaming/buffering/MediaSourceController.test.ts
|
|
1906
|
+
var createSpy26=jasmine.createSpy;var objectContaining15=jasmine.objectContaining;var VOD_DURATION=60;function createVodTimeline(){var duration=arguments.length>0&&arguments[0]!==undefined?arguments[0]:VOD_DURATION;return{periods:[],minBufferTime:0,getDuration:function getDuration(){return Promise.resolve(duration)}}}var liveTimeline={periods:[],minBufferTime:0,getDuration:function getDuration(){return Promise.resolve(Infinity)}};describe("MediaSourceControllerImpl",function(){var mediaSourceFactory;var contentTypesValue;var mediaTimelineTransformed;var mockMediaSource;var deps;var controller;function open(){mockMediaSource.readyState="open";mockMediaSource.dispatchEvent(mockEvent("sourceopen"))}beforeEach(function(){mockMediaSource=new MockMediaSource;implementEventFakes(mockMediaSource);mockMediaSource.addSourceBuffer.and.callFake(function(){return new MockSourceBuffer});mediaSourceFactory=createSpy26("mediaSourceFactory").and.returnValue(mockMediaSource);contentTypesValue=data(Promise.resolve(/* @__PURE__ */new Set(["audio"])));mediaTimelineTransformed=data(Promise.resolve(createVodTimeline()));deps={mediaSourceFactory:mediaSourceFactory,contentTypesValue:contentTypesValue,mediaTimelineTransformed:mediaTimelineTransformed};controller=new MediaSourceControllerImpl(deps)});afterEach(function(){controller.dispose()});describe("constructor",function(){it("creates media source using factory",function(){expect(mediaSourceFactory).toHaveBeenCalledOnceWith()})});describe("readyState",function(){it("returns media source ready state",function(){mockMediaSource.readyState="open";expect(controller.readyState).toBe("open")})});describe("duration",function(){it("sets media source duration after sourceopen",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee339(){return _regenerator().w(function(_context339){while(1)switch(_context339.n){case 0:open();_context339.n=1;return flushPromises();case 1:expect(mockMediaSource.duration).toBe(VOD_DURATION+DURATION_PADDING);case 2:return _context339.a(2)}},_callee339)})));it("uses LIVE_DURATION for live timelines",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee340(){return _regenerator().w(function(_context340){while(1)switch(_context340.n){case 0:mediaTimelineTransformed.value=Promise.resolve(liveTimeline);open();_context340.n=1;return flushPromises();case 1:expect(mockMediaSource.duration).toBe(LIVE_DURATION);case 2:return _context340.a(2)}},_callee340)})));it("does not set duration when media source is not open",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee341(){return _regenerator().w(function(_context341){while(1)switch(_context341.n){case 0:_context341.n=1;return flushPromises();case 1:expect(mockMediaSource.duration).toBe(0);case 2:return _context341.a(2)}},_callee341)})));it("refreshes duration when timeline changes",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee342(){return _regenerator().w(function(_context342){while(1)switch(_context342.n){case 0:open();_context342.n=1;return flushPromises();case 1:expect(mockMediaSource.duration).toBe(VOD_DURATION+DURATION_PADDING);mediaTimelineTransformed.value=Promise.resolve(createVodTimeline(120));_context342.n=2;return flushPromises();case 2:expect(mockMediaSource.duration).toBe(120+DURATION_PADDING);case 3:return _context342.a(2)}},_callee342)})));it("emits an error if getDuration rejects",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee343(){var errorSpy,error;return _regenerator().w(function(_context343){while(1)switch(_context343.n){case 0:errorSpy=createEventSpy(controller,"error");error=new Error("expected");mediaTimelineTransformed.value=Promise.resolve({periods:[],minBufferTime:0,getDuration:function getDuration(){return Promise.reject(error)}});open();_context343.n=1;return flushPromises();case 1:expect(errorSpy).toHaveBeenCalledWith({target:controller,error:error});case 2:return _context343.a(2)}},_callee343)})));it("does not emit silent (abort) errors",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee344(){var errorSpy;return _regenerator().w(function(_context344){while(1)switch(_context344.n){case 0:errorSpy=createEventSpy(controller,"error");mediaTimelineTransformed.value=Promise.resolve({periods:[],minBufferTime:0,getDuration:function getDuration(){return Promise.reject(new AbortError)}});open();_context344.n=1;return flushPromises();case 1:expect(errorSpy).not.toHaveBeenCalled();case 2:return _context344.a(2)}},_callee344)})));it("discards a duration result if the source closed before it resolved",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee345(){var deferred;return _regenerator().w(function(_context345){while(1)switch(_context345.n){case 0:deferred=new Deferred;mediaTimelineTransformed.value=Promise.resolve({periods:[],minBufferTime:0,getDuration:function getDuration(){return deferred}});open();_context345.n=1;return flushPromises();case 1:mockMediaSource.readyState="closed";mockMediaSource.dispatchEvent(mockEvent("sourceclose"));deferred.resolve(123);_context345.n=2;return flushPromises();case 2:expect(mockMediaSource.duration).toBe(0);expect(controller.readyToAppend).toBeFalse();case 3:return _context345.a(2)}},_callee345)})))});describe("createSourceBuffer",function(){var mockSourceBuffer;beforeEach(function(){mockSourceBuffer=new MockSourceBuffer;mockMediaSource.addSourceBuffer.and.returnValue(mockSourceBuffer)});it("creates source buffer with correct mime type",function(){var ref=controller.createSourceBuffer("audio","audio/mp4");expect(mockMediaSource.addSourceBuffer).toHaveBeenCalledWith("audio/mp4");expect(ref.value).toBe(mockSourceBuffer)});it("sets source buffer mode to sequence",function(){controller.createSourceBuffer("audio","audio/mp4");expect(mockSourceBuffer.mode).toBe("sequence")});it("emits error events when contentTypesValue rejects",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee346(){var errorSpy,error;return _regenerator().w(function(_context346){while(1)switch(_context346.n){case 0:errorSpy=createEventSpy(controller,"error");error=new Error("expected error");contentTypesValue.value=Promise.reject(error);_context346.n=1;return flushPromises();case 1:expect(errorSpy).toHaveBeenCalledWith({target:controller,error:error});case 2:return _context346.a(2)}},_callee346)})));describe("readyToAppend",function(){it("is true only after duration is set and all source buffers are created",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee347(){var readyToAppendSpy,newTypes;return _regenerator().w(function(_context347){while(1)switch(_context347.n){case 0:mockMediaSource.addSourceBuffer.and.callFake(function(){return new MockSourceBuffer});readyToAppendSpy=createEventSpy(controller,"readyToAppend");expect(controller.readyToAppend).toBeFalse();_context347.n=1;return flushPromises();case 1:expect(readyToAppendSpy).not.toHaveBeenCalled();controller.createSourceBuffer("audio","audio/mp4");expect(controller.readyToAppend).toBeFalse();expect(readyToAppendSpy).not.toHaveBeenCalled();open();_context347.n=2;return flushPromises();case 2:expect(controller.readyToAppend).toBeTrue();expect(readyToAppendSpy).toHaveBeenCalledTimes(1);readyToAppendSpy.calls.reset();newTypes=new Deferred;contentTypesValue.value=newTypes;expect(controller.readyToAppend).toBeFalse();newTypes.resolve(/* @__PURE__ */new Set(["audio","video"]));_context347.n=3;return flushPromises();case 3:expect(controller.readyToAppend).toBeFalse();expect(readyToAppendSpy).not.toHaveBeenCalled();controller.createSourceBuffer("video","video/mp4");_context347.n=4;return flushPromises();case 4:expect(controller.readyToAppend).toBeTrue();expect(readyToAppendSpy).toHaveBeenCalledTimes(1);case 5:return _context347.a(2)}},_callee347)})))});it("throws MediaSourceError when addSourceBuffer fails",function(){var error=new Error("test error");mockMediaSource.addSourceBuffer.and.throwError(error);expect(function(){return controller.createSourceBuffer("audio","invalid/type")}).toThrowError(MediaSourceError,"error creating source buffer")});describe("SourceBufferRef disposal",function(){it("removes source buffer from media source",function(){mockMediaSource.readyState="open";var ref=controller.createSourceBuffer("audio","audio/mp4");ref.dispose();expect(mockMediaSource.removeSourceBuffer).toHaveBeenCalledWith(mockSourceBuffer)});it("does not remove source buffer when media source is closed",function(){mockMediaSource.readyState="open";var ref=controller.createSourceBuffer("audio","audio/mp4");mockMediaSource.readyState="closed";ref.dispose();expect(mockMediaSource.removeSourceBuffer).not.toHaveBeenCalled()})})});describe("endOfStream",function(){it("calls endOfStream on media source",function(){controller.endOfStream();expect(mockMediaSource.endOfStream).toHaveBeenCalledWith(void 0)});it("passes error to media source",function(){controller.endOfStream("decode");expect(mockMediaSource.endOfStream).toHaveBeenCalledWith("decode")})});describe("createUrl",function(){it("creates object URL for media source",function(){spyOn(URL,"createObjectURL").and.returnValue("blob:test-url");var url=controller.createUrl();expect(URL.createObjectURL).toHaveBeenCalledWith(mockMediaSource);expect(url).toBe("blob:test-url")})})});describe("MediaSourceError",function(){it("creates error with message and reason",function(){var reason=new Error("original error");var error=new MediaSourceError("test message",reason);expect(error.message).toBe("test message");expect(error.toJSON()).toEqual(objectContaining15({message:"test message",reason:objectContaining15({message:"original error"})}))})});// test/unit/streaming/buffering/BufferingController.test.ts
|
|
1907
|
+
var any19=jasmine.any;var objectContaining16=jasmine.objectContaining;var INIT_DATA_SIZE=1;var SEGMENT_DURATION=10;var DURATION=100;var MIN_BUFFER_TIME=2;var MockQuotaExceededError=/*#__PURE__*/function(_Error2){function MockQuotaExceededError(){var _this147;_classCallCheck(this,MockQuotaExceededError);_this147=_callSuper(this,MockQuotaExceededError);_this147.name="QuotaExceededError";return _this147}_inherits(MockQuotaExceededError,_Error2);return _createClass(MockQuotaExceededError)}(/*#__PURE__*/_wrapNativeSuper(Error));var timeUpdateEvent2={previous:null,current:0};function createMockSegment(time){var size=arguments.length>1&&arguments[1]!==undefined?arguments[1]:1;var snapped=Math.max(0,time)+SEGMENT_START_AFFORDANCE;var startTime=floorToNearest(snapped,10);var endTime=Math.min(DURATION,startTime+SEGMENT_DURATION);return{initData:new ArrayBuffer(INIT_DATA_SIZE),data:new ArrayBuffer(size),timestampOffset:startTime,startTime:startTime,endTime:endTime,quality:__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:size/SEGMENT_DURATION,contentType:"audio"})}}describe("BufferingControllerImpl",function(){var mediaSourceController;var playbackController;var segmentController;var sourceBufferController;var bufferingController;var clock=useMockTime();var loggerRef2=useMockLogger();function nextPollImmediate(){return clock.tick(0,0)}function setSegmentList(sizes){var _segmentController$ge;var timeOffset=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;var contentType2=arguments.length>2&&arguments[2]!==undefined?arguments[2]:"audio";var segments=new Array(sizes.length);for(var i=0;i<sizes.length;i++){var segment=createMockSegment(i*10+timeOffset,sizes[i]);segment.quality.contentType=contentType2;segments[i]=Promise.resolve(segment)}(_segmentController$ge=segmentController.getSegment.and).returnValues.apply(_segmentController$ge,segments.concat([Promise.resolve(null)]));segmentController.dispatch("change",{})}function setTime(_x90){return _setTime.apply(this,arguments)}function _setTime(){_setTime=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee376(value){return _regenerator().w(function(_context376){while(1)switch(_context376.n){case 0:playbackController.currentTime=value;playbackController.dispatch("timeUpdate",timeUpdateEvent2);_context376.n=1;return clock.tick(POLL_BUFFER_THROTTLE);case 1:return _context376.a(2)}},_callee376)}));return _setTime.apply(this,arguments)}function getMostRecentAppendData(){return sourceBufferController.append.calls.mostRecent().args[0]}beforeEach(function(){mediaSourceController=new MockMediaSourceController;playbackController=new MockPlaybackController;segmentController=new MockSegmentController;segmentController.getSegment.and.callFake(function(time){if(time>=DURATION)return Promise.resolve(null);return Promise.resolve(createMockSegment(time))})});function createSourceBufferController(){var sourceBufferController2=new MockSourceBufferController;sourceBufferController2.enqueue.and.callFake(function(task){return Promise.resolve(task(new Abort))});var appendWindowStart=0;var appendWindowEnd=Number.POSITIVE_INFINITY;var offset=0;sourceBufferController2.clear.and.callFake(function(){sourceBufferController2.buffered.clear();return Promise.resolve()});sourceBufferController2.setTimestampOffset.and.callFake(function(value){offset=value;return Promise.resolve()});sourceBufferController2.setAppendWindow.and.callFake(function(){var start=arguments.length>0&&arguments[0]!==undefined?arguments[0]:0;var end=arguments.length>1&&arguments[1]!==undefined?arguments[1]:Number.POSITIVE_INFINITY;appendWindowStart=start;appendWindowEnd=end;return Promise.resolve()});sourceBufferController2.append.and.callFake(function(buffer){var _a3;expect(bufferingController.bufferingQuality).toBeDefined();var segmentBandwidth=(_a3=bufferingController.bufferingQuality)==null?void 0:_a3.bandwidth;if(segmentBandwidth){var secondsBuffered=buffer.byteLength/segmentBandwidth;var appendingTo=offset;offset=Math.min(offset+secondsBuffered,appendWindowEnd);sourceBufferController2.buffered.add(Math.max(appendWindowStart,appendingTo),offset)}return Promise.resolve()});sourceBufferController2.remove.and.callFake(function(start,end){sourceBufferController2.buffered.remove(start,end);return Promise.resolve()});return sourceBufferController2}afterEach(function(){if(!bufferingController.disposed)bufferingController.dispose()});function createBufferingController(options){return new BufferingControllerImpl({mediaSourceController:mediaSourceController,playbackController:playbackController,segmentController:segmentController,sourceBufferControllerFactory:function sourceBufferControllerFactory(){sourceBufferController=createSourceBufferController();return sourceBufferController}},"video",__spreadValues({minBuffer:MIN_BUFFER_TIME},options))}function open(){return _open.apply(this,arguments)}function _open(){_open=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee377(){return _regenerator().w(function(_context377){while(1)switch(_context377.n){case 0:mediaSourceController.readyState="open";mediaSourceController.dispatch("sourceOpen",{});_context377.n=1;return clock.tick(0);case 1:return _context377.a(2)}},_callee377)}));return _open.apply(this,arguments)}describe("getBufferedTime",function(){beforeEach(function(){bufferingController=createBufferingController()});it("returns the amount of time buffered from the current position",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee348(){return _regenerator().w(function(_context348){while(1)switch(_context348.n){case 0:expect(bufferingController.getBufferedTime()).toBe(0);bufferingController.activate();_context348.n=1;return open();case 1:expect(bufferingController.getBufferedTime()).toBe(10);playbackController.currentTime=50;expect(bufferingController.getBufferedTime()).toBe(0);playbackController.dispatch("seeking",{});_context348.n=2;return nextPollImmediate();case 2:expect(bufferingController.getBufferedTime()).toBe(10);playbackController.currentTime=55;expect(bufferingController.getBufferedTime()).toBe(5);case 3:return _context348.a(2)}},_callee348)})))});describe("when appending errs",function(){beforeEach(function(){bufferingController=createBufferingController();bufferingController.activate()});describe("when the error is fatal",function(){beforeEach(function(){segmentController.getSegment.and.callFake(function(_){return Promise.reject(new Error("fatal error"))})});it("buffering stops",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee349(){return _regenerator().w(function(_context349){while(1)switch(_context349.n){case 0:_context349.n=1;return open();case 1:expect(bufferingController.error).toBeInstanceOf(Error);segmentController.getSegment.calls.reset();_context349.n=2;return setTime(0);case 2:expect(segmentController.getSegment).not.toHaveBeenCalled();case 3:return _context349.a(2)}},_callee349)})))});describe("when the error is not fatal",function(){beforeEach(function(){segmentController.getSegment.and.returnValues(Promise.reject(new AbortError),Promise.resolve(createMockSegment(0)))});it("buffering is not stopped",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee350(){return _regenerator().w(function(_context350){while(1)switch(_context350.n){case 0:_context350.n=1;return open();case 1:expect(bufferingController.error).toBeNull();expect(segmentController.getSegment).toHaveBeenCalledTimes(1);_context350.n=2;return nextPollImmediate();case 2:expect(segmentController.getSegment).toHaveBeenCalledTimes(2);case 3:return _context350.a(2)}},_callee350)})))})});describe("when buffer is low",function(){beforeEach(function(){bufferingController=createBufferingController();bufferingController.activate()});it("appends next segment",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee351(){return _regenerator().w(function(_context351){while(1)switch(_context351.n){case 0:playbackController.currentTime=40;_context351.n=1;return open();case 1:expect(bufferingController.getBufferedTime()).toBe(10);expect(sourceBufferController.buffered.ranges).toEqual([[40,50]]);_context351.n=2;return setTime(50-MIN_BUFFER_TIME+0.1);case 2:expect(sourceBufferController.buffered.ranges).toEqual([[40,60]]);case 3:return _context351.a(2)}},_callee351)})))});describe("when segments exceed max append size",function(){beforeEach(function(){bufferingController=createBufferingController({maxAppendSize:{audio:100,video:300},minBuffer:2});bufferingController.activate()});it("fills buffer to max append size",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee352(){return _regenerator().w(function(_context352){while(1)switch(_context352.n){case 0:setSegmentList([400]);_context352.n=1;return open();case 1:expect(sourceBufferController.append).toHaveBeenCalledTimes(1);expect(getMostRecentAppendData().byteLength).toEqual(100);expect(bufferingController.getBufferedTime()).toBeCloseToWithin(2.5);sourceBufferController.append.calls.reset();_context352.n=2;return setTime(0.49);case 2:expect(sourceBufferController.append).not.toHaveBeenCalled();_context352.n=3;return setTime(0.5);case 3:expect(sourceBufferController.append).toHaveBeenCalledTimes(1);expect(getMostRecentAppendData().byteLength).toEqual(// max append size is 100, subtract the current buffered 2s
|
|
1908
|
+
100-2*400/10);sourceBufferController.append.calls.reset();_context352.n=4;return setTime(0.99);case 4:expect(sourceBufferController.append).not.toHaveBeenCalled();_context352.n=5;return setTime(1);case 5:expect(sourceBufferController.append).toHaveBeenCalledTimes(1);sourceBufferController.append.calls.reset();case 6:return _context352.a(2)}},_callee352)})));describe("when min buffer exceeds max append size",function(){it("does not append",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee353(){return _regenerator().w(function(_context353){while(1)switch(_context353.n){case 0:setSegmentList([1e3]);_context353.n=1;return open();case 1:sourceBufferController.append.calls.reset();_context353.n=2;return setTime(0);case 2:expect(sourceBufferController.append).not.toHaveBeenCalled();_context353.n=3;return setTime(1);case 3:expect(sourceBufferController.append).toHaveBeenCalled();case 4:return _context353.a(2)}},_callee353)})))});describe("when contentType is video",function(){it("uses video settings",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee354(){return _regenerator().w(function(_context354){while(1)switch(_context354.n){case 0:setSegmentList([1200,1860,1380],0,"video");_context354.n=1;return open();case 1:expect(sourceBufferController.append).toHaveBeenCalledTimes(1);expect(getMostRecentAppendData().byteLength).toEqual(300);expect(bufferingController.getBufferedTime()).toBeCloseToWithin(2.5);sourceBufferController.append.calls.reset();_context354.n=2;return setTime(0.49);case 2:expect(sourceBufferController.append).not.toHaveBeenCalled();_context354.n=3;return setTime(0.5);case 3:expect(sourceBufferController.append).toHaveBeenCalledTimes(1);case 4:return _context354.a(2)}},_callee354)})))});describe("when contentType is undefined",function(){it("uses DEFAULT_MAX_APPEND_SIZE for max byte length",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee355(){return _regenerator().w(function(_context355){while(1)switch(_context355.n){case 0:setSegmentList([DEFAULT_MAX_APPEND_SIZE*2],0,"unknown");_context355.n=1;return open();case 1:expect(sourceBufferController.append).toHaveBeenCalledTimes(1);expect(getMostRecentAppendData().byteLength).toEqual(DEFAULT_MAX_APPEND_SIZE);case 2:return _context355.a(2)}},_callee355)})))})});describe("when buffer is filled",function(){beforeEach(function(){bufferingController=createBufferingController();bufferingController.activate()});it("does not append segments",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee356(){return _regenerator().w(function(_context356){while(1)switch(_context356.n){case 0:_context356.n=1;return open();case 1:expect(bufferingController.getBufferedTime()).toBe(10);segmentController.getSegment.calls.reset();_context356.n=2;return setTime(1);case 2:expect(segmentController.getSegment).not.toHaveBeenCalled();expect(bufferingController.getBufferedTime()).toBe(9);case 3:return _context356.a(2)}},_callee356)})))});describe("when seeking",function(){beforeEach(function(){bufferingController=createBufferingController();bufferingController.activate()});it("clears and sets a new offset",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee357(){return _regenerator().w(function(_context357){while(1)switch(_context357.n){case 0:_context357.n=1;return open();case 1:expect(bufferingController.getBufferedTime()).toBe(10);playbackController.currentTime=20;playbackController.dispatch("seeking",{});_context357.n=2;return nextPollImmediate();case 2:expect(sourceBufferController.buffered.ranges).toEqual([[20,30]]);case 3:return _context357.a(2)}},_callee357)})))});describe("when log level is verbose",function(){beforeEach(function(){bufferingController=createBufferingController();bufferingController.activate();loggerRef2.value.logLevel=0/* VERBOSE */});it("logs poll buffer messages",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee358(){return _regenerator().w(function(_context358){while(1)switch(_context358.n){case 0:_context358.n=1;return open();case 1:expect(loggerRef2.value.verbose).toHaveBeenCalledWith(bufferingController,"pollBuffer time: 0, bufferedTime: 0, busy: false, error: false, readyState: open");case 2:return _context358.a(2)}},_callee358)})))});describe("clear",function(){beforeEach(function(){bufferingController=createBufferingController({maxAppendSize:{audio:1e3,video:3e3},minBuffer:2});bufferingController.activate()});it("clears the source buffer",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee359(){return _regenerator().w(function(_context359){while(1)switch(_context359.n){case 0:_context359.n=1;return open();case 1:bufferingController.clear();_context359.n=2;return nextPollImmediate();case 2:expect(sourceBufferController.clear).toHaveBeenCalledOnceWith();sourceBufferController.clear.calls.reset();playbackController.currentTime=9;playbackController.dispatch("timeUpdate",timeUpdateEvent2);bufferingController.clear();bufferingController.deactivate();_context359.n=3;return nextPollImmediate();case 3:expect(sourceBufferController.clear).not.toHaveBeenCalled();case 4:return _context359.a(2)}},_callee359)})));it("aborts the current segment request",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee360(){var deferred,abort;return _regenerator().w(function(_context360){while(1)switch(_context360.n){case 0:deferred=new Deferred;segmentController.getSegment.and.returnValue(deferred);_context360.n=1;return open();case 1:abort=segmentController.getSegment.calls.mostRecent().args[1];bufferingController.clear();expect(abort==null?void 0:abort.aborted()).toBeTrue();case 2:return _context360.a(2)}},_callee360)})));it("emits a playbackQualityChange with null quality",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee361(){var changeSpy,previous;return _regenerator().w(function(_context361){while(1)switch(_context361.n){case 0:_context361.n=1;return open();case 1:playbackController.dispatch("timeUpdate",timeUpdateEvent2);_context361.n=2;return clock.tick(POLL_BUFFER_THROTTLE);case 2:changeSpy=createEventSpy(bufferingController,"playbackQualityChange");previous=bufferingController.playbackQuality;expect(previous).not.toBeNull();bufferingController.clear();_context361.n=3;return flushPromises();case 3:expect(changeSpy).toHaveBeenCalledOnceWith({previous:previous,current:null});expect(bufferingController.playbackQuality).toBeNull();case 4:return _context361.a(2)}},_callee361)})));it("resets bufferingEnded to false when in buffering ended state",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee362(){return _regenerator().w(function(_context362){while(1)switch(_context362.n){case 0:setSegmentList([]);_context362.n=1;return open();case 1:_context362.n=2;return nextPollImmediate();case 2:expect(bufferingController.bufferingEnded).toBeTrue();bufferingController.clear();_context362.n=3;return flushPromises();case 3:expect(bufferingController.bufferingEnded).toBeFalse();case 4:return _context362.a(2)}},_callee362)})));describe("when not active",function(){it("does nothing",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee363(){return _regenerator().w(function(_context363){while(1)switch(_context363.n){case 0:_context363.n=1;return open();case 1:bufferingController.deactivate();bufferingController.clear();expect(sourceBufferController.clear).not.toHaveBeenCalled();case 2:return _context363.a(2)}},_callee363)})))})});describe("when decoderId changes",function(){beforeEach(function(){bufferingController=createBufferingController();bufferingController.activate()});it("re-initializes the decoder",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee364(){return _regenerator().w(function(_context364){while(1)switch(_context364.n){case 0:_context364.n=1;return open();case 1:expect(sourceBufferController.appendInit).toHaveBeenCalledTimes(1);sourceBufferController.appendInit.calls.reset();segmentController.getSegment.and.callFake(function(time){var mockSegment=createMockSegment(time);mockSegment.quality.decoderId="different";mockSegment.quality.mimeType="opus";return Promise.resolve(mockSegment)});playbackController.currentTime=9;playbackController.dispatch("seeking",{});_context364.n=2;return nextPollImmediate();case 2:expect(sourceBufferController.appendInit).toHaveBeenCalledOnceWith(any19(ArrayBuffer),"opus");case 3:return _context364.a(2)}},_callee364)})))});describe("when segment controller returns null",function(){beforeEach(function(){bufferingController=createBufferingController();bufferingController.activate()});it("ends the stream",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee365(){var endedSpy;return _regenerator().w(function(_context365){while(1)switch(_context365.n){case 0:setSegmentList([]);endedSpy=createEventSpy(bufferingController,"bufferingEnded");_context365.n=1;return open();case 1:_context365.n=2;return nextPollImmediate();case 2:expect(endedSpy).toHaveBeenCalledTimes(1);expect(bufferingController.bufferingQuality).toBeNull();expect(bufferingController.bufferingEnded).toBeTrue();expect(bufferingController.busy).toBeFalse();case 3:return _context365.a(2)}},_callee365)})));describe("then segment controller emits a change event",function(){it("reopens the stream",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee366(){return _regenerator().w(function(_context366){while(1)switch(_context366.n){case 0:setSegmentList([]);_context366.n=1;return open();case 1:_context366.n=2;return flushPromises();case 2:mediaSourceController.dispatch("sourceEnded",{});_context366.n=3;return flushPromises();case 3:segmentController.getSegment.calls.reset();mediaSourceController.readyState="ended";setSegmentList([1,1,1]);_context366.n=4;return nextPollImmediate();case 4:expect(segmentController.getSegment).toHaveBeenCalledTimes(1);case 5:return _context366.a(2)}},_callee366)})))})});describe("when append throws a QuotaExceededError",function(){afterEach(function(){clearSourceBufferQuota()});it("does not set to an erred state",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee367(){return _regenerator().w(function(_context367){while(1)switch(_context367.n){case 0:bufferingController=createBufferingController();bufferingController.activate();sourceBufferController.append.and.rejectWith(new MockQuotaExceededError);_context367.n=1;return open();case 1:expect(bufferingController.error).toBeNull();expect(loggerRef2.value.warn).toHaveBeenCalledTimes(1);case 2:return _context367.a(2)}},_callee367)})));it("sets the sourceBufferQuota for the current content type",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee368(){var _a3;return _regenerator().w(function(_context368){while(1)switch(_context368.n){case 0:setSegmentList(Array(20).fill(1),0,"video");bufferingController=createBufferingController({minBuffer:Number.MAX_VALUE,// Buffer all segments
|
|
1909
1909
|
maxAppendSize:{video:10*1024*1024// 10 MiB,
|
|
1910
|
-
}});bufferingController.activate();_context367.n=1;return open();case 1:_context367.n=2;return clock.tick();case 2:expect(bufferingController.getBufferedTime()).toBe(20);sourceBufferController.append.and.rejectWith(new MockQuotaExceededError);_context367.n=3;return clock.tick();case 3:expect(getSourceBufferQuota("video")).toEqual(10*1024*1024*QUOTA_REACHED_SCALE);_context367.n=4;return clock.tick();case 4:expect(getSourceBufferQuota("video")).toEqual(10*1024*1024*QUOTA_REACHED_SCALE*QUOTA_REACHED_SCALE);_context367.n=5;return clock.tick();case 5:expect(getSourceBufferQuota("video")).toEqual(10*1024*1024*Math.pow(QUOTA_REACHED_SCALE,3));_context367.n=6;return clock.tick.apply(clock,_toConsumableArray(Array(20).fill(0)));case 6:expect((_a3=bufferingController.error)==null?void 0:_a3.name).toEqual("QuotaExceededError");case 7:return _context367.a(2)}},_callee367)})));describe("and reduced size falls below MIN_APPEND_SIZE",function(){it("sets to an erred state",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee368(){var _a3;return _regenerator().w(function(_context368){while(1)switch(_context368.n){case 0:bufferingController=createBufferingController({maxAppendSize:{audio:MIN_APPEND_SIZE}});bufferingController.activate();sourceBufferController.append.and.rejectWith(new MockQuotaExceededError);_context368.n=1;return open();case 1:_context368.n=2;return setTime(0);case 2:expect((_a3=bufferingController.error)==null?void 0:_a3.name).toBe("QuotaExceededError");case 3:return _context368.a(2)}},_callee368)})))})});describe("when media source provided is already open",function(){it("polls on construction",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee369(){return _regenerator().w(function(_context369){while(1)switch(_context369.n){case 0:_context369.n=1;return open();case 1:bufferingController=createBufferingController();bufferingController.activate();_context369.n=2;return nextPollImmediate();case 2:expect(bufferingController.getBufferedTime()).toBe(10);case 3:return _context369.a(2)}},_callee369)})))});describe("playbackQuality",function(){var changeTime;var playbackQualityChange;beforeEach(function(){changeTime=20;segmentController.getSegment.and.callFake(function(time){if(time>=DURATION)return Promise.resolve(null);var segment=createMockSegment(time);segment.quality.qualityId=time<changeTime?"q1":"q2";return Promise.resolve(segment)})});function setTime2(_x91){return _setTime2.apply(this,arguments)}function _setTime2(){_setTime2=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee372(time){return _regenerator().w(function(_context372){while(1)switch(_context372.n){case 0:playbackController.currentTime=time;playbackController.dispatch("timeUpdate",timeUpdateEvent2);_context372.n=1;return clock.tick(POLL_BUFFER_THROTTLE);case 1:return _context372.a(2)}},_callee372)}));return _setTime2.apply(this,arguments)}describe("when at most two segments are buffered",function(){beforeEach(function(){bufferingController=createBufferingController();bufferingController.activate();playbackQualityChange=createEventSpy(bufferingController,"playbackQualityChange")});it("returns the encoding metadata of the currently playing segment",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee370(){var _a3,_b;return _regenerator().w(function(_context370){while(1)switch(_context370.n){case 0:expect(bufferingController.playbackQuality).toBeNull();_context370.n=1;return open();case 1:_context370.n=2;return setTime2(0);case 2:expect((_a3=bufferingController.playbackQuality)==null?void 0:_a3.qualityId).toBe("q1");expect(playbackQualityChange).toHaveBeenCalledTimes(1);playbackQualityChange.calls.reset();_context370.n=3;return setTime2(12);case 3:expect(playbackQualityChange).not.toHaveBeenCalled();_context370.n=4;return setTime2(19);case 4:expect(playbackQualityChange).not.toHaveBeenCalled();_context370.n=5;return setTime2(20);case 5:expect(playbackQualityChange).toHaveBeenCalledOnceWith({previous:objectContaining16({qualityId:"q1"}),current:objectContaining16({qualityId:"q2"})});expect((_b=bufferingController.playbackQuality)==null?void 0:_b.qualityId).toBe("q2");case 6:return _context370.a(2)}},_callee370)})))});describe("when multiple segments are buffered",function(){beforeEach(function(){changeTime=30;bufferingController=createBufferingController({minBuffer:50});bufferingController.activate();playbackQualityChange=createEventSpy(bufferingController,"playbackQualityChange")});it("returns the encoding metadata of the currently playing segment",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee371(){var _a3,_b,_c,_d,i;return _regenerator().w(function(_context371){while(1)switch(_context371.n){case 0:_context371.n=1;return open();case 1:_context371.n=2;return setTime2(0);case 2:expect((_a3=bufferingController.playbackQuality)==null?void 0:_a3.qualityId).toBe("q1");expect(playbackQualityChange).toHaveBeenCalledTimes(1);playbackQualityChange.calls.reset();i=5;case 3:if(!(i<=25)){_context371.n=5;break}_context371.n=4;return setTime2(i);case 4:i+=5;_context371.n=3;break;case 5:expect(playbackQualityChange).not.toHaveBeenCalled();expect((_b=bufferingController.playbackQuality)==null?void 0:_b.qualityId).toBe("q1");_context371.n=6;return setTime2(changeTime);case 6:expect((_c=bufferingController.playbackQuality)==null?void 0:_c.qualityId).toBe("q2");expect(playbackQualityChange).toHaveBeenCalledOnceWith({previous:objectContaining16({qualityId:"q1"}),current:objectContaining16({qualityId:"q2"})});playbackQualityChange.calls.reset();_context371.n=7;return setTime2(changeTime-1);case 7:playbackController.dispatch("seeking",{});_context371.n=8;return nextPollImmediate();case 8:expect((_d=bufferingController.playbackQuality)==null?void 0:_d.qualityId).toBe("q1");case 9:return _context371.a(2)}},_callee371)})))})});describe("bufferingQuality",function(){var changeTime;var bufferingQualityChange;beforeEach(function(){changeTime=20;segmentController.getSegment.and.callFake(function(time){if(time>=DURATION)return Promise.resolve(null);var segment=createMockSegment(time);segment.quality.qualityId=time<changeTime?"q1":"q2";return Promise.resolve(segment)})});describe("when multiple segments are buffered",function(){beforeEach(function(){changeTime=30;bufferingController=createBufferingController({minBuffer:50});bufferingController.activate();bufferingQualityChange=createEventSpy(bufferingController,"bufferingQualityChange")});it("returns the encoding metadata of the currently buffering segment",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee373(){var _a3,_b,_c,_d;return _regenerator().w(function(_context373){while(1)switch(_context373.n){case 0:_context373.n=1;return open();case 1:expect((_a3=bufferingController.bufferingQuality)==null?void 0:_a3.qualityId).toBe("q1");expect(bufferingQualityChange).toHaveBeenCalledOnceWith({previous:null,current:objectContaining16({qualityId:"q1"})});bufferingQualityChange.calls.reset();_context373.n=2;return nextPollImmediate();case 2:expect((_b=bufferingController.bufferingQuality)==null?void 0:_b.qualityId).toBe("q1");_context373.n=3;return clock.tick(0);case 3:expect((_c=bufferingController.bufferingQuality)==null?void 0:_c.qualityId).toBe("q2");expect(bufferingQualityChange).toHaveBeenCalledOnceWith({previous:objectContaining16({qualityId:"q1"}),current:objectContaining16({qualityId:"q2"})});bufferingQualityChange.calls.reset();playbackController.currentTime=0;playbackController.dispatch("seeking",{});_context373.n=4;return flushPromises();case 4:expect(bufferingQualityChange).toHaveBeenCalledOnceWith({previous:objectContaining16({qualityId:"q2"}),current:null});bufferingQualityChange.calls.reset();_context373.n=5;return nextPollImmediate();case 5:expect(bufferingQualityChange).toHaveBeenCalledOnceWith({previous:null,current:objectContaining16({qualityId:"q1"})});expect((_d=bufferingController.bufferingQuality)==null?void 0:_d.qualityId).toBe("q1");case 6:return _context373.a(2)}},_callee373)})))})});describe("reset",function(){beforeEach(function(){bufferingController=createBufferingController()});it("does nothing when there is no error",function(){expect(bufferingController.error).toBeNull();bufferingController.reset();expect(bufferingController.error).toBeNull()});it("clears error and polls buffer when there is an error",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee374(){return _regenerator().w(function(_context374){while(1)switch(_context374.n){case 0:segmentController.getSegment.and.rejectWith(new Error("test error"));bufferingController.activate();_context374.n=1;return open();case 1:expect(bufferingController.error).not.toBeNull();segmentController.getSegment.and.resolveTo(createMockSegment(0));segmentController.getSegment.calls.reset();bufferingController.reset();_context374.n=2;return nextPollImmediate();case 2:expect(bufferingController.error).toBeNull();expect(segmentController.getSegment).toHaveBeenCalled();case 3:return _context374.a(2)}},_callee374)})))});describe("dispose",function(){beforeEach(function(){bufferingController=createBufferingController();bufferingController.activate()});it("removes event handlers",function(){bufferingController.dispose();expect(bufferingController.disposed).toBeTrue();expect(bufferingController.active).toBeFalse();expect(playbackController.hasAnyListeners()).toBeFalse();expect(segmentController.hasAnyListeners()).toBeFalse()})});describe("activate",function(){describe("when active",function(){it("does nothing",function(){bufferingController=createBufferingController();bufferingController.activate();var firstSourceBufferController=sourceBufferController;bufferingController.activate();expect(bufferingController.active).toBeTrue();expect(sourceBufferController).toBe(firstSourceBufferController)})});it("creates a new source buffer",function(){bufferingController=createBufferingController();bufferingController.activate();var firstSourceBufferController=sourceBufferController;bufferingController.deactivate();bufferingController.activate();expect(bufferingController.active).toBeTrue();expect(sourceBufferController).not.toBe(firstSourceBufferController);expect(firstSourceBufferController.dispose).toHaveBeenCalledTimes(1);bufferingController.deactivate();expect(sourceBufferController.dispose).toHaveBeenCalledTimes(1)})});describe("getSourceBufferQuota",function(){beforeEach(function(){bufferingController=createBufferingController()});it("returns null when quota is not known",function(){expect(getSourceBufferQuota("text")).toBeNull()})})});// test/unit/streaming/buffering/error/SourceBufferError.test.ts
|
|
1910
|
+
}});bufferingController.activate();_context368.n=1;return open();case 1:_context368.n=2;return clock.tick();case 2:expect(bufferingController.getBufferedTime()).toBe(20);sourceBufferController.append.and.rejectWith(new MockQuotaExceededError);_context368.n=3;return clock.tick();case 3:expect(getSourceBufferQuota("video")).toEqual(10*1024*1024*QUOTA_REACHED_SCALE);_context368.n=4;return clock.tick();case 4:expect(getSourceBufferQuota("video")).toEqual(10*1024*1024*QUOTA_REACHED_SCALE*QUOTA_REACHED_SCALE);_context368.n=5;return clock.tick();case 5:expect(getSourceBufferQuota("video")).toEqual(10*1024*1024*Math.pow(QUOTA_REACHED_SCALE,3));_context368.n=6;return clock.tick.apply(clock,_toConsumableArray(Array(20).fill(0)));case 6:expect((_a3=bufferingController.error)==null?void 0:_a3.name).toEqual("QuotaExceededError");case 7:return _context368.a(2)}},_callee368)})));describe("and reduced size falls below MIN_APPEND_SIZE",function(){it("sets to an erred state",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee369(){var _a3;return _regenerator().w(function(_context369){while(1)switch(_context369.n){case 0:bufferingController=createBufferingController({maxAppendSize:{audio:MIN_APPEND_SIZE}});bufferingController.activate();sourceBufferController.append.and.rejectWith(new MockQuotaExceededError);_context369.n=1;return open();case 1:_context369.n=2;return setTime(0);case 2:expect((_a3=bufferingController.error)==null?void 0:_a3.name).toBe("QuotaExceededError");case 3:return _context369.a(2)}},_callee369)})))})});describe("when media source provided is already open",function(){it("polls on construction",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee370(){return _regenerator().w(function(_context370){while(1)switch(_context370.n){case 0:_context370.n=1;return open();case 1:bufferingController=createBufferingController();bufferingController.activate();_context370.n=2;return nextPollImmediate();case 2:expect(bufferingController.getBufferedTime()).toBe(10);case 3:return _context370.a(2)}},_callee370)})))});describe("playbackQuality",function(){var changeTime;var playbackQualityChange;beforeEach(function(){changeTime=20;segmentController.getSegment.and.callFake(function(time){if(time>=DURATION)return Promise.resolve(null);var segment=createMockSegment(time);segment.quality.qualityId=time<changeTime?"q1":"q2";return Promise.resolve(segment)})});function setTime2(_x91){return _setTime2.apply(this,arguments)}function _setTime2(){_setTime2=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee373(time){return _regenerator().w(function(_context373){while(1)switch(_context373.n){case 0:playbackController.currentTime=time;playbackController.dispatch("timeUpdate",timeUpdateEvent2);_context373.n=1;return clock.tick(POLL_BUFFER_THROTTLE);case 1:return _context373.a(2)}},_callee373)}));return _setTime2.apply(this,arguments)}describe("when at most two segments are buffered",function(){beforeEach(function(){bufferingController=createBufferingController();bufferingController.activate();playbackQualityChange=createEventSpy(bufferingController,"playbackQualityChange")});it("returns the encoding metadata of the currently playing segment",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee371(){var _a3,_b;return _regenerator().w(function(_context371){while(1)switch(_context371.n){case 0:expect(bufferingController.playbackQuality).toBeNull();_context371.n=1;return open();case 1:_context371.n=2;return setTime2(0);case 2:expect((_a3=bufferingController.playbackQuality)==null?void 0:_a3.qualityId).toBe("q1");expect(playbackQualityChange).toHaveBeenCalledTimes(1);playbackQualityChange.calls.reset();_context371.n=3;return setTime2(12);case 3:expect(playbackQualityChange).not.toHaveBeenCalled();_context371.n=4;return setTime2(19);case 4:expect(playbackQualityChange).not.toHaveBeenCalled();_context371.n=5;return setTime2(20);case 5:expect(playbackQualityChange).toHaveBeenCalledOnceWith({previous:objectContaining16({qualityId:"q1"}),current:objectContaining16({qualityId:"q2"})});expect((_b=bufferingController.playbackQuality)==null?void 0:_b.qualityId).toBe("q2");case 6:return _context371.a(2)}},_callee371)})))});describe("when multiple segments are buffered",function(){beforeEach(function(){changeTime=30;bufferingController=createBufferingController({minBuffer:50});bufferingController.activate();playbackQualityChange=createEventSpy(bufferingController,"playbackQualityChange")});it("returns the encoding metadata of the currently playing segment",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee372(){var _a3,_b,_c,_d,i;return _regenerator().w(function(_context372){while(1)switch(_context372.n){case 0:_context372.n=1;return open();case 1:_context372.n=2;return setTime2(0);case 2:expect((_a3=bufferingController.playbackQuality)==null?void 0:_a3.qualityId).toBe("q1");expect(playbackQualityChange).toHaveBeenCalledTimes(1);playbackQualityChange.calls.reset();i=5;case 3:if(!(i<=25)){_context372.n=5;break}_context372.n=4;return setTime2(i);case 4:i+=5;_context372.n=3;break;case 5:expect(playbackQualityChange).not.toHaveBeenCalled();expect((_b=bufferingController.playbackQuality)==null?void 0:_b.qualityId).toBe("q1");_context372.n=6;return setTime2(changeTime);case 6:expect((_c=bufferingController.playbackQuality)==null?void 0:_c.qualityId).toBe("q2");expect(playbackQualityChange).toHaveBeenCalledOnceWith({previous:objectContaining16({qualityId:"q1"}),current:objectContaining16({qualityId:"q2"})});playbackQualityChange.calls.reset();_context372.n=7;return setTime2(changeTime-1);case 7:playbackController.dispatch("seeking",{});_context372.n=8;return nextPollImmediate();case 8:expect((_d=bufferingController.playbackQuality)==null?void 0:_d.qualityId).toBe("q1");case 9:return _context372.a(2)}},_callee372)})))})});describe("bufferingQuality",function(){var changeTime;var bufferingQualityChange;beforeEach(function(){changeTime=20;segmentController.getSegment.and.callFake(function(time){if(time>=DURATION)return Promise.resolve(null);var segment=createMockSegment(time);segment.quality.qualityId=time<changeTime?"q1":"q2";return Promise.resolve(segment)})});describe("when multiple segments are buffered",function(){beforeEach(function(){changeTime=30;bufferingController=createBufferingController({minBuffer:50});bufferingController.activate();bufferingQualityChange=createEventSpy(bufferingController,"bufferingQualityChange")});it("returns the encoding metadata of the currently buffering segment",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee374(){var _a3,_b,_c,_d;return _regenerator().w(function(_context374){while(1)switch(_context374.n){case 0:_context374.n=1;return open();case 1:expect((_a3=bufferingController.bufferingQuality)==null?void 0:_a3.qualityId).toBe("q1");expect(bufferingQualityChange).toHaveBeenCalledOnceWith({previous:null,current:objectContaining16({qualityId:"q1"})});bufferingQualityChange.calls.reset();_context374.n=2;return nextPollImmediate();case 2:expect((_b=bufferingController.bufferingQuality)==null?void 0:_b.qualityId).toBe("q1");_context374.n=3;return clock.tick(0);case 3:expect((_c=bufferingController.bufferingQuality)==null?void 0:_c.qualityId).toBe("q2");expect(bufferingQualityChange).toHaveBeenCalledOnceWith({previous:objectContaining16({qualityId:"q1"}),current:objectContaining16({qualityId:"q2"})});bufferingQualityChange.calls.reset();playbackController.currentTime=0;playbackController.dispatch("seeking",{});_context374.n=4;return flushPromises();case 4:expect(bufferingQualityChange).toHaveBeenCalledOnceWith({previous:objectContaining16({qualityId:"q2"}),current:null});bufferingQualityChange.calls.reset();_context374.n=5;return nextPollImmediate();case 5:expect(bufferingQualityChange).toHaveBeenCalledOnceWith({previous:null,current:objectContaining16({qualityId:"q1"})});expect((_d=bufferingController.bufferingQuality)==null?void 0:_d.qualityId).toBe("q1");case 6:return _context374.a(2)}},_callee374)})))})});describe("reset",function(){beforeEach(function(){bufferingController=createBufferingController()});it("does nothing when there is no error",function(){expect(bufferingController.error).toBeNull();bufferingController.reset();expect(bufferingController.error).toBeNull()});it("clears error and polls buffer when there is an error",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee375(){return _regenerator().w(function(_context375){while(1)switch(_context375.n){case 0:segmentController.getSegment.and.rejectWith(new Error("test error"));bufferingController.activate();_context375.n=1;return open();case 1:expect(bufferingController.error).not.toBeNull();segmentController.getSegment.and.resolveTo(createMockSegment(0));segmentController.getSegment.calls.reset();bufferingController.reset();_context375.n=2;return nextPollImmediate();case 2:expect(bufferingController.error).toBeNull();expect(segmentController.getSegment).toHaveBeenCalled();case 3:return _context375.a(2)}},_callee375)})))});describe("dispose",function(){beforeEach(function(){bufferingController=createBufferingController();bufferingController.activate()});it("removes event handlers",function(){bufferingController.dispose();expect(bufferingController.disposed).toBeTrue();expect(bufferingController.active).toBeFalse();expect(playbackController.hasAnyListeners()).toBeFalse();expect(segmentController.hasAnyListeners()).toBeFalse()})});describe("activate",function(){describe("when active",function(){it("does nothing",function(){bufferingController=createBufferingController();bufferingController.activate();var firstSourceBufferController=sourceBufferController;bufferingController.activate();expect(bufferingController.active).toBeTrue();expect(sourceBufferController).toBe(firstSourceBufferController)})});it("creates a new source buffer",function(){bufferingController=createBufferingController();bufferingController.activate();var firstSourceBufferController=sourceBufferController;bufferingController.deactivate();bufferingController.activate();expect(bufferingController.active).toBeTrue();expect(sourceBufferController).not.toBe(firstSourceBufferController);expect(firstSourceBufferController.dispose).toHaveBeenCalledTimes(1);bufferingController.deactivate();expect(sourceBufferController.dispose).toHaveBeenCalledTimes(1)})});describe("getSourceBufferQuota",function(){beforeEach(function(){bufferingController=createBufferingController()});it("returns null when quota is not known",function(){expect(getSourceBufferQuota("text")).toBeNull()})})});// test/unit/streaming/buffering/error/SourceBufferError.test.ts
|
|
1911
1911
|
describe("SourceBufferError",function(){it("is an instance of Error and SourceBufferError",function(){expectPrototype(function(){return new SourceBufferError},SourceBufferError,ReportableError,Error)});describe("toStringTag",function(){it("returns the name",function(){expect(new SourceBufferError()[Symbol.toStringTag]).toBe("SourceBufferError")})})});// test/unit/streaming/abr/QualitySelectorImpl.test.ts
|
|
1912
1912
|
var objectContaining17=jasmine.objectContaining;describe("QualitySelectorImpl",function(){var networkMetricsControllerRef=overrideGlobalInit(networkMetricsController,function(){return new MockNetworkMetricsController});var metrics;var options;var selector;beforeEach(function(){metrics=_clone(EMPTY_NETWORK_METRICS);metrics.estimatedDownlinkBandwidth.latest=500;networkMetricsControllerRef.value.metrics=metrics;options=data({strategy:"best"/* BEST */,highBufferThreshold:50,lowBufferThreshold:30,bandwidthMultiplierLow:1,bandwidthMultiplierHigh:1});selector=new QualitySelectorImpl({options:options})});describe("constructor",function(){it("uses provided options",function(){expect(selector.options).toEqual(objectContaining17(options.value))});it("defaults restrictDecoderChangeOnAudioAbrUp to false",function(){expect(selector.options.restrictDecoderChangeOnAudioAbrUp).toBeFalse()})});describe("when options change",function(){it("merges new options with defaults",function(){var options2=data(defaultQualitySelectorImplOptions);selector=new QualitySelectorImpl({options:options2});options2.value={highBufferThreshold:-1};expect(selector.options).toEqual(__spreadProps(__spreadValues({},defaultQualitySelectorImplOptions),{highBufferThreshold:-1}))})});describe("selectQuality",function(){var qualities=[__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:200,bandwidthTotal:200,decoderId:"0",mimeType:"",qualityId:"0"}),__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:100,bandwidthTotal:100,decoderId:"1",mimeType:"",qualityId:"1"}),__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:50,bandwidthTotal:50,decoderId:"2",mimeType:"",qualityId:"2"}),__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:20,bandwidthTotal:20,decoderId:"3",mimeType:"",qualityId:"3"})];describe("when strategy is BEST",function(){describe("when prefetchState.previousQuality is null or not in current list",function(){var prefetchState;beforeEach(function(){prefetchState={fetchedTime:0,previousQuality:null,active:false}});it("chooses highest quality with bandwidth lower than ewma low estimate",function(){for(var _i36=0,_arr3=[null,__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:20,bandwidthTotal:20,decoderId:"3",mimeType:"",qualityId:"not-in-list"})];_i36<_arr3.length;_i36++){var previousQuality=_arr3[_i36];prefetchState.previousQuality=previousQuality;metrics.estimatedDownlinkBandwidth=_clone(EMPTY_STAT_METRICS);metrics.estimatedDownlinkBandwidth.ewmaLow=10;metrics.estimatedDownlinkBandwidth.latest=200;expect(selector.selectQuality(qualities,prefetchState)).toEqual(3);metrics.estimatedDownlinkBandwidth.ewmaLow=200;expect(selector.selectQuality(qualities,prefetchState)).toEqual(0);metrics.estimatedDownlinkBandwidth.latest=100;expect(selector.selectQuality(qualities,prefetchState)).toEqual(0)}})});describe("when prefetchState.prefetchSegment is in the current quality list",function(){var prefetchState;var qualities2=[__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:200,bandwidthTotal:200,contentType:"audio",decoderId:"a",mimeType:"",qualityId:"0"}),__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:100,bandwidthTotal:100,contentType:"audio",decoderId:"a",mimeType:"",qualityId:"1"}),__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:50,bandwidthTotal:50,contentType:"audio",decoderId:"b",mimeType:"",qualityId:"2"}),__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:20,bandwidthTotal:20,contentType:"audio",decoderId:"b",mimeType:"",qualityId:"3"})];beforeEach(function(){prefetchState={fetchedTime:0,previousQuality:qualities2[1],active:false}});describe("and current bandwidthEstimate.low is lower than prefetchState.previousQuality.bandwidth",function(){beforeEach(function(){metrics.estimatedDownlinkBandwidth.ewmaLow=50});describe("and fetchedTime is greater than highBufferThreshold",function(){beforeEach(function(){prefetchState.fetchedTime=50});it("returns previous quality",function(){expect(selector.selectQuality(qualities2,prefetchState)).toEqual(1)})});describe("and fetchedTime is less than highBufferThreshold",function(){beforeEach(function(){prefetchState.fetchedTime=49});it("returns lower quality",function(){expect(selector.selectQuality(qualities2,prefetchState)).toEqual(2);metrics.estimatedDownlinkBandwidth.ewmaLow=0;expect(selector.selectQuality(qualities2,prefetchState)).toEqual(3)})})});describe("and prefetchState.previousQuality.bandwidthTotal is null",function(){it("does not change quality",function(){var qualities22=_clone(qualities2);prefetchState.fetchedTime=0;qualities22[1].bandwidthTotal=null;prefetchState.previousQuality=qualities22[1];expect(selector.selectQuality(qualities22,prefetchState)).toEqual(1)})});describe("and current bandwidthEstimate.low is higher than next higher bandwidth than previous quality",function(){beforeEach(function(){metrics.estimatedDownlinkBandwidth.ewmaLow=200});describe("and fetchedTime is less than lowBufferThreshold",function(){beforeEach(function(){prefetchState.fetchedTime=29});it("does not ABR up",function(){expect(selector.selectQuality(qualities2,prefetchState)).toEqual(1)})});describe("and fetchedTime is greater than lowBufferThreshold",function(){beforeEach(function(){prefetchState.fetchedTime=30});describe("and restrictDecoderChangeOnAudioAbrUp is true",function(){beforeEach(function(){options.value=__spreadProps(__spreadValues({},options.value),{restrictDecoderChangeOnAudioAbrUp:true})});it("chooses highest quality bandwidth exceeds with same decoderId",function(){expect(selector.selectQuality(qualities2,prefetchState)).toEqual(0);prefetchState.previousQuality=qualities2[2];expect(selector.selectQuality(qualities2,prefetchState)).toEqual(2);prefetchState.previousQuality=qualities2[3];expect(selector.selectQuality(qualities2,prefetchState)).toEqual(2)})});it("restricts to switchingGroupIds when set",function(){var groupA="group-a";var groupB="group-b";var switchQualities=[__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:200,bandwidthTotal:200,decoderId:"a",qualityId:"q0",groupId:groupA,switchingGroupIds:[groupA]}),__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:100,bandwidthTotal:100,decoderId:"a",qualityId:"q1",groupId:groupA,switchingGroupIds:[groupA]}),__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:50,bandwidthTotal:50,decoderId:"b",qualityId:"q2",groupId:groupB,switchingGroupIds:[groupB]})];prefetchState.previousQuality=switchQualities[1];expect(selector.selectQuality(switchQualities,prefetchState)).toEqual(0);prefetchState.previousQuality=switchQualities[2];expect(selector.selectQuality(switchQualities,prefetchState)).toEqual(2)})})})})});describe("when strategy is LOWEST",function(){beforeEach(function(){options.value=__spreadProps(__spreadValues({},options.value),{strategy:"lowest"/* LOWEST */})});it("selects last quality",function(){expect(selector.selectQuality(qualities,{fetchedTime:0,previousQuality:null,active:false})).toEqual(3)})});describe("when strategy is HIGHEST",function(){beforeEach(function(){options.value=__spreadProps(__spreadValues({},options.value),{strategy:"highest"/* HIGHEST */})});it("selects first quality",function(){expect(selector.selectQuality(qualities,{fetchedTime:0,previousQuality:null,active:false})).toEqual(0)})});describe("when strategy is FIXED",function(){beforeEach(function(){options.value=__spreadProps(__spreadValues({},options.value),{strategy:"fixed"/* FIXED */})});describe("and the previous quality is within current list",function(){it("selects previous quality",function(){metrics.estimatedDownlinkBandwidth.ewmaLow=100;expect(selector.selectQuality(qualities,{fetchedTime:0,previousQuality:qualities[0],active:false})).toEqual(0)})});describe("and previous quality is null or not within current list",function(){it("selects new quality",function(){metrics.estimatedDownlinkBandwidth.ewmaLow=100;expect(selector.selectQuality(qualities,{fetchedTime:0,previousQuality:null,active:false})).toEqual(1)})})})});describe("when options change",function(){it("merges set options with defaults",function(){options.value={highBufferThreshold:32};expect(selector.options).toEqual(__spreadProps(__spreadValues({},defaultQualitySelectorImplOptions),{highBufferThreshold:32}))})});describe("bandwidthMultiplierLow and bandwidthMultiplierHigh",function(){it("uses bandwidthMultiplierLow at fetchedTime 0 and bandwidthMultiplierHigh at highBufferThreshold",function(){var testOptions=data(__spreadProps(__spreadValues({},defaultQualitySelectorImplOptions),{bandwidthMultiplierLow:0.5,bandwidthMultiplierHigh:0.5}));selector=new QualitySelectorImpl({options:testOptions});metrics.estimatedDownlinkBandwidth.ewmaLow=220;var qualities=[__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:200,bandwidthTotal:200}),__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:100,bandwidthTotal:100}),__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:50,bandwidthTotal:50})];expect(selector.selectQuality(qualities,{fetchedTime:0,previousQuality:null,active:false})).toEqual(1);testOptions.value=__spreadProps(__spreadValues({},testOptions.value),{bandwidthMultiplierLow:1,bandwidthMultiplierHigh:1});expect(selector.selectQuality(qualities,{fetchedTime:0,previousQuality:null,active:false})).toEqual(0)});it("interpolates between low and high multiplier based on fetchedTime",function(){var testOptions=data(__spreadProps(__spreadValues({},defaultQualitySelectorImplOptions),{highBufferThreshold:30,bandwidthMultiplierLow:0.5,bandwidthMultiplierHigh:1}));selector=new QualitySelectorImpl({options:testOptions});metrics.estimatedDownlinkBandwidth.ewmaLow=220;metrics.estimatedDownlinkBandwidth.latest=220;var qualities=[__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:200,bandwidthTotal:200}),__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:100,bandwidthTotal:100})];expect(selector.selectQuality(qualities,{fetchedTime:0,previousQuality:null,active:true})).toEqual(1);expect(selector.selectQuality(qualities,{fetchedTime:30,previousQuality:null,active:true})).toEqual(0);expect(selector.selectQuality(qualities,{fetchedTime:15,previousQuality:null,active:true})).toEqual(1)});it("uses bandwidthMultiplierHigh when highBufferThreshold is 0",function(){var testOptions=data(__spreadProps(__spreadValues({},defaultQualitySelectorImplOptions),{highBufferThreshold:0,bandwidthMultiplierLow:0.1,bandwidthMultiplierHigh:1}));selector=new QualitySelectorImpl({options:testOptions});metrics.estimatedDownlinkBandwidth.ewmaLow=200;var qualities=[__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:200,bandwidthTotal:200}),__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:100,bandwidthTotal:100})];expect(selector.selectQuality(qualities,{fetchedTime:0,previousQuality:null,active:false})).toEqual(0)})});describe("when track is active and latest bandwidth is lower than ewmaLow",function(){it("uses latest bandwidth for quality selection",function(){metrics.estimatedDownlinkBandwidth.ewmaLow=150;metrics.estimatedDownlinkBandwidth.latest=80;var qualities=[__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:100,bandwidthTotal:100}),__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:50,bandwidthTotal:50})];expect(selector.selectQuality(qualities,{fetchedTime:0,previousQuality:null,active:true})).toEqual(1)})});describe("restrictDecoderChangeOnAudioAbrUp",function(){var audioQualities=[__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:200,bandwidthTotal:200,contentType:"audio",decoderId:"a",mimeType:"",qualityId:"0"}),__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:100,bandwidthTotal:100,contentType:"audio",decoderId:"b",mimeType:"",qualityId:"1"}),__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:50,bandwidthTotal:50,contentType:"audio",decoderId:"c",mimeType:"",qualityId:"2"})];var prefetchState={fetchedTime:30,// >= lowBufferThreshold
|
|
1913
1913
|
previousQuality:audioQualities[1],// decoder 'b'
|
|
1914
1914
|
active:false};beforeEach(function(){metrics.estimatedDownlinkBandwidth.ewmaLow=500});it("does not cross decoder boundaries when ABR-up is restricted",function(){options.value=__spreadProps(__spreadValues({},options.value),{restrictDecoderChangeOnAudioAbrUp:true});expect(selector.selectQuality(audioQualities,prefetchState)).toEqual(1)});it("crosses decoder boundaries when restriction is disabled (default)",function(){expect(selector.options.restrictDecoderChangeOnAudioAbrUp).toBeFalse();expect(selector.selectQuality(audioQualities,prefetchState)).toEqual(0)});it("still allows ABR-down across decoders regardless of restriction",function(){metrics.estimatedDownlinkBandwidth.ewmaLow=60;var downState=__spreadProps(__spreadValues({},prefetchState),{fetchedTime:0});for(var _i37=0,_arr4=[true,false];_i37<_arr4.length;_i37++){var restrict=_arr4[_i37];options.value=__spreadProps(__spreadValues({},options.value),{restrictDecoderChangeOnAudioAbrUp:restrict});expect(selector.selectQuality(audioQualities,downState)).toEqual(2)}});it("does not apply to non-audio content",function(){var videoQualities=audioQualities.map(function(q){return __spreadProps(__spreadValues({},q),{contentType:"video"})});var videoState=__spreadProps(__spreadValues({},prefetchState),{previousQuality:videoQualities[1]});options.value=__spreadProps(__spreadValues({},options.value),{restrictDecoderChangeOnAudioAbrUp:true});expect(selector.selectQuality(videoQualities,videoState)).toEqual(0)})});describe("maxBandwidth",function(){var qualities=[__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:1e3,bandwidthTotal:1e3,qualityId:"0"}),__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:500,bandwidthTotal:500,qualityId:"1"}),__spreadProps(__spreadValues({},createEmptyMediaQualityMetadata()),{bandwidth:100,bandwidthTotal:100,qualityId:"2"})];var prefetchState={fetchedTime:0,previousQuality:null,active:false};beforeEach(function(){metrics.estimatedDownlinkBandwidth.ewmaLow=5e3});it("caps the selectable quality to the configured bandwidth",function(){options.value=__spreadProps(__spreadValues({},options.value),{maxBandwidth:500});expect(selector.selectQuality(qualities,prefetchState)).toEqual(1)});it("falls back to the lowest quality when all exceed the cap",function(){options.value=__spreadProps(__spreadValues({},options.value),{maxBandwidth:50});expect(selector.selectQuality(qualities,prefetchState)).toEqual(2)});it("pins to the lowest quality when set to 0",function(){options.value=__spreadProps(__spreadValues({},options.value),{maxBandwidth:0});expect(selector.selectQuality(qualities,prefetchState)).toEqual(2)});it("treats null as no cap",function(){options.value=__spreadProps(__spreadValues({},options.value),{maxBandwidth:null});expect(selector.selectQuality(qualities,prefetchState)).toEqual(0)});it("does not raise the bandwidth budget above the network estimate",function(){metrics.estimatedDownlinkBandwidth.ewmaLow=600;options.value=__spreadProps(__spreadValues({},options.value),{maxBandwidth:1e5});expect(selector.selectQuality(qualities,prefetchState)).toEqual(1)});it("has no effect when strategy is LOWEST",function(){options.value=__spreadProps(__spreadValues({},options.value),{strategy:"lowest"/* LOWEST */,maxBandwidth:1e5});expect(selector.selectQuality(qualities,prefetchState)).toEqual(qualities.length-1)});it("has no effect when strategy is HIGHEST",function(){options.value=__spreadProps(__spreadValues({},options.value),{strategy:"highest"/* HIGHEST */,maxBandwidth:50});expect(selector.selectQuality(qualities,prefetchState)).toEqual(0)})});describe("toString",function(){it("returns a string",function(){expect(selector.toString()).toContain("QualitySelectorImpl")})});describe("dispose",function(){it("removes options listeners",function(){expect(options.hasAnyListeners()).toBeTrue();selector.dispose();expect(options.hasAnyListeners()).toBeFalse()})});describe("disposed",function(){it("returns true when disposed",function(){expect(selector.disposed).toBeFalse();selector.dispose();expect(selector.disposed).toBeTrue()})})});// test/unit/playback/nextEventHasMetadata.test.ts
|
|
1915
|
-
describe("nextHasMetadata",function(){var controller;beforeEach(function(){controller=new MockPlaybackController});it("resolves when the next HAVE_METADATA event is emitted",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1915
|
+
describe("nextHasMetadata",function(){var controller;beforeEach(function(){controller=new MockPlaybackController});it("resolves when the next HAVE_METADATA event is emitted",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee378(){var promise2;return _regenerator().w(function(_context378){while(1)switch(_context378.n){case 0:promise2=nextHasMetadata(controller);_context378.n=1;return expectAsync(promise2).toBePending();case 1:controller.dispatch("loadedMetadata",{});_context378.n=2;return expectAsync(promise2).toBeResolved();case 2:return _context378.a(2)}},_callee378)})));it("fulfills promise if hasMetadata is already set to true",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee379(){return _regenerator().w(function(_context379){while(1)switch(_context379.n){case 0:controller.hasMetadata=false;_context379.n=1;return expectAsync(nextHasMetadata(controller)).toBePending();case 1:controller.hasMetadata=true;_context379.n=2;return expectAsync(nextHasMetadata(controller)).toBeResolved();case 2:return _context379.a(2)}},_callee379)})));it("accepts optional NextEventAsPromiseOptions",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee380(){var abort;return _regenerator().w(function(_context380){while(1)switch(_context380.n){case 0:abort=new Abort;abort.abort(new Error("reason"));_context380.n=1;return expectAsync(nextHasMetadata(controller,{abort:abort})).toBeRejectedWithError("reason");case 1:return _context380.a(2)}},_callee380)})))});// test/unit/playback/ReadonlyPlaybackController.test.ts
|
|
1916
1916
|
describe("ALL_PLAYBACK_STATE_EVENTS",function(){it("provides a comprehensive list of all playback state events",function(){expectTypeStrictlyEquals(true)})});// test/unit/playback/PlaybackSourceImpl.test.ts
|
|
1917
1917
|
describe("PlaybackSource",function(){it("directly relies on the media element's functionality",function(){var media=new MockHTMLAudioElement;var p=new PlaybackSourceImpl({media:media});p.crossOrigin="use-credentials";expect(media.crossOrigin).toBe("use-credentials");expect(p.crossOrigin).toBe("use-credentials");p.load();expect(media.load).toHaveBeenCalledOnceWith();p.src="https://example.com/";expect(media.src).toBe("https://example.com/");expect(p.src).toBe(media.src);expect(p.currentSrc).toBe(media.currentSrc);expect(p.srcObject).toBe(media.srcObject);var src=new MockMediaStream;p.srcObject=src;expect(media.srcObject).toBe(src)});it("deletes src attribute on the element when assigned null",function(){var media=new MockHTMLAudioElement;var p=new PlaybackSourceImpl({media:media});p.src="https://example.com/test.mp3";expect(media.src).toBe("https://example.com/test.mp3");p.src=null;expect(media.removeAttribute).toHaveBeenCalledOnceWith("src")});describe("disableRemotePlayback",function(){it("delegates to the media element",function(){var media=new MockHTMLAudioElement;var p=new PlaybackSourceImpl({media:media});media.disableRemotePlayback=true;expect(p.disableRemotePlayback).toBeTrue();p.disableRemotePlayback=false;expect(p.disableRemotePlayback).toBeFalse()})})});// test/unit/playback/PlaybackControllerImpl.test.ts
|
|
1918
|
-
var any20=jasmine.any;var createSpy27=jasmine.createSpy;var objectContaining18=jasmine.objectContaining;describe("PlaybackController",function(){var notAllowedError={name:"NotAllowedError"};var notAuthorizedError={name:"NotAuthorizedError"};var clock=useMockTime();var loggingRef=useMockLogger();describe("PlaybackControllerImpl",function(){var media;var loudnessNormalizationController;beforeEach(function(){media=new MockHTMLAudioElement;media.buffered=new MockTimeRanges;media.seekable=new MockTimeRanges;loudnessNormalizationController=new MockLoudnessNormalizationController;implementEventFakes(media);media.play.and.returnValue(Promise.resolve())});function testDelegate(controller,prop,value){if(Object.getOwnPropertyDescriptor(PlaybackControllerImpl.prototype,prop).set){controller[prop]=value;expect(media[prop]).toBe(value)};media[prop]=value;expect(controller[prop]).toBe(value)}describe("when loudness normalization controller emits change event",function(){var controller;var mockLoudnessController;beforeEach(function(){mockLoudnessController=new MockLoudnessNormalizationController;controller=new PlaybackControllerImpl({media:media,loudnessNormalizationController:mockLoudnessController})});it("media volume is refreshed",function(){controller.volume=0.8;expect(media.volume).toBe(0.8);mockLoudnessController.gain=0.5;mockLoudnessController.dispatch("change",{});expect(controller.volume).toBe(0.8);expect(media.volume).toBeCloseTo(0.4)})});describe("with standard options",function(){var controller;var mockLoudnessController;beforeEach(function(){mockLoudnessController=new MockLoudnessNormalizationController;controller=new PlaybackControllerImpl({media:media,loudnessNormalizationController:mockLoudnessController})});afterEach(function(){if(!controller.disposed)controller.dispose()});it("assigns properties, methods, and events directly to a media object",function(){expect(controller.buffered).toBeInstanceOf(ReadonlyRangesImpl);testDelegate(controller,"currentTime",2);testDelegate(controller,"duration",3);testDelegate(controller,"defaultPlaybackRate",2);testDelegate(controller,"ended",true);testDelegate(controller,"loop",true);testDelegate(controller,"muted",true);testDelegate(controller,"networkState",1);testDelegate(controller,"paused",true);testDelegate(controller,"playbackRate",2);testDelegate(controller,"preservesPitch",false);testDelegate(controller,"readyState",3);expect(controller.seekable).toBeInstanceOf(ReadonlyRangesImpl);testDelegate(controller,"volume",0)});describe("error",function(){it("is set on an error event",function(){expect(controller.error).toBeNull();var error=new MockMediaError;error.code=3;media.error=error;media.dispatchEvent(mockEvent("error"));expect(controller.error).toBeInstanceOf(ReportableMediaError);expect(controller.error).toEqual(objectContaining18({code:3}))});it("is null after a reset",function(){var error=new MockMediaError;error.code=3;media.error=error;media.dispatchEvent(mockEvent("error"));expect(controller.error).not.toBeNull();controller.reset();expect(controller.error).toBeNull()})});describe("hasMetadata",function(){it("returns true if readyState is at least HAVE_METADATA",function(){media.readyState=0/* HAVE_NOTHING */;expect(controller.hasMetadata).toBeFalse();media.readyState=1/* HAVE_METADATA */;expect(controller.hasMetadata).toBeTrue();media.readyState=2/* HAVE_CURRENT_DATA */;expect(controller.hasMetadata).toBeTrue()})});describe("canPlay",function(){it("returns true if readyState is at HAVE_FUTURE_DATA",function(){media.readyState=0/* HAVE_NOTHING */;expect(controller.canPlay).toBeFalse();media.readyState=3/* HAVE_FUTURE_DATA */;expect(controller.canPlay).toBeTrue();media.readyState=4/* HAVE_ENOUGH_DATA */;expect(controller.canPlay).toBeTrue()})});describe("canPlayThrough",function(){it("returns true if readyState is at HAVE_ENOUGH_DATA",function(){media.readyState=0/* HAVE_NOTHING */;expect(controller.canPlayThrough).toBeFalse();media.readyState=3/* HAVE_FUTURE_DATA */;expect(controller.canPlayThrough).toBeFalse();media.readyState=4/* HAVE_ENOUGH_DATA */;expect(controller.canPlayThrough).toBeTrue()})});describe("playIsPending",function(){it("returns true if a play promise is in a pending state",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee380(){var playPromise;return _regenerator().w(function(_context380){while(1)switch(_context380.n){case 0:media.readyState=1/* HAVE_METADATA */;playPromise=new Deferred;media.play.and.returnValue(playPromise);expect(controller.playIsPending).toBeFalse();void controller.play();_context380.n=1;return clock.tick();case 1:expect(controller.playIsPending).toBeTrue();playPromise.resolve(void 0);_context380.n=2;return clock.tick();case 2:expect(controller.playIsPending).toBeFalse();case 3:return _context380.a(2)}},_callee380)})))});describe("seekTo",function(){function setSeekable(ranges){media.readyState=1/* HAVE_METADATA */;media.dispatchEvent(mockEvent("loadedmetadata"));media.duration=last(ranges)[1];media.seekable=new MockTimeRanges(ranges)}function enableSeekAutoComplete(){var currentTime=0;Object.defineProperty(media,"currentTime",{get:function get(){return currentTime},set:function set(value){currentTime=value;media.dispatchEvent(mockEvent("seeking"));void _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee381(){return _regenerator().w(function(_context381){while(1)switch(_context381.n){case 0:_context381.n=1;return flushPromises();case 1:media.dispatchEvent(mockEvent("seeked"));case 2:return _context381.a(2)}},_callee381)}))()}})}it("waits for metadata before initiating seek",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee382(){var seeked;return _regenerator().w(function(_context382){while(1)switch(_context382.n){case 0:enableSeekAutoComplete();seeked=controller.seekTo(3);setSeekable([[0,10]]);expect(media.currentTime).toBe(0);_context382.n=1;return seeked;case 1:expect(media.currentTime).toBe(3);case 2:return _context382.a(2)}},_callee382)})));it("constrains seeks to allowable ranges within tolerance",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee383(){var minSeekableBuffer,unchangedTime;return _regenerator().w(function(_context383){while(1)switch(_context383.n){case 0:minSeekableBuffer=controller.options.minSeekableBuffer;enableSeekAutoComplete();setSeekable([[30,50],[70,100]]);_context383.n=1;return controller.seekTo(100.5);case 1:expect(media.currentTime).toBe(100-minSeekableBuffer);_context383.n=2;return controller.seekTo(29.5);case 2:expect(media.currentTime).toBe(30);_context383.n=3;return controller.seekTo(50.5);case 3:expect(media.currentTime).toBe(50-minSeekableBuffer);_context383.n=4;return controller.seekTo(69.8,0.2);case 4:expect(media.currentTime).toBe(70);_context383.n=5;return controller.seekTo(70);case 5:expect(media.currentTime).toBe(70);_context383.n=6;return controller.seekTo(200,110-100);case 6:expect(media.currentTime).toBeCloseToWithin(100-minSeekableBuffer);_context383.n=7;return controller.seekTo(-200,30);case 7:expect(media.currentTime).toBe(30);unchangedTime=media.currentTime;loggingRef.value.warn.calls.reset();_context383.n=8;return expectAsync(controller.seekTo(29,0.5)).toBeRejectedWithError("Could not seek to time: 29, outside of seekable ranges [[30, 50], [70, 100]] with tolerance 0.5");case 8:expect(loggingRef.value.warn).toHaveBeenCalledOnceWith(controller,"seekTo: seek outside of seekable ranges, seek ignored");loggingRef.value.warn.calls.reset();expect(media.currentTime).toBe(unchangedTime);case 9:return _context383.a(2)}},_callee383)})));describe("when there is no seekable range within tolerance after metadata",function(){it("logs warning messages when necessary",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee384(){return _regenerator().w(function(_context384){while(1)switch(_context384.n){case 0:enableSeekAutoComplete();setSeekable([[3,5],[100,120]]);_context384.n=1;return expectAsync(controller.seekTo(10)).toBeRejectedWithError("Could not seek to time: 10, outside of seekable ranges [[3, 5], [100, 120]] with tolerance 0.5");case 1:expect(loggingRef.value.warn).toHaveBeenCalledOnceWith(controller,"seekTo: seek outside of seekable ranges, seek ignored");case 2:return _context384.a(2)}},_callee384)})))});it("does not no-op if time is not within tolerance of seek time",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee385(){var pendingSeek1,pendingSeek2;return _regenerator().w(function(_context385){while(1)switch(_context385.n){case 0:enableSeekAutoComplete();pendingSeek1=controller.seekTo(3);pendingSeek2=controller.seekTo(3.5,0.4);setSeekable([[0,10]]);_context385.n=1;return expectAsync(pendingSeek1).toBeResolved();case 1:_context385.n=2;return expectAsync(pendingSeek2).toBeResolved();case 2:expect(controller.currentTime).toBe(3.5);case 3:return _context385.a(2)}},_callee385)})));describe("when a seek is pending",function(){describe("and seek time is within tolerance of pending seek time",function(){it("does not set media currentTime unnecessarily",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee386(){var pendingSeek1,pendingSeek2;return _regenerator().w(function(_context386){while(1)switch(_context386.n){case 0:setSeekable([[0,10]]);enableSeekAutoComplete();pendingSeek1=controller.seekTo(3,1);pendingSeek2=controller.seekTo(4,1);_context386.n=1;return pendingSeek1;case 1:_context386.n=2;return pendingSeek2;case 2:expect(media.currentTime).toEqual(3);case 3:return _context386.a(2)}},_callee386)})))});it("seeks to new location",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee387(){var firstSeek,secondSeek,thirdSeek;return _regenerator().w(function(_context387){while(1)switch(_context387.n){case 0:setSeekable([[0,100]]);enableSeekAutoComplete();firstSeek=controller.seekTo(10);secondSeek=controller.seekTo(20);thirdSeek=controller.seekTo(30);_context387.n=1;return expectAsync(firstSeek).toBePending();case 1:_context387.n=2;return secondSeek;case 2:_context387.n=3;return firstSeek;case 3:_context387.n=4;return expectAsync(thirdSeek).toBeResolved();case 4:expect(media.currentTime).toBe(30);case 5:return _context387.a(2)}},_callee387)})))});describe("when a seek is not pending",function(){describe("and seek time is within tolerance of currentTime",function(){it("no-ops",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee388(){return _regenerator().w(function(_context388){while(1)switch(_context388.n){case 0:enableSeekAutoComplete();setSeekable([[0,10]]);media.currentTime=5;_context388.n=1;return controller.seekTo(5.5,0.5);case 1:expect(controller.currentTime).toBe(5);case 2:return _context388.a(2)}},_callee388)})))})});it("times out after seekTimeout",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee389(){var seekExpectation;return _regenerator().w(function(_context389){while(1)switch(_context389.n){case 0:setSeekable([[0,100]]);seekExpectation=expectAsync(controller.seekTo(50)).toBeRejectedWithError("seek timed out on seeking event after 30s");_context389.n=1;return clock.tick(controller.options.seekTimeout);case 1:_context389.n=2;return seekExpectation;case 2:return _context389.a(2)}},_callee389)})));it("times out pending seeks after seekTimeout",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee390(){var pendingSeekExpectation;return _regenerator().w(function(_context390){while(1)switch(_context390.n){case 0:pendingSeekExpectation=expectAsync(controller.seekTo(60)).toBeRejectedWithError("seek timed out on seeking event after 30s");setSeekable([[0,100]]);_context390.n=1;return flushPromises();case 1:_context390.n=2;return clock.tick(controller.options.seekTimeout);case 2:_context390.n=3;return pendingSeekExpectation;case 3:return _context390.a(2)}},_callee390)})));it("aborts seek when media is emptied",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee391(){var seekExpectation;return _regenerator().w(function(_context391){while(1)switch(_context391.n){case 0:setSeekable([[0,100]]);seekExpectation=expectAsync(controller.seekTo(50)).toBeRejectedWithError(AbortError);media.dispatchEvent(mockEvent("seeking"));_context391.n=1;return flushPromises();case 1:media.dispatchEvent(mockEvent("emptied"));_context391.n=2;return seekExpectation;case 2:return _context391.a(2)}},_callee391)})));it("aborts seeks when controller is disposed",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee392(){var seekPromise,seekPromise2;return _regenerator().w(function(_context392){while(1)switch(_context392.n){case 0:setSeekable([[0,100]]);seekPromise=controller.seekTo(50);seekPromise2=controller.seekTo(100);controller.dispose();_context392.n=1;return expectAsync(seekPromise).toBeRejectedWithError(AbortError);case 1:_context392.n=2;return expectAsync(seekPromise2).toBeRejectedWithError(AbortError);case 2:return _context392.a(2)}},_callee392)})))});describe("when an error event is emitted",function(){describe("and media.error is set",function(){describe("and error is MEDIA_ERR_ABORTED",function(){it("does not report an error",function(){var errorSpy=createEventSpy(controller,"error");var mediaError=new MockMediaError;mediaError.code=mediaError.MEDIA_ERR_ABORTED;mediaError.message="Aborted";media.error=mediaError;media.dispatchEvent(mockEvent("error"));expect(errorSpy).not.toHaveBeenCalled()})});it("notifies of any playback error encountered",function(){var errorSpy=createEventSpy(controller,"error");var mediaError=new MockMediaError;mediaError.code=mediaError.MEDIA_ERR_DECODE;media.error=mediaError;media.dispatchEvent(mockEvent("error"));expect(errorSpy).toHaveBeenCalledOnceWith({target:controller,error:objectContaining18({code:mediaError.MEDIA_ERR_DECODE,reason:"MEDIA_ERR_DECODE",name:"ReportableMediaError",origin:ErrorOrigin.MEDIA,level:"fatal"/* FATAL */,message:"An error occurred while trying to decode the media resource."})})})})});describe("events",function(){it("re-emits unmodified events",function(){var abortSpy=createSpy27("abort");controller.on("abort",abortSpy);media.dispatchEvent(mockEvent("abort"));expect(abortSpy).toHaveBeenCalledWith({});var loadedDataSpy=createSpy27("loadedData");controller.on("loadedData",loadedDataSpy);media.dispatchEvent(mockEvent("loadeddata"));expect(loadedDataSpy).toHaveBeenCalledWith({});var loadStartSpy=createSpy27("loadStart");controller.on("loadStart",loadStartSpy);media.dispatchEvent(mockEvent("loadstart"));expect(loadStartSpy).toHaveBeenCalledWith({});var playSpy=createSpy27("play");controller.on("play",playSpy);media.dispatchEvent(mockEvent("play"));expect(playSpy).toHaveBeenCalledWith({});var playingSpy=createSpy27("playing");controller.on("playing",playingSpy);media.dispatchEvent(mockEvent("playing"));expect(playingSpy).toHaveBeenCalledWith({});playingSpy.calls.reset();var pauseSpy=createSpy27("pause");controller.on("pause",pauseSpy);media.dispatchEvent(mockEvent("pause"));expect(pauseSpy).toHaveBeenCalledWith({});pauseSpy.calls.reset()});describe("durationChange",function(){it("emits a change event on media's durationchange",function(){var durationChangeSpy=createSpy27("durationChange");controller.on("durationChange",durationChangeSpy);media.duration=1;media.dispatchEvent(mockEvent("durationchange"));expect(durationChangeSpy).toHaveBeenCalledOnceWith({previous:0,current:1});durationChangeSpy.calls.reset();media.duration=5;media.dispatchEvent(mockEvent("durationchange"));expect(durationChangeSpy).toHaveBeenCalledOnceWith({previous:1,current:5})})});describe("volumeChange",function(){it("emits a change event on media's volumechange",function(){var volumeChangeSpy=createSpy27("volumeChange");controller.on("volumeChange",volumeChangeSpy);controller.volume=0.3;media.dispatchEvent(mockEvent("volumechange"));expect(volumeChangeSpy).toHaveBeenCalledOnceWith({previous:1,current:0.3});volumeChangeSpy.calls.reset();controller.volume=0.2;media.dispatchEvent(mockEvent("volumechange"));expect(volumeChangeSpy).toHaveBeenCalledOnceWith({previous:0.3,current:0.2})})});describe("playing events",function(){it("re-emit and set playing to true",function(){var playingSpy=createSpy27("playing");controller.on("playing",playingSpy);expect(controller.playing).toBeFalse();media.dispatchEvent(mockEvent("playing"));expect(playingSpy).toHaveBeenCalledOnceWith({});expect(controller.playing).toBeTrue()})});describe("looped",function(){var loopedSpy;beforeEach(function(){loopedSpy=createSpy27("looped");controller.on("looped",loopedSpy)});describe("on Firefox",function(){beforeEach(function(){setUserAgent("Firefox/120.0.0")});it("emits playing event on loop",function(){var playingSpy=createSpy27("playing");controller.on("playing",playingSpy);media.loop=true;media.paused=false;media.duration=10;media.currentTime=9.5;media.dispatchEvent(mockEvent("timeupdate"));media.currentTime=0;media.dispatchEvent(mockEvent("timeupdate"));expect(playingSpy).toHaveBeenCalledOnceWith({})})});describe("when playback seeks from near duration to zero",function(){describe("and loop is true",function(){it("sends out a looped event when necessary",function(){media.loop=true;media.paused=false;media.duration=10;media.currentTime=9.5;expect(loopedSpy).not.toHaveBeenCalled();media.dispatchEvent(mockEvent("timeupdate"));media.currentTime=0;media.dispatchEvent(mockEvent("timeupdate"));expect(loopedSpy).toHaveBeenCalledTimes(1)})});describe("and loop is false",function(){it("does not broadcast a looped event",function(){media.paused=false;media.duration=10;media.currentTime=9.5;expect(loopedSpy).not.toHaveBeenCalled();media.dispatchEvent(mockEvent("timeupdate"));media.currentTime=0;media.dispatchEvent(mockEvent("timeupdate"));expect(loopedSpy).not.toHaveBeenCalled()})})});describe("when playback seeks and is not from end to start",function(){it("does not emit a looped event",function(){media.paused=false;media.loop=true;media.duration=10;media.currentTime=7;expect(loopedSpy).not.toHaveBeenCalled();media.dispatchEvent(mockEvent("timeupdate"));media.currentTime=0;media.dispatchEvent(mockEvent("seeking"));media.dispatchEvent(mockEvent("seeked"));media.currentTime=5;media.dispatchEvent(mockEvent("seeking"));media.dispatchEvent(mockEvent("seeked"));expect(loopedSpy).not.toHaveBeenCalled()})});describe("when media is paused",function(){it("does not emit a looped event",function(){media.loop=true;media.paused=true;media.duration=10;media.currentTime=9.5;expect(loopedSpy).not.toHaveBeenCalled();media.dispatchEvent(mockEvent("timeupdate"));media.currentTime=0;media.dispatchEvent(mockEvent("timeupdate"));expect(loopedSpy).not.toHaveBeenCalled()})})});describe("mutedChange",function(){describe("after an volumechange event",function(){it("emits immediately if muted status has changed",function(){var spy=createSpy27("mutedChange");controller.on("mutedChange",spy);media.muted=false;media.dispatchEvent(mockEvent("volumechange"));expect(spy).not.toHaveBeenCalled();media.muted=true;media.dispatchEvent(mockEvent("volumechange"));expect(spy).toHaveBeenCalledOnceWith({previous:false,current:true})});it("checks after an interval if mute remains unchanged",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee393(){var spy;return _regenerator().w(function(_context393){while(1)switch(_context393.n){case 0:spy=createSpy27("mutedChange");controller.on("mutedChange",spy);media.muted=false;media.dispatchEvent(mockEvent("volumechange"));_context393.n=1;return clock.tick(0);case 1:expect(spy).not.toHaveBeenCalled();media.dispatchEvent(mockEvent("volumechange"));media.muted=true;_context393.n=2;return clock.tick(0.2);case 2:expect(spy).toHaveBeenCalledOnceWith({previous:false,current:true});case 3:return _context393.a(2)}},_callee393)})))});describe("when disposed",function(){it("avoids dispatching a mutedChange event without cause",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee394(){var spy;return _regenerator().w(function(_context394){while(1)switch(_context394.n){case 0:spy=createSpy27("mutedChange");controller.on("mutedChange",spy);media.dispatchEvent(mockEvent("volumechange"));media.muted=true;controller.dispose();_context394.n=1;return clock.tick(0);case 1:expect(spy).not.toHaveBeenCalled();case 2:return _context394.a(2)}},_callee394)})))})});describe("played",function(){it("triggers event following any cessation of playback",function(){var playedSpy=createSpy27("played");controller.on("played",playedSpy);expect(controller.playing).toBeFalse();media.dispatchEvent(mockEvent("seeking"));media.dispatchEvent(mockEvent("seeked"));expect(controller.playing).toBeFalse();expect(playedSpy).not.toHaveBeenCalled();clock.mockDate(/* @__PURE__ */new Date(11e3));media.currentTime=10;media.dispatchEvent(mockEvent("playing"));expect(controller.playing).toBeTrue();expect(playedSpy).not.toHaveBeenCalled();clock.mockDate(/* @__PURE__ */new Date(6e4));media.currentTime=30;media.dispatchEvent(mockEvent("seeking"));expect(playedSpy).toHaveBeenCalledOnceWith({started:11e3,ended:6e4,duration:49,reason:"seeking"/* SEEKING */,playbackTime:20});playedSpy.calls.reset();media.dispatchEvent(mockEvent("seeked"));expect(controller.playing).toBeFalse();clock.mockDate(/* @__PURE__ */new Date(13e3));media.currentTime=40;media.dispatchEvent(mockEvent("playing"));expect(controller.playing).toBeTrue();expect(playedSpy).not.toHaveBeenCalled();clock.mockDate(/* @__PURE__ */new Date(17e3));media.currentTime=53;media.dispatchEvent(mockEvent("ended"));expect(playedSpy).toHaveBeenCalledOnceWith({started:13e3,ended:17e3,duration:4,reason:"ended"/* ENDED */,playbackTime:13});expect(controller.playing).toBeFalse()});describe("when not playing",function(){it("prevents duplicate played events from being emitted",function(){var playedSpy=createSpy27("played");controller.on("played",playedSpy);media.dispatchEvent(mockEvent("playing"));expect(playedSpy).not.toHaveBeenCalled();media.dispatchEvent(mockEvent("seeking"));expect(playedSpy).toHaveBeenCalledTimes(1);playedSpy.calls.reset();media.dispatchEvent(mockEvent("seeking"));media.dispatchEvent(mockEvent("seeking"));expect(playedSpy).not.toHaveBeenCalled();media.dispatchEvent(mockEvent("playing"));media.dispatchEvent(mockEvent("pause"));expect(playedSpy).toHaveBeenCalledTimes(1);playedSpy.calls.reset();media.dispatchEvent(mockEvent("pause"));media.dispatchEvent(mockEvent("pause"));expect(playedSpy).not.toHaveBeenCalled()})})});describe("progress",function(){var MockProgressEvent=/*#__PURE__*/function(_MockEvent6){function MockProgressEvent(type,loaded,total){var _this148;_classCallCheck(this,MockProgressEvent);_this148=_callSuper(this,MockProgressEvent);__publicField(_this148,"type",type);__publicField(_this148,"loaded",loaded);__publicField(_this148,"total",total);_this148.type=type;return _this148}_inherits(MockProgressEvent,_MockEvent6);return _createClass(MockProgressEvent)}(MockEvent);it("emits updates on media's progress consistently",function(){var progressSpy=createSpy27("progress");controller.on("progress",progressSpy);media.dispatchEvent(new MockProgressEvent("progress",5,12));expect(progressSpy).toHaveBeenCalledOnceWith({loaded:5,total:12})})});describe("rateChange",function(){it("emits a change event on media's ratechange",function(){var rateChangeSpy=createSpy27("rateChange");controller.on("rateChange",rateChangeSpy);media.playbackRate=0.3;media.dispatchEvent(mockEvent("ratechange"));expect(rateChangeSpy).toHaveBeenCalledOnceWith({previous:0,current:0.3});rateChangeSpy.calls.reset();media.playbackRate=0.2;media.dispatchEvent(mockEvent("ratechange"));expect(rateChangeSpy).toHaveBeenCalledOnceWith({previous:0.3,current:0.2})})});describe("seeking",function(){it("returns true in the interim between seeking and seeked",function(){expect(controller.seeking).toBeFalse();media.dispatchEvent(mockEvent("seeking"));expect(controller.seeking).toBeTrue();media.dispatchEvent(mockEvent("seeked"));expect(controller.seeking).toBeFalse()})});describe("seeked",function(){it("announces media's seeked events with the seek duration",function(){var seekedSpy=createEventSpy(controller,"seeked");clock.mockDate(/* @__PURE__ */new Date(1e4));media.dispatchEvent(mockEvent("seeking"));clock.mockDate(/* @__PURE__ */new Date(6e4));expect(seekedSpy).not.toHaveBeenCalled();media.dispatchEvent(mockEvent("seeked"));expect(seekedSpy).toHaveBeenCalledOnceWith({started:1e4,ended:6e4,duration:50,reason:"seeked"})});it("avoids emitting if a seeked action occurred without a preceding seeking",function(){var seekedSpy=createEventSpy(controller,"seeked");media.dispatchEvent(mockEvent("seeked"));expect(seekedSpy).not.toHaveBeenCalled()})});describe("timeUpdate",function(){it("emits a change event on media's timeupdate",function(){var timeUpdateSpy=createSpy27("timeUpdate");controller.on("timeUpdate",timeUpdateSpy);media.currentTime=1;media.dispatchEvent(mockEvent("timeupdate"));expect(timeUpdateSpy).toHaveBeenCalledOnceWith({previous:0,current:1});timeUpdateSpy.calls.reset();media.currentTime=5;media.dispatchEvent(mockEvent("timeupdate"));expect(timeUpdateSpy).toHaveBeenCalledOnceWith({previous:1,current:5})})});describe("waited",function(){it("triggers event after a specified wait completes",function(){expect(controller.waiting).toBeFalse();var waitedSpy=createSpy27("waited");controller.on("waited",waitedSpy);media.dispatchEvent(mockEvent("playing"));media.dispatchEvent(mockEvent("seeking"));media.dispatchEvent(mockEvent("seeked"));expect(waitedSpy).not.toHaveBeenCalled();clock.mockDate(/* @__PURE__ */new Date(1e4));media.dispatchEvent(mockEvent("waiting"));expect(controller.waiting).toBeTrue();expect(waitedSpy).not.toHaveBeenCalled();clock.mockDate(/* @__PURE__ */new Date(6e4));media.dispatchEvent(mockEvent("seeking"));expect(waitedSpy).toHaveBeenCalledOnceWith({started:1e4,ended:6e4,duration:50,reason:"seeking"/* SEEKING */});waitedSpy.calls.reset();media.dispatchEvent(mockEvent("seeking"));expect(waitedSpy).not.toHaveBeenCalled();media.dispatchEvent(mockEvent("waiting"));expect(controller.waiting).toBeTrue();media.dispatchEvent(mockEvent("emptied"));expect(controller.waiting).toBeFalse();expect(waitedSpy).toHaveBeenCalledOnceWith(objectContaining18({reason:"emptied"}));waitedSpy.calls.reset();media.dispatchEvent(mockEvent("waiting"));expect(controller.waiting).toBeTrue();media.dispatchEvent(mockEvent("pause"));expect(controller.waiting).toBeFalse();expect(waitedSpy).toHaveBeenCalledOnceWith(objectContaining18({reason:"pause"}));waitedSpy.calls.reset();media.dispatchEvent(mockEvent("pause"));expect(waitedSpy).not.toHaveBeenCalled()})})});describe("pause",function(){it("invokes pause on the element",function(){expect(media.pause).not.toHaveBeenCalled();controller.pause();expect(media.pause).toHaveBeenCalledTimes(1)});describe("when a play is pending",function(){it("aborts the play request",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee395(){var promise2;return _regenerator().w(function(_context395){while(1)switch(_context395.n){case 0:promise2=controller.play();expect(controller.playIsPending).toBeTrue();controller.pause();_context395.n=1;return expectAsync(promise2).toBeRejectedWith(objectContaining18({name:"AbortError",message:any20(String)}));case 1:expect(controller.playIsPending).toBeFalse();case 2:return _context395.a(2)}},_callee395)})))});it("resets the pending play",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee396(){var promise1,promise2;return _regenerator().w(function(_context396){while(1)switch(_context396.n){case 0:promise1=controller.play();_context396.n=1;return expectAsync(promise1).toBePending();case 1:expect(promise1).toBe(controller.play());controller.pause();_context396.n=2;return expectAsync(promise1).toBeRejected();case 2:promise2=controller.play();_context396.n=3;return expectAsync(promise2).toBePending();case 3:expect(promise2).not.toBe(promise1);controller.pause();_context396.n=4;return expectAsync(promise2).toBeRejected();case 4:return _context396.a(2)}},_callee396)})))});describe("play",function(){describe("when metadata is not loaded",function(){it("waits for metadata before play is invoked",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee397(){var playPromise;return _regenerator().w(function(_context397){while(1)switch(_context397.n){case 0:media.play.and.returnValue(Promise.resolve());playPromise=controller.play();_context397.n=1;return expectAsync(playPromise).toBePending();case 1:expect(media.play).not.toHaveBeenCalled();media.readyState=1/* HAVE_METADATA */;media.dispatchEvent(mockEvent("loadedmetadata"));_context397.n=2;return expectAsync(playPromise).toBeResolved();case 2:return _context397.a(2)}},_callee397)})));describe("and play is called again",function(){it("returns the same pending play promise",function(){var playPromise=controller.play();var playPromise2=controller.play();expect(playPromise).toBe(playPromise2)})})});describe("when media.play rejects",function(){it("emits playRejection event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee398(){var playRejectionSpy,error;return _regenerator().w(function(_context398){while(1)switch(_context398.n){case 0:media.readyState=1/* HAVE_METADATA */;playRejectionSpy=createSpy27("playRejection");controller.on("playRejected",playRejectionSpy);_context398.n=1;return controller.play();case 1:_context398.n=2;return clock.tick();case 2:expect(playRejectionSpy).not.toHaveBeenCalled();error=new Error("rejected");media.play.and.returnValue(Promise.reject(error));_context398.n=3;return controller.play()["catch"](function(_){});case 3:_context398.n=4;return clock.tick();case 4:expect(playRejectionSpy).toHaveBeenCalledOnceWith({reason:error});case 5:return _context398.a(2)}},_callee398)})))})});describe("duration",function(){it("returns media.duration",function(){media.duration=42;expect(controller.duration).toBe(42)});describe("when media.duration is at least LIVE_DURATION",function(){it("returns Number.POSITIVE_INFINITY",function(){media.duration=LIVE_DURATION;expect(controller.duration).toBe(Number.POSITIVE_INFINITY)})})});describe("currentTimePercent",function(){it("returns the current time as a percent of duration",function(){expect(controller.currentTimePercent).toBe(0);media.currentTime=50;media.duration=100;expect(controller.currentTimePercent).toEqual(0.5);media.duration=Number.NaN;expect(controller.currentTimePercent).toBe(0)})})});describe("reset",function(){var controller;beforeEach(function(){controller=new PlaybackControllerImpl({media:media,loudnessNormalizationController:loudnessNormalizationController})});it("does nothing when there is no error",function(){expect(controller.error).toBeNull();var resetSpy=createEventSpy(controller,"reset");controller.reset();expect(resetSpy).not.toHaveBeenCalled();expect(controller.error).toBeNull()});it("clears error and emits a reset event",function(){var mockError=new MockMediaError;mockError.code=2;media.error=mockError;media.dispatchEvent(mockEvent("error"));expect(controller.error).not.toBeNull();var resetSpy=createEventSpy(controller,"reset");controller.reset();expect(resetSpy).toHaveBeenCalledTimes(1);expect(controller.error).toBeNull()})})});describe("minSeekableBuffer default",function(){function testForUa(userAgent,expected){setUserAgent(userAgent);expect(new PlaybackControllerImpl({media:new MockHTMLAudioElement,loudnessNormalizationController:new MockLoudnessNormalizationController}).options.minSeekableBuffer).withContext("minSeekableBuffer").toEqual(expected)}it("is 2 for Chromium, and Edge Chromium browsers",function(){testForUa("Chrome/120 Edg/120",2);testForUa("Chrome/53.1.2",2);testForUa("Chrome/120.0.0",2)});it("is 5 for Edge Legacy, Firefox and Safari",function(){testForUa("Edge/18.0.0",5);testForUa("Version/17.0.0 Safari",5);testForUa("Firefox/53.1.2",5);testForUa("Firefox/120.0.0",5)})});describe("isNotAllowedError",function(){it("identifies a DOMException named NotAllowedError as true",function(){expect(isNotAllowedError(notAllowedError)).toBeTrue();expect(isNotAllowedError(notAuthorizedError)).toBeFalse();expect(isNotAllowedError(void 0)).toBeFalse()})})});// test/unit/playback/logging/playbackStateLoggingHandler.test.ts
|
|
1919
|
-
var any21=jasmine.any;describe("playbackStateLoggingHandler",function(){var playback;var clock=useMockTime();function playbackTick(_x92){return _playbackTick.apply(this,arguments)}function _playbackTick(){_playbackTick=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1918
|
+
var any20=jasmine.any;var createSpy27=jasmine.createSpy;var objectContaining18=jasmine.objectContaining;describe("PlaybackController",function(){var notAllowedError={name:"NotAllowedError"};var notAuthorizedError={name:"NotAuthorizedError"};var clock=useMockTime();var loggingRef=useMockLogger();describe("PlaybackControllerImpl",function(){var media;var loudnessNormalizationController;beforeEach(function(){media=new MockHTMLAudioElement;media.buffered=new MockTimeRanges;media.seekable=new MockTimeRanges;loudnessNormalizationController=new MockLoudnessNormalizationController;implementEventFakes(media);media.play.and.returnValue(Promise.resolve())});function testDelegate(controller,prop,value){if(Object.getOwnPropertyDescriptor(PlaybackControllerImpl.prototype,prop).set){controller[prop]=value;expect(media[prop]).toBe(value)};media[prop]=value;expect(controller[prop]).toBe(value)}describe("when loudness normalization controller emits change event",function(){var controller;var mockLoudnessController;beforeEach(function(){mockLoudnessController=new MockLoudnessNormalizationController;controller=new PlaybackControllerImpl({media:media,loudnessNormalizationController:mockLoudnessController})});it("media volume is refreshed",function(){controller.volume=0.8;expect(media.volume).toBe(0.8);mockLoudnessController.gain=0.5;mockLoudnessController.dispatch("change",{});expect(controller.volume).toBe(0.8);expect(media.volume).toBeCloseTo(0.4)})});describe("with standard options",function(){var controller;var mockLoudnessController;beforeEach(function(){mockLoudnessController=new MockLoudnessNormalizationController;controller=new PlaybackControllerImpl({media:media,loudnessNormalizationController:mockLoudnessController})});afterEach(function(){if(!controller.disposed)controller.dispose()});it("assigns properties, methods, and events directly to a media object",function(){expect(controller.buffered).toBeInstanceOf(ReadonlyRangesImpl);testDelegate(controller,"currentTime",2);testDelegate(controller,"duration",3);testDelegate(controller,"defaultPlaybackRate",2);testDelegate(controller,"ended",true);testDelegate(controller,"loop",true);testDelegate(controller,"muted",true);testDelegate(controller,"networkState",1);testDelegate(controller,"paused",true);testDelegate(controller,"playbackRate",2);testDelegate(controller,"preservesPitch",false);testDelegate(controller,"readyState",3);expect(controller.seekable).toBeInstanceOf(ReadonlyRangesImpl);testDelegate(controller,"volume",0)});describe("error",function(){it("is set on an error event",function(){expect(controller.error).toBeNull();var error=new MockMediaError;error.code=3;media.error=error;media.dispatchEvent(mockEvent("error"));expect(controller.error).toBeInstanceOf(ReportableMediaError);expect(controller.error).toEqual(objectContaining18({code:3}))});it("is null after a reset",function(){var error=new MockMediaError;error.code=3;media.error=error;media.dispatchEvent(mockEvent("error"));expect(controller.error).not.toBeNull();controller.reset();expect(controller.error).toBeNull()})});describe("hasMetadata",function(){it("returns true if readyState is at least HAVE_METADATA",function(){media.readyState=0/* HAVE_NOTHING */;expect(controller.hasMetadata).toBeFalse();media.readyState=1/* HAVE_METADATA */;expect(controller.hasMetadata).toBeTrue();media.readyState=2/* HAVE_CURRENT_DATA */;expect(controller.hasMetadata).toBeTrue()})});describe("canPlay",function(){it("returns true if readyState is at HAVE_FUTURE_DATA",function(){media.readyState=0/* HAVE_NOTHING */;expect(controller.canPlay).toBeFalse();media.readyState=3/* HAVE_FUTURE_DATA */;expect(controller.canPlay).toBeTrue();media.readyState=4/* HAVE_ENOUGH_DATA */;expect(controller.canPlay).toBeTrue()})});describe("canPlayThrough",function(){it("returns true if readyState is at HAVE_ENOUGH_DATA",function(){media.readyState=0/* HAVE_NOTHING */;expect(controller.canPlayThrough).toBeFalse();media.readyState=3/* HAVE_FUTURE_DATA */;expect(controller.canPlayThrough).toBeFalse();media.readyState=4/* HAVE_ENOUGH_DATA */;expect(controller.canPlayThrough).toBeTrue()})});describe("playIsPending",function(){it("returns true if a play promise is in a pending state",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee381(){var playPromise;return _regenerator().w(function(_context381){while(1)switch(_context381.n){case 0:media.readyState=1/* HAVE_METADATA */;playPromise=new Deferred;media.play.and.returnValue(playPromise);expect(controller.playIsPending).toBeFalse();void controller.play();_context381.n=1;return clock.tick();case 1:expect(controller.playIsPending).toBeTrue();playPromise.resolve(void 0);_context381.n=2;return clock.tick();case 2:expect(controller.playIsPending).toBeFalse();case 3:return _context381.a(2)}},_callee381)})))});describe("seekTo",function(){function setSeekable(ranges){media.readyState=1/* HAVE_METADATA */;media.dispatchEvent(mockEvent("loadedmetadata"));media.duration=last(ranges)[1];media.seekable=new MockTimeRanges(ranges)}function enableSeekAutoComplete(){var currentTime=0;Object.defineProperty(media,"currentTime",{get:function get(){return currentTime},set:function set(value){currentTime=value;media.dispatchEvent(mockEvent("seeking"));void _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee382(){return _regenerator().w(function(_context382){while(1)switch(_context382.n){case 0:_context382.n=1;return flushPromises();case 1:media.dispatchEvent(mockEvent("seeked"));case 2:return _context382.a(2)}},_callee382)}))()}})}it("waits for metadata before initiating seek",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee383(){var seeked;return _regenerator().w(function(_context383){while(1)switch(_context383.n){case 0:enableSeekAutoComplete();seeked=controller.seekTo(3);setSeekable([[0,10]]);expect(media.currentTime).toBe(0);_context383.n=1;return seeked;case 1:expect(media.currentTime).toBe(3);case 2:return _context383.a(2)}},_callee383)})));it("constrains seeks to allowable ranges within tolerance",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee384(){var minSeekableBuffer,unchangedTime;return _regenerator().w(function(_context384){while(1)switch(_context384.n){case 0:minSeekableBuffer=controller.options.minSeekableBuffer;enableSeekAutoComplete();setSeekable([[30,50],[70,100]]);_context384.n=1;return controller.seekTo(100.5);case 1:expect(media.currentTime).toBe(100-minSeekableBuffer);_context384.n=2;return controller.seekTo(29.5);case 2:expect(media.currentTime).toBe(30);_context384.n=3;return controller.seekTo(50.5);case 3:expect(media.currentTime).toBe(50-minSeekableBuffer);_context384.n=4;return controller.seekTo(69.8,0.2);case 4:expect(media.currentTime).toBe(70);_context384.n=5;return controller.seekTo(70);case 5:expect(media.currentTime).toBe(70);_context384.n=6;return controller.seekTo(200,110-100);case 6:expect(media.currentTime).toBeCloseToWithin(100-minSeekableBuffer);_context384.n=7;return controller.seekTo(-200,30);case 7:expect(media.currentTime).toBe(30);unchangedTime=media.currentTime;loggingRef.value.warn.calls.reset();_context384.n=8;return expectAsync(controller.seekTo(29,0.5)).toBeRejectedWithError("Could not seek to time: 29, outside of seekable ranges [[30, 50], [70, 100]] with tolerance 0.5");case 8:expect(loggingRef.value.warn).toHaveBeenCalledOnceWith(controller,"seekTo: seek outside of seekable ranges, seek ignored");loggingRef.value.warn.calls.reset();expect(media.currentTime).toBe(unchangedTime);case 9:return _context384.a(2)}},_callee384)})));describe("when there is no seekable range within tolerance after metadata",function(){it("logs warning messages when necessary",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee385(){return _regenerator().w(function(_context385){while(1)switch(_context385.n){case 0:enableSeekAutoComplete();setSeekable([[3,5],[100,120]]);_context385.n=1;return expectAsync(controller.seekTo(10)).toBeRejectedWithError("Could not seek to time: 10, outside of seekable ranges [[3, 5], [100, 120]] with tolerance 0.5");case 1:expect(loggingRef.value.warn).toHaveBeenCalledOnceWith(controller,"seekTo: seek outside of seekable ranges, seek ignored");case 2:return _context385.a(2)}},_callee385)})))});it("does not no-op if time is not within tolerance of seek time",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee386(){var pendingSeek1,pendingSeek2;return _regenerator().w(function(_context386){while(1)switch(_context386.n){case 0:enableSeekAutoComplete();pendingSeek1=controller.seekTo(3);pendingSeek2=controller.seekTo(3.5,0.4);setSeekable([[0,10]]);_context386.n=1;return expectAsync(pendingSeek1).toBeResolved();case 1:_context386.n=2;return expectAsync(pendingSeek2).toBeResolved();case 2:expect(controller.currentTime).toBe(3.5);case 3:return _context386.a(2)}},_callee386)})));describe("when a seek is pending",function(){describe("and seek time is within tolerance of pending seek time",function(){it("does not set media currentTime unnecessarily",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee387(){var pendingSeek1,pendingSeek2;return _regenerator().w(function(_context387){while(1)switch(_context387.n){case 0:setSeekable([[0,10]]);enableSeekAutoComplete();pendingSeek1=controller.seekTo(3,1);pendingSeek2=controller.seekTo(4,1);_context387.n=1;return pendingSeek1;case 1:_context387.n=2;return pendingSeek2;case 2:expect(media.currentTime).toEqual(3);case 3:return _context387.a(2)}},_callee387)})))});it("seeks to new location",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee388(){var firstSeek,secondSeek,thirdSeek;return _regenerator().w(function(_context388){while(1)switch(_context388.n){case 0:setSeekable([[0,100]]);enableSeekAutoComplete();firstSeek=controller.seekTo(10);secondSeek=controller.seekTo(20);thirdSeek=controller.seekTo(30);_context388.n=1;return expectAsync(firstSeek).toBePending();case 1:_context388.n=2;return secondSeek;case 2:_context388.n=3;return firstSeek;case 3:_context388.n=4;return expectAsync(thirdSeek).toBeResolved();case 4:expect(media.currentTime).toBe(30);case 5:return _context388.a(2)}},_callee388)})))});describe("when a seek is not pending",function(){describe("and seek time is within tolerance of currentTime",function(){it("no-ops",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee389(){return _regenerator().w(function(_context389){while(1)switch(_context389.n){case 0:enableSeekAutoComplete();setSeekable([[0,10]]);media.currentTime=5;_context389.n=1;return controller.seekTo(5.5,0.5);case 1:expect(controller.currentTime).toBe(5);case 2:return _context389.a(2)}},_callee389)})))})});it("times out after seekTimeout",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee390(){var seekExpectation;return _regenerator().w(function(_context390){while(1)switch(_context390.n){case 0:setSeekable([[0,100]]);seekExpectation=expectAsync(controller.seekTo(50)).toBeRejectedWithError("seek timed out on seeking event after 30s");_context390.n=1;return clock.tick(controller.options.seekTimeout);case 1:_context390.n=2;return seekExpectation;case 2:return _context390.a(2)}},_callee390)})));it("times out pending seeks after seekTimeout",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee391(){var pendingSeekExpectation;return _regenerator().w(function(_context391){while(1)switch(_context391.n){case 0:pendingSeekExpectation=expectAsync(controller.seekTo(60)).toBeRejectedWithError("seek timed out on seeking event after 30s");setSeekable([[0,100]]);_context391.n=1;return flushPromises();case 1:_context391.n=2;return clock.tick(controller.options.seekTimeout);case 2:_context391.n=3;return pendingSeekExpectation;case 3:return _context391.a(2)}},_callee391)})));it("aborts seek when media is emptied",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee392(){var seekExpectation;return _regenerator().w(function(_context392){while(1)switch(_context392.n){case 0:setSeekable([[0,100]]);seekExpectation=expectAsync(controller.seekTo(50)).toBeRejectedWithError(AbortError);media.dispatchEvent(mockEvent("seeking"));_context392.n=1;return flushPromises();case 1:media.dispatchEvent(mockEvent("emptied"));_context392.n=2;return seekExpectation;case 2:return _context392.a(2)}},_callee392)})));it("aborts seeks when controller is disposed",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee393(){var seekPromise,seekPromise2;return _regenerator().w(function(_context393){while(1)switch(_context393.n){case 0:setSeekable([[0,100]]);seekPromise=controller.seekTo(50);seekPromise2=controller.seekTo(100);controller.dispose();_context393.n=1;return expectAsync(seekPromise).toBeRejectedWithError(AbortError);case 1:_context393.n=2;return expectAsync(seekPromise2).toBeRejectedWithError(AbortError);case 2:return _context393.a(2)}},_callee393)})))});describe("when an error event is emitted",function(){describe("and media.error is set",function(){describe("and error is MEDIA_ERR_ABORTED",function(){it("does not report an error",function(){var errorSpy=createEventSpy(controller,"error");var mediaError=new MockMediaError;mediaError.code=mediaError.MEDIA_ERR_ABORTED;mediaError.message="Aborted";media.error=mediaError;media.dispatchEvent(mockEvent("error"));expect(errorSpy).not.toHaveBeenCalled()})});it("notifies of any playback error encountered",function(){var errorSpy=createEventSpy(controller,"error");var mediaError=new MockMediaError;mediaError.code=mediaError.MEDIA_ERR_DECODE;media.error=mediaError;media.dispatchEvent(mockEvent("error"));expect(errorSpy).toHaveBeenCalledOnceWith({target:controller,error:objectContaining18({code:mediaError.MEDIA_ERR_DECODE,reason:"MEDIA_ERR_DECODE",name:"ReportableMediaError",origin:ErrorOrigin.MEDIA,level:"fatal"/* FATAL */,message:"An error occurred while trying to decode the media resource."})})})})});describe("events",function(){it("re-emits unmodified events",function(){var abortSpy=createSpy27("abort");controller.on("abort",abortSpy);media.dispatchEvent(mockEvent("abort"));expect(abortSpy).toHaveBeenCalledWith({});var loadedDataSpy=createSpy27("loadedData");controller.on("loadedData",loadedDataSpy);media.dispatchEvent(mockEvent("loadeddata"));expect(loadedDataSpy).toHaveBeenCalledWith({});var loadStartSpy=createSpy27("loadStart");controller.on("loadStart",loadStartSpy);media.dispatchEvent(mockEvent("loadstart"));expect(loadStartSpy).toHaveBeenCalledWith({});var playSpy=createSpy27("play");controller.on("play",playSpy);media.dispatchEvent(mockEvent("play"));expect(playSpy).toHaveBeenCalledWith({});var playingSpy=createSpy27("playing");controller.on("playing",playingSpy);media.dispatchEvent(mockEvent("playing"));expect(playingSpy).toHaveBeenCalledWith({});playingSpy.calls.reset();var pauseSpy=createSpy27("pause");controller.on("pause",pauseSpy);media.dispatchEvent(mockEvent("pause"));expect(pauseSpy).toHaveBeenCalledWith({});pauseSpy.calls.reset()});describe("durationChange",function(){it("emits a change event on media's durationchange",function(){var durationChangeSpy=createSpy27("durationChange");controller.on("durationChange",durationChangeSpy);media.duration=1;media.dispatchEvent(mockEvent("durationchange"));expect(durationChangeSpy).toHaveBeenCalledOnceWith({previous:0,current:1});durationChangeSpy.calls.reset();media.duration=5;media.dispatchEvent(mockEvent("durationchange"));expect(durationChangeSpy).toHaveBeenCalledOnceWith({previous:1,current:5})})});describe("volumeChange",function(){it("emits a change event on media's volumechange",function(){var volumeChangeSpy=createSpy27("volumeChange");controller.on("volumeChange",volumeChangeSpy);controller.volume=0.3;media.dispatchEvent(mockEvent("volumechange"));expect(volumeChangeSpy).toHaveBeenCalledOnceWith({previous:1,current:0.3});volumeChangeSpy.calls.reset();controller.volume=0.2;media.dispatchEvent(mockEvent("volumechange"));expect(volumeChangeSpy).toHaveBeenCalledOnceWith({previous:0.3,current:0.2})})});describe("playing events",function(){it("re-emit and set playing to true",function(){var playingSpy=createSpy27("playing");controller.on("playing",playingSpy);expect(controller.playing).toBeFalse();media.dispatchEvent(mockEvent("playing"));expect(playingSpy).toHaveBeenCalledOnceWith({});expect(controller.playing).toBeTrue()})});describe("looped",function(){var loopedSpy;beforeEach(function(){loopedSpy=createSpy27("looped");controller.on("looped",loopedSpy)});describe("on Firefox",function(){beforeEach(function(){setUserAgent("Firefox/120.0.0")});it("emits playing event on loop",function(){var playingSpy=createSpy27("playing");controller.on("playing",playingSpy);media.loop=true;media.paused=false;media.duration=10;media.currentTime=9.5;media.dispatchEvent(mockEvent("timeupdate"));media.currentTime=0;media.dispatchEvent(mockEvent("timeupdate"));expect(playingSpy).toHaveBeenCalledOnceWith({})})});describe("when playback seeks from near duration to zero",function(){describe("and loop is true",function(){it("sends out a looped event when necessary",function(){media.loop=true;media.paused=false;media.duration=10;media.currentTime=9.5;expect(loopedSpy).not.toHaveBeenCalled();media.dispatchEvent(mockEvent("timeupdate"));media.currentTime=0;media.dispatchEvent(mockEvent("timeupdate"));expect(loopedSpy).toHaveBeenCalledTimes(1)})});describe("and loop is false",function(){it("does not broadcast a looped event",function(){media.paused=false;media.duration=10;media.currentTime=9.5;expect(loopedSpy).not.toHaveBeenCalled();media.dispatchEvent(mockEvent("timeupdate"));media.currentTime=0;media.dispatchEvent(mockEvent("timeupdate"));expect(loopedSpy).not.toHaveBeenCalled()})})});describe("when playback seeks and is not from end to start",function(){it("does not emit a looped event",function(){media.paused=false;media.loop=true;media.duration=10;media.currentTime=7;expect(loopedSpy).not.toHaveBeenCalled();media.dispatchEvent(mockEvent("timeupdate"));media.currentTime=0;media.dispatchEvent(mockEvent("seeking"));media.dispatchEvent(mockEvent("seeked"));media.currentTime=5;media.dispatchEvent(mockEvent("seeking"));media.dispatchEvent(mockEvent("seeked"));expect(loopedSpy).not.toHaveBeenCalled()})});describe("when media is paused",function(){it("does not emit a looped event",function(){media.loop=true;media.paused=true;media.duration=10;media.currentTime=9.5;expect(loopedSpy).not.toHaveBeenCalled();media.dispatchEvent(mockEvent("timeupdate"));media.currentTime=0;media.dispatchEvent(mockEvent("timeupdate"));expect(loopedSpy).not.toHaveBeenCalled()})})});describe("mutedChange",function(){describe("after an volumechange event",function(){it("emits immediately if muted status has changed",function(){var spy=createSpy27("mutedChange");controller.on("mutedChange",spy);media.muted=false;media.dispatchEvent(mockEvent("volumechange"));expect(spy).not.toHaveBeenCalled();media.muted=true;media.dispatchEvent(mockEvent("volumechange"));expect(spy).toHaveBeenCalledOnceWith({previous:false,current:true})});it("checks after an interval if mute remains unchanged",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee394(){var spy;return _regenerator().w(function(_context394){while(1)switch(_context394.n){case 0:spy=createSpy27("mutedChange");controller.on("mutedChange",spy);media.muted=false;media.dispatchEvent(mockEvent("volumechange"));_context394.n=1;return clock.tick(0);case 1:expect(spy).not.toHaveBeenCalled();media.dispatchEvent(mockEvent("volumechange"));media.muted=true;_context394.n=2;return clock.tick(0.2);case 2:expect(spy).toHaveBeenCalledOnceWith({previous:false,current:true});case 3:return _context394.a(2)}},_callee394)})))});describe("when disposed",function(){it("avoids dispatching a mutedChange event without cause",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee395(){var spy;return _regenerator().w(function(_context395){while(1)switch(_context395.n){case 0:spy=createSpy27("mutedChange");controller.on("mutedChange",spy);media.dispatchEvent(mockEvent("volumechange"));media.muted=true;controller.dispose();_context395.n=1;return clock.tick(0);case 1:expect(spy).not.toHaveBeenCalled();case 2:return _context395.a(2)}},_callee395)})))})});describe("played",function(){it("triggers event following any cessation of playback",function(){var playedSpy=createSpy27("played");controller.on("played",playedSpy);expect(controller.playing).toBeFalse();media.dispatchEvent(mockEvent("seeking"));media.dispatchEvent(mockEvent("seeked"));expect(controller.playing).toBeFalse();expect(playedSpy).not.toHaveBeenCalled();clock.mockDate(/* @__PURE__ */new Date(11e3));media.currentTime=10;media.dispatchEvent(mockEvent("playing"));expect(controller.playing).toBeTrue();expect(playedSpy).not.toHaveBeenCalled();clock.mockDate(/* @__PURE__ */new Date(6e4));media.currentTime=30;media.dispatchEvent(mockEvent("seeking"));expect(playedSpy).toHaveBeenCalledOnceWith({started:11e3,ended:6e4,duration:49,reason:"seeking"/* SEEKING */,playbackTime:20});playedSpy.calls.reset();media.dispatchEvent(mockEvent("seeked"));expect(controller.playing).toBeFalse();clock.mockDate(/* @__PURE__ */new Date(13e3));media.currentTime=40;media.dispatchEvent(mockEvent("playing"));expect(controller.playing).toBeTrue();expect(playedSpy).not.toHaveBeenCalled();clock.mockDate(/* @__PURE__ */new Date(17e3));media.currentTime=53;media.dispatchEvent(mockEvent("ended"));expect(playedSpy).toHaveBeenCalledOnceWith({started:13e3,ended:17e3,duration:4,reason:"ended"/* ENDED */,playbackTime:13});expect(controller.playing).toBeFalse()});describe("when not playing",function(){it("prevents duplicate played events from being emitted",function(){var playedSpy=createSpy27("played");controller.on("played",playedSpy);media.dispatchEvent(mockEvent("playing"));expect(playedSpy).not.toHaveBeenCalled();media.dispatchEvent(mockEvent("seeking"));expect(playedSpy).toHaveBeenCalledTimes(1);playedSpy.calls.reset();media.dispatchEvent(mockEvent("seeking"));media.dispatchEvent(mockEvent("seeking"));expect(playedSpy).not.toHaveBeenCalled();media.dispatchEvent(mockEvent("playing"));media.dispatchEvent(mockEvent("pause"));expect(playedSpy).toHaveBeenCalledTimes(1);playedSpy.calls.reset();media.dispatchEvent(mockEvent("pause"));media.dispatchEvent(mockEvent("pause"));expect(playedSpy).not.toHaveBeenCalled()})})});describe("progress",function(){var MockProgressEvent=/*#__PURE__*/function(_MockEvent6){function MockProgressEvent(type,loaded,total){var _this148;_classCallCheck(this,MockProgressEvent);_this148=_callSuper(this,MockProgressEvent);__publicField(_this148,"type",type);__publicField(_this148,"loaded",loaded);__publicField(_this148,"total",total);_this148.type=type;return _this148}_inherits(MockProgressEvent,_MockEvent6);return _createClass(MockProgressEvent)}(MockEvent);it("emits updates on media's progress consistently",function(){var progressSpy=createSpy27("progress");controller.on("progress",progressSpy);media.dispatchEvent(new MockProgressEvent("progress",5,12));expect(progressSpy).toHaveBeenCalledOnceWith({loaded:5,total:12})})});describe("rateChange",function(){it("emits a change event on media's ratechange",function(){var rateChangeSpy=createSpy27("rateChange");controller.on("rateChange",rateChangeSpy);media.playbackRate=0.3;media.dispatchEvent(mockEvent("ratechange"));expect(rateChangeSpy).toHaveBeenCalledOnceWith({previous:0,current:0.3});rateChangeSpy.calls.reset();media.playbackRate=0.2;media.dispatchEvent(mockEvent("ratechange"));expect(rateChangeSpy).toHaveBeenCalledOnceWith({previous:0.3,current:0.2})})});describe("seeking",function(){it("returns true in the interim between seeking and seeked",function(){expect(controller.seeking).toBeFalse();media.dispatchEvent(mockEvent("seeking"));expect(controller.seeking).toBeTrue();media.dispatchEvent(mockEvent("seeked"));expect(controller.seeking).toBeFalse()})});describe("seeked",function(){it("announces media's seeked events with the seek duration",function(){var seekedSpy=createEventSpy(controller,"seeked");clock.mockDate(/* @__PURE__ */new Date(1e4));media.dispatchEvent(mockEvent("seeking"));clock.mockDate(/* @__PURE__ */new Date(6e4));expect(seekedSpy).not.toHaveBeenCalled();media.dispatchEvent(mockEvent("seeked"));expect(seekedSpy).toHaveBeenCalledOnceWith({started:1e4,ended:6e4,duration:50,reason:"seeked"})});it("avoids emitting if a seeked action occurred without a preceding seeking",function(){var seekedSpy=createEventSpy(controller,"seeked");media.dispatchEvent(mockEvent("seeked"));expect(seekedSpy).not.toHaveBeenCalled()})});describe("timeUpdate",function(){it("emits a change event on media's timeupdate",function(){var timeUpdateSpy=createSpy27("timeUpdate");controller.on("timeUpdate",timeUpdateSpy);media.currentTime=1;media.dispatchEvent(mockEvent("timeupdate"));expect(timeUpdateSpy).toHaveBeenCalledOnceWith({previous:0,current:1});timeUpdateSpy.calls.reset();media.currentTime=5;media.dispatchEvent(mockEvent("timeupdate"));expect(timeUpdateSpy).toHaveBeenCalledOnceWith({previous:1,current:5})})});describe("waited",function(){it("triggers event after a specified wait completes",function(){expect(controller.waiting).toBeFalse();var waitedSpy=createSpy27("waited");controller.on("waited",waitedSpy);media.dispatchEvent(mockEvent("playing"));media.dispatchEvent(mockEvent("seeking"));media.dispatchEvent(mockEvent("seeked"));expect(waitedSpy).not.toHaveBeenCalled();clock.mockDate(/* @__PURE__ */new Date(1e4));media.dispatchEvent(mockEvent("waiting"));expect(controller.waiting).toBeTrue();expect(waitedSpy).not.toHaveBeenCalled();clock.mockDate(/* @__PURE__ */new Date(6e4));media.dispatchEvent(mockEvent("seeking"));expect(waitedSpy).toHaveBeenCalledOnceWith({started:1e4,ended:6e4,duration:50,reason:"seeking"/* SEEKING */});waitedSpy.calls.reset();media.dispatchEvent(mockEvent("seeking"));expect(waitedSpy).not.toHaveBeenCalled();media.dispatchEvent(mockEvent("waiting"));expect(controller.waiting).toBeTrue();media.dispatchEvent(mockEvent("emptied"));expect(controller.waiting).toBeFalse();expect(waitedSpy).toHaveBeenCalledOnceWith(objectContaining18({reason:"emptied"}));waitedSpy.calls.reset();media.dispatchEvent(mockEvent("waiting"));expect(controller.waiting).toBeTrue();media.dispatchEvent(mockEvent("pause"));expect(controller.waiting).toBeFalse();expect(waitedSpy).toHaveBeenCalledOnceWith(objectContaining18({reason:"pause"}));waitedSpy.calls.reset();media.dispatchEvent(mockEvent("pause"));expect(waitedSpy).not.toHaveBeenCalled()})})});describe("pause",function(){it("invokes pause on the element",function(){expect(media.pause).not.toHaveBeenCalled();controller.pause();expect(media.pause).toHaveBeenCalledTimes(1)});describe("when a play is pending",function(){it("aborts the play request",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee396(){var promise2;return _regenerator().w(function(_context396){while(1)switch(_context396.n){case 0:promise2=controller.play();expect(controller.playIsPending).toBeTrue();controller.pause();_context396.n=1;return expectAsync(promise2).toBeRejectedWith(objectContaining18({name:"AbortError",message:any20(String)}));case 1:expect(controller.playIsPending).toBeFalse();case 2:return _context396.a(2)}},_callee396)})))});it("resets the pending play",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee397(){var promise1,promise2;return _regenerator().w(function(_context397){while(1)switch(_context397.n){case 0:promise1=controller.play();_context397.n=1;return expectAsync(promise1).toBePending();case 1:expect(promise1).toBe(controller.play());controller.pause();_context397.n=2;return expectAsync(promise1).toBeRejected();case 2:promise2=controller.play();_context397.n=3;return expectAsync(promise2).toBePending();case 3:expect(promise2).not.toBe(promise1);controller.pause();_context397.n=4;return expectAsync(promise2).toBeRejected();case 4:return _context397.a(2)}},_callee397)})))});describe("play",function(){describe("when metadata is not loaded",function(){it("waits for metadata before play is invoked",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee398(){var playPromise;return _regenerator().w(function(_context398){while(1)switch(_context398.n){case 0:media.play.and.returnValue(Promise.resolve());playPromise=controller.play();_context398.n=1;return expectAsync(playPromise).toBePending();case 1:expect(media.play).not.toHaveBeenCalled();media.readyState=1/* HAVE_METADATA */;media.dispatchEvent(mockEvent("loadedmetadata"));_context398.n=2;return expectAsync(playPromise).toBeResolved();case 2:return _context398.a(2)}},_callee398)})));describe("and play is called again",function(){it("returns the same pending play promise",function(){var playPromise=controller.play();var playPromise2=controller.play();expect(playPromise).toBe(playPromise2)})})});describe("when media.play rejects",function(){it("emits playRejection event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee399(){var playRejectionSpy,error;return _regenerator().w(function(_context399){while(1)switch(_context399.n){case 0:media.readyState=1/* HAVE_METADATA */;playRejectionSpy=createSpy27("playRejection");controller.on("playRejected",playRejectionSpy);_context399.n=1;return controller.play();case 1:_context399.n=2;return clock.tick();case 2:expect(playRejectionSpy).not.toHaveBeenCalled();error=new Error("rejected");media.play.and.returnValue(Promise.reject(error));_context399.n=3;return controller.play()["catch"](function(_){});case 3:_context399.n=4;return clock.tick();case 4:expect(playRejectionSpy).toHaveBeenCalledOnceWith({reason:error});case 5:return _context399.a(2)}},_callee399)})))})});describe("duration",function(){it("returns media.duration",function(){media.duration=42;expect(controller.duration).toBe(42)});describe("when media.duration is at least LIVE_DURATION",function(){it("returns Number.POSITIVE_INFINITY",function(){media.duration=LIVE_DURATION;expect(controller.duration).toBe(Number.POSITIVE_INFINITY)})})});describe("currentTimePercent",function(){it("returns the current time as a percent of duration",function(){expect(controller.currentTimePercent).toBe(0);media.currentTime=50;media.duration=100;expect(controller.currentTimePercent).toEqual(0.5);media.duration=Number.NaN;expect(controller.currentTimePercent).toBe(0)})})});describe("reset",function(){var controller;beforeEach(function(){controller=new PlaybackControllerImpl({media:media,loudnessNormalizationController:loudnessNormalizationController})});it("does nothing when there is no error",function(){expect(controller.error).toBeNull();var resetSpy=createEventSpy(controller,"reset");controller.reset();expect(resetSpy).not.toHaveBeenCalled();expect(controller.error).toBeNull()});it("clears error and emits a reset event",function(){var mockError=new MockMediaError;mockError.code=2;media.error=mockError;media.dispatchEvent(mockEvent("error"));expect(controller.error).not.toBeNull();var resetSpy=createEventSpy(controller,"reset");controller.reset();expect(resetSpy).toHaveBeenCalledTimes(1);expect(controller.error).toBeNull()})})});describe("minSeekableBuffer default",function(){function testForUa(userAgent,expected){setUserAgent(userAgent);expect(new PlaybackControllerImpl({media:new MockHTMLAudioElement,loudnessNormalizationController:new MockLoudnessNormalizationController}).options.minSeekableBuffer).withContext("minSeekableBuffer").toEqual(expected)}it("is 2 for Chromium, and Edge Chromium browsers",function(){testForUa("Chrome/120 Edg/120",2);testForUa("Chrome/53.1.2",2);testForUa("Chrome/120.0.0",2)});it("is 5 for Edge Legacy, Firefox and Safari",function(){testForUa("Edge/18.0.0",5);testForUa("Version/17.0.0 Safari",5);testForUa("Firefox/53.1.2",5);testForUa("Firefox/120.0.0",5)})});describe("isNotAllowedError",function(){it("identifies a DOMException named NotAllowedError as true",function(){expect(isNotAllowedError(notAllowedError)).toBeTrue();expect(isNotAllowedError(notAuthorizedError)).toBeFalse();expect(isNotAllowedError(void 0)).toBeFalse()})})});// test/unit/playback/logging/playbackStateLoggingHandler.test.ts
|
|
1919
|
+
var any21=jasmine.any;describe("playbackStateLoggingHandler",function(){var playback;var clock=useMockTime();function playbackTick(_x92){return _playbackTick.apply(this,arguments)}function _playbackTick(){_playbackTick=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee403(timeDelta){return _regenerator().w(function(_context403){while(1)switch(_context403.n){case 0:playback.currentTime+=timeDelta;_context403.n=1;return clock.tick(timeDelta);case 1:playback.dispatch("timeUpdate",{});case 2:return _context403.a(2)}},_callee403)}));return _playbackTick.apply(this,arguments)}var loggerRef2=useMockLogger();beforeEach(function(){playback=new MockPlaybackController});describe("when initialized",function(){var loggingHandler;beforeEach(function(){loggingHandler=playbackStateLoggingHandler(playback)});afterEach(function(){loggingHandler.dispose()});it("records all playback events",function(){var logger=loggerRef2.value;playback.dispatch("play",{});expect(logger.debug).toHaveBeenCalledWith(any21(Object),"play",any21(Object));logger.debug.calls.reset();playback.dispatch("loadedMetadata",{});expect(logger.debug).toHaveBeenCalledWith(any21(Object),"loadedMetadata",any21(Object));logger.debug.calls.reset();playback.dispatch("abort",{});expect(logger.debug).toHaveBeenCalledWith(any21(Object),"abort",any21(Object))});describe("when timeUpdate events are emitted",function(){describe("and are uninterrupted and incremental",function(){it("accumulates timeUpdate events up to a defined TIMEUPDATE_THROTTLE limit",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee400(){var logger,i;return _regenerator().w(function(_context400){while(1)switch(_context400.n){case 0:logger=loggerRef2.value;logger.debug.calls.reset();_context400.n=1;return playbackTick(0);case 1:i=0;case 2:if(!(i<4)){_context400.n=4;break}_context400.n=3;return playbackTick(TIMEUPDATE_THROTTLE/5);case 3:i++;_context400.n=2;break;case 4:expect(logger.debug).not.toHaveBeenCalled();_context400.n=5;return playbackTick(TIMEUPDATE_THROTTLE/5);case 5:expect(logger.debug).toHaveBeenCalledWith(any21(Object),"timeUpdate 0.0-".concat(TIMEUPDATE_THROTTLE.toFixed(1)," x5"));logger.debug.calls.reset();case 6:return _context400.a(2)}},_callee400)})))});describe("and are interrupted by another event",function(){it("logs the batch preceding the current timeUpdate",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee401(){var logger;return _regenerator().w(function(_context401){while(1)switch(_context401.n){case 0:logger=loggerRef2.value;_context401.n=1;return playbackTick(2.234);case 1:_context401.n=2;return playbackTick(2.344);case 2:_context401.n=3;return playbackTick(1.95);case 3:playback.dispatch("seeked",{});expect(logger.debug).toHaveBeenCalledWith(any21(Object),"seeked",any21(Object));expect(logger.debug).toHaveBeenCalledWith(any21(Object),"timeUpdate 2.2-6.5 x3");case 4:return _context401.a(2)}},_callee401)})))})})});describe("when disposed",function(){it("detaches from events when no longer needed",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee402(){var loggingHandler,logger;return _regenerator().w(function(_context402){while(1)switch(_context402.n){case 0:loggingHandler=playbackStateLoggingHandler(playback);logger=loggerRef2.value;logger.debug.calls.reset();loggingHandler.dispose();_context402.n=1;return playbackTick(2.234);case 1:_context402.n=2;return playbackTick(2.344);case 2:_context402.n=3;return playbackTick(1.95);case 3:_context402.n=4;return clock.tick(100);case 4:playback.dispatch("seeked",{});expect(logger.debug).not.toHaveBeenCalled();case 5:return _context402.a(2)}},_callee402)})))})});// test/unit/playback/logging/mediaErrorToJson.test.ts
|
|
1920
1920
|
describe("mediaErrorToJson",function(){it("produces a serializable format of a MediaError",function(){var error=new MockMediaError;error.code=error.MEDIA_ERR_ABORTED;expect(mediaErrorToJson(error)).toEqual({message:"The requesting of the associated resource was aborted by the user's request.",code:1,name:"MEDIA_ERR_ABORTED"});error.code=error.MEDIA_ERR_NETWORK;expect(mediaErrorToJson(error)).toEqual({message:"A network error occurred.",code:2,name:"MEDIA_ERR_NETWORK"});error.code=error.MEDIA_ERR_DECODE;expect(mediaErrorToJson(error)).toEqual({message:"An error occurred while trying to decode the media resource.",code:3,name:"MEDIA_ERR_DECODE"});error.code=error.MEDIA_ERR_SRC_NOT_SUPPORTED;expect(mediaErrorToJson(error)).toEqual({message:"The associated resource was not supported.",code:4,name:"MEDIA_ERR_SRC_NOT_SUPPORTED"});expect(mediaErrorToJson(null)).toEqual({message:"An unknown media error has occurred.",code:-1,name:"UNKNOWN_MEDIA_ERROR"});error.code=5;expect(mediaErrorToJson(error)).toEqual({message:"An unknown media error has occurred.",code:5,name:"UNKNOWN_MEDIA_ERROR"})})});// test/unit/playback/error/ReportableMediaError.test.ts
|
|
1921
1921
|
var any22=jasmine.any;describe("ReportableMediaError",function(){it("is an instance of Error and ReportableMediaError",function(){expectPrototype(function(){return new ReportableMediaError(null)},ReportableMediaError,Error)});describe("constructor",function(){it("handles null MediaError with SILENT level",function(){var error=new ReportableMediaError(null);expect(error.level).toBe("silent"/* SILENT */);expect(error.origin).toBe(ErrorOrigin.MEDIA);expect(error.message).toBe("An unknown media error has occurred.");expect(error.reason).toBe("UNKNOWN_MEDIA_ERROR");expect(error.code).toBe(-1)});it("handles MEDIA_ERR_ABORTED with SILENT level",function(){var mediaError={code:1,MEDIA_ERR_ABORTED:1};var error=new ReportableMediaError(mediaError);expect(error.level).toBe("silent"/* SILENT */);expect(error.code).toBe(1);expect(error.reason).toBe("MEDIA_ERR_ABORTED")});it("handles other media errors with FATAL level",function(){var mediaError={code:2,MEDIA_ERR_NETWORK:2};var error=new ReportableMediaError(mediaError);expect(error.level).toBe("fatal"/* FATAL */);expect(error.code).toBe(2);expect(error.reason).toBe("MEDIA_ERR_NETWORK")})});describe("toJSON",function(){it("returns a serializable error representation",function(){var error=new ReportableMediaError(null);expect(error.toJSON()).toEqual({name:"ReportableMediaError",origin:ErrorOrigin.MEDIA,level:"silent"/* SILENT */,message:"An unknown media error has occurred.",stack:any22(String),reason:"UNKNOWN_MEDIA_ERROR",code:-1})})});describe("toStringTag",function(){it("returns the name",function(){expect(new ReportableMediaError(null)[Symbol.toStringTag]).toBe("ReportableMediaError")})});describe("static constants",function(){it("defines media error constants",function(){expect(ReportableMediaError.MEDIA_ERR_ABORTED).toBe(1);expect(ReportableMediaError.MEDIA_ERR_NETWORK).toBe(2);expect(ReportableMediaError.MEDIA_ERR_DECODE).toBe(3);expect(ReportableMediaError.MEDIA_ERR_SRC_NOT_SUPPORTED).toBe(4)})})});// test/unit/playback/error/InvalidSeekError.test.ts
|
|
1922
1922
|
var any23=jasmine.any;describe("InvalidSeekError",function(){it("is an instance of Error and InvalidSeekError",function(){expectPrototype(function(){return new InvalidSeekError(1,emptyRanges,1)},InvalidSeekError,ReportableError,Error)});describe("toJSON",function(){it("adds time and seekable ranges",function(){expect(new InvalidSeekError(3,rangesOf([[1,4],[6,8]]),1).toJSON()).toEqual({name:"InvalidSeekError",message:"Could not seek to time: 3, outside of seekable ranges [[1, 4], [6, 8]] with tolerance 1",time:3,level:"warn"/* WARN */,origin:ErrorOrigin.API,seekable:[[1,4],[6,8]],stack:any23(String)})})});describe("toStringTag",function(){it("returns the name",function(){expect(new InvalidSeekError(1,emptyRanges,1)[Symbol.toStringTag]).toBe("InvalidSeekError")})})});// test/unit/patch/media/patchMediaElement.test.ts
|
|
1923
1923
|
describe("patchMediaElement",function(){var logger=useMockLogger();it("applies patches based on the provided flags",function(){var media=new MockHTMLAudioElement;{logger.value.debug.calls.reset();var options={unreliablePlaybackEvents:true,preventStalls:true};var patchedRef=patchMediaElement(media,options);expect(logger.value.debug).toHaveBeenCalledTimes(Object.keys(options).length);patchedRef.dispose()}{logger.value.debug.calls.reset();var _options3={};var _patchedRef=patchMediaElement(media,_options3);expect(logger.value.debug).toHaveBeenCalledTimes(0);_patchedRef.dispose()}{logger.value.debug.calls.reset();var _patchedRef2=patchMediaElement(media,{});expect(logger.value.debug).toHaveBeenCalledTimes(0);_patchedRef2.dispose()}})});// test/unit/patch/media/MediaElementPatchOptions.test.ts
|
|
1924
1924
|
var any24=jasmine.any;var objectContaining19=jasmine.objectContaining;describe("defaultMediaElementPatchOptions",function(){afterEach(function(){defaultMediaElementPatchOptions.clear()});it("provides a value with the default patch flags",function(){expect(defaultMediaElementPatchOptions.value).toEqual(objectContaining19({unreliablePlaybackEvents:any24(Boolean)}))})});// test/unit/patch/media/patches/createUnreliablePlaybackEventsPatch.test.ts
|
|
1925
|
-
var createSpy28=jasmine.createSpy;describe("createUnreliablePlaybackEventsPatch",function(){var waitingSpy;var playingSpy;var canPlaySpy;var canPlayThroughSpy;var patchedMedia;var media;var patchedRef;var disposed=false;var clock=useMockTime();polyfillCustomEvent();beforeEach(function(){disposed=false;media=new MockHTMLAudioElement;media.playbackRate=1;implementEventFakes(media);media.play.and.returnValue(Promise.resolve());patchedRef=patchTarget(media,createUnreliablePlaybackEventsPatch);patchedMedia=patchedRef.patched;waitingSpy=createSpy28("waiting");patchedMedia.addEventListener("waiting",waitingSpy);playingSpy=createSpy28("playing");patchedMedia.addEventListener("playing",playingSpy);canPlaySpy=createSpy28("canplay");patchedMedia.addEventListener("canplay",canPlaySpy);canPlayThroughSpy=createSpy28("canplaythrough");patchedMedia.addEventListener("canplaythrough",canPlayThroughSpy)});afterEach(function(){if(!disposed)patchedRef.dispose()});function simulateTimeProgress(){return _simulateTimeProgress.apply(this,arguments)}function _simulateTimeProgress(){_simulateTimeProgress=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee430(){var n,i;return _regenerator().w(function(_context430){while(1)switch(_context430.n){case 0:n=Math.floor(MIN_PLAYING_BEFORE_FAB/UNRELIABLE_EVENTS_POLL_INTERVAL)+1;i=0;case 1:if(!(i<=n)){_context430.n=3;break}media.currentTime=i*UNRELIABLE_EVENTS_POLL_INTERVAL;_context430.n=2;return clock.tick(UNRELIABLE_EVENTS_POLL_INTERVAL);case 2:i++;_context430.n=1;break;case 3:return _context430.a(2)}},_callee430)}));return _simulateTimeProgress.apply(this,arguments)}function simulateTimeStalled(){return _simulateTimeStalled.apply(this,arguments)}function _simulateTimeStalled(){_simulateTimeStalled=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee431(){var n,i;return _regenerator().w(function(_context431){while(1)switch(_context431.n){case 0:n=Math.floor(MIN_STALLED_BEFORE_FAB/UNRELIABLE_EVENTS_POLL_INTERVAL)+1;i=0;case 1:if(!(i<=n)){_context431.n=3;break}_context431.n=2;return clock.tick(UNRELIABLE_EVENTS_POLL_INTERVAL);case 2:i++;_context431.n=1;break;case 3:return _context431.a(2)}},_callee431)}));return _simulateTimeStalled.apply(this,arguments)}describe("waiting",function(){describe("when playing",function(){beforeEach(function(){media.paused=false;media.readyState=media.HAVE_FUTURE_DATA;media.dispatchEvent(mockEvent("playing"))});describe("and playback is progressing",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee403(){return _regenerator().w(function(_context403){while(1)switch(_context403.n){case 0:_context403.n=1;return simulateTimeProgress();case 1:return _context403.a(2)}},_callee403)})));it("does not fabricate a waiting event",function(){expect(waitingSpy).not.toHaveBeenCalled()});describe("then playback is paused",function(){beforeEach(function(){media.paused=true});it("does not fabricate a waiting event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee404(){return _regenerator().w(function(_context404){while(1)switch(_context404.n){case 0:_context404.n=1;return simulateTimeStalled();case 1:expect(waitingSpy).not.toHaveBeenCalled();case 2:return _context404.a(2)}},_callee404)})))});describe("then playback is ended",function(){beforeEach(function(){media.ended=true});it("does not fabricate a waiting event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee405(){return _regenerator().w(function(_context405){while(1)switch(_context405.n){case 0:_context405.n=1;return simulateTimeStalled();case 1:expect(waitingSpy).not.toHaveBeenCalled();case 2:return _context405.a(2)}},_callee405)})))})});describe("when playback stalls",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee406(){return _regenerator().w(function(_context406){while(1)switch(_context406.n){case 0:media.paused=false;media.readyState=media.HAVE_FUTURE_DATA;media.dispatchEvent(mockEvent("playing"));_context406.n=1;return simulateTimeStalled();case 1:return _context406.a(2)}},_callee406)})));it("fabricates waiting event",function(){expect(waitingSpy).toHaveBeenCalledTimes(1)});it("overrides readyState to be at most HAVE_METADATA",function(){expect(patchedMedia.readyState).toEqual(media.HAVE_METADATA)});describe("then a real waiting event is observed",function(){it("does not emit an extra waiting event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee407(){return _regenerator().w(function(_context407){while(1)switch(_context407.n){case 0:waitingSpy.calls.reset();media.dispatchEvent(mockEvent("waiting"));expect(waitingSpy).not.toHaveBeenCalled();_context407.n=1;return simulateTimeStalled();case 1:expect(waitingSpy).not.toHaveBeenCalled();case 2:return _context407.a(2)}},_callee407)})))});describe("and playback resumes",function(){beforeEach(function(){playingSpy.calls.reset()});it("fabricates a playing event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee408(){return _regenerator().w(function(_context408){while(1)switch(_context408.n){case 0:_context408.n=1;return simulateTimeProgress();case 1:expect(canPlaySpy).toHaveBeenCalledTimes(1);canPlaySpy.calls.reset();expect(playingSpy).toHaveBeenCalledTimes(1);playingSpy.calls.reset();media.dispatchEvent(mockEvent("playing"));expect(playingSpy).not.toHaveBeenCalled();case 2:return _context408.a(2)}},_callee408)})));describe("and readyState is HAVE_FUTURE_DATA",function(){describe("when canplay or canplaythrough was not observed",function(){beforeEach(function(){media.readyState=media.HAVE_FUTURE_DATA});it("fabricates canplay",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee409(){return _regenerator().w(function(_context409){while(1)switch(_context409.n){case 0:_context409.n=1;return simulateTimeProgress();case 1:expect(canPlayThroughSpy).not.toHaveBeenCalled();expect(canPlaySpy).toHaveBeenCalledTimes(1);expect(playingSpy).toHaveBeenCalledTimes(1);expect(patchedMedia.readyState).toBe(media.HAVE_FUTURE_DATA);case 2:return _context409.a(2)}},_callee409)})));describe("then a real canplay event is observed",function(){it("does not emit canplay again",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee410(){return _regenerator().w(function(_context410){while(1)switch(_context410.n){case 0:_context410.n=1;return simulateTimeProgress();case 1:canPlaySpy.calls.reset();media.dispatchEvent(mockEvent("canplay"));expect(canPlaySpy).not.toHaveBeenCalled();case 2:return _context410.a(2)}},_callee410)})))})})});describe("and readyState is HAVE_ENOUGH_DATA",function(){beforeEach(function(){media.readyState=media.HAVE_ENOUGH_DATA});describe("when canplaythrough was not observed",function(){describe("when canplay was not observed",function(){it("fabricates canplay and canplaythrough",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee411(){return _regenerator().w(function(_context411){while(1)switch(_context411.n){case 0:_context411.n=1;return simulateTimeProgress();case 1:expect(canPlaySpy).toHaveBeenCalledTimes(1);expect(canPlayThroughSpy).toHaveBeenCalledTimes(1);expect(playingSpy).toHaveBeenCalledTimes(1);expect(patchedMedia.readyState).toBe(media.HAVE_ENOUGH_DATA);case 2:return _context411.a(2)}},_callee411)})))});describe("when canplay was observed",function(){beforeEach(function(){media.dispatchEvent(mockEvent("canplay"));canPlaySpy.calls.reset()});it("fabricates canplaythrough but not canplay",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee412(){return _regenerator().w(function(_context412){while(1)switch(_context412.n){case 0:_context412.n=1;return simulateTimeProgress();case 1:expect(canPlaySpy).not.toHaveBeenCalled();expect(canPlayThroughSpy).toHaveBeenCalledTimes(1);expect(playingSpy).toHaveBeenCalledTimes(1);expect(patchedMedia.readyState).toBe(media.HAVE_ENOUGH_DATA);case 2:return _context412.a(2)}},_callee412)})));describe("then a real canplaythrough event was observed",function(){it("does not emit canplaythrough a second time",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee413(){return _regenerator().w(function(_context413){while(1)switch(_context413.n){case 0:_context413.n=1;return simulateTimeProgress();case 1:canPlayThroughSpy.calls.reset();media.dispatchEvent(mockEvent("canplaythrough"));expect(canPlayThroughSpy).not.toHaveBeenCalled();case 2:return _context413.a(2)}},_callee413)})))})})});describe("when canplaythrough was observed",function(){beforeEach(function(){media.dispatchEvent(mockEvent("canplaythrough"));canPlayThroughSpy.calls.reset()});it("does not fabricate canplaythrough",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee414(){return _regenerator().w(function(_context414){while(1)switch(_context414.n){case 0:_context414.n=1;return simulateTimeProgress();case 1:expect(canPlaySpy).not.toHaveBeenCalled();expect(canPlayThroughSpy).not.toHaveBeenCalled();case 2:return _context414.a(2)}},_callee414)})))})});describe("then a real playing event is observed",function(){it("does not fabricate an extra playing event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee415(){return _regenerator().w(function(_context415){while(1)switch(_context415.n){case 0:playingSpy.calls.reset();media.dispatchEvent(mockEvent("waiting"));media.currentTime=0;_context415.n=1;return clock.tick(UNRELIABLE_EVENTS_POLL_INTERVAL);case 1:media.dispatchEvent(mockEvent("playing"));playingSpy.calls.reset();_context415.n=2;return simulateTimeProgress();case 2:expect(playingSpy).not.toHaveBeenCalled();case 3:return _context415.a(2)}},_callee415)})))})})});describe("then a waiting event is observed",function(){beforeEach(function(){media.dispatchEvent(mockEvent("waiting"));waitingSpy.calls.reset()});describe("then playback stalls",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee416(){return _regenerator().w(function(_context416){while(1)switch(_context416.n){case 0:_context416.n=1;return simulateTimeStalled();case 1:return _context416.a(2)}},_callee416)})));it("does not fabricate a waiting event",function(){expect(waitingSpy).not.toHaveBeenCalled()})})});describe("when a canplay event has been observed",function(){describe("when a canplay event has not been fabricated",function(){it("does not squelch the event",function(){media.dispatchEvent(mockEvent("canplay"));expect(canPlaySpy).toHaveBeenCalledTimes(1)})})});describe("when a canplaythrough event has been observed",function(){describe("when a canplaythrough event has not been fabricated",function(){it("does not squelch the event",function(){media.dispatchEvent(mockEvent("canplaythrough"));expect(canPlayThroughSpy).toHaveBeenCalledTimes(1)})})})});describe("when not playing",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee417(){return _regenerator().w(function(_context417){while(1)switch(_context417.n){case 0:media.paused=true;_context417.n=1;return simulateTimeStalled();case 1:return _context417.a(2)}},_callee417)})));it("does not fabricate a waiting event",function(){expect(waitingSpy).not.toHaveBeenCalled()});describe("then play is observed",function(){beforeEach(function(){media.paused=false;media.dispatchEvent(mockEvent("play"))});it("waits at least MIN_STALLED_BEFORE_FAB before allowing waiting fabrications",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee418(){return _regenerator().w(function(_context418){while(1)switch(_context418.n){case 0:expect(waitingSpy).not.toHaveBeenCalled();_context418.n=1;return clock.tick(MIN_STALLED_BEFORE_FAB-0.01);case 1:expect(waitingSpy).not.toHaveBeenCalled();_context418.n=2;return simulateTimeStalled();case 2:expect(waitingSpy).toHaveBeenCalledTimes(1);case 3:return _context418.a(2)}},_callee418)})))})});describe("when patch is disposed",function(){beforeEach(function(){disposed=true;patchedRef.dispose()});it("does not fabricate a waiting event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee419(){return _regenerator().w(function(_context419){while(1)switch(_context419.n){case 0:media.paused=false;media.readyState=media.HAVE_FUTURE_DATA;_context419.n=1;return simulateTimeStalled();case 1:expect(waitingSpy).not.toHaveBeenCalled();case 2:return _context419.a(2)}},_callee419)})));it("does not fabricate a playing event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee420(){return _regenerator().w(function(_context420){while(1)switch(_context420.n){case 0:media.paused=false;media.readyState=media.HAVE_FUTURE_DATA;_context420.n=1;return simulateTimeProgress();case 1:expect(playingSpy).not.toHaveBeenCalled();case 2:return _context420.a(2)}},_callee420)})))})});describe("playing",function(){describe("and playback is paused",function(){beforeEach(function(){media.paused=true});describe("and content is ready to play",function(){beforeEach(function(){media.readyState=media.HAVE_FUTURE_DATA});describe("and playback is detected",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee421(){return _regenerator().w(function(_context421){while(1)switch(_context421.n){case 0:_context421.n=1;return simulateTimeProgress();case 1:return _context421.a(2)}},_callee421)})));it("does not fabricate playing",function(){expect(playingSpy).not.toHaveBeenCalledTimes(1)})})})});describe("and playback is not paused",function(){beforeEach(function(){media.paused=false});describe("and content is ready to play",function(){beforeEach(function(){media.readyState=media.HAVE_FUTURE_DATA});describe("and playback is ended",function(){beforeEach(function(){media.ended=true});describe("and playback is detected",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee422(){return _regenerator().w(function(_context422){while(1)switch(_context422.n){case 0:_context422.n=1;return simulateTimeProgress();case 1:return _context422.a(2)}},_callee422)})));it("does not fabricate playing",function(){expect(playingSpy).not.toHaveBeenCalledTimes(1)})})});describe("and media is seeking",function(){describe("and playback is detected",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee423(){return _regenerator().w(function(_context423){while(1)switch(_context423.n){case 0:media.dispatchEvent(mockEvent("seeking"));_context423.n=1;return simulateTimeProgress();case 1:return _context423.a(2)}},_callee423)})));it("does not fabricate a playing event",function(){expect(playingSpy).not.toHaveBeenCalled()});describe("and media finishes seeking",function(){beforeEach(function(){media.dispatchEvent(mockEvent("seeked"))});it("fabricates a playing event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee424(){return _regenerator().w(function(_context424){while(1)switch(_context424.n){case 0:_context424.n=1;return simulateTimeProgress();case 1:expect(playingSpy).toHaveBeenCalledTimes(1);case 2:return _context424.a(2)}},_callee424)})))})})});describe("and playback is detected",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee425(){return _regenerator().w(function(_context425){while(1)switch(_context425.n){case 0:_context425.n=1;return simulateTimeProgress();case 1:return _context425.a(2)}},_callee425)})));it("fabricates a playing event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee426(){return _regenerator().w(function(_context426){while(1)switch(_context426.n){case 0:expect(playingSpy).toHaveBeenCalledTimes(1);playingSpy.calls.reset();media.dispatchEvent(mockEvent("playing"));expect(playingSpy).not.toHaveBeenCalled();_context426.n=1;return simulateTimeProgress();case 1:expect(playingSpy).not.toHaveBeenCalled();case 2:return _context426.a(2)}},_callee426)})))});describe("and real playback event is emitted",function(){it("does not squelch real playback event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee427(){return _regenerator().w(function(_context427){while(1)switch(_context427.n){case 0:media.dispatchEvent(mockEvent("playing"));expect(playingSpy).toHaveBeenCalledTimes(1);playingSpy.calls.reset();media.dispatchEvent(mockEvent("playing"));_context427.n=1;return simulateTimeProgress();case 1:expect(playingSpy).not.toHaveBeenCalled();case 2:return _context427.a(2)}},_callee427)})))})});describe("and content is buffering",function(){beforeEach(function(){media.readyState=media.HAVE_METADATA});describe("and playback is detected",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee428(){return _regenerator().w(function(_context428){while(1)switch(_context428.n){case 0:_context428.n=1;return simulateTimeProgress();case 1:return _context428.a(2)}},_callee428)})));it("does not fabricate a playing event",function(){expect(playingSpy).not.toHaveBeenCalled()});describe("then content buffers",function(){beforeEach(function(){media.readyState=media.HAVE_FUTURE_DATA;media.dispatchEvent(mockEvent("canplay"))});describe("and playback is detected",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee429(){return _regenerator().w(function(_context429){while(1)switch(_context429.n){case 0:_context429.n=1;return simulateTimeProgress();case 1:return _context429.a(2)}},_callee429)})));it("fabricates a playing event",function(){expect(playingSpy).toHaveBeenCalledTimes(1)})})})})})})})});describe("requiresUnreliablePlaybackEventsPatch",function(){function testForUa(userAgent,expected){setUserAgent(userAgent);expect(requiresUnreliablePlaybackEventsPatch()).withContext("requiresUnreliablePlayingEventsPatch").toEqual(expected)}it("is true when browser is Safari, Edge Legacy, or Chromium <= 53",function(){testForUa("Version/17.2.1 Safari/605.1.15",true);testForUa("Edge/18.0.0 Safari/605.1.15",true);testForUa("Edg/108.0.0 Safari/605.1.15",false);testForUa("Chrome/120.0.0",false);testForUa("Chrome/54.0.0",false);testForUa("Chrome/53.9.0",true)})});// test/unit/patch/media/patches/createPreventStallsPatch.test.ts
|
|
1925
|
+
var createSpy28=jasmine.createSpy;describe("createUnreliablePlaybackEventsPatch",function(){var waitingSpy;var playingSpy;var canPlaySpy;var canPlayThroughSpy;var patchedMedia;var media;var patchedRef;var disposed=false;var clock=useMockTime();polyfillCustomEvent();beforeEach(function(){disposed=false;media=new MockHTMLAudioElement;media.playbackRate=1;implementEventFakes(media);media.play.and.returnValue(Promise.resolve());patchedRef=patchTarget(media,createUnreliablePlaybackEventsPatch);patchedMedia=patchedRef.patched;waitingSpy=createSpy28("waiting");patchedMedia.addEventListener("waiting",waitingSpy);playingSpy=createSpy28("playing");patchedMedia.addEventListener("playing",playingSpy);canPlaySpy=createSpy28("canplay");patchedMedia.addEventListener("canplay",canPlaySpy);canPlayThroughSpy=createSpy28("canplaythrough");patchedMedia.addEventListener("canplaythrough",canPlayThroughSpy)});afterEach(function(){if(!disposed)patchedRef.dispose()});function simulateTimeProgress(){return _simulateTimeProgress.apply(this,arguments)}function _simulateTimeProgress(){_simulateTimeProgress=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee431(){var n,i;return _regenerator().w(function(_context431){while(1)switch(_context431.n){case 0:n=Math.floor(MIN_PLAYING_BEFORE_FAB/UNRELIABLE_EVENTS_POLL_INTERVAL)+1;i=0;case 1:if(!(i<=n)){_context431.n=3;break}media.currentTime=i*UNRELIABLE_EVENTS_POLL_INTERVAL;_context431.n=2;return clock.tick(UNRELIABLE_EVENTS_POLL_INTERVAL);case 2:i++;_context431.n=1;break;case 3:return _context431.a(2)}},_callee431)}));return _simulateTimeProgress.apply(this,arguments)}function simulateTimeStalled(){return _simulateTimeStalled.apply(this,arguments)}function _simulateTimeStalled(){_simulateTimeStalled=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee432(){var n,i;return _regenerator().w(function(_context432){while(1)switch(_context432.n){case 0:n=Math.floor(MIN_STALLED_BEFORE_FAB/UNRELIABLE_EVENTS_POLL_INTERVAL)+1;i=0;case 1:if(!(i<=n)){_context432.n=3;break}_context432.n=2;return clock.tick(UNRELIABLE_EVENTS_POLL_INTERVAL);case 2:i++;_context432.n=1;break;case 3:return _context432.a(2)}},_callee432)}));return _simulateTimeStalled.apply(this,arguments)}describe("waiting",function(){describe("when playing",function(){beforeEach(function(){media.paused=false;media.readyState=media.HAVE_FUTURE_DATA;media.dispatchEvent(mockEvent("playing"))});describe("and playback is progressing",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee404(){return _regenerator().w(function(_context404){while(1)switch(_context404.n){case 0:_context404.n=1;return simulateTimeProgress();case 1:return _context404.a(2)}},_callee404)})));it("does not fabricate a waiting event",function(){expect(waitingSpy).not.toHaveBeenCalled()});describe("then playback is paused",function(){beforeEach(function(){media.paused=true});it("does not fabricate a waiting event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee405(){return _regenerator().w(function(_context405){while(1)switch(_context405.n){case 0:_context405.n=1;return simulateTimeStalled();case 1:expect(waitingSpy).not.toHaveBeenCalled();case 2:return _context405.a(2)}},_callee405)})))});describe("then playback is ended",function(){beforeEach(function(){media.ended=true});it("does not fabricate a waiting event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee406(){return _regenerator().w(function(_context406){while(1)switch(_context406.n){case 0:_context406.n=1;return simulateTimeStalled();case 1:expect(waitingSpy).not.toHaveBeenCalled();case 2:return _context406.a(2)}},_callee406)})))})});describe("when playback stalls",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee407(){return _regenerator().w(function(_context407){while(1)switch(_context407.n){case 0:media.paused=false;media.readyState=media.HAVE_FUTURE_DATA;media.dispatchEvent(mockEvent("playing"));_context407.n=1;return simulateTimeStalled();case 1:return _context407.a(2)}},_callee407)})));it("fabricates waiting event",function(){expect(waitingSpy).toHaveBeenCalledTimes(1)});it("overrides readyState to be at most HAVE_METADATA",function(){expect(patchedMedia.readyState).toEqual(media.HAVE_METADATA)});describe("then a real waiting event is observed",function(){it("does not emit an extra waiting event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee408(){return _regenerator().w(function(_context408){while(1)switch(_context408.n){case 0:waitingSpy.calls.reset();media.dispatchEvent(mockEvent("waiting"));expect(waitingSpy).not.toHaveBeenCalled();_context408.n=1;return simulateTimeStalled();case 1:expect(waitingSpy).not.toHaveBeenCalled();case 2:return _context408.a(2)}},_callee408)})))});describe("and playback resumes",function(){beforeEach(function(){playingSpy.calls.reset()});it("fabricates a playing event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee409(){return _regenerator().w(function(_context409){while(1)switch(_context409.n){case 0:_context409.n=1;return simulateTimeProgress();case 1:expect(canPlaySpy).toHaveBeenCalledTimes(1);canPlaySpy.calls.reset();expect(playingSpy).toHaveBeenCalledTimes(1);playingSpy.calls.reset();media.dispatchEvent(mockEvent("playing"));expect(playingSpy).not.toHaveBeenCalled();case 2:return _context409.a(2)}},_callee409)})));describe("and readyState is HAVE_FUTURE_DATA",function(){describe("when canplay or canplaythrough was not observed",function(){beforeEach(function(){media.readyState=media.HAVE_FUTURE_DATA});it("fabricates canplay",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee410(){return _regenerator().w(function(_context410){while(1)switch(_context410.n){case 0:_context410.n=1;return simulateTimeProgress();case 1:expect(canPlayThroughSpy).not.toHaveBeenCalled();expect(canPlaySpy).toHaveBeenCalledTimes(1);expect(playingSpy).toHaveBeenCalledTimes(1);expect(patchedMedia.readyState).toBe(media.HAVE_FUTURE_DATA);case 2:return _context410.a(2)}},_callee410)})));describe("then a real canplay event is observed",function(){it("does not emit canplay again",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee411(){return _regenerator().w(function(_context411){while(1)switch(_context411.n){case 0:_context411.n=1;return simulateTimeProgress();case 1:canPlaySpy.calls.reset();media.dispatchEvent(mockEvent("canplay"));expect(canPlaySpy).not.toHaveBeenCalled();case 2:return _context411.a(2)}},_callee411)})))})})});describe("and readyState is HAVE_ENOUGH_DATA",function(){beforeEach(function(){media.readyState=media.HAVE_ENOUGH_DATA});describe("when canplaythrough was not observed",function(){describe("when canplay was not observed",function(){it("fabricates canplay and canplaythrough",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee412(){return _regenerator().w(function(_context412){while(1)switch(_context412.n){case 0:_context412.n=1;return simulateTimeProgress();case 1:expect(canPlaySpy).toHaveBeenCalledTimes(1);expect(canPlayThroughSpy).toHaveBeenCalledTimes(1);expect(playingSpy).toHaveBeenCalledTimes(1);expect(patchedMedia.readyState).toBe(media.HAVE_ENOUGH_DATA);case 2:return _context412.a(2)}},_callee412)})))});describe("when canplay was observed",function(){beforeEach(function(){media.dispatchEvent(mockEvent("canplay"));canPlaySpy.calls.reset()});it("fabricates canplaythrough but not canplay",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee413(){return _regenerator().w(function(_context413){while(1)switch(_context413.n){case 0:_context413.n=1;return simulateTimeProgress();case 1:expect(canPlaySpy).not.toHaveBeenCalled();expect(canPlayThroughSpy).toHaveBeenCalledTimes(1);expect(playingSpy).toHaveBeenCalledTimes(1);expect(patchedMedia.readyState).toBe(media.HAVE_ENOUGH_DATA);case 2:return _context413.a(2)}},_callee413)})));describe("then a real canplaythrough event was observed",function(){it("does not emit canplaythrough a second time",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee414(){return _regenerator().w(function(_context414){while(1)switch(_context414.n){case 0:_context414.n=1;return simulateTimeProgress();case 1:canPlayThroughSpy.calls.reset();media.dispatchEvent(mockEvent("canplaythrough"));expect(canPlayThroughSpy).not.toHaveBeenCalled();case 2:return _context414.a(2)}},_callee414)})))})})});describe("when canplaythrough was observed",function(){beforeEach(function(){media.dispatchEvent(mockEvent("canplaythrough"));canPlayThroughSpy.calls.reset()});it("does not fabricate canplaythrough",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee415(){return _regenerator().w(function(_context415){while(1)switch(_context415.n){case 0:_context415.n=1;return simulateTimeProgress();case 1:expect(canPlaySpy).not.toHaveBeenCalled();expect(canPlayThroughSpy).not.toHaveBeenCalled();case 2:return _context415.a(2)}},_callee415)})))})});describe("then a real playing event is observed",function(){it("does not fabricate an extra playing event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee416(){return _regenerator().w(function(_context416){while(1)switch(_context416.n){case 0:playingSpy.calls.reset();media.dispatchEvent(mockEvent("waiting"));media.currentTime=0;_context416.n=1;return clock.tick(UNRELIABLE_EVENTS_POLL_INTERVAL);case 1:media.dispatchEvent(mockEvent("playing"));playingSpy.calls.reset();_context416.n=2;return simulateTimeProgress();case 2:expect(playingSpy).not.toHaveBeenCalled();case 3:return _context416.a(2)}},_callee416)})))})})});describe("then a waiting event is observed",function(){beforeEach(function(){media.dispatchEvent(mockEvent("waiting"));waitingSpy.calls.reset()});describe("then playback stalls",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee417(){return _regenerator().w(function(_context417){while(1)switch(_context417.n){case 0:_context417.n=1;return simulateTimeStalled();case 1:return _context417.a(2)}},_callee417)})));it("does not fabricate a waiting event",function(){expect(waitingSpy).not.toHaveBeenCalled()})})});describe("when a canplay event has been observed",function(){describe("when a canplay event has not been fabricated",function(){it("does not squelch the event",function(){media.dispatchEvent(mockEvent("canplay"));expect(canPlaySpy).toHaveBeenCalledTimes(1)})})});describe("when a canplaythrough event has been observed",function(){describe("when a canplaythrough event has not been fabricated",function(){it("does not squelch the event",function(){media.dispatchEvent(mockEvent("canplaythrough"));expect(canPlayThroughSpy).toHaveBeenCalledTimes(1)})})})});describe("when not playing",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee418(){return _regenerator().w(function(_context418){while(1)switch(_context418.n){case 0:media.paused=true;_context418.n=1;return simulateTimeStalled();case 1:return _context418.a(2)}},_callee418)})));it("does not fabricate a waiting event",function(){expect(waitingSpy).not.toHaveBeenCalled()});describe("then play is observed",function(){beforeEach(function(){media.paused=false;media.dispatchEvent(mockEvent("play"))});it("waits at least MIN_STALLED_BEFORE_FAB before allowing waiting fabrications",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee419(){return _regenerator().w(function(_context419){while(1)switch(_context419.n){case 0:expect(waitingSpy).not.toHaveBeenCalled();_context419.n=1;return clock.tick(MIN_STALLED_BEFORE_FAB-0.01);case 1:expect(waitingSpy).not.toHaveBeenCalled();_context419.n=2;return simulateTimeStalled();case 2:expect(waitingSpy).toHaveBeenCalledTimes(1);case 3:return _context419.a(2)}},_callee419)})))})});describe("when patch is disposed",function(){beforeEach(function(){disposed=true;patchedRef.dispose()});it("does not fabricate a waiting event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee420(){return _regenerator().w(function(_context420){while(1)switch(_context420.n){case 0:media.paused=false;media.readyState=media.HAVE_FUTURE_DATA;_context420.n=1;return simulateTimeStalled();case 1:expect(waitingSpy).not.toHaveBeenCalled();case 2:return _context420.a(2)}},_callee420)})));it("does not fabricate a playing event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee421(){return _regenerator().w(function(_context421){while(1)switch(_context421.n){case 0:media.paused=false;media.readyState=media.HAVE_FUTURE_DATA;_context421.n=1;return simulateTimeProgress();case 1:expect(playingSpy).not.toHaveBeenCalled();case 2:return _context421.a(2)}},_callee421)})))})});describe("playing",function(){describe("and playback is paused",function(){beforeEach(function(){media.paused=true});describe("and content is ready to play",function(){beforeEach(function(){media.readyState=media.HAVE_FUTURE_DATA});describe("and playback is detected",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee422(){return _regenerator().w(function(_context422){while(1)switch(_context422.n){case 0:_context422.n=1;return simulateTimeProgress();case 1:return _context422.a(2)}},_callee422)})));it("does not fabricate playing",function(){expect(playingSpy).not.toHaveBeenCalledTimes(1)})})})});describe("and playback is not paused",function(){beforeEach(function(){media.paused=false});describe("and content is ready to play",function(){beforeEach(function(){media.readyState=media.HAVE_FUTURE_DATA});describe("and playback is ended",function(){beforeEach(function(){media.ended=true});describe("and playback is detected",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee423(){return _regenerator().w(function(_context423){while(1)switch(_context423.n){case 0:_context423.n=1;return simulateTimeProgress();case 1:return _context423.a(2)}},_callee423)})));it("does not fabricate playing",function(){expect(playingSpy).not.toHaveBeenCalledTimes(1)})})});describe("and media is seeking",function(){describe("and playback is detected",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee424(){return _regenerator().w(function(_context424){while(1)switch(_context424.n){case 0:media.dispatchEvent(mockEvent("seeking"));_context424.n=1;return simulateTimeProgress();case 1:return _context424.a(2)}},_callee424)})));it("does not fabricate a playing event",function(){expect(playingSpy).not.toHaveBeenCalled()});describe("and media finishes seeking",function(){beforeEach(function(){media.dispatchEvent(mockEvent("seeked"))});it("fabricates a playing event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee425(){return _regenerator().w(function(_context425){while(1)switch(_context425.n){case 0:_context425.n=1;return simulateTimeProgress();case 1:expect(playingSpy).toHaveBeenCalledTimes(1);case 2:return _context425.a(2)}},_callee425)})))})})});describe("and playback is detected",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee426(){return _regenerator().w(function(_context426){while(1)switch(_context426.n){case 0:_context426.n=1;return simulateTimeProgress();case 1:return _context426.a(2)}},_callee426)})));it("fabricates a playing event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee427(){return _regenerator().w(function(_context427){while(1)switch(_context427.n){case 0:expect(playingSpy).toHaveBeenCalledTimes(1);playingSpy.calls.reset();media.dispatchEvent(mockEvent("playing"));expect(playingSpy).not.toHaveBeenCalled();_context427.n=1;return simulateTimeProgress();case 1:expect(playingSpy).not.toHaveBeenCalled();case 2:return _context427.a(2)}},_callee427)})))});describe("and real playback event is emitted",function(){it("does not squelch real playback event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee428(){return _regenerator().w(function(_context428){while(1)switch(_context428.n){case 0:media.dispatchEvent(mockEvent("playing"));expect(playingSpy).toHaveBeenCalledTimes(1);playingSpy.calls.reset();media.dispatchEvent(mockEvent("playing"));_context428.n=1;return simulateTimeProgress();case 1:expect(playingSpy).not.toHaveBeenCalled();case 2:return _context428.a(2)}},_callee428)})))})});describe("and content is buffering",function(){beforeEach(function(){media.readyState=media.HAVE_METADATA});describe("and playback is detected",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee429(){return _regenerator().w(function(_context429){while(1)switch(_context429.n){case 0:_context429.n=1;return simulateTimeProgress();case 1:return _context429.a(2)}},_callee429)})));it("does not fabricate a playing event",function(){expect(playingSpy).not.toHaveBeenCalled()});describe("then content buffers",function(){beforeEach(function(){media.readyState=media.HAVE_FUTURE_DATA;media.dispatchEvent(mockEvent("canplay"))});describe("and playback is detected",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee430(){return _regenerator().w(function(_context430){while(1)switch(_context430.n){case 0:_context430.n=1;return simulateTimeProgress();case 1:return _context430.a(2)}},_callee430)})));it("fabricates a playing event",function(){expect(playingSpy).toHaveBeenCalledTimes(1)})})})})})})})});describe("requiresUnreliablePlaybackEventsPatch",function(){function testForUa(userAgent,expected){setUserAgent(userAgent);expect(requiresUnreliablePlaybackEventsPatch()).withContext("requiresUnreliablePlayingEventsPatch").toEqual(expected)}it("is true when browser is Safari, Edge Legacy, or Chromium <= 53",function(){testForUa("Version/17.2.1 Safari/605.1.15",true);testForUa("Edge/18.0.0 Safari/605.1.15",true);testForUa("Edg/108.0.0 Safari/605.1.15",false);testForUa("Chrome/120.0.0",false);testForUa("Chrome/54.0.0",false);testForUa("Chrome/53.9.0",true)})});// test/unit/patch/media/patches/createPreventStallsPatch.test.ts
|
|
1926
1926
|
describe("createPreventStallsPatch",function(){var media;var mediaEventFakes;var patchedMedia;var patchedRef;var disposed=false;useMockLogger();beforeEach(function(){disposed=true;media=new MockHTMLAudioElement;mediaEventFakes=implementEventFakes(media);media.play.and.resolveTo(void 0);patchedRef=patchTarget(media,createPreventStallsPatch);patchedMedia=patchedRef.patched});afterEach(function(){if(!disposed)patchedRef.dispose()});function dispatchTimeUpdates(count){var incrementTime=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;for(var i=0;i<count;i++){media.dispatchEvent(mockEvent("timeupdate"));if(incrementTime)media.currentTime+=0.1}}describe("when timeupdate events repeatedly occur",function(){describe("and playback is paused",function(){it("does nothing",function(){media.paused=true;dispatchTimeUpdates(MAX_UNCHANGED_COUNT);expect(media.pause).not.toHaveBeenCalled();expect(media.play).not.toHaveBeenCalled()})});describe("and time does not progress",function(){it("stops and restarts playback",function(){patchedMedia.currentTime=10;media.paused=false;media.play.calls.reset();dispatchTimeUpdates(MAX_UNCHANGED_COUNT);expect(media.pause).not.toHaveBeenCalled();expect(media.play).not.toHaveBeenCalled();dispatchTimeUpdates(1);expect(media.pause).toHaveBeenCalledOnceWith();expect(media.play).toHaveBeenCalledOnceWith();media.pause.calls.reset();media.play.calls.reset();dispatchTimeUpdates(MAX_UNCHANGED_COUNT*2);expect(media.pause).not.toHaveBeenCalled();expect(media.play).not.toHaveBeenCalled();dispatchTimeUpdates(MAX_UNCHANGED_COUNT*2,true);expect(media.pause).not.toHaveBeenCalled();expect(media.play).not.toHaveBeenCalled();dispatchTimeUpdates(MAX_UNCHANGED_COUNT+1);expect(media.pause).toHaveBeenCalledOnceWith();expect(media.play).toHaveBeenCalledOnceWith()})})});describe("when patch is disposed",function(){it("removes listeners",function(){expect(mediaEventFakes.hasAnyListeners()).toBeTrue();patchedRef.dispose();expect(mediaEventFakes.hasAnyListeners()).toBeFalse();disposed=true})})});describe("requiresPreventStallsPatch",function(){function testForUa(userAgent,expected){setUserAgent(userAgent);expect(requiresPreventStallsPatch()).withContext("requiresPreventStallsPatch").toEqual(expected)}it("is true when browser is Edge Legacy",function(){testForUa("Edge/18.0.0",true);testForUa("Edg/108.0.0",false);testForUa("Chrome/120.0.0",false)})});// test/unit/global/globalRef.test.ts
|
|
1927
1927
|
var any25=jasmine.any;var objectContaining20=jasmine.objectContaining;describe("vinylGlobalRef",function(){beforeEach(function(){vinylGlobalRef.initialize()});describe("after initialization",function(){it("creates a vinylGlobal reference",function(){expect(vinylGlobalRef.value).toBeDefined();expect(globalThis.vinylGlobal).toEqual(objectContaining20({players:any25(Array),player:void 0,logs:any25(Array),version:any25(String),userAgentInfo:any25(Object),network:any25(Object),bandwidth:any25(Number)}))})});describe("when historyLogHandler is undefined",function(){overrideGlobalInit(historyLogHandler,function(){return void 0});it("returns null logs",function(){expect(globalThis.vinylGlobal).toEqual(objectContaining20({logs:void 0}))})});describe("when reset",function(){it("clears the global reference",function(){expect(globalThis.vinylGlobal).toBeDefined();vinylGlobalRef.reset();expect(globalThis.vinylGlobal).toBeUndefined()})})});// test/unit/global/environment.test.ts
|
|
1928
1928
|
var objectContaining21=jasmine.objectContaining;var any26=jasmine.any;describe("vinylVersion",function(){beforeEach(function(){if(isNode())pending("Requires browser environment")});it("parses correctly",function(){expect(vinylVersion).toEqual(objectContaining21({major:any26(Number),minor:any26(Number)}))})});// test/unit/global/configureVinylGlobal.test.ts
|
|
@@ -1933,47 +1933,47 @@ describe("PlayerRegistryImpl",function(){describe("addPlayer",function(){var log
|
|
|
1933
1933
|
var createSpy29=jasmine.createSpy;describe("createChangeEventTrigger",function(){it("returns a function that calls an inner function with a change event",function(){var o={value:1};var spy=createSpy29("valueChanged");var trigger=createChangeEventTrigger(function(){return o.value},spy);expect(spy).not.toHaveBeenCalled();o.value=2;trigger();expect(spy).toHaveBeenCalledOnceWith({previous:1,current:2});spy.calls.reset();o.value=3;trigger();expect(spy).toHaveBeenCalledOnceWith({previous:2,current:3})})});// test/unit/drm/DrmKeySystemResolver.test.ts
|
|
1934
1934
|
describe("defaultDrmKeySystemResolver",function(){it("returns the matching DrmKeySystem from the ContentProtection schemeIdUri",function(){expect(defaultDrmKeySystemResolver(ContentProtectionScheme.WIDEVINE)).toEqual(["com.widevine.alpha"/* WIDEVINE */]);expect(defaultDrmKeySystemResolver(ContentProtectionScheme.FAIR_PLAY)).toEqual(["com.apple.fps"/* FAIR_PLAY */,"com.apple.fps.1_0"/* FAIR_PLAY_1_0 */]);expect(defaultDrmKeySystemResolver(ContentProtectionScheme.CENC)).toEqual([])})});// test/unit/drm/DrmKeySystem.test.ts
|
|
1935
1935
|
describe("isPlayReady",function(){it("returns true if key system is one of PlayReady key systems",function(){expect(isPlayReady("com.microsoft.playready"/* PLAY_READY */)).toBeTrue();expect(isPlayReady("com.chromecast.playready"/* PLAY_READY_CHROMECAST */)).toBeTrue();expect(isPlayReady("com.microsoft.playready.recommendation"/* PLAY_READY_RECOMMENDATION */)).toBeTrue();expect(isPlayReady("com.microsoft.playready.recommendation.3000"/* PLAY_READY_3000 */)).toBeTrue();expect(isPlayReady("com.widevine.alpha"/* WIDEVINE */)).toBeFalse();expect(isPlayReady("com.apple.fps.1_0"/* FAIR_PLAY_1_0 */)).toBeFalse()})});describe("isFairPlay",function(){it("returns true if key system is one of FairPlay key systems",function(){expect(isFairPlay("com.apple.fps"/* FAIR_PLAY */)).toBeTrue();expect(isFairPlay("com.apple.fps.1_0"/* FAIR_PLAY_1_0 */)).toBeTrue();expect(isFairPlay("com.microsoft.playready.recommendation.3000"/* PLAY_READY_3000 */)).toBeFalse();expect(isFairPlay("com.widevine.alpha"/* WIDEVINE */)).toBeFalse()})});// test/unit/drm/DrmControllerImpl.test.ts
|
|
1936
|
-
var createSpy30=jasmine.createSpy;var objectContaining22=jasmine.objectContaining;var any27=jasmine.any;describe("DrmControllerImpl",function(){var logger=useMockLogger();var activeSessions=0;function createMockSession(mimeType,initDataType,initData){activeSessions++;var session=new MockCommonMediaKeySession;session.mimeType=mimeType;session.initDataType=initDataType;session.initData=initData;session.dispose.and.callFake(function(){return activeSessions--});return session}var deps;var media;var commonEme;var mediaKeys;var access;var licenseProvider;var drmController;var errorSpy;var clock=useMockTime();var drmInfo={contentProtections:[{keySystem:"com.widevine.alpha"/* WIDEVINE */},{keySystem:"com.microsoft.playready"/* PLAY_READY */}],mimeType:"audio/mp4",contentType:"audio",encryptionScheme:"cenc",initDataType:"cenc"};beforeEach(function(){activeSessions=0;media=new MockHTMLAudioElement;commonEme=new MockCommonEme;licenseProvider=createSpy30("LicenseProvider");implementEventFakes(media);mediaKeys=new MockCommonMediaKeys;mediaKeys.keySystem="com.widevine.alpha"/* WIDEVINE */;mediaKeys.createSession.and.callFake(createMockSession);mediaKeys.clearFromElement.and.resolveTo(void 0);access=new MockCommonMediaKeySystemAccess("com.widevine.alpha"/* WIDEVINE */);access.createMediaKeys.and.resolveTo(mediaKeys);access.keySystem="com.widevine.alpha"/* WIDEVINE */;commonEme.requestMediaKeySystemAccess.and.resolveTo(access);deps={media:media,commonEme:commonEme};drmController=new DrmControllerImpl(deps,{licenseProvider:licenseProvider});errorSpy=createEventSpy(drmController,"error")});afterEach(function(){if(!drmController.disposed)drmController.dispose();expectNoErrors()});function expectNoErrors(){expect(errorSpy).not.toHaveBeenCalled()}function expectError(message){expect(errorSpy).toHaveBeenCalledTimes(1);var error=errorSpy.calls.mostRecent().args[0].error;expect(error.message).toEqual(message);errorSpy.calls.reset()}function emitEncrypted(){return _emitEncrypted.apply(this,arguments)}function _emitEncrypted(){_emitEncrypted=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1936
|
+
var createSpy30=jasmine.createSpy;var objectContaining22=jasmine.objectContaining;var any27=jasmine.any;describe("DrmControllerImpl",function(){var logger=useMockLogger();var activeSessions=0;function createMockSession(mimeType,initDataType,initData){activeSessions++;var session=new MockCommonMediaKeySession;session.mimeType=mimeType;session.initDataType=initDataType;session.initData=initData;session.dispose.and.callFake(function(){return activeSessions--});return session}var deps;var media;var commonEme;var mediaKeys;var access;var licenseProvider;var drmController;var errorSpy;var clock=useMockTime();var drmInfo={contentProtections:[{keySystem:"com.widevine.alpha"/* WIDEVINE */},{keySystem:"com.microsoft.playready"/* PLAY_READY */}],mimeType:"audio/mp4",contentType:"audio",encryptionScheme:"cenc",initDataType:"cenc"};beforeEach(function(){activeSessions=0;media=new MockHTMLAudioElement;commonEme=new MockCommonEme;licenseProvider=createSpy30("LicenseProvider");implementEventFakes(media);mediaKeys=new MockCommonMediaKeys;mediaKeys.keySystem="com.widevine.alpha"/* WIDEVINE */;mediaKeys.createSession.and.callFake(createMockSession);mediaKeys.clearFromElement.and.resolveTo(void 0);access=new MockCommonMediaKeySystemAccess("com.widevine.alpha"/* WIDEVINE */);access.createMediaKeys.and.resolveTo(mediaKeys);access.keySystem="com.widevine.alpha"/* WIDEVINE */;commonEme.requestMediaKeySystemAccess.and.resolveTo(access);deps={media:media,commonEme:commonEme};drmController=new DrmControllerImpl(deps,{licenseProvider:licenseProvider});errorSpy=createEventSpy(drmController,"error")});afterEach(function(){if(!drmController.disposed)drmController.dispose();expectNoErrors()});function expectNoErrors(){expect(errorSpy).not.toHaveBeenCalled()}function expectError(message){expect(errorSpy).toHaveBeenCalledTimes(1);var error=errorSpy.calls.mostRecent().args[0].error;expect(error.message).toEqual(message);errorSpy.calls.reset()}function emitEncrypted(){return _emitEncrypted.apply(this,arguments)}function _emitEncrypted(){_emitEncrypted=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee488(){var initData,initDataType,encryptedCb,_args488=arguments;return _regenerator().w(function(_context488){while(1)switch(_context488.n){case 0:initData=_args488.length>0&&_args488[0]!==undefined?_args488[0]:new Uint8Array(0);initDataType=_args488.length>1&&_args488[1]!==undefined?_args488[1]:"cenc";encryptedCb=commonEme.addEncryptedListener.calls.mostRecent().args[1];encryptedCb({initData:initData,initDataType:initDataType});_context488.n=1;return flushPromises();case 1:return _context488.a(2)}},_callee488)}));return _emitEncrypted.apply(this,arguments)}function getSession(index){return mediaKeys.createSession.calls.all()[index].returnValue}function emitMessage(){return _emitMessage.apply(this,arguments)}function _emitMessage(){_emitMessage=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee489(){var index,message,_args489=arguments;return _regenerator().w(function(_context489){while(1)switch(_context489.n){case 0:index=_args489.length>0&&_args489[0]!==undefined?_args489[0]:0;message=_args489.length>1&&_args489[1]!==undefined?_args489[1]:new ArrayBuffer(0);getSession(index).dispatch("message",{message:message});_context489.n=1;return flushPromises();case 1:return _context489.a(2)}},_callee489)}));return _emitMessage.apply(this,arguments)}function getKeySystemsRequested(){return commonEme.requestMediaKeySystemAccess.calls.all().map(function(call){return call.args[0]})}describe("initializeForPlayback",function(){describe("when drmInfo has content encryption",function(){describe("and commonEme is null",function(){it("emits an error event",function(){drmController=new DrmControllerImpl(__spreadProps(__spreadValues({},deps),{commonEme:null}),{licenseProvider:licenseProvider});errorSpy=createEventSpy(drmController,"error");drmController.initializeForPlayback(null);expectNoErrors();drmController.initializeForPlayback(createEmptyMediaQualityMetadata());expectNoErrors();drmController.initializeForPlayback(drmInfo);expectError("DRM not supported.")})})});it("sorts content protections by priority",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee433(){var mediaKeysSetSpy,sessionCreateSpy;return _regenerator().w(function(_context433){while(1)switch(_context433.n){case 0:commonEme.requestMediaKeySystemAccess.and.callFake(function(keySystem){return keySystem==="com.widevine.alpha"/* WIDEVINE */?Promise.resolve(access):Promise.reject(new Error("not supported"))});drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{priority:1// lowest priority
|
|
1937
1937
|
}),"com.microsoft.playready"/* PLAY_READY */,{licenseServer:{url:"https://example.com/playready"},priority:2}),"com.microsoft.playready.recommendation.3000"/* PLAY_READY_3000 */,{priority:3}),"com.apple.fps"/* FAIR_PLAY */,{priority:4}),"com.apple.fps.1_0"/* FAIR_PLAY_1_0 */,{// equal priorities will prefer key systems with licenseServer configuration:
|
|
1938
1938
|
licenseServer:{url:"https://example.com/fps"},priority:4// highest priority
|
|
1939
|
-
}),licenseProvider:licenseProvider});mediaKeysSetSpy=createEventSpy(drmController,"mediaKeysSet");sessionCreateSpy=createEventSpy(drmController,"sessionCreate");drmController.initializeForPlayback(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.widevine.alpha"/* WIDEVINE */,pssh:"123"},{keySystem:"com.apple.fps"/* FAIR_PLAY */,pssh:"123"},{keySystem:"com.microsoft.playready"/* PLAY_READY */,pssh:"123"}]}));_context432.n=1;return flushPromises();case 1:expect(mediaKeysSetSpy).toHaveBeenCalledTimes(1);expect(sessionCreateSpy).toHaveBeenCalledTimes(1);expect(mediaKeys.createSession).toHaveBeenCalledTimes(1);expect(getKeySystemsRequested()).toEqual(["com.apple.fps"/* FAIR_PLAY */,"com.microsoft.playready"/* PLAY_READY */,"com.widevine.alpha"/* WIDEVINE */]);case 2:return _context432.a(2)}},_callee432)})));describe("when drmInfo is missing mimeType",function(){it("emits an error event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee433(){return _regenerator().w(function(_context433){while(1)switch(_context433.n){case 0:drmController.initializeForPlayback(__spreadProps(__spreadValues({},drmInfo),{mimeType:null,contentProtections:[{keySystem:"com.widevine.alpha"/* WIDEVINE */,pssh:"123"}]}));_context433.n=1;return errorSpy.next();case 1:expectError("Encrypted content must have a mimeType.");case 2:return _context433.a(2)}},_callee433)})))});describe("when drmInfo does not contain the current key system",function(){it("throws",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee434(){return _regenerator().w(function(_context434){while(1)switch(_context434.n){case 0:drmController.initializeForPlayback(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.widevine.alpha"/* WIDEVINE */,pssh:"123"}]}));_context434.n=1;return nextEventAsPromise(drmController,"mediaKeysSet");case 1:drmController.initializeForPlayback(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.microsoft.playready"/* PLAY_READY */,pssh:"123"}]}));_context434.n=2;return errorSpy.next();case 2:expectError("Encrypted content does not support set keySystem: 'com.widevine.alpha'.");case 3:return _context434.a(2)}},_callee434)})))});describe("when drmInfo does not have initDataType",function(){it("defaults to cenc",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee435(){var sessionCreateSpy,keySessionEvent;return _regenerator().w(function(_context435){while(1)switch(_context435.n){case 0:sessionCreateSpy=createEventSpy(drmController,"sessionCreate");drmController.initializeForPlayback(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.widevine.alpha"/* WIDEVINE */,pssh:"123"}],initDataType:null}));_context435.n=1;return sessionCreateSpy.next();case 1:keySessionEvent=_context435.v;expect(keySessionEvent).toEqual({initDataType:"cenc",mimeType:"audio/mp4"});case 2:return _context435.a(2)}},_callee435)})))});describe("when drmInfo does not have contentType",function(){it("creates a session with default configuration",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee436(){var sessionCreateSpy;return _regenerator().w(function(_context436){while(1)switch(_context436.n){case 0:drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{licenseServer:{url:"license-server"}}),licenseProvider:licenseProvider});sessionCreateSpy=createEventSpy(drmController,"sessionCreate");drmController.initializeForPlayback(__spreadProps(__spreadValues({},drmInfo),{contentType:null,contentProtections:[{keySystem:"com.widevine.alpha"/* WIDEVINE */,pssh:"123"}]}));_context436.n=1;return sessionCreateSpy.next();case 1:expect(commonEme.requestMediaKeySystemAccess).toHaveBeenCalledOnceWith("com.widevine.alpha"/* WIDEVINE */,[{initDataTypes:["cenc"]}]);case 2:return _context436.a(2)}},_callee436)})))})});describe("setBufferingDrmInfo",function(){it("resets error event gate",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee437(){var error;return _regenerator().w(function(_context437){while(1)switch(_context437.n){case 0:commonEme.requestMediaKeySystemAccess.and.rejectWith(new DrmError("expected"));_context437.n=1;return emitEncrypted();case 1:_context437.n=2;return emitEncrypted();case 2:_context437.n=3;return emitEncrypted();case 3:expectError("Encrypted content not configured with content protections.");drmController.setBufferingDrmInfo(drmInfo);_context437.n=4;return emitEncrypted();case 4:_context437.n=5;return emitEncrypted();case 5:_context437.n=6;return emitEncrypted();case 6:expect(errorSpy).toHaveBeenCalledTimes(1);error=errorSpy.calls.mostRecent().args[0].error;expect(error.toJSON()).toEqual(objectContaining22({message:"No keySystem supported",extra:{contentProtections:any27(Object),attemptedKeySystems:["com.widevine.alpha"/* WIDEVINE */,"com.microsoft.playready"/* PLAY_READY */]}}));errorSpy.calls.reset();case 7:return _context437.a(2)}},_callee437)})));describe("and the passed abort ref is aborted",function(){it("closes sessions created with passed abort ref",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee438(){var abort1,abort2,sessions;return _regenerator().w(function(_context438){while(1)switch(_context438.n){case 0:abort1=new Abort;drmController.setBufferingDrmInfo(drmInfo,abort1);_context438.n=1;return emitEncrypted(new Uint8Array([1]));case 1:_context438.n=2;return emitEncrypted(new Uint8Array([2]));case 2:_context438.n=3;return emitEncrypted(new Uint8Array([3]));case 3:abort2=new Abort;drmController.setBufferingDrmInfo(drmInfo,abort2);_context438.n=4;return emitEncrypted(new Uint8Array([4]));case 4:_context438.n=5;return emitEncrypted(new Uint8Array([5]));case 5:_context438.n=6;return emitEncrypted(new Uint8Array([6]));case 6:sessions=mediaKeys.createSession.calls.all().map(function(call){return call.returnValue});expect(sessions.length).withContext("total sessions").toEqual(6);abort1.abort();expect(sessions.map(function(session){return session.dispose.calls.count()})).toEqual([1,1,1,0,0,0]);expect(drmController.activeSessions).toEqual(3);abort2.abort();expect(sessions.map(function(session){return session.dispose.calls.count()})).toEqual([1,1,1,1,1,1]);expect(drmController.activeSessions).toEqual(0);case 7:return _context438.a(2)}},_callee438)})))})});describe("when an encrypted event is observed",function(){it("throws error if contentProtections are not set",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee439(){return _regenerator().w(function(_context439){while(1)switch(_context439.n){case 0:_context439.n=1;return emitEncrypted();case 1:expectError("Encrypted content not configured with content protections.");case 2:return _context439.a(2)}},_callee439)})));describe("and the drm controller is disposed",function(){it("does nothing",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee440(){return _regenerator().w(function(_context440){while(1)switch(_context440.n){case 0:drmController.dispose();_context440.n=1;return emitEncrypted();case 1:expect(errorSpy).not.toHaveBeenCalled();case 2:return _context440.a(2)}},_callee440)})))});describe("when media keys have not been created",function(){it("creates and sets media keys, then creates a session",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee441(){var sessionCreatSpy;return _regenerator().w(function(_context441){while(1)switch(_context441.n){case 0:sessionCreatSpy=createEventSpy(drmController,"sessionCreate");drmController.setBufferingDrmInfo(drmInfo);_context441.n=1;return emitEncrypted();case 1:expect(commonEme.requestMediaKeySystemAccess).toHaveBeenCalledTimes(1);expect(access.createMediaKeys).toHaveBeenCalledTimes(1);expect(mediaKeys.setOnElement).toHaveBeenCalledOnceWith(media);expect(mediaKeys.createSession).toHaveBeenCalledTimes(1);expect(sessionCreatSpy).toHaveBeenCalledOnceWith({mimeType:"audio/mp4",initDataType:"cenc"});case 2:return _context441.a(2)}},_callee441)})));it("picks the first supported keySystem",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee442(){return _regenerator().w(function(_context442){while(1)switch(_context442.n){case 0:drmController.setBufferingDrmInfo(drmInfo);commonEme.requestMediaKeySystemAccess.and.returnValues(Promise.reject(new DrmError("not supported")),Promise.resolve(access));_context442.n=1;return emitEncrypted();case 1:expect(getKeySystemsRequested()).toEqual(["com.widevine.alpha"/* WIDEVINE */,"com.microsoft.playready"/* PLAY_READY */]);case 2:return _context442.a(2)}},_callee442)})));it("creates key system access from content protection configuration and robustness options for video",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee443(){var initData;return _regenerator().w(function(_context443){while(1)switch(_context443.n){case 0:drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{licenseServer:{url:"license-server"},video:{robustness:"HW_SECURE_DECODE"/* HW_SECURE_DECODE */}}),licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentType:"video",mimeType:"video/mp4"}));initData=new Uint8Array(0);_context443.n=1;return emitEncrypted(initData,"webm");case 1:expect(commonEme.requestMediaKeySystemAccess).toHaveBeenCalledOnceWith("com.widevine.alpha"/* WIDEVINE */,[{initDataTypes:["cenc"],videoCapabilities:[{contentType:"video/mp4",encryptionScheme:"cenc",robustness:"HW_SECURE_DECODE"/* HW_SECURE_DECODE */}]}]);case 2:return _context443.a(2)}},_callee443)})));it("creates key system access from content protection configuration and robustness options for audio",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee444(){var initData;return _regenerator().w(function(_context444){while(1)switch(_context444.n){case 0:drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.microsoft.playready"/* PLAY_READY */,{licenseServer:{url:"license-server"},audio:{robustness:"SW_SECURE_DECODE"/* SW_SECURE_DECODE */}}),licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.microsoft.playready"/* PLAY_READY */}],contentType:"audio",mimeType:"audio/mp4"}));initData=new Uint8Array(0);_context444.n=1;return emitEncrypted(initData,"cenc");case 1:expect(commonEme.requestMediaKeySystemAccess).toHaveBeenCalledOnceWith("com.microsoft.playready"/* PLAY_READY */,[{initDataTypes:["cenc"],audioCapabilities:[{contentType:"audio/mp4",encryptionScheme:"cenc",robustness:"SW_SECURE_DECODE"/* SW_SECURE_DECODE */}]}]);case 2:return _context444.a(2)}},_callee444)})));it("uses SW_SECURE_CRYPTO as default robustness",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee445(){return _regenerator().w(function(_context445){while(1)switch(_context445.n){case 0:drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.widevine.alpha"/* WIDEVINE */}],contentType:"audio",mimeType:"audio/mp4"}));_context445.n=1;return emitEncrypted();case 1:expect(commonEme.requestMediaKeySystemAccess).toHaveBeenCalledOnceWith("com.widevine.alpha"/* WIDEVINE */,[{initDataTypes:["cenc"],audioCapabilities:[{contentType:"audio/mp4",encryptionScheme:"cenc",robustness:"SW_SECURE_CRYPTO"/* SW_SECURE_CRYPTO */}]}]);case 2:return _context445.a(2)}},_callee445)})));describe("when media key initialization fails",function(){describe("and the error is silent",function(){beforeEach(function(){access.createMediaKeys.and.rejectWith(new ReportableError("",ErrorOrigin.INTERNAL,"silent"/* SILENT */))});it("does not emit an error event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee446(){return _regenerator().w(function(_context446){while(1)switch(_context446.n){case 0:drmController.setBufferingDrmInfo(drmInfo);_context446.n=1;return emitEncrypted();case 1:expect(errorSpy).not.toHaveBeenCalled();case 2:return _context446.a(2)}},_callee446)})))});describe("and the error is not silent",function(){beforeEach(function(){access.createMediaKeys.and.rejectWith(new Error)});it("emits an error event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee447(){return _regenerator().w(function(_context447){while(1)switch(_context447.n){case 0:drmController.setBufferingDrmInfo(drmInfo);_context447.n=1;return emitEncrypted();case 1:expect(errorSpy).toHaveBeenCalledTimes(1);errorSpy.calls.reset();case 2:return _context447.a(2)}},_callee447)})))})});describe("when drmController is disposed",function(){it("does not create a session",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee448(){var licenseServerDeferred;return _regenerator().w(function(_context448){while(1)switch(_context448.n){case 0:licenseServerDeferred=new Deferred;drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{licenseServer:function licenseServer(){return licenseServerDeferred}})});drmController.setBufferingDrmInfo(drmInfo);_context448.n=1;return emitEncrypted();case 1:expect(drmController.activeSessions).toBe(0);drmController.dispose();licenseServerDeferred.resolve({serverCertificate:"cert"});_context448.n=2;return flushPromises();case 2:expect(drmController.activeSessions).toBe(0);case 3:return _context448.a(2)}},_callee448)})))})});describe("when initData is nullish",function(){it("emits an error event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee449(){return _regenerator().w(function(_context449){while(1)switch(_context449.n){case 0:logger.value.debug.calls.reset();drmController.setBufferingDrmInfo(drmInfo);_context449.n=1;return emitEncrypted(null);case 1:expectError("encrypted event provided null initData. Check CORS policies.");expect(mediaKeys.createSession).not.toHaveBeenCalled();case 2:return _context449.a(2)}},_callee449)})))});it("reuses sessions with matching initialization data",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee450(){return _regenerator().w(function(_context450){while(1)switch(_context450.n){case 0:drmController.setBufferingDrmInfo(drmInfo);_context450.n=1;return emitEncrypted(new Uint8Array([1,2,3]));case 1:expect(mediaKeys.createSession).toHaveBeenCalledTimes(1);mediaKeys.createSession.calls.reset();_context450.n=2;return emitEncrypted(new Uint8Array([1,2,3]));case 2:expect(mediaKeys.createSession).not.toHaveBeenCalled();_context450.n=3;return emitEncrypted(new Uint8Array([4,5,6]));case 3:expect(mediaKeys.createSession).toHaveBeenCalledTimes(1);case 4:return _context450.a(2)}},_callee450)})))});describe("when a session error event is observed",function(){it("redispatches the event when first",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee451(){var session;return _regenerator().w(function(_context451){while(1)switch(_context451.n){case 0:drmController.setBufferingDrmInfo(drmInfo);_context451.n=1;return emitEncrypted();case 1:session=getSession(0);expect(errorSpy).not.toHaveBeenCalled();session.dispatch("error",{target:drmController,error:new Error("expected")});expect(errorSpy).toHaveBeenCalledOnceWith({target:drmController,error:new Error("expected")});errorSpy.calls.reset();session.dispatch("error",{target:drmController,error:new Error("expected")});expect(errorSpy).not.toHaveBeenCalled();drmController.setBufferingDrmInfo(drmInfo);session.dispatch("error",{target:drmController,error:new Error("expected2")});expect(errorSpy).toHaveBeenCalledOnceWith({target:drmController,error:new Error("expected2")});errorSpy.calls.reset();case 2:return _context451.a(2)}},_callee451)})))});describe("when a session message event is observed",function(){it("calls the licenseProvider with resolved licenseServer options",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee452(){var message;return _regenerator().w(function(_context452){while(1)switch(_context452.n){case 0:drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty(_defineProperty(_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{licenseServer:function licenseServer(){return Promise.resolve({url:"http://example.com/widevine"})}}),"com.microsoft.playready"/* PLAY_READY */,{licenseServer:function licenseServer(){return{url:"http://example.com/playready"}}}),"com.apple.fps"/* FAIR_PLAY */,{licenseServer:{url:"http://example.com/fairplay"}}),licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(drmInfo);_context452.n=1;return emitEncrypted(new Uint8Array([1,2,3]),"cenc");case 1:message=new ArrayBuffer(1);_context452.n=2;return emitMessage(0,message);case 2:expect(licenseProvider).toHaveBeenCalledOnceWith("com.widevine.alpha"/* WIDEVINE */,{url:"http://example.com/widevine"},message);licenseProvider.calls.reset();mediaKeys.keySystem="com.microsoft.playready"/* PLAY_READY */;_context452.n=3;return emitMessage(0,message);case 3:expect(licenseProvider).toHaveBeenCalledOnceWith("com.microsoft.playready"/* PLAY_READY */,{url:"http://example.com/playready",init:{headers:any27(Object)}},message);licenseProvider.calls.reset();mediaKeys.keySystem="com.apple.fps"/* FAIR_PLAY */;_context452.n=4;return emitMessage(0,message);case 4:expect(licenseProvider).toHaveBeenCalledOnceWith("com.apple.fps"/* FAIR_PLAY */,{url:"http://example.com/fairplay"},message);case 5:return _context452.a(2)}},_callee452)})));describe("when license takes too long to resolve",function(){it("emits an error event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee453(){var message;return _regenerator().w(function(_context453){while(1)switch(_context453.n){case 0:drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{licenseServer:{url:"http://example.com/widevine"}}),licenseProvider:function licenseProvider(){return never}});errorSpy=createEventSpy(drmController,"error");drmController.setBufferingDrmInfo(drmInfo);_context453.n=1;return emitEncrypted(new Uint8Array([1,2,3]),"cenc");case 1:message=new ArrayBuffer(1);_context453.n=2;return emitMessage(0,message);case 2:_context453.n=3;return clock.tick(LICENSE_TIMEOUT);case 3:expectError("License provider timed out after 90s");case 4:return _context453.a(2)}},_callee453)})))});describe("when the key system is PlayReady",function(){it("calls the licenseProvider with unpacked license server options",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee454(){var setPlayReady,message,challenge,xml,_message;return _regenerator().w(function(_context454){while(1)switch(_context454.n){case 0:setPlayReady=function _setPlayReady(){drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.microsoft.playready"/* PLAY_READY */}]}));mediaKeys.keySystem="com.microsoft.playready"/* PLAY_READY */};drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.microsoft.playready"/* PLAY_READY */,{licenseServer:function licenseServer(){return{url:"http://example.com/playready",init:{headers:[["HeaderA","ValueA"]]}}}}),licenseProvider:licenseProvider});message=new ArrayBuffer(1);setPlayReady();_context454.n=1;return emitEncrypted();case 1:_context454.n=2;return emitMessage(0,message);case 2:expect(licenseProvider).toHaveBeenCalledOnceWith("com.microsoft.playready"/* PLAY_READY */,{url:"http://example.com/playready",init:{headers:{HeaderA:"ValueA","Content-Type":"text/xml; charset=utf-8"}}},message);licenseProvider.calls.reset();drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.microsoft.playready"/* PLAY_READY */,{licenseServer:function licenseServer(){return{url:"http://example.com/playready"}}}),licenseProvider:licenseProvider});challenge=new Uint8Array([1,2,3,4,5,6]).buffer;xml="<PlayReadyKeyMessage type=\"LicenseAcquisition\">\n <LicenseAcquisition Version=\"1\">\n <Challenge encoding=\"base64encoded\">".concat(bufferToBase64(challenge),"</Challenge>\n <HttpHeaders>\n <HttpHeader>\n <name>HeaderA</name>\n <value>ValueA</value>\n </HttpHeader>\n <HttpHeader>\n <name>HeaderB</name>\n <value>ValueB</value>\n </HttpHeader>\n </HttpHeaders>\n </LicenseAcquisition>\n </PlayReadyKeyMessage>");_message=utf16ToUint16Array(xml);setPlayReady();_context454.n=3;return emitEncrypted();case 3:_context454.n=4;return emitMessage(0,_message.buffer);case 4:expect(licenseProvider).toHaveBeenCalledOnceWith("com.microsoft.playready"/* PLAY_READY */,{url:"http://example.com/playready",init:{headers:{HeaderA:"ValueA",HeaderB:"ValueB"}}},challenge);case 5:return _context454.a(2)}},_callee454)})))});it("updates the respective session with the license response",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee455(){var message1,message2,licenseResponsePromise1,licenseResponsePromise2,licenseResponse1,licenseResponse2;return _regenerator().w(function(_context455){while(1)switch(_context455.n){case 0:drmController.setBufferingDrmInfo(drmInfo);_context455.n=1;return emitEncrypted(new Uint8Array([1,2,3]),"cenc");case 1:_context455.n=2;return emitEncrypted(new Uint8Array([4,5,6]),"cenc");case 2:_context455.n=3;return emitEncrypted(new Uint8Array([4,5,6]),"cenc");case 3:expect(activeSessions).toBe(2);expect(drmController.activeSessions).toBe(2);message1=new ArrayBuffer(1);message2=new ArrayBuffer(2);licenseResponsePromise1=new Deferred;licenseResponsePromise2=new Deferred;licenseProvider.and.returnValues(licenseResponsePromise1,licenseResponsePromise2);_context455.n=4;return emitMessage(0,message1);case 4:expect(licenseProvider).toHaveBeenCalledOnceWith("com.widevine.alpha"/* WIDEVINE */,{},message1);licenseProvider.calls.reset();_context455.n=5;return emitMessage(1,message2);case 5:expect(licenseProvider).toHaveBeenCalledOnceWith("com.widevine.alpha"/* WIDEVINE */,{},message2);licenseResponse1=new Uint8Array(1);licenseResponse2=new Uint8Array(2);licenseResponsePromise1.resolve(licenseResponse1.buffer);licenseResponsePromise2.resolve(licenseResponse2.buffer);_context455.n=6;return flushPromises();case 6:expect(getSession(0).update).toHaveBeenCalledOnceWith(licenseResponse1.buffer);expect(getSession(1).update).toHaveBeenCalledOnceWith(licenseResponse2.buffer);case 7:return _context455.a(2)}},_callee455)})));describe("when the session is closed",function(){it("removes the closed session",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee456(){var sessionCloseSpy;return _regenerator().w(function(_context456){while(1)switch(_context456.n){case 0:drmController.setBufferingDrmInfo(drmInfo);_context456.n=1;return emitEncrypted(new Uint8Array([1,2,3]),"cenc");case 1:sessionCloseSpy=createEventSpy(drmController,"sessionClose");expect(drmController.activeSessions).toBe(1);getSession(0).dispatch("closed",{reason:"closed-by-application"});_context456.n=2;return flushPromises();case 2:expect(drmController.activeSessions).toBe(0);expect(sessionCloseSpy).toHaveBeenCalledTimes(1);case 3:return _context456.a(2)}},_callee456)})))});describe("when the session is disposed",function(){it("does not update the closed session",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee457(){var licenseResponsePromise,session;return _regenerator().w(function(_context457){while(1)switch(_context457.n){case 0:drmController.setBufferingDrmInfo(drmInfo);_context457.n=1;return emitEncrypted(new Uint8Array(0),"cenc");case 1:licenseResponsePromise=new Deferred;licenseProvider.and.returnValue(licenseResponsePromise);session=getSession(0);_context457.n=2;return emitMessage();case 2:session.disposed=true;licenseResponsePromise.resolve(new Uint8Array(1).buffer);_context457.n=3;return licenseResponsePromise;case 3:expect(session.update).not.toHaveBeenCalled();case 4:return _context457.a(2)}},_callee457)})))});describe("when the license provider rejects",function(){it("emits an error event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee458(){var initData,error;return _regenerator().w(function(_context458){while(1)switch(_context458.n){case 0:initData=new Uint8Array(0);drmController.setBufferingDrmInfo(drmInfo);_context458.n=1;return emitEncrypted(initData,"cenc");case 1:error=new Error("expected license error");licenseProvider.and.rejectWith(error);expect(errorSpy).not.toHaveBeenCalled();_context458.n=2;return emitMessage();case 2:expectError("expected license error");case 3:return _context458.a(2)}},_callee458)})))});describe("when message is not an ArrayBuffer",function(){it("emits an error event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee459(){var initData;return _regenerator().w(function(_context459){while(1)switch(_context459.n){case 0:drmController.setBufferingDrmInfo(drmInfo);initData=new Uint8Array(0);_context459.n=1;return emitEncrypted(initData,"cenc");case 1:_context459.n=2;return emitMessage(0,// @ts-expect-error Expected ArrayBuffer
|
|
1940
|
-
null);case 2:expectError("Expected: instance of ArrayBuffer, but was: null. At: message");case 3:return _context459.a(2)}},_callee459)})))})});describe("serverCertificate",function(){describe("when keySystem is FAIR_PLAY_1_0",function(){it("initializes sessions using createFairPlaySessionInitData",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee460(){var initData,certBase64,expected;return _regenerator().w(function(_context460){while(1)switch(_context460.n){case 0:initData=base64ToByteArray("VAAAAHMAawBkADoALwAvADAAYgA1ADYAOAA5AGIAYgAtADQAMQA3ADEALQA5ADcAZQA1AC0AYwAyADgAMAAtADkAOQBmADcAYQBiAGUANAAwADAANABmAA==");certBase64="MIIE1TCCA72gAwIBAgIIFW3qWt9NdaQwDQYJKoZIhvcNAQEFBQAwfzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCkFwcGxlIEluYy4xJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYDVQQDDCpBcHBsZSBLZXkgU2VydmljZXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQwODI3MTcwMjI3WhcNMTYwODI3MTcwMjI3WjBuMQswCQYDVQQGEwJVUzETMBEGA1UECgwKQW1hem9uLmNvbTEWMBQGA1UECwwNRGlnaXRhbCBWaWRlbzEyMDAGA1UEAwwpRlBTIGZvciBBbWF6b24gSW5zdGFudCBWaWRlbyBhcHBsaWNhdGlvbnMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKTLDDVOTIYAGQO0nwblswQ3jjz4sc9tD7dYdxTgaAekFadAJdcsiOwCtudDLunhE3q4uNMQtAh4UExvzL9pUxhnzyeuAmHOTI8vUCCcVD2mt03w98EUFXpUU82s5EauWX8rrUI07FCdWdnD3ylj/eIVdbbQhKcvkvoipiCO4fedAgMBAAGjggHoMIIB5DAdBgNVHQ4EFgQUW+PdiCeqmpoNPwdJIng5MA465MYwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBRj5EdUy4VxWUYsg6zMRDFkZwMsvjCB4gYDVR0gBIHaMIHXMIHUBgkqhkiG92NkBQEwgcYwgcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2NybC5hcHBsZS5jb20va2V5c2VydmljZXMuY3JsMA4GA1UdDwEB/wQEAwIFIDAuBgsqhkiG92NkBg0BAwEB/wQcAXA1O2DFgVbri+9ptKoYMZ/p8CQpC6dMjuxHqzA4BgsqhkiG92NkBg0BBAEB/wQmASf94c8MkzPOIrjZGeyjlFaiDcQlWfRzqMe/ZMSbmtmEEWv/xP4wDQYJKoZIhvcNAQEFBQADggEBAIKRz+hZDC2v99OCaqJY/6+L1EUJscv2hP6MC5yKSte0rkwuJUYIFbzBUlmyq39Osli5ma+5afrCgTy0Rtw3QVPeZDI47zWfBVNQrgwh+eQ9Gg1pGM6V5MXP4SVsC6MkuygPfQr4fz0WDewfBBU6V13LZr7Y0jZ2AMmrit5W+i11uvL/6oKtA6AYsdX/MWt+IgBkt2prRwxf2S2w0rp41Azzg1a7lXeTqJ5uI22NkjmsjLw0PjnjOKyc0FR96iHW2VbCa+ev1fejVcCJolgVEPd/rZNrRomKvfkEjy1hbVtoxc2W9ndvLt7fU6I5MRCFIWGEHQfK5iYyZLuaX5CmGxg=";drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.apple.fps.1_0"/* FAIR_PLAY_1_0 */,{licenseServer:{serverCertificate:certBase64}}),licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.apple.fps"/* FAIR_PLAY */}]}));mediaKeys.keySystem="com.apple.fps.1_0"/* FAIR_PLAY_1_0 */;_context460.n=1;return emitEncrypted(initData,"cenc");case 1:expected="VAAAAHMAawBkADoALwAvADAAYgA1ADYAOAA5AGIAYgAtADQAMQA3ADEALQA5ADcAZQA1AC0AYwAyADgAMAAtADkAOQBmADcAYQBiAGUANAAwADAANABmAEgAAAAwAGIANQA2ADgAOQBiAGIALQA0ADEANwAxAC0AOQA3AGUANQAtAGMAMgA4ADAALQA5ADkAZgA3AGEAYgBlADQAMAAwADQAZgDZBAAAMIIE1TCCA72gAwIBAgIIFW3qWt9NdaQwDQYJKoZIhvcNAQEFBQAwfzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCkFwcGxlIEluYy4xJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYDVQQDDCpBcHBsZSBLZXkgU2VydmljZXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQwODI3MTcwMjI3WhcNMTYwODI3MTcwMjI3WjBuMQswCQYDVQQGEwJVUzETMBEGA1UECgwKQW1hem9uLmNvbTEWMBQGA1UECwwNRGlnaXRhbCBWaWRlbzEyMDAGA1UEAwwpRlBTIGZvciBBbWF6b24gSW5zdGFudCBWaWRlbyBhcHBsaWNhdGlvbnMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKTLDDVOTIYAGQO0nwblswQ3jjz4sc9tD7dYdxTgaAekFadAJdcsiOwCtudDLunhE3q4uNMQtAh4UExvzL9pUxhnzyeuAmHOTI8vUCCcVD2mt03w98EUFXpUU82s5EauWX8rrUI07FCdWdnD3ylj/eIVdbbQhKcvkvoipiCO4fedAgMBAAGjggHoMIIB5DAdBgNVHQ4EFgQUW+PdiCeqmpoNPwdJIng5MA465MYwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBRj5EdUy4VxWUYsg6zMRDFkZwMsvjCB4gYDVR0gBIHaMIHXMIHUBgkqhkiG92NkBQEwgcYwgcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2NybC5hcHBsZS5jb20va2V5c2VydmljZXMuY3JsMA4GA1UdDwEB/wQEAwIFIDAuBgsqhkiG92NkBg0BAwEB/wQcAXA1O2DFgVbri+9ptKoYMZ/p8CQpC6dMjuxHqzA4BgsqhkiG92NkBg0BBAEB/wQmASf94c8MkzPOIrjZGeyjlFaiDcQlWfRzqMe/ZMSbmtmEEWv/xP4wDQYJKoZIhvcNAQEFBQADggEBAIKRz+hZDC2v99OCaqJY/6+L1EUJscv2hP6MC5yKSte0rkwuJUYIFbzBUlmyq39Osli5ma+5afrCgTy0Rtw3QVPeZDI47zWfBVNQrgwh+eQ9Gg1pGM6V5MXP4SVsC6MkuygPfQr4fz0WDewfBBU6V13LZr7Y0jZ2AMmrit5W+i11uvL/6oKtA6AYsdX/MWt+IgBkt2prRwxf2S2w0rp41Azzg1a7lXeTqJ5uI22NkjmsjLw0PjnjOKyc0FR96iHW2VbCa+ev1fejVcCJolgVEPd/rZNrRomKvfkEjy1hbVtoxc2W9ndvLt7fU6I5MRCFIWGEHQfK5iYyZLuaX5CmGxg=";expect(mediaKeys.createSession).toHaveBeenCalledOnceWith(drmInfo.mimeType,"cenc",base64ToByteArray(expected));case 2:return _context460.a(2)}},_callee460)})));it("accepts ArrayBuffer serverCertificate",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee461(){var initData,certBase64,certBuffer,expected;return _regenerator().w(function(_context461){while(1)switch(_context461.n){case 0:initData=base64ToByteArray("VAAAAHMAawBkADoALwAvADAAYgA1ADYAOAA5AGIAYgAtADQAMQA3ADEALQA5ADcAZQA1AC0AYwAyADgAMAAtADkAOQBmADcAYQBiAGUANAAwADAANABmAA==");certBase64="MIIE1TCCA72gAwIBAgIIFW3qWt9NdaQwDQYJKoZIhvcNAQEFBQAwfzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCkFwcGxlIEluYy4xJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYDVQQDDCpBcHBsZSBLZXkgU2VydmljZXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQwODI3MTcwMjI3WhcNMTYwODI3MTcwMjI3WjBuMQswCQYDVQQGEwJVUzETMBEGA1UECgwKQW1hem9uLmNvbTEWMBQGA1UECwwNRGlnaXRhbCBWaWRlbzEyMDAGA1UEAwwpRlBTIGZvciBBbWF6b24gSW5zdGFudCBWaWRlbyBhcHBsaWNhdGlvbnMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKTLDDVOTIYAGQO0nwblswQ3jjz4sc9tD7dYdxTgaAekFadAJdcsiOwCtudDLunhE3q4uNMQtAh4UExvzL9pUxhnzyeuAmHOTI8vUCCcVD2mt03w98EUFXpUU82s5EauWX8rrUI07FCdWdnD3ylj/eIVdbbQhKcvkvoipiCO4fedAgMBAAGjggHoMIIB5DAdBgNVHQ4EFgQUW+PdiCeqmpoNPwdJIng5MA465MYwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBRj5EdUy4VxWUYsg6zMRDFkZwMsvjCB4gYDVR0gBIHaMIHXMIHUBgkqhkiG92NkBQEwgcYwgcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2NybC5hcHBsZS5jb20va2V5c2VydmljZXMuY3JsMA4GA1UdDwEB/wQEAwIFIDAuBgsqhkiG92NkBg0BAwEB/wQcAXA1O2DFgVbri+9ptKoYMZ/p8CQpC6dMjuxHqzA4BgsqhkiG92NkBg0BBAEB/wQmASf94c8MkzPOIrjZGeyjlFaiDcQlWfRzqMe/ZMSbmtmEEWv/xP4wDQYJKoZIhvcNAQEFBQADggEBAIKRz+hZDC2v99OCaqJY/6+L1EUJscv2hP6MC5yKSte0rkwuJUYIFbzBUlmyq39Osli5ma+5afrCgTy0Rtw3QVPeZDI47zWfBVNQrgwh+eQ9Gg1pGM6V5MXP4SVsC6MkuygPfQr4fz0WDewfBBU6V13LZr7Y0jZ2AMmrit5W+i11uvL/6oKtA6AYsdX/MWt+IgBkt2prRwxf2S2w0rp41Azzg1a7lXeTqJ5uI22NkjmsjLw0PjnjOKyc0FR96iHW2VbCa+ev1fejVcCJolgVEPd/rZNrRomKvfkEjy1hbVtoxc2W9ndvLt7fU6I5MRCFIWGEHQfK5iYyZLuaX5CmGxg=";certBuffer=base64ToByteArray(certBase64);drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.apple.fps.1_0"/* FAIR_PLAY_1_0 */,{licenseServer:{serverCertificate:certBuffer.buffer}}),licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.apple.fps"/* FAIR_PLAY */}]}));mediaKeys.keySystem="com.apple.fps.1_0"/* FAIR_PLAY_1_0 */;_context461.n=1;return emitEncrypted(initData,"cenc");case 1:expected="VAAAAHMAawBkADoALwAvADAAYgA1ADYAOAA5AGIAYgAtADQAMQA3ADEALQA5ADcAZQA1AC0AYwAyADgAMAAtADkAOQBmADcAYQBiAGUANAAwADAANABmAEgAAAAwAGIANQA2ADgAOQBiAGIALQA0ADEANwAxAC0AOQA3AGUANQAtAGMAMgA4ADAALQA5ADkAZgA3AGEAYgBlADQAMAAwADQAZgDZBAAAMIIE1TCCA72gAwIBAgIIFW3qWt9NdaQwDQYJKoZIhvcNAQEFBQAwfzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCkFwcGxlIEluYy4xJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYDVQQDDCpBcHBsZSBLZXkgU2VydmljZXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQwODI3MTcwMjI3WhcNMTYwODI3MTcwMjI3WjBuMQswCQYDVQQGEwJVUzETMBEGA1UECgwKQW1hem9uLmNvbTEWMBQGA1UECwwNRGlnaXRhbCBWaWRlbzEyMDAGA1UEAwwpRlBTIGZvciBBbWF6b24gSW5zdGFudCBWaWRlbyBhcHBsaWNhdGlvbnMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKTLDDVOTIYAGQO0nwblswQ3jjz4sc9tD7dYdxTgaAekFadAJdcsiOwCtudDLunhE3q4uNMQtAh4UExvzL9pUxhnzyeuAmHOTI8vUCCcVD2mt03w98EUFXpUU82s5EauWX8rrUI07FCdWdnD3ylj/eIVdbbQhKcvkvoipiCO4fedAgMBAAGjggHoMIIB5DAdBgNVHQ4EFgQUW+PdiCeqmpoNPwdJIng5MA465MYwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBRj5EdUy4VxWUYsg6zMRDFkZwMsvjCB4gYDVR0gBIHaMIHXMIHUBgkqhkiG92NkBQEwgcYwgcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2NybC5hcHBsZS5jb20va2V5c2VydmljZXMuY3JsMA4GA1UdDwEB/wQEAwIFIDAuBgsqhkiG92NkBg0BAwEB/wQcAXA1O2DFgVbri+9ptKoYMZ/p8CQpC6dMjuxHqzA4BgsqhkiG92NkBg0BBAEB/wQmASf94c8MkzPOIrjZGeyjlFaiDcQlWfRzqMe/ZMSbmtmEEWv/xP4wDQYJKoZIhvcNAQEFBQADggEBAIKRz+hZDC2v99OCaqJY/6+L1EUJscv2hP6MC5yKSte0rkwuJUYIFbzBUlmyq39Osli5ma+5afrCgTy0Rtw3QVPeZDI47zWfBVNQrgwh+eQ9Gg1pGM6V5MXP4SVsC6MkuygPfQr4fz0WDewfBBU6V13LZr7Y0jZ2AMmrit5W+i11uvL/6oKtA6AYsdX/MWt+IgBkt2prRwxf2S2w0rp41Azzg1a7lXeTqJ5uI22NkjmsjLw0PjnjOKyc0FR96iHW2VbCa+ev1fejVcCJolgVEPd/rZNrRomKvfkEjy1hbVtoxc2W9ndvLt7fU6I5MRCFIWGEHQfK5iYyZLuaX5CmGxg=";expect(mediaKeys.createSession).toHaveBeenCalledOnceWith(drmInfo.mimeType,"cenc",base64ToByteArray(expected));case 2:return _context461.a(2)}},_callee461)})));describe("and certificate data was not configured",function(){it("emits an error event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee462(){var initData;return _regenerator().w(function(_context462){while(1)switch(_context462.n){case 0:initData=new Uint8Array(0);drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.apple.fps"/* FAIR_PLAY */}]}));mediaKeys.keySystem="com.apple.fps.1_0"/* FAIR_PLAY_1_0 */;_context462.n=1;return emitEncrypted(initData,"cenc");case 1:expectError("FairPlay requires certificate data");case 2:return _context462.a(2)}},_callee462)})))});describe("with initDataTransformer",function(){it("uses custom transform instead of default",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee463(){var initData,certBase64,customResult,transform;return _regenerator().w(function(_context463){while(1)switch(_context463.n){case 0:initData=base64ToByteArray("VAAAAHMAawBkADoALwAvADAAYgA1ADYAOAA5AGIAYgAtADQAMQA3ADEALQA5ADcAZQA1AC0AYwAyADgAMAAtADkAOQBmADcAYQBiAGUANAAwADAANABmAA==");certBase64="AQID";customResult=new Uint8Array([9,9,9]);transform=createSpy30("initDataTransformer").and.returnValue(customResult);drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.apple.fps.1_0"/* FAIR_PLAY_1_0 */,{licenseServer:{serverCertificate:certBase64},initDataTransformer:transform}),licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.apple.fps"/* FAIR_PLAY */}]}));mediaKeys.keySystem="com.apple.fps.1_0"/* FAIR_PLAY_1_0 */;_context463.n=1;return emitEncrypted(initData,"cenc");case 1:expect(transform).toHaveBeenCalledOnceWith(any27(Uint8Array),"cenc",objectContaining22({mimeType:drmInfo.mimeType}));expect(mediaKeys.createSession).toHaveBeenCalledOnceWith(drmInfo.mimeType,"cenc",customResult);case 2:return _context463.a(2)}},_callee463)})));it("uses custom transform with BufferSource certificate",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee464(){var initData,certBuffer,customResult,transform;return _regenerator().w(function(_context464){while(1)switch(_context464.n){case 0:initData=base64ToByteArray("VAAAAHMAawBkADoALwAvADAAYgA1ADYAOAA5AGIAYgAtADQAMQA3ADEALQA5ADcAZQA1AC0AYwAyADgAMAAtADkAOQBmADcAYQBiAGUANAAwADAANABmAA==");certBuffer=new Uint8Array([1,2,3]);customResult=new Uint8Array([9,9,9]);transform=createSpy30("initDataTransformer").and.returnValue(customResult);drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.apple.fps.1_0"/* FAIR_PLAY_1_0 */,{licenseServer:{serverCertificate:certBuffer.buffer},initDataTransformer:transform}),licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.apple.fps"/* FAIR_PLAY */}]}));mediaKeys.keySystem="com.apple.fps.1_0"/* FAIR_PLAY_1_0 */;_context464.n=1;return emitEncrypted(initData,"cenc");case 1:expect(transform).toHaveBeenCalledOnceWith(any27(Uint8Array),"cenc",objectContaining22({mimeType:drmInfo.mimeType}));expect(mediaKeys.createSession).toHaveBeenCalledOnceWith(drmInfo.mimeType,"cenc",customResult);case 2:return _context464.a(2)}},_callee464)})));it("uses custom transform with non-FairPlay key system",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee465(){var initData,customResult,transform;return _regenerator().w(function(_context465){while(1)switch(_context465.n){case 0:initData=new Uint8Array(16);customResult=new Uint8Array([7,7,7]);transform=createSpy30("initDataTransformer").and.returnValue(customResult);drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{licenseServer:{},initDataTransformer:transform}),licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(drmInfo);_context465.n=1;return emitEncrypted(initData);case 1:expect(transform).toHaveBeenCalledOnceWith(any27(Uint8Array),"cenc",objectContaining22({mimeType:drmInfo.mimeType}));expect(mediaKeys.createSession).toHaveBeenCalledOnceWith(drmInfo.mimeType,"cenc",customResult);case 2:return _context465.a(2)}},_callee465)})));it("uses default createFairPlaySessionInitData when initDataTransformer is not set",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee466(){var initData,certBase64,expected;return _regenerator().w(function(_context466){while(1)switch(_context466.n){case 0:initData=base64ToByteArray("VAAAAHMAawBkADoALwAvADAAYgA1ADYAOAA5AGIAYgAtADQAMQA3ADEALQA5ADcAZQA1AC0AYwAyADgAMAAtADkAOQBmADcAYQBiAGUANAAwADAANABmAA==");certBase64="MIIE1TCCA72gAwIBAgIIFW3qWt9NdaQwDQYJKoZIhvcNAQEFBQAwfzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCkFwcGxlIEluYy4xJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYDVQQDDCpBcHBsZSBLZXkgU2VydmljZXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQwODI3MTcwMjI3WhcNMTYwODI3MTcwMjI3WjBuMQswCQYDVQQGEwJVUzETMBEGA1UECgwKQW1hem9uLmNvbTEWMBQGA1UECwwNRGlnaXRhbCBWaWRlbzEyMDAGA1UEAwwpRlBTIGZvciBBbWF6b24gSW5zdGFudCBWaWRlbyBhcHBsaWNhdGlvbnMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKTLDDVOTIYAGQO0nwblswQ3jjz4sc9tD7dYdxTgaAekFadAJdcsiOwCtudDLunhE3q4uNMQtAh4UExvzL9pUxhnzyeuAmHOTI8vUCCcVD2mt03w98EUFXpUU82s5EauWX8rrUI07FCdWdnD3ylj/eIVdbbQhKcvkvoipiCO4fedAgMBAAGjggHoMIIB5DAdBgNVHQ4EFgQUW+PdiCeqmpoNPwdJIng5MA465MYwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBRj5EdUy4VxWUYsg6zMRDFkZwMsvjCB4gYDVR0gBIHaMIHXMIHUBgkqhkiG92NkBQEwgcYwgcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2NybC5hcHBsZS5jb20va2V5c2VydmljZXMuY3JsMA4GA1UdDwEB/wQEAwIFIDAuBgsqhkiG92NkBg0BAwEB/wQcAXA1O2DFgVbri+9ptKoYMZ/p8CQpC6dMjuxHqzA4BgsqhkiG92NkBg0BBAEB/wQmASf94c8MkzPOIrjZGeyjlFaiDcQlWfRzqMe/ZMSbmtmEEWv/xP4wDQYJKoZIhvcNAQEFBQADggEBAIKRz+hZDC2v99OCaqJY/6+L1EUJscv2hP6MC5yKSte0rkwuJUYIFbzBUlmyq39Osli5ma+5afrCgTy0Rtw3QVPeZDI47zWfBVNQrgwh+eQ9Gg1pGM6V5MXP4SVsC6MkuygPfQr4fz0WDewfBBU6V13LZr7Y0jZ2AMmrit5W+i11uvL/6oKtA6AYsdX/MWt+IgBkt2prRwxf2S2w0rp41Azzg1a7lXeTqJ5uI22NkjmsjLw0PjnjOKyc0FR96iHW2VbCa+ev1fejVcCJolgVEPd/rZNrRomKvfkEjy1hbVtoxc2W9ndvLt7fU6I5MRCFIWGEHQfK5iYyZLuaX5CmGxg=";drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.apple.fps.1_0"/* FAIR_PLAY_1_0 */,{licenseServer:{serverCertificate:certBase64}}),licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.apple.fps"/* FAIR_PLAY */}]}));mediaKeys.keySystem="com.apple.fps.1_0"/* FAIR_PLAY_1_0 */;_context466.n=1;return emitEncrypted(initData,"cenc");case 1:expected="VAAAAHMAawBkADoALwAvADAAYgA1ADYAOAA5AGIAYgAtADQAMQA3ADEALQA5ADcAZQA1AC0AYwAyADgAMAAtADkAOQBmADcAYQBiAGUANAAwADAANABmAEgAAAAwAGIANQA2ADgAOQBiAGIALQA0ADEANwAxAC0AOQA3AGUANQAtAGMAMgA4ADAALQA5ADkAZgA3AGEAYgBlADQAMAAwADQAZgDZBAAAMIIE1TCCA72gAwIBAgIIFW3qWt9NdaQwDQYJKoZIhvcNAQEFBQAwfzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCkFwcGxlIEluYy4xJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYDVQQDDCpBcHBsZSBLZXkgU2VydmljZXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQwODI3MTcwMjI3WhcNMTYwODI3MTcwMjI3WjBuMQswCQYDVQQGEwJVUzETMBEGA1UECgwKQW1hem9uLmNvbTEWMBQGA1UECwwNRGlnaXRhbCBWaWRlbzEyMDAGA1UEAwwpRlBTIGZvciBBbWF6b24gSW5zdGFudCBWaWRlbyBhcHBsaWNhdGlvbnMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKTLDDVOTIYAGQO0nwblswQ3jjz4sc9tD7dYdxTgaAekFadAJdcsiOwCtudDLunhE3q4uNMQtAh4UExvzL9pUxhnzyeuAmHOTI8vUCCcVD2mt03w98EUFXpUU82s5EauWX8rrUI07FCdWdnD3ylj/eIVdbbQhKcvkvoipiCO4fedAgMBAAGjggHoMIIB5DAdBgNVHQ4EFgQUW+PdiCeqmpoNPwdJIng5MA465MYwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBRj5EdUy4VxWUYsg6zMRDFkZwMsvjCB4gYDVR0gBIHaMIHXMIHUBgkqhkiG92NkBQEwgcYwgcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2NybC5hcHBsZS5jb20va2V5c2VydmljZXMuY3JsMA4GA1UdDwEB/wQEAwIFIDAuBgsqhkiG92NkBg0BAwEB/wQcAXA1O2DFgVbri+9ptKoYMZ/p8CQpC6dMjuxHqzA4BgsqhkiG92NkBg0BBAEB/wQmASf94c8MkzPOIrjZGeyjlFaiDcQlWfRzqMe/ZMSbmtmEEWv/xP4wDQYJKoZIhvcNAQEFBQADggEBAIKRz+hZDC2v99OCaqJY/6+L1EUJscv2hP6MC5yKSte0rkwuJUYIFbzBUlmyq39Osli5ma+5afrCgTy0Rtw3QVPeZDI47zWfBVNQrgwh+eQ9Gg1pGM6V5MXP4SVsC6MkuygPfQr4fz0WDewfBBU6V13LZr7Y0jZ2AMmrit5W+i11uvL/6oKtA6AYsdX/MWt+IgBkt2prRwxf2S2w0rp41Azzg1a7lXeTqJ5uI22NkjmsjLw0PjnjOKyc0FR96iHW2VbCa+ev1fejVcCJolgVEPd/rZNrRomKvfkEjy1hbVtoxc2W9ndvLt7fU6I5MRCFIWGEHQfK5iYyZLuaX5CmGxg=";expect(mediaKeys.createSession).toHaveBeenCalledOnceWith(drmInfo.mimeType,"cenc",base64ToByteArray(expected));case 2:return _context466.a(2)}},_callee466)})))})});describe("when keySystem is not FAIR_PLAY_1_0",function(){it("sets the server certificate on media keys from base64 string",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee467(){var initData,certBase64;return _regenerator().w(function(_context467){while(1)switch(_context467.n){case 0:initData=new Uint8Array(16);certBase64="AQID";drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{licenseServer:{serverCertificate:certBase64}}),licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(drmInfo);_context467.n=1;return emitEncrypted(initData);case 1:expect(mediaKeys.setServerCertificate).toHaveBeenCalledOnceWith(base64ToByteArray(certBase64));expect(mediaKeys.createSession).toHaveBeenCalledOnceWith(drmInfo.mimeType,"cenc",initData);case 2:return _context467.a(2)}},_callee467)})));it("sets the server certificate on media keys from ArrayBuffer",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee468(){var initData,certBuffer;return _regenerator().w(function(_context468){while(1)switch(_context468.n){case 0:initData=new Uint8Array(16);certBuffer=new Uint8Array([1,2,3]).buffer;drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{licenseServer:{serverCertificate:certBuffer}}),licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(drmInfo);_context468.n=1;return emitEncrypted(initData);case 1:expect(mediaKeys.setServerCertificate).toHaveBeenCalledOnceWith(new Uint8Array([1,2,3]));case 2:return _context468.a(2)}},_callee468)})))})});describe("isSupported",function(){it("resolves to true if key access can be created from the given DrmInfo",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee469(){return _regenerator().w(function(_context469){while(1)switch(_context469.n){case 0:_context469.n=1;return expectAsync(drmController.isSupported(drmInfo)).toBeResolvedTo({supported:true,persistentState:false});case 1:expect(commonEme.requestMediaKeySystemAccess).toHaveBeenCalledTimes(1);case 2:return _context469.a(2)}},_callee469)})));it("resolves to false if key access cannot be created from the given DrmInfo",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee470(){return _regenerator().w(function(_context470){while(1)switch(_context470.n){case 0:commonEme.requestMediaKeySystemAccess.and.rejectWith(new Error("not supported"));_context470.n=1;return expectAsync(drmController.isSupported(drmInfo)).toBeResolvedTo({supported:false,persistentState:false});case 1:expect(getKeySystemsRequested()).toEqual(["com.widevine.alpha"/* WIDEVINE */,"com.microsoft.playready"/* PLAY_READY */]);case 2:return _context470.a(2)}},_callee470)})))});describe("isEmeSupported",function(){it("returns true if commonEme dependency is provided",function(){expect(drmController.isEmeSupported()).toBeTrue();drmController=new DrmControllerImpl(__spreadProps(__spreadValues({},deps),{commonEme:null}),{licenseProvider:licenseProvider});expect(drmController.isEmeSupported()).toBeFalse()})});describe("closeSessions",function(){it("clears active sessions",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee471(){var sessionCloseSpy;return _regenerator().w(function(_context471){while(1)switch(_context471.n){case 0:sessionCloseSpy=createEventSpy(drmController,"sessionClose");expect(drmController.activeSessions).toBe(0);drmController.setBufferingDrmInfo(drmInfo);_context471.n=1;return emitEncrypted();case 1:expect(drmController.activeSessions).toBe(1);drmController.closeSessions();_context471.n=2;return flushPromises();case 2:expect(drmController.activeSessions).toBe(0);expect(activeSessions).toBe(0);expect(sessionCloseSpy).toHaveBeenCalledTimes(1);case 3:return _context471.a(2)}},_callee471)})))});describe("reset",function(){it("clears error state",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee472(){return _regenerator().w(function(_context472){while(1)switch(_context472.n){case 0:licenseProvider.and.rejectWith(new Error("test error"));drmController.setBufferingDrmInfo(drmInfo);_context472.n=1;return emitEncrypted();case 1:_context472.n=2;return emitMessage();case 2:expect(drmController.error).not.toBeNull();errorSpy.calls.reset();drmController.reset();expect(drmController.error).toBeNull();case 3:return _context472.a(2)}},_callee472)})));it("emits reset event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee473(){var resetSpy;return _regenerator().w(function(_context473){while(1)switch(_context473.n){case 0:resetSpy=jasmine.createSpy("reset");drmController.on("reset",resetSpy);licenseProvider.and.rejectWith(new Error("test error"));drmController.setBufferingDrmInfo(drmInfo);_context473.n=1;return emitEncrypted();case 1:_context473.n=2;return emitMessage();case 2:_context473.n=3;return flushPromises();case 3:errorSpy.calls.reset();drmController.reset();expect(resetSpy).toHaveBeenCalledOnceWith({});case 4:return _context473.a(2)}},_callee473)})));describe("when media is in a decoding error state",function(){it("does not attempt to retry license request",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee474(){var decodingError;return _regenerator().w(function(_context474){while(1)switch(_context474.n){case 0:licenseProvider.and.rejectWith(new Error("license failed"));drmController.setBufferingDrmInfo(drmInfo);_context474.n=1;return emitEncrypted();case 1:_context474.n=2;return emitMessage();case 2:_context474.n=3;return flushPromises();case 3:expectError("license failed");decodingError=new MockMediaError;decodingError.code=ReportableMediaError.MEDIA_ERR_DECODE;media.error=decodingError;licenseProvider.calls.reset();drmController.reset();_context474.n=4;return flushPromises();case 4:expect(licenseProvider).not.toHaveBeenCalled();case 5:return _context474.a(2)}},_callee474)})))});describe("when media is not in a decoding error state",function(){it("retries license request",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee475(){return _regenerator().w(function(_context475){while(1)switch(_context475.n){case 0:licenseProvider.and.rejectWith(new Error("license failed"));drmController.setBufferingDrmInfo(drmInfo);_context475.n=1;return emitEncrypted();case 1:_context475.n=2;return emitMessage();case 2:expectError("license failed");media.error=null;licenseProvider.and.resolveTo(new Uint8Array([1,2,3]).buffer);licenseProvider.calls.reset();drmController.reset();_context475.n=3;return flushPromises();case 3:expect(licenseProvider).toHaveBeenCalledTimes(1);case 4:return _context475.a(2)}},_callee475)})))})});describe("configure",function(){it("overrides base options provided from the constructor",function(){drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{priority:1,audio:{robustness:"SW_SECURE_CRYPTO"/* SW_SECURE_CRYPTO */}}),licenseProvider:licenseProvider});drmController.configure({keySystems:_defineProperty(_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{priority:2,video:{robustness:"HW_SECURE_DECODE"/* HW_SECURE_DECODE */}}),"com.microsoft.playready"/* PLAY_READY */,{priority:3})});drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.widevine.alpha"/* WIDEVINE */},{keySystem:"com.microsoft.playready"/* PLAY_READY */}]}));commonEme.requestMediaKeySystemAccess.and.callFake(function(keySystem){return keySystem==="com.microsoft.playready"/* PLAY_READY */?Promise.resolve(access):Promise.reject(new Error("not supported"))});drmController.initializeForPlayback(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.widevine.alpha"/* WIDEVINE */,pssh:"123"},{keySystem:"com.microsoft.playready"/* PLAY_READY */,pssh:"456"}]}));expect(getKeySystemsRequested()[0]).toBe("com.microsoft.playready"/* PLAY_READY */)});it("merges keySystems with base options",function(){drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{priority:1,audio:{robustness:"SW_SECURE_CRYPTO"/* SW_SECURE_CRYPTO */}}),licenseProvider:licenseProvider});drmController.configure({keySystems:_defineProperty({},"com.microsoft.playready"/* PLAY_READY */,{priority:2})});drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.widevine.alpha"/* WIDEVINE */},{keySystem:"com.microsoft.playready"/* PLAY_READY */}]}));commonEme.requestMediaKeySystemAccess.and.rejectWith(new Error("not supported"));drmController.initializeForPlayback(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.widevine.alpha"/* WIDEVINE */,pssh:"123"},{keySystem:"com.microsoft.playready"/* PLAY_READY */,pssh:"456"}]}));expect(getKeySystemsRequested()).toEqual(["com.microsoft.playready"/* PLAY_READY */// higher priority
|
|
1941
|
-
])})});describe("wildcard key system configuration",function(){it("uses * as wildcard for key system configuration",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1942
|
-
}]}]);case 2:return
|
|
1939
|
+
}),licenseProvider:licenseProvider});mediaKeysSetSpy=createEventSpy(drmController,"mediaKeysSet");sessionCreateSpy=createEventSpy(drmController,"sessionCreate");drmController.initializeForPlayback(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.widevine.alpha"/* WIDEVINE */,pssh:"123"},{keySystem:"com.apple.fps"/* FAIR_PLAY */,pssh:"123"},{keySystem:"com.microsoft.playready"/* PLAY_READY */,pssh:"123"}]}));_context433.n=1;return flushPromises();case 1:expect(mediaKeysSetSpy).toHaveBeenCalledTimes(1);expect(sessionCreateSpy).toHaveBeenCalledTimes(1);expect(mediaKeys.createSession).toHaveBeenCalledTimes(1);expect(getKeySystemsRequested()).toEqual(["com.apple.fps"/* FAIR_PLAY */,"com.microsoft.playready"/* PLAY_READY */,"com.widevine.alpha"/* WIDEVINE */]);case 2:return _context433.a(2)}},_callee433)})));describe("when drmInfo is missing mimeType",function(){it("emits an error event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee434(){return _regenerator().w(function(_context434){while(1)switch(_context434.n){case 0:drmController.initializeForPlayback(__spreadProps(__spreadValues({},drmInfo),{mimeType:null,contentProtections:[{keySystem:"com.widevine.alpha"/* WIDEVINE */,pssh:"123"}]}));_context434.n=1;return errorSpy.next();case 1:expectError("Encrypted content must have a mimeType.");case 2:return _context434.a(2)}},_callee434)})))});describe("when drmInfo does not contain the current key system",function(){it("throws",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee435(){return _regenerator().w(function(_context435){while(1)switch(_context435.n){case 0:drmController.initializeForPlayback(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.widevine.alpha"/* WIDEVINE */,pssh:"123"}]}));_context435.n=1;return nextEventAsPromise(drmController,"mediaKeysSet");case 1:drmController.initializeForPlayback(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.microsoft.playready"/* PLAY_READY */,pssh:"123"}]}));_context435.n=2;return errorSpy.next();case 2:expectError("Encrypted content does not support set keySystem: 'com.widevine.alpha'.");case 3:return _context435.a(2)}},_callee435)})))});describe("when drmInfo does not have initDataType",function(){it("defaults to cenc",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee436(){var sessionCreateSpy,keySessionEvent;return _regenerator().w(function(_context436){while(1)switch(_context436.n){case 0:sessionCreateSpy=createEventSpy(drmController,"sessionCreate");drmController.initializeForPlayback(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.widevine.alpha"/* WIDEVINE */,pssh:"123"}],initDataType:null}));_context436.n=1;return sessionCreateSpy.next();case 1:keySessionEvent=_context436.v;expect(keySessionEvent).toEqual({initDataType:"cenc",mimeType:"audio/mp4"});case 2:return _context436.a(2)}},_callee436)})))});describe("when drmInfo does not have contentType",function(){it("creates a session with default configuration",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee437(){var sessionCreateSpy;return _regenerator().w(function(_context437){while(1)switch(_context437.n){case 0:drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{licenseServer:{url:"license-server"}}),licenseProvider:licenseProvider});sessionCreateSpy=createEventSpy(drmController,"sessionCreate");drmController.initializeForPlayback(__spreadProps(__spreadValues({},drmInfo),{contentType:null,contentProtections:[{keySystem:"com.widevine.alpha"/* WIDEVINE */,pssh:"123"}]}));_context437.n=1;return sessionCreateSpy.next();case 1:expect(commonEme.requestMediaKeySystemAccess).toHaveBeenCalledOnceWith("com.widevine.alpha"/* WIDEVINE */,[{initDataTypes:["cenc"]}]);case 2:return _context437.a(2)}},_callee437)})))})});describe("setBufferingDrmInfo",function(){it("resets error event gate",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee438(){var error;return _regenerator().w(function(_context438){while(1)switch(_context438.n){case 0:commonEme.requestMediaKeySystemAccess.and.rejectWith(new DrmError("expected"));_context438.n=1;return emitEncrypted();case 1:_context438.n=2;return emitEncrypted();case 2:_context438.n=3;return emitEncrypted();case 3:expectError("Encrypted content not configured with content protections.");drmController.setBufferingDrmInfo(drmInfo);_context438.n=4;return emitEncrypted();case 4:_context438.n=5;return emitEncrypted();case 5:_context438.n=6;return emitEncrypted();case 6:expect(errorSpy).toHaveBeenCalledTimes(1);error=errorSpy.calls.mostRecent().args[0].error;expect(error.toJSON()).toEqual(objectContaining22({message:"No keySystem supported",extra:{contentProtections:any27(Object),attemptedKeySystems:["com.widevine.alpha"/* WIDEVINE */,"com.microsoft.playready"/* PLAY_READY */]}}));errorSpy.calls.reset();case 7:return _context438.a(2)}},_callee438)})));describe("and the passed abort ref is aborted",function(){it("closes sessions created with passed abort ref",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee439(){var abort1,abort2,sessions;return _regenerator().w(function(_context439){while(1)switch(_context439.n){case 0:abort1=new Abort;drmController.setBufferingDrmInfo(drmInfo,abort1);_context439.n=1;return emitEncrypted(new Uint8Array([1]));case 1:_context439.n=2;return emitEncrypted(new Uint8Array([2]));case 2:_context439.n=3;return emitEncrypted(new Uint8Array([3]));case 3:abort2=new Abort;drmController.setBufferingDrmInfo(drmInfo,abort2);_context439.n=4;return emitEncrypted(new Uint8Array([4]));case 4:_context439.n=5;return emitEncrypted(new Uint8Array([5]));case 5:_context439.n=6;return emitEncrypted(new Uint8Array([6]));case 6:sessions=mediaKeys.createSession.calls.all().map(function(call){return call.returnValue});expect(sessions.length).withContext("total sessions").toEqual(6);abort1.abort();expect(sessions.map(function(session){return session.dispose.calls.count()})).toEqual([1,1,1,0,0,0]);expect(drmController.activeSessions).toEqual(3);abort2.abort();expect(sessions.map(function(session){return session.dispose.calls.count()})).toEqual([1,1,1,1,1,1]);expect(drmController.activeSessions).toEqual(0);case 7:return _context439.a(2)}},_callee439)})));it("does not close sessions again after dispose",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee440(){var abort,session,disposeCount;return _regenerator().w(function(_context440){while(1)switch(_context440.n){case 0:abort=new Abort;drmController.setBufferingDrmInfo(drmInfo,abort);_context440.n=1;return emitEncrypted();case 1:session=mediaKeys.createSession.calls.mostRecent().returnValue;drmController.dispose();disposeCount=session.dispose.calls.count();abort.abort();expect(session.dispose.calls.count()).toBe(disposeCount);case 2:return _context440.a(2)}},_callee440)})))})});describe("when an encrypted event is observed",function(){it("throws error if contentProtections are not set",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee441(){return _regenerator().w(function(_context441){while(1)switch(_context441.n){case 0:_context441.n=1;return emitEncrypted();case 1:expectError("Encrypted content not configured with content protections.");case 2:return _context441.a(2)}},_callee441)})));describe("and the drm controller is disposed",function(){it("does nothing",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee442(){return _regenerator().w(function(_context442){while(1)switch(_context442.n){case 0:drmController.dispose();_context442.n=1;return emitEncrypted();case 1:expect(errorSpy).not.toHaveBeenCalled();case 2:return _context442.a(2)}},_callee442)})))});describe("when media keys have not been created",function(){it("creates and sets media keys, then creates a session",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee443(){var sessionCreatSpy;return _regenerator().w(function(_context443){while(1)switch(_context443.n){case 0:sessionCreatSpy=createEventSpy(drmController,"sessionCreate");drmController.setBufferingDrmInfo(drmInfo);_context443.n=1;return emitEncrypted();case 1:expect(commonEme.requestMediaKeySystemAccess).toHaveBeenCalledTimes(1);expect(access.createMediaKeys).toHaveBeenCalledTimes(1);expect(mediaKeys.setOnElement).toHaveBeenCalledOnceWith(media);expect(mediaKeys.createSession).toHaveBeenCalledTimes(1);expect(sessionCreatSpy).toHaveBeenCalledOnceWith({mimeType:"audio/mp4",initDataType:"cenc"});case 2:return _context443.a(2)}},_callee443)})));it("picks the first supported keySystem",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee444(){return _regenerator().w(function(_context444){while(1)switch(_context444.n){case 0:drmController.setBufferingDrmInfo(drmInfo);commonEme.requestMediaKeySystemAccess.and.returnValues(Promise.reject(new DrmError("not supported")),Promise.resolve(access));_context444.n=1;return emitEncrypted();case 1:expect(getKeySystemsRequested()).toEqual(["com.widevine.alpha"/* WIDEVINE */,"com.microsoft.playready"/* PLAY_READY */]);case 2:return _context444.a(2)}},_callee444)})));it("creates key system access from content protection configuration and robustness options for video",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee445(){var initData;return _regenerator().w(function(_context445){while(1)switch(_context445.n){case 0:drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{licenseServer:{url:"license-server"},video:{robustness:"HW_SECURE_DECODE"/* HW_SECURE_DECODE */}}),licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentType:"video",mimeType:"video/mp4"}));initData=new Uint8Array(0);_context445.n=1;return emitEncrypted(initData,"webm");case 1:expect(commonEme.requestMediaKeySystemAccess).toHaveBeenCalledOnceWith("com.widevine.alpha"/* WIDEVINE */,[{initDataTypes:["cenc"],videoCapabilities:[{contentType:"video/mp4",encryptionScheme:"cenc",robustness:"HW_SECURE_DECODE"/* HW_SECURE_DECODE */}]}]);case 2:return _context445.a(2)}},_callee445)})));it("creates key system access from content protection configuration and robustness options for audio",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee446(){var initData;return _regenerator().w(function(_context446){while(1)switch(_context446.n){case 0:drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.microsoft.playready"/* PLAY_READY */,{licenseServer:{url:"license-server"},audio:{robustness:"SW_SECURE_DECODE"/* SW_SECURE_DECODE */}}),licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.microsoft.playready"/* PLAY_READY */}],contentType:"audio",mimeType:"audio/mp4"}));initData=new Uint8Array(0);_context446.n=1;return emitEncrypted(initData,"cenc");case 1:expect(commonEme.requestMediaKeySystemAccess).toHaveBeenCalledOnceWith("com.microsoft.playready"/* PLAY_READY */,[{initDataTypes:["cenc"],audioCapabilities:[{contentType:"audio/mp4",encryptionScheme:"cenc",robustness:"SW_SECURE_DECODE"/* SW_SECURE_DECODE */}]}]);case 2:return _context446.a(2)}},_callee446)})));it("uses SW_SECURE_CRYPTO as default robustness",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee447(){return _regenerator().w(function(_context447){while(1)switch(_context447.n){case 0:drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.widevine.alpha"/* WIDEVINE */}],contentType:"audio",mimeType:"audio/mp4"}));_context447.n=1;return emitEncrypted();case 1:expect(commonEme.requestMediaKeySystemAccess).toHaveBeenCalledOnceWith("com.widevine.alpha"/* WIDEVINE */,[{initDataTypes:["cenc"],audioCapabilities:[{contentType:"audio/mp4",encryptionScheme:"cenc",robustness:"SW_SECURE_CRYPTO"/* SW_SECURE_CRYPTO */}]}]);case 2:return _context447.a(2)}},_callee447)})));describe("when media key initialization fails",function(){describe("and the error is silent",function(){beforeEach(function(){access.createMediaKeys.and.rejectWith(new ReportableError("",ErrorOrigin.INTERNAL,"silent"/* SILENT */))});it("does not emit an error event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee448(){return _regenerator().w(function(_context448){while(1)switch(_context448.n){case 0:drmController.setBufferingDrmInfo(drmInfo);_context448.n=1;return emitEncrypted();case 1:expect(errorSpy).not.toHaveBeenCalled();case 2:return _context448.a(2)}},_callee448)})))});describe("and the error is not silent",function(){beforeEach(function(){access.createMediaKeys.and.rejectWith(new Error)});it("emits an error event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee449(){return _regenerator().w(function(_context449){while(1)switch(_context449.n){case 0:drmController.setBufferingDrmInfo(drmInfo);_context449.n=1;return emitEncrypted();case 1:expect(errorSpy).toHaveBeenCalledTimes(1);errorSpy.calls.reset();case 2:return _context449.a(2)}},_callee449)})))})});describe("when drmController is disposed",function(){it("does not create a session",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee450(){var licenseServerDeferred;return _regenerator().w(function(_context450){while(1)switch(_context450.n){case 0:licenseServerDeferred=new Deferred;drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{licenseServer:function licenseServer(){return licenseServerDeferred}})});drmController.setBufferingDrmInfo(drmInfo);_context450.n=1;return emitEncrypted();case 1:expect(drmController.activeSessions).toBe(0);drmController.dispose();licenseServerDeferred.resolve({serverCertificate:"cert"});_context450.n=2;return flushPromises();case 2:expect(drmController.activeSessions).toBe(0);case 3:return _context450.a(2)}},_callee450)})))})});describe("when initData is nullish",function(){it("emits an error event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee451(){return _regenerator().w(function(_context451){while(1)switch(_context451.n){case 0:logger.value.debug.calls.reset();drmController.setBufferingDrmInfo(drmInfo);_context451.n=1;return emitEncrypted(null);case 1:expectError("encrypted event provided null initData. Check CORS policies.");expect(mediaKeys.createSession).not.toHaveBeenCalled();case 2:return _context451.a(2)}},_callee451)})))});it("reuses sessions with matching initialization data",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee452(){return _regenerator().w(function(_context452){while(1)switch(_context452.n){case 0:drmController.setBufferingDrmInfo(drmInfo);_context452.n=1;return emitEncrypted(new Uint8Array([1,2,3]));case 1:expect(mediaKeys.createSession).toHaveBeenCalledTimes(1);mediaKeys.createSession.calls.reset();_context452.n=2;return emitEncrypted(new Uint8Array([1,2,3]));case 2:expect(mediaKeys.createSession).not.toHaveBeenCalled();_context452.n=3;return emitEncrypted(new Uint8Array([4,5,6]));case 3:expect(mediaKeys.createSession).toHaveBeenCalledTimes(1);case 4:return _context452.a(2)}},_callee452)})))});describe("when a session error event is observed",function(){it("redispatches the event when first",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee453(){var session;return _regenerator().w(function(_context453){while(1)switch(_context453.n){case 0:drmController.setBufferingDrmInfo(drmInfo);_context453.n=1;return emitEncrypted();case 1:session=getSession(0);expect(errorSpy).not.toHaveBeenCalled();session.dispatch("error",{target:drmController,error:new Error("expected")});expect(errorSpy).toHaveBeenCalledOnceWith({target:drmController,error:new Error("expected")});errorSpy.calls.reset();session.dispatch("error",{target:drmController,error:new Error("expected")});expect(errorSpy).not.toHaveBeenCalled();drmController.setBufferingDrmInfo(drmInfo);session.dispatch("error",{target:drmController,error:new Error("expected2")});expect(errorSpy).toHaveBeenCalledOnceWith({target:drmController,error:new Error("expected2")});errorSpy.calls.reset();case 2:return _context453.a(2)}},_callee453)})))});describe("when a session message event is observed",function(){it("calls the licenseProvider with resolved licenseServer options",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee454(){var message;return _regenerator().w(function(_context454){while(1)switch(_context454.n){case 0:drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty(_defineProperty(_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{licenseServer:function licenseServer(){return Promise.resolve({url:"http://example.com/widevine"})}}),"com.microsoft.playready"/* PLAY_READY */,{licenseServer:function licenseServer(){return{url:"http://example.com/playready"}}}),"com.apple.fps"/* FAIR_PLAY */,{licenseServer:{url:"http://example.com/fairplay"}}),licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(drmInfo);_context454.n=1;return emitEncrypted(new Uint8Array([1,2,3]),"cenc");case 1:message=new ArrayBuffer(1);_context454.n=2;return emitMessage(0,message);case 2:expect(licenseProvider).toHaveBeenCalledOnceWith("com.widevine.alpha"/* WIDEVINE */,{url:"http://example.com/widevine"},message);licenseProvider.calls.reset();mediaKeys.keySystem="com.microsoft.playready"/* PLAY_READY */;_context454.n=3;return emitMessage(0,message);case 3:expect(licenseProvider).toHaveBeenCalledOnceWith("com.microsoft.playready"/* PLAY_READY */,{url:"http://example.com/playready",init:{headers:any27(Object)}},message);licenseProvider.calls.reset();mediaKeys.keySystem="com.apple.fps"/* FAIR_PLAY */;_context454.n=4;return emitMessage(0,message);case 4:expect(licenseProvider).toHaveBeenCalledOnceWith("com.apple.fps"/* FAIR_PLAY */,{url:"http://example.com/fairplay"},message);case 5:return _context454.a(2)}},_callee454)})));describe("when license takes too long to resolve",function(){it("emits an error event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee455(){var message;return _regenerator().w(function(_context455){while(1)switch(_context455.n){case 0:drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{licenseServer:{url:"http://example.com/widevine"}}),licenseProvider:function licenseProvider(){return never}});errorSpy=createEventSpy(drmController,"error");drmController.setBufferingDrmInfo(drmInfo);_context455.n=1;return emitEncrypted(new Uint8Array([1,2,3]),"cenc");case 1:message=new ArrayBuffer(1);_context455.n=2;return emitMessage(0,message);case 2:_context455.n=3;return clock.tick(LICENSE_TIMEOUT);case 3:expectError("License provider timed out after 90s");case 4:return _context455.a(2)}},_callee455)})))});describe("when the key system is PlayReady",function(){it("calls the licenseProvider with unpacked license server options",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee456(){var setPlayReady,message,challenge,xml,_message;return _regenerator().w(function(_context456){while(1)switch(_context456.n){case 0:setPlayReady=function _setPlayReady(){drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.microsoft.playready"/* PLAY_READY */}]}));mediaKeys.keySystem="com.microsoft.playready"/* PLAY_READY */};drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.microsoft.playready"/* PLAY_READY */,{licenseServer:function licenseServer(){return{url:"http://example.com/playready",init:{headers:[["HeaderA","ValueA"]]}}}}),licenseProvider:licenseProvider});message=new ArrayBuffer(1);setPlayReady();_context456.n=1;return emitEncrypted();case 1:_context456.n=2;return emitMessage(0,message);case 2:expect(licenseProvider).toHaveBeenCalledOnceWith("com.microsoft.playready"/* PLAY_READY */,{url:"http://example.com/playready",init:{headers:{HeaderA:"ValueA","Content-Type":"text/xml; charset=utf-8"}}},message);licenseProvider.calls.reset();drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.microsoft.playready"/* PLAY_READY */,{licenseServer:function licenseServer(){return{url:"http://example.com/playready"}}}),licenseProvider:licenseProvider});challenge=new Uint8Array([1,2,3,4,5,6]).buffer;xml="<PlayReadyKeyMessage type=\"LicenseAcquisition\">\n <LicenseAcquisition Version=\"1\">\n <Challenge encoding=\"base64encoded\">".concat(bufferToBase64(challenge),"</Challenge>\n <HttpHeaders>\n <HttpHeader>\n <name>HeaderA</name>\n <value>ValueA</value>\n </HttpHeader>\n <HttpHeader>\n <name>HeaderB</name>\n <value>ValueB</value>\n </HttpHeader>\n </HttpHeaders>\n </LicenseAcquisition>\n </PlayReadyKeyMessage>");_message=utf16ToUint16Array(xml);setPlayReady();_context456.n=3;return emitEncrypted();case 3:_context456.n=4;return emitMessage(0,_message.buffer);case 4:expect(licenseProvider).toHaveBeenCalledOnceWith("com.microsoft.playready"/* PLAY_READY */,{url:"http://example.com/playready",init:{headers:{HeaderA:"ValueA",HeaderB:"ValueB"}}},challenge);case 5:return _context456.a(2)}},_callee456)})))});it("updates the respective session with the license response",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee457(){var message1,message2,licenseResponsePromise1,licenseResponsePromise2,licenseResponse1,licenseResponse2;return _regenerator().w(function(_context457){while(1)switch(_context457.n){case 0:drmController.setBufferingDrmInfo(drmInfo);_context457.n=1;return emitEncrypted(new Uint8Array([1,2,3]),"cenc");case 1:_context457.n=2;return emitEncrypted(new Uint8Array([4,5,6]),"cenc");case 2:_context457.n=3;return emitEncrypted(new Uint8Array([4,5,6]),"cenc");case 3:expect(activeSessions).toBe(2);expect(drmController.activeSessions).toBe(2);message1=new ArrayBuffer(1);message2=new ArrayBuffer(2);licenseResponsePromise1=new Deferred;licenseResponsePromise2=new Deferred;licenseProvider.and.returnValues(licenseResponsePromise1,licenseResponsePromise2);_context457.n=4;return emitMessage(0,message1);case 4:expect(licenseProvider).toHaveBeenCalledOnceWith("com.widevine.alpha"/* WIDEVINE */,{},message1);licenseProvider.calls.reset();_context457.n=5;return emitMessage(1,message2);case 5:expect(licenseProvider).toHaveBeenCalledOnceWith("com.widevine.alpha"/* WIDEVINE */,{},message2);licenseResponse1=new Uint8Array(1);licenseResponse2=new Uint8Array(2);licenseResponsePromise1.resolve(licenseResponse1.buffer);licenseResponsePromise2.resolve(licenseResponse2.buffer);_context457.n=6;return flushPromises();case 6:expect(getSession(0).update).toHaveBeenCalledOnceWith(licenseResponse1.buffer);expect(getSession(1).update).toHaveBeenCalledOnceWith(licenseResponse2.buffer);case 7:return _context457.a(2)}},_callee457)})));describe("when the session is closed",function(){it("removes the closed session",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee458(){var sessionCloseSpy;return _regenerator().w(function(_context458){while(1)switch(_context458.n){case 0:drmController.setBufferingDrmInfo(drmInfo);_context458.n=1;return emitEncrypted(new Uint8Array([1,2,3]),"cenc");case 1:sessionCloseSpy=createEventSpy(drmController,"sessionClose");expect(drmController.activeSessions).toBe(1);getSession(0).dispatch("closed",{reason:"closed-by-application"});_context458.n=2;return flushPromises();case 2:expect(drmController.activeSessions).toBe(0);expect(sessionCloseSpy).toHaveBeenCalledTimes(1);case 3:return _context458.a(2)}},_callee458)})))});describe("when the session is disposed",function(){it("does not update the closed session",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee459(){var licenseResponsePromise,session;return _regenerator().w(function(_context459){while(1)switch(_context459.n){case 0:drmController.setBufferingDrmInfo(drmInfo);_context459.n=1;return emitEncrypted(new Uint8Array(0),"cenc");case 1:licenseResponsePromise=new Deferred;licenseProvider.and.returnValue(licenseResponsePromise);session=getSession(0);_context459.n=2;return emitMessage();case 2:session.disposed=true;licenseResponsePromise.resolve(new Uint8Array(1).buffer);_context459.n=3;return licenseResponsePromise;case 3:expect(session.update).not.toHaveBeenCalled();case 4:return _context459.a(2)}},_callee459)})))});describe("when the license provider rejects",function(){it("emits an error event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee460(){var initData,error;return _regenerator().w(function(_context460){while(1)switch(_context460.n){case 0:initData=new Uint8Array(0);drmController.setBufferingDrmInfo(drmInfo);_context460.n=1;return emitEncrypted(initData,"cenc");case 1:error=new Error("expected license error");licenseProvider.and.rejectWith(error);expect(errorSpy).not.toHaveBeenCalled();_context460.n=2;return emitMessage();case 2:expectError("expected license error");case 3:return _context460.a(2)}},_callee460)})))});describe("when message is not an ArrayBuffer",function(){it("emits an error event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee461(){var initData;return _regenerator().w(function(_context461){while(1)switch(_context461.n){case 0:drmController.setBufferingDrmInfo(drmInfo);initData=new Uint8Array(0);_context461.n=1;return emitEncrypted(initData,"cenc");case 1:_context461.n=2;return emitMessage(0,// @ts-expect-error Expected ArrayBuffer
|
|
1940
|
+
null);case 2:expectError("Expected: instance of ArrayBuffer, but was: null. At: message");case 3:return _context461.a(2)}},_callee461)})))})});describe("serverCertificate",function(){describe("when keySystem is FAIR_PLAY_1_0",function(){it("initializes sessions using createFairPlaySessionInitData",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee462(){var initData,certBase64,expected;return _regenerator().w(function(_context462){while(1)switch(_context462.n){case 0:initData=base64ToByteArray("VAAAAHMAawBkADoALwAvADAAYgA1ADYAOAA5AGIAYgAtADQAMQA3ADEALQA5ADcAZQA1AC0AYwAyADgAMAAtADkAOQBmADcAYQBiAGUANAAwADAANABmAA==");certBase64="MIIE1TCCA72gAwIBAgIIFW3qWt9NdaQwDQYJKoZIhvcNAQEFBQAwfzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCkFwcGxlIEluYy4xJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYDVQQDDCpBcHBsZSBLZXkgU2VydmljZXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQwODI3MTcwMjI3WhcNMTYwODI3MTcwMjI3WjBuMQswCQYDVQQGEwJVUzETMBEGA1UECgwKQW1hem9uLmNvbTEWMBQGA1UECwwNRGlnaXRhbCBWaWRlbzEyMDAGA1UEAwwpRlBTIGZvciBBbWF6b24gSW5zdGFudCBWaWRlbyBhcHBsaWNhdGlvbnMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKTLDDVOTIYAGQO0nwblswQ3jjz4sc9tD7dYdxTgaAekFadAJdcsiOwCtudDLunhE3q4uNMQtAh4UExvzL9pUxhnzyeuAmHOTI8vUCCcVD2mt03w98EUFXpUU82s5EauWX8rrUI07FCdWdnD3ylj/eIVdbbQhKcvkvoipiCO4fedAgMBAAGjggHoMIIB5DAdBgNVHQ4EFgQUW+PdiCeqmpoNPwdJIng5MA465MYwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBRj5EdUy4VxWUYsg6zMRDFkZwMsvjCB4gYDVR0gBIHaMIHXMIHUBgkqhkiG92NkBQEwgcYwgcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2NybC5hcHBsZS5jb20va2V5c2VydmljZXMuY3JsMA4GA1UdDwEB/wQEAwIFIDAuBgsqhkiG92NkBg0BAwEB/wQcAXA1O2DFgVbri+9ptKoYMZ/p8CQpC6dMjuxHqzA4BgsqhkiG92NkBg0BBAEB/wQmASf94c8MkzPOIrjZGeyjlFaiDcQlWfRzqMe/ZMSbmtmEEWv/xP4wDQYJKoZIhvcNAQEFBQADggEBAIKRz+hZDC2v99OCaqJY/6+L1EUJscv2hP6MC5yKSte0rkwuJUYIFbzBUlmyq39Osli5ma+5afrCgTy0Rtw3QVPeZDI47zWfBVNQrgwh+eQ9Gg1pGM6V5MXP4SVsC6MkuygPfQr4fz0WDewfBBU6V13LZr7Y0jZ2AMmrit5W+i11uvL/6oKtA6AYsdX/MWt+IgBkt2prRwxf2S2w0rp41Azzg1a7lXeTqJ5uI22NkjmsjLw0PjnjOKyc0FR96iHW2VbCa+ev1fejVcCJolgVEPd/rZNrRomKvfkEjy1hbVtoxc2W9ndvLt7fU6I5MRCFIWGEHQfK5iYyZLuaX5CmGxg=";drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.apple.fps.1_0"/* FAIR_PLAY_1_0 */,{licenseServer:{serverCertificate:certBase64}}),licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.apple.fps"/* FAIR_PLAY */}]}));mediaKeys.keySystem="com.apple.fps.1_0"/* FAIR_PLAY_1_0 */;_context462.n=1;return emitEncrypted(initData,"cenc");case 1:expected="VAAAAHMAawBkADoALwAvADAAYgA1ADYAOAA5AGIAYgAtADQAMQA3ADEALQA5ADcAZQA1AC0AYwAyADgAMAAtADkAOQBmADcAYQBiAGUANAAwADAANABmAEgAAAAwAGIANQA2ADgAOQBiAGIALQA0ADEANwAxAC0AOQA3AGUANQAtAGMAMgA4ADAALQA5ADkAZgA3AGEAYgBlADQAMAAwADQAZgDZBAAAMIIE1TCCA72gAwIBAgIIFW3qWt9NdaQwDQYJKoZIhvcNAQEFBQAwfzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCkFwcGxlIEluYy4xJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYDVQQDDCpBcHBsZSBLZXkgU2VydmljZXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQwODI3MTcwMjI3WhcNMTYwODI3MTcwMjI3WjBuMQswCQYDVQQGEwJVUzETMBEGA1UECgwKQW1hem9uLmNvbTEWMBQGA1UECwwNRGlnaXRhbCBWaWRlbzEyMDAGA1UEAwwpRlBTIGZvciBBbWF6b24gSW5zdGFudCBWaWRlbyBhcHBsaWNhdGlvbnMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKTLDDVOTIYAGQO0nwblswQ3jjz4sc9tD7dYdxTgaAekFadAJdcsiOwCtudDLunhE3q4uNMQtAh4UExvzL9pUxhnzyeuAmHOTI8vUCCcVD2mt03w98EUFXpUU82s5EauWX8rrUI07FCdWdnD3ylj/eIVdbbQhKcvkvoipiCO4fedAgMBAAGjggHoMIIB5DAdBgNVHQ4EFgQUW+PdiCeqmpoNPwdJIng5MA465MYwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBRj5EdUy4VxWUYsg6zMRDFkZwMsvjCB4gYDVR0gBIHaMIHXMIHUBgkqhkiG92NkBQEwgcYwgcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2NybC5hcHBsZS5jb20va2V5c2VydmljZXMuY3JsMA4GA1UdDwEB/wQEAwIFIDAuBgsqhkiG92NkBg0BAwEB/wQcAXA1O2DFgVbri+9ptKoYMZ/p8CQpC6dMjuxHqzA4BgsqhkiG92NkBg0BBAEB/wQmASf94c8MkzPOIrjZGeyjlFaiDcQlWfRzqMe/ZMSbmtmEEWv/xP4wDQYJKoZIhvcNAQEFBQADggEBAIKRz+hZDC2v99OCaqJY/6+L1EUJscv2hP6MC5yKSte0rkwuJUYIFbzBUlmyq39Osli5ma+5afrCgTy0Rtw3QVPeZDI47zWfBVNQrgwh+eQ9Gg1pGM6V5MXP4SVsC6MkuygPfQr4fz0WDewfBBU6V13LZr7Y0jZ2AMmrit5W+i11uvL/6oKtA6AYsdX/MWt+IgBkt2prRwxf2S2w0rp41Azzg1a7lXeTqJ5uI22NkjmsjLw0PjnjOKyc0FR96iHW2VbCa+ev1fejVcCJolgVEPd/rZNrRomKvfkEjy1hbVtoxc2W9ndvLt7fU6I5MRCFIWGEHQfK5iYyZLuaX5CmGxg=";expect(mediaKeys.createSession).toHaveBeenCalledOnceWith(drmInfo.mimeType,"cenc",base64ToByteArray(expected));case 2:return _context462.a(2)}},_callee462)})));it("accepts ArrayBuffer serverCertificate",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee463(){var initData,certBase64,certBuffer,expected;return _regenerator().w(function(_context463){while(1)switch(_context463.n){case 0:initData=base64ToByteArray("VAAAAHMAawBkADoALwAvADAAYgA1ADYAOAA5AGIAYgAtADQAMQA3ADEALQA5ADcAZQA1AC0AYwAyADgAMAAtADkAOQBmADcAYQBiAGUANAAwADAANABmAA==");certBase64="MIIE1TCCA72gAwIBAgIIFW3qWt9NdaQwDQYJKoZIhvcNAQEFBQAwfzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCkFwcGxlIEluYy4xJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYDVQQDDCpBcHBsZSBLZXkgU2VydmljZXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQwODI3MTcwMjI3WhcNMTYwODI3MTcwMjI3WjBuMQswCQYDVQQGEwJVUzETMBEGA1UECgwKQW1hem9uLmNvbTEWMBQGA1UECwwNRGlnaXRhbCBWaWRlbzEyMDAGA1UEAwwpRlBTIGZvciBBbWF6b24gSW5zdGFudCBWaWRlbyBhcHBsaWNhdGlvbnMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKTLDDVOTIYAGQO0nwblswQ3jjz4sc9tD7dYdxTgaAekFadAJdcsiOwCtudDLunhE3q4uNMQtAh4UExvzL9pUxhnzyeuAmHOTI8vUCCcVD2mt03w98EUFXpUU82s5EauWX8rrUI07FCdWdnD3ylj/eIVdbbQhKcvkvoipiCO4fedAgMBAAGjggHoMIIB5DAdBgNVHQ4EFgQUW+PdiCeqmpoNPwdJIng5MA465MYwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBRj5EdUy4VxWUYsg6zMRDFkZwMsvjCB4gYDVR0gBIHaMIHXMIHUBgkqhkiG92NkBQEwgcYwgcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2NybC5hcHBsZS5jb20va2V5c2VydmljZXMuY3JsMA4GA1UdDwEB/wQEAwIFIDAuBgsqhkiG92NkBg0BAwEB/wQcAXA1O2DFgVbri+9ptKoYMZ/p8CQpC6dMjuxHqzA4BgsqhkiG92NkBg0BBAEB/wQmASf94c8MkzPOIrjZGeyjlFaiDcQlWfRzqMe/ZMSbmtmEEWv/xP4wDQYJKoZIhvcNAQEFBQADggEBAIKRz+hZDC2v99OCaqJY/6+L1EUJscv2hP6MC5yKSte0rkwuJUYIFbzBUlmyq39Osli5ma+5afrCgTy0Rtw3QVPeZDI47zWfBVNQrgwh+eQ9Gg1pGM6V5MXP4SVsC6MkuygPfQr4fz0WDewfBBU6V13LZr7Y0jZ2AMmrit5W+i11uvL/6oKtA6AYsdX/MWt+IgBkt2prRwxf2S2w0rp41Azzg1a7lXeTqJ5uI22NkjmsjLw0PjnjOKyc0FR96iHW2VbCa+ev1fejVcCJolgVEPd/rZNrRomKvfkEjy1hbVtoxc2W9ndvLt7fU6I5MRCFIWGEHQfK5iYyZLuaX5CmGxg=";certBuffer=base64ToByteArray(certBase64);drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.apple.fps.1_0"/* FAIR_PLAY_1_0 */,{licenseServer:{serverCertificate:certBuffer.buffer}}),licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.apple.fps"/* FAIR_PLAY */}]}));mediaKeys.keySystem="com.apple.fps.1_0"/* FAIR_PLAY_1_0 */;_context463.n=1;return emitEncrypted(initData,"cenc");case 1:expected="VAAAAHMAawBkADoALwAvADAAYgA1ADYAOAA5AGIAYgAtADQAMQA3ADEALQA5ADcAZQA1AC0AYwAyADgAMAAtADkAOQBmADcAYQBiAGUANAAwADAANABmAEgAAAAwAGIANQA2ADgAOQBiAGIALQA0ADEANwAxAC0AOQA3AGUANQAtAGMAMgA4ADAALQA5ADkAZgA3AGEAYgBlADQAMAAwADQAZgDZBAAAMIIE1TCCA72gAwIBAgIIFW3qWt9NdaQwDQYJKoZIhvcNAQEFBQAwfzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCkFwcGxlIEluYy4xJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYDVQQDDCpBcHBsZSBLZXkgU2VydmljZXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQwODI3MTcwMjI3WhcNMTYwODI3MTcwMjI3WjBuMQswCQYDVQQGEwJVUzETMBEGA1UECgwKQW1hem9uLmNvbTEWMBQGA1UECwwNRGlnaXRhbCBWaWRlbzEyMDAGA1UEAwwpRlBTIGZvciBBbWF6b24gSW5zdGFudCBWaWRlbyBhcHBsaWNhdGlvbnMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKTLDDVOTIYAGQO0nwblswQ3jjz4sc9tD7dYdxTgaAekFadAJdcsiOwCtudDLunhE3q4uNMQtAh4UExvzL9pUxhnzyeuAmHOTI8vUCCcVD2mt03w98EUFXpUU82s5EauWX8rrUI07FCdWdnD3ylj/eIVdbbQhKcvkvoipiCO4fedAgMBAAGjggHoMIIB5DAdBgNVHQ4EFgQUW+PdiCeqmpoNPwdJIng5MA465MYwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBRj5EdUy4VxWUYsg6zMRDFkZwMsvjCB4gYDVR0gBIHaMIHXMIHUBgkqhkiG92NkBQEwgcYwgcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2NybC5hcHBsZS5jb20va2V5c2VydmljZXMuY3JsMA4GA1UdDwEB/wQEAwIFIDAuBgsqhkiG92NkBg0BAwEB/wQcAXA1O2DFgVbri+9ptKoYMZ/p8CQpC6dMjuxHqzA4BgsqhkiG92NkBg0BBAEB/wQmASf94c8MkzPOIrjZGeyjlFaiDcQlWfRzqMe/ZMSbmtmEEWv/xP4wDQYJKoZIhvcNAQEFBQADggEBAIKRz+hZDC2v99OCaqJY/6+L1EUJscv2hP6MC5yKSte0rkwuJUYIFbzBUlmyq39Osli5ma+5afrCgTy0Rtw3QVPeZDI47zWfBVNQrgwh+eQ9Gg1pGM6V5MXP4SVsC6MkuygPfQr4fz0WDewfBBU6V13LZr7Y0jZ2AMmrit5W+i11uvL/6oKtA6AYsdX/MWt+IgBkt2prRwxf2S2w0rp41Azzg1a7lXeTqJ5uI22NkjmsjLw0PjnjOKyc0FR96iHW2VbCa+ev1fejVcCJolgVEPd/rZNrRomKvfkEjy1hbVtoxc2W9ndvLt7fU6I5MRCFIWGEHQfK5iYyZLuaX5CmGxg=";expect(mediaKeys.createSession).toHaveBeenCalledOnceWith(drmInfo.mimeType,"cenc",base64ToByteArray(expected));case 2:return _context463.a(2)}},_callee463)})));describe("and certificate data was not configured",function(){it("emits an error event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee464(){var initData;return _regenerator().w(function(_context464){while(1)switch(_context464.n){case 0:initData=new Uint8Array(0);drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.apple.fps"/* FAIR_PLAY */}]}));mediaKeys.keySystem="com.apple.fps.1_0"/* FAIR_PLAY_1_0 */;_context464.n=1;return emitEncrypted(initData,"cenc");case 1:expectError("FairPlay requires certificate data");case 2:return _context464.a(2)}},_callee464)})))});describe("with initDataTransformer",function(){it("uses custom transform instead of default",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee465(){var initData,certBase64,customResult,transform;return _regenerator().w(function(_context465){while(1)switch(_context465.n){case 0:initData=base64ToByteArray("VAAAAHMAawBkADoALwAvADAAYgA1ADYAOAA5AGIAYgAtADQAMQA3ADEALQA5ADcAZQA1AC0AYwAyADgAMAAtADkAOQBmADcAYQBiAGUANAAwADAANABmAA==");certBase64="AQID";customResult=new Uint8Array([9,9,9]);transform=createSpy30("initDataTransformer").and.returnValue(customResult);drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.apple.fps.1_0"/* FAIR_PLAY_1_0 */,{licenseServer:{serverCertificate:certBase64},initDataTransformer:transform}),licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.apple.fps"/* FAIR_PLAY */}]}));mediaKeys.keySystem="com.apple.fps.1_0"/* FAIR_PLAY_1_0 */;_context465.n=1;return emitEncrypted(initData,"cenc");case 1:expect(transform).toHaveBeenCalledOnceWith(any27(Uint8Array),"cenc",objectContaining22({mimeType:drmInfo.mimeType}));expect(mediaKeys.createSession).toHaveBeenCalledOnceWith(drmInfo.mimeType,"cenc",customResult);case 2:return _context465.a(2)}},_callee465)})));it("uses custom transform with BufferSource certificate",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee466(){var initData,certBuffer,customResult,transform;return _regenerator().w(function(_context466){while(1)switch(_context466.n){case 0:initData=base64ToByteArray("VAAAAHMAawBkADoALwAvADAAYgA1ADYAOAA5AGIAYgAtADQAMQA3ADEALQA5ADcAZQA1AC0AYwAyADgAMAAtADkAOQBmADcAYQBiAGUANAAwADAANABmAA==");certBuffer=new Uint8Array([1,2,3]);customResult=new Uint8Array([9,9,9]);transform=createSpy30("initDataTransformer").and.returnValue(customResult);drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.apple.fps.1_0"/* FAIR_PLAY_1_0 */,{licenseServer:{serverCertificate:certBuffer.buffer},initDataTransformer:transform}),licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.apple.fps"/* FAIR_PLAY */}]}));mediaKeys.keySystem="com.apple.fps.1_0"/* FAIR_PLAY_1_0 */;_context466.n=1;return emitEncrypted(initData,"cenc");case 1:expect(transform).toHaveBeenCalledOnceWith(any27(Uint8Array),"cenc",objectContaining22({mimeType:drmInfo.mimeType}));expect(mediaKeys.createSession).toHaveBeenCalledOnceWith(drmInfo.mimeType,"cenc",customResult);case 2:return _context466.a(2)}},_callee466)})));it("uses custom transform with non-FairPlay key system",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee467(){var initData,customResult,transform;return _regenerator().w(function(_context467){while(1)switch(_context467.n){case 0:initData=new Uint8Array(16);customResult=new Uint8Array([7,7,7]);transform=createSpy30("initDataTransformer").and.returnValue(customResult);drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{licenseServer:{},initDataTransformer:transform}),licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(drmInfo);_context467.n=1;return emitEncrypted(initData);case 1:expect(transform).toHaveBeenCalledOnceWith(any27(Uint8Array),"cenc",objectContaining22({mimeType:drmInfo.mimeType}));expect(mediaKeys.createSession).toHaveBeenCalledOnceWith(drmInfo.mimeType,"cenc",customResult);case 2:return _context467.a(2)}},_callee467)})));it("uses default createFairPlaySessionInitData when initDataTransformer is not set",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee468(){var initData,certBase64,expected;return _regenerator().w(function(_context468){while(1)switch(_context468.n){case 0:initData=base64ToByteArray("VAAAAHMAawBkADoALwAvADAAYgA1ADYAOAA5AGIAYgAtADQAMQA3ADEALQA5ADcAZQA1AC0AYwAyADgAMAAtADkAOQBmADcAYQBiAGUANAAwADAANABmAA==");certBase64="MIIE1TCCA72gAwIBAgIIFW3qWt9NdaQwDQYJKoZIhvcNAQEFBQAwfzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCkFwcGxlIEluYy4xJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYDVQQDDCpBcHBsZSBLZXkgU2VydmljZXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQwODI3MTcwMjI3WhcNMTYwODI3MTcwMjI3WjBuMQswCQYDVQQGEwJVUzETMBEGA1UECgwKQW1hem9uLmNvbTEWMBQGA1UECwwNRGlnaXRhbCBWaWRlbzEyMDAGA1UEAwwpRlBTIGZvciBBbWF6b24gSW5zdGFudCBWaWRlbyBhcHBsaWNhdGlvbnMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKTLDDVOTIYAGQO0nwblswQ3jjz4sc9tD7dYdxTgaAekFadAJdcsiOwCtudDLunhE3q4uNMQtAh4UExvzL9pUxhnzyeuAmHOTI8vUCCcVD2mt03w98EUFXpUU82s5EauWX8rrUI07FCdWdnD3ylj/eIVdbbQhKcvkvoipiCO4fedAgMBAAGjggHoMIIB5DAdBgNVHQ4EFgQUW+PdiCeqmpoNPwdJIng5MA465MYwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBRj5EdUy4VxWUYsg6zMRDFkZwMsvjCB4gYDVR0gBIHaMIHXMIHUBgkqhkiG92NkBQEwgcYwgcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2NybC5hcHBsZS5jb20va2V5c2VydmljZXMuY3JsMA4GA1UdDwEB/wQEAwIFIDAuBgsqhkiG92NkBg0BAwEB/wQcAXA1O2DFgVbri+9ptKoYMZ/p8CQpC6dMjuxHqzA4BgsqhkiG92NkBg0BBAEB/wQmASf94c8MkzPOIrjZGeyjlFaiDcQlWfRzqMe/ZMSbmtmEEWv/xP4wDQYJKoZIhvcNAQEFBQADggEBAIKRz+hZDC2v99OCaqJY/6+L1EUJscv2hP6MC5yKSte0rkwuJUYIFbzBUlmyq39Osli5ma+5afrCgTy0Rtw3QVPeZDI47zWfBVNQrgwh+eQ9Gg1pGM6V5MXP4SVsC6MkuygPfQr4fz0WDewfBBU6V13LZr7Y0jZ2AMmrit5W+i11uvL/6oKtA6AYsdX/MWt+IgBkt2prRwxf2S2w0rp41Azzg1a7lXeTqJ5uI22NkjmsjLw0PjnjOKyc0FR96iHW2VbCa+ev1fejVcCJolgVEPd/rZNrRomKvfkEjy1hbVtoxc2W9ndvLt7fU6I5MRCFIWGEHQfK5iYyZLuaX5CmGxg=";drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.apple.fps.1_0"/* FAIR_PLAY_1_0 */,{licenseServer:{serverCertificate:certBase64}}),licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.apple.fps"/* FAIR_PLAY */}]}));mediaKeys.keySystem="com.apple.fps.1_0"/* FAIR_PLAY_1_0 */;_context468.n=1;return emitEncrypted(initData,"cenc");case 1:expected="VAAAAHMAawBkADoALwAvADAAYgA1ADYAOAA5AGIAYgAtADQAMQA3ADEALQA5ADcAZQA1AC0AYwAyADgAMAAtADkAOQBmADcAYQBiAGUANAAwADAANABmAEgAAAAwAGIANQA2ADgAOQBiAGIALQA0ADEANwAxAC0AOQA3AGUANQAtAGMAMgA4ADAALQA5ADkAZgA3AGEAYgBlADQAMAAwADQAZgDZBAAAMIIE1TCCA72gAwIBAgIIFW3qWt9NdaQwDQYJKoZIhvcNAQEFBQAwfzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCkFwcGxlIEluYy4xJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYDVQQDDCpBcHBsZSBLZXkgU2VydmljZXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQwODI3MTcwMjI3WhcNMTYwODI3MTcwMjI3WjBuMQswCQYDVQQGEwJVUzETMBEGA1UECgwKQW1hem9uLmNvbTEWMBQGA1UECwwNRGlnaXRhbCBWaWRlbzEyMDAGA1UEAwwpRlBTIGZvciBBbWF6b24gSW5zdGFudCBWaWRlbyBhcHBsaWNhdGlvbnMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKTLDDVOTIYAGQO0nwblswQ3jjz4sc9tD7dYdxTgaAekFadAJdcsiOwCtudDLunhE3q4uNMQtAh4UExvzL9pUxhnzyeuAmHOTI8vUCCcVD2mt03w98EUFXpUU82s5EauWX8rrUI07FCdWdnD3ylj/eIVdbbQhKcvkvoipiCO4fedAgMBAAGjggHoMIIB5DAdBgNVHQ4EFgQUW+PdiCeqmpoNPwdJIng5MA465MYwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBRj5EdUy4VxWUYsg6zMRDFkZwMsvjCB4gYDVR0gBIHaMIHXMIHUBgkqhkiG92NkBQEwgcYwgcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2NybC5hcHBsZS5jb20va2V5c2VydmljZXMuY3JsMA4GA1UdDwEB/wQEAwIFIDAuBgsqhkiG92NkBg0BAwEB/wQcAXA1O2DFgVbri+9ptKoYMZ/p8CQpC6dMjuxHqzA4BgsqhkiG92NkBg0BBAEB/wQmASf94c8MkzPOIrjZGeyjlFaiDcQlWfRzqMe/ZMSbmtmEEWv/xP4wDQYJKoZIhvcNAQEFBQADggEBAIKRz+hZDC2v99OCaqJY/6+L1EUJscv2hP6MC5yKSte0rkwuJUYIFbzBUlmyq39Osli5ma+5afrCgTy0Rtw3QVPeZDI47zWfBVNQrgwh+eQ9Gg1pGM6V5MXP4SVsC6MkuygPfQr4fz0WDewfBBU6V13LZr7Y0jZ2AMmrit5W+i11uvL/6oKtA6AYsdX/MWt+IgBkt2prRwxf2S2w0rp41Azzg1a7lXeTqJ5uI22NkjmsjLw0PjnjOKyc0FR96iHW2VbCa+ev1fejVcCJolgVEPd/rZNrRomKvfkEjy1hbVtoxc2W9ndvLt7fU6I5MRCFIWGEHQfK5iYyZLuaX5CmGxg=";expect(mediaKeys.createSession).toHaveBeenCalledOnceWith(drmInfo.mimeType,"cenc",base64ToByteArray(expected));case 2:return _context468.a(2)}},_callee468)})))})});describe("when keySystem is not FAIR_PLAY_1_0",function(){it("sets the server certificate on media keys from base64 string",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee469(){var initData,certBase64;return _regenerator().w(function(_context469){while(1)switch(_context469.n){case 0:initData=new Uint8Array(16);certBase64="AQID";drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{licenseServer:{serverCertificate:certBase64}}),licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(drmInfo);_context469.n=1;return emitEncrypted(initData);case 1:expect(mediaKeys.setServerCertificate).toHaveBeenCalledOnceWith(base64ToByteArray(certBase64));expect(mediaKeys.createSession).toHaveBeenCalledOnceWith(drmInfo.mimeType,"cenc",initData);case 2:return _context469.a(2)}},_callee469)})));it("sets the server certificate on media keys from ArrayBuffer",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee470(){var initData,certBuffer;return _regenerator().w(function(_context470){while(1)switch(_context470.n){case 0:initData=new Uint8Array(16);certBuffer=new Uint8Array([1,2,3]).buffer;drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{licenseServer:{serverCertificate:certBuffer}}),licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(drmInfo);_context470.n=1;return emitEncrypted(initData);case 1:expect(mediaKeys.setServerCertificate).toHaveBeenCalledOnceWith(new Uint8Array([1,2,3]));case 2:return _context470.a(2)}},_callee470)})))})});describe("isSupported",function(){it("resolves to true if key access can be created from the given DrmInfo",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee471(){return _regenerator().w(function(_context471){while(1)switch(_context471.n){case 0:_context471.n=1;return expectAsync(drmController.isSupported(drmInfo)).toBeResolvedTo({supported:true,persistentState:false});case 1:expect(commonEme.requestMediaKeySystemAccess).toHaveBeenCalledTimes(1);case 2:return _context471.a(2)}},_callee471)})));it("resolves to false if key access cannot be created from the given DrmInfo",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee472(){return _regenerator().w(function(_context472){while(1)switch(_context472.n){case 0:commonEme.requestMediaKeySystemAccess.and.rejectWith(new Error("not supported"));_context472.n=1;return expectAsync(drmController.isSupported(drmInfo)).toBeResolvedTo({supported:false,persistentState:false});case 1:expect(getKeySystemsRequested()).toEqual(["com.widevine.alpha"/* WIDEVINE */,"com.microsoft.playready"/* PLAY_READY */]);case 2:return _context472.a(2)}},_callee472)})))});describe("isEmeSupported",function(){it("returns true if commonEme dependency is provided",function(){expect(drmController.isEmeSupported()).toBeTrue();drmController=new DrmControllerImpl(__spreadProps(__spreadValues({},deps),{commonEme:null}),{licenseProvider:licenseProvider});expect(drmController.isEmeSupported()).toBeFalse()})});describe("excessive sessions",function(){it("warns once when the open session count exceeds the threshold",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee473(){var i;return _regenerator().w(function(_context473){while(1)switch(_context473.n){case 0:drmController.setBufferingDrmInfo(drmInfo);i=0;case 1:if(!(i<EXCESSIVE_SESSION_COUNT)){_context473.n=3;break}_context473.n=2;return emitEncrypted(new Uint8Array([i]));case 2:i++;_context473.n=1;break;case 3:expect(drmController.activeSessions).toBe(EXCESSIVE_SESSION_COUNT);expect(logger.value.warn).not.toHaveBeenCalled();_context473.n=4;return emitEncrypted(new Uint8Array([EXCESSIVE_SESSION_COUNT]));case 4:expect(drmController.activeSessions).toBe(EXCESSIVE_SESSION_COUNT+1);expect(logger.value.warn).toHaveBeenCalledTimes(1);_context473.n=5;return emitEncrypted(new Uint8Array([EXCESSIVE_SESSION_COUNT+1]));case 5:expect(logger.value.warn).toHaveBeenCalledTimes(1);case 6:return _context473.a(2)}},_callee473)})))});describe("closeSessions",function(){it("clears active sessions",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee474(){var sessionCloseSpy;return _regenerator().w(function(_context474){while(1)switch(_context474.n){case 0:sessionCloseSpy=createEventSpy(drmController,"sessionClose");expect(drmController.activeSessions).toBe(0);drmController.setBufferingDrmInfo(drmInfo);_context474.n=1;return emitEncrypted();case 1:expect(drmController.activeSessions).toBe(1);drmController.closeSessions();_context474.n=2;return flushPromises();case 2:expect(drmController.activeSessions).toBe(0);expect(activeSessions).toBe(0);expect(sessionCloseSpy).toHaveBeenCalledTimes(1);case 3:return _context474.a(2)}},_callee474)})))});describe("reset",function(){it("clears error state",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee475(){return _regenerator().w(function(_context475){while(1)switch(_context475.n){case 0:licenseProvider.and.rejectWith(new Error("test error"));drmController.setBufferingDrmInfo(drmInfo);_context475.n=1;return emitEncrypted();case 1:_context475.n=2;return emitMessage();case 2:expect(drmController.error).not.toBeNull();errorSpy.calls.reset();drmController.reset();expect(drmController.error).toBeNull();case 3:return _context475.a(2)}},_callee475)})));it("emits reset event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee476(){var resetSpy;return _regenerator().w(function(_context476){while(1)switch(_context476.n){case 0:resetSpy=jasmine.createSpy("reset");drmController.on("reset",resetSpy);licenseProvider.and.rejectWith(new Error("test error"));drmController.setBufferingDrmInfo(drmInfo);_context476.n=1;return emitEncrypted();case 1:_context476.n=2;return emitMessage();case 2:_context476.n=3;return flushPromises();case 3:errorSpy.calls.reset();drmController.reset();expect(resetSpy).toHaveBeenCalledOnceWith({});case 4:return _context476.a(2)}},_callee476)})));describe("when media is in a decoding error state",function(){it("does not attempt to retry license request",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee477(){var decodingError;return _regenerator().w(function(_context477){while(1)switch(_context477.n){case 0:licenseProvider.and.rejectWith(new Error("license failed"));drmController.setBufferingDrmInfo(drmInfo);_context477.n=1;return emitEncrypted();case 1:_context477.n=2;return emitMessage();case 2:_context477.n=3;return flushPromises();case 3:expectError("license failed");decodingError=new MockMediaError;decodingError.code=ReportableMediaError.MEDIA_ERR_DECODE;media.error=decodingError;licenseProvider.calls.reset();drmController.reset();_context477.n=4;return flushPromises();case 4:expect(licenseProvider).not.toHaveBeenCalled();case 5:return _context477.a(2)}},_callee477)})))});describe("when media is not in a decoding error state",function(){it("retries license request",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee478(){return _regenerator().w(function(_context478){while(1)switch(_context478.n){case 0:licenseProvider.and.rejectWith(new Error("license failed"));drmController.setBufferingDrmInfo(drmInfo);_context478.n=1;return emitEncrypted();case 1:_context478.n=2;return emitMessage();case 2:expectError("license failed");media.error=null;licenseProvider.and.resolveTo(new Uint8Array([1,2,3]).buffer);licenseProvider.calls.reset();drmController.reset();_context478.n=3;return flushPromises();case 3:expect(licenseProvider).toHaveBeenCalledTimes(1);case 4:return _context478.a(2)}},_callee478)})))})});describe("configure",function(){it("overrides base options provided from the constructor",function(){drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{priority:1,audio:{robustness:"SW_SECURE_CRYPTO"/* SW_SECURE_CRYPTO */}}),licenseProvider:licenseProvider});drmController.configure({keySystems:_defineProperty(_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{priority:2,video:{robustness:"HW_SECURE_DECODE"/* HW_SECURE_DECODE */}}),"com.microsoft.playready"/* PLAY_READY */,{priority:3})});drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.widevine.alpha"/* WIDEVINE */},{keySystem:"com.microsoft.playready"/* PLAY_READY */}]}));commonEme.requestMediaKeySystemAccess.and.callFake(function(keySystem){return keySystem==="com.microsoft.playready"/* PLAY_READY */?Promise.resolve(access):Promise.reject(new Error("not supported"))});drmController.initializeForPlayback(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.widevine.alpha"/* WIDEVINE */,pssh:"123"},{keySystem:"com.microsoft.playready"/* PLAY_READY */,pssh:"456"}]}));expect(getKeySystemsRequested()[0]).toBe("com.microsoft.playready"/* PLAY_READY */)});it("merges keySystems with base options",function(){drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{priority:1,audio:{robustness:"SW_SECURE_CRYPTO"/* SW_SECURE_CRYPTO */}}),licenseProvider:licenseProvider});drmController.configure({keySystems:_defineProperty({},"com.microsoft.playready"/* PLAY_READY */,{priority:2})});drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.widevine.alpha"/* WIDEVINE */},{keySystem:"com.microsoft.playready"/* PLAY_READY */}]}));commonEme.requestMediaKeySystemAccess.and.rejectWith(new Error("not supported"));drmController.initializeForPlayback(__spreadProps(__spreadValues({},drmInfo),{contentProtections:[{keySystem:"com.widevine.alpha"/* WIDEVINE */,pssh:"123"},{keySystem:"com.microsoft.playready"/* PLAY_READY */,pssh:"456"}]}));expect(getKeySystemsRequested()).toEqual(["com.microsoft.playready"/* PLAY_READY */// higher priority
|
|
1941
|
+
])})});describe("wildcard key system configuration",function(){it("uses * as wildcard for key system configuration",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee479(){return _regenerator().w(function(_context479){while(1)switch(_context479.n){case 0:drmController=new DrmControllerImpl(deps,{keySystems:{"*":{audio:{robustness:"HW_SECURE_CRYPTO"/* HW_SECURE_CRYPTO */},video:{robustness:"HW_SECURE_DECODE"/* HW_SECURE_DECODE */}}},licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentType:"audio",mimeType:"audio/mp4"}));_context479.n=1;return emitEncrypted();case 1:expect(commonEme.requestMediaKeySystemAccess).toHaveBeenCalledWith("com.widevine.alpha"/* WIDEVINE */,[{initDataTypes:["cenc"],audioCapabilities:[{contentType:"audio/mp4",encryptionScheme:"cenc",robustness:"HW_SECURE_CRYPTO"/* HW_SECURE_CRYPTO */}]}]);case 2:return _context479.a(2)}},_callee479)})));it("prefers specific key system configuration over wildcard",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee480(){return _regenerator().w(function(_context480){while(1)switch(_context480.n){case 0:drmController=new DrmControllerImpl(deps,{keySystems:_defineProperty({"*":{audio:{robustness:"SW_SECURE_CRYPTO"/* SW_SECURE_CRYPTO */}}},"com.widevine.alpha"/* WIDEVINE */,{audio:{robustness:"HW_SECURE_DECODE"/* HW_SECURE_DECODE */}}),licenseProvider:licenseProvider});drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentType:"audio",mimeType:"audio/mp4"}));_context480.n=1;return emitEncrypted();case 1:expect(commonEme.requestMediaKeySystemAccess).toHaveBeenCalledWith("com.widevine.alpha"/* WIDEVINE */,[{initDataTypes:["cenc"],audioCapabilities:[{contentType:"audio/mp4",encryptionScheme:"cenc",robustness:"HW_SECURE_DECODE"/* HW_SECURE_DECODE */// specific config used
|
|
1942
|
+
}]}]);case 2:return _context480.a(2)}},_callee480)})))});describe("ChromeOS verified media path",function(){var chromeOsUserAgent="Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36";var chromeUserAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36";it("adds avc1 video capabilities for audio content on ChromeOS",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee481(){return _regenerator().w(function(_context481){while(1)switch(_context481.n){case 0:setUserAgent(chromeOsUserAgent);drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentType:"audio",mimeType:"audio/mp4"}));_context481.n=1;return emitEncrypted();case 1:expect(commonEme.requestMediaKeySystemAccess).toHaveBeenCalledOnceWith("com.widevine.alpha"/* WIDEVINE */,[{initDataTypes:["cenc"],audioCapabilities:[{contentType:"audio/mp4",encryptionScheme:"cenc",robustness:"SW_SECURE_CRYPTO"/* SW_SECURE_CRYPTO */}],videoCapabilities:[{contentType:"video/mp4; codecs=\"avc1.4d401f\"",robustness:"SW_SECURE_DECODE"/* SW_SECURE_DECODE */}]}]);case 2:return _context481.a(2)}},_callee481)})));it("does not add video capabilities for audio content off ChromeOS",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee482(){var config;return _regenerator().w(function(_context482){while(1)switch(_context482.n){case 0:setUserAgent(chromeUserAgent);drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentType:"audio",mimeType:"audio/mp4"}));_context482.n=1;return emitEncrypted();case 1:config=commonEme.requestMediaKeySystemAccess.calls.mostRecent().args[1][0];expect(config.videoCapabilities).toBeUndefined();case 2:return _context482.a(2)}},_callee482)})));it("does not alter video content capabilities on ChromeOS",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee483(){var config;return _regenerator().w(function(_context483){while(1)switch(_context483.n){case 0:setUserAgent(chromeOsUserAgent);drmController.setBufferingDrmInfo(__spreadProps(__spreadValues({},drmInfo),{contentType:"video",mimeType:"video/mp4"}));_context483.n=1;return emitEncrypted();case 1:config=commonEme.requestMediaKeySystemAccess.calls.mostRecent().args[1][0];expect(config.videoCapabilities).toEqual([{contentType:"video/mp4",encryptionScheme:"cenc",robustness:"SW_SECURE_CRYPTO"/* SW_SECURE_CRYPTO */}]);expect(config.audioCapabilities).toBeUndefined();case 2:return _context483.a(2)}},_callee483)})))});describe("when a session has been created",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee484(){return _regenerator().w(function(_context484){while(1)switch(_context484.n){case 0:drmController.setBufferingDrmInfo(drmInfo);_context484.n=1;return emitEncrypted();case 1:return _context484.a(2)}},_callee484)})));it("clears media keys from the element",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee485(){return _regenerator().w(function(_context485){while(1)switch(_context485.n){case 0:drmController.dispose();_context485.n=1;return flushPromises();case 1:expect(mediaKeys.clearFromElement).toHaveBeenCalledOnceWith(media);case 2:return _context485.a(2)}},_callee485)})));it("closes all sessions",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee486(){return _regenerator().w(function(_context486){while(1)switch(_context486.n){case 0:_context486.n=1;return emitEncrypted(new Uint8Array([1,2,3]));case 1:_context486.n=2;return emitEncrypted(new Uint8Array([4,5,6]));case 2:expect(drmController.activeSessions).toBe(3);drmController.dispose();_context486.n=3;return flushPromises();case 3:expect(drmController.activeSessions).toBe(0);expect(activeSessions).toBe(0);case 4:return _context486.a(2)}},_callee486)})))});describe("dispose",function(){it("removes handlers",function(){drmController.on("error",function(){});expect(drmController.hasAnyListeners()).toBeTrue();drmController.dispose();expect(drmController.hasAnyListeners()).toBeFalse()})});describe("licenseProvider fallback",function(){it("uses defaultLicenseProvider when no licenseProvider is provided",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee487(){return _regenerator().w(function(_context487){while(1)switch(_context487.n){case 0:drmController=new DrmControllerImpl(deps,{});errorSpy=createEventSpy(drmController,"error");drmController.setBufferingDrmInfo(drmInfo);_context487.n=1;return emitEncrypted();case 1:_context487.n=2;return emitMessage();case 2:expectError("Missing licenseServer url in DRM configuration for keySystem: com.widevine.alpha");case 3:return _context487.a(2)}},_callee487)})))})});// test/unit/drm/CommonEmeFactory.test.ts
|
|
1943
1943
|
function useStandardMediaKeys(){var originalMediaKeys=globalThis.MediaKeys;beforeEach(function(){globalThis.MediaKeys={}});afterEach(function(){globalThis.MediaKeys=originalMediaKeys})}function useMsMediaKeys(){var originalMSMediaKeys=globalThis.MSMediaKeys;beforeEach(function(){;globalThis.MSMediaKeys=MockMSMediaKeys});afterEach(function(){;globalThis.MSMediaKeys=originalMSMediaKeys})}describe("CommonEmeFactory",function(){beforeEach(function(){if(!isNode())pending("Cannot mock EME API outside Node")});describe("when WebKit EME is supported",function(){useWebKitMediaKeys(true);it("returns WebKitCommonEme instance",function(){expect(commonEmeFactory()).toBeInstanceOf(WebKitCommonEme)});describe("and standard EME is supported",function(){useStandardMediaKeys();it("returns WebKitCommonEme instance",function(){expect(commonEmeFactory()).toBeInstanceOf(WebKitCommonEme)})})});describe("when standard EME is supported",function(){useStandardMediaKeys();it("returns StandardMediaKeys",function(){expect(commonEmeFactory()).toBeInstanceOf(StandardCommonEme)})});describe("when MS EME is supported",function(){useMsMediaKeys();it("returns MSCommonEme",function(){expect(commonEmeFactory()).toBeInstanceOf(MsCommonEme)});describe("and standard EME is supported",function(){useStandardMediaKeys();it("returns StandardCommonEme",function(){expect(commonEmeFactory()).toBeInstanceOf(StandardCommonEme)})})})});// test/unit/drm/CencEncryptionScheme.test.ts
|
|
1944
1944
|
describe("parseCencEncryptionScheme",function(){it("returns null for invalid values",function(){expect(parseCencEncryptionScheme(null)).toBeNull();expect(parseCencEncryptionScheme("asd")).toBeNull()});it("returns parsed encryption scheme and version",function(){expect(parseCencEncryptionScheme("cenc")).toEqual({scheme:"cenc",version:null});expect(parseCencEncryptionScheme("cbcs")).toEqual({scheme:"cbcs",version:null});expect(parseCencEncryptionScheme("cenc:4")).toEqual({scheme:"cenc",version:4});expect(parseCencEncryptionScheme("cbcs:f")).toEqual({scheme:"cbcs",version:15});expect(parseCencEncryptionScheme("test")).toBeNull()})});// test/unit/drm/util/unpackPlayReadyChallenge.test.ts
|
|
1945
1945
|
describe("unpackPlayReadyChallenge",function(){describe("when the challenge is not packed",function(){it("returns the challenge as is and returns a content type header",function(){{var challenge=new Uint8Array([1,2,3,4]).buffer;expect(unpackPlayReadyChallenge(challenge)).toEqual({challenge:challenge,headers:{"Content-Type":"text/xml; charset=utf-8"}})}{var _challenge=new Uint8Array([1,2,3]).buffer;expect(unpackPlayReadyChallenge(_challenge)).toEqual({challenge:_challenge,headers:{"Content-Type":"text/xml; charset=utf-8"}})}})});describe("when the challenge is packed",function(){it("returns the unpacked challenge with parsed headers",function(){var challenge=new Uint8Array([1,2,3,4,5,6]).buffer;var xml="<PlayReadyKeyMessage type=\"LicenseAcquisition\">\n <LicenseAcquisition Version=\"1\">\n <Challenge encoding=\"base64encoded\">".concat(bufferToBase64(challenge),"</Challenge>\n <HttpHeaders>\n <HttpHeader>\n <name>Content-Type</name>\n <value>text/xml; charset=utf-8</value>\n </HttpHeader>\n <HttpHeader>\n <name>SOAPAction</name>\n <value>http://schemas.microsoft.com/DRM/etc/etc</value>\n </HttpHeader>\n </HttpHeaders>\n </LicenseAcquisition>\n </PlayReadyKeyMessage>");expect(unpackPlayReadyChallenge(utf16ToUint16Array(xml))).toEqual({headers:{"Content-Type":"text/xml; charset=utf-8",SOAPAction:"http://schemas.microsoft.com/DRM/etc/etc"},challenge:challenge})})})});describe("parsePlayReadyKeyMessage",function(){it("returns a parsed PlayReadyKeyMessage",function(){var message=parsePlayReadyKeyMessage("<PlayReadyKeyMessage type=\"LicenseAcquisition\">\n <LicenseAcquisition Version=\"1\">\n <Challenge encoding=\"base64encoded\">aabbccdd</Challenge>\n <HttpHeaders>\n <HttpHeader>\n <name>Content-Type</name>\n <value>text/xml; charset=utf-8</value>\n </HttpHeader>\n <HttpHeader>\n <name>SOAPAction</name>\n <value>http://schemas.microsoft.com/DRM/etc/etc</value>\n </HttpHeader>\n </HttpHeaders>\n </LicenseAcquisition>\n </PlayReadyKeyMessage>\n ");expect(message.toJSON()).toEqual({PlayReadyKeyMessage:{type:"LicenseAcquisition",LicenseAcquisition:{Version:1,Challenge:{encoding:"base64encoded",_content:"aabbccdd"},HttpHeaders:{HttpHeader:[{name:{_content:"Content-Type"},value:{_content:"text/xml; charset=utf-8"}},{name:{_content:"SOAPAction"},value:{_content:"http://schemas.microsoft.com/DRM/etc/etc"}}]}}}})})});// test/unit/drm/util/extractContentId.test.ts
|
|
1946
1946
|
describe("extractContentId",function(){function createContentIdByteArray(str){var uint16Array=utf16ToUint16Array(str);return new Uint8Array(uint16Array.buffer)}describe("with match",function(){it("matches",function(){expect(extractContentId(createContentIdByteArray("skd://example0"))).toBe("example0")})});describe("without match",function(){it("throws ValidationError",function(){expect(function(){extractContentId(new Uint8Array)}).toThrowError(ValidationError,"No contentId match");expect(function(){expect(extractContentId(createContentIdByteArray("skd://"))).toBe("example0")}).toThrowError(ValidationError,"No contentId match")})})});// test/unit/drm/util/createFairPlaySessionInitData.test.ts
|
|
1947
1947
|
describe("createFairPlaySessionInitData",function(){it("returns correctly formed Uint8Array",function(){var initData="VAAAAHMAawBkADoALwAvADAAYgA1ADYAOAA5AGIAYgAtADQAMQA3ADEALQA5ADcAZQA1AC0AYwAyADgAMAAtADkAOQBmADcAYQBiAGUANAAwADAANABmAA==";var contentId="0b5689bb-4171-97e5-c280-99f7abe4004f";var certificateData="MIIE1TCCA72gAwIBAgIIFW3qWt9NdaQwDQYJKoZIhvcNAQEFBQAwfzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCkFwcGxlIEluYy4xJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYDVQQDDCpBcHBsZSBLZXkgU2VydmljZXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQwODI3MTcwMjI3WhcNMTYwODI3MTcwMjI3WjBuMQswCQYDVQQGEwJVUzETMBEGA1UECgwKQW1hem9uLmNvbTEWMBQGA1UECwwNRGlnaXRhbCBWaWRlbzEyMDAGA1UEAwwpRlBTIGZvciBBbWF6b24gSW5zdGFudCBWaWRlbyBhcHBsaWNhdGlvbnMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKTLDDVOTIYAGQO0nwblswQ3jjz4sc9tD7dYdxTgaAekFadAJdcsiOwCtudDLunhE3q4uNMQtAh4UExvzL9pUxhnzyeuAmHOTI8vUCCcVD2mt03w98EUFXpUU82s5EauWX8rrUI07FCdWdnD3ylj/eIVdbbQhKcvkvoipiCO4fedAgMBAAGjggHoMIIB5DAdBgNVHQ4EFgQUW+PdiCeqmpoNPwdJIng5MA465MYwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBRj5EdUy4VxWUYsg6zMRDFkZwMsvjCB4gYDVR0gBIHaMIHXMIHUBgkqhkiG92NkBQEwgcYwgcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2NybC5hcHBsZS5jb20va2V5c2VydmljZXMuY3JsMA4GA1UdDwEB/wQEAwIFIDAuBgsqhkiG92NkBg0BAwEB/wQcAXA1O2DFgVbri+9ptKoYMZ/p8CQpC6dMjuxHqzA4BgsqhkiG92NkBg0BBAEB/wQmASf94c8MkzPOIrjZGeyjlFaiDcQlWfRzqMe/ZMSbmtmEEWv/xP4wDQYJKoZIhvcNAQEFBQADggEBAIKRz+hZDC2v99OCaqJY/6+L1EUJscv2hP6MC5yKSte0rkwuJUYIFbzBUlmyq39Osli5ma+5afrCgTy0Rtw3QVPeZDI47zWfBVNQrgwh+eQ9Gg1pGM6V5MXP4SVsC6MkuygPfQr4fz0WDewfBBU6V13LZr7Y0jZ2AMmrit5W+i11uvL/6oKtA6AYsdX/MWt+IgBkt2prRwxf2S2w0rp41Azzg1a7lXeTqJ5uI22NkjmsjLw0PjnjOKyc0FR96iHW2VbCa+ev1fejVcCJolgVEPd/rZNrRomKvfkEjy1hbVtoxc2W9ndvLt7fU6I5MRCFIWGEHQfK5iYyZLuaX5CmGxg=";var result="VAAAAHMAawBkADoALwAvADAAYgA1ADYAOAA5AGIAYgAtADQAMQA3ADEALQA5ADcAZQA1AC0AYwAyADgAMAAtADkAOQBmADcAYQBiAGUANAAwADAANABmAEgAAAAwAGIANQA2ADgAOQBiAGIALQA0ADEANwAxAC0AOQA3AGUANQAtAGMAMgA4ADAALQA5ADkAZgA3AGEAYgBlADQAMAAwADQAZgDZBAAAMIIE1TCCA72gAwIBAgIIFW3qWt9NdaQwDQYJKoZIhvcNAQEFBQAwfzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCkFwcGxlIEluYy4xJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYDVQQDDCpBcHBsZSBLZXkgU2VydmljZXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQwODI3MTcwMjI3WhcNMTYwODI3MTcwMjI3WjBuMQswCQYDVQQGEwJVUzETMBEGA1UECgwKQW1hem9uLmNvbTEWMBQGA1UECwwNRGlnaXRhbCBWaWRlbzEyMDAGA1UEAwwpRlBTIGZvciBBbWF6b24gSW5zdGFudCBWaWRlbyBhcHBsaWNhdGlvbnMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKTLDDVOTIYAGQO0nwblswQ3jjz4sc9tD7dYdxTgaAekFadAJdcsiOwCtudDLunhE3q4uNMQtAh4UExvzL9pUxhnzyeuAmHOTI8vUCCcVD2mt03w98EUFXpUU82s5EauWX8rrUI07FCdWdnD3ylj/eIVdbbQhKcvkvoipiCO4fedAgMBAAGjggHoMIIB5DAdBgNVHQ4EFgQUW+PdiCeqmpoNPwdJIng5MA465MYwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBRj5EdUy4VxWUYsg6zMRDFkZwMsvjCB4gYDVR0gBIHaMIHXMIHUBgkqhkiG92NkBQEwgcYwgcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2NybC5hcHBsZS5jb20va2V5c2VydmljZXMuY3JsMA4GA1UdDwEB/wQEAwIFIDAuBgsqhkiG92NkBg0BAwEB/wQcAXA1O2DFgVbri+9ptKoYMZ/p8CQpC6dMjuxHqzA4BgsqhkiG92NkBg0BBAEB/wQmASf94c8MkzPOIrjZGeyjlFaiDcQlWfRzqMe/ZMSbmtmEEWv/xP4wDQYJKoZIhvcNAQEFBQADggEBAIKRz+hZDC2v99OCaqJY/6+L1EUJscv2hP6MC5yKSte0rkwuJUYIFbzBUlmyq39Osli5ma+5afrCgTy0Rtw3QVPeZDI47zWfBVNQrgwh+eQ9Gg1pGM6V5MXP4SVsC6MkuygPfQr4fz0WDewfBBU6V13LZr7Y0jZ2AMmrit5W+i11uvL/6oKtA6AYsdX/MWt+IgBkt2prRwxf2S2w0rp41Azzg1a7lXeTqJ5uI22NkjmsjLw0PjnjOKyc0FR96iHW2VbCa+ev1fejVcCJolgVEPd/rZNrRomKvfkEjy1hbVtoxc2W9ndvLt7fU6I5MRCFIWGEHQfK5iYyZLuaX5CmGxg=";expect(createFairPlaySessionInitData(base64ToByteArray(initData),contentId,base64ToByteArray(certificateData))).toEqual(base64ToByteArray(result))})});// test/unit/drm/licenseProvider/defaultLicenseProvider.test.ts
|
|
1948
|
-
var any28=jasmine.any;var objectContaining23=jasmine.objectContaining;describe("defaultLicenseProvider",function(){describe("when serverOptions url is undefined",function(){it("rejects with a ValidationError",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1948
|
+
var any28=jasmine.any;var objectContaining23=jasmine.objectContaining;describe("defaultLicenseProvider",function(){describe("when serverOptions url is undefined",function(){it("rejects with a ValidationError",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee490(){return _regenerator().w(function(_context490){while(1)switch(_context490.n){case 0:_context490.n=1;return expectAsync(defaultLicenseProvider("com.widevine.alpha"/* WIDEVINE */,{},new ArrayBuffer(0))).toBeRejectedWithError(ValidationError,"Missing licenseServer url in DRM configuration for keySystem: com.widevine.alpha");case 1:return _context490.a(2)}},_callee490)})))});describe("when provided a license server url",function(){var requesterOverride=overrideGlobalInit(requesterWithRetryRef,function(){return new MockRequester});var requestSpy;beforeEach(function(){requestSpy=requesterOverride.value.request});it("performs a request with the url, init options, and challenge",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee491(){var arrayBuffer,mockResponse,challenge;return _regenerator().w(function(_context491){while(1)switch(_context491.n){case 0:arrayBuffer=new ArrayBuffer(0);mockResponse=new Response(arrayBuffer);requestSpy.and.returnValue(Promise.resolve(mockResponse));challenge=new ArrayBuffer(0);_context491.n=1;return expectAsync(defaultLicenseProvider("com.widevine.alpha"/* WIDEVINE */,{url:"https://example.com",init:{headers:{foo:"bar"}}},challenge,new Abort)).toBeResolvedTo(arrayBuffer);case 1:expect(requestSpy).toHaveBeenCalledOnceWith("https://example.com",objectContaining23({headers:{foo:"bar"},body:challenge,method:"POST"}),objectContaining23({abort:any28(Abort)}));case 2:return _context491.a(2)}},_callee491)})))})});// test/unit/drm/error/DrmError.test.ts
|
|
1949
1949
|
var objectContaining24=jasmine.objectContaining;var any29=jasmine.any;describe("DrmError",function(){it("is an instance of Error and DrmError",function(){expectPrototype(function(){return new DrmError("")},DrmError,ReportableError,Error)});it("is fatal by default",function(){expect(new DrmError("").level).toBe("fatal"/* FATAL */);expect(new DrmError("",{},ErrorOrigin.UNCAUGHT,"warn"/* WARN */).level).toBe("warn"/* WARN */)});describe("toStringTag",function(){it("returns the name",function(){expect(new DrmError("")[Symbol.toStringTag]).toBe("DrmError")})});describe("toJSON",function(){it("provides a serializable representation",function(){expect(new DrmError("message",{keySystem:"myKeySystem"},ErrorOrigin.DRM,"silent"/* SILENT */).toJSON()).toEqual(objectContaining24({message:"message",extra:{keySystem:"myKeySystem"},stack:any29(String),origin:ErrorOrigin.DRM,level:"silent"/* SILENT */}))})})});// test/unit/drm/commonEme/createDrmErrorHandler.test.ts
|
|
1950
1950
|
var objectContaining25=jasmine.objectContaining;describe("createDrmErrorHandler",function(){it("returns a function to wrap a provided Error object in a DrmError",function(){var handler=createDrmErrorHandler();expect(function(){return handler(new Error("expected"))}).toThrowError(DrmError,"expected");expect(function(){return handler(new Error("expected"))}).toThrowMatching(function(drmError){expect(drmError.toJSON()).toEqual(objectContaining25({extra:{error:objectContaining25({message:"expected"})}}));return drmError.level==="fatal"/* FATAL */})})});// test/unit/drm/commonEme/WebKitCommonEme.test.ts
|
|
1951
|
-
var createSpy31=jasmine.createSpy;describe("WebkitCommonEme",function(){beforeEach(function(){if(!isNode())pending("Cannot mock WebKit outside Node");globalThis.WebKitMediaKeys=MockWebKitMediaKeys;globalThis.WebKitMediaKeySession=MockWebKitMediaKeySession;globalThis.WebKitMediaKeyError=MockWebKitMediaKeyError});afterEach(function(){delete globalThis.WebKitMediaKeys;delete globalThis.WebKitMediaKeySession;delete globalThis.WebKitMediaKeyError});describe("WebKitCommonEme",function(){var mockAudioElement;var mockAudioElementEventFakes;var webKitCommonEme;beforeEach(function(){mockAudioElement=new MockHTMLAudioElement;mockAudioElement.webkitSetMediaKeys=createSpy31("webkitSetMediaKeys");mockAudioElementEventFakes=implementEventFakes(mockAudioElement);webKitCommonEme=new WebKitCommonEme});describe("requestMediaKeySystemAccess",function(){describe("requests access",function(){var keySystem="com.widevine.alpha"/* WIDEVINE */;var supportedConfigurations=[{audioCapabilities:[{contentType:"test"}]}];describe("with configs",function(){describe("with audioCapabilities",function(){describe("when isTypeSupported() returns true",function(){beforeEach(function(){MockWebKitMediaKeys.isTypeSupported.and.returnValue(true)});it("returns system access object",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee486(){var access;return _regenerator().w(function(_context486){while(1)switch(_context486.n){case 0:_context486.n=1;return webKitCommonEme.requestMediaKeySystemAccess(keySystem,supportedConfigurations);case 1:access=_context486.v;expect(access).toBeInstanceOf(WebKitCommonMediaKeySystemAccess);expect(access.keySystem).toBe(keySystem);case 2:return _context486.a(2)}},_callee486)})))});describe("when isTypeSupported() returns false",function(){beforeEach(function(){MockWebKitMediaKeys.isTypeSupported.and.returnValue(false)});it("throws DrmError",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee487(){return _regenerator().w(function(_context487){while(1)switch(_context487.n){case 0:_context487.n=1;return expectAsync(webKitCommonEme.requestMediaKeySystemAccess(keySystem,supportedConfigurations)).toBeRejectedWithError(DrmError);case 1:return _context487.a(2)}},_callee487)})))})});describe("without audioCapabilities",function(){it("throws error",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee488(){return _regenerator().w(function(_context488){while(1)switch(_context488.n){case 0:_context488.n=1;return expectAsync(webKitCommonEme.requestMediaKeySystemAccess(keySystem,[{}])).toBeRejectedWithError(DrmError,"keySystem not supported: com.widevine.alpha");case 1:return _context488.a(2)}},_callee488)})))});describe("with videoCapabilities only",function(){var videoOnlyConfigurations=[{videoCapabilities:[{contentType:"video/mp4"}]}];describe("when isTypeSupported() returns true",function(){beforeEach(function(){MockWebKitMediaKeys.isTypeSupported.and.returnValue(true)});it("returns system access object",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee489(){var access;return _regenerator().w(function(_context489){while(1)switch(_context489.n){case 0:_context489.n=1;return webKitCommonEme.requestMediaKeySystemAccess(keySystem,videoOnlyConfigurations);case 1:access=_context489.v;expect(access).toBeInstanceOf(WebKitCommonMediaKeySystemAccess);expect(access.keySystem).toBe(keySystem);case 2:return _context489.a(2)}},_callee489)})))});describe("when isTypeSupported() returns false",function(){beforeEach(function(){MockWebKitMediaKeys.isTypeSupported.and.returnValue(false)});it("throws DrmError",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee490(){return _regenerator().w(function(_context490){while(1)switch(_context490.n){case 0:_context490.n=1;return expectAsync(webKitCommonEme.requestMediaKeySystemAccess(keySystem,videoOnlyConfigurations)).toBeRejectedWithError(DrmError);case 1:return _context490.a(2)}},_callee490)})))})});describe("with both audioCapabilities and videoCapabilities",function(){var bothConfigurations=[{audioCapabilities:[{contentType:"audio/mp4"}],videoCapabilities:[{contentType:"video/mp4"}]}];it("checks all capabilities",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee491(){return _regenerator().w(function(_context491){while(1)switch(_context491.n){case 0:MockWebKitMediaKeys.isTypeSupported.and.returnValue(true);_context491.n=1;return webKitCommonEme.requestMediaKeySystemAccess(keySystem,bothConfigurations);case 1:expect(MockWebKitMediaKeys.isTypeSupported).toHaveBeenCalledWith(keySystem,"audio/mp4");case 2:return _context491.a(2)}},_callee491)})));it("succeeds when only videoCapabilities is supported",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee492(){var access;return _regenerator().w(function(_context492){while(1)switch(_context492.n){case 0:MockWebKitMediaKeys.isTypeSupported.and.callFake(function(_ks,contentType2){return contentType2==="video/mp4"});_context492.n=1;return webKitCommonEme.requestMediaKeySystemAccess(keySystem,bothConfigurations);case 1:access=_context492.v;expect(access).toBeInstanceOf(WebKitCommonMediaKeySystemAccess);case 2:return _context492.a(2)}},_callee492)})))})});describe("without configs",function(){it("throws DrmError",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee493(){return _regenerator().w(function(_context493){while(1)switch(_context493.n){case 0:_context493.n=1;return expectAsync(webKitCommonEme.requestMediaKeySystemAccess(keySystem,[])).toBeRejectedWithError(DrmError);case 1:return _context493.a(2)}},_callee493)})))})})});describe("addEncryptedListener",function(){it("adds a listener and returns an Unsubscribe handle",function(){expect(mockAudioElementEventFakes.hasAnyListeners()).withContext("hasAnyListeners").toBe(false);var handler=jasmine.createSpy("handler");var encryptedSub=webKitCommonEme.addEncryptedListener(mockAudioElement,handler);expect(handler).not.toHaveBeenCalled();expectTypeEquals(true);var encryptedEvent=mockEvent("webkitneedkey");mockAudioElement.dispatchEvent(encryptedEvent);expect(handler).toHaveBeenCalledOnceWith(encryptedEvent);encryptedSub();expect(mockAudioElementEventFakes.hasAnyListeners()).withContext("hasAnyListeners").toBe(false)})})});describe("WebKitCommonMediaKeySystemAccess",function(){var keySystem="com.widevine.alpha"/* WIDEVINE */;var webKitCommonMediaKeySystemAccess;beforeEach(function(){webKitCommonMediaKeySystemAccess=new WebKitCommonMediaKeySystemAccess(keySystem)});it("creates media keys",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee494(){var mediaKeys;return _regenerator().w(function(_context494){while(1)switch(_context494.n){case 0:_context494.n=1;return webKitCommonMediaKeySystemAccess.createMediaKeys();case 1:mediaKeys=_context494.v;expect(mediaKeys).withContext("mediaKeys instanceof WebKitCommonMediaKeys").toBeInstanceOf(WebKitCommonMediaKeys);expect(mediaKeys.keySystem).toBe(keySystem);case 2:return _context494.a(2)}},_callee494)})))});describe("WebKitCommonMediaKeys",function(){var mockAudioElement;var mockWebKitMediaKeys;var webKitCommonMediaKeys;beforeEach(function(){mockAudioElement=new MockHTMLAudioElement;mockAudioElement.webkitSetMediaKeys=createSpy31("webkitSetMediaKeys");mockWebKitMediaKeys=new MockWebKitMediaKeys("com.widevine.alpha"/* WIDEVINE */);webKitCommonMediaKeys=new WebKitCommonMediaKeys("com.widevine.alpha"/* WIDEVINE */,mockWebKitMediaKeys);mockWebKitMediaKeys.createSession.and.callFake(function(){return new MockWebKitMediaKeySession})});describe("setOnElement",function(){it("sets media keys on element",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee495(){return _regenerator().w(function(_context495){while(1)switch(_context495.n){case 0:_context495.n=1;return webKitCommonMediaKeys.setOnElement(mockAudioElement);case 1:expect(mockAudioElement.webkitSetMediaKeys).toHaveBeenCalledOnceWith(mockWebKitMediaKeys);case 2:return _context495.a(2)}},_callee495)})))});describe("clearFromElement",function(){it("clears media keys on element",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee496(){return _regenerator().w(function(_context496){while(1)switch(_context496.n){case 0:_context496.n=1;return webKitCommonMediaKeys.clearFromElement(mockAudioElement);case 1:expect(mockAudioElement.webkitSetMediaKeys).toHaveBeenCalledOnceWith(null);case 2:return _context496.a(2)}},_callee496)})))});describe("setServerCertificate",function(){it("resolves to false",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee497(){return _regenerator().w(function(_context497){while(1)switch(_context497.n){case 0:_context497.n=1;return expectAsync(webKitCommonMediaKeys.setServerCertificate(new Uint8Array([1,2,3]))).toBeResolvedTo(false);case 1:return _context497.a(2)}},_callee497)})))});describe("createSession",function(){var mimeType="mime";var uint16Array=utf16ToUint16Array("skd://example0");var uint8Array=new Uint8Array(uint16Array.buffer);it("creates session",function(){var session=webKitCommonMediaKeys.createSession(mimeType,"cenc",uint8Array);expect(mockWebKitMediaKeys.createSession).toHaveBeenCalledTimes(1);expect(session).toBeInstanceOf(WebKitCommonMediaKeySession)})})});describe("WebKitCommonMediaKeySession",function(){var mockWebKitMediaKeySession;var mockWebKitMediaKeySessionEventFakes;var webKitCommonMediaKeySession;var mockWebKitMediaKeyError;var mimeType="audio";var initDataType="cenc";var initData=new Uint8Array([1,2,3]);beforeEach(function(){mockWebKitMediaKeySession=new MockWebKitMediaKeySession;mockWebKitMediaKeySessionEventFakes=implementEventFakes(mockWebKitMediaKeySession);webKitCommonMediaKeySession=new WebKitCommonMediaKeySession(mockWebKitMediaKeySession,mimeType,initDataType,initData);mockWebKitMediaKeyError=new MockWebKitMediaKeyError});it("adds event listener on session for webkitkeymessage event",function(){expect(mockWebKitMediaKeySession.addEventListener).toHaveBeenCalled();var messageEventSpy=createEventSpy(webKitCommonMediaKeySession,"message");var messageEvent=new MockWebKitMediaKeyMessageEvent;mockWebKitMediaKeySession.dispatchEvent(messageEvent);expect(messageEventSpy).toHaveBeenCalledOnceWith({message:messageEvent.message.buffer})});describe("when an event listener is added for webkitkeyerror event",function(){describe("when session has error",function(){beforeEach(function(){mockWebKitMediaKeySession.error=new MockWebKitMediaKeyError});afterEach(function(){mockWebKitMediaKeySession.error=null});it("emits event",function(){expect(mockWebKitMediaKeySession.addEventListener).toHaveBeenCalled();var messageEventSpy=createEventSpy(webKitCommonMediaKeySession,"error");mockWebKitMediaKeySession.dispatchEvent(mockWebKitMediaKeyError);expect(messageEventSpy).toHaveBeenCalled()})});describe("when session has no error",function(){it("doesn't emit event",function(){var mockWebKitSession=new MockWebKitMediaKeySession;implementEventFakes(mockWebKitSession);var webkitCommonMediaKeySession=new WebKitCommonMediaKeySession(mockWebKitSession,mimeType,initDataType,initData);expect(mockWebKitSession.addEventListener).toHaveBeenCalled();var messageEventSpy=createEventSpy(webkitCommonMediaKeySession,"error");mockWebKitSession.dispatchEvent(mockWebKitMediaKeyError);expect(messageEventSpy).not.toHaveBeenCalled()})})});describe("update",function(){it("rejects update when disposed",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee498(){return _regenerator().w(function(_context498){while(1)switch(_context498.n){case 0:webKitCommonMediaKeySession.dispose();_context498.n=1;return expectAsync(webKitCommonMediaKeySession.update(new ArrayBuffer(0))).toBeRejectedWith(new DisposedError);case 1:return _context498.a(2)}},_callee498)})));it("updates media key session",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee499(){var arrayBuffer;return _regenerator().w(function(_context499){while(1)switch(_context499.n){case 0:arrayBuffer=new ArrayBuffer(0);_context499.n=1;return webKitCommonMediaKeySession.update(arrayBuffer);case 1:expect(mockWebKitMediaKeySession.update).toHaveBeenCalledOnceWith(new Uint8Array(arrayBuffer));case 2:return _context499.a(2)}},_callee499)})))});describe("dispose",function(){it("removes listeners and closes session",function(){expect(webKitCommonMediaKeySession.disposed).toBeFalse();webKitCommonMediaKeySession.dispose();expect(webKitCommonMediaKeySession.disposed).toBeTrue();expect(mockWebKitMediaKeySessionEventFakes.hasAnyListeners()).withContext("hasAnyListeners").toBe(false);expect(mockWebKitMediaKeySession.close).toHaveBeenCalledOnceWith()})})});describe("webkitErrorCodeToStr",function(){it("translates value correctly",function(){expect(webkitErrorCodeToStr(WebKitMediaKeyError.MEDIA_KEYERR_CLIENT)).toBe("CLIENT"/* CLIENT */);expect(webkitErrorCodeToStr(WebKitMediaKeyError.MEDIA_KEYERR_DOMAIN)).toBe("DOMAIN"/* DOMAIN */);expect(webkitErrorCodeToStr(WebKitMediaKeyError.MEDIA_KEYERR_HARDWARECHANGE)).toBe("HARDWARECHANGE"/* HARDWARECHANGE */);expect(webkitErrorCodeToStr(WebKitMediaKeyError.MEDIA_KEYERR_OUTPUT)).toBe("OUTPUT"/* OUTPUT */);expect(webkitErrorCodeToStr(WebKitMediaKeyError.MEDIA_KEYERR_SERVICE)).toBe("SERVICE"/* SERVICE */);expect(webkitErrorCodeToStr(WebKitMediaKeyError.MEDIA_KEYERR_UNKNOWN)).toBe("UNKNOWN"/* UNKNOWN */)})})});// test/unit/drm/commonEme/StandardCommonEme.test.ts
|
|
1952
|
-
var any30=jasmine.any;describe("StandardCommonEme",function(){var navigator2;var mediaKeySystemAccess;beforeEach(function(){navigator2=setMockNavigator();mediaKeySystemAccess=new MockMediaKeySystemAccess;mediaKeySystemAccess.createMediaKeys.and.resolveTo(new MockMediaKeys);navigator2.requestMediaKeySystemAccess.and.resolveTo(mediaKeySystemAccess)});describe("StandardCommonEme",function(){var audio;var standardCommonEme;var audioEventFakes;beforeEach(function(){audio=new MockHTMLAudioElement;audioEventFakes=implementEventFakes(audio);standardCommonEme=new StandardCommonEme});describe("requestMediaKeySystemAccess",function(){var supportedConfigurations=[{},{audioCapabilities:[{contentType:"test"}]}];describe("when navigator.requestMediaKeySystemAccess resolves",function(){it("returns StandardCommonMediaKeySystemAccess",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee500(){return _regenerator().w(function(_context500){while(1)switch(_context500.n){case 0:expect(navigator2.requestMediaKeySystemAccess).not.toHaveBeenCalled();_context500.n=1;return expectAsync(standardCommonEme.requestMediaKeySystemAccess("com.widevine.alpha"/* WIDEVINE */,supportedConfigurations)).toBeResolvedTo(any30(StandardCommonMediaKeySystemAccess));case 1:return _context500.a(2)}},_callee500)})))});describe("when navigator.requestMediaKeySystemAccess rejects",function(){beforeEach(function(){navigator2.requestMediaKeySystemAccess.and.rejectWith(new Error("expected"))});it("rejects with reason",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee501(){return _regenerator().w(function(_context501){while(1)switch(_context501.n){case 0:_context501.n=1;return expectAsync(standardCommonEme.requestMediaKeySystemAccess("com.widevine.alpha"/* WIDEVINE */,supportedConfigurations)).toBeRejectedWithError(Error,"expected");case 1:return _context501.a(2)}},_callee501)})))})});describe("addEncryptedListener",function(){it("adds a listener and returns an Unsubscribe handle",function(){expect(audioEventFakes.hasAnyListeners()).withContext("hasAnyListeners").toBe(false);var handler=jasmine.createSpy("handler");var encryptedSub=standardCommonEme.addEncryptedListener(audio,handler);expect(handler).not.toHaveBeenCalled();expectTypeEquals(true);var encryptedEvent=mockEvent("encrypted");audio.dispatchEvent(encryptedEvent);expect(handler).toHaveBeenCalledOnceWith(encryptedEvent);encryptedSub();expect(audioEventFakes.hasAnyListeners()).withContext("hasAnyListeners").toBe(false)})})});describe("StandardCommonMediaKeySystemAccess",function(){var standardCommonMediaKeySystemAccess;beforeEach(function(){standardCommonMediaKeySystemAccess=new StandardCommonMediaKeySystemAccess("com.widevine.alpha"/* WIDEVINE */,mediaKeySystemAccess)});describe("createMediaKeys",function(){it("creates media keys",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee502(){var mediaKeys;return _regenerator().w(function(_context502){while(1)switch(_context502.n){case 0:expect(mediaKeySystemAccess.createMediaKeys).not.toHaveBeenCalled();_context502.n=1;return standardCommonMediaKeySystemAccess.createMediaKeys();case 1:mediaKeys=_context502.v;expect(mediaKeySystemAccess.createMediaKeys).toHaveBeenCalledTimes(1);expect(mediaKeys).toBeInstanceOf(StandardCommonMediaKeys);case 2:return _context502.a(2)}},_callee502)})))})});describe("StandardCommonMediaKeys",function(){var mockAudioElement;var mediaKeys;var standardCommonMediaKeys;beforeEach(function(){mockAudioElement=new MockHTMLAudioElement;mediaKeys=new MockMediaKeys;standardCommonMediaKeys=new StandardCommonMediaKeys("com.widevine.alpha"/* WIDEVINE */,mediaKeys)});describe("setOnElement",function(){it("sets media keys on element",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee503(){return _regenerator().w(function(_context503){while(1)switch(_context503.n){case 0:expect(mockAudioElement.setMediaKeys).not.toHaveBeenCalled();_context503.n=1;return standardCommonMediaKeys.setOnElement(mockAudioElement);case 1:expect(mockAudioElement.setMediaKeys).toHaveBeenCalledOnceWith(mediaKeys);case 2:return _context503.a(2)}},_callee503)})))});describe("clearFromElement",function(){it("clears media keys on element",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee504(){return _regenerator().w(function(_context504){while(1)switch(_context504.n){case 0:expect(mockAudioElement.setMediaKeys).not.toHaveBeenCalled();_context504.n=1;return standardCommonMediaKeys.clearFromElement(mockAudioElement);case 1:expect(mockAudioElement.setMediaKeys).toHaveBeenCalledOnceWith(null);case 2:return _context504.a(2)}},_callee504)})))});describe("setServerCertificate",function(){it("delegates to mediaKeys.setServerCertificate and returns the result",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee505(){var cert,result;return _regenerator().w(function(_context505){while(1)switch(_context505.n){case 0:cert=new Uint8Array([1,2,3]);mediaKeys.setServerCertificate.and.resolveTo(true);_context505.n=1;return standardCommonMediaKeys.setServerCertificate(cert);case 1:result=_context505.v;expect(result).toBeTrue();expect(mediaKeys.setServerCertificate).toHaveBeenCalledOnceWith(cert);case 2:return _context505.a(2)}},_callee505)})))});describe("createSession",function(){it("creates a session",function(){expect(mediaKeys.createSession).not.toHaveBeenCalled();var mediaKeySession=new MockMediaKeySession;mediaKeySession.closed=never;implementEventFakes(mediaKeySession);mediaKeySession.generateRequest.and.resolveTo(void 0);mediaKeys.createSession.and.returnValue(mediaKeySession);var mimeType="audio";var initData=new Uint8Array([1,2,3]);var session=standardCommonMediaKeys.createSession(mimeType,"cenc",initData);expect(mediaKeys.createSession).toHaveBeenCalledOnceWith("temporary");expect(session).toBeInstanceOf(StandardCommonMediaKeySession);expect(session.initData).toBe(initData);expect(session.mimeType).toBe(mimeType);expect(session.initDataType).toBe("cenc")})})});describe("StandardCommonMediaKeySession",function(){var mediaKeySession;var mediaKeySessionEventFakes;var standardCommonMediaKeySession;var mimeType="audio";var initData=new Uint8Array([1,2,3]);var closed;beforeEach(function(){mediaKeySession=new MockMediaKeySession;mediaKeySessionEventFakes=implementEventFakes(mediaKeySession);mediaKeySession.close.and.returnValue(Promise.resolve());mediaKeySession.generateRequest.and.resolveTo(void 0);closed=new Deferred;mediaKeySession.closed=closed;standardCommonMediaKeySession=new StandardCommonMediaKeySession(mediaKeySession,mimeType,"cenc",initData)});it("adds event listener on session for message event",function(){expect(mediaKeySession.addEventListener).toHaveBeenCalled();var messageEventSpy=createEventSpy(standardCommonMediaKeySession,"message");var event=new MockMediaKeyMessageEvent;event.type="message";mediaKeySession.dispatchEvent(event);expect(messageEventSpy).toHaveBeenCalledOnceWith({message:event.message})});describe("when created",function(){it("calls session.generateRequest() with the initData buffer",function(){expect(mediaKeySession.generateRequest).toHaveBeenCalledOnceWith("cenc",initData.buffer);mediaKeySession.generateRequest.calls.reset();var arrayBuffer=new ArrayBuffer(0);standardCommonMediaKeySession=new StandardCommonMediaKeySession(mediaKeySession,mimeType,"cenc",arrayBuffer);expect(mediaKeySession.generateRequest).toHaveBeenCalledOnceWith("cenc",arrayBuffer)});describe("when session.generateRequest rejects",function(){it("emits an error event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee506(){var errorSpy;return _regenerator().w(function(_context506){while(1)switch(_context506.n){case 0:mediaKeySession.generateRequest.and.rejectWith(new Error("expected"));standardCommonMediaKeySession=new StandardCommonMediaKeySession(mediaKeySession,mimeType,"cenc",initData);errorSpy=createEventSpy(standardCommonMediaKeySession,"error");_context506.n=1;return expectAsync(errorSpy.next()).toBeResolvedTo({target:standardCommonMediaKeySession,error:new Error("expected")});case 1:return _context506.a(2)}},_callee506)})))})});describe("update",function(){it("throws when disposed",function(){standardCommonMediaKeySession.dispose();expect(function(){return standardCommonMediaKeySession.update(new ArrayBuffer(0))}).toThrowError(DisposedError)});it("updates media key session",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee507(){var arrayBufferEmpty;return _regenerator().w(function(_context507){while(1)switch(_context507.n){case 0:arrayBufferEmpty=new ArrayBuffer(0);_context507.n=1;return standardCommonMediaKeySession.update(arrayBufferEmpty);case 1:expect(mediaKeySession.update).toHaveBeenCalledOnceWith(arrayBufferEmpty);case 2:return _context507.a(2)}},_callee507)})))});describe("closed event",function(){it("dispatches when the MediaKeySession closed resolves",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee508(){var closedSpy;return _regenerator().w(function(_context508){while(1)switch(_context508.n){case 0:closedSpy=createEventSpy(standardCommonMediaKeySession,"closed");closed.resolve("closed-by-application");_context508.n=1;return flushPromises();case 1:expect(closedSpy).toHaveBeenCalledOnceWith({reason:"closed-by-application"});case 2:return _context508.a(2)}},_callee508)})))});describe("when session.closed is nullish",function(){it("does not fail to create a session",function(){;mediaKeySession.closed=null;expect(function(){return new StandardCommonMediaKeySession(mediaKeySession,mimeType,"cenc",new ArrayBuffer(0))}).not.toThrow()})});describe("dispose",function(){it("removes listeners and closes session",function(){expect(standardCommonMediaKeySession.disposed).toBeFalse();standardCommonMediaKeySession.dispose();expect(standardCommonMediaKeySession.disposed).toBeTrue();expect(mediaKeySessionEventFakes.hasAnyListeners()).withContext("hasAnyListeners").toBe(false);expect(mediaKeySession.close).toHaveBeenCalledOnceWith()})})})});// test/unit/drm/commonEme/MsCommonEme.test.ts
|
|
1953
|
-
var createSpy32=jasmine.createSpy;describe("MsCommonEme",function(){beforeEach(function(){if(!isNode()){pending("Cannot mock MS outside Node");return};globalThis.MSMediaKeys=MockMSMediaKeys;globalThis.MSMediaKeySession=MockMSMediaKeySession;globalThis.MSMediaKeyError=MockMSMediaKeyError});afterEach(function(){delete globalThis.MSMediaKeys;delete globalThis.MSMediaKeySession;delete globalThis.MSMediaKeyError});describe("MsCommonEme",function(){var mockAudioElement;var mockAudioElementEvents;var msCommonEme;beforeEach(function(){mockAudioElement=new MockHTMLAudioElement;mockAudioElement.msSetMediaKeys=createSpy32("msSetMediaKeys");mockAudioElementEvents=implementEventFakes(mockAudioElement);msCommonEme=new MsCommonEme});describe("requestMediaKeySystemAccess",function(){describe("requests access",function(){var keySystem="com.widevine.alpha"/* WIDEVINE */;var supportedConfigurations=[{},{audioCapabilities:[{contentType:"test"}]}];describe("with configs",function(){describe("when isTypeSupported returns true",function(){beforeEach(function(){MockMSMediaKeys.isTypeSupported.and.returnValue(true)});it("returns system access object",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee509(){var access;return _regenerator().w(function(_context509){while(1)switch(_context509.n){case 0:_context509.n=1;return msCommonEme.requestMediaKeySystemAccess(keySystem,supportedConfigurations);case 1:access=_context509.v;expect(access).toBeInstanceOf(MsCommonMediaKeySystemAccess);expect(access.keySystem).toBe(keySystem);case 2:return _context509.a(2)}},_callee509)})))});describe("when isTypeSupported() returns false",function(){beforeEach(function(){MockMSMediaKeys.isTypeSupported.and.returnValue(false)});it("throws MediaKeySystemAccessError",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee510(){return _regenerator().w(function(_context510){while(1)switch(_context510.n){case 0:_context510.n=1;return expectAsync(msCommonEme.requestMediaKeySystemAccess(keySystem,supportedConfigurations)).toBeRejectedWithError(DrmError,"keySystem not supported: com.widevine.alpha");case 1:return _context510.a(2)}},_callee510)})))});describe("with videoCapabilities only",function(){var videoOnlyConfigurations=[{videoCapabilities:[{contentType:"video/mp4"}]}];it("returns system access object when supported",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee511(){var access;return _regenerator().w(function(_context511){while(1)switch(_context511.n){case 0:MockMSMediaKeys.isTypeSupported.and.returnValue(true);_context511.n=1;return msCommonEme.requestMediaKeySystemAccess(keySystem,videoOnlyConfigurations);case 1:access=_context511.v;expect(access).toBeInstanceOf(MsCommonMediaKeySystemAccess);case 2:return _context511.a(2)}},_callee511)})));it("throws DrmError when not supported",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee512(){return _regenerator().w(function(_context512){while(1)switch(_context512.n){case 0:MockMSMediaKeys.isTypeSupported.and.returnValue(false);_context512.n=1;return expectAsync(msCommonEme.requestMediaKeySystemAccess(keySystem,videoOnlyConfigurations)).toBeRejectedWithError(DrmError);case 1:return _context512.a(2)}},_callee512)})))})})})});describe("addEncryptedListener",function(){it("adds a listener and returns an Unsubscribe handle",function(){expect(mockAudioElementEvents.hasAnyListeners()).withContext("hasAnyListeners").toBe(false);var handler=createSpy32("handler");var encryptedSub=msCommonEme.addEncryptedListener(mockAudioElement,handler);expect(handler).not.toHaveBeenCalled();expectTypeEquals(true);var encryptedEvent=mockEvent("msneedkey");mockAudioElement.dispatchEvent(encryptedEvent);expect(handler).toHaveBeenCalledOnceWith(encryptedEvent);encryptedSub();expect(mockAudioElementEvents.hasAnyListeners()).withContext("hasAnyListeners").toBe(false)})})});describe("MsCommonMediaKeySystemAccess",function(){var keySystem="com.widevine.alpha"/* WIDEVINE */;var msCommonMediaKeySystemAccess;beforeEach(function(){msCommonMediaKeySystemAccess=new MsCommonMediaKeySystemAccess(keySystem)});it("creates media keys",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee513(){var mediaKeys;return _regenerator().w(function(_context513){while(1)switch(_context513.n){case 0:_context513.n=1;return msCommonMediaKeySystemAccess.createMediaKeys();case 1:mediaKeys=_context513.v;expect(mediaKeys).withContext("mediaKeys instanceof MsCommonMediaKeys").toBeInstanceOf(MsCommonMediaKeys);expect(mediaKeys.keySystem).toBe(keySystem);case 2:return _context513.a(2)}},_callee513)})))});describe("MsCommonMediaKeys",function(){var mockAudioElement;var mockMsMediaKeys;var msCommonMediaKeys;beforeEach(function(){mockAudioElement=new MockHTMLAudioElement;mockAudioElement.msSetMediaKeys=createSpy32("msSetMediaKeys");mockMsMediaKeys=new MockMSMediaKeys("com.widevine.alpha"/* WIDEVINE */);msCommonMediaKeys=new MsCommonMediaKeys("com.widevine.alpha"/* WIDEVINE */,mockMsMediaKeys);mockMsMediaKeys.createSession.and.callFake(function(){return new MockMSMediaKeySession})});describe("setOnElement",function(){it("sets media keys on element",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee514(){return _regenerator().w(function(_context514){while(1)switch(_context514.n){case 0:_context514.n=1;return msCommonMediaKeys.setOnElement(mockAudioElement);case 1:expect(mockAudioElement.msSetMediaKeys).toHaveBeenCalledOnceWith(mockMsMediaKeys);case 2:return _context514.a(2)}},_callee514)})))});describe("clearFromElement",function(){it("clears media keys on element",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee515(){return _regenerator().w(function(_context515){while(1)switch(_context515.n){case 0:_context515.n=1;return msCommonMediaKeys.clearFromElement(mockAudioElement);case 1:expect(mockAudioElement.msSetMediaKeys).toHaveBeenCalledOnceWith(null);case 2:return _context515.a(2)}},_callee515)})))});describe("setServerCertificate",function(){it("resolves to false",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee516(){return _regenerator().w(function(_context516){while(1)switch(_context516.n){case 0:_context516.n=1;return expectAsync(msCommonMediaKeys.setServerCertificate(new Uint8Array([1,2,3]))).toBeResolvedTo(false);case 1:return _context516.a(2)}},_callee516)})))});describe("createSession",function(){var uint16Array=utf16ToUint16Array("skd://example0");var uint8Array=new Uint8Array(uint16Array.buffer);it("creates a session",function(){var session0=msCommonMediaKeys.createSession("audio/mp4; codecs=\"mp4a.40.2\"","cenc",uint8Array);expect(mockMsMediaKeys.createSession).toHaveBeenCalledOnceWith("audio/mp4; codecs=\"mp4a.40.2\"",uint8Array);expect(session0).toBeInstanceOf(MsCommonMediaKeySession)})})});describe("MsCommonMediaKeySession",function(){var mockMsMediaKeySession;var mockMsMediaKeySessionEvents;var msCommonMediaKeySession;var mockMsMediaKeyError;var mimeType="audio";var initDataType="cenc";var initData=new Uint8Array([1,2,3]);beforeEach(function(){mockMsMediaKeySession=new MockMSMediaKeySession;mockMsMediaKeySessionEvents=implementEventFakes(mockMsMediaKeySession);msCommonMediaKeySession=new MsCommonMediaKeySession(mockMsMediaKeySession,mimeType,initDataType,initData);mockMsMediaKeyError=new MockMSMediaKeyError});it("adds event listener on session for mskeymessage event",function(){expect(mockMsMediaKeySession.addEventListener).toHaveBeenCalled();var messageEventSpy=createEventSpy(msCommonMediaKeySession,"message");var messageEvent=new MockMSMediaKeyMessageEvent;mockMsMediaKeySession.dispatchEvent(messageEvent);expect(messageEventSpy).toHaveBeenCalledOnceWith({message:messageEvent.message.buffer})});describe("when an event listener is added for webkitkeyerror event",function(){describe("when session has error",function(){beforeEach(function(){mockMsMediaKeySession.error=new MSMediaKeyError});afterEach(function(){mockMsMediaKeySession.error=null});it("emits event",function(){expect(mockMsMediaKeySession.addEventListener).toHaveBeenCalled();var messageEventSpy=createEventSpy(msCommonMediaKeySession,"error");mockMsMediaKeySession.dispatchEvent(mockMsMediaKeyError);expect(messageEventSpy).toHaveBeenCalled()})});describe("when session has no error",function(){it("doesn't emit event",function(){var mockSession=new MockMSMediaKeySession;implementEventFakes(mockSession);var msCommonMediaKeySession2=new MsCommonMediaKeySession(mockSession,mimeType,initDataType,initData);expect(mockSession.addEventListener).toHaveBeenCalled();var messageEventSpy=createEventSpy(msCommonMediaKeySession2,"error");mockSession.dispatchEvent(mockMsMediaKeyError);expect(messageEventSpy).not.toHaveBeenCalled()})})});describe("update",function(){it("rejects update when disposed",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee517(){return _regenerator().w(function(_context517){while(1)switch(_context517.n){case 0:msCommonMediaKeySession.dispose();_context517.n=1;return expectAsync(msCommonMediaKeySession.update(new ArrayBuffer(0))).toBeRejectedWith(new DisposedError);case 1:return _context517.a(2)}},_callee517)})));it("updates media key session",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee518(){var arrayBufferEmpty;return _regenerator().w(function(_context518){while(1)switch(_context518.n){case 0:arrayBufferEmpty=new ArrayBuffer(0);_context518.n=1;return msCommonMediaKeySession.update(arrayBufferEmpty);case 1:expect(mockMsMediaKeySession.update).toHaveBeenCalledOnceWith(new Uint8Array(arrayBufferEmpty));case 2:return _context518.a(2)}},_callee518)})))});describe("dispose",function(){it("removes listeners and closes session",function(){expect(msCommonMediaKeySession.disposed).toBeFalse();msCommonMediaKeySession.dispose();expect(msCommonMediaKeySession.disposed).toBeTrue();expect(mockMsMediaKeySessionEvents.hasAnyListeners()).withContext("hasAnyListeners").toBe(false);expect(mockMsMediaKeySession.close).toHaveBeenCalledOnceWith()})})});describe("msErrorCodeToStr",function(){it("translates value correctly",function(){expect(msErrorCodeToStr(MSMediaKeyError.MS_MEDIA_KEYERR_CLIENT)).toBe("CLIENT"/* CLIENT */);expect(msErrorCodeToStr(MSMediaKeyError.MS_MEDIA_KEYERR_DOMAIN)).toBe("DOMAIN"/* DOMAIN */);expect(msErrorCodeToStr(MSMediaKeyError.MS_MEDIA_KEYERR_HARDWARECHANGE)).toBe("HARDWARECHANGE"/* HARDWARECHANGE */);expect(msErrorCodeToStr(MSMediaKeyError.MS_MEDIA_KEYERR_OUTPUT)).toBe("OUTPUT"/* OUTPUT */);expect(msErrorCodeToStr(MSMediaKeyError.MS_MEDIA_KEYERR_SERVICE)).toBe("SERVICE"/* SERVICE */);expect(msErrorCodeToStr(MSMediaKeyError.MS_MEDIA_KEYERR_UNKNOWN)).toBe("UNKNOWN"/* UNKNOWN */)})})});// test/unit/drm/commonEme/CommonEme.test.ts
|
|
1951
|
+
var createSpy31=jasmine.createSpy;describe("WebkitCommonEme",function(){beforeEach(function(){if(!isNode())pending("Cannot mock WebKit outside Node");globalThis.WebKitMediaKeys=MockWebKitMediaKeys;globalThis.WebKitMediaKeySession=MockWebKitMediaKeySession;globalThis.WebKitMediaKeyError=MockWebKitMediaKeyError});afterEach(function(){delete globalThis.WebKitMediaKeys;delete globalThis.WebKitMediaKeySession;delete globalThis.WebKitMediaKeyError});describe("WebKitCommonEme",function(){var mockAudioElement;var mockAudioElementEventFakes;var webKitCommonEme;beforeEach(function(){mockAudioElement=new MockHTMLAudioElement;mockAudioElement.webkitSetMediaKeys=createSpy31("webkitSetMediaKeys");mockAudioElementEventFakes=implementEventFakes(mockAudioElement);webKitCommonEme=new WebKitCommonEme});describe("requestMediaKeySystemAccess",function(){describe("requests access",function(){var keySystem="com.widevine.alpha"/* WIDEVINE */;var supportedConfigurations=[{audioCapabilities:[{contentType:"test"}]}];describe("with configs",function(){describe("with audioCapabilities",function(){describe("when isTypeSupported() returns true",function(){beforeEach(function(){MockWebKitMediaKeys.isTypeSupported.and.returnValue(true)});it("returns system access object",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee492(){var access;return _regenerator().w(function(_context492){while(1)switch(_context492.n){case 0:_context492.n=1;return webKitCommonEme.requestMediaKeySystemAccess(keySystem,supportedConfigurations);case 1:access=_context492.v;expect(access).toBeInstanceOf(WebKitCommonMediaKeySystemAccess);expect(access.keySystem).toBe(keySystem);case 2:return _context492.a(2)}},_callee492)})))});describe("when isTypeSupported() returns false",function(){beforeEach(function(){MockWebKitMediaKeys.isTypeSupported.and.returnValue(false)});it("throws DrmError",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee493(){return _regenerator().w(function(_context493){while(1)switch(_context493.n){case 0:_context493.n=1;return expectAsync(webKitCommonEme.requestMediaKeySystemAccess(keySystem,supportedConfigurations)).toBeRejectedWithError(DrmError);case 1:return _context493.a(2)}},_callee493)})))})});describe("without audioCapabilities",function(){it("throws error",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee494(){return _regenerator().w(function(_context494){while(1)switch(_context494.n){case 0:_context494.n=1;return expectAsync(webKitCommonEme.requestMediaKeySystemAccess(keySystem,[{}])).toBeRejectedWithError(DrmError,"keySystem not supported: com.widevine.alpha");case 1:return _context494.a(2)}},_callee494)})))});describe("with videoCapabilities only",function(){var videoOnlyConfigurations=[{videoCapabilities:[{contentType:"video/mp4"}]}];describe("when isTypeSupported() returns true",function(){beforeEach(function(){MockWebKitMediaKeys.isTypeSupported.and.returnValue(true)});it("returns system access object",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee495(){var access;return _regenerator().w(function(_context495){while(1)switch(_context495.n){case 0:_context495.n=1;return webKitCommonEme.requestMediaKeySystemAccess(keySystem,videoOnlyConfigurations);case 1:access=_context495.v;expect(access).toBeInstanceOf(WebKitCommonMediaKeySystemAccess);expect(access.keySystem).toBe(keySystem);case 2:return _context495.a(2)}},_callee495)})))});describe("when isTypeSupported() returns false",function(){beforeEach(function(){MockWebKitMediaKeys.isTypeSupported.and.returnValue(false)});it("throws DrmError",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee496(){return _regenerator().w(function(_context496){while(1)switch(_context496.n){case 0:_context496.n=1;return expectAsync(webKitCommonEme.requestMediaKeySystemAccess(keySystem,videoOnlyConfigurations)).toBeRejectedWithError(DrmError);case 1:return _context496.a(2)}},_callee496)})))})});describe("with both audioCapabilities and videoCapabilities",function(){var bothConfigurations=[{audioCapabilities:[{contentType:"audio/mp4"}],videoCapabilities:[{contentType:"video/mp4"}]}];it("checks all capabilities",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee497(){return _regenerator().w(function(_context497){while(1)switch(_context497.n){case 0:MockWebKitMediaKeys.isTypeSupported.and.returnValue(true);_context497.n=1;return webKitCommonEme.requestMediaKeySystemAccess(keySystem,bothConfigurations);case 1:expect(MockWebKitMediaKeys.isTypeSupported).toHaveBeenCalledWith(keySystem,"audio/mp4");case 2:return _context497.a(2)}},_callee497)})));it("succeeds when only videoCapabilities is supported",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee498(){var access;return _regenerator().w(function(_context498){while(1)switch(_context498.n){case 0:MockWebKitMediaKeys.isTypeSupported.and.callFake(function(_ks,contentType2){return contentType2==="video/mp4"});_context498.n=1;return webKitCommonEme.requestMediaKeySystemAccess(keySystem,bothConfigurations);case 1:access=_context498.v;expect(access).toBeInstanceOf(WebKitCommonMediaKeySystemAccess);case 2:return _context498.a(2)}},_callee498)})))})});describe("without configs",function(){it("throws DrmError",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee499(){return _regenerator().w(function(_context499){while(1)switch(_context499.n){case 0:_context499.n=1;return expectAsync(webKitCommonEme.requestMediaKeySystemAccess(keySystem,[])).toBeRejectedWithError(DrmError);case 1:return _context499.a(2)}},_callee499)})))})})});describe("addEncryptedListener",function(){it("adds a listener and returns an Unsubscribe handle",function(){expect(mockAudioElementEventFakes.hasAnyListeners()).withContext("hasAnyListeners").toBe(false);var handler=jasmine.createSpy("handler");var encryptedSub=webKitCommonEme.addEncryptedListener(mockAudioElement,handler);expect(handler).not.toHaveBeenCalled();expectTypeEquals(true);var encryptedEvent=mockEvent("webkitneedkey");mockAudioElement.dispatchEvent(encryptedEvent);expect(handler).toHaveBeenCalledOnceWith(encryptedEvent);encryptedSub();expect(mockAudioElementEventFakes.hasAnyListeners()).withContext("hasAnyListeners").toBe(false)})})});describe("WebKitCommonMediaKeySystemAccess",function(){var keySystem="com.widevine.alpha"/* WIDEVINE */;var webKitCommonMediaKeySystemAccess;beforeEach(function(){webKitCommonMediaKeySystemAccess=new WebKitCommonMediaKeySystemAccess(keySystem)});it("creates media keys",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee500(){var mediaKeys;return _regenerator().w(function(_context500){while(1)switch(_context500.n){case 0:_context500.n=1;return webKitCommonMediaKeySystemAccess.createMediaKeys();case 1:mediaKeys=_context500.v;expect(mediaKeys).withContext("mediaKeys instanceof WebKitCommonMediaKeys").toBeInstanceOf(WebKitCommonMediaKeys);expect(mediaKeys.keySystem).toBe(keySystem);case 2:return _context500.a(2)}},_callee500)})))});describe("WebKitCommonMediaKeys",function(){var mockAudioElement;var mockWebKitMediaKeys;var webKitCommonMediaKeys;beforeEach(function(){mockAudioElement=new MockHTMLAudioElement;mockAudioElement.webkitSetMediaKeys=createSpy31("webkitSetMediaKeys");mockWebKitMediaKeys=new MockWebKitMediaKeys("com.widevine.alpha"/* WIDEVINE */);webKitCommonMediaKeys=new WebKitCommonMediaKeys("com.widevine.alpha"/* WIDEVINE */,mockWebKitMediaKeys);mockWebKitMediaKeys.createSession.and.callFake(function(){return new MockWebKitMediaKeySession})});describe("setOnElement",function(){it("sets media keys on element",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee501(){return _regenerator().w(function(_context501){while(1)switch(_context501.n){case 0:_context501.n=1;return webKitCommonMediaKeys.setOnElement(mockAudioElement);case 1:expect(mockAudioElement.webkitSetMediaKeys).toHaveBeenCalledOnceWith(mockWebKitMediaKeys);case 2:return _context501.a(2)}},_callee501)})))});describe("clearFromElement",function(){it("clears media keys on element",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee502(){return _regenerator().w(function(_context502){while(1)switch(_context502.n){case 0:_context502.n=1;return webKitCommonMediaKeys.clearFromElement(mockAudioElement);case 1:expect(mockAudioElement.webkitSetMediaKeys).toHaveBeenCalledOnceWith(null);case 2:return _context502.a(2)}},_callee502)})))});describe("setServerCertificate",function(){it("resolves to false",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee503(){return _regenerator().w(function(_context503){while(1)switch(_context503.n){case 0:_context503.n=1;return expectAsync(webKitCommonMediaKeys.setServerCertificate(new Uint8Array([1,2,3]))).toBeResolvedTo(false);case 1:return _context503.a(2)}},_callee503)})))});describe("createSession",function(){var mimeType="mime";var uint16Array=utf16ToUint16Array("skd://example0");var uint8Array=new Uint8Array(uint16Array.buffer);it("creates session",function(){var session=webKitCommonMediaKeys.createSession(mimeType,"cenc",uint8Array);expect(mockWebKitMediaKeys.createSession).toHaveBeenCalledTimes(1);expect(session).toBeInstanceOf(WebKitCommonMediaKeySession)})})});describe("WebKitCommonMediaKeySession",function(){var mockWebKitMediaKeySession;var mockWebKitMediaKeySessionEventFakes;var webKitCommonMediaKeySession;var mockWebKitMediaKeyError;var mimeType="audio";var initDataType="cenc";var initData=new Uint8Array([1,2,3]);beforeEach(function(){mockWebKitMediaKeySession=new MockWebKitMediaKeySession;mockWebKitMediaKeySessionEventFakes=implementEventFakes(mockWebKitMediaKeySession);webKitCommonMediaKeySession=new WebKitCommonMediaKeySession(mockWebKitMediaKeySession,mimeType,initDataType,initData);mockWebKitMediaKeyError=new MockWebKitMediaKeyError});it("adds event listener on session for webkitkeymessage event",function(){expect(mockWebKitMediaKeySession.addEventListener).toHaveBeenCalled();var messageEventSpy=createEventSpy(webKitCommonMediaKeySession,"message");var messageEvent=new MockWebKitMediaKeyMessageEvent;mockWebKitMediaKeySession.dispatchEvent(messageEvent);expect(messageEventSpy).toHaveBeenCalledOnceWith({message:messageEvent.message.buffer})});describe("when an event listener is added for webkitkeyerror event",function(){describe("when session has error",function(){beforeEach(function(){mockWebKitMediaKeySession.error=new MockWebKitMediaKeyError});afterEach(function(){mockWebKitMediaKeySession.error=null});it("emits event",function(){expect(mockWebKitMediaKeySession.addEventListener).toHaveBeenCalled();var messageEventSpy=createEventSpy(webKitCommonMediaKeySession,"error");mockWebKitMediaKeySession.dispatchEvent(mockWebKitMediaKeyError);expect(messageEventSpy).toHaveBeenCalled()})});describe("when session has no error",function(){it("doesn't emit event",function(){var mockWebKitSession=new MockWebKitMediaKeySession;implementEventFakes(mockWebKitSession);var webkitCommonMediaKeySession=new WebKitCommonMediaKeySession(mockWebKitSession,mimeType,initDataType,initData);expect(mockWebKitSession.addEventListener).toHaveBeenCalled();var messageEventSpy=createEventSpy(webkitCommonMediaKeySession,"error");mockWebKitSession.dispatchEvent(mockWebKitMediaKeyError);expect(messageEventSpy).not.toHaveBeenCalled()})})});describe("update",function(){it("rejects update when disposed",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee504(){return _regenerator().w(function(_context504){while(1)switch(_context504.n){case 0:webKitCommonMediaKeySession.dispose();_context504.n=1;return expectAsync(webKitCommonMediaKeySession.update(new ArrayBuffer(0))).toBeRejectedWith(new DisposedError);case 1:return _context504.a(2)}},_callee504)})));it("updates media key session",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee505(){var arrayBuffer;return _regenerator().w(function(_context505){while(1)switch(_context505.n){case 0:arrayBuffer=new ArrayBuffer(0);_context505.n=1;return webKitCommonMediaKeySession.update(arrayBuffer);case 1:expect(mockWebKitMediaKeySession.update).toHaveBeenCalledOnceWith(new Uint8Array(arrayBuffer));case 2:return _context505.a(2)}},_callee505)})))});describe("dispose",function(){it("removes listeners and closes session",function(){expect(webKitCommonMediaKeySession.disposed).toBeFalse();webKitCommonMediaKeySession.dispose();expect(webKitCommonMediaKeySession.disposed).toBeTrue();expect(mockWebKitMediaKeySessionEventFakes.hasAnyListeners()).withContext("hasAnyListeners").toBe(false);expect(mockWebKitMediaKeySession.close).toHaveBeenCalledOnceWith()})})});describe("webkitErrorCodeToStr",function(){it("translates value correctly",function(){expect(webkitErrorCodeToStr(WebKitMediaKeyError.MEDIA_KEYERR_CLIENT)).toBe("CLIENT"/* CLIENT */);expect(webkitErrorCodeToStr(WebKitMediaKeyError.MEDIA_KEYERR_DOMAIN)).toBe("DOMAIN"/* DOMAIN */);expect(webkitErrorCodeToStr(WebKitMediaKeyError.MEDIA_KEYERR_HARDWARECHANGE)).toBe("HARDWARECHANGE"/* HARDWARECHANGE */);expect(webkitErrorCodeToStr(WebKitMediaKeyError.MEDIA_KEYERR_OUTPUT)).toBe("OUTPUT"/* OUTPUT */);expect(webkitErrorCodeToStr(WebKitMediaKeyError.MEDIA_KEYERR_SERVICE)).toBe("SERVICE"/* SERVICE */);expect(webkitErrorCodeToStr(WebKitMediaKeyError.MEDIA_KEYERR_UNKNOWN)).toBe("UNKNOWN"/* UNKNOWN */)})})});// test/unit/drm/commonEme/StandardCommonEme.test.ts
|
|
1952
|
+
var any30=jasmine.any;describe("StandardCommonEme",function(){var navigator2;var mediaKeySystemAccess;beforeEach(function(){navigator2=setMockNavigator();mediaKeySystemAccess=new MockMediaKeySystemAccess;mediaKeySystemAccess.createMediaKeys.and.resolveTo(new MockMediaKeys);navigator2.requestMediaKeySystemAccess.and.resolveTo(mediaKeySystemAccess)});describe("StandardCommonEme",function(){var audio;var standardCommonEme;var audioEventFakes;beforeEach(function(){audio=new MockHTMLAudioElement;audioEventFakes=implementEventFakes(audio);standardCommonEme=new StandardCommonEme});describe("requestMediaKeySystemAccess",function(){var supportedConfigurations=[{},{audioCapabilities:[{contentType:"test"}]}];describe("when navigator.requestMediaKeySystemAccess resolves",function(){it("returns StandardCommonMediaKeySystemAccess",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee506(){return _regenerator().w(function(_context506){while(1)switch(_context506.n){case 0:expect(navigator2.requestMediaKeySystemAccess).not.toHaveBeenCalled();_context506.n=1;return expectAsync(standardCommonEme.requestMediaKeySystemAccess("com.widevine.alpha"/* WIDEVINE */,supportedConfigurations)).toBeResolvedTo(any30(StandardCommonMediaKeySystemAccess));case 1:return _context506.a(2)}},_callee506)})))});describe("when navigator.requestMediaKeySystemAccess rejects",function(){beforeEach(function(){navigator2.requestMediaKeySystemAccess.and.rejectWith(new Error("expected"))});it("rejects with reason",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee507(){return _regenerator().w(function(_context507){while(1)switch(_context507.n){case 0:_context507.n=1;return expectAsync(standardCommonEme.requestMediaKeySystemAccess("com.widevine.alpha"/* WIDEVINE */,supportedConfigurations)).toBeRejectedWithError(Error,"expected");case 1:return _context507.a(2)}},_callee507)})))})});describe("addEncryptedListener",function(){it("adds a listener and returns an Unsubscribe handle",function(){expect(audioEventFakes.hasAnyListeners()).withContext("hasAnyListeners").toBe(false);var handler=jasmine.createSpy("handler");var encryptedSub=standardCommonEme.addEncryptedListener(audio,handler);expect(handler).not.toHaveBeenCalled();expectTypeEquals(true);var encryptedEvent=mockEvent("encrypted");audio.dispatchEvent(encryptedEvent);expect(handler).toHaveBeenCalledOnceWith(encryptedEvent);encryptedSub();expect(audioEventFakes.hasAnyListeners()).withContext("hasAnyListeners").toBe(false)})})});describe("StandardCommonMediaKeySystemAccess",function(){var standardCommonMediaKeySystemAccess;beforeEach(function(){standardCommonMediaKeySystemAccess=new StandardCommonMediaKeySystemAccess("com.widevine.alpha"/* WIDEVINE */,mediaKeySystemAccess)});describe("createMediaKeys",function(){it("creates media keys",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee508(){var mediaKeys;return _regenerator().w(function(_context508){while(1)switch(_context508.n){case 0:expect(mediaKeySystemAccess.createMediaKeys).not.toHaveBeenCalled();_context508.n=1;return standardCommonMediaKeySystemAccess.createMediaKeys();case 1:mediaKeys=_context508.v;expect(mediaKeySystemAccess.createMediaKeys).toHaveBeenCalledTimes(1);expect(mediaKeys).toBeInstanceOf(StandardCommonMediaKeys);case 2:return _context508.a(2)}},_callee508)})))})});describe("StandardCommonMediaKeys",function(){var mockAudioElement;var mediaKeys;var standardCommonMediaKeys;beforeEach(function(){mockAudioElement=new MockHTMLAudioElement;mediaKeys=new MockMediaKeys;standardCommonMediaKeys=new StandardCommonMediaKeys("com.widevine.alpha"/* WIDEVINE */,mediaKeys)});describe("setOnElement",function(){it("sets media keys on element",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee509(){return _regenerator().w(function(_context509){while(1)switch(_context509.n){case 0:expect(mockAudioElement.setMediaKeys).not.toHaveBeenCalled();_context509.n=1;return standardCommonMediaKeys.setOnElement(mockAudioElement);case 1:expect(mockAudioElement.setMediaKeys).toHaveBeenCalledOnceWith(mediaKeys);case 2:return _context509.a(2)}},_callee509)})))});describe("clearFromElement",function(){it("clears media keys on element",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee510(){return _regenerator().w(function(_context510){while(1)switch(_context510.n){case 0:expect(mockAudioElement.setMediaKeys).not.toHaveBeenCalled();_context510.n=1;return standardCommonMediaKeys.clearFromElement(mockAudioElement);case 1:expect(mockAudioElement.setMediaKeys).toHaveBeenCalledOnceWith(null);case 2:return _context510.a(2)}},_callee510)})))});describe("setServerCertificate",function(){it("delegates to mediaKeys.setServerCertificate and returns the result",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee511(){var cert,result;return _regenerator().w(function(_context511){while(1)switch(_context511.n){case 0:cert=new Uint8Array([1,2,3]);mediaKeys.setServerCertificate.and.resolveTo(true);_context511.n=1;return standardCommonMediaKeys.setServerCertificate(cert);case 1:result=_context511.v;expect(result).toBeTrue();expect(mediaKeys.setServerCertificate).toHaveBeenCalledOnceWith(cert);case 2:return _context511.a(2)}},_callee511)})))});describe("createSession",function(){it("creates a session",function(){expect(mediaKeys.createSession).not.toHaveBeenCalled();var mediaKeySession=new MockMediaKeySession;mediaKeySession.closed=never;implementEventFakes(mediaKeySession);mediaKeySession.generateRequest.and.resolveTo(void 0);mediaKeys.createSession.and.returnValue(mediaKeySession);var mimeType="audio";var initData=new Uint8Array([1,2,3]);var session=standardCommonMediaKeys.createSession(mimeType,"cenc",initData);expect(mediaKeys.createSession).toHaveBeenCalledOnceWith("temporary");expect(session).toBeInstanceOf(StandardCommonMediaKeySession);expect(session.initData).toBe(initData);expect(session.mimeType).toBe(mimeType);expect(session.initDataType).toBe("cenc")})})});describe("StandardCommonMediaKeySession",function(){var mediaKeySession;var mediaKeySessionEventFakes;var standardCommonMediaKeySession;var mimeType="audio";var initData=new Uint8Array([1,2,3]);var closed;beforeEach(function(){mediaKeySession=new MockMediaKeySession;mediaKeySessionEventFakes=implementEventFakes(mediaKeySession);mediaKeySession.close.and.returnValue(Promise.resolve());mediaKeySession.generateRequest.and.resolveTo(void 0);closed=new Deferred;mediaKeySession.closed=closed;standardCommonMediaKeySession=new StandardCommonMediaKeySession(mediaKeySession,mimeType,"cenc",initData)});it("adds event listener on session for message event",function(){expect(mediaKeySession.addEventListener).toHaveBeenCalled();var messageEventSpy=createEventSpy(standardCommonMediaKeySession,"message");var event=new MockMediaKeyMessageEvent;event.type="message";mediaKeySession.dispatchEvent(event);expect(messageEventSpy).toHaveBeenCalledOnceWith({message:event.message})});describe("when created",function(){it("calls session.generateRequest() with the initData buffer",function(){expect(mediaKeySession.generateRequest).toHaveBeenCalledOnceWith("cenc",initData.buffer);mediaKeySession.generateRequest.calls.reset();var arrayBuffer=new ArrayBuffer(0);standardCommonMediaKeySession=new StandardCommonMediaKeySession(mediaKeySession,mimeType,"cenc",arrayBuffer);expect(mediaKeySession.generateRequest).toHaveBeenCalledOnceWith("cenc",arrayBuffer)});describe("when session.generateRequest rejects",function(){it("emits an error event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee512(){var errorSpy;return _regenerator().w(function(_context512){while(1)switch(_context512.n){case 0:mediaKeySession.generateRequest.and.rejectWith(new Error("expected"));standardCommonMediaKeySession=new StandardCommonMediaKeySession(mediaKeySession,mimeType,"cenc",initData);errorSpy=createEventSpy(standardCommonMediaKeySession,"error");_context512.n=1;return expectAsync(errorSpy.next()).toBeResolvedTo({target:standardCommonMediaKeySession,error:new Error("expected")});case 1:return _context512.a(2)}},_callee512)})))})});describe("update",function(){it("throws when disposed",function(){standardCommonMediaKeySession.dispose();expect(function(){return standardCommonMediaKeySession.update(new ArrayBuffer(0))}).toThrowError(DisposedError)});it("updates media key session",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee513(){var arrayBufferEmpty;return _regenerator().w(function(_context513){while(1)switch(_context513.n){case 0:arrayBufferEmpty=new ArrayBuffer(0);_context513.n=1;return standardCommonMediaKeySession.update(arrayBufferEmpty);case 1:expect(mediaKeySession.update).toHaveBeenCalledOnceWith(arrayBufferEmpty);case 2:return _context513.a(2)}},_callee513)})))});describe("closed event",function(){it("dispatches when the MediaKeySession closed resolves",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee514(){var closedSpy;return _regenerator().w(function(_context514){while(1)switch(_context514.n){case 0:closedSpy=createEventSpy(standardCommonMediaKeySession,"closed");closed.resolve("closed-by-application");_context514.n=1;return flushPromises();case 1:expect(closedSpy).toHaveBeenCalledOnceWith({reason:"closed-by-application"});case 2:return _context514.a(2)}},_callee514)})))});describe("when session.closed is nullish",function(){it("does not fail to create a session",function(){;mediaKeySession.closed=null;expect(function(){return new StandardCommonMediaKeySession(mediaKeySession,mimeType,"cenc",new ArrayBuffer(0))}).not.toThrow()})});describe("dispose",function(){it("removes listeners and closes session",function(){expect(standardCommonMediaKeySession.disposed).toBeFalse();standardCommonMediaKeySession.dispose();expect(standardCommonMediaKeySession.disposed).toBeTrue();expect(mediaKeySessionEventFakes.hasAnyListeners()).withContext("hasAnyListeners").toBe(false);expect(mediaKeySession.close).toHaveBeenCalledOnceWith()})})})});// test/unit/drm/commonEme/MsCommonEme.test.ts
|
|
1953
|
+
var createSpy32=jasmine.createSpy;describe("MsCommonEme",function(){beforeEach(function(){if(!isNode()){pending("Cannot mock MS outside Node");return};globalThis.MSMediaKeys=MockMSMediaKeys;globalThis.MSMediaKeySession=MockMSMediaKeySession;globalThis.MSMediaKeyError=MockMSMediaKeyError});afterEach(function(){delete globalThis.MSMediaKeys;delete globalThis.MSMediaKeySession;delete globalThis.MSMediaKeyError});describe("MsCommonEme",function(){var mockAudioElement;var mockAudioElementEvents;var msCommonEme;beforeEach(function(){mockAudioElement=new MockHTMLAudioElement;mockAudioElement.msSetMediaKeys=createSpy32("msSetMediaKeys");mockAudioElementEvents=implementEventFakes(mockAudioElement);msCommonEme=new MsCommonEme});describe("requestMediaKeySystemAccess",function(){describe("requests access",function(){var keySystem="com.widevine.alpha"/* WIDEVINE */;var supportedConfigurations=[{},{audioCapabilities:[{contentType:"test"}]}];describe("with configs",function(){describe("when isTypeSupported returns true",function(){beforeEach(function(){MockMSMediaKeys.isTypeSupported.and.returnValue(true)});it("returns system access object",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee515(){var access;return _regenerator().w(function(_context515){while(1)switch(_context515.n){case 0:_context515.n=1;return msCommonEme.requestMediaKeySystemAccess(keySystem,supportedConfigurations);case 1:access=_context515.v;expect(access).toBeInstanceOf(MsCommonMediaKeySystemAccess);expect(access.keySystem).toBe(keySystem);case 2:return _context515.a(2)}},_callee515)})))});describe("when isTypeSupported() returns false",function(){beforeEach(function(){MockMSMediaKeys.isTypeSupported.and.returnValue(false)});it("throws MediaKeySystemAccessError",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee516(){return _regenerator().w(function(_context516){while(1)switch(_context516.n){case 0:_context516.n=1;return expectAsync(msCommonEme.requestMediaKeySystemAccess(keySystem,supportedConfigurations)).toBeRejectedWithError(DrmError,"keySystem not supported: com.widevine.alpha");case 1:return _context516.a(2)}},_callee516)})))});describe("with videoCapabilities only",function(){var videoOnlyConfigurations=[{videoCapabilities:[{contentType:"video/mp4"}]}];it("returns system access object when supported",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee517(){var access;return _regenerator().w(function(_context517){while(1)switch(_context517.n){case 0:MockMSMediaKeys.isTypeSupported.and.returnValue(true);_context517.n=1;return msCommonEme.requestMediaKeySystemAccess(keySystem,videoOnlyConfigurations);case 1:access=_context517.v;expect(access).toBeInstanceOf(MsCommonMediaKeySystemAccess);case 2:return _context517.a(2)}},_callee517)})));it("throws DrmError when not supported",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee518(){return _regenerator().w(function(_context518){while(1)switch(_context518.n){case 0:MockMSMediaKeys.isTypeSupported.and.returnValue(false);_context518.n=1;return expectAsync(msCommonEme.requestMediaKeySystemAccess(keySystem,videoOnlyConfigurations)).toBeRejectedWithError(DrmError);case 1:return _context518.a(2)}},_callee518)})))})})})});describe("addEncryptedListener",function(){it("adds a listener and returns an Unsubscribe handle",function(){expect(mockAudioElementEvents.hasAnyListeners()).withContext("hasAnyListeners").toBe(false);var handler=createSpy32("handler");var encryptedSub=msCommonEme.addEncryptedListener(mockAudioElement,handler);expect(handler).not.toHaveBeenCalled();expectTypeEquals(true);var encryptedEvent=mockEvent("msneedkey");mockAudioElement.dispatchEvent(encryptedEvent);expect(handler).toHaveBeenCalledOnceWith(encryptedEvent);encryptedSub();expect(mockAudioElementEvents.hasAnyListeners()).withContext("hasAnyListeners").toBe(false)})})});describe("MsCommonMediaKeySystemAccess",function(){var keySystem="com.widevine.alpha"/* WIDEVINE */;var msCommonMediaKeySystemAccess;beforeEach(function(){msCommonMediaKeySystemAccess=new MsCommonMediaKeySystemAccess(keySystem)});it("creates media keys",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee519(){var mediaKeys;return _regenerator().w(function(_context519){while(1)switch(_context519.n){case 0:_context519.n=1;return msCommonMediaKeySystemAccess.createMediaKeys();case 1:mediaKeys=_context519.v;expect(mediaKeys).withContext("mediaKeys instanceof MsCommonMediaKeys").toBeInstanceOf(MsCommonMediaKeys);expect(mediaKeys.keySystem).toBe(keySystem);case 2:return _context519.a(2)}},_callee519)})))});describe("MsCommonMediaKeys",function(){var mockAudioElement;var mockMsMediaKeys;var msCommonMediaKeys;beforeEach(function(){mockAudioElement=new MockHTMLAudioElement;mockAudioElement.msSetMediaKeys=createSpy32("msSetMediaKeys");mockMsMediaKeys=new MockMSMediaKeys("com.widevine.alpha"/* WIDEVINE */);msCommonMediaKeys=new MsCommonMediaKeys("com.widevine.alpha"/* WIDEVINE */,mockMsMediaKeys);mockMsMediaKeys.createSession.and.callFake(function(){return new MockMSMediaKeySession})});describe("setOnElement",function(){it("sets media keys on element",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee520(){return _regenerator().w(function(_context520){while(1)switch(_context520.n){case 0:_context520.n=1;return msCommonMediaKeys.setOnElement(mockAudioElement);case 1:expect(mockAudioElement.msSetMediaKeys).toHaveBeenCalledOnceWith(mockMsMediaKeys);case 2:return _context520.a(2)}},_callee520)})))});describe("clearFromElement",function(){it("clears media keys on element",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee521(){return _regenerator().w(function(_context521){while(1)switch(_context521.n){case 0:_context521.n=1;return msCommonMediaKeys.clearFromElement(mockAudioElement);case 1:expect(mockAudioElement.msSetMediaKeys).toHaveBeenCalledOnceWith(null);case 2:return _context521.a(2)}},_callee521)})))});describe("setServerCertificate",function(){it("resolves to false",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee522(){return _regenerator().w(function(_context522){while(1)switch(_context522.n){case 0:_context522.n=1;return expectAsync(msCommonMediaKeys.setServerCertificate(new Uint8Array([1,2,3]))).toBeResolvedTo(false);case 1:return _context522.a(2)}},_callee522)})))});describe("createSession",function(){var uint16Array=utf16ToUint16Array("skd://example0");var uint8Array=new Uint8Array(uint16Array.buffer);it("creates a session",function(){var session0=msCommonMediaKeys.createSession("audio/mp4; codecs=\"mp4a.40.2\"","cenc",uint8Array);expect(mockMsMediaKeys.createSession).toHaveBeenCalledOnceWith("audio/mp4; codecs=\"mp4a.40.2\"",uint8Array);expect(session0).toBeInstanceOf(MsCommonMediaKeySession)})})});describe("MsCommonMediaKeySession",function(){var mockMsMediaKeySession;var mockMsMediaKeySessionEvents;var msCommonMediaKeySession;var mockMsMediaKeyError;var mimeType="audio";var initDataType="cenc";var initData=new Uint8Array([1,2,3]);beforeEach(function(){mockMsMediaKeySession=new MockMSMediaKeySession;mockMsMediaKeySessionEvents=implementEventFakes(mockMsMediaKeySession);msCommonMediaKeySession=new MsCommonMediaKeySession(mockMsMediaKeySession,mimeType,initDataType,initData);mockMsMediaKeyError=new MockMSMediaKeyError});it("adds event listener on session for mskeymessage event",function(){expect(mockMsMediaKeySession.addEventListener).toHaveBeenCalled();var messageEventSpy=createEventSpy(msCommonMediaKeySession,"message");var messageEvent=new MockMSMediaKeyMessageEvent;mockMsMediaKeySession.dispatchEvent(messageEvent);expect(messageEventSpy).toHaveBeenCalledOnceWith({message:messageEvent.message.buffer})});describe("when an event listener is added for webkitkeyerror event",function(){describe("when session has error",function(){beforeEach(function(){mockMsMediaKeySession.error=new MSMediaKeyError});afterEach(function(){mockMsMediaKeySession.error=null});it("emits event",function(){expect(mockMsMediaKeySession.addEventListener).toHaveBeenCalled();var messageEventSpy=createEventSpy(msCommonMediaKeySession,"error");mockMsMediaKeySession.dispatchEvent(mockMsMediaKeyError);expect(messageEventSpy).toHaveBeenCalled()})});describe("when session has no error",function(){it("doesn't emit event",function(){var mockSession=new MockMSMediaKeySession;implementEventFakes(mockSession);var msCommonMediaKeySession2=new MsCommonMediaKeySession(mockSession,mimeType,initDataType,initData);expect(mockSession.addEventListener).toHaveBeenCalled();var messageEventSpy=createEventSpy(msCommonMediaKeySession2,"error");mockSession.dispatchEvent(mockMsMediaKeyError);expect(messageEventSpy).not.toHaveBeenCalled()})})});describe("update",function(){it("rejects update when disposed",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee523(){return _regenerator().w(function(_context523){while(1)switch(_context523.n){case 0:msCommonMediaKeySession.dispose();_context523.n=1;return expectAsync(msCommonMediaKeySession.update(new ArrayBuffer(0))).toBeRejectedWith(new DisposedError);case 1:return _context523.a(2)}},_callee523)})));it("updates media key session",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee524(){var arrayBufferEmpty;return _regenerator().w(function(_context524){while(1)switch(_context524.n){case 0:arrayBufferEmpty=new ArrayBuffer(0);_context524.n=1;return msCommonMediaKeySession.update(arrayBufferEmpty);case 1:expect(mockMsMediaKeySession.update).toHaveBeenCalledOnceWith(new Uint8Array(arrayBufferEmpty));case 2:return _context524.a(2)}},_callee524)})))});describe("dispose",function(){it("removes listeners and closes session",function(){expect(msCommonMediaKeySession.disposed).toBeFalse();msCommonMediaKeySession.dispose();expect(msCommonMediaKeySession.disposed).toBeTrue();expect(mockMsMediaKeySessionEvents.hasAnyListeners()).withContext("hasAnyListeners").toBe(false);expect(mockMsMediaKeySession.close).toHaveBeenCalledOnceWith()})})});describe("msErrorCodeToStr",function(){it("translates value correctly",function(){expect(msErrorCodeToStr(MSMediaKeyError.MS_MEDIA_KEYERR_CLIENT)).toBe("CLIENT"/* CLIENT */);expect(msErrorCodeToStr(MSMediaKeyError.MS_MEDIA_KEYERR_DOMAIN)).toBe("DOMAIN"/* DOMAIN */);expect(msErrorCodeToStr(MSMediaKeyError.MS_MEDIA_KEYERR_HARDWARECHANGE)).toBe("HARDWARECHANGE"/* HARDWARECHANGE */);expect(msErrorCodeToStr(MSMediaKeyError.MS_MEDIA_KEYERR_OUTPUT)).toBe("OUTPUT"/* OUTPUT */);expect(msErrorCodeToStr(MSMediaKeyError.MS_MEDIA_KEYERR_SERVICE)).toBe("SERVICE"/* SERVICE */);expect(msErrorCodeToStr(MSMediaKeyError.MS_MEDIA_KEYERR_UNKNOWN)).toBe("UNKNOWN"/* UNKNOWN */)})})});// test/unit/drm/commonEme/CommonEme.test.ts
|
|
1954
1954
|
var any31=jasmine.any;describe("CommonEme",function(){describe("CommonMediaKeySessionError",function(){it("returns a serializable error representation",function(){var code=0;var systemCode=0;expect(new CommonMediaKeySessionError(code,"CLIENT"/* CLIENT */,systemCode,"CLIENT"/* CLIENT */).toJSON()).toEqual({name:"CommonMediaKeySessionError",origin:ErrorOrigin.DRM,level:"warn"/* WARN */,message:"CLIENT"/* CLIENT */,stack:any31(String),code:code,codeStr:"CLIENT"/* CLIENT */,systemCode:systemCode,systemCodeStr:"CLIENT"/* CLIENT */})})})});// test/unit/client/CapabilitiesImpl.test.ts
|
|
1955
|
-
describe("CapabilitiesImpl",function(){var media;var capabilities;var drmController;beforeEach(function(){media=new MockHTMLAudioElement;drmController=new MockDrmController;capabilities=new CapabilitiesImpl({media:media,drmController:drmController})});describe("mse",function(){it("returns supportsMse",function(){expect(capabilities.mse).toBe(supportsMse())})});describe("eme",function(){it("returns drmController.isEmeSupported",function(){drmController.isEmeSupported.and.returnValue(true);expect(capabilities.eme).toBeTrue();drmController.isEmeSupported.and.returnValue(false);expect(capabilities.eme).toBeFalse()})});describe("dash",function(){it("returns truthy result from canPlayType 'application/dash+xml'",function(){media.canPlayType.and.callFake(function(type){if(type==="application/dash+xml")return"probably";else return""});expect(capabilities.dash).toBe(true);media.canPlayType.and.returnValue("");expect(capabilities.dash).toBe(false)})});describe("hls",function(){it("returns truthy result from canPlayType 'application/vnd.apple.mpegurl'",function(){media.canPlayType.and.callFake(function(type){if(type==="application/vnd.apple.mpegurl")return"maybe";else return""});expect(capabilities.hls).toBe(true);media.canPlayType.and.returnValue("");expect(capabilities.hls).toBe(false)})});describe("sampleRate",function(){describe("when audio context is supported",function(){var mockAudioContextRef=overrideGlobalInit(audioContextRef,function(){return new MockAudioContext});it("resolves to the sampleRate reported by the audio context singleton",function(){var mockAudioContext=mockAudioContextRef.value;mockAudioContext.sampleRate=44100;expect(capabilities.sampleRate).toBe(44100);mockAudioContext.sampleRate=48e3;expect(capabilities.sampleRate).toBe(48e3)})});describe("when audio context is not supported",function(){overrideGlobalInit(audioContextRef,function(){return null});it("resolves to null",function(){expect(capabilities.sampleRate).toBe(null)})})});describe("canPlayType",function(){it("returns empty string if HTMLMediaElement.canPlayType is not defined ",function(){media.canPlayType=void 0;expect(capabilities.canPlayType("flac")).toBe("no"/* NO */)});describe("when media returns empty string",function(){it("returns CanPlayTypeResult.NO",function(){media.canPlayType.and.returnValue("");expect(capabilities.canPlayType("flac")).toBe("no"/* NO */)})});describe("when media returns 'probably'",function(){it("returns CanPlayTypeResult.PROBABLY",function(){media.canPlayType.and.returnValue("probably");expect(capabilities.canPlayType("")).toBe("probably"/* PROBABLY */)})});describe("when media returns 'maybe'",function(){it("returns CanPlayTypeResult.MAYBE",function(){media.canPlayType.and.returnValue("maybe");expect(capabilities.canPlayType("")).toBe("maybe"/* MAYBE */)})})});describe("canPlayTypeMse",function(){var originalMediaSource=globalThis.MediaSource;var originalManagedMediaSource=globalThis.ManagedMediaSource;beforeEach(function(){globalThis.MediaSource=MockMediaSourceGlobal;globalThis.ManagedMediaSource=void 0});afterEach(function(){globalThis.MediaSource=originalMediaSource;globalThis.ManagedMediaSource=originalManagedMediaSource;MockMediaSourceGlobal.isTypeSupported.calls.reset()});it("delegates to isTypeSupported",function(){MockMediaSourceGlobal.isTypeSupported.and.returnValues(true,false);expect(capabilities.canPlayTypeMse("flac")).toBeTrue();expect(capabilities.canPlayTypeMse("opus")).toBeFalse()})});describe("supportsKeySystem",function(){it("returns drmController.isSupported with common format and given key system",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1956
|
-
describe("progressive integ",function(){var suite=createVinylSuite();it("plays",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1957
|
-
describe("trackController integ",function(){function createLoadOptionsList(count){var loadOptions=[];for(var i=0;i<count;i++){loadOptions.push({type:"src",uri:"".concat(vinylTestAssets.prog.libmp3lame_60s_2ch_16bit_44100Hz_48kbps,"?track=").concat(createShortUid(),"_").concat(i)})}return loadOptions}describe("load",function(){var suite=createVinylSuite({trackController:{preloadCapacity:1,trackPrefetchCount:3}});it("prefetches trackPrefetchCount tracks ahead",function(){var tracks=createLoadOptionsList(7);var player=suite.player;function expectCached(indices){for(var i=0;i<6;i++){var expected=indices.includes(i);expect(player.isTrackCached(tracks[i].uri)).withContext("track ".concat(i)).toBe(expected)}}player.load.apply(player,_toConsumableArray(tracks));expectCached([0,1,2,3]);player.next();expectCached([0,1,2,3,4]);player.next();expectCached([1,2,3,4,5]);player.next();expectCached([2,3,4,5,6]);player.next();expectCached([2,3,4,5,6])});it("moves to the next track on ended",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1958
|
-
describe("hls integ",function(){var playlist=[{type:"hls",uri:vinylTestAssets.hls.live_static_video_60s_2s_mpegts},{type:"hls",uri:vinylTestAssets.hls.live_static_video_audio_60s_4s_mpegts},{type:"hls",uri:vinylTestAssets.hls.live_static_aac_60s_mpegts},{type:"hls",uri:vinylTestAssets.hls.live_static_aac_opus_flac_60s}];var suite=createVinylSuite({},{timeout:180});beforeEach(function(){if(!supportsMse())pending("MSE not supported")});it("plays",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1959
|
-
var ART19_VIDEO_PODCAST="https://manifest.video-content.art19.com/v1/master/72cdbbd9feb362206e4a78c4cf329b96a870550b/art19-video/episodes/383bfc80-7df0-4927-b0f8-0fa2b9f74a7a/video_versions/e56fbc14-5430-4203-afe7-158b3d9ab044/s/ecc6db96-b528-5642-a083-3b4ebe3a879d/video/954bcfab-9317-4f9c-b7f5-ed4031e22a35.m3u8?playerParams.rss_browser=BAhJIgtBbWF6b24GOgZFVA%3D%3D--1c4f96a4b4fa601c7d329c970a4631ae9ec066f3&playerParams.asid=ecc6db96-b528-5642-a083-3b4ebe3a879d";describe("hls EXT-X-DEFINE integ",function(){var playlist=[{type:"hls",uri:ART19_VIDEO_PODCAST}];var suite=createVinylSuite({},{timeout:180});beforeEach(function(){if(!supportsMse())pending("MSE not supported")});it("plays a manifest whose URIs are EXT-X-DEFINE templates",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1960
|
-
describe("dash video with segmentTemplate integ",function(){var playlist=[{type:"dash",uri:vinylTestAssets.dash.live_static_video_audio_60s_2s_segmentTemplate}];var suite=createVinylSuite();beforeEach(function(){if(!supportsMse())pending("MSE not supported")});it("plays",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1961
|
-
describe("dash with segmentBase integ",function(){var playlist=[{type:"dash",uri:vinylTestAssets.dash.live_static_aac_opus_flac_60s_segmentBase}];var suite=createVinylSuite();beforeEach(function(){if(!supportsMse())pending("MSE not supported")});it("plays",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1962
|
-
describe("uhd integ",function(){var ForceUhdCapabilities=/*#__PURE__*/function(_CapabilitiesImpl){function ForceUhdCapabilities(){_classCallCheck(this,ForceUhdCapabilities);return _callSuper(this,ForceUhdCapabilities,arguments)}_inherits(ForceUhdCapabilities,_CapabilitiesImpl);return _createClass(ForceUhdCapabilities,[{key:"sampleRate",get:function get(){if(hasBrowser("Chromium"/* CHROMIUM */)){return Number.MAX_VALUE}else{return _superPropGet(ForceUhdCapabilities,"sampleRate",this,1)}}}])}(CapabilitiesImpl);var suite=new VinylSuite(function(){return createVinylPlayer({media:mediaRef.value},{capabilities:function capabilities(deps){return new ForceUhdCapabilities(deps)}})});suite.init();var playlist=[{type:"dash",uri:"https://assets.dev.vinyl.music.amazon.dev/dash/world___bpm85/manifest.mpd"}];beforeEach(function(){if(!suite.player.capabilities.canPlayTypeMse("flac")){pending("flac not supported")}});it("plays",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1963
|
-
describe("seeking integ",function(){var suite=createVinylSuite();var player;var trackSuites=[{description:"dash with segmentBase",track:{type:"dash",uri:vinylTestAssets.dash.live_static_aac_opus_flac_60s_segmentBase}}];function addWhenSeekingRapidlyTests(){describe("when seeking rapidly",function(){it("the last seek should be honored",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1964
|
-
var pendingIfWidevineNotSupported=memoize(/*#__PURE__*/function(){var
|
|
1965
|
-
var playbackTime=5;describe("reset integ",function(){overrideGlobalInit(requesterWithRetryRef,function(){var requester=createRequester({retryOptions:RetryStrategy.ONE_RETRY});var originalRequest=requester.request.bind(requester);spyOn(requester,"request").and.callFake(/*#__PURE__*/function(){var
|
|
1955
|
+
describe("CapabilitiesImpl",function(){var media;var capabilities;var drmController;beforeEach(function(){media=new MockHTMLAudioElement;drmController=new MockDrmController;capabilities=new CapabilitiesImpl({media:media,drmController:drmController})});describe("mse",function(){it("returns supportsMse",function(){expect(capabilities.mse).toBe(supportsMse())})});describe("eme",function(){it("returns drmController.isEmeSupported",function(){drmController.isEmeSupported.and.returnValue(true);expect(capabilities.eme).toBeTrue();drmController.isEmeSupported.and.returnValue(false);expect(capabilities.eme).toBeFalse()})});describe("dash",function(){it("returns truthy result from canPlayType 'application/dash+xml'",function(){media.canPlayType.and.callFake(function(type){if(type==="application/dash+xml")return"probably";else return""});expect(capabilities.dash).toBe(true);media.canPlayType.and.returnValue("");expect(capabilities.dash).toBe(false)})});describe("hls",function(){it("returns truthy result from canPlayType 'application/vnd.apple.mpegurl'",function(){media.canPlayType.and.callFake(function(type){if(type==="application/vnd.apple.mpegurl")return"maybe";else return""});expect(capabilities.hls).toBe(true);media.canPlayType.and.returnValue("");expect(capabilities.hls).toBe(false)})});describe("sampleRate",function(){describe("when audio context is supported",function(){var mockAudioContextRef=overrideGlobalInit(audioContextRef,function(){return new MockAudioContext});it("resolves to the sampleRate reported by the audio context singleton",function(){var mockAudioContext=mockAudioContextRef.value;mockAudioContext.sampleRate=44100;expect(capabilities.sampleRate).toBe(44100);mockAudioContext.sampleRate=48e3;expect(capabilities.sampleRate).toBe(48e3)})});describe("when audio context is not supported",function(){overrideGlobalInit(audioContextRef,function(){return null});it("resolves to null",function(){expect(capabilities.sampleRate).toBe(null)})})});describe("canPlayType",function(){it("returns empty string if HTMLMediaElement.canPlayType is not defined ",function(){media.canPlayType=void 0;expect(capabilities.canPlayType("flac")).toBe("no"/* NO */)});describe("when media returns empty string",function(){it("returns CanPlayTypeResult.NO",function(){media.canPlayType.and.returnValue("");expect(capabilities.canPlayType("flac")).toBe("no"/* NO */)})});describe("when media returns 'probably'",function(){it("returns CanPlayTypeResult.PROBABLY",function(){media.canPlayType.and.returnValue("probably");expect(capabilities.canPlayType("")).toBe("probably"/* PROBABLY */)})});describe("when media returns 'maybe'",function(){it("returns CanPlayTypeResult.MAYBE",function(){media.canPlayType.and.returnValue("maybe");expect(capabilities.canPlayType("")).toBe("maybe"/* MAYBE */)})})});describe("canPlayTypeMse",function(){var originalMediaSource=globalThis.MediaSource;var originalManagedMediaSource=globalThis.ManagedMediaSource;beforeEach(function(){globalThis.MediaSource=MockMediaSourceGlobal;globalThis.ManagedMediaSource=void 0});afterEach(function(){globalThis.MediaSource=originalMediaSource;globalThis.ManagedMediaSource=originalManagedMediaSource;MockMediaSourceGlobal.isTypeSupported.calls.reset()});it("delegates to isTypeSupported",function(){MockMediaSourceGlobal.isTypeSupported.and.returnValues(true,false);expect(capabilities.canPlayTypeMse("flac")).toBeTrue();expect(capabilities.canPlayTypeMse("opus")).toBeFalse()})});describe("supportsKeySystem",function(){it("returns drmController.isSupported with common format and given key system",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee525(){return _regenerator().w(function(_context525){while(1)switch(_context525.n){case 0:drmController.isSupported.and.resolveTo({supported:true,persistentState:false});_context525.n=1;return expectAsync(capabilities.supportsKeySystem("org.w3.clearkey"/* CLEAR_KEY */)).toBeResolvedTo({supported:true,persistentState:false});case 1:drmController.isSupported.and.resolveTo({supported:false,persistentState:false});_context525.n=2;return expectAsync(capabilities.supportsKeySystem("org.w3.clearkey"/* CLEAR_KEY */)).toBeResolvedTo({supported:false,persistentState:false});case 2:return _context525.a(2)}},_callee525)})))})});// test/integ/track/progressive.test.ts
|
|
1956
|
+
describe("progressive integ",function(){var suite=createVinylSuite();it("plays",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee526(){var player;return _regenerator().w(function(_context526){while(1)switch(_context526.n){case 0:player=suite.player;player.load({type:"src",uri:vinylTestAssets.prog.libmp3lame_60s_2ch_16bit_44100Hz_48kbps});_context526.n=1;return player.play();case 1:_context526.n=2;return onDuration(player);case 2:_context526.n=3;return expectTrackPlaysUntil(player,player.currentTime+3);case 3:return _context526.a(2)}},_callee526)})));it("provides the extra property from load config for active track",function(){var _a3;var player=suite.player;player.load({type:"src",uri:vinylTestAssets.prog.libmp3lame_60s_2ch_16bit_44100Hz_48kbps,config:{extra:1}});player.preload({type:"src",uri:vinylTestAssets.prog.libmp3lame_60s_2ch_16bit_44100Hz_48kbps,config:{extra:2}});expect((_a3=player.currentTrack)==null?void 0:_a3.extra).toBe(1);player.load({type:"src",uri:vinylTestAssets.prog.libmp3lame_60s_2ch_16bit_44100Hz_48kbps,config:{extra:2}});var track=player.currentTrack;expect(track==null?void 0:track.extra).toBe(2);player.unload();expect(track==null?void 0:track.extra).toBeNull()})});// test/integ/track/TrackController.test.ts
|
|
1957
|
+
describe("trackController integ",function(){function createLoadOptionsList(count){var loadOptions=[];for(var i=0;i<count;i++){loadOptions.push({type:"src",uri:"".concat(vinylTestAssets.prog.libmp3lame_60s_2ch_16bit_44100Hz_48kbps,"?track=").concat(createShortUid(),"_").concat(i)})}return loadOptions}describe("load",function(){var suite=createVinylSuite({trackController:{preloadCapacity:1,trackPrefetchCount:3}});it("prefetches trackPrefetchCount tracks ahead",function(){var tracks=createLoadOptionsList(7);var player=suite.player;function expectCached(indices){for(var i=0;i<6;i++){var expected=indices.includes(i);expect(player.isTrackCached(tracks[i].uri)).withContext("track ".concat(i)).toBe(expected)}}player.load.apply(player,_toConsumableArray(tracks));expectCached([0,1,2,3]);player.next();expectCached([0,1,2,3,4]);player.next();expectCached([1,2,3,4,5]);player.next();expectCached([2,3,4,5,6]);player.next();expectCached([2,3,4,5,6])});it("moves to the next track on ended",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee527(){var _a3,_b,_c,count,tracks,duration,player,i,nextTrackChange,nextQueueEnded;return _regenerator().w(function(_context527){while(1)switch(_context527.n){case 0:count=3;tracks=createLoadOptionsList(count);duration=60;player=suite.player;player.load.apply(player,_toConsumableArray(tracks));expect((_a3=player.currentTrack)==null?void 0:_a3.uri).toEqual(tracks[0].uri);_context527.n=1;return player.play();case 1:i=0;case 2:if(!(i<count-1)){_context527.n=6;break}nextTrackChange=nextEventAsPromise(player,"currentTrackChange",{timeout:30,timeoutMessage:"currentTrackChange timed out in {time}s"});_context527.n=3;return player.seekTo(duration);case 3:_context527.n=4;return nextTrackChange;case 4:expect((_b=player.currentTrack)==null?void 0:_b.uri).toEqual(tracks[i+1].uri);case 5:i++;_context527.n=2;break;case 6:nextQueueEnded=nextEventAsPromise(player,"queueEnded",{timeout:30,timeoutMessage:"queueEnded timed out in 10s"});_context527.n=7;return player.seekTo(duration);case 7:_context527.n=8;return nextQueueEnded;case 8:expect((_c=player.currentTrack)==null?void 0:_c.uri).toEqual(tracks[count-1].uri);case 9:return _context527.a(2)}},_callee527)})))})});// test/integ/track/hls/hls.test.ts
|
|
1958
|
+
describe("hls integ",function(){var playlist=[{type:"hls",uri:vinylTestAssets.hls.live_static_video_60s_2s_mpegts},{type:"hls",uri:vinylTestAssets.hls.live_static_video_audio_60s_4s_mpegts},{type:"hls",uri:vinylTestAssets.hls.live_static_aac_60s_mpegts},{type:"hls",uri:vinylTestAssets.hls.live_static_aac_opus_flac_60s}];var suite=createVinylSuite({},{timeout:180});beforeEach(function(){if(!supportsMse())pending("MSE not supported")});it("plays",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee528(){return _regenerator().w(function(_context528){while(1)switch(_context528.n){case 0:_context528.n=1;return expectPlaylistPlays(suite.player,playlist);case 1:return _context528.a(2)}},_callee528)})))});// test/integ/track/hls/extXDefine.test.ts
|
|
1959
|
+
var ART19_VIDEO_PODCAST="https://manifest.video-content.art19.com/v1/master/72cdbbd9feb362206e4a78c4cf329b96a870550b/art19-video/episodes/383bfc80-7df0-4927-b0f8-0fa2b9f74a7a/video_versions/e56fbc14-5430-4203-afe7-158b3d9ab044/s/ecc6db96-b528-5642-a083-3b4ebe3a879d/video/954bcfab-9317-4f9c-b7f5-ed4031e22a35.m3u8?playerParams.rss_browser=BAhJIgtBbWF6b24GOgZFVA%3D%3D--1c4f96a4b4fa601c7d329c970a4631ae9ec066f3&playerParams.asid=ecc6db96-b528-5642-a083-3b4ebe3a879d";describe("hls EXT-X-DEFINE integ",function(){var playlist=[{type:"hls",uri:ART19_VIDEO_PODCAST}];var suite=createVinylSuite({},{timeout:180});beforeEach(function(){if(!supportsMse())pending("MSE not supported")});it("plays a manifest whose URIs are EXT-X-DEFINE templates",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee529(){return _regenerator().w(function(_context529){while(1)switch(_context529.n){case 0:_context529.n=1;return expectPlaylistPlays(suite.player,playlist);case 1:return _context529.a(2)}},_callee529)})))});// test/integ/track/dash/liveStaticSegmentTemplate.test.ts
|
|
1960
|
+
describe("dash video with segmentTemplate integ",function(){var playlist=[{type:"dash",uri:vinylTestAssets.dash.live_static_video_audio_60s_2s_segmentTemplate}];var suite=createVinylSuite();beforeEach(function(){if(!supportsMse())pending("MSE not supported")});it("plays",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee530(){return _regenerator().w(function(_context530){while(1)switch(_context530.n){case 0:_context530.n=1;return expectPlaylistPlays(suite.player,playlist);case 1:return _context530.a(2)}},_callee530)})))});// test/integ/track/dash/liveStaticSegmentBase.test.ts
|
|
1961
|
+
describe("dash with segmentBase integ",function(){var playlist=[{type:"dash",uri:vinylTestAssets.dash.live_static_aac_opus_flac_60s_segmentBase}];var suite=createVinylSuite();beforeEach(function(){if(!supportsMse())pending("MSE not supported")});it("plays",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee531(){return _regenerator().w(function(_context531){while(1)switch(_context531.n){case 0:_context531.n=1;return expectPlaylistPlays(suite.player,playlist);case 1:return _context531.a(2)}},_callee531)})))});// test/integ/track/dash/Uhd.test.ts
|
|
1962
|
+
describe("uhd integ",function(){var ForceUhdCapabilities=/*#__PURE__*/function(_CapabilitiesImpl){function ForceUhdCapabilities(){_classCallCheck(this,ForceUhdCapabilities);return _callSuper(this,ForceUhdCapabilities,arguments)}_inherits(ForceUhdCapabilities,_CapabilitiesImpl);return _createClass(ForceUhdCapabilities,[{key:"sampleRate",get:function get(){if(hasBrowser("Chromium"/* CHROMIUM */)){return Number.MAX_VALUE}else{return _superPropGet(ForceUhdCapabilities,"sampleRate",this,1)}}}])}(CapabilitiesImpl);var suite=new VinylSuite(function(){return createVinylPlayer({media:mediaRef.value},{capabilities:function capabilities(deps){return new ForceUhdCapabilities(deps)}})});suite.init();var playlist=[{type:"dash",uri:"https://assets.dev.vinyl.music.amazon.dev/dash/world___bpm85/manifest.mpd"}];beforeEach(function(){if(!suite.player.capabilities.canPlayTypeMse("flac")){pending("flac not supported")}});it("plays",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee532(){var _a3,player;return _regenerator().w(function(_context532){while(1)switch(_context532.n){case 0:player=suite.player;player.load.apply(player,playlist);_context532.n=1;return player.play();case 1:if(hasBrowser("Chromium"/* CHROMIUM */)){expect((_a3=player.getPlaybackQuality("audio"))==null?void 0:_a3.audioSamplingRate).toBe([192e3,192e3])}_context532.n=2;return _sleep(25);case 2:expect(player.currentTime).toBeGreaterThan(20);_context532.n=3;return player.seekTo(player.duration-3);case 3:_context532.n=4;return onEnded(player);case 4:expect(player.currentTime).withContext("currentTime ends near duration").toBeCloseToWithin(player.duration,3);case 5:return _context532.a(2)}},_callee532)})))});// test/integ/playback/seeking.test.ts
|
|
1963
|
+
describe("seeking integ",function(){var suite=createVinylSuite();var player;var trackSuites=[{description:"dash with segmentBase",track:{type:"dash",uri:vinylTestAssets.dash.live_static_aac_opus_flac_60s_segmentBase}}];function addWhenSeekingRapidlyTests(){describe("when seeking rapidly",function(){it("the last seek should be honored",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee533(){var promises,FINAL,TOLERANCE,finalPromise;return _regenerator().w(function(_context533){while(1)switch(_context533.n){case 0:promises=[];promises.push(player.seekTo(12));promises.push(player.seekTo(15));promises.push(player.seekTo(15.1));promises.push(player.seekTo(30));promises.push(player.seekTo(30.5));promises.push(player.seekTo(5));promises.push(player.seekTo(25));FINAL=50;TOLERANCE=1;finalPromise=player.seekTo(FINAL);_context533.n=1;return Promise.all(promises);case 1:_context533.n=2;return finalPromise;case 2:expect(player.currentTime).toBeCloseToWithin(FINAL,TOLERANCE);if(player.paused){_context533.n=3;break}_context533.n=3;return assertFrequency();case 3:return _context533.a(2)}},_callee533)})))})}beforeEach(function(){player=suite.player});var _loop14=function _loop14(){var trackSuite=_trackSuites[_i38];describe(trackSuite.description,function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee534(){var _t42;return _regenerator().w(function(_context534){while(1)switch(_context534.p=_context534.n){case 0:_context534.p=0;player.load(trackSuite.track);_context534.n=4;break;case 1:_context534.p=1;_t42=_context534.v;if(!(_t42 instanceof MediaUnsupportedError)){_context534.n=2;break}pending("Track type not supported");_context534.n=3;break;case 2:throw _t42;case 3:return _context534.a(2);case 4:_context534.n=5;return player.play();case 5:return _context534.a(2)}},_callee534,null,[[0,1]])})));describe("when playing",function(){it("can seek to a time",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee535(){return _regenerator().w(function(_context535){while(1)switch(_context535.n){case 0:expect(player.paused).withContext("paused").toBeFalse();expect(player.playing).withContext("playing").toBeTrue();_context535.n=1;return expectTrackCanSeekTo(player,10);case 1:_context535.n=2;return expectTrackCanSeekTo(player,20);case 2:_context535.n=3;return expectTrackCanSeekTo(player,5);case 3:_context535.n=4;return expectTrackCanSeekTo(player,0);case 4:return _context535.a(2)}},_callee535)})));it("clamps when seeking to beyond duration",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee536(){return _regenerator().w(function(_context536){while(1)switch(_context536.n){case 0:_context536.n=1;return expectTrackCanSeekTo(player,999);case 1:return _context536.a(2)}},_callee536)})));addWhenSeekingRapidlyTests()});describe("when paused",function(){beforeEach(function(){player.pause()});it("can seek to a time",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee537(){return _regenerator().w(function(_context537){while(1)switch(_context537.n){case 0:_context537.n=1;return expectTrackCanSeekTo(player,12);case 1:_context537.n=2;return expectTrackCanSeekTo(player,25);case 2:_context537.n=3;return expectTrackCanSeekTo(player,7);case 3:_context537.n=4;return expectTrackCanSeekTo(player,0);case 4:return _context537.a(2)}},_callee537)})));it("clamps when seeking to beyond duration",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee538(){return _regenerator().w(function(_context538){while(1)switch(_context538.n){case 0:_context538.n=1;return expectTrackCanSeekTo(player,999);case 1:return _context538.a(2)}},_callee538)})));addWhenSeekingRapidlyTests()});describe("when track is segmented",function(){beforeEach(function(){if(trackSuite.track.type!=="dash")pending("not segmented")});it("can seek close to end and start of segment boundaries",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee539(){return _regenerator().w(function(_context539){while(1)switch(_context539.n){case 0:_context539.n=1;return expectTrackCanSeekTo(player,39.9);case 1:_context539.n=2;return expectTrackCanSeekTo(player,59.99);case 2:_context539.n=3;return expectTrackCanSeekTo(player,30.01);case 3:_context539.n=4;return expectTrackCanSeekTo(player,9.999);case 4:return _context539.a(2)}},_callee539)})));it("no-ops seeks when time is close to currentTime",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee540(){return _regenerator().w(function(_context540){while(1)switch(_context540.n){case 0:_context540.n=1;return expectTrackCanSeekTo(player,39.9);case 1:_context540.n=2;return expectTrackCanSeekTo(player,40.1);case 2:_context540.n=3;return expectTrackCanSeekTo(player,40);case 3:return _context540.a(2)}},_callee540)})))});describe("after track ends",function(){it("can seek back to beginning",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee541(){var nextEnded;return _regenerator().w(function(_context541){while(1)switch(_context541.n){case 0:nextEnded=nextEventAsPromise(player,"ended");_context541.n=1;return expectTrackCanSeekTo(player,999);case 1:_context541.n=2;return nextEnded;case 2:_context541.n=3;return expectTrackCanSeekTo(player,0);case 3:_context541.n=4;return expectTrackCanSeekTo(player,5);case 4:return _context541.a(2)}},_callee541)})));it("can continue seeking",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee542(){var nextEnded;return _regenerator().w(function(_context542){while(1)switch(_context542.n){case 0:nextEnded=nextEventAsPromise(player,"ended");_context542.n=1;return expectTrackCanSeekTo(player,999);case 1:_context542.n=2;return nextEnded;case 2:_context542.n=3;return expectTrackCanSeekTo(player,0);case 3:_context542.n=4;return expectTrackCanSeekTo(player,5);case 4:_context542.n=5;return expectTrackCanSeekTo(player,15);case 5:_context542.n=6;return expectTrackCanSeekTo(player,35);case 6:_context542.n=7;return expectTrackCanSeekTo(player,999);case 7:_context542.n=8;return nextEnded;case 8:return _context542.a(2)}},_callee542)})))})})};for(var _i38=0,_trackSuites=trackSuites;_i38<_trackSuites.length;_i38++){_loop14()}});// test/integ/drm/pendingIfWidevineNotSupported.ts
|
|
1964
|
+
var pendingIfWidevineNotSupported=memoize(/*#__PURE__*/function(){var _ref500=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee543(player){var response,_t43;return _regenerator().w(function(_context543){while(1)switch(_context543.p=_context543.n){case 0:_context543.p=0;_context543.n=1;return fetch("https://cwip-shaka-proxy.appspot.com/no_auth",{method:"OPTIONS",mode:"cors"});case 1:response=_context543.v;if(response.ok){_context543.n=2;break}pending("shaka proxy rejected CORS");return _context543.a(2);case 2:_context543.n=4;break;case 3:_context543.p=3;_t43=_context543.v;pending("shaka proxy could not be reached");return _context543.a(2);case 4:if(!(location.hostname!=="localhost")){_context543.n=5;break}pending("shaka-proxy requires localhost");return _context543.a(2);case 5:if(window.isSecureContext){_context543.n=6;break}pending("requires a secure context");return _context543.a(2);case 6:_context543.n=7;return player.client.capabilities.supportsKeySystem("com.widevine.alpha"/* WIDEVINE */);case 7:if(_context543.v.supported){_context543.n=8;break}pending("requires Widevine");case 8:return _context543.a(2)}},_callee543,null,[[0,3]])}));return function(_x93){return _ref500.apply(this,arguments)}}(),function(){});// test/integ/playback/reset.test.ts
|
|
1965
|
+
var playbackTime=5;describe("reset integ",function(){overrideGlobalInit(requesterWithRetryRef,function(){var requester=createRequester({retryOptions:RetryStrategy.ONE_RETRY});var originalRequest=requester.request.bind(requester);spyOn(requester,"request").and.callFake(/*#__PURE__*/function(){var _ref501=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee544(input,init,requestOptions){return _regenerator().w(function(_context544){while(1)switch(_context544.n){case 0:if(requestGate(input,init,requestOptions)){_context544.n=2;break}_context544.n=1;return _sleep(0.1);case 1:throw new RequestError(null,{ok:false,type:"internal"/* INTERNAL */,willRetry:false,retryAfter:null,reason:null,timestamp:Date.now(),requestInfo:__spreadProps(__spreadValues({},emptyRequestInfo),{init:init!=null?init:emptyRequestInfo.init,input:input})});case 2:return _context544.a(2,originalRequest(input,init,requestOptions))}},_callee544)}));return function(_x94,_x95,_x96){return _ref501.apply(this,arguments)}}());return requester});var mockNetworkState;var mockNetworkStateRef=overrideGlobalInit(networkState,function(){return new MockNetworkState});var suite=createVinylSuite({drm:{keySystems:_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{licenseServer:{url:"https://cwip-shaka-proxy.appspot.com/no_auth"}})}},{// Do not fail the suite on caught errors, this suite tests failures
|
|
1966
1966
|
failOnError:false});var player;var errorSpy;var resetSpy;var fetchedRangesChangeSpy;var requestGate;var failNext;beforeEach(function(){mockNetworkState=mockNetworkStateRef.value;mockNetworkState.onLine=true;failNext=false;requestGate=function requestGate(){if(failNext){failNext=false;return false}return true};player=suite.player;errorSpy=createEventSpy(player,"error");resetSpy=createEventSpy(player,"reset");fetchedRangesChangeSpy=createEventSpy(player,"fetchedRangesChange");player.configure({abr:{// These tests aren't relevant to ABR, save bandwidth:
|
|
1967
|
-
strategy:"lowest"/* LOWEST */}})});describe("on dash tracks",function(){beforeEach(function(){if(!supportsMse()){pending("MSE not supported");return}});function loadDash(){player.load({type:"dash",uri:vinylTestAssets.dash.live_static_aac_opus_flac_60s_segmentBase})}it("recovers from failed segment prefetch",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1967
|
+
strategy:"lowest"/* LOWEST */}})});describe("on dash tracks",function(){beforeEach(function(){if(!supportsMse()){pending("MSE not supported");return}});function loadDash(){player.load({type:"dash",uri:vinylTestAssets.dash.live_static_aac_opus_flac_60s_segmentBase})}it("recovers from failed segment prefetch",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee545(){var playPromise,seekToTime;return _regenerator().w(function(_context545){while(1)switch(_context545.n){case 0:loadDash();playPromise=player.play();case 1:if(!(player.fetchedTime<29)){_context545.n=3;break}_context545.n=2;return fetchedRangesChangeSpy.next(15);case 2:_context545.n=1;break;case 3:failNext=true;_context545.n=4;return playPromise;case 4:_context545.n=5;return _sleep(3);case 5:expect(player.fetchedTime).toBeLessThan(31);seekToTime=32;player.seekTo(seekToTime)["catch"](noop);_context545.n=6;return expectTrackPlaysUntil(player,seekToTime+playbackTime);case 6:expect(errorSpy).withContext("prefetch failures should not cause player errors").not.toHaveBeenCalled();case 7:return _context545.a(2)}},_callee545)})));var requestOrderFailures=[{label:"manifest",contentLengthRange:void 0},{label:"sidx segment",contentLengthRange:[50,400]},{label:"index segment",contentLengthRange:[700,2e3]// ~1KiB
|
|
1968
1968
|
},{label:"media segment",contentLengthRange:[2e4,Infinity]// ~60KiB
|
|
1969
|
-
}];var _loop15=function _loop15(){var _requestOrderFailures=requestOrderFailures[i],label=_requestOrderFailures.label,contentLengthRange=_requestOrderFailures.contentLengthRange;it("recovers next onLine for ".concat(label," errors"),/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1970
|
-
describe("pause integ",function(){var suite=createVinylSuite();var player;var pauseSpy;var playSpy;var playRejectedSpy;var playingSpy;beforeEach(function(){player=suite.player;pauseSpy=createEventSpy(player,"pause");playSpy=createEventSpy(player,"play");playRejectedSpy=createEventSpy(player,"playRejected");playingSpy=createEventSpy(player,"playing")});function runPauseScenario(){return _runPauseScenario.apply(this,arguments)}function _runPauseScenario(){_runPauseScenario=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1971
|
-
describe("PlaybackControllerImpl integ",function(){var media;var controller;var originalMuted;setTestTimeout(25);beforeEach(function(){media=mediaRef.value;originalMuted=media.muted;if(!media.muted){media.muted=true}controller=new PlaybackControllerImpl({media:media,loudnessNormalizationController:new MockLoudnessNormalizationController})});afterEach(function(){media.muted=originalMuted;controller.dispose()});describe("mutedChange",function(){it("emits when muted value has changed",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1972
|
-
describe("requiresPreventCacheRangeRequestsPatch integ",function(){function canReproduce(_x97){return _canReproduce.apply(this,arguments)}function _canReproduce(){_canReproduce=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1973
|
-
describe("unreliablePlaybackEventsPatch integ",function(){setTestTimeout(25);function canReproduce(_x98){return _canReproduce2.apply(this,arguments)}function _canReproduce2(){_canReproduce2=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1974
|
-
describe("waiting integ",function(){beforeEach(function(){if(!supportsMse())pending("MSE not supported")});var suite=createVinylSuite();describe("when playback is stopped due to lack of data",function(){it("emits waiting event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1975
|
-
var any32=jasmine.any;var PLAYBACK_TIME=2;describe("integ playing and played events",function(){var suite=createVinylSuite();var player;var playingSpy;var playSpy;var playedSpy;beforeEach(function(){player=suite.player;playingSpy=createEventSpy(player,"playing");playSpy=createEventSpy(player,"play");playedSpy=createEventSpy(player,"played")});function play(){return _play.apply(this,arguments)}function _play(){_play=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1969
|
+
}];var _loop15=function _loop15(){var _requestOrderFailures=requestOrderFailures[i],label=_requestOrderFailures.label,contentLengthRange=_requestOrderFailures.contentLengthRange;it("recovers next onLine for ".concat(label," errors"),/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee548(){var nextError,playPromise,nextReset;return _regenerator().w(function(_context548){while(1)switch(_context548.n){case 0:requestGate=function requestGate(_,init){var _a3;var headers=normalizeHeadersInit((_a3=init==null?void 0:init.headers)!=null?_a3:{});var rangeHeader=headers.Range;if(!rangeHeader)return!!contentLengthRange;if(!contentLengthRange)return true;var _rangeHeader$slice$sp=rangeHeader.slice(6).split("-").map(Number),_rangeHeader$slice$sp2=_slicedToArray(_rangeHeader$slice$sp,2),start=_rangeHeader$slice$sp2[0],end=_rangeHeader$slice$sp2[1];var contentLength=end-start+1;return contentLength<contentLengthRange[0]||contentLength>contentLengthRange[1]};nextError=errorSpy.next(30);loadDash();playPromise=player.play();_context548.n=1;return nextError;case 1:requestGate=function requestGate(){return true};nextReset=resetSpy.next(1);mockNetworkState.dispatch("online",mockEvent("online"));_context548.n=2;return nextReset;case 2:_context548.n=3;return playPromise;case 3:_context548.n=4;return expectTrackPlaysUntil(player,playbackTime);case 4:return _context548.a(2)}},_callee548)})))};for(var i=0;i<requestOrderFailures.length;i++){_loop15()}describe("when encrypted",function(){beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee546(){return _regenerator().w(function(_context546){while(1)switch(_context546.n){case 0:_context546.n=1;return pendingIfWidevineNotSupported(player);case 1:return _context546.a(2)}},_callee546)})));it("recovers from failed license requests",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee547(){var nextError,licenseAttempt,playPromise,nextReset;return _regenerator().w(function(_context547){while(1)switch(_context547.n){case 0:nextError=errorSpy.next(30);licenseAttempt=0;requestGate=function requestGate(input){if(typeof input==="string"&&input==="https://cwip-shaka-proxy.appspot.com/no_auth"){return licenseAttempt++>0}return true};player.load({type:"dash",uri:vinylTestAssets.dash.live_static_aac_opus_flac_60s_segmentBase_widevine});playPromise=player.play();_context547.n=1;return nextError;case 1:nextReset=resetSpy.next(1);mockNetworkState.dispatch("online",mockEvent("online"));_context547.n=2;return nextReset;case 2:_context547.n=3;return playPromise;case 3:_context547.n=4;return expectTrackPlaysUntil(player,playbackTime);case 4:return _context547.a(2)}},_callee547)})))})})});// test/integ/playback/pause.test.ts
|
|
1970
|
+
describe("pause integ",function(){var suite=createVinylSuite();var player;var pauseSpy;var playSpy;var playRejectedSpy;var playingSpy;beforeEach(function(){player=suite.player;pauseSpy=createEventSpy(player,"pause");playSpy=createEventSpy(player,"play");playRejectedSpy=createEventSpy(player,"playRejected");playingSpy=createEventSpy(player,"playing")});function runPauseScenario(){return _runPauseScenario.apply(this,arguments)}function _runPauseScenario(){_runPauseScenario=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee550(){var expectedEventPromise;return _regenerator().w(function(_context550){while(1)switch(_context550.n){case 0:expectedEventPromise=player.playIsPending?playRejectedSpy.next(1):pauseSpy.next(1);player.pause();_context550.n=1;return expectedEventPromise;case 1:expectPausedState(player);_context550.n=2;return expectTimeDoesNotElapse(player);case 2:return _context550.a(2)}},_callee550)}));return _runPauseScenario.apply(this,arguments)}function runPlayingScenario(){return _runPlayingScenario.apply(this,arguments)}function _runPlayingScenario(){_runPlayingScenario=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee551(){var nextPlay,nextPlaying,playPromise;return _regenerator().w(function(_context551){while(1)switch(_context551.n){case 0:nextPlay=playSpy.next(10);nextPlaying=playingSpy.next(10);playPromise=player.play();expectPendingPlaying(player);_context551.n=1;return nextPlay;case 1:_context551.n=2;return playPromise;case 2:_context551.n=3;return nextPlaying;case 3:expectPlayingState(player);_context551.n=4;return expectTimeElapses(player);case 4:return _context551.a(2)}},_callee551)}));return _runPlayingScenario.apply(this,arguments)}it("can pause when playing",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee549(){return _regenerator().w(function(_context549){while(1)switch(_context549.n){case 0:expect(player.paused).withContext("initial paused").toBeTrue();player.load({type:"src",uri:vinylTestAssets.prog.libmp3lame_60s_2ch_16bit_44100Hz_48kbps});player.play()["catch"](noop);expectPendingPlaying(player);_context549.n=1;return runPauseScenario();case 1:_context549.n=2;return runPlayingScenario();case 2:_context549.n=3;return runPauseScenario();case 3:_context549.n=4;return runPlayingScenario();case 4:_context549.n=5;return runPauseScenario();case 5:return _context549.a(2)}},_callee549)})))});// test/integ/playback/PlaybackControllerImpl.test.ts
|
|
1971
|
+
describe("PlaybackControllerImpl integ",function(){var media;var controller;var originalMuted;setTestTimeout(25);beforeEach(function(){media=mediaRef.value;originalMuted=media.muted;if(!media.muted){media.muted=true}controller=new PlaybackControllerImpl({media:media,loudnessNormalizationController:new MockLoudnessNormalizationController})});afterEach(function(){media.muted=originalMuted;controller.dispose()});describe("mutedChange",function(){it("emits when muted value has changed",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee552(){var mutedChangeSpy,next;return _regenerator().w(function(_context552){while(1)switch(_context552.n){case 0:mutedChangeSpy=createEventSpy(controller,"mutedChange");media.src=vinylTestAssets.prog.libmp3lame_60s_2ch_16bit_44100Hz_48kbps;_context552.n=1;return nextHasMetadata(controller);case 1:next=mutedChangeSpy.next();media.muted=false;_context552.n=2;return expectAsync(next).toBeResolvedTo({previous:true,current:false});case 2:next=mutedChangeSpy.next();media.muted=true;_context552.n=3;return expectAsync(next).toBeResolvedTo({previous:false,current:true});case 3:return _context552.a(2)}},_callee552)})))})});// test/integ/patch/network/fetch.test.ts
|
|
1972
|
+
describe("requiresPreventCacheRangeRequestsPatch integ",function(){function canReproduce(_x97){return _canReproduce.apply(this,arguments)}function _canReproduce(){_canReproduce=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee553(fetch2){var cacheBust,i,_i39,_arr5,range,_t44;return _regenerator().w(function(_context553){while(1)switch(_context553.p=_context553.n){case 0:cacheBust=createShortUid();i=0;case 1:if(!(i<2)){_context553.n=8;break}_i39=0,_arr5=["826-929","0-825","930-50160"];case 2:if(!(_i39<_arr5.length)){_context553.n=7;break}range=_arr5[_i39];_context553.p=3;_context553.n=4;return fetch2(vinylTestAssets.prog.libmp3lame_60s_2ch_16bit_44100Hz_48kbps+"?cache=".concat(cacheBust),{headers:{Range:"bytes=".concat(range)}});case 4:_context553.n=6;break;case 5:_context553.p=5;_t44=_context553.v;if(!(_t44 instanceof TypeError)){_context553.n=6;break}return _context553.a(2,true);case 6:_i39++;_context553.n=2;break;case 7:i++;_context553.n=1;break;case 8:return _context553.a(2,false)}},_callee553,null,[[3,5]])}));return _canReproduce.apply(this,arguments)}addPatchTests("requiresPreventCacheRangeRequestsPatch","ensures range requests are reliable",function(){return{target:window.fetch,canReproduce:canReproduce,actualFlag:requiresPreventCacheRangeRequestsPatch(),patchedRef:{patched:patchFetch(window.fetch),eventFabricated:emptySignal,eventSquelched:emptySignal,dispose:function dispose(){}},allowFalseNegative:true}})});// test/integ/patch/media/patches/createUnreliablePlaybackEventsPatch.test.ts
|
|
1973
|
+
describe("unreliablePlaybackEventsPatch integ",function(){setTestTimeout(25);function canReproduce(_x98){return _canReproduce2.apply(this,arguments)}function _canReproduce2(){_canReproduce2=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee554(media){var domEvents,result,_t45;return _regenerator().w(function(_context554){while(1)switch(_context554.n){case 0:domEvents=new DomEventHost(media);_context554.n=1;return runWaitingScenarios(media,domEvents);case 1:_t45=_context554.v;if(_t45){_context554.n=3;break}_context554.n=2;return runPlayingScenarios(media,domEvents);case 2:_t45=_context554.v;case 3:result=_t45;domEvents.dispose();return _context554.a(2,result)}},_callee554)}));return _canReproduce2.apply(this,arguments)}function runWaitingScenarios(_x99,_x100){return _runWaitingScenarios.apply(this,arguments)}function _runWaitingScenarios(){_runWaitingScenarios=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee555(media,domEvents){var waitingSpy,nextWaiting,mediaSource,loadedMetadataSpy,nextLoadedMetadata,_t46;return _regenerator().w(function(_context555){while(1)switch(_context555.n){case 0:if(supportsMse()){_context555.n=1;break}return _context555.a(2,false);case 1:waitingSpy=createEventSpy(domEvents,"waiting");nextWaiting=waitingSpy.next(7)["catch"](noop);mediaSource=new ControlledMediaSource;loadedMetadataSpy=createEventSpy(domEvents,"loadedmetadata");nextLoadedMetadata=loadedMetadataSpy.next(10);_t46=URL;_context555.n=2;return mediaSource.getMediaSource();case 2:media.src=_t46.createObjectURL.call(_t46,_context555.v);_context555.n=3;return mediaSource.appendNext();case 3:_context555.n=4;return nextLoadedMetadata;case 4:void media.play();_context555.n=5;return nextWaiting;case 5:if(waitingSpy.calls.any()){_context555.n=6;break}return _context555.a(2,true);case 6:_context555.n=7;return mediaSource.appendNext();case 7:media.currentTime=7;_context555.n=8;return nextEventAsPromise(domEvents,"timeupdate",{filter:function filter(){return media.currentTime>9.5}});case 8:waitingSpy.calls.reset();_context555.n=9;return waitingSpy.next(5)["catch"](noop);case 9:if(waitingSpy.calls.any()){_context555.n=10;break}return _context555.a(2,true);case 10:waitingSpy.calls.reset();_context555.n=11;return mediaSource.appendNext();case 11:_context555.n=12;return nextEventAsPromise(domEvents,"timeupdate");case 12:expect(waitingSpy).not.toHaveBeenCalled();nextWaiting=waitingSpy.next(5)["catch"](noop);media.currentTime=40;_context555.n=13;return nextWaiting;case 13:media.removeAttribute("src");media.load();return _context555.a(2,!waitingSpy.calls.any())}},_callee555)}));return _runWaitingScenarios.apply(this,arguments)}function runPlayingScenarios(_x101,_x102){return _runPlayingScenarios.apply(this,arguments)}function _runPlayingScenarios(){_runPlayingScenarios=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee556(media,domEvents){var canReproduce2,_t47;return _regenerator().w(function(_context556){while(1)switch(_context556.p=_context556.n){case 0:media.src=vinylTestAssets.prog.libmp3lame_60s_2ch_16bit_44100Hz_48kbps;_context556.n=1;return withTimeout(media.play(),10,"play timed out");case 1:media.currentTime=15;_context556.p=2;_context556.n=3;return nextEventAsPromise(domEvents,"playing",{timeout:10});case 3:canReproduce2=false;_context556.n=5;break;case 4:_context556.p=4;_t47=_context556.v;canReproduce2=true;case 5:media.removeAttribute("src");media.load();return _context556.a(2,canReproduce2)}},_callee556,null,[[2,4]])}));return _runPlayingScenarios.apply(this,arguments)}addPatchTests("unreliablePlaybackEvents","ensures waiting events are emitted when playback reaches end of buffer",function(){return{target:mediaRef.value,canReproduce:canReproduce,actualFlag:defaultMediaElementPatchOptions.value.unreliablePlaybackEvents,patchedRef:patchMediaElement(mediaRef.value,defaultMediaElementPatchOptions.value),allowFalseNegative:true}})});// test/integ/event/waiting.test.ts
|
|
1974
|
+
describe("waiting integ",function(){beforeEach(function(){if(!supportsMse())pending("MSE not supported")});var suite=createVinylSuite();describe("when playback is stopped due to lack of data",function(){it("emits waiting event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee557(){var player,waitingSpy,waitedSpy,playSpy,mediaSource,nextPlay,nextWaiting,nextWaited,seekPromise,_t48,_t49,_t50;return _regenerator().w(function(_context557){while(1)switch(_context557.n){case 0:player=suite.player;waitingSpy=createEventSpy(player,"waiting");waitedSpy=createEventSpy(player,"waited");playSpy=createEventSpy(player,"play");mediaSource=new ControlledMediaSource;_t48=player;_t49=URL;_context557.n=1;return mediaSource.getMediaSource();case 1:_t50=_t49.createObjectURL.call(_t49,_context557.v);_t48.load.call(_t48,{type:"src",uri:_t50});nextPlay=playSpy.next(5);void player.play();nextWaiting=waitingSpy.next(10,"waiting after play when not buffered");_context557.n=2;return mediaSource.appendNext();case 2:_context557.n=3;return nextPlay;case 3:_context557.n=4;return nextWaiting;case 4:expect(player.waiting).toBeTrue();nextWaited=waitedSpy.next(5,"waited 1 timeout after {timeout}s");_context557.n=5;return mediaSource.appendNext();case 5:_context557.n=6;return nextWaited;case 6:expect(player.waiting).withContext("waiting").toBeFalse();_context557.n=7;return player.seekTo(5);case 7:_context557.n=8;return waitingSpy.next(30,"waiting after hit end of buffer timed out after {timeout}s");case 8:nextWaited=waitedSpy.next(5,"waited after data buffered timed out after {timeout}s");_context557.n=9;return mediaSource.appendNext();case 9:_context557.n=10;return nextWaited;case 10:nextWaiting=nextEventAsPromise(player,"waiting",{timeout:5,timeoutMessage:"waiting after seek to unbuffered region timed out after {time}s"});seekPromise=player.seekTo(22);_context557.n=11;return nextWaiting;case 11:nextWaited=waitedSpy.next(5,"waited after data buffered 2 timed out after {timeout}s");_context557.n=12;return mediaSource.appendNext();case 12:_context557.n=13;return nextWaited;case 13:_context557.n=14;return seekPromise;case 14:return _context557.a(2)}},_callee557)})))})});// test/integ/event/playingAndPlayed.test.ts
|
|
1975
|
+
var any32=jasmine.any;var PLAYBACK_TIME=2;describe("integ playing and played events",function(){var suite=createVinylSuite();var player;var playingSpy;var playSpy;var playedSpy;beforeEach(function(){player=suite.player;playingSpy=createEventSpy(player,"playing");playSpy=createEventSpy(player,"play");playedSpy=createEventSpy(player,"played")});function play(){return _play.apply(this,arguments)}function _play(){_play=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee562(){return _regenerator().w(function(_context562){while(1)switch(_context562.n){case 0:player.load({type:"src",uri:vinylTestAssets.prog.libmp3lame_60s_2ch_16bit_44100Hz_48kbps});_context562.n=1;return player.play();case 1:return _context562.a(2)}},_callee562)}));return _play.apply(this,arguments)}afterEach(function(){suite.player.defaultPlaybackRate=1});describe("when playback is started",function(){it("emits play then playing",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee558(){var nextPlay,nextPlaying;return _regenerator().w(function(_context558){while(1)switch(_context558.n){case 0:nextPlay=playSpy.next(10);nextPlaying=playingSpy.next(10);_context558.n=1;return play();case 1:_context558.n=2;return nextPlay;case 2:_context558.n=3;return nextPlaying;case 3:expect(playSpy).toHaveBeenCalledBefore(playingSpy);case 4:return _context558.a(2)}},_callee558)})));describe("then playback is paused",function(){it("emits played",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee559(){var expectedStarted,nextPlayed,playedEvent;return _regenerator().w(function(_context559){while(1)switch(_context559.n){case 0:player.defaultPlaybackRate=0.5;_context559.n=1;return play();case 1:expectedStarted=Date.now();_context559.n=2;return _sleep(PLAYBACK_TIME);case 2:playingSpy.calls.reset();playedSpy.calls.reset();nextPlayed=playedSpy.next(1);player.pause();_context559.n=3;return nextPlayed;case 3:playedEvent=_context559.v;expect(playedEvent).toEqual({started:any32(Number),reason:"pause"/* PAUSE */,ended:any32(Number),playbackTime:any32(Number),duration:any32(Number)});expect(playedEvent.started).withContext("started").toBeCloseToWithin(expectedStarted,1e3);expect(playedEvent.ended).withContext("ended").toBeCloseToWithin(expectedStarted+PLAYBACK_TIME*1e3,500);expect(playedEvent.duration).withContext("duration").toBeCloseToWithin(PLAYBACK_TIME,0.2);expect(playingSpy).not.toHaveBeenCalled();case 4:return _context559.a(2)}},_callee559)})))});describe("then a seek is requested",function(){it("emits played",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee560(){var nextPlayed,nextPlaying;return _regenerator().w(function(_context560){while(1)switch(_context560.n){case 0:_context560.n=1;return play();case 1:playedSpy.calls.reset();playingSpy.calls.reset();nextPlayed=playedSpy.next(15);nextPlaying=playingSpy.next(15);_context560.n=2;return player.seekTo(20);case 2:_context560.n=3;return expectAsync(nextPlayed).toBeResolvedTo({started:any32(Number),ended:any32(Number),duration:any32(Number),playbackTime:any32(Number),// Firefox may emit the 'waiting' event before the 'seeking'.
|
|
1976
1976
|
// While not ideal, not worth a patch.
|
|
1977
|
-
reason:any32(String)});case 3:
|
|
1978
|
-
describe("looped integ",function(){var suite=createVinylSuite();describe("when playback looped",function(){it("dispatches looped event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1979
|
-
describe("DrmControllerImpl integ",function(){var vinylSuite=createVinylSuite({drm:{keySystems:_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{licenseServer:{url:"https://cwip-shaka-proxy.appspot.com/no_auth"}})}});beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function
|
|
1977
|
+
reason:any32(String)});case 3:_context560.n=4;return expectAsync(nextPlaying).toBeResolved();case 4:expect(playedSpy).toHaveBeenCalledBefore(playingSpy);case 5:return _context560.a(2)}},_callee560)})))})});describe("when seeking while paused",function(){it("does not emit playing",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee561(){var nextPlayed;return _regenerator().w(function(_context561){while(1)switch(_context561.n){case 0:_context561.n=1;return play();case 1:nextPlayed=playedSpy.next();playingSpy.calls.reset();player.pause();_context561.n=2;return player.seekTo(25);case 2:_context561.n=3;return expectAsync(nextPlayed).toBeResolved();case 3:_context561.n=4;return _sleep(0.5);case 4:expect(playingSpy).not.toHaveBeenCalled();case 5:return _context561.a(2)}},_callee561)})))})});// test/integ/event/looped.test.ts
|
|
1978
|
+
describe("looped integ",function(){var suite=createVinylSuite();describe("when playback looped",function(){it("dispatches looped event",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee563(){var player,loopedSpy,endedSpy,nextEnded;return _regenerator().w(function(_context563){while(1)switch(_context563.n){case 0:player=suite.player;player.load({type:"dash",uri:vinylTestAssets.dash.live_static_aac_opus_flac_60s_segmentBase});_context563.n=1;return player.play();case 1:loopedSpy=createEventSpy(player,"looped");endedSpy=createEventSpy(player,"ended");player.loop=true;_context563.n=2;return player.seekTo(player.duration);case 2:expect(loopedSpy).not.toHaveBeenCalled();_context563.n=3;return loopedSpy.next(20,"looped 1 timed out in {timeout}s");case 3:expect(loopedSpy).toHaveBeenCalledTimes(1);loopedSpy.calls.reset();_context563.n=4;return player.seekTo(30);case 4:_context563.n=5;return player.seekTo(0);case 5:expect(loopedSpy).not.toHaveBeenCalled();_context563.n=6;return player.seekTo(player.duration);case 6:_context563.n=7;return loopedSpy.next(20,"looped 2 timed out in {timeout}s");case 7:expect(loopedSpy).toHaveBeenCalledTimes(1);loopedSpy.calls.reset();expect(player.currentTime).toBeLessThan(1);expect(endedSpy).not.toHaveBeenCalled();expect(player.ended).withContext("ended").toBeFalse();player.loop=false;nextEnded=endedSpy.next(20);_context563.n=8;return player.seekTo(player.duration);case 8:_context563.n=9;return expectAsync(nextEnded).toBeResolved();case 9:expect(player.currentTime).toBeGreaterThan(player.duration-0.5);expect(loopedSpy).not.toHaveBeenCalled();expect(player.ended).withContext("ended").toBeTrue();case 10:return _context563.a(2)}},_callee563)})))})});// test/integ/drm/DrmControllerImpl.test.ts
|
|
1979
|
+
describe("DrmControllerImpl integ",function(){var vinylSuite=createVinylSuite({drm:{keySystems:_defineProperty({},"com.widevine.alpha"/* WIDEVINE */,{licenseServer:{url:"https://cwip-shaka-proxy.appspot.com/no_auth"}})}});beforeEach(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee564(){return _regenerator().w(function(_context564){while(1)switch(_context564.n){case 0:_context564.n=1;return pendingIfWidevineNotSupported(vinylSuite.player);case 1:return _context564.a(2)}},_callee564)})));describe("when given dash widevine",function(){it("plays",/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee565(){return _regenerator().w(function(_context565){while(1)switch(_context565.n){case 0:vinylSuite.player.load({type:"dash",uri:vinylTestAssets.dash.live_static_aac_opus_flac_60s_segmentBase_widevine});_context565.n=1;return vinylSuite.player.play();case 1:_context565.n=2;return expectTrackPlays(vinylSuite.player);case 2:return _context565.a(2)}},_callee565)})))})})})();
|