From bda9e1c74d5b2f2ab46862cc6758a0727b3302eb Mon Sep 17 00:00:00 2001 From: Jaimin Panchal Date: Fri, 5 Oct 2018 11:22:49 -0400 Subject: [PATCH 1/3] render outstream safeframe --- src/secureCreatives.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/secureCreatives.js b/src/secureCreatives.js index 1038afdf46a..005a2a6e78d 100644 --- a/src/secureCreatives.js +++ b/src/secureCreatives.js @@ -53,9 +53,12 @@ function receiveMessage(ev) { } function sendAdToCreative(adObject, remoteDomain, source) { - const { adId, ad, adUrl, width, height } = adObject; - - if (adId) { + const { adId, ad, adUrl, width, height, renderer } = adObject; + // rendering for outstream safeframe + if (renderer && renderer.url) { + const bid = auctionManager.findBidByAdId(adId); + renderer.render(bid); + } else if (adId) { resizeRemoteCreative(adObject); source.postMessage(JSON.stringify({ message: 'Prebid Response', From df52745800757af8cf5d9d6252d6defc1a551f81 Mon Sep 17 00:00:00 2001 From: Jaimin Panchal Date: Tue, 9 Oct 2018 15:28:34 -0400 Subject: [PATCH 2/3] move code to Renderer module --- src/Renderer.js | 9 +++++++++ src/prebid.js | 3 ++- src/secureCreatives.js | 4 ++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/Renderer.js b/src/Renderer.js index 3ef0be5ae4d..4c30ded70bd 100644 --- a/src/Renderer.js +++ b/src/Renderer.js @@ -76,3 +76,12 @@ Renderer.prototype.process = function() { } } }; + +/** + * Render the bid returned by the adapter + * @param {Object} renderer Renderer object installed by adapter + * @param {Object} bid Bid response + */ +export function executeRenderer(renderer, bid) { + renderer.render(bid); +} diff --git a/src/prebid.js b/src/prebid.js index bfc9e31a06c..5a31ad374cd 100644 --- a/src/prebid.js +++ b/src/prebid.js @@ -12,6 +12,7 @@ import { createHook } from 'src/hook'; import { sessionLoader } from 'src/debugging'; import includes from 'core-js/library/fn/array/includes'; import { adunitCounter } from './adUnits'; +import { executeRenderer } from './Renderer'; const $$PREBID_GLOBAL$$ = getGlobal(); const CONSTANTS = require('./constants.json'); @@ -249,7 +250,7 @@ $$PREBID_GLOBAL$$.renderAd = function (doc, id) { utils.insertElement(creativeComment, doc, 'body'); if (renderer && renderer.url) { - renderer.render(bid); + executeRenderer(renderer, bid); } else if ((doc === document && !utils.inIframe()) || mediaType === 'video') { const message = `Error trying to write ad. Ad render call ad id ${id} was prevented from writing to the main document.`; emitAdRenderFail(PREVENT_WRITING_ON_MAIN_DOCUMENT, message, bid); diff --git a/src/secureCreatives.js b/src/secureCreatives.js index 005a2a6e78d..baf69d30b15 100644 --- a/src/secureCreatives.js +++ b/src/secureCreatives.js @@ -9,6 +9,7 @@ import { EVENTS } from './constants'; import { isSlotMatchingAdUnitCode } from './utils'; import { auctionManager } from './auctionManager'; import find from 'core-js/library/fn/array/find'; +import { executeRenderer } from './Renderer'; const BID_WON = EVENTS.BID_WON; @@ -56,8 +57,7 @@ function sendAdToCreative(adObject, remoteDomain, source) { const { adId, ad, adUrl, width, height, renderer } = adObject; // rendering for outstream safeframe if (renderer && renderer.url) { - const bid = auctionManager.findBidByAdId(adId); - renderer.render(bid); + executeRenderer(renderer, adObject); } else if (adId) { resizeRemoteCreative(adObject); source.postMessage(JSON.stringify({ From b5f8225ff423922c8075b35bf59bce4fa22ea1b8 Mon Sep 17 00:00:00 2001 From: Jaimin Panchal Date: Tue, 9 Oct 2018 16:10:30 -0400 Subject: [PATCH 3/3] some more logic to move --- src/Renderer.js | 9 +++++++++ src/prebid.js | 4 ++-- src/secureCreatives.js | 4 ++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/Renderer.js b/src/Renderer.js index 4c30ded70bd..3a156b2b86e 100644 --- a/src/Renderer.js +++ b/src/Renderer.js @@ -77,6 +77,15 @@ Renderer.prototype.process = function() { } }; +/** + * Checks whether creative rendering should be done by Renderer or not. + * @param {Object} renderer Renderer object installed by adapter + * @returns {Boolean} + */ +export function isRendererRequired(renderer) { + return !!(renderer && renderer.url); +} + /** * Render the bid returned by the adapter * @param {Object} renderer Renderer object installed by adapter diff --git a/src/prebid.js b/src/prebid.js index 5a31ad374cd..9d5e0842a34 100644 --- a/src/prebid.js +++ b/src/prebid.js @@ -12,7 +12,7 @@ import { createHook } from 'src/hook'; import { sessionLoader } from 'src/debugging'; import includes from 'core-js/library/fn/array/includes'; import { adunitCounter } from './adUnits'; -import { executeRenderer } from './Renderer'; +import { isRendererRequired, executeRenderer } from './Renderer'; const $$PREBID_GLOBAL$$ = getGlobal(); const CONSTANTS = require('./constants.json'); @@ -249,7 +249,7 @@ $$PREBID_GLOBAL$$.renderAd = function (doc, id) { const creativeComment = document.createComment(`Creative ${bid.creativeId} served by ${bid.bidder} Prebid.js Header Bidding`); utils.insertElement(creativeComment, doc, 'body'); - if (renderer && renderer.url) { + if (isRendererRequired(renderer)) { executeRenderer(renderer, bid); } else if ((doc === document && !utils.inIframe()) || mediaType === 'video') { const message = `Error trying to write ad. Ad render call ad id ${id} was prevented from writing to the main document.`; diff --git a/src/secureCreatives.js b/src/secureCreatives.js index baf69d30b15..415fbc17c63 100644 --- a/src/secureCreatives.js +++ b/src/secureCreatives.js @@ -9,7 +9,7 @@ import { EVENTS } from './constants'; import { isSlotMatchingAdUnitCode } from './utils'; import { auctionManager } from './auctionManager'; import find from 'core-js/library/fn/array/find'; -import { executeRenderer } from './Renderer'; +import { isRendererRequired, executeRenderer } from './Renderer'; const BID_WON = EVENTS.BID_WON; @@ -56,7 +56,7 @@ function receiveMessage(ev) { function sendAdToCreative(adObject, remoteDomain, source) { const { adId, ad, adUrl, width, height, renderer } = adObject; // rendering for outstream safeframe - if (renderer && renderer.url) { + if (isRendererRequired(renderer)) { executeRenderer(renderer, adObject); } else if (adId) { resizeRemoteCreative(adObject);