Skip to content

Commit 9e0f00c

Browse files
jgrimesmkendall07
authored andcommitted
Consumable Bid Adapter: Pass GDPR and Prebid version info. Pixel syncs. (prebid#3578)
1 parent b4870e7 commit 9e0f00c

File tree

2 files changed

+31
-16
lines changed

2 files changed

+31
-16
lines changed

modules/consumableBidAdapter.js

+18-15
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,7 @@ export const spec = {
2828
* @return ServerRequest Info describing the request to the server.
2929
*/
3030

31-
buildRequests: function(validBidRequests) {
32-
// Do we need to group by bidder? i.e. to make multiple requests for
33-
// different endpoints.
34-
31+
buildRequests: function(validBidRequests, bidderRequest) {
3532
let ret = {
3633
method: 'POST',
3734
url: '',
@@ -50,14 +47,21 @@ export const spec = {
5047
const data = Object.assign({
5148
placements: [],
5249
time: Date.now(),
53-
user: {},
5450
url: utils.getTopWindowUrl(),
5551
referrer: document.referrer,
56-
enableBotFiltering: true,
57-
includePricingData: true,
58-
parallel: true
52+
source: [{
53+
'name': 'prebidjs',
54+
'version': '$prebid.version$'
55+
}]
5956
}, validBidRequests[0].params);
6057

58+
if (bidderRequest && bidderRequest.gdprConsent) {
59+
data.gdpr = {
60+
consent: bidderRequest.gdprConsent.consentString,
61+
applies: (typeof bidderRequest.gdprConsent.gdprApplies === 'boolean') ? bidderRequest.gdprConsent.gdprApplies : true
62+
};
63+
}
64+
6165
validBidRequests.map(bid => {
6266
const placement = Object.assign({
6367
divName: bid.bidId,
@@ -123,12 +127,16 @@ export const spec = {
123127
return bidResponses;
124128
},
125129

126-
getUserSyncs: function(syncOptions) {
130+
getUserSyncs: function(syncOptions, serverResponses) {
127131
if (syncOptions.iframeEnabled) {
128132
return [{
129133
type: 'iframe',
130134
url: '//sync.serverbid.com/ss/' + siteId + '.html'
131135
}];
136+
}
137+
138+
if (syncOptions.pixelEnabled && serverResponses.length > 0) {
139+
return serverResponses[0].body.pixels;
132140
} else {
133141
utils.logWarn(bidder + ': Please enable iframe based user syncing.');
134142
}
@@ -192,12 +200,7 @@ function getSize(sizes) {
192200
}
193201

194202
function retrieveAd(decision, unitId, unitName) {
195-
let oad = decision.contents && decision.contents[0] && decision.contents[0].body + utils.createTrackPixelHtml(decision.impressionUrl);
196-
let cb = Math.round(new Date().getTime());
197-
let ad = '<script type=\'text/javascript\'>document.write(\'<div id=\"' + unitName + '-' + unitId + '\">\');</script>' + oad;
198-
ad += '<script type=\'text/javascript\'>document.write(\'</div>\');</script>';
199-
ad += '<script type=\'text/javascript\'>document.write(\'<div class=\"' + unitName + '\"></div>\');</script>';
200-
ad += '<script type=\'text/javascript\'>document.write(\'<scr\'+\'ipt type=\"text/javascript\" src=\"https://yummy.consumable.com/' + unitId + '/' + unitName + '/widget/unit.js?cb=' + cb + '\" charset=\"utf-8\" async></scr\'+\'ipt>\');</script>'
203+
let ad = decision.contents && decision.contents[0] && decision.contents[0].body + utils.createTrackPixelHtml(decision.impressionUrl);
201204

202205
return ad;
203206
}

test/spec/modules/consumableBidAdapter_spec.js

+13-1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ const REQUEST = {
4343
'bidderRequestId': '109f2a181342a9',
4444
'auctionId': 'a4713c32-3762-4798-b342-4ab810ca770d'
4545
}],
46+
'gdprConsent': {
47+
'consentString': 'consent-test',
48+
'gdprApplies': true
49+
},
4650
'start': 1487883186070,
4751
'auctionStart': 1487883186069,
4852
'timeout': 3000
@@ -52,6 +56,7 @@ const RESPONSE = {
5256
'headers': null,
5357
'body': {
5458
'user': { 'key': 'ue1-2d33e91b71e74929b4aeecc23f4376f1' },
59+
'pixels': [{ 'type': 'image', 'url': '//sync.serverbid.com/ss/' }],
5560
'decisions': {
5661
'2b0f82502298c9': {
5762
'adId': 2364764,
@@ -206,7 +211,7 @@ describe('Consumable BidAdapter', function () {
206211
});
207212
describe('interpretResponse validation', function () {
208213
it('response should have valid bidderCode', function () {
209-
let bidRequest = spec.buildRequests(REQUEST.bidRequest);
214+
let bidRequest = spec.buildRequests(REQUEST.bidRequest, REQUEST);
210215
let bid = createBid(1, bidRequest.bidRequest[0]);
211216

212217
expect(bid.bidderCode).to.equal('consumable');
@@ -264,5 +269,12 @@ describe('Consumable BidAdapter', function () {
264269

265270
expect(opts.length).to.equal(1);
266271
});
272+
273+
it('should return a sync url if pixel syncs are enabled and some are returned from the server', function () {
274+
let syncOptions = {'pixelEnabled': true};
275+
let opts = spec.getUserSyncs(syncOptions, [RESPONSE]);
276+
277+
expect(opts.length).to.equal(1);
278+
});
267279
});
268280
});

0 commit comments

Comments
 (0)