diff --git a/externs/ima.js b/externs/ima.js index 0b1e755095..685881b9ab 100644 --- a/externs/ima.js +++ b/externs/ima.js @@ -173,6 +173,24 @@ google.ima.Ad = class { /** @return {string} */ getDescription() {} + + /** @return {number} */ + getVastMediaBitrate() {} + + /** @return {number} */ + getVastMediaHeight() {} + + /** @return {number} */ + getVastMediaWidth() {} + + /** @return {string} */ + getAdId() {} + + /** @return {string} */ + getCreativeAdId() {} + + /** @return {?string} */ + getMediaUrl() {} }; @@ -183,6 +201,9 @@ google.ima.AdPodInfo = class { /** @return {number} */ getTotalAds() {} + + /** @return {number} */ + getTimeOffset() {} }; /** @const */ @@ -401,6 +422,18 @@ google.ima.dai.api.Ad = class { /** @return {string} */ getDescription() {} + + /** @return {number} */ + getVastMediaHeight() {} + + /** @return {number} */ + getVastMediaWidth() {} + + /** @return {string} */ + getAdId() {} + + /** @return {string} */ + getCreativeAdId() {} }; @@ -411,6 +444,9 @@ google.ima.dai.api.AdPodInfo = class { /** @return {number} */ getTotalAds() {} + + /** @return {number} */ + getTimeOffset() {} }; diff --git a/externs/shaka/ads.js b/externs/shaka/ads.js index cf7d129887..3c51ad15e0 100644 --- a/externs/shaka/ads.js +++ b/externs/shaka/ads.js @@ -246,4 +246,44 @@ shaka.extern.IAd = class { * @return {string} */ getDescription() {} + + /** + * @return {number} + */ + getVastMediaBitrate() {} + + /** + * @return {number} + */ + getVastMediaHeight() {} + + /** + * @return {number} + */ + getVastMediaWidth() {} + + /** + * @return {string} + */ + getAdId() {} + + /** + * @return {string} + */ + getCreativeAdId() {} + + /** + * @return {string} + */ + getAdvertiserName() {} + + /** + * @return {?string} + */ + getMediaUrl() {} + + /** + * @return {number} + */ + getTimeOffset() {} }; diff --git a/lib/ads/client_side_ad.js b/lib/ads/client_side_ad.js index 2b54da55a5..739e0e90a5 100644 --- a/lib/ads/client_side_ad.js +++ b/lib/ads/client_side_ad.js @@ -252,6 +252,77 @@ shaka.ads.ClientSideAd = class { return this.ad_.getDescription(); } + /** + * @override + * @export + */ + getVastMediaBitrate() { + return this.ad_.getVastMediaBitrate(); + } + + /** + * @override + * @export + */ + getVastMediaHeight() { + return this.ad_.getVastMediaHeight(); + } + + /** + * @override + * @export + */ + getVastMediaWidth() { + return this.ad_.getVastMediaWidth(); + } + + /** + * @override + * @export + */ + getAdId() { + return this.ad_.getAdId(); + } + + /** + * @override + * @export + */ + getCreativeAdId() { + return this.ad_.getCreativeAdId(); + } + + /** + * @override + * @export + */ + getAdvertiserName() { + return this.ad_.getAdvertiserName(); + } + + /** + * @override + * @export + */ + getMediaUrl() { + return this.ad_.getMediaUrl(); + } + + /** + * @override + * @export + */ + getTimeOffset() { + const podInfo = this.ad_.getAdPodInfo(); + if (podInfo == null) { + // Defaults to 0 if this ad is not part of a pod, or the pod is not part + // of an ad playlist. + return 0; + } + + return podInfo.getTimeOffset(); + } + /** * @override * @export diff --git a/lib/ads/server_side_ad.js b/lib/ads/server_side_ad.js index 12aa2db89a..568e4cb7e6 100644 --- a/lib/ads/server_side_ad.js +++ b/lib/ads/server_side_ad.js @@ -221,6 +221,77 @@ shaka.ads.ServerSideAd = class { return this.ad_.getDescription(); } + /** + * @override + * @export + */ + getVastMediaBitrate() { + return 0; + } + + /** + * @override + * @export + */ + getVastMediaHeight() { + return this.ad_.getVastMediaHeight(); + } + + /** + * @override + * @export + */ + getVastMediaWidth() { + return this.ad_.getVastMediaWidth(); + } + + /** + * @override + * @export + */ + getAdId() { + return this.ad_.getAdId(); + } + + /** + * @override + * @export + */ + getCreativeAdId() { + return this.ad_.getCreativeAdId(); + } + + /** + * @override + * @export + */ + getAdvertiserName() { + return this.ad_.getAdvertiserName(); + } + + /** + * @override + * @export + */ + getMediaUrl() { + return null; + } + + /** + * @override + * @export + */ + getTimeOffset() { + const podInfo = this.ad_.getAdPodInfo(); + if (podInfo == null) { + // Defaults to 0 if this ad is not part of a pod, or the pod is not part + // of an ad playlist. + return 0; + } + + return podInfo.getTimeOffset(); + } + /** * @override * @export diff --git a/test/test/util/fake_ad.js b/test/test/util/fake_ad.js index dbd9fb774d..a9e4d59b6a 100644 --- a/test/test/util/fake_ad.js +++ b/test/test/util/fake_ad.js @@ -40,6 +40,30 @@ shaka.test.FakeAd = class { /** @private {string} */ this.description_ = 'Test Description'; + + /** @private {number} */ + this.vastMediaBitrate_ = 128; + + /** @private {number} */ + this.vastMediaHeight_ = 720; + + /** @private {number} */ + this.vastMediaWidth_ = 1280; + + /** @private {string} */ + this.adId_ = 'Test Ad ID'; + + /** @private {string} */ + this.creativeAdId_ = 'Test Creative Ad ID'; + + /** @private {string} */ + this.advertiserName_ = ''; + + /** @private {string} */ + this.mediaUrl_ = 'fake'; + + /** @private {number} */ + this.timeOffsetInPod_ = 1; } /** @@ -212,6 +236,70 @@ shaka.test.FakeAd = class { return this.description_; } + /** + * @override + * @export + */ + getVastMediaBitrate() { + return this.vastMediaBitrate_; + } + + /** + * @override + * @export + */ + getVastMediaHeight() { + return this.vastMediaHeight_; + } + + /** + * @override + * @export + */ + getVastMediaWidth() { + return this.vastMediaWidth_; + } + + /** + * @override + * @export + */ + getAdId() { + return this.adId_; + } + + /** + * @override + * @export + */ + getCreativeAdId() { + return this.creativeAdId_; + } + + /** + * @override + * @export + */ + getAdvertiserName() { + return this.advertiserName_; + } + + /** + * @override + * @export + */ + getMediaUrl() { + return this.mediaUrl_; + } + + /** + * @override + * @export + */ + getTimeOffset() { + return this.timeOffsetInPod_; + } + /** * @override * @export