Skip to content

Commit 3ccae48

Browse files
authored
chore(Ads): Create shaka.ads.AbstractAd class to remove duplicate code (shaka-project#9190)
1 parent 79f0512 commit 3ccae48

File tree

8 files changed

+320
-1053
lines changed

8 files changed

+320
-1053
lines changed

build/types/ads

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Ad Insertion Functionality
22

3+
+../../lib/ads/abstract_ad.js
34
+../../lib/ads/ad_manager.js
45
+../../lib/ads/ad_utils.js
56
+../../lib/ads/ads_stats.js

lib/ads/abstract_ad.js

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

0 commit comments

Comments
 (0)