Source: lib/ads/interstitial_ad.js

  1. /*! @license
  2. * Shaka Player
  3. * Copyright 2016 Google LLC
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. goog.provide('shaka.ads.InterstitialAd');
  7. /**
  8. * @implements {shaka.extern.IAd}
  9. * @export
  10. */
  11. shaka.ads.InterstitialAd = class {
  12. /**
  13. * @param {HTMLMediaElement} video
  14. * @param {boolean} isSkippable
  15. * @param {function()} onSkip
  16. * @param {number} sequenceLength
  17. * @param {number} adPosition
  18. */
  19. constructor(video, isSkippable, onSkip, sequenceLength, adPosition) {
  20. /** @private {HTMLMediaElement} */
  21. this.video_ = video;
  22. /** @private {boolean} */
  23. this.isSkippable_ = isSkippable;
  24. /** @private {function()} */
  25. this.onSkip_ = onSkip;
  26. /** @private {number} */
  27. this.sequenceLength_ = sequenceLength;
  28. /** @private {number} */
  29. this.adPosition_ = adPosition;
  30. }
  31. /**
  32. * @override
  33. * @export
  34. */
  35. needsSkipUI() {
  36. return true;
  37. }
  38. /**
  39. * @override
  40. * @export
  41. */
  42. getDuration() {
  43. const duration = this.video_.duration;
  44. if (isNaN(duration)) {
  45. return -1;
  46. }
  47. return duration;
  48. }
  49. /**
  50. * @override
  51. * @export
  52. */
  53. getMinSuggestedDuration() {
  54. return this.getDuration();
  55. }
  56. /**
  57. * @override
  58. * @export
  59. */
  60. getRemainingTime() {
  61. const duration = this.video_.duration;
  62. if (isNaN(duration)) {
  63. return -1;
  64. }
  65. return duration - this.video_.currentTime;
  66. }
  67. /**
  68. * @override
  69. * @export
  70. */
  71. isPaused() {
  72. return this.video_.paused;
  73. }
  74. /**
  75. * @override
  76. * @export
  77. */
  78. isSkippable() {
  79. return this.isSkippable_;
  80. }
  81. /**
  82. * @override
  83. * @export
  84. */
  85. getTimeUntilSkippable() {
  86. if (this.isSkippable_) {
  87. return 0;
  88. }
  89. return Math.max(this.getRemainingTime(), 0);
  90. }
  91. /**
  92. * @override
  93. * @export
  94. */
  95. canSkipNow() {
  96. return this.getTimeUntilSkippable() == 0;
  97. }
  98. /**
  99. * @override
  100. * @export
  101. */
  102. skip() {
  103. this.onSkip_();
  104. }
  105. /**
  106. * @override
  107. * @export
  108. */
  109. pause() {
  110. return this.video_.pause();
  111. }
  112. /**
  113. * @override
  114. * @export
  115. */
  116. play() {
  117. return this.video_.play();
  118. }
  119. /**
  120. * @override
  121. * @export
  122. */
  123. getVolume() {
  124. return this.video_.volume;
  125. }
  126. /**
  127. * @override
  128. * @export
  129. */
  130. setVolume(volume) {
  131. this.video_.volume = volume;
  132. }
  133. /**
  134. * @override
  135. * @export
  136. */
  137. isMuted() {
  138. return this.video_.muted;
  139. }
  140. /**
  141. * @override
  142. * @export
  143. */
  144. isLinear() {
  145. return true;
  146. }
  147. /**
  148. * @override
  149. * @export
  150. */
  151. resize(width, height) {
  152. // Nothing
  153. }
  154. /**
  155. * @override
  156. * @export
  157. */
  158. setMuted(muted) {
  159. this.video_.muted = muted;
  160. }
  161. /**
  162. * @override
  163. * @export
  164. */
  165. getSequenceLength() {
  166. return this.sequenceLength_;
  167. }
  168. /**
  169. * @override
  170. * @export
  171. */
  172. getPositionInSequence() {
  173. return this.adPosition_;
  174. }
  175. /**
  176. * @override
  177. * @export
  178. */
  179. getTitle() {
  180. return '';
  181. }
  182. /**
  183. * @override
  184. * @export
  185. */
  186. getDescription() {
  187. return '';
  188. }
  189. /**
  190. * @override
  191. * @export
  192. */
  193. getVastMediaBitrate() {
  194. return 0;
  195. }
  196. /**
  197. * @override
  198. * @export
  199. */
  200. getVastMediaHeight() {
  201. return 0;
  202. }
  203. /**
  204. * @override
  205. * @export
  206. */
  207. getVastMediaWidth() {
  208. return 0;
  209. }
  210. /**
  211. * @override
  212. * @export
  213. */
  214. getAdId() {
  215. return '';
  216. }
  217. /**
  218. * @override
  219. * @export
  220. */
  221. getCreativeAdId() {
  222. return '';
  223. }
  224. /**
  225. * @override
  226. * @export
  227. */
  228. getAdvertiserName() {
  229. return '';
  230. }
  231. /**
  232. * @override
  233. * @export
  234. */
  235. getMediaUrl() {
  236. return null;
  237. }
  238. /**
  239. * @override
  240. * @export
  241. */
  242. getTimeOffset() {
  243. return 0;
  244. }
  245. /**
  246. * @override
  247. * @export
  248. */
  249. getPodIndex() {
  250. return 0;
  251. }
  252. /**
  253. * @override
  254. * @export
  255. */
  256. release() {
  257. this.video_ = null;
  258. }
  259. };