@amazon/vinyl 3.0.1 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (268) hide show
  1. package/dist/index.cjs +1103 -1042
  2. package/dist/index.cjs.map +4 -4
  3. package/dist/index.js +810 -739
  4. package/dist/index.js.map +4 -4
  5. package/dist/test/benchmark.js.map +2 -2
  6. package/dist/test/integ.es5.js +394 -388
  7. package/dist/test/integ.js +2626 -2032
  8. package/dist/test/integ.js.map +4 -4
  9. package/dist/test/jasmine.css +50 -3
  10. package/dist/test/jasmineHtml.es5.js +195 -155
  11. package/dist/test/jasmineHtml.js +2938 -1833
  12. package/dist/test/jasmineHtml.js.map +3 -3
  13. package/dist/types/current/ad/AdControllerImpl.d.ts.map +1 -1
  14. package/dist/types/current/ad/AdControllerImpl.js +4 -1
  15. package/dist/types/current/ad/discoverHlsInterstitials.d.ts.map +1 -1
  16. package/dist/types/current/ad/discoverHlsInterstitials.js +2 -2
  17. package/dist/types/current/drm/DrmControllerImpl.d.ts +19 -1
  18. package/dist/types/current/drm/DrmControllerImpl.d.ts.map +1 -1
  19. package/dist/types/current/drm/DrmControllerImpl.js +101 -58
  20. package/dist/types/current/drm/licenseProvider/defaultLicenseProvider.d.ts.map +1 -1
  21. package/dist/types/current/drm/licenseProvider/defaultLicenseProvider.js +2 -2
  22. package/dist/types/current/index.d.ts +3 -6
  23. package/dist/types/current/index.d.ts.map +1 -1
  24. package/dist/types/current/index.js +3 -6
  25. package/dist/types/current/playback/PlaybackControllerImpl.d.ts +15 -0
  26. package/dist/types/current/playback/PlaybackControllerImpl.d.ts.map +1 -1
  27. package/dist/types/current/playback/PlaybackControllerImpl.js +100 -9
  28. package/dist/types/current/playback/ReadonlyPlaybackController.d.ts +27 -1
  29. package/dist/types/current/playback/ReadonlyPlaybackController.d.ts.map +1 -1
  30. package/dist/types/current/playback/ReadonlyPlaybackController.js +16 -0
  31. package/dist/types/current/playback/createStallDetector.d.ts +43 -0
  32. package/dist/types/current/playback/createStallDetector.d.ts.map +1 -0
  33. package/dist/types/current/playback/createStallDetector.js +101 -0
  34. package/dist/types/current/playback/createStallMonitor.d.ts +45 -0
  35. package/dist/types/current/playback/createStallMonitor.d.ts.map +1 -0
  36. package/dist/types/current/playback/createStallMonitor.js +94 -0
  37. package/dist/types/current/streaming/AudioOptions.d.ts +27 -0
  38. package/dist/types/current/streaming/AudioOptions.d.ts.map +1 -1
  39. package/dist/types/current/streaming/AudioOptions.js +5 -1
  40. package/dist/types/current/streaming/ContentStream.d.ts +0 -5
  41. package/dist/types/current/streaming/ContentStream.d.ts.map +1 -1
  42. package/dist/types/current/streaming/ContentStream.js +0 -4
  43. package/dist/types/current/streaming/LoadMetric.d.ts +15 -1
  44. package/dist/types/current/streaming/LoadMetric.d.ts.map +1 -1
  45. package/dist/types/current/streaming/StreamingEventMap.d.ts +1 -5
  46. package/dist/types/current/streaming/StreamingEventMap.d.ts.map +1 -1
  47. package/dist/types/current/streaming/StreamingEventMap.js +0 -1
  48. package/dist/types/current/streaming/buffering/BufferingController.d.ts +0 -11
  49. package/dist/types/current/streaming/buffering/BufferingController.d.ts.map +1 -1
  50. package/dist/types/current/streaming/buffering/BufferingController.js +0 -13
  51. package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.d.ts.map +1 -1
  52. package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.js +13 -4
  53. package/dist/types/current/streaming/mediaTimelineFilter.d.ts +4 -2
  54. package/dist/types/current/streaming/mediaTimelineFilter.d.ts.map +1 -1
  55. package/dist/types/current/streaming/mediaTimelineFilter.js +23 -8
  56. package/dist/types/current/text/SidecarTextTrackLoader.d.ts.map +1 -1
  57. package/dist/types/current/text/SidecarTextTrackLoader.js +4 -4
  58. package/dist/types/current/text/TextTrack.d.ts.map +1 -1
  59. package/dist/types/current/track/TrackController.d.ts.map +1 -1
  60. package/dist/types/current/track/TrackController.js +8 -2
  61. package/dist/types/current/track/createSegmentDataProvider.d.ts.map +1 -1
  62. package/dist/types/current/track/createSegmentDataProvider.js +6 -3
  63. package/dist/types/current/track/dash/DashMediaQualityMetadataResolver.d.ts +10 -6
  64. package/dist/types/current/track/dash/DashMediaQualityMetadataResolver.d.ts.map +1 -1
  65. package/dist/types/current/track/dash/DashMediaQualityMetadataResolver.js +13 -8
  66. package/dist/types/current/track/dash/createDashFactories.d.ts +1 -1
  67. package/dist/types/current/track/dash/timeline/DashRepresentationSegmentProvider.d.ts.map +1 -1
  68. package/dist/types/current/track/dash/timeline/DashRepresentationSegmentProvider.js +71 -3
  69. package/dist/types/current/track/dash/urlDashManifestProvider.js +2 -2
  70. package/dist/types/current/track/dash/util/mpd.d.ts +6 -0
  71. package/dist/types/current/track/dash/util/mpd.d.ts.map +1 -1
  72. package/dist/types/current/track/dash/util/mpd.js +24 -3
  73. package/dist/types/current/track/filters/resourceTypeFilter.d.ts +4 -0
  74. package/dist/types/current/track/filters/resourceTypeFilter.d.ts.map +1 -1
  75. package/dist/types/current/track/filters/resourceTypeFilter.js +4 -0
  76. package/dist/types/current/track/filters/sampleRateFilter.d.ts +25 -7
  77. package/dist/types/current/track/filters/sampleRateFilter.d.ts.map +1 -1
  78. package/dist/types/current/track/filters/sampleRateFilter.js +52 -24
  79. package/dist/types/current/track/hls/createHlsFactories.d.ts +1 -1
  80. package/dist/types/current/track/hls/createUrlHlsManifestProvider.d.ts.map +1 -1
  81. package/dist/types/current/track/hls/createUrlHlsManifestProvider.js +3 -3
  82. package/dist/types/current/track/mse/MseTrack.d.ts +0 -17
  83. package/dist/types/current/track/mse/MseTrack.d.ts.map +1 -1
  84. package/dist/types/current/track/mse/MseTrack.js +1 -45
  85. package/dist/types/current/tsconfig.tsbuildinfo +1 -1
  86. package/dist/types/current/util/media/mimeType.d.ts +8 -0
  87. package/dist/types/current/util/media/mimeType.d.ts.map +1 -0
  88. package/dist/types/current/util/media/mimeType.js +13 -0
  89. package/dist/types/current/vinyl/VinylPlayer.d.ts +5 -0
  90. package/dist/types/current/vinyl/VinylPlayer.d.ts.map +1 -1
  91. package/dist/types/current/vinyl/VinylPlayer.js +23 -1
  92. package/dist/types/current/vinyl/createVinylFactories.d.ts +7 -16
  93. package/dist/types/current/vinyl/createVinylFactories.d.ts.map +1 -1
  94. package/dist/types/current/vinyl/createVinylFactories.js +2 -12
  95. package/dist/types/ts3.7/drm/DrmControllerImpl.d.ts +19 -1
  96. package/dist/types/ts3.7/index.d.ts +3 -6
  97. package/dist/types/ts3.7/playback/PlaybackControllerImpl.d.ts +15 -0
  98. package/dist/types/ts3.7/playback/ReadonlyPlaybackController.d.ts +28 -0
  99. package/dist/types/ts3.7/playback/createStallDetector.d.ts +43 -0
  100. package/dist/types/ts3.7/playback/createStallMonitor.d.ts +45 -0
  101. package/dist/types/ts3.7/streaming/AudioOptions.d.ts +27 -0
  102. package/dist/types/ts3.7/streaming/ContentStream.d.ts +0 -5
  103. package/dist/types/ts3.7/streaming/LoadMetric.d.ts +15 -1
  104. package/dist/types/ts3.7/streaming/StreamingEventMap.d.ts +0 -5
  105. package/dist/types/ts3.7/streaming/buffering/BufferingController.d.ts +0 -11
  106. package/dist/types/ts3.7/streaming/mediaTimelineFilter.d.ts +4 -2
  107. package/dist/types/ts3.7/track/dash/DashMediaQualityMetadataResolver.d.ts +10 -6
  108. package/dist/types/ts3.7/track/dash/createDashFactories.d.ts +1 -1
  109. package/dist/types/ts3.7/track/dash/util/mpd.d.ts +6 -0
  110. package/dist/types/ts3.7/track/filters/resourceTypeFilter.d.ts +4 -0
  111. package/dist/types/ts3.7/track/filters/sampleRateFilter.d.ts +25 -7
  112. package/dist/types/ts3.7/track/hls/createHlsFactories.d.ts +1 -1
  113. package/dist/types/ts3.7/track/mse/MseTrack.d.ts +0 -17
  114. package/dist/types/ts3.7/util/media/mimeType.d.ts +8 -0
  115. package/dist/types/ts3.7/vinyl/VinylPlayer.d.ts +5 -0
  116. package/dist/types/ts3.7/vinyl/createVinylFactories.d.ts +7 -16
  117. package/dist/types/ts4.1/drm/DrmControllerImpl.d.ts +19 -1
  118. package/dist/types/ts4.1/index.d.ts +3 -6
  119. package/dist/types/ts4.1/playback/PlaybackControllerImpl.d.ts +15 -0
  120. package/dist/types/ts4.1/playback/ReadonlyPlaybackController.d.ts +28 -0
  121. package/dist/types/ts4.1/playback/createStallDetector.d.ts +43 -0
  122. package/dist/types/ts4.1/playback/createStallMonitor.d.ts +45 -0
  123. package/dist/types/ts4.1/streaming/AudioOptions.d.ts +27 -0
  124. package/dist/types/ts4.1/streaming/ContentStream.d.ts +0 -5
  125. package/dist/types/ts4.1/streaming/LoadMetric.d.ts +15 -1
  126. package/dist/types/ts4.1/streaming/StreamingEventMap.d.ts +0 -5
  127. package/dist/types/ts4.1/streaming/buffering/BufferingController.d.ts +0 -11
  128. package/dist/types/ts4.1/streaming/mediaTimelineFilter.d.ts +4 -2
  129. package/dist/types/ts4.1/track/dash/DashMediaQualityMetadataResolver.d.ts +10 -6
  130. package/dist/types/ts4.1/track/dash/createDashFactories.d.ts +1 -1
  131. package/dist/types/ts4.1/track/dash/util/mpd.d.ts +6 -0
  132. package/dist/types/ts4.1/track/filters/resourceTypeFilter.d.ts +4 -0
  133. package/dist/types/ts4.1/track/filters/sampleRateFilter.d.ts +25 -7
  134. package/dist/types/ts4.1/track/hls/createHlsFactories.d.ts +1 -1
  135. package/dist/types/ts4.1/track/mse/MseTrack.d.ts +0 -17
  136. package/dist/types/ts4.1/util/media/mimeType.d.ts +8 -0
  137. package/dist/types/ts4.1/vinyl/VinylPlayer.d.ts +5 -0
  138. package/dist/types/ts4.1/vinyl/createVinylFactories.d.ts +7 -16
  139. package/dist/types/ts4.7/drm/DrmControllerImpl.d.ts +19 -1
  140. package/dist/types/ts4.7/index.d.ts +3 -6
  141. package/dist/types/ts4.7/playback/PlaybackControllerImpl.d.ts +15 -0
  142. package/dist/types/ts4.7/playback/ReadonlyPlaybackController.d.ts +28 -0
  143. package/dist/types/ts4.7/playback/createStallDetector.d.ts +43 -0
  144. package/dist/types/ts4.7/playback/createStallMonitor.d.ts +45 -0
  145. package/dist/types/ts4.7/streaming/AudioOptions.d.ts +27 -0
  146. package/dist/types/ts4.7/streaming/ContentStream.d.ts +0 -5
  147. package/dist/types/ts4.7/streaming/LoadMetric.d.ts +15 -1
  148. package/dist/types/ts4.7/streaming/StreamingEventMap.d.ts +0 -5
  149. package/dist/types/ts4.7/streaming/buffering/BufferingController.d.ts +0 -11
  150. package/dist/types/ts4.7/streaming/mediaTimelineFilter.d.ts +4 -2
  151. package/dist/types/ts4.7/track/dash/DashMediaQualityMetadataResolver.d.ts +10 -6
  152. package/dist/types/ts4.7/track/dash/createDashFactories.d.ts +1 -1
  153. package/dist/types/ts4.7/track/dash/util/mpd.d.ts +6 -0
  154. package/dist/types/ts4.7/track/filters/resourceTypeFilter.d.ts +4 -0
  155. package/dist/types/ts4.7/track/filters/sampleRateFilter.d.ts +25 -7
  156. package/dist/types/ts4.7/track/hls/createHlsFactories.d.ts +1 -1
  157. package/dist/types/ts4.7/track/mse/MseTrack.d.ts +0 -17
  158. package/dist/types/ts4.7/util/media/mimeType.d.ts +8 -0
  159. package/dist/types/ts4.7/vinyl/VinylPlayer.d.ts +5 -0
  160. package/dist/types/ts4.7/vinyl/createVinylFactories.d.ts +7 -16
  161. package/dist/unit/types/current/ad/AdControllerImpl.test.js +27 -1
  162. package/dist/unit/types/current/drm/DrmControllerImpl.test.js +146 -9
  163. package/dist/unit/types/current/index.d.ts +3 -4
  164. package/dist/unit/types/current/index.d.ts.map +1 -1
  165. package/dist/unit/types/current/index.js +3 -4
  166. package/dist/unit/types/current/playback/PlaybackControllerImpl.test.js +165 -0
  167. package/dist/unit/types/current/playback/createStallDetector.test.d.ts +2 -0
  168. package/dist/unit/types/current/playback/createStallDetector.test.d.ts.map +1 -0
  169. package/dist/unit/types/current/playback/createStallDetector.test.js +163 -0
  170. package/dist/unit/types/current/playback/createStallMonitor.test.d.ts +2 -0
  171. package/dist/unit/types/current/playback/createStallMonitor.test.d.ts.map +1 -0
  172. package/dist/unit/types/current/playback/createStallMonitor.test.js +125 -0
  173. package/dist/unit/types/current/streaming/ContentStream.test.js +0 -11
  174. package/dist/unit/types/current/streaming/MseTrack.test.js +49 -73
  175. package/dist/unit/types/current/streaming/abr/QualitySelectorImpl.test.js +1 -1
  176. package/dist/unit/types/current/streaming/buffering/BufferingController.test.js +0 -21
  177. package/dist/unit/types/current/streaming/createDefaultMediaTimelineTransformer.test.js +133 -0
  178. package/dist/unit/types/current/streaming/mediaTimelineFilter.test.js +60 -54
  179. package/dist/unit/types/current/track/TrackController.test.js +61 -1
  180. package/dist/unit/types/current/track/createSegmentDataProvider.test.js +18 -0
  181. package/dist/unit/types/current/track/dash/DashMediaQualityMetadataResolver.test.js +46 -14
  182. package/dist/unit/types/current/track/dash/createSegmentControllerFactory.test.js +1 -0
  183. package/dist/unit/types/current/track/dash/timeline/DashRepresentationSegmentProvider.test.js +114 -0
  184. package/dist/unit/types/current/track/dash/util/mpd.test.js +37 -0
  185. package/dist/unit/types/current/track/filters/resourceTypeFilter.test.js +7 -0
  186. package/dist/unit/types/current/track/filters/sampleRateFilter.test.js +211 -34
  187. package/dist/unit/types/current/track/source/SourceObjectTrack.test.js +1 -1
  188. package/dist/unit/types/current/tsconfig.tsbuildinfo +1 -1
  189. package/dist/unit/types/current/util/media/mimeType.test.d.ts +2 -0
  190. package/dist/unit/types/current/util/media/mimeType.test.d.ts.map +1 -0
  191. package/dist/unit/types/current/util/media/mimeType.test.js +22 -0
  192. package/dist/unit/types/current/vinyl/VinylPlayer.test.js +33 -2
  193. package/dist/unit/types/current/vinyl/createVinylFactories.test.js +2 -36
  194. package/dist/vinylTestUtil/index.js +6 -4
  195. package/dist/vinylTestUtil/index.js.map +2 -2
  196. package/dist/vinylTestUtil/types/current/assets/vinylTestAssets.d.ts +1 -0
  197. package/dist/vinylTestUtil/types/current/assets/vinylTestAssets.d.ts.map +1 -1
  198. package/dist/vinylTestUtil/types/current/assets/vinylTestAssets.js +1 -0
  199. package/dist/vinylTestUtil/types/current/media/FrequencyAnalyzer.d.ts.map +1 -1
  200. package/dist/vinylTestUtil/types/current/mock/streaming/MockContentStream.d.ts +0 -1
  201. package/dist/vinylTestUtil/types/current/mock/streaming/MockContentStream.d.ts.map +1 -1
  202. package/dist/vinylTestUtil/types/current/mock/streaming/MockContentStream.js +0 -1
  203. package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockBufferingController.d.ts +0 -1
  204. package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockBufferingController.d.ts.map +1 -1
  205. package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockBufferingController.js +0 -1
  206. package/dist/vinylTestUtil/types/current/tsconfig.tsbuildinfo +1 -1
  207. package/dist/vinylTestUtil/types/current/util/playback/eventPromises.js +1 -1
  208. package/dist/vinylTestUtil/types/current/util/playback/expectTrackCanSeek.d.ts.map +1 -1
  209. package/dist/vinylTestUtil/types/current/util/playback/expectTrackCanSeek.js +9 -1
  210. package/dist/vinylTestUtil/types/ts3.7/assets/vinylTestAssets.d.ts +1 -0
  211. package/dist/vinylTestUtil/types/ts3.7/mock/streaming/MockContentStream.d.ts +0 -1
  212. package/dist/vinylTestUtil/types/ts3.7/mock/streaming/buffering/MockBufferingController.d.ts +0 -1
  213. package/dist/vinylTestUtil/types/ts4.1/assets/vinylTestAssets.d.ts +1 -0
  214. package/dist/vinylTestUtil/types/ts4.1/mock/streaming/MockContentStream.d.ts +0 -1
  215. package/dist/vinylTestUtil/types/ts4.1/mock/streaming/buffering/MockBufferingController.d.ts +0 -1
  216. package/dist/vinylTestUtil/types/ts4.7/assets/vinylTestAssets.d.ts +1 -0
  217. package/dist/vinylTestUtil/types/ts4.7/mock/streaming/MockContentStream.d.ts +0 -1
  218. package/dist/vinylTestUtil/types/ts4.7/mock/streaming/buffering/MockBufferingController.d.ts +0 -1
  219. package/docs/USAGE.md +29 -0
  220. package/package.json +11 -10
  221. package/dist/types/current/patch/media/HtmlMediaElementPatch.d.ts +0 -3
  222. package/dist/types/current/patch/media/HtmlMediaElementPatch.d.ts.map +0 -1
  223. package/dist/types/current/patch/media/HtmlMediaElementPatch.js +0 -5
  224. package/dist/types/current/patch/media/MediaElementPatchOptions.d.ts +0 -19
  225. package/dist/types/current/patch/media/MediaElementPatchOptions.d.ts.map +0 -1
  226. package/dist/types/current/patch/media/MediaElementPatchOptions.js +0 -16
  227. package/dist/types/current/patch/media/patchMediaElement.d.ts +0 -9
  228. package/dist/types/current/patch/media/patchMediaElement.d.ts.map +0 -1
  229. package/dist/types/current/patch/media/patchMediaElement.js +0 -15
  230. package/dist/types/current/patch/media/patches/createPreventStallsPatch.d.ts +0 -17
  231. package/dist/types/current/patch/media/patches/createPreventStallsPatch.d.ts.map +0 -1
  232. package/dist/types/current/patch/media/patches/createPreventStallsPatch.js +0 -55
  233. package/dist/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +0 -26
  234. package/dist/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts.map +0 -1
  235. package/dist/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.js +0 -218
  236. package/dist/types/current/vinyl/VinylPatchOptions.d.ts +0 -10
  237. package/dist/types/current/vinyl/VinylPatchOptions.d.ts.map +0 -1
  238. package/dist/types/current/vinyl/VinylPatchOptions.js +0 -11
  239. package/dist/types/ts3.7/patch/media/HtmlMediaElementPatch.d.ts +0 -3
  240. package/dist/types/ts3.7/patch/media/MediaElementPatchOptions.d.ts +0 -19
  241. package/dist/types/ts3.7/patch/media/patchMediaElement.d.ts +0 -9
  242. package/dist/types/ts3.7/patch/media/patches/createPreventStallsPatch.d.ts +0 -17
  243. package/dist/types/ts3.7/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +0 -26
  244. package/dist/types/ts3.7/vinyl/VinylPatchOptions.d.ts +0 -10
  245. package/dist/types/ts4.1/patch/media/HtmlMediaElementPatch.d.ts +0 -3
  246. package/dist/types/ts4.1/patch/media/MediaElementPatchOptions.d.ts +0 -19
  247. package/dist/types/ts4.1/patch/media/patchMediaElement.d.ts +0 -9
  248. package/dist/types/ts4.1/patch/media/patches/createPreventStallsPatch.d.ts +0 -17
  249. package/dist/types/ts4.1/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +0 -26
  250. package/dist/types/ts4.1/vinyl/VinylPatchOptions.d.ts +0 -10
  251. package/dist/types/ts4.7/patch/media/HtmlMediaElementPatch.d.ts +0 -3
  252. package/dist/types/ts4.7/patch/media/MediaElementPatchOptions.d.ts +0 -19
  253. package/dist/types/ts4.7/patch/media/patchMediaElement.d.ts +0 -9
  254. package/dist/types/ts4.7/patch/media/patches/createPreventStallsPatch.d.ts +0 -17
  255. package/dist/types/ts4.7/patch/media/patches/createUnreliablePlaybackEventsPatch.d.ts +0 -26
  256. package/dist/types/ts4.7/vinyl/VinylPatchOptions.d.ts +0 -10
  257. package/dist/unit/types/current/patch/media/MediaElementPatchOptions.test.d.ts +0 -2
  258. package/dist/unit/types/current/patch/media/MediaElementPatchOptions.test.d.ts.map +0 -1
  259. package/dist/unit/types/current/patch/media/MediaElementPatchOptions.test.js +0 -17
  260. package/dist/unit/types/current/patch/media/patchMediaElement.test.d.ts +0 -2
  261. package/dist/unit/types/current/patch/media/patchMediaElement.test.d.ts.map +0 -1
  262. package/dist/unit/types/current/patch/media/patchMediaElement.test.js +0 -36
  263. package/dist/unit/types/current/patch/media/patches/createPreventStallsPatch.test.d.ts +0 -2
  264. package/dist/unit/types/current/patch/media/patches/createPreventStallsPatch.test.d.ts.map +0 -1
  265. package/dist/unit/types/current/patch/media/patches/createPreventStallsPatch.test.js +0 -93
  266. package/dist/unit/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.test.d.ts +0 -2
  267. package/dist/unit/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.test.d.ts.map +0 -1
  268. package/dist/unit/types/current/patch/media/patches/createUnreliablePlaybackEventsPatch.test.js +0 -423
@@ -1,423 +0,0 @@
1
- /*
2
- * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
- * SPDX-License-Identifier: Apache-2.0
4
- */
5
- import { createUnreliablePlaybackEventsPatch, MIN_PLAYING_BEFORE_FAB, MIN_STALLED_BEFORE_FAB, requiresUnreliablePlaybackEventsPatch, UNRELIABLE_EVENTS_POLL_INTERVAL as POLL_INTERVAL, } from '@amazon/vinyl';
6
- import { patchTarget, setUserAgent, } from '@amazon/vinyl-util';
7
- import { implementEventFakes, MockHTMLAudioElement, mockEvent, polyfillCustomEvent, useMockTime, } from '@amazon/vinyl-util/browserTestUtil';
8
- var createSpy = jasmine.createSpy;
9
- describe('createUnreliablePlaybackEventsPatch', () => {
10
- let waitingSpy;
11
- let playingSpy;
12
- let canPlaySpy;
13
- let canPlayThroughSpy;
14
- let patchedMedia;
15
- let media;
16
- let patchedRef;
17
- let disposed = false;
18
- const clock = useMockTime();
19
- polyfillCustomEvent();
20
- beforeEach(() => {
21
- disposed = false;
22
- media = new MockHTMLAudioElement();
23
- media.playbackRate = 1;
24
- implementEventFakes(media);
25
- media.play.and.returnValue(Promise.resolve());
26
- patchedRef = patchTarget(media, createUnreliablePlaybackEventsPatch);
27
- patchedMedia = patchedRef.patched;
28
- waitingSpy = createSpy('waiting');
29
- patchedMedia.addEventListener('waiting', waitingSpy);
30
- playingSpy = createSpy('playing');
31
- patchedMedia.addEventListener('playing', playingSpy);
32
- canPlaySpy = createSpy('canplay');
33
- patchedMedia.addEventListener('canplay', canPlaySpy);
34
- canPlayThroughSpy = createSpy('canplaythrough');
35
- patchedMedia.addEventListener('canplaythrough', canPlayThroughSpy);
36
- });
37
- afterEach(() => {
38
- if (!disposed)
39
- patchedRef.dispose();
40
- });
41
- /**
42
- * Simulates media play-head progressing.
43
- */
44
- async function simulateTimeProgress() {
45
- const n = Math.floor(MIN_PLAYING_BEFORE_FAB / POLL_INTERVAL) + 1;
46
- for (let i = 0; i <= n; i++) {
47
- media.currentTime = i * POLL_INTERVAL;
48
- // First poll is to set to apparent PLAYING state, continue until MIN_PLAYING_BEFORE_FAB has elapsed.
49
- await clock.tick(POLL_INTERVAL); // polls n + 1 times
50
- }
51
- }
52
- /**
53
- * Simulates media play-head not progressing.
54
- */
55
- async function simulateTimeStalled() {
56
- const n = Math.floor(MIN_STALLED_BEFORE_FAB / POLL_INTERVAL) + 1;
57
- for (let i = 0; i <= n; i++) {
58
- // First poll is to set to apparent STOPPED state, continue until MIN_STALLED_BEFORE_FAB has elapsed.
59
- await clock.tick(POLL_INTERVAL); // polls n + 1 times
60
- }
61
- }
62
- describe('waiting', () => {
63
- describe('when playing', () => {
64
- beforeEach(() => {
65
- media.paused = false;
66
- media.readyState = media.HAVE_FUTURE_DATA;
67
- media.dispatchEvent(mockEvent('playing'));
68
- });
69
- describe('and playback is progressing', () => {
70
- beforeEach(async () => {
71
- await simulateTimeProgress();
72
- });
73
- it('does not fabricate a waiting event', () => {
74
- expect(waitingSpy).not.toHaveBeenCalled();
75
- });
76
- describe('then playback is paused', () => {
77
- beforeEach(() => {
78
- media.paused = true;
79
- });
80
- it('does not fabricate a waiting event', async () => {
81
- await simulateTimeStalled();
82
- expect(waitingSpy).not.toHaveBeenCalled();
83
- });
84
- });
85
- describe('then playback is ended', () => {
86
- beforeEach(() => {
87
- media.ended = true;
88
- });
89
- it('does not fabricate a waiting event', async () => {
90
- await simulateTimeStalled();
91
- expect(waitingSpy).not.toHaveBeenCalled();
92
- });
93
- });
94
- });
95
- describe('when playback stalls', () => {
96
- beforeEach(async () => {
97
- media.paused = false;
98
- media.readyState = media.HAVE_FUTURE_DATA;
99
- media.dispatchEvent(mockEvent('playing'));
100
- // Wait for three polls, if time has not progressed, the waiting event will be fabricated.
101
- await simulateTimeStalled();
102
- });
103
- it('fabricates waiting event', () => {
104
- expect(waitingSpy).toHaveBeenCalledTimes(1);
105
- });
106
- it('overrides readyState to be at most HAVE_METADATA', () => {
107
- expect(patchedMedia.readyState).toEqual(media.HAVE_METADATA);
108
- });
109
- describe('then a real waiting event is observed', () => {
110
- it('does not emit an extra waiting event', async () => {
111
- waitingSpy.calls.reset();
112
- media.dispatchEvent(mockEvent('waiting')); // real event squelched
113
- expect(waitingSpy).not.toHaveBeenCalled();
114
- await simulateTimeStalled();
115
- // Does not fabricate a new waiting event
116
- expect(waitingSpy).not.toHaveBeenCalled();
117
- });
118
- });
119
- describe('and playback resumes', () => {
120
- beforeEach(() => {
121
- playingSpy.calls.reset();
122
- });
123
- it('fabricates a playing event', async () => {
124
- await simulateTimeProgress();
125
- expect(canPlaySpy).toHaveBeenCalledTimes(1);
126
- canPlaySpy.calls.reset();
127
- expect(playingSpy).toHaveBeenCalledTimes(1);
128
- playingSpy.calls.reset();
129
- // if a real playing event is emitted after the fabricated one,
130
- // should not re-emit another playing
131
- media.dispatchEvent(mockEvent('playing'));
132
- expect(playingSpy).not.toHaveBeenCalled();
133
- });
134
- describe('and readyState is HAVE_FUTURE_DATA', () => {
135
- describe('when canplay or canplaythrough was not observed', () => {
136
- beforeEach(() => {
137
- media.readyState = media.HAVE_FUTURE_DATA;
138
- });
139
- it('fabricates canplay', async () => {
140
- await simulateTimeProgress();
141
- expect(canPlayThroughSpy).not.toHaveBeenCalled();
142
- expect(canPlaySpy).toHaveBeenCalledTimes(1);
143
- expect(playingSpy).toHaveBeenCalledTimes(1);
144
- expect(patchedMedia.readyState).toBe(media.HAVE_FUTURE_DATA);
145
- });
146
- describe('then a real canplay event is observed', () => {
147
- it('does not emit canplay again', async () => {
148
- await simulateTimeProgress();
149
- canPlaySpy.calls.reset();
150
- media.dispatchEvent(mockEvent('canplay'));
151
- expect(canPlaySpy).not.toHaveBeenCalled();
152
- });
153
- });
154
- });
155
- });
156
- describe('and readyState is HAVE_ENOUGH_DATA', () => {
157
- beforeEach(() => {
158
- media.readyState = media.HAVE_ENOUGH_DATA;
159
- });
160
- describe('when canplaythrough was not observed', () => {
161
- describe('when canplay was not observed', () => {
162
- it('fabricates canplay and canplaythrough', async () => {
163
- await simulateTimeProgress();
164
- expect(canPlaySpy).toHaveBeenCalledTimes(1);
165
- expect(canPlayThroughSpy).toHaveBeenCalledTimes(1);
166
- expect(playingSpy).toHaveBeenCalledTimes(1);
167
- expect(patchedMedia.readyState).toBe(media.HAVE_ENOUGH_DATA);
168
- });
169
- });
170
- describe('when canplay was observed', () => {
171
- beforeEach(() => {
172
- media.dispatchEvent(mockEvent('canplay'));
173
- canPlaySpy.calls.reset();
174
- });
175
- it('fabricates canplaythrough but not canplay', async () => {
176
- await simulateTimeProgress();
177
- expect(canPlaySpy).not.toHaveBeenCalled();
178
- expect(canPlayThroughSpy).toHaveBeenCalledTimes(1);
179
- expect(playingSpy).toHaveBeenCalledTimes(1);
180
- expect(patchedMedia.readyState).toBe(media.HAVE_ENOUGH_DATA);
181
- });
182
- describe('then a real canplaythrough event was observed', () => {
183
- it('does not emit canplaythrough a second time', async () => {
184
- await simulateTimeProgress();
185
- canPlayThroughSpy.calls.reset();
186
- media.dispatchEvent(mockEvent('canplaythrough'));
187
- expect(canPlayThroughSpy).not.toHaveBeenCalled();
188
- });
189
- });
190
- });
191
- });
192
- describe('when canplaythrough was observed', () => {
193
- beforeEach(() => {
194
- media.dispatchEvent(mockEvent('canplaythrough'));
195
- canPlayThroughSpy.calls.reset();
196
- });
197
- it('does not fabricate canplaythrough', async () => {
198
- await simulateTimeProgress();
199
- expect(canPlaySpy).not.toHaveBeenCalled();
200
- expect(canPlayThroughSpy).not.toHaveBeenCalled();
201
- });
202
- });
203
- });
204
- describe('then a real playing event is observed', () => {
205
- it('does not fabricate an extra playing event', async () => {
206
- playingSpy.calls.reset();
207
- media.dispatchEvent(mockEvent('waiting'));
208
- media.currentTime = 0;
209
- await clock.tick(POLL_INTERVAL);
210
- media.dispatchEvent(mockEvent('playing'));
211
- playingSpy.calls.reset();
212
- await simulateTimeProgress();
213
- expect(playingSpy).not.toHaveBeenCalled();
214
- });
215
- });
216
- });
217
- });
218
- describe('then a waiting event is observed', () => {
219
- beforeEach(() => {
220
- media.dispatchEvent(mockEvent('waiting'));
221
- waitingSpy.calls.reset();
222
- });
223
- describe('then playback stalls', () => {
224
- beforeEach(async () => {
225
- await simulateTimeStalled();
226
- });
227
- it('does not fabricate a waiting event', () => {
228
- expect(waitingSpy).not.toHaveBeenCalled();
229
- });
230
- });
231
- });
232
- describe('when a canplay event has been observed', () => {
233
- describe('when a canplay event has not been fabricated', () => {
234
- it('does not squelch the event', () => {
235
- media.dispatchEvent(mockEvent('canplay'));
236
- expect(canPlaySpy).toHaveBeenCalledTimes(1);
237
- });
238
- });
239
- });
240
- describe('when a canplaythrough event has been observed', () => {
241
- describe('when a canplaythrough event has not been fabricated', () => {
242
- it('does not squelch the event', () => {
243
- media.dispatchEvent(mockEvent('canplaythrough'));
244
- expect(canPlayThroughSpy).toHaveBeenCalledTimes(1);
245
- });
246
- });
247
- });
248
- });
249
- describe('when not playing', () => {
250
- beforeEach(async () => {
251
- media.paused = true;
252
- await simulateTimeStalled();
253
- });
254
- it('does not fabricate a waiting event', () => {
255
- expect(waitingSpy).not.toHaveBeenCalled();
256
- });
257
- describe('then play is observed', () => {
258
- beforeEach(() => {
259
- media.paused = false;
260
- media.dispatchEvent(mockEvent('play'));
261
- });
262
- it('waits at least MIN_STALLED_BEFORE_FAB before allowing waiting fabrications', async () => {
263
- expect(waitingSpy).not.toHaveBeenCalled();
264
- await clock.tick(MIN_STALLED_BEFORE_FAB - 0.01);
265
- expect(waitingSpy).not.toHaveBeenCalled();
266
- await simulateTimeStalled();
267
- expect(waitingSpy).toHaveBeenCalledTimes(1);
268
- });
269
- });
270
- });
271
- describe('when patch is disposed', () => {
272
- beforeEach(() => {
273
- disposed = true;
274
- patchedRef.dispose();
275
- });
276
- it('does not fabricate a waiting event', async () => {
277
- media.paused = false;
278
- media.readyState = media.HAVE_FUTURE_DATA;
279
- await simulateTimeStalled();
280
- expect(waitingSpy).not.toHaveBeenCalled();
281
- });
282
- it('does not fabricate a playing event', async () => {
283
- media.paused = false;
284
- media.readyState = media.HAVE_FUTURE_DATA;
285
- await simulateTimeProgress();
286
- expect(playingSpy).not.toHaveBeenCalled();
287
- });
288
- });
289
- });
290
- describe('playing', () => {
291
- describe('and playback is paused', () => {
292
- beforeEach(() => {
293
- media.paused = true;
294
- });
295
- describe('and content is ready to play', () => {
296
- beforeEach(() => {
297
- media.readyState = media.HAVE_FUTURE_DATA;
298
- });
299
- describe('and playback is detected', () => {
300
- beforeEach(async () => {
301
- await simulateTimeProgress();
302
- });
303
- it('does not fabricate playing', () => {
304
- expect(playingSpy).not.toHaveBeenCalledTimes(1);
305
- });
306
- });
307
- });
308
- });
309
- describe('and playback is not paused', () => {
310
- beforeEach(() => {
311
- media.paused = false;
312
- });
313
- describe('and content is ready to play', () => {
314
- beforeEach(() => {
315
- media.readyState = media.HAVE_FUTURE_DATA;
316
- });
317
- describe('and playback is ended', () => {
318
- beforeEach(() => {
319
- media.ended = true;
320
- });
321
- describe('and playback is detected', () => {
322
- beforeEach(async () => {
323
- await simulateTimeProgress();
324
- });
325
- it('does not fabricate playing', () => {
326
- expect(playingSpy).not.toHaveBeenCalledTimes(1);
327
- });
328
- });
329
- });
330
- describe('and media is seeking', () => {
331
- describe('and playback is detected', () => {
332
- beforeEach(async () => {
333
- media.dispatchEvent(mockEvent('seeking'));
334
- await simulateTimeProgress();
335
- });
336
- it('does not fabricate a playing event', () => {
337
- expect(playingSpy).not.toHaveBeenCalled();
338
- });
339
- describe('and media finishes seeking', () => {
340
- beforeEach(() => {
341
- media.dispatchEvent(mockEvent('seeked'));
342
- });
343
- it('fabricates a playing event', async () => {
344
- await simulateTimeProgress();
345
- expect(playingSpy).toHaveBeenCalledTimes(1);
346
- });
347
- });
348
- });
349
- });
350
- describe('and playback is detected', () => {
351
- beforeEach(async () => {
352
- await simulateTimeProgress();
353
- });
354
- it('fabricates a playing event', async () => {
355
- expect(playingSpy).toHaveBeenCalledTimes(1);
356
- // if actual playing event comes after fabricated event do not emit another.
357
- playingSpy.calls.reset();
358
- media.dispatchEvent(mockEvent('playing'));
359
- expect(playingSpy).not.toHaveBeenCalled();
360
- // timeupdate events should not cause another fabricated
361
- // playing
362
- await simulateTimeProgress();
363
- expect(playingSpy).not.toHaveBeenCalled();
364
- });
365
- });
366
- describe('and real playback event is emitted', () => {
367
- it('does not squelch real playback event', async () => {
368
- media.dispatchEvent(mockEvent('playing'));
369
- expect(playingSpy).toHaveBeenCalledTimes(1);
370
- playingSpy.calls.reset();
371
- // Does not fabricate another playing event
372
- media.dispatchEvent(mockEvent('playing'));
373
- await simulateTimeProgress();
374
- expect(playingSpy).not.toHaveBeenCalled();
375
- });
376
- });
377
- });
378
- describe('and content is buffering', () => {
379
- beforeEach(() => {
380
- media.readyState = media.HAVE_METADATA;
381
- });
382
- describe('and playback is detected', () => {
383
- beforeEach(async () => {
384
- await simulateTimeProgress();
385
- });
386
- it('does not fabricate a playing event', () => {
387
- expect(playingSpy).not.toHaveBeenCalled();
388
- });
389
- describe('then content buffers', () => {
390
- beforeEach(() => {
391
- media.readyState = media.HAVE_FUTURE_DATA;
392
- media.dispatchEvent(mockEvent('canplay'));
393
- });
394
- describe('and playback is detected', () => {
395
- beforeEach(async () => {
396
- await simulateTimeProgress();
397
- });
398
- it('fabricates a playing event', () => {
399
- expect(playingSpy).toHaveBeenCalledTimes(1);
400
- });
401
- });
402
- });
403
- });
404
- });
405
- });
406
- });
407
- });
408
- describe('requiresUnreliablePlaybackEventsPatch', () => {
409
- function testForUa(userAgent, expected) {
410
- setUserAgent(userAgent);
411
- expect(requiresUnreliablePlaybackEventsPatch())
412
- .withContext(`requiresUnreliablePlayingEventsPatch`)
413
- .toEqual(expected);
414
- }
415
- it('is true when browser is Safari, Edge Legacy, or Chromium <= 53', () => {
416
- testForUa('Version/17.2.1 Safari/605.1.15', true);
417
- testForUa('Edge/18.0.0 Safari/605.1.15', true);
418
- testForUa('Edg/108.0.0 Safari/605.1.15', false);
419
- testForUa('Chrome/120.0.0', false);
420
- testForUa('Chrome/54.0.0', false);
421
- testForUa('Chrome/53.9.0', true);
422
- });
423
- });