Skip to content

Commit 606c72a

Browse files
author
Michele Nasti
committed
Signal AD_RENDER_FAILED / AD_RENDER_SUCCEEDED events to Prebid (prebid#152)
1 parent 9b37463 commit 606c72a

File tree

2 files changed

+46
-43
lines changed

2 files changed

+46
-43
lines changed

src/renderingManager.js

Lines changed: 37 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -55,44 +55,47 @@ export function renderCrossDomain(win, adId, pubAdServerDomain = '', pubUrl) {
5555
}
5656

5757
if (adObject.message && adObject.message === 'Prebid Response' &&
58-
adObject.adId === adId &&
59-
(adObject.ad || adObject.adUrl)) {
60-
let body = win.document.body;
61-
let ad = adObject.ad;
62-
let url = adObject.adUrl;
63-
let width = adObject.width;
64-
let height = adObject.height;
58+
adObject.adId === adId) {
59+
try {
60+
let body = win.document.body;
61+
let ad = adObject.ad;
62+
let url = adObject.adUrl;
63+
let width = adObject.width;
64+
let height = adObject.height;
6565

66-
if (adObject.mediaType === 'video') {
67-
signalRenderResult(false, {
68-
reason: 'preventWritingOnMainDocument',
69-
message: `Cannot render video ad ${adId}`
70-
});
71-
console.log('Error trying to write ad.');
72-
} else if (ad) {
73-
const iframe = getEmptyIframe(adObject.height, adObject.width);
74-
body.appendChild(iframe);
75-
iframe.contentDocument.open();
76-
iframe.contentDocument.write(ad);
77-
iframe.contentDocument.close();
78-
signalRenderResult(true);
79-
} else if (url) {
80-
const iframe = getEmptyIframe(height, width);
81-
iframe.style.display = 'inline';
82-
iframe.style.overflow = 'hidden';
83-
iframe.src = url;
66+
if (adObject.mediaType === 'video') {
67+
signalRenderResult(false, {
68+
reason: 'preventWritingOnMainDocument',
69+
message: `Cannot render video ad ${adId}`
70+
});
71+
console.log('Error trying to write ad.');
72+
} else if (ad) {
73+
const iframe = getEmptyIframe(adObject.height, adObject.width);
74+
body.appendChild(iframe);
75+
iframe.contentDocument.open();
76+
iframe.contentDocument.write(ad);
77+
iframe.contentDocument.close();
78+
signalRenderResult(true);
79+
} else if (url) {
80+
const iframe = getEmptyIframe(height, width);
81+
iframe.style.display = 'inline';
82+
iframe.style.overflow = 'hidden';
83+
iframe.src = url;
8484

85-
insertElement(iframe, document, 'body');
86-
signalRenderResult(true);
87-
} else {
88-
signalRenderResult(false, {
89-
reason: 'noAd',
90-
message: `No ad for ${adId}`
91-
});
92-
console.log(`Error trying to write ad. No ad for bid response id: ${id}`);
85+
insertElement(iframe, document, 'body');
86+
signalRenderResult(true);
87+
} else {
88+
signalRenderResult(false, {
89+
reason: 'noAd',
90+
message: `No ad for ${adId}`
91+
});
92+
console.log(`Error trying to write ad. No ad markup or adUrl for ${adId}`);
93+
}
94+
} catch (e) {
95+
signalRenderResult(false, { reason: "exception", message: e.message });
96+
console.log(`Error in rendering ad`, e);
9397
}
9498
}
95-
}
9699

97100
function signalRenderResult(success, { reason, message } = {}) {
98101
const payload = {

test/spec/renderingManager_spec.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -89,19 +89,19 @@ describe('renderingManager', function() {
8989
protocol: 'http',
9090
host: 'example.com'
9191
});
92-
iframeStub.returns(mockIframe);
93-
94-
mockWin = merge(mocks.createFakeWindow('http://example.com'), renderingMocks().getWindowObject());
92+
mockWin = merge(mocks.createFakeWindow(ORIGIN), renderingMocks().getWindowObject());
9593
ucTagData = {
9694
adId: '123',
9795
adServerDomain: 'mypub.com',
9896
pubUrl: ORIGIN,
9997
};
98+
eventSource = null;
99+
100100
renderCrossDomain(mockWin, ucTagData.adId, ucTagData.adServerDomain, ucTagData.pubUrl);
101101

102102
});
103103

104-
afterEach(function() {
104+
afterEach(function () {
105105
parseStub.restore();
106106
iframeStub.restore();
107107
triggerPixelSpy.restore();
@@ -110,7 +110,7 @@ describe('renderingManager', function() {
110110
function mockPrebidResponse(msg) {
111111
mockWin.postMessage({
112112
origin: ORIGIN,
113-
message: JSON.stringify(Object.assign({message: 'Prebid Response'}, msg))
113+
message: JSON.stringify(Object.assign({ message: 'Prebid Response' }, msg))
114114
});
115115
}
116116

@@ -147,13 +147,13 @@ describe('renderingManager', function() {
147147
info: {
148148
reason: 'preventWritingOnMainDocument'
149149
}
150-
})
150+
});
151151
});
152152

153153
it('on ads that have no markup or adUrl', () => {
154154
mockPrebidResponse({
155155
adId: '123',
156-
})
156+
});
157157
expectEventMessage({
158158
adId: '123',
159159
event: RENDER_FAILED,
@@ -165,7 +165,7 @@ describe('renderingManager', function() {
165165

166166
it('on exceptions', () => {
167167
iframeStub.callsFake(() => {
168-
throw new Error()
168+
throw new Error();
169169
});
170170
mockPrebidResponse({
171171
adId: '123',
@@ -179,7 +179,7 @@ describe('renderingManager', function() {
179179
reason: 'exception'
180180
}
181181
});
182-
})
182+
});
183183
});
184184
describe('should post AD_RENDER_SUCCEEDED', () => {
185185
it('on ad with markup', () => {

0 commit comments

Comments
 (0)