Skip to content

Commit

Permalink
feat(ads): Ignore ad events with no associated ad (shaka-project#4488)
Browse files Browse the repository at this point in the history
  • Loading branch information
theodab committed Sep 21, 2022
1 parent 5c24410 commit e826eb8
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 9 deletions.
2 changes: 1 addition & 1 deletion externs/ima.js
Expand Up @@ -143,7 +143,7 @@ google.ima.AdsManagerLoadedEvent.Type = {

/** @const */
google.ima.AdEvent = class extends Event {
/** @return {!google.ima.Ad } */
/** @return {?google.ima.Ad} */
getAd() {}
};

Expand Down
29 changes: 21 additions & 8 deletions lib/ads/client_side_ad_manager.js
Expand Up @@ -313,22 +313,25 @@ shaka.ads.ClientSideAdManager = class {

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.PAUSED, (e) => {
goog.asserts.assert(this.ad_ != null, 'Ad should not be null!');
this.ad_.setPaused(true);
convertEventAndSend(e, shaka.ads.AdManager.AD_PAUSED);
if (this.ad_) {
this.ad_.setPaused(true);
convertEventAndSend(e, shaka.ads.AdManager.AD_PAUSED);
}
});

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.RESUMED, (e) => {
goog.asserts.assert(this.ad_ != null, 'Ad should not be null!');
this.ad_.setPaused(false);
convertEventAndSend(e, shaka.ads.AdManager.AD_RESUMED);
if (this.ad_) {
this.ad_.setPaused(false);
convertEventAndSend(e, shaka.ads.AdManager.AD_RESUMED);
}
});

this.eventManager_.listen(this.imaAdsManager_,
google.ima.AdEvent.Type.SKIPPABLE_STATE_CHANGED, (e) => {
goog.asserts.assert(this.ad_ != null, 'Ad should not be null!');
convertEventAndSend(e, shaka.ads.AdManager.AD_SKIP_STATE_CHANGED);
if (this.ad_) {
convertEventAndSend(e, shaka.ads.AdManager.AD_SKIP_STATE_CHANGED);
}
});

this.eventManager_.listen(this.imaAdsManager_,
Expand Down Expand Up @@ -406,6 +409,16 @@ shaka.ads.ClientSideAdManager = class {
'Should have an ads manager at this point!');

const imaAd = e.getAd();
if (!imaAd) {
// Sometimes the IMA SDK will fire a CONTENT_PAUSE_REQUESTED or STARTED
// event with no associated ad object.
// We can't really play an ad in that situation, so just ignore the event.
shaka.log.alwaysWarn(
'The IMA SDK fired a ' + e.type + ' event with no associated ad. ' +
'Unable to play ad!');
return;
}

this.ad_ = new shaka.ads.ClientSideAd(imaAd,
this.imaAdsManager_, this.video_);
const data = new Map()
Expand Down

0 comments on commit e826eb8

Please sign in to comment.