Skip to content

Commit d8f43de

Browse files
authored
Adding Medianet outstream renderer support (#5854)
1 parent 926ccc6 commit d8f43de

File tree

2 files changed

+84
-2
lines changed

2 files changed

+84
-2
lines changed

modules/medianetBidAdapter.js

+43-2
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ import * as utils from '../src/utils.js';
33
import { config } from '../src/config.js';
44
import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
55
import { getRefererInfo } from '../src/refererDetection.js';
6+
import { Renderer } from '../src/Renderer.js';
67

78
const BIDDER_CODE = 'medianet';
89
const BID_URL = 'https://prebid.media.net/rtb/prebid';
10+
const PLAYER_URL = 'https://prebid.media.net/video/bundle.js';
911
const SLOT_VISIBILITY = {
1012
NOT_DETERMINED: 0,
1113
ABOVE_THE_FOLD: 1,
@@ -16,10 +18,14 @@ const EVENTS = {
1618
BID_WON_EVENT_NAME: 'client_bid_won'
1719
};
1820
const EVENT_PIXEL_URL = 'qsearch-a.akamaihd.net/log';
19-
21+
const OUTSTREAM = 'outstream';
2022
let refererInfo = getRefererInfo();
2123

2224
let mnData = {};
25+
26+
window.mnet = window.mnet || {};
27+
window.mnet.queue = window.mnet.queue || [];
28+
2329
mnData.urlData = {
2430
domain: utils.parseUrl(refererInfo.referer).hostname,
2531
page: refererInfo.referer,
@@ -321,6 +327,40 @@ function clearMnData() {
321327
mnData = {};
322328
}
323329

330+
function addRenderer(bid) {
331+
const videoContext = utils.deepAccess(bid, 'context') || '';
332+
const vastTimeout = utils.deepAccess(bid, 'vto');
333+
/* Adding renderer only when the context is Outstream
334+
and the provider has responded with a renderer.
335+
*/
336+
if (videoContext == OUTSTREAM && vastTimeout) {
337+
bid.renderer = newVideoRenderer(bid);
338+
}
339+
}
340+
341+
function newVideoRenderer(bid) {
342+
const renderer = Renderer.install({
343+
url: PLAYER_URL,
344+
});
345+
renderer.setRender(function (bid) {
346+
window.mnet.queue.push(function () {
347+
const obj = {
348+
width: bid.width,
349+
height: bid.height,
350+
vastTimeout: bid.vto,
351+
maxAllowedVastTagRedirects: bid.mavtr,
352+
allowVpaid: bid.avp,
353+
autoPlay: bid.ap,
354+
preload: bid.pl,
355+
mute: bid.mt
356+
}
357+
const adUnitCode = bid.dfp_id;
358+
const divId = utils.getGptSlotInfoForAdUnitCode(adUnitCode).divId || adUnitCode;
359+
window.mnet.mediaNetoutstreamPlayer(bid, divId, obj);
360+
});
361+
});
362+
return renderer;
363+
}
324364
export const spec = {
325365

326366
code: BIDDER_CODE,
@@ -387,9 +427,10 @@ export const spec = {
387427
}
388428
validBids = bids.filter(bid => isValidBid(bid));
389429

430+
validBids.forEach(addRenderer);
431+
390432
return validBids;
391433
},
392-
393434
getUserSyncs: function(syncOptions, serverResponses) {
394435
let cookieSyncUrls = fetchCookieSyncUrls(serverResponses);
395436

test/spec/modules/medianetBidAdapter_spec.js

+41
Original file line numberDiff line numberDiff line change
@@ -952,6 +952,42 @@ let VALID_BID_REQUEST = [{
952952
}
953953
}
954954
},
955+
SERVER_VIDEO_OUTSTREAM_RESPONSE_VALID_BID = {
956+
body: {
957+
'id': 'd90ca32f-3877-424a-b2f2-6a68988df57a',
958+
'bidList': [{
959+
'no_bid': false,
960+
'requestId': '27210feac00e96',
961+
'cpm': 12.00,
962+
'width': 640,
963+
'height': 480,
964+
'ttl': 180,
965+
'creativeId': '370637746',
966+
'netRevenue': true,
967+
'vastXml': '',
968+
'currency': 'USD',
969+
'dfp_id': 'video1',
970+
'mediaType': 'video',
971+
'vto': 5000,
972+
'mavtr': 10,
973+
'avp': true,
974+
'ap': true,
975+
'pl': true,
976+
'mt': true,
977+
'jslt': 3000,
978+
'context': 'outstream'
979+
}],
980+
'ext': {
981+
'csUrl': [{
982+
'type': 'image',
983+
'url': 'http://cs.media.net/cksync.php'
984+
}, {
985+
'type': 'iframe',
986+
'url': 'http://contextual.media.net/checksync.php?&vsSync=1'
987+
}]
988+
}
989+
}
990+
},
955991
SERVER_VALID_BIDS = [{
956992
'no_bid': false,
957993
'requestId': '27210feac00e96',
@@ -1405,4 +1441,9 @@ describe('Media.net bid adapter', function () {
14051441
expect(response).to.deep.equal(undefined);
14061442
});
14071443
});
1444+
1445+
it('context should be outstream', function () {
1446+
let bids = spec.interpretResponse(SERVER_VIDEO_OUTSTREAM_RESPONSE_VALID_BID, []);
1447+
expect(bids[0].context).to.equal('outstream');
1448+
});
14081449
});

0 commit comments

Comments
 (0)