diff --git a/modules/zedoBidAdapter.js b/modules/zedoBidAdapter.js index d6f75da4ece..970f28e47d5 100644 --- a/modules/zedoBidAdapter.js +++ b/modules/zedoBidAdapter.js @@ -2,10 +2,11 @@ import * as utils from 'src/utils'; import { registerBidder } from 'src/adapters/bidderFactory'; import { BANNER, VIDEO } from 'src/mediaTypes'; import find from 'core-js/library/fn/array/find'; +import { Renderer } from 'src/Renderer'; const BIDDER_CODE = 'zedo'; const URL = '//z2.zedo.com/asw/fmh.json'; -const SECURE_URL = '//z2.zedo.com/asw/fmh.json'; +const SECURE_URL = '//saxp.zedo.com/asw/fmh.json'; const DIM_TYPE = { '7': 'display', '9': 'display', @@ -153,6 +154,8 @@ function newBid(serverBid, creativeBid, bidderRequest) { const bid = { requestId: serverBid.slotId, creativeId: creativeBid.adId, + network: serverBid.network, + adType: creativeBid.creativeDetails.type, dealId: 99999999, currency: 'USD', netRevenue: true, @@ -167,12 +170,21 @@ function newBid(serverBid, creativeBid, bidderRequest) { cpm: (parseInt(creativeBid.cpm) * 0.65) / 1000000, ttl: 3600 }); + const rendererOptions = utils.deepAccess( + bidderRequest, + 'renderer.options' + ); + let rendererUrl = utils.getTopWindowLocation().protocol === 'http:' ? 'http://c14.zedo.com/gecko/beta/fmpbgt.min.js' : 'https://ss3.zedo.com/gecko/beta/fmpbgt.min.js'; + Object.assign(bid, { + adResponse: serverBid, + renderer: getRenderer(bid.adUnitCode, serverBid.slotId, rendererUrl, rendererOptions) + }); } else { Object.assign(bid, { width: creativeBid.width, height: creativeBid.height, cpm: (parseInt(creativeBid.cpm) * 0.6) / 1000000, - ad: creativeBid.creativeDetails.adContent + ad: creativeBid.creativeDetails.adContent, }); } @@ -197,6 +209,39 @@ function getSizes(requestSizes) { return [width, height]; } +function getRenderer(adUnitCode, rendererId, rendererUrl, rendererOptions = {}) { + const renderer = Renderer.install({ + id: rendererId, + url: rendererUrl, + config: rendererOptions, + loaded: false, + }); + + try { + renderer.setRender(videoRenderer); + } catch (err) { + utils.logWarn('Prebid Error calling setRender on renderer', err); + } + + renderer.setEventHandlers({ + impression: () => utils.logMessage('ZEDO video impression'), + loaded: () => utils.logMessage('ZEDO video loaded'), + ended: () => { + utils.logMessage('ZEDO renderer video ended'); + document.querySelector(`#${adUnitCode}`).style.display = 'none'; + } + }); + return renderer; +} + +function videoRenderer(bid) { + // push to render queue + bid.renderer.push(() => { + var rndr = new ZdPBTag(bid.adUnitCode, bid.network, bid.width, bid.height, bid.adType, bid.vastXml); + rndr.renderAd(); + }); +} + function parseMediaType(creativeBid) { const adType = creativeBid.creativeDetails.type; if (adType === 'VAST') { diff --git a/test/spec/modules/zedoBidAdapter_spec.js b/test/spec/modules/zedoBidAdapter_spec.js index 85209edd4c3..abb0a5c97fb 100644 --- a/test/spec/modules/zedoBidAdapter_spec.js +++ b/test/spec/modules/zedoBidAdapter_spec.js @@ -43,7 +43,7 @@ describe('The ZEDO bidding adapter', function () { }, ]; const request = spec.buildRequests(bidRequests, bidderRequest); - expect(request.url).to.match(/^\/\/z2.zedo.com\/asw\/fmh.json/); + expect(request.url).to.match(/^\/\/saxp.zedo.com\/asw\/fmh.json/); expect(request.method).to.equal('GET'); const zedoRequest = request.data; expect(zedoRequest).to.equal('g={"placements":[{"network":20,"channel":0,"width":300,"height":200,"dimension":10,"version":"$prebid.version$","keyword":"","transactionId":"12345667","renderers":[{"name":"display"}]}]}'); @@ -68,7 +68,7 @@ describe('The ZEDO bidding adapter', function () { }, ]; const request = spec.buildRequests(bidRequests, bidderRequest); - expect(request.url).to.match(/^\/\/z2.zedo.com\/asw\/fmh.json/); + expect(request.url).to.match(/^\/\/saxp.zedo.com\/asw\/fmh.json/); expect(request.method).to.equal('GET'); const zedoRequest = request.data; expect(zedoRequest).to.equal('g={"placements":[{"network":20,"channel":0,"width":640,"height":480,"dimension":85,"version":"$prebid.version$","keyword":"","transactionId":"12345667","renderers":[{"name":"Inarticle"}]}]}'); @@ -234,14 +234,18 @@ describe('The ZEDO bidding adapter', function () { }, }] }; + const bids = spec.interpretResponse(response, request); expect(bids).to.have.lengthOf(1); expect(bids[0].requestId).to.equal('ad1d762'); expect(bids[0].cpm).to.equal(0.78); expect(bids[0].width).to.equal('640'); expect(bids[0].height).to.equal('480'); + expect(bids[0].adType).to.equal('VAST'); expect(bids[0].vastXml).to.not.equal(''); expect(bids[0].ad).to.be.an('undefined'); + expect(bids[0].renderer).not.to.be.an('undefined'); + bids[0].renderer.render(bids[0]); }); });