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