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