diff --git a/app/modules/ads.js b/app/modules/ads.js index 7f0c92a1709..a0ffcd34938 100644 --- a/app/modules/ads.js +++ b/app/modules/ads.js @@ -192,6 +192,21 @@ class Ads { return this.vastUrlBuilder.build(aspectRatio, slotParams, options); } + /** + * Dispatch adengine event + * + * @param {string} name + * @param {Object} data + * + * @returns {void} + */ + dispatchEvent(name, data) { + const event = document.createEvent('CustomEvent'); + + event.initCustomEvent(`adengine.${name}`, true, true, data || {}); + window.dispatchEvent(event); + } + registerOoyalaTracker(player, params) { if (!this.ooyalaTracker) { console.warn('Can not use Ooyala tracker.'); diff --git a/app/modules/video-players/base.js b/app/modules/video-players/base.js index 80673ebc02a..3938cf258e9 100644 --- a/app/modules/video-players/base.js +++ b/app/modules/video-players/base.js @@ -18,6 +18,7 @@ export default class BasePlayer { this.videoHeight = params.size.height; // Most common video container selector this.containerSelector = '.lightbox-content-inner > iframe'; + this.params.adIndex = 0; } /** diff --git a/app/modules/video-players/ooyala-v4.js b/app/modules/video-players/ooyala-v4.js index 3cbe6f6e41f..f4b0fdb12df 100644 --- a/app/modules/video-players/ooyala-v4.js +++ b/app/modules/video-players/ooyala-v4.js @@ -31,12 +31,15 @@ export default class OoyalaV4Player extends BasePlayer { params.skin.config = skinConfigUrl; super(provider, params); - this.adTrackingParams = params.adTrackingParams; + this.adTrackingParams = params.adTrackingParams || {}; params.onCreate = (player) => { originalOnCreate(player); Ads.getInstance().registerOoyalaTracker(player, this.adTrackingParams); + player.mb.subscribe(window.OO.EVENTS.ADS_PLAYED, 'video-tracker', () => { + this.params.adIndex += 1; + }); }; this.containerId = params.containerId; diff --git a/app/modules/video-players/ooyala-video-ads.js b/app/modules/video-players/ooyala-video-ads.js index 2c78489375e..5f30c85805a 100644 --- a/app/modules/video-players/ooyala-video-ads.js +++ b/app/modules/video-players/ooyala-video-ads.js @@ -69,10 +69,38 @@ export default class OoyalaVideoAds { } IMAAdsManager.addEventListener('loaded', (eventData) => { - const adData = eventData.getAdData(); + const adData = eventData.getAdData(), + currentAd = IMAAdsManager.getCurrentAd(), + adSet = this.params['google-ima-ads-manager'].all_ads; - this.trackingParams.lineItemId = adData.adId; - this.trackingParams.creativeId = adData.creativeId; + let wrapperCreativeId, + wrapperId; + + if (adData) { + this.trackingParams.lineItemId = adData.adId; + this.trackingParams.creativeId = adData.creativeId; + } + + if (currentAd) { + wrapperId = currentAd.getWrapperAdIds(); + if (wrapperId.length) { + this.trackingParams.lineItemId = wrapperId[0]; + } + + wrapperCreativeId = currentAd.getWrapperCreativeIds(); + if (wrapperCreativeId.length) { + this.trackingParams.creativeId = wrapperCreativeId[0]; + } + } + + if (adSet && adSet[this.params.adIndex]) { + Ads.getInstance().dispatchEvent('video.status', { + vastUrl: adSet[this.params.adIndex].tag_url, + creativeId: this.trackingParams.creativeId, + lineItemId: this.trackingParams.lineItemId, + status: 'success' + }); + } }); // that's a hack for autoplay on mobile for VPAID ads