From ec7403e8af83a5d1fbf3548d2d572fd6f9b64b6e Mon Sep 17 00:00:00 2001 From: Rich Snapp Date: Tue, 30 Jan 2018 16:07:16 -0800 Subject: [PATCH] consolidated referrer logic and added pageUrl support from config in rubicon --- modules/rubiconBidAdapter.js | 17 ++++++++++---- test/spec/modules/rubiconBidAdapter_spec.js | 26 +++++++++++++++++++++ 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/modules/rubiconBidAdapter.js b/modules/rubiconBidAdapter.js index ee490e55c15..db47648b31c 100644 --- a/modules/rubiconBidAdapter.js +++ b/modules/rubiconBidAdapter.js @@ -109,13 +109,21 @@ export const spec = { return bidRequests.map(bidRequest => { bidRequest.startTime = new Date().getTime(); + let page_url = config.getConfig('pageUrl'); + if (bidRequest.params.referrer) { + page_url = bidRequest.params.referrer; + } else if (!page_url) { + page_url = utils.getTopWindowUrl(); + } + + page_url = bidRequest.params.secure ? page_url.replace(/^http:/i, 'https:') : page_url; + if (bidRequest.mediaType === 'video') { let params = bidRequest.params; let size = parseSizes(bidRequest); - let page_rf = !params.referrer ? utils.getTopWindowUrl() : params.referrer; let data = { - page_url: params.secure ? page_rf.replace(/^http:/i, 'https:') : page_rf, + page_url, resolution: _getScreenResolution(), account_id: params.accountId, integration: INTEGRATION, @@ -172,8 +180,7 @@ export const spec = { keywords, visitor, inventory, - userId, - referrer: pageUrl + userId } = bidRequest.params; // defaults @@ -210,7 +217,7 @@ export const spec = { data.push( 'rand', Math.random(), - 'rf', !pageUrl ? utils.getTopWindowUrl() : pageUrl + 'rf', page_url ); data = data.concat(_getDigiTrustQueryParams()); diff --git a/test/spec/modules/rubiconBidAdapter_spec.js b/test/spec/modules/rubiconBidAdapter_spec.js index 2ff8d5fe0e3..47a02d4f2a4 100644 --- a/test/spec/modules/rubiconBidAdapter_spec.js +++ b/test/spec/modules/rubiconBidAdapter_spec.js @@ -5,6 +5,7 @@ import { parse as parseQuery } from 'querystring'; import { newBidder } from 'src/adapters/bidderFactory'; import { userSync } from 'src/userSync'; import { config } from 'src/config'; +import * as utils from 'src/utils'; var CONSTANTS = require('src/constants.json'); @@ -159,6 +160,31 @@ describe('the rubicon adapter', () => { }); }); + it('page_url should use params.referrer, config.getConfig("pageUrl"), utils.getTopWindowUrl() in that order', () => { + sandbox.stub(utils, 'getTopWindowUrl', () => 'http://www.prebid.org'); + + let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest); + expect(parseQuery(request.data).rf).to.equal('localhost'); + + delete bidderRequest.bids[0].params.referrer; + [request] = spec.buildRequests(bidderRequest.bids, bidderRequest); + expect(parseQuery(request.data).rf).to.equal('http://www.prebid.org'); + + let origGetConfig = config.getConfig; + sandbox.stub(config, 'getConfig', function(key) { + if (key === 'pageUrl') { + return 'http://www.rubiconproject.com'; + } + return origGetConfig.apply(config, arguments); + }); + [request] = spec.buildRequests(bidderRequest.bids, bidderRequest); + expect(parseQuery(request.data).rf).to.equal('http://www.rubiconproject.com'); + + bidderRequest.bids[0].params.secure = true; + [request] = spec.buildRequests(bidderRequest.bids, bidderRequest); + expect(parseQuery(request.data).rf).to.equal('https://www.rubiconproject.com'); + }); + it('should use rubicon sizes if present (including non-mappable sizes)', () => { var sizesBidderRequest = clone(bidderRequest); sizesBidderRequest.bids[0].params.sizes = [55, 57, 59, 801];