shaka-player 3.3.4 → 4.0.1

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 (201) hide show
  1. package/.github/config.yml +1 -0
  2. package/.github/workflows/build-and-test.yaml +0 -1
  3. package/.github/workflows/demo-version-index.yaml +8 -0
  4. package/.github/workflows/release-please.yaml +19 -3
  5. package/.github/workflows/selenium-lab-tests.yaml +0 -1
  6. package/.github/workflows/sync-labels.yaml +33 -0
  7. package/.github/workflows/update-issues.yaml +29 -0
  8. package/.github/workflows/validate-pr-title.yaml +35 -0
  9. package/AUTHORS +1 -0
  10. package/CHANGELOG.md +209 -28
  11. package/CONTRIBUTORS +1 -0
  12. package/README.md +10 -7
  13. package/app-engine/demo-version-index/README.md +3 -3
  14. package/app-engine/demo-version-index/app.yaml +27 -1
  15. package/app-engine/demo-version-index/generate.py +164 -0
  16. package/app-engine/demo-version-index/main.py +4 -155
  17. package/app-engine/demo-version-index/requirements.txt +0 -1
  18. package/build/README.md +2 -2
  19. package/build/compiler.py +1 -1
  20. package/build/generateTsDefs.py +0 -2
  21. package/build/misspellings.txt +1 -0
  22. package/build/shaka-lab.yaml +0 -2
  23. package/build/test.py +7 -1
  24. package/build/types/core +0 -1
  25. package/build/types/polyfill +0 -3
  26. package/demo/common/asset.js +17 -1
  27. package/demo/common/assets.js +29 -0
  28. package/demo/common/message_ids.js +6 -3
  29. package/demo/config.js +10 -11
  30. package/demo/custom.js +39 -0
  31. package/demo/demo_utils.js +0 -1
  32. package/demo/locales/en.json +6 -3
  33. package/demo/locales/source.json +22 -10
  34. package/demo/main.js +9 -6
  35. package/demo/search.js +2 -1
  36. package/dist/controls.css +1 -1
  37. package/dist/demo.compiled.debug.js +71 -64
  38. package/dist/demo.compiled.debug.map +3 -3
  39. package/dist/demo.compiled.js +71 -64
  40. package/dist/demo.compiled.map +3 -3
  41. package/dist/demo.css +1 -1
  42. package/dist/demo.css.map +1 -1
  43. package/dist/deps.js +16 -20
  44. package/dist/locales.js +33 -31
  45. package/dist/receiver.compiled.debug.js +32 -28
  46. package/dist/receiver.compiled.debug.map +3 -3
  47. package/dist/receiver.compiled.js +32 -28
  48. package/dist/receiver.compiled.map +3 -3
  49. package/dist/shaka-player.compiled.d.ts +78 -82
  50. package/dist/shaka-player.compiled.debug.d.ts +78 -82
  51. package/dist/shaka-player.compiled.debug.externs.js +127 -126
  52. package/dist/shaka-player.compiled.debug.js +471 -523
  53. package/dist/shaka-player.compiled.debug.map +4 -4
  54. package/dist/shaka-player.compiled.externs.js +127 -126
  55. package/dist/shaka-player.compiled.js +844 -858
  56. package/dist/shaka-player.compiled.map +4 -4
  57. package/dist/shaka-player.ui.d.ts +80 -82
  58. package/dist/shaka-player.ui.debug.d.ts +80 -82
  59. package/dist/shaka-player.ui.debug.externs.js +135 -126
  60. package/dist/shaka-player.ui.debug.js +531 -581
  61. package/dist/shaka-player.ui.debug.map +4 -4
  62. package/dist/shaka-player.ui.externs.js +135 -126
  63. package/dist/shaka-player.ui.js +991 -1001
  64. package/dist/shaka-player.ui.map +4 -4
  65. package/docs/tutorials/config.md +0 -2
  66. package/docs/tutorials/drm-config.md +5 -0
  67. package/docs/tutorials/fairplay.md +7 -22
  68. package/docs/tutorials/faq.md +0 -11
  69. package/docs/tutorials/index.json +2 -8
  70. package/docs/tutorials/plugins.md +1 -3
  71. package/docs/tutorials/upgrade.md +85 -11
  72. package/externs/polyfill.js +15 -0
  73. package/externs/shaka/manifest.js +5 -1
  74. package/externs/shaka/net.js +12 -0
  75. package/externs/shaka/offline.js +5 -1
  76. package/externs/shaka/player.js +39 -21
  77. package/externs/shaka/text.js +12 -12
  78. package/externs/sourcebuffer.js +15 -0
  79. package/karma.conf.js +4 -0
  80. package/lib/ads/client_side_ad.js +13 -2
  81. package/lib/ads/client_side_ad_manager.js +22 -4
  82. package/lib/cast/cast_utils.js +0 -1
  83. package/lib/dash/content_protection.js +85 -5
  84. package/lib/dash/dash_parser.js +3 -3
  85. package/lib/hls/hls_parser.js +391 -747
  86. package/lib/hls/manifest_text_parser.js +2 -3
  87. package/lib/media/drm_engine.js +102 -37
  88. package/lib/media/gap_jumping_controller.js +10 -45
  89. package/lib/media/media_source_engine.js +157 -31
  90. package/lib/media/playhead.js +2 -5
  91. package/lib/media/presentation_timeline.js +1 -2
  92. package/lib/media/segment_index.js +13 -46
  93. package/lib/media/segment_reference.js +47 -1
  94. package/lib/media/streaming_engine.js +28 -11
  95. package/lib/media/time_ranges_utils.js +4 -9
  96. package/lib/net/networking_engine.js +3 -0
  97. package/lib/offline/indexeddb/storage_mechanism.js +4 -2
  98. package/lib/offline/indexeddb/v1_storage_cell.js +1 -0
  99. package/lib/offline/indexeddb/v2_storage_cell.js +1 -0
  100. package/lib/offline/manifest_converter.js +1 -0
  101. package/lib/offline/storage.js +100 -132
  102. package/lib/player.js +181 -307
  103. package/lib/polyfill/media_capabilities.js +12 -6
  104. package/lib/polyfill/mediasource.js +0 -28
  105. package/lib/polyfill/patchedmediakeys_nop.js +2 -0
  106. package/lib/polyfill/patchedmediakeys_webkit.js +2 -0
  107. package/lib/text/cue.js +0 -6
  108. package/lib/text/lrc_text_parser.js +8 -0
  109. package/lib/text/mp4_ttml_parser.js +8 -0
  110. package/lib/text/mp4_vtt_parser.js +8 -0
  111. package/lib/text/sbv_text_parser.js +8 -0
  112. package/lib/text/simple_text_displayer.js +1 -7
  113. package/lib/text/srt_text_parser.js +8 -0
  114. package/lib/text/ssa_text_parser.js +8 -0
  115. package/lib/text/text_engine.js +19 -3
  116. package/lib/text/ttml_text_parser.js +8 -0
  117. package/lib/text/ui_text_displayer.js +1 -7
  118. package/lib/text/vtt_text_parser.js +27 -5
  119. package/lib/text/web_vtt_generator.js +1 -7
  120. package/lib/util/config_utils.js +25 -0
  121. package/lib/util/error.js +16 -13
  122. package/lib/util/fairplay_utils.js +109 -0
  123. package/lib/util/functional.js +0 -42
  124. package/lib/util/manifest_parser_utils.js +1 -1
  125. package/lib/util/mime_utils.js +50 -1
  126. package/lib/util/periods.js +5 -4
  127. package/lib/util/platform.js +45 -0
  128. package/lib/util/player_configuration.js +26 -20
  129. package/lib/util/pssh.js +23 -4
  130. package/lib/util/stream_utils.js +96 -24
  131. package/lib/util/uint8array_utils.js +0 -16
  132. package/lib/util/xml_utils.js +1 -1
  133. package/package.json +4 -1
  134. package/roadmap.md +19 -19
  135. package/shaka-player.uncompiled.js +0 -3
  136. package/test/cast/cast_utils_unit.js +1 -0
  137. package/test/dash/dash_parser_content_protection_unit.js +44 -0
  138. package/test/dash/dash_parser_manifest_unit.js +0 -24
  139. package/test/dash/dash_parser_segment_template_unit.js +3 -4
  140. package/test/demo/demo_unit.js +2 -1
  141. package/test/hls/hls_live_unit.js +121 -220
  142. package/test/hls/hls_parser_unit.js +515 -432
  143. package/test/hls/manifest_text_parser_unit.js +19 -0
  144. package/test/media/drm_engine_unit.js +86 -120
  145. package/test/media/media_source_engine_integration.js +26 -3
  146. package/test/media/media_source_engine_unit.js +7 -6
  147. package/test/media/playhead_unit.js +27 -191
  148. package/test/media/segment_index_unit.js +15 -25
  149. package/test/media/streaming_engine_integration.js +4 -39
  150. package/test/media/streaming_engine_unit.js +3 -2
  151. package/test/media/time_ranges_utils_unit.js +0 -5
  152. package/test/offline/indexeddb_storage_unit.js +1 -1
  153. package/test/offline/manifest_convert_unit.js +34 -4
  154. package/test/offline/offline_manifest_parser_unit.js +1 -0
  155. package/test/offline/storage_compatibility_unit.js +1 -1
  156. package/test/offline/storage_integration.js +5 -4
  157. package/test/player_external.js +7 -7
  158. package/test/player_integration.js +22 -10
  159. package/test/player_src_equals_integration.js +81 -83
  160. package/test/player_unit.js +124 -1
  161. package/test/test/boot.js +9 -0
  162. package/test/test/externs/filters.js +4 -0
  163. package/test/test/util/fake_media_source_engine.js +11 -4
  164. package/test/test/util/manifest_generator.js +3 -1
  165. package/test/test/util/manifest_parser_util.js +4 -1
  166. package/test/test/util/offline_utils.js +1 -0
  167. package/test/test/util/simple_fakes.js +31 -2
  168. package/test/test/util/streaming_engine_util.js +1 -0
  169. package/test/test/util/test_scheme.js +24 -1
  170. package/test/test/util/util.js +4 -4
  171. package/test/text/cue_integration.js +2 -2
  172. package/test/text/lrc_text_parser_unit.js +6 -7
  173. package/test/text/mp4_ttml_parser_unit.js +6 -4
  174. package/test/text/mp4_vtt_parser_unit.js +6 -5
  175. package/test/text/sbv_text_parser_unit.js +5 -6
  176. package/test/text/srt_text_parser_unit.js +5 -6
  177. package/test/text/ssa_text_parser_unit.js +17 -29
  178. package/test/text/text_engine_unit.js +45 -5
  179. package/test/text/ttml_text_parser_unit.js +77 -77
  180. package/test/text/vtt_text_parser_unit.js +116 -59
  181. package/test/ui/ui_integration.js +0 -16
  182. package/test/ui/ui_unit.js +27 -0
  183. package/test/util/cmcd_manager_unit.js +3 -0
  184. package/test/util/mime_utils_unit.js +54 -0
  185. package/test/util/periods_unit.js +79 -0
  186. package/test/util/stream_utils_unit.js +23 -7
  187. package/ui/controls.js +65 -40
  188. package/ui/fullscreen_button.js +26 -6
  189. package/ui/less/containers.less +3 -3
  190. package/ui/locales/en.json +1 -0
  191. package/ui/locales/source.json +5 -0
  192. package/ui/resolution_selection.js +31 -33
  193. package/ui/ui.js +0 -17
  194. package/docs/tutorials/gsoc-ideas-list.md +0 -3
  195. package/docs/tutorials/upgrade-v2-5.md +0 -441
  196. package/docs/tutorials/upgrade-v3.md +0 -38
  197. package/lib/polyfill/mathround.js +0 -49
  198. package/lib/polyfill/patchedmediakeys_apple.js +0 -744
  199. package/lib/polyfill/patchedmediakeys_ms.js +0 -698
  200. package/lib/util/mutex.js +0 -52
  201. package/test/util/functional_unit.js +0 -82
@@ -21,16 +21,12 @@ let TimeRange;
21
21
  * start: number,
22
22
  * waitingAt: number,
23
23
  * expectedEndTime: number,
24
- * expectEvent: boolean,
25
- * jumpLargeGaps: (boolean|undefined),
26
- * preventDefault: (boolean|undefined)
27
24
  * }}
28
25
  *
29
26
  * @description
30
27
  * Parameters for a test where we start playing inside a buffered range and play
31
28
  * until the end of the buffer. Then, if we expect it, Playhead should jump
32
- * to the expected time. Also, if the gap is large, we should get a 'largegap'
33
- * event from the Playhead, which we may optionally suppress.
29
+ * to the expected time.
34
30
  *
35
31
  * @property {!Array.<TimeRange>} buffered
36
32
  * The buffered ranges for the test.
@@ -40,12 +36,6 @@ let TimeRange;
40
36
  * The time to pause at and fire a 'waiting' event.
41
37
  * @property {number} expectedEndTime
42
38
  * The expected time at the end of the test.
43
- * @property {boolean} expectEvent
44
- * If true, expect the 'largegap' event to be fired.
45
- * @property {(boolean|undefined)} jumpLargeGaps
46
- * If given, set this field of the Playhead configuration.
47
- * @property {(boolean|undefined)} preventDefault
48
- * If true, call preventDefault() on the 'largegap' event.
49
39
  */
50
40
  let PlayingTestInfo;
51
41
 
@@ -57,17 +47,12 @@ let PlayingTestInfo;
57
47
  * start: number,
58
48
  * seekTo: number,
59
49
  * expectedEndTime: number,
60
- * expectEvent: boolean,
61
- * jumpLargeGaps: (boolean|undefined),
62
- * preventDefault: (boolean|undefined)
63
50
  * }}
64
51
  *
65
52
  * @description
66
53
  * Parameters for a test where we start playing inside a buffered range and seek
67
54
  * to a given time, which may have different buffered ranges. If we are in a
68
- * gap, Playhead should jump the gap to the expected time. Also, if the gap is
69
- * large, we should get a 'largegap' event from the Playhead, which we may
70
- * optionally suppress.
55
+ * gap, Playhead should jump the gap to the expected time.
71
56
  *
72
57
  * @property {!Array.<TimeRange>} buffered
73
58
  * The buffered ranges for the test.
@@ -80,12 +65,6 @@ let PlayingTestInfo;
80
65
  * The time to seek to.
81
66
  * @property {number} expectedEndTime
82
67
  * The expected time at the end of the test.
83
- * @property {boolean} expectEvent
84
- * If true, expect the 'largegap' event to be fired.
85
- * @property {(boolean|undefined)} jumpLargeGaps
86
- * If given, set this field of the Playhead configuration.
87
- * @property {(boolean|undefined)} preventDefault
88
- * If true, call preventDefault() on the 'largegap' event.
89
68
  */
90
69
  let SeekTestInfo;
91
70
 
@@ -108,10 +87,6 @@ describe('Playhead', () => {
108
87
  /** @type {!jasmine.Spy} */
109
88
  let onSeek;
110
89
 
111
- // Callback to us from Playhead when an event should be sent to the app.
112
- /** @type {!jasmine.Spy} */
113
- let onEvent;
114
-
115
90
  beforeAll(() => {
116
91
  jasmine.clock().install();
117
92
  });
@@ -125,7 +100,6 @@ describe('Playhead', () => {
125
100
  timeline = new shaka.test.FakePresentationTimeline();
126
101
 
127
102
  onSeek = jasmine.createSpy('onSeek');
128
- onEvent = jasmine.createSpy('onEvent');
129
103
 
130
104
  timeline.isLive.and.returnValue(false);
131
105
  timeline.getSeekRangeStart.and.returnValue(5);
@@ -144,6 +118,7 @@ describe('Playhead', () => {
144
118
  presentationTimeline: timeline,
145
119
  minBufferTime: 10,
146
120
  offlineSessionIds: [],
121
+ sequenceMode: false,
147
122
  };
148
123
 
149
124
  config = shaka.util.PlayerConfiguration.createDefault().streaming;
@@ -168,8 +143,7 @@ describe('Playhead', () => {
168
143
  manifest,
169
144
  config,
170
145
  /* startTime= */ 5,
171
- Util.spyFunc(onSeek),
172
- Util.spyFunc(onEvent));
146
+ Util.spyFunc(onSeek));
173
147
 
174
148
  expect(video.currentTime).toBe(5);
175
149
  expect(playhead.getTime()).toBe(5);
@@ -189,8 +163,7 @@ describe('Playhead', () => {
189
163
  manifest,
190
164
  config,
191
165
  /* startTime= */ 5,
192
- Util.spyFunc(onSeek),
193
- Util.spyFunc(onEvent));
166
+ Util.spyFunc(onSeek));
194
167
 
195
168
  expect(video.addEventListener).toHaveBeenCalledWith(
196
169
  'loadedmetadata', jasmine.any(Function), jasmine.anything());
@@ -230,8 +203,7 @@ describe('Playhead', () => {
230
203
  manifest,
231
204
  config,
232
205
  /* startTime= */ 5,
233
- Util.spyFunc(onSeek),
234
- Util.spyFunc(onEvent));
206
+ Util.spyFunc(onSeek));
235
207
 
236
208
  video.on['seeking']();
237
209
  expect(playhead.getTime()).toBe(5);
@@ -249,8 +221,7 @@ describe('Playhead', () => {
249
221
  timeline.getSeekRangeEnd.and.returnValue(60);
250
222
 
251
223
  playhead = new shaka.media.MediaSourcePlayhead(
252
- video, manifest, config, /* startTime= */ 0, Util.spyFunc(onSeek),
253
- Util.spyFunc(onEvent));
224
+ video, manifest, config, /* startTime= */ 0, Util.spyFunc(onSeek));
254
225
 
255
226
  expect(playhead.getTime()).toBe(0);
256
227
  });
@@ -263,8 +234,7 @@ describe('Playhead', () => {
263
234
  timeline.getDuration.and.returnValue(60);
264
235
 
265
236
  playhead = new shaka.media.MediaSourcePlayhead(
266
- video, manifest, config, /* startTime= */ 60, Util.spyFunc(onSeek),
267
- Util.spyFunc(onEvent));
237
+ video, manifest, config, /* startTime= */ 60, Util.spyFunc(onSeek));
268
238
 
269
239
  expect(playhead.getTime()).toBe(59); // duration - durationBackoff
270
240
  expect(video.currentTime).toBe(59); // duration - durationBackoff
@@ -278,8 +248,7 @@ describe('Playhead', () => {
278
248
  timeline.getSeekRangeEnd.and.returnValue(60);
279
249
 
280
250
  playhead = new shaka.media.MediaSourcePlayhead(
281
- video, manifest, config, /* startTime= */ -15, Util.spyFunc(onSeek),
282
- Util.spyFunc(onEvent));
251
+ video, manifest, config, /* startTime= */ -15, Util.spyFunc(onSeek));
283
252
 
284
253
  expect(playhead.getTime()).toBe(45);
285
254
  });
@@ -293,8 +262,7 @@ describe('Playhead', () => {
293
262
  // If the live stream's playback offset time is not available, start
294
263
  // playing from the seek range start time.
295
264
  playhead = new shaka.media.MediaSourcePlayhead(
296
- video, manifest, config, /* startTime= */ -40, Util.spyFunc(onSeek),
297
- Util.spyFunc(onEvent));
265
+ video, manifest, config, /* startTime= */ -40, Util.spyFunc(onSeek));
298
266
 
299
267
  expect(playhead.getTime()).toBe(30);
300
268
  });
@@ -305,8 +273,7 @@ describe('Playhead', () => {
305
273
  manifest,
306
274
  config,
307
275
  /* startTime= */ 5,
308
- Util.spyFunc(onSeek),
309
- Util.spyFunc(onEvent));
276
+ Util.spyFunc(onSeek));
310
277
 
311
278
  expect(video.addEventListener).toHaveBeenCalledWith(
312
279
  'loadedmetadata', jasmine.any(Function), jasmine.anything());
@@ -338,8 +305,7 @@ describe('Playhead', () => {
338
305
  manifest,
339
306
  config,
340
307
  /* startTime= */ null,
341
- Util.spyFunc(onSeek),
342
- Util.spyFunc(onEvent));
308
+ Util.spyFunc(onSeek));
343
309
 
344
310
  expect(video.addEventListener).toHaveBeenCalledWith(
345
311
  'loadedmetadata', jasmine.any(Function), jasmine.anything());
@@ -371,8 +337,7 @@ describe('Playhead', () => {
371
337
  manifest,
372
338
  config,
373
339
  /* startTime= */ 5,
374
- Util.spyFunc(onSeek),
375
- Util.spyFunc(onEvent));
340
+ Util.spyFunc(onSeek));
376
341
 
377
342
  // This has to periodically increment the mock date to allow the onSeeking_
378
343
  // handler to seek, if appropriate.
@@ -531,8 +496,7 @@ describe('Playhead', () => {
531
496
  manifest,
532
497
  config,
533
498
  /* startTime= */ 5,
534
- Util.spyFunc(onSeek),
535
- Util.spyFunc(onEvent));
499
+ Util.spyFunc(onSeek));
536
500
 
537
501
  setMockDate(0);
538
502
  video.on['seeking']();
@@ -580,8 +544,7 @@ describe('Playhead', () => {
580
544
  manifest,
581
545
  config,
582
546
  /* startTime= */ 5,
583
- Util.spyFunc(onSeek),
584
- Util.spyFunc(onEvent));
547
+ Util.spyFunc(onSeek));
585
548
 
586
549
  // First, seek to start time.
587
550
  video.currentTime = 0;
@@ -641,8 +604,7 @@ describe('Playhead', () => {
641
604
  manifest,
642
605
  config,
643
606
  /* startTime= */ 5,
644
- Util.spyFunc(onSeek),
645
- Util.spyFunc(onEvent));
607
+ Util.spyFunc(onSeek));
646
608
  expect(currentTime).toBe(1000);
647
609
  seekCount = 0;
648
610
 
@@ -687,8 +649,7 @@ describe('Playhead', () => {
687
649
  manifest,
688
650
  config,
689
651
  /* startTime= */ 5,
690
- Util.spyFunc(onSeek),
691
- Util.spyFunc(onEvent));
652
+ Util.spyFunc(onSeek));
692
653
 
693
654
  video.on['seeking']();
694
655
  expect(video.currentTime).toBe(5);
@@ -719,8 +680,7 @@ describe('Playhead', () => {
719
680
  manifest,
720
681
  config,
721
682
  /* startTime= */ 5,
722
- Util.spyFunc(onSeek),
723
- Util.spyFunc(onEvent));
683
+ Util.spyFunc(onSeek));
724
684
 
725
685
  video.on['seeking']();
726
686
  expect(video.currentTime).toBe(5);
@@ -754,8 +714,7 @@ describe('Playhead', () => {
754
714
  manifest,
755
715
  config,
756
716
  /* startTime= */ 30,
757
- Util.spyFunc(onSeek),
758
- Util.spyFunc(onEvent));
717
+ Util.spyFunc(onSeek));
759
718
 
760
719
  video.currentTime = 0;
761
720
  video.seeking = true;
@@ -800,8 +759,7 @@ describe('Playhead', () => {
800
759
  manifest,
801
760
  config,
802
761
  /* startTime= */ 30,
803
- Util.spyFunc(onSeek),
804
- Util.spyFunc(onEvent));
762
+ Util.spyFunc(onSeek));
805
763
 
806
764
  /**
807
765
  * Prevent retries on the initial start time seek. This will ensure that
@@ -832,8 +790,6 @@ describe('Playhead', () => {
832
790
  timeline.getSeekRangeStart.and.returnValue(0);
833
791
  timeline.getSeekRangeEnd.and.returnValue(60);
834
792
  timeline.getDuration.and.returnValue(60);
835
-
836
- config.smallGapLimit = 1;
837
793
  });
838
794
 
839
795
  describe('when playing', () => {
@@ -842,7 +798,6 @@ describe('Playhead', () => {
842
798
  buffered: [{start: 0, end: 10}],
843
799
  start: 3,
844
800
  waitingAt: 10,
845
- expectEvent: false,
846
801
  expectedEndTime: 10,
847
802
  });
848
803
 
@@ -850,7 +805,6 @@ describe('Playhead', () => {
850
805
  buffered: [{start: 0, end: 10}, {start: 20, end: 30}],
851
806
  start: 24,
852
807
  waitingAt: 30,
853
- expectEvent: false,
854
808
  expectedEndTime: 30,
855
809
  });
856
810
 
@@ -858,7 +812,6 @@ describe('Playhead', () => {
858
812
  buffered: [{start: 0, end: 10}, {start: 11, end: 20}],
859
813
  start: 5,
860
814
  waitingAt: 10,
861
- expectEvent: false,
862
815
  expectedEndTime: 11,
863
816
  });
864
817
 
@@ -867,7 +820,6 @@ describe('Playhead', () => {
867
820
  [{start: 0, end: 10}, {start: 11, end: 20}, {start: 21, end: 30}],
868
821
  start: 5,
869
822
  waitingAt: 10,
870
- expectEvent: false,
871
823
  expectedEndTime: 11,
872
824
  });
873
825
 
@@ -876,26 +828,15 @@ describe('Playhead', () => {
876
828
  [{start: 0, end: 10}, {start: 11, end: 20}, {start: 21, end: 30}],
877
829
  start: 15,
878
830
  waitingAt: 20,
879
- expectEvent: false,
880
831
  expectedEndTime: 21,
881
832
  });
882
833
  }); // with small gaps
883
834
 
884
835
  describe('with large gaps', () => {
885
- playingTest('will fire an event', {
886
- buffered: [{start: 0, end: 10}, {start: 30, end: 40}],
887
- start: 5,
888
- waitingAt: 10,
889
- expectEvent: true,
890
- expectedEndTime: 10,
891
- });
892
-
893
836
  playingTest('will jump large gaps if set', {
894
837
  buffered: [{start: 0, end: 10}, {start: 30, end: 40}],
895
838
  start: 5,
896
839
  waitingAt: 10,
897
- jumpLargeGaps: true,
898
- expectEvent: true,
899
840
  expectedEndTime: 30,
900
841
  });
901
842
 
@@ -904,8 +845,6 @@ describe('Playhead', () => {
904
845
  [{start: 0, end: 10}, {start: 30, end: 40}, {start: 50, end: 60}],
905
846
  start: 5,
906
847
  waitingAt: 10,
907
- jumpLargeGaps: true,
908
- expectEvent: true,
909
848
  expectedEndTime: 30,
910
849
  });
911
850
 
@@ -914,20 +853,8 @@ describe('Playhead', () => {
914
853
  [{start: 0, end: 10}, {start: 20, end: 30}, {start: 50, end: 60}],
915
854
  start: 24,
916
855
  waitingAt: 30,
917
- jumpLargeGaps: true,
918
- expectEvent: true,
919
856
  expectedEndTime: 50,
920
857
  });
921
-
922
- playingTest('won\'t jump gaps when preventDefault() is called', {
923
- buffered: [{start: 0, end: 10}, {start: 30, end: 40}],
924
- start: 5,
925
- waitingAt: 10,
926
- jumpLargeGaps: true,
927
- preventDefault: true,
928
- expectEvent: true,
929
- expectedEndTime: 10,
930
- });
931
858
  }); // with large gaps
932
859
 
933
860
  /**
@@ -940,20 +867,12 @@ describe('Playhead', () => {
940
867
  video.currentTime = data.start;
941
868
  video.readyState = HTMLMediaElement.HAVE_ENOUGH_DATA;
942
869
 
943
- onEvent.and.callFake((event) => {
944
- if (data.preventDefault) {
945
- event.preventDefault();
946
- }
947
- });
948
-
949
- config.jumpLargeGaps = !!data.jumpLargeGaps;
950
870
  playhead = new shaka.media.MediaSourcePlayhead(
951
871
  video,
952
872
  manifest,
953
873
  config,
954
874
  /* startTime= */ data.start,
955
- Util.spyFunc(onSeek),
956
- Util.spyFunc(onEvent));
875
+ Util.spyFunc(onSeek));
957
876
 
958
877
  jasmine.clock().tick(500);
959
878
  for (let time = data.start; time < data.waitingAt; time++) {
@@ -974,14 +893,11 @@ describe('Playhead', () => {
974
893
  expect(video.currentTime).toBe(time + 0.4);
975
894
  }
976
895
 
977
- expect(onEvent).not.toHaveBeenCalled();
978
-
979
896
  video.currentTime = data.waitingAt;
980
897
  video.readyState = HTMLMediaElement.HAVE_CURRENT_DATA;
981
898
  video.on['waiting']();
982
899
  jasmine.clock().tick(500);
983
900
 
984
- expect(onEvent).toHaveBeenCalledTimes(data.expectEvent ? 1 : 0);
985
901
  expect(video.currentTime).toBe(data.expectedEndTime);
986
902
  });
987
903
  }
@@ -994,7 +910,6 @@ describe('Playhead', () => {
994
910
  start: 4,
995
911
  seekTo: 14,
996
912
  expectedEndTime: 14,
997
- expectEvent: false,
998
913
  });
999
914
 
1000
915
  seekTest('will jump when seeking into gap', {
@@ -1002,7 +917,6 @@ describe('Playhead', () => {
1002
917
  start: 3,
1003
918
  seekTo: 10.4,
1004
919
  expectedEndTime: 11,
1005
- expectEvent: false,
1006
920
  });
1007
921
 
1008
922
  seekTest('won\'t jump multiple buffers', {
@@ -1011,7 +925,6 @@ describe('Playhead', () => {
1011
925
  start: 3,
1012
926
  seekTo: 10.4,
1013
927
  expectedEndTime: 11,
1014
- expectEvent: false,
1015
928
  });
1016
929
 
1017
930
  seekTest('will jump into last range with seeking', {
@@ -1020,7 +933,6 @@ describe('Playhead', () => {
1020
933
  start: 3,
1021
934
  seekTo: 20.5,
1022
935
  expectedEndTime: 21,
1023
- expectEvent: false,
1024
936
  });
1025
937
 
1026
938
  seekTest('treats large gaps as small if playhead near end', {
@@ -1028,36 +940,15 @@ describe('Playhead', () => {
1028
940
  start: 3,
1029
941
  seekTo: 29.2,
1030
942
  expectedEndTime: 30,
1031
- expectEvent: false,
1032
943
  });
1033
944
  }); // with small gaps
1034
945
 
1035
946
  describe('with large gaps', () => {
1036
- seekTest('will raise event', {
1037
- buffered: [{start: 0, end: 10}, {start: 30, end: 40}],
1038
- start: 5,
1039
- seekTo: 12,
1040
- expectedEndTime: 12,
1041
- expectEvent: true,
1042
- });
1043
-
1044
947
  seekTest('will jump large gaps', {
1045
948
  buffered: [{start: 0, end: 10}, {start: 30, end: 40}],
1046
949
  start: 5,
1047
950
  seekTo: 12,
1048
- jumpLargeGaps: true,
1049
951
  expectedEndTime: 30,
1050
- expectEvent: true,
1051
- });
1052
-
1053
- seekTest('won\'t jump if preventDefault() is called', {
1054
- buffered: [{start: 0, end: 10}, {start: 30, end: 40}],
1055
- start: 5,
1056
- seekTo: 12,
1057
- jumpLargeGaps: true,
1058
- preventDefault: true,
1059
- expectedEndTime: 12,
1060
- expectEvent: true,
1061
952
  });
1062
953
  }); // with large gaps
1063
954
  }); // with buffered seeks
@@ -1071,7 +962,6 @@ describe('Playhead', () => {
1071
962
  start: 3,
1072
963
  seekTo: 22,
1073
964
  expectedEndTime: 22,
1074
- expectEvent: false,
1075
965
  });
1076
966
 
1077
967
  // Seeking to the beginning is considered an unbuffered seek even if
@@ -1082,7 +972,6 @@ describe('Playhead', () => {
1082
972
  start: 4,
1083
973
  seekTo: 0,
1084
974
  expectedEndTime: 0.2,
1085
- expectEvent: false,
1086
975
  });
1087
976
 
1088
977
  seekTest('will jump when seeking into gap', {
@@ -1092,7 +981,6 @@ describe('Playhead', () => {
1092
981
  start: 3,
1093
982
  seekTo: 30.2,
1094
983
  expectedEndTime: 31,
1095
- expectEvent: false,
1096
984
  });
1097
985
 
1098
986
  seekTest('will jump when seeking to the end of a range', {
@@ -1102,7 +990,6 @@ describe('Playhead', () => {
1102
990
  start: 3,
1103
991
  seekTo: 30,
1104
992
  expectedEndTime: 31,
1105
- expectEvent: false,
1106
993
  });
1107
994
 
1108
995
  seekTest('won\'t jump when past end', {
@@ -1112,7 +999,6 @@ describe('Playhead', () => {
1112
999
  start: 3,
1113
1000
  seekTo: 34,
1114
1001
  expectedEndTime: 34,
1115
- expectEvent: false,
1116
1002
  });
1117
1003
 
1118
1004
  seekTest('won\'t jump when seeking backwards into buffered range', {
@@ -1122,7 +1008,6 @@ describe('Playhead', () => {
1122
1008
  start: 24,
1123
1009
  seekTo: 4,
1124
1010
  expectedEndTime: 4,
1125
- expectEvent: false,
1126
1011
  });
1127
1012
 
1128
1013
  seekTest('will wait to jump when seeking backwards', {
@@ -1133,7 +1018,6 @@ describe('Playhead', () => {
1133
1018
  start: 24,
1134
1019
  seekTo: 4,
1135
1020
  expectedEndTime: 4,
1136
- expectEvent: false,
1137
1021
  });
1138
1022
 
1139
1023
  seekTest('will jump when seeking backwards into gap', {
@@ -1143,7 +1027,6 @@ describe('Playhead', () => {
1143
1027
  start: 24,
1144
1028
  seekTo: 1.6,
1145
1029
  expectedEndTime: 2,
1146
- expectEvent: false,
1147
1030
  });
1148
1031
  }); // with small gaps
1149
1032
 
@@ -1153,19 +1036,7 @@ describe('Playhead', () => {
1153
1036
  newBuffered: [{start: 20, end: 30}],
1154
1037
  start: 25,
1155
1038
  seekTo: 0,
1156
- jumpLargeGaps: true,
1157
1039
  expectedEndTime: 20,
1158
- expectEvent: true,
1159
- });
1160
-
1161
- seekTest('will raise event', {
1162
- // [0-10], [20-30], [40-50]
1163
- buffered: [{start: 0, end: 10}],
1164
- newBuffered: [{start: 20, end: 30}, {start: 40, end: 50}],
1165
- start: 3,
1166
- seekTo: 32,
1167
- expectedEndTime: 32,
1168
- expectEvent: true,
1169
1040
  });
1170
1041
 
1171
1042
  seekTest('will jump large gaps', {
@@ -1175,20 +1046,6 @@ describe('Playhead', () => {
1175
1046
  start: 3,
1176
1047
  seekTo: 32,
1177
1048
  expectedEndTime: 40,
1178
- jumpLargeGaps: true,
1179
- expectEvent: true,
1180
- });
1181
-
1182
- seekTest('will jump large gaps', {
1183
- // [0-10], [20-30], [40-50]
1184
- buffered: [{start: 0, end: 10}],
1185
- newBuffered: [{start: 20, end: 30}, {start: 40, end: 50}],
1186
- start: 3,
1187
- seekTo: 32,
1188
- expectedEndTime: 32,
1189
- jumpLargeGaps: true,
1190
- preventDefault: true,
1191
- expectEvent: true,
1192
1049
  });
1193
1050
  }); // with large gaps
1194
1051
  }); // with unbuffered seeks
@@ -1199,17 +1056,14 @@ describe('Playhead', () => {
1199
1056
  video.currentTime = 12;
1200
1057
  video.readyState = HTMLMediaElement.HAVE_ENOUGH_DATA;
1201
1058
 
1202
- config.jumpLargeGaps = true;
1203
1059
  playhead = new shaka.media.MediaSourcePlayhead(
1204
1060
  video,
1205
1061
  manifest,
1206
1062
  config,
1207
1063
  /* startTime= */ 12,
1208
- Util.spyFunc(onSeek),
1209
- Util.spyFunc(onEvent));
1064
+ Util.spyFunc(onSeek));
1210
1065
 
1211
1066
  jasmine.clock().tick(500);
1212
- expect(onEvent).not.toHaveBeenCalled();
1213
1067
 
1214
1068
  // Append a segment before seeking.
1215
1069
  playhead.notifyOfBufferingChange();
@@ -1248,14 +1102,12 @@ describe('Playhead', () => {
1248
1102
  },
1249
1103
  });
1250
1104
 
1251
- config.jumpLargeGaps = true;
1252
1105
  playhead = new shaka.media.MediaSourcePlayhead(
1253
1106
  video,
1254
1107
  manifest,
1255
1108
  config,
1256
1109
  /* startTime= */ 0,
1257
- Util.spyFunc(onSeek),
1258
- Util.spyFunc(onEvent));
1110
+ Util.spyFunc(onSeek));
1259
1111
 
1260
1112
  playhead.notifyOfBufferingChange();
1261
1113
  jasmine.clock().tick(500);
@@ -1271,14 +1123,12 @@ describe('Playhead', () => {
1271
1123
  video.readyState = HTMLMediaElement.HAVE_ENOUGH_DATA;
1272
1124
  video.paused = true;
1273
1125
 
1274
- config.jumpLargeGaps = true;
1275
1126
  playhead = new shaka.media.MediaSourcePlayhead(
1276
1127
  video,
1277
1128
  manifest,
1278
1129
  config,
1279
1130
  /* startTime= */ 5,
1280
- Util.spyFunc(onSeek),
1281
- Util.spyFunc(onEvent));
1131
+ Util.spyFunc(onSeek));
1282
1132
 
1283
1133
  playhead.notifyOfBufferingChange();
1284
1134
  jasmine.clock().tick(500);
@@ -1296,14 +1146,12 @@ describe('Playhead', () => {
1296
1146
  video.paused = true;
1297
1147
  video.autoplay = true;
1298
1148
 
1299
- config.jumpLargeGaps = true;
1300
1149
  playhead = new shaka.media.MediaSourcePlayhead(
1301
1150
  video,
1302
1151
  manifest,
1303
1152
  config,
1304
1153
  /* startTime= */ 0,
1305
- Util.spyFunc(onSeek),
1306
- Util.spyFunc(onEvent));
1154
+ Util.spyFunc(onSeek));
1307
1155
 
1308
1156
  playhead.notifyOfBufferingChange();
1309
1157
  jasmine.clock().tick(500);
@@ -1321,14 +1169,12 @@ describe('Playhead', () => {
1321
1169
  video.paused = true;
1322
1170
  video.autoplay = false;
1323
1171
 
1324
- config.jumpLargeGaps = true;
1325
1172
  playhead = new shaka.media.MediaSourcePlayhead(
1326
1173
  video,
1327
1174
  manifest,
1328
1175
  config,
1329
1176
  /* startTime= */ 0,
1330
- Util.spyFunc(onSeek),
1331
- Util.spyFunc(onEvent));
1177
+ Util.spyFunc(onSeek));
1332
1178
 
1333
1179
  playhead.notifyOfBufferingChange();
1334
1180
  jasmine.clock().tick(500);
@@ -1347,23 +1193,14 @@ describe('Playhead', () => {
1347
1193
  video.currentTime = data.start;
1348
1194
  video.readyState = HTMLMediaElement.HAVE_ENOUGH_DATA;
1349
1195
 
1350
- onEvent.and.callFake((event) => {
1351
- if (data.preventDefault) {
1352
- event.preventDefault();
1353
- }
1354
- });
1355
-
1356
- config.jumpLargeGaps = !!data.jumpLargeGaps;
1357
1196
  playhead = new shaka.media.MediaSourcePlayhead(
1358
1197
  video,
1359
1198
  manifest,
1360
1199
  config,
1361
1200
  /* startTime= */ data.start,
1362
- Util.spyFunc(onSeek),
1363
- Util.spyFunc(onEvent));
1201
+ Util.spyFunc(onSeek));
1364
1202
 
1365
1203
  jasmine.clock().tick(500);
1366
- expect(onEvent).not.toHaveBeenCalled();
1367
1204
 
1368
1205
  // Seek to the given position and update ready state.
1369
1206
  video.currentTime = data.seekTo;
@@ -1395,7 +1232,6 @@ describe('Playhead', () => {
1395
1232
  jasmine.clock().tick(250);
1396
1233
  }
1397
1234
 
1398
- expect(onEvent).toHaveBeenCalledTimes(data.expectEvent ? 1 : 0);
1399
1235
  expect(video.currentTime).toBe(data.expectedEndTime);
1400
1236
  });
1401
1237
  }