diff --git a/modules/33acrossBidAdapter.js b/modules/33acrossBidAdapter.js index 498e6cf8634..0095b4fb768 100644 --- a/modules/33acrossBidAdapter.js +++ b/modules/33acrossBidAdapter.js @@ -195,7 +195,7 @@ function _buildRequestParams(bidRequests, bidderRequest) { const uspConsent = bidderRequest && bidderRequest.uspConsent; - const pageUrl = (bidderRequest && bidderRequest.refererInfo) ? (bidderRequest.refererInfo.referer) : (undefined); + const pageUrl = bidderRequest?.refererInfo?.page adapterState.uniqueSiteIds = bidRequests.map(req => req.params.siteId).filter(uniques); diff --git a/modules/a4gBidAdapter.js b/modules/a4gBidAdapter.js index 03f9d6fd726..f0c7a5f5af1 100644 --- a/modules/a4gBidAdapter.js +++ b/modules/a4gBidAdapter.js @@ -44,7 +44,7 @@ export const spec = { let data = { [IFRAME_PARAM_NAME]: 0, - [LOCATION_PARAM_NAME]: (bidderRequest.refererInfo && bidderRequest.refererInfo.referer) ? bidderRequest.refererInfo.referer : window.location.href, + [LOCATION_PARAM_NAME]: bidderRequest.refererInfo?.page, [SIZE_PARAM_NAME]: sizeParams.join(ARRAY_PARAM_SEPARATOR), [ID_PARAM_NAME]: idParams.join(ARRAY_PARAM_SEPARATOR), [ZONE_ID_PARAM_NAME]: zoneIds.join(ARRAY_PARAM_SEPARATOR) diff --git a/modules/ablidaBidAdapter.js b/modules/ablidaBidAdapter.js index cb4f4ef2724..9e322ba449b 100644 --- a/modules/ablidaBidAdapter.js +++ b/modules/ablidaBidAdapter.js @@ -45,7 +45,8 @@ export const spec = { sizes: sizes, bidId: bidRequest.bidId, categories: bidRequest.params.categories, - referer: bidderRequest.refererInfo.referer, + // TODO: should referer be 'ref'? + referer: bidderRequest.refererInfo.page, jaySupported: jaySupported, device: device, adapterVersion: 5, diff --git a/modules/adWMGBidAdapter.js b/modules/adWMGBidAdapter.js index 7bf6c703a55..12dc36d694c 100644 --- a/modules/adWMGBidAdapter.js +++ b/modules/adWMGBidAdapter.js @@ -27,9 +27,10 @@ export const spec = { buildRequests: (validBidRequests, bidderRequest) => { const timeout = bidderRequest.timeout || 0; const debug = config.getConfig('debug') || false; - const referrer = bidderRequest.refererInfo.referer; + // TODO: is 'page' the right value here? + const referrer = bidderRequest.refererInfo.page; const locale = window.navigator.language && window.navigator.language.length > 0 ? window.navigator.language.substr(0, 2) : ''; - const domain = config.getConfig('publisherDomain') || (window.location && window.location.host ? window.location.host : ''); + const domain = bidderRequest.refererInfo.domain || ''; const ua = window.navigator.userAgent.toLowerCase(); const additional = spec.parseUserAgent(ua); diff --git a/modules/adagioBidAdapter.js b/modules/adagioBidAdapter.js index bede4549c8b..a76046ad2db 100644 --- a/modules/adagioBidAdapter.js +++ b/modules/adagioBidAdapter.js @@ -19,14 +19,13 @@ import { logInfo, logWarn, mergeDeep, - parseUrl } from '../src/utils.js'; import {config} from '../src/config.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {loadExternalScript} from '../src/adloader.js'; import {verify} from 'criteo-direct-rsa-validate/build/verify.js'; import {getStorageManager} from '../src/storageManager.js'; -import {getRefererInfo} from '../src/refererDetection.js'; +import {getRefererInfo, parseDomain} from '../src/refererDetection.js'; import {createEidsArray} from './userId/eids.js'; import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js'; import {Renderer} from '../src/Renderer.js'; @@ -270,12 +269,11 @@ function getDevice() { function getSite(bidderRequest) { const { refererInfo } = bidderRequest; - const url = parseUrl(refererInfo.referer); - return { - domain: url.hostname || '', - page: refererInfo.referer || '', - referrer: canAccessTopWindow() ? getWindowTop().document.referrer || '' : getWindowSelf().document.referrer || '', + // TODO: do these fallbacks make sense? + domain: refererInfo.domain || parseDomain(refererInfo.topmostLocation) || '', + page: refererInfo.page || refererInfo.topmostLocation || '', + referrer: refererInfo.ref || getWindowSelf().document.referrer || '', top: refererInfo.reachedTop }; }; diff --git a/modules/adbookpspBidAdapter.js b/modules/adbookpspBidAdapter.js index de8a3598be1..198441975d8 100644 --- a/modules/adbookpspBidAdapter.js +++ b/modules/adbookpspBidAdapter.js @@ -123,9 +123,9 @@ function buildRequest(validBidRequests, bidderRequest) { id: bidderRequest.bidderRequestId, tmax: bidderRequest.timeout, site: { - domain: window.location.hostname, - page: window.location.href, - ref: bidderRequest.refererInfo.referer, + domain: bidderRequest.refererInfo.domain, + page: bidderRequest.refererInfo.page, + ref: bidderRequest.refererInfo.ref, }, source: buildSource(validBidRequests, bidderRequest), device: buildDevice(), diff --git a/modules/addefendBidAdapter.js b/modules/addefendBidAdapter.js index dcc453ef35a..f0a6852b084 100644 --- a/modules/addefendBidAdapter.js +++ b/modules/addefendBidAdapter.js @@ -21,7 +21,8 @@ export const spec = { pageId: false, gdpr_applies: bidderRequest.gdprConsent && bidderRequest.gdprConsent.gdprApplies ? bidderRequest.gdprConsent.gdprApplies : 'true', gdpr_consent: bidderRequest.gdprConsent && bidderRequest.gdprConsent.consentString ? bidderRequest.gdprConsent.consentString : '', - referer: bidderRequest.refererInfo.referer, + // TODO: is 'page' the correct item here? + referer: bidderRequest.refererInfo.page, bids: [], }; diff --git a/modules/adfBidAdapter.js b/modules/adfBidAdapter.js index 0d2c37e40b7..0b9c10bb38a 100644 --- a/modules/adfBidAdapter.js +++ b/modules/adfBidAdapter.js @@ -1,15 +1,11 @@ // jshint esversion: 6, es3: false, node: true 'use strict'; -import { - registerBidder -} from '../src/adapters/bidderFactory.js'; -import { - NATIVE, BANNER, VIDEO -} from '../src/mediaTypes.js'; -import { mergeDeep, _map, deepAccess, parseSizesInput, deepSetValue } from '../src/utils.js'; -import { config } from '../src/config.js'; -import { Renderer } from '../src/Renderer.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js'; +import {_map, deepAccess, deepSetValue, mergeDeep, parseSizesInput} from '../src/utils.js'; +import {config} from '../src/config.js'; +import {Renderer} from '../src/Renderer.js'; const { getConfig } = config; @@ -81,7 +77,7 @@ export const spec = { } if (!site.page) { - site.page = bidderRequest.refererInfo.referer; + site.page = bidderRequest.refererInfo.page; } } diff --git a/modules/adgenerationBidAdapter.js b/modules/adgenerationBidAdapter.js index e0d3a881cad..94527c5d051 100644 --- a/modules/adgenerationBidAdapter.js +++ b/modules/adgenerationBidAdapter.js @@ -49,7 +49,8 @@ export const spec = { if (!validReq.mediaTypes || !validReq.mediaTypes.native) { data = tryAppendQueryString(data, 'imark', '1'); } - data = tryAppendQueryString(data, 'tp', bidderRequest.refererInfo.referer); + // TODO: is 'page' the right value here? + data = tryAppendQueryString(data, 'tp', bidderRequest.refererInfo.page); if (isIos()) { const hyperId = getHyperId(validReq); if (hyperId != null) { diff --git a/modules/adhashBidAdapter.js b/modules/adhashBidAdapter.js index 7f5af047993..977d161b214 100644 --- a/modules/adhashBidAdapter.js +++ b/modules/adhashBidAdapter.js @@ -103,7 +103,8 @@ export const spec = { const bidRequests = []; let referrer = ''; if (bidderRequest && bidderRequest.refererInfo) { - referrer = bidderRequest.refererInfo.referer; + // TODO: is 'page' the right value here? + referrer = bidderRequest.refererInfo.page; } for (var i = 0; i < validBidRequests.length; i++) { var index = Math.floor(Math.random() * validBidRequests[i].sizes.length); diff --git a/modules/adheseBidAdapter.js b/modules/adheseBidAdapter.js index 145b5605bc2..2d1426a2cda 100644 --- a/modules/adheseBidAdapter.js +++ b/modules/adheseBidAdapter.js @@ -26,7 +26,8 @@ export const spec = { const adheseConfig = config.getConfig('adhese'); const gdprParams = (gdprConsent && gdprConsent.consentString) ? { xt: [gdprConsent.consentString] } : {}; - const refererParams = (refererInfo && refererInfo.referer) ? { xf: [base64urlEncode(refererInfo.referer)] } : {}; + // TODO: is 'page' the right value here? + const refererParams = (refererInfo && refererInfo.page) ? { xf: [base64urlEncode(refererInfo.page)] } : {}; const globalCustomParams = (adheseConfig && adheseConfig.globalTargets) ? cleanTargets(adheseConfig.globalTargets) : {}; const commonParams = { ...globalCustomParams, ...gdprParams, ...refererParams }; const vastContentAsUrl = !(adheseConfig && adheseConfig.vastContentAsUrl == false); diff --git a/modules/adkernelAdnAnalyticsAdapter.js b/modules/adkernelAdnAnalyticsAdapter.js index de5d59ca6f8..d4aa3b035e0 100644 --- a/modules/adkernelAdnAnalyticsAdapter.js +++ b/modules/adkernelAdnAnalyticsAdapter.js @@ -381,6 +381,7 @@ export function ExpiringQueue(callback, ttl) { } } +// TODO: this should reuse logic from refererDetection function getNavigationInfo() { try { return getLocationAndReferrer(self.top); diff --git a/modules/adkernelAdnBidAdapter.js b/modules/adkernelAdnBidAdapter.js index 39f7b9fd2b2..4612310a9a4 100644 --- a/modules/adkernelAdnBidAdapter.js +++ b/modules/adkernelAdnBidAdapter.js @@ -1,4 +1,4 @@ -import { deepAccess, parseSizesInput, isArray, deepSetValue, parseUrl, isStr, isNumber, logInfo } from '../src/utils.js'; +import { deepAccess, parseSizesInput, isArray, deepSetValue, isStr, isNumber, logInfo } from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; import {config} from '../src/config.js'; @@ -10,7 +10,7 @@ const DEFAULT_APIS = [1, 2]; const GVLID = 14; function isRtbDebugEnabled(refInfo) { - return refInfo.referer.indexOf('adk_debug=true') !== -1; + return refInfo.topmostLocation?.indexOf('adk_debug=true') !== -1; } function buildImp(bidRequest) { @@ -83,13 +83,10 @@ function buildRequestParams(tags, bidderRequest) { } function buildSite(refInfo) { - let loc = parseUrl(refInfo.referer); - let result = { - page: `${loc.protocol}://${loc.hostname}${loc.pathname}`, - secure: ~~(loc.protocol === 'https') - }; - if (self === top && document.referrer) { - result.ref = document.referrer; + const result = { + page: refInfo.page, + secure: ~~(refInfo.page && refInfo.page.startsWith('https')), + ref: refInfo.ref } let keywords = document.getElementsByTagName('meta')['keywords']; if (keywords && keywords.content) { diff --git a/modules/adkernelBidAdapter.js b/modules/adkernelBidAdapter.js index 73464d46219..da8633ba8d0 100644 --- a/modules/adkernelBidAdapter.js +++ b/modules/adkernelBidAdapter.js @@ -7,7 +7,6 @@ import { deepSetValue, getAdUnitSizes, getDNT, - inIframe, isArray, isArrayOfNums, isEmpty, @@ -15,8 +14,7 @@ import { isPlainObject, isStr, mergeDeep, - parseGPTSingleSizeArrayToRtbSize, - parseUrl + parseGPTSingleSizeArrayToRtbSize } from '../src/utils.js'; import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; @@ -226,7 +224,7 @@ registerBidder(spec); * @param refererInfo {refererInfo} */ function groupImpressionsByHostZone(bidRequests, refererInfo) { - let secure = (refererInfo && refererInfo.referer.indexOf('https:') === 0); + let secure = (refererInfo && refererInfo.page?.indexOf('https:') === 0); return Object.values( bidRequests.map(bidRequest => buildImp(bidRequest, secure)) .reduce((acc, curr, index) => { @@ -535,14 +533,13 @@ function getLanguage() { * Creates site description object */ function createSite(refInfo, fpd) { - let url = parseUrl(refInfo.referer); let site = { - 'domain': url.hostname, - 'page': `${url.protocol}://${url.hostname}${url.pathname}` + 'domain': refInfo.domain, + 'page': refInfo.page }; mergeDeep(site, fpd.site); - if (!inIframe() && document.referrer) { - site.ref = document.referrer; + if (refInfo.ref != null) { + site.ref = refInfo.ref; } else { delete site.ref; } diff --git a/modules/adlooxAnalyticsAdapter.js b/modules/adlooxAnalyticsAdapter.js index 095fb917597..a26a5e507e6 100644 --- a/modules/adlooxAnalyticsAdapter.js +++ b/modules/adlooxAnalyticsAdapter.js @@ -61,7 +61,7 @@ MACRO['creatype'] = function(b, c) { }; MACRO['pageurl'] = function(b, c) { const refererInfo = getRefererInfo(); - return (refererInfo.canonicalUrl || refererInfo.referer || '').substr(0, 300).split(/[?#]/)[0]; + return (refererInfo.page || '').substr(0, 300).split(/[?#]/)[0]; }; MACRO['gpid'] = function(b, c) { const adUnit = find(auctionManager.getAdUnits(), a => b.adUnitCode === a.code); diff --git a/modules/adlooxRtdProvider.js b/modules/adlooxRtdProvider.js index 30067262d6b..8862ac8ac47 100644 --- a/modules/adlooxRtdProvider.js +++ b/modules/adlooxRtdProvider.js @@ -304,7 +304,7 @@ function getBidRequestData(reqBidsConfigObj, callback, config, userConsent) { [ 'imp', config.params.imps ], [ 'fc_ip', config.params.freqcap_ip ], [ 'fc_ipua', config.params.freqcap_ipua ], - [ 'pn', (refererInfo.canonicalUrl || refererInfo.referer || '').substr(0, 300).split(/[?#]/)[0] ] + [ 'pn', (refererInfo.page || '').substr(0, 300).split(/[?#]/)[0] ] ]; if (!adUnits.length) { diff --git a/modules/admanBidAdapter.js b/modules/admanBidAdapter.js index 21bcb6cee26..4d47c4699ab 100644 --- a/modules/admanBidAdapter.js +++ b/modules/admanBidAdapter.js @@ -65,8 +65,9 @@ export const spec = { buildRequests: (validBidRequests = [], bidderRequest) => { let winTop = window; let location; + // TODO: this odd try-catch block was copied in several adapters; it doesn't seem to be correct for cross-origin try { - location = new URL(bidderRequest.refererInfo.referer) + location = new URL(bidderRequest.refererInfo.page) winTop = window.top; } catch (e) { location = winTop.location; diff --git a/modules/admixerBidAdapter.js b/modules/admixerBidAdapter.js index f6301fba56c..b2f9c09aa84 100644 --- a/modules/admixerBidAdapter.js +++ b/modules/admixerBidAdapter.js @@ -39,8 +39,9 @@ export const spec = { if (bidderRequest) { const {bidderCode} = bidderRequest; endpointUrl = config.getConfig(`${bidderCode}.endpoint_url`); - if (bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { - payload.referrer = encodeURIComponent(bidderRequest.refererInfo.referer); + // TODO: is 'page' the right value here? + if (bidderRequest.refererInfo?.page) { + payload.referrer = encodeURIComponent(bidderRequest.refererInfo.page); } if (bidderRequest.gdprConsent) { payload.gdprConsent = { diff --git a/modules/adnuntiusBidAdapter.js b/modules/adnuntiusBidAdapter.js index 9c37d68d272..fed69c48d18 100644 --- a/modules/adnuntiusBidAdapter.js +++ b/modules/adnuntiusBidAdapter.js @@ -81,7 +81,7 @@ export const spec = { networks[network] = networks[network] || {}; networks[network].adUnits = networks[network].adUnits || []; - if (bidderRequest && bidderRequest.refererInfo) networks[network].context = bidderRequest.refererInfo.referer; + if (bidderRequest && bidderRequest.refererInfo) networks[network].context = bidderRequest.refererInfo.page; if (adnMeta) networks[network].metaData = adnMeta; networks[network].adUnits.push({ ...targeting, auId: bid.params.auId, targetId: bid.bidId }); } diff --git a/modules/adotBidAdapter.js b/modules/adotBidAdapter.js index ac49f7ae32d..75dcef02b59 100644 --- a/modules/adotBidAdapter.js +++ b/modules/adotBidAdapter.js @@ -4,14 +4,13 @@ import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js'; import {isArray, isBoolean, isFn, isPlainObject, isStr, logError, replaceAuctionPrice} from '../src/utils.js'; import {find} from '../src/polyfill.js'; import {config} from '../src/config.js'; -import { OUTSTREAM } from '../src/video.js'; +import {OUTSTREAM} from '../src/video.js'; const BIDDER_CODE = 'adot'; const ADAPTER_VERSION = 'v2.0.0'; const BID_METHOD = 'POST'; const BIDDER_URL = 'https://dsp.adotmob.com/headerbidding{PUBLISHER_PATH}/bidrequest'; const REQUIRED_VIDEO_PARAMS = ['mimes', 'protocols']; -const DOMAIN_REGEX = new RegExp('//([^/]*)'); const FIRST_PRICE = 1; const IMP_BUILDER = { banner: buildBanner, video: buildVideo, native: buildNative }; const NATIVE_PLACEMENTS = { @@ -43,19 +42,6 @@ function tryParse(data) { } } -/** - * Extract domain from given url - * - * @param {string} url - * @returns {string|null} Extracted domain - */ -function extractDomainFromURL(url) { - if (!url || !isStr(url)) return null; - const domain = url.match(DOMAIN_REGEX); - if (isArray(domain) && domain.length === 2) return domain[1]; - return null; -} - /** * Create and return site OpenRtb object from given bidderRequest * @@ -65,13 +51,13 @@ function extractDomainFromURL(url) { function getOpenRTBSiteObject(bidderRequest) { if (!bidderRequest || !bidderRequest.refererInfo) return null; - const domain = extractDomainFromURL(bidderRequest.refererInfo.referer); + const domain = bidderRequest.refererInfo.domain; const publisherId = config.getConfig('adot.publisherId'); if (!domain) return null; return { - page: bidderRequest.refererInfo.referer, + page: bidderRequest.refererInfo.page, domain: domain, name: domain, publisher: { diff --git a/modules/adpartnerBidAdapter.js b/modules/adpartnerBidAdapter.js index e8d8a43aa1b..471a0bba64a 100644 --- a/modules/adpartnerBidAdapter.js +++ b/modules/adpartnerBidAdapter.js @@ -15,12 +15,8 @@ export const spec = { }, buildRequests: function (validBidRequests, bidderRequest) { - let referer = window.location.href; - try { - referer = typeof bidderRequest.refererInfo === 'undefined' - ? window.top.location.href - : bidderRequest.refererInfo.referer; - } catch (e) {} + // TODO does it make sense to fall back to window.location.href? + const referer = bidderRequest?.refererInfo?.page || window.location.href; let bidRequests = []; let beaconParams = { diff --git a/modules/adplusBidAdapter.js b/modules/adplusBidAdapter.js index 4707ca2ff5a..6fbe1fe1dde 100644 --- a/modules/adplusBidAdapter.js +++ b/modules/adplusBidAdapter.js @@ -127,6 +127,7 @@ function createBidRequest(bid) { screenWidth: screen.width, screenHeight: screen.height, language: window.navigator.language || 'en-US', + // TODO: these should probably look at refererInfo pageUrl: window.location.href, domain: window.location.hostname, referrer: window.location.referrer, diff --git a/modules/adprimeBidAdapter.js b/modules/adprimeBidAdapter.js index d64874c393e..4b53c8441ef 100644 --- a/modules/adprimeBidAdapter.js +++ b/modules/adprimeBidAdapter.js @@ -52,8 +52,9 @@ export const spec = { buildRequests: (validBidRequests = [], bidderRequest) => { let winTop = window; let location; + // TODO: this odd try-catch block was copied in several adapters; it doesn't seem to be correct for cross-origin try { - location = new URL(bidderRequest.refererInfo.referer) + location = new URL(bidderRequest.refererInfo.page) winTop = window.top; } catch (e) { location = winTop.location; diff --git a/modules/adrelevantisBidAdapter.js b/modules/adrelevantisBidAdapter.js index 7afa8f3e474..3a68513cde2 100644 --- a/modules/adrelevantisBidAdapter.js +++ b/modules/adrelevantisBidAdapter.js @@ -127,7 +127,8 @@ export const spec = { if (bidderRequest && bidderRequest.refererInfo) { let refererinfo = { - rd_ref: encodeURIComponent(bidderRequest.refererInfo.referer), + // TODO: this sends everything it finds to the backend, except for canonicalUrl + rd_ref: encodeURIComponent(bidderRequest.refererInfo.topmostLocation), rd_top: bidderRequest.refererInfo.reachedTop, rd_ifs: bidderRequest.refererInfo.numIframes, rd_stk: bidderRequest.refererInfo.stack.map((url) => encodeURIComponent(url)).join(',') diff --git a/modules/adrinoBidAdapter.js b/modules/adrinoBidAdapter.js index 4520066c3e7..ed898c46cac 100644 --- a/modules/adrinoBidAdapter.js +++ b/modules/adrinoBidAdapter.js @@ -30,7 +30,8 @@ export const spec = { bidId: validBidRequests[i].bidId, nativeParams: validBidRequests[i].nativeParams, placementHash: validBidRequests[i].params.hash, - referer: bidderRequest.refererInfo.referer, + // TODO: is 'page' the right value here? + referer: bidderRequest.refererInfo.page, userAgent: navigator.userAgent, } diff --git a/modules/adtargetBidAdapter.js b/modules/adtargetBidAdapter.js index a07b0de0f67..c4f2bc65655 100644 --- a/modules/adtargetBidAdapter.js +++ b/modules/adtargetBidAdapter.js @@ -117,7 +117,8 @@ function parseResponse(serverResponse, adapterRequest) { function bidToTag(bidRequests, adapterRequest) { const tag = { - Domain: deepAccess(adapterRequest, 'refererInfo.referer') + // TODO: is 'page' the right value here? + Domain: deepAccess(adapterRequest, 'refererInfo.page') }; if (config.getConfig('coppa') === true) { tag.Coppa = 1; diff --git a/modules/adtelligentBidAdapter.js b/modules/adtelligentBidAdapter.js index 13174ff337c..5269b1224c1 100644 --- a/modules/adtelligentBidAdapter.js +++ b/modules/adtelligentBidAdapter.js @@ -160,7 +160,8 @@ function parseRTBResponse(serverResponse, adapterRequest) { function bidToTag(bidRequests, adapterRequest) { // start publisher env const tag = { - Domain: deepAccess(adapterRequest, 'refererInfo.referer') + // TODO: is 'page' the right value here? + Domain: deepAccess(adapterRequest, 'refererInfo.page') }; if (config.getConfig('coppa') === true) { tag.Coppa = 1; diff --git a/modules/adtrueBidAdapter.js b/modules/adtrueBidAdapter.js index 283e1273150..b8cdb1f99aa 100644 --- a/modules/adtrueBidAdapter.js +++ b/modules/adtrueBidAdapter.js @@ -133,8 +133,9 @@ function _parseAdSlot(bid) { function _initConf(refererInfo) { return { - pageURL: (refererInfo && refererInfo.referer) ? refererInfo.referer : window.location.href, - refURL: window.document.referrer + // TODO: do the fallbacks make sense here? + pageURL: refererInfo?.page || window.location.href, + refURL: refererInfo?.ref || window.document.referrer }; } diff --git a/modules/aduptechBidAdapter.js b/modules/aduptechBidAdapter.js index 1186e0410ab..8b45d19a022 100644 --- a/modules/aduptechBidAdapter.js +++ b/modules/aduptechBidAdapter.js @@ -1,7 +1,6 @@ -import { deepAccess, getWindowTop, getWindowSelf, getAdUnitSizes } from '../src/utils.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { config } from '../src/config.js'; -import { BANNER, NATIVE } from '../src/mediaTypes.js' +import {deepAccess, getAdUnitSizes} from '../src/utils.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {BANNER, NATIVE} from '../src/mediaTypes.js'; export const BIDDER_CODE = 'aduptech'; export const ENDPOINT_URL_PUBLISHER_PLACEHOLDER = '{PUBLISHER}'; @@ -37,19 +36,8 @@ export const internal = { * @returns {string} */ extractPageUrl: (bidderRequest) => { - if (bidderRequest && deepAccess(bidderRequest, 'refererInfo.canonicalUrl')) { - return bidderRequest.refererInfo.canonicalUrl; - } - - if (config && config.getConfig('pageUrl')) { - return config.getConfig('pageUrl'); - } - - try { - return getWindowTop().location.href; - } catch (e) { - return getWindowSelf().location.href; - } + // TODO: does it make sense to fall back here? + return bidderRequest?.refererInfo?.page || window.location.href; }, /** @@ -59,15 +47,8 @@ export const internal = { * @returns {string} */ extractReferrer: (bidderRequest) => { - if (bidderRequest && deepAccess(bidderRequest, 'refererInfo.referer')) { - return bidderRequest.refererInfo.referer; - } - - try { - return getWindowTop().document.referrer; - } catch (e) { - return getWindowSelf().document.referrer; - } + // TODO: does it make sense to fall back here? + return bidderRequest?.refererInfo?.ref || window.document.referrer; }, /** diff --git a/modules/advangelistsBidAdapter.js b/modules/advangelistsBidAdapter.js index 605e19cfc66..4963150caed 100755 --- a/modules/advangelistsBidAdapter.js +++ b/modules/advangelistsBidAdapter.js @@ -1,5 +1,4 @@ import {deepAccess, generateUUID, isEmpty, isFn, parseSizesInput, parseUrl} from '../src/utils.js'; -import {config} from '../src/config.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; import {find, includes} from '../src/polyfill.js'; @@ -200,12 +199,8 @@ function getBannerSizes(bid) { return parseSizes(deepAccess(bid, 'mediaTypes.banner.sizes') || bid.sizes); } -function getTopWindowReferrer() { - try { - return window.top.document.referrer; - } catch (e) { - return ''; - } +function getTopWindowReferrer(bidderRequest) { + return bidderRequest?.refererInfo?.ref || ''; } function getVideoTargetingParams(bid) { @@ -226,7 +221,7 @@ function getVideoTargetingParams(bid) { function createVideoRequestData(bid, bidderRequest) { let topLocation = getTopWindowLocation(bidderRequest); - let topReferrer = getTopWindowReferrer(); + let topReferrer = getTopWindowReferrer(bidderRequest); let sizes = getVideoSizes(bid); let firstSize = getFirstSize(sizes); @@ -309,13 +304,12 @@ function createVideoRequestData(bid, bidderRequest) { } function getTopWindowLocation(bidderRequest) { - let url = bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer; - return parseUrl(config.getConfig('pageUrl') || url, { decodeSearchAsString: true }); + return parseUrl(bidderRequest?.refererInfo?.page, {decodeSearchAsString: true}); } function createBannerRequestData(bid, bidderRequest) { let topLocation = getTopWindowLocation(bidderRequest); - let topReferrer = getTopWindowReferrer(); + let topReferrer = getTopWindowReferrer(bidderRequest); let sizes = getBannerSizes(bid); let bidfloor = (getBannerBidFloor(bid) == null || typeof getBannerBidFloor(bid) == 'undefined') ? 2 : getBannerBidFloor(bid); diff --git a/modules/adxcgBidAdapter.js b/modules/adxcgBidAdapter.js index a4984840e01..9cfbc91b48b 100644 --- a/modules/adxcgBidAdapter.js +++ b/modules/adxcgBidAdapter.js @@ -2,19 +2,19 @@ 'use strict'; import {registerBidder} from '../src/adapters/bidderFactory.js'; -import {NATIVE, BANNER, VIDEO} from '../src/mediaTypes.js'; +import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js'; import { - mergeDeep, _map, deepAccess, - getDNT, - parseSizesInput, deepSetValue, - isStr, + getDNT, isArray, isPlainObject, - parseUrl, - replaceAuctionPrice, triggerPixel + isStr, + mergeDeep, + parseSizesInput, + replaceAuctionPrice, + triggerPixel } from '../src/utils.js'; import {config} from '../src/config.js'; @@ -82,8 +82,8 @@ export const spec = { } if (!site.page) { - site.page = bidderRequest.refererInfo.referer; - site.domain = parseUrl(bidderRequest.refererInfo.referer).hostname; + site.page = bidderRequest.refererInfo.page; + site.domain = bidderRequest.refererInfo.domain; } } diff --git a/modules/adxpremiumAnalyticsAdapter.js b/modules/adxpremiumAnalyticsAdapter.js index 9066c26fb00..f87cbdc37bf 100644 --- a/modules/adxpremiumAnalyticsAdapter.js +++ b/modules/adxpremiumAnalyticsAdapter.js @@ -95,7 +95,8 @@ function auctionInit(args) { completeObject.auction_id = args.auctionId; completeObject.publisher_id = adxpremiumAnalyticsAdapter.initOptions.pubId; - try { completeObject.referer = encodeURI(args.bidderRequests[0].refererInfo.referer.split('?')[0]); } catch (e) { logError('AdxPremium Analytics - ' + e.message); } + // TODO: is 'page' the right value here? + try { completeObject.referer = encodeURI(args.bidderRequests[0].refererInfo.page.split('?')[0]); } catch (e) { logError('AdxPremium Analytics - ' + e.message); } if (args.adUnitCodes && args.adUnitCodes.length > 0) { elementIds = args.adUnitCodes; } diff --git a/modules/adyoulikeBidAdapter.js b/modules/adyoulikeBidAdapter.js index 784afd6cfe1..5b3e885f2ed 100644 --- a/modules/adyoulikeBidAdapter.js +++ b/modules/adyoulikeBidAdapter.js @@ -1,6 +1,5 @@ import {buildUrl, deepAccess, parseSizesInput} from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; -import {config} from '../src/config.js'; import {createEidsArray} from './userId/eids.js'; import {find} from '../src/polyfill.js'; import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js'; @@ -168,23 +167,6 @@ function getHostname(bidderRequest) { return ''; } -/* Get current page canonical url */ -function getCanonicalUrl() { - let link; - if (window.self !== window.top) { - try { - link = window.top.document.head.querySelector('link[rel="canonical"][href]'); - } catch (e) { } - } else { - link = document.head.querySelector('link[rel="canonical"][href]'); - } - - if (link) { - return link.href; - } - return ''; -} - /* Get mediatype from bidRequest */ function getMediatype(bidRequest) { if (deepAccess(bidRequest, 'mediaTypes.banner')) { @@ -239,20 +221,21 @@ function createEndpointQS(bidderRequest) { if (bidderRequest) { const ref = bidderRequest.refererInfo; - if (ref) { - qs.RefererUrl = encodeURIComponent(ref.referer); + if (ref?.location) { + // TODO: is 'location' the right value here? + qs.RefererUrl = encodeURIComponent(ref.location); if (ref.numIframes > 0) { qs.SafeFrame = true; } } } - const can = getCanonicalUrl(); + const can = bidderRequest?.refererInfo?.canonicalUrl; if (can) { qs.CanonicalUrl = encodeURIComponent(can); } - const domain = config.getConfig('publisherDomain'); + const domain = bidderRequest?.refererInfo?.domain; if (domain) { qs.PublisherDomain = encodeURIComponent(domain); } diff --git a/modules/afpBidAdapter.js b/modules/afpBidAdapter.js index 6565942bcc8..f690b70973d 100644 --- a/modules/afpBidAdapter.js +++ b/modules/afpBidAdapter.js @@ -7,6 +7,7 @@ export const IS_DEV = location.hostname === 'localhost' export const BIDDER_CODE = 'afp' export const SSP_ENDPOINT = 'https://ssp.afp.ai/api/prebid' export const REQUEST_METHOD = 'POST' +// TODO: test code should be kept in tests export const TEST_PAGE_URL = 'https://rtbinsight.ru/smiert-bolshikh-dannykh-kto-na-novienkogo/' const SDK_PATH = 'https://cdn.afp.ai/ssp/sdk.js?auto_initialization=false&deploy_to_parent_window=true' const TTL = 60 @@ -96,7 +97,7 @@ export const spec = { }, buildRequests(validBidRequests, {refererInfo, gdprConsent}) { const payload = { - pageUrl: IS_DEV ? TEST_PAGE_URL : refererInfo.referer, + pageUrl: IS_DEV ? TEST_PAGE_URL : refererInfo.page, gdprConsent: gdprConsent, bidRequests: validBidRequests.map(validBidRequest => { const {bidId, transactionId, sizes, params: { diff --git a/modules/ajaBidAdapter.js b/modules/ajaBidAdapter.js index a9364a7a05f..5991439740f 100644 --- a/modules/ajaBidAdapter.js +++ b/modules/ajaBidAdapter.js @@ -36,7 +36,7 @@ export const spec = { */ buildRequests: function(validBidRequests, bidderRequest) { const bidRequests = []; - const pageUrl = (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer) || undefined; + const pageUrl = bidderRequest?.refererInfo?.page || undefined; for (let i = 0, len = validBidRequests.length; i < len; i++) { const bidRequest = validBidRequests[i]; diff --git a/modules/alkimiBidAdapter.js b/modules/alkimiBidAdapter.js index 261fd9dee68..1036e5d9371 100644 --- a/modules/alkimiBidAdapter.js +++ b/modules/alkimiBidAdapter.js @@ -38,7 +38,8 @@ export const spec = { requestId: bidderRequest.auctionId, signRequest: { bids, randomUUID: alkimiConfig && alkimiConfig.randomUUID }, bidIds, - referer: bidderRequest.refererInfo.referer, + // TODO: is 'page' the right value here? + referer: bidderRequest.refererInfo.page, signature: alkimiConfig && alkimiConfig.signature } diff --git a/modules/amxBidAdapter.js b/modules/amxBidAdapter.js index 901e2c508f0..dae7784b3bc 100644 --- a/modules/amxBidAdapter.js +++ b/modules/amxBidAdapter.js @@ -13,19 +13,9 @@ const VAST_RXP = /^\s*<\??(?:vast|xml)/i; const TRACKING_ENDPOINT = 'https://1x1.a-mo.net/hbx/'; const AMUID_KEY = '__amuidpb'; -function getLocation (request) { - const refInfo = request.refererInfo; - if (refInfo == null) { - return parseUrl(location.href); - } - - if (refInfo.isAmp && refInfo.referer != null) { - return parseUrl(refInfo.referer) - } - - const topUrl = refInfo.numIframes > 0 && refInfo.stack[0] != null - ? refInfo.stack[0] : location.href; - return parseUrl(topUrl); +function getLocation(request) { + // TODO: does it make sense to fall back to window.location? + return parseUrl(request.refererInfo?.topmostLocation || window.location.href) }; const largestSize = (sizes, mediaTypes) => { @@ -243,8 +233,9 @@ export const spec = { gs: deepAccess(bidderRequest, 'gdprConsent.gdprApplies', ''), gc: deepAccess(bidderRequest, 'gdprConsent.consentString', ''), u: deepAccess(bidderRequest, 'refererInfo.canonicalUrl', loc.href), + // TODO: are these referer values correct? do: loc.hostname, - re: deepAccess(bidderRequest, 'refererInfo.referer'), + re: deepAccess(bidderRequest, 'refererInfo.ref'), am: getUIDSafe(), usp: bidderRequest.uspConsent || '1---', smt: 1, diff --git a/modules/amxIdSystem.js b/modules/amxIdSystem.js index 28323b01188..9dbab496f2c 100644 --- a/modules/amxIdSystem.js +++ b/modules/amxIdSystem.js @@ -5,11 +5,11 @@ * @module modules/amxIdSystem * @requires module:modules/userId */ -import { uspDataHandler } from '../src/adapterManager.js'; -import { ajaxBuilder } from '../src/ajax.js'; -import { submodule } from '../src/hook.js'; -import { getRefererInfo } from '../src/refererDetection.js'; -import { deepAccess, getWindowTop, logError } from '../src/utils.js'; +import {uspDataHandler} from '../src/adapterManager.js'; +import {ajaxBuilder} from '../src/ajax.js'; +import {submodule} from '../src/hook.js'; +import {getRefererInfo} from '../src/refererDetection.js'; +import {deepAccess, logError} from '../src/utils.js'; const NAME = 'amxId'; const GVL_ID = 737; @@ -109,8 +109,9 @@ export const amxIdSubmodule = { const params = { tagId: deepAccess(config, 'params.tagId', ''), - ref: ref.referer, - u: ref.stack[0] || getWindowTop().location.href, + // TODO: are these referer values correct? + ref: ref.ref, + u: ref.location, v: '$prebid.version$', vg: '$$PREBID_GLOBAL$$', us_privacy: usp, diff --git a/modules/aniviewBidAdapter.js b/modules/aniviewBidAdapter.js index 7760aa2b47b..e97a2531def 100644 --- a/modules/aniviewBidAdapter.js +++ b/modules/aniviewBidAdapter.js @@ -106,11 +106,8 @@ function buildRequests(validBidRequests, bidderRequest) { if (s2sParams.AV_APPPKGNAME && !s2sParams.AV_URL) { s2sParams.AV_URL = s2sParams.AV_APPPKGNAME; } if (!s2sParams.AV_IDFA && !s2sParams.AV_URL) { - if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { - s2sParams.AV_URL = bidderRequest.refererInfo.referer; - } else { - s2sParams.AV_URL = window.location.href; - } + // TODO: does it make sense to fall back to window.location here? + s2sParams.AV_URL = bidderRequest?.refererInfo?.page || window.location.href; } if (s2sParams.AV_IDFA && !s2sParams.AV_AID) { s2sParams.AV_AID = s2sParams.AV_IDFA; } if (s2sParams.AV_AID && !s2sParams.AV_IDFA) { s2sParams.AV_IDFA = s2sParams.AV_AID; } diff --git a/modules/apacdexBidAdapter.js b/modules/apacdexBidAdapter.js index d7b6b7c4020..9f351f9a55b 100644 --- a/modules/apacdexBidAdapter.js +++ b/modules/apacdexBidAdapter.js @@ -1,6 +1,7 @@ import { deepAccess, isPlainObject, isArray, replaceAuctionPrice, isFn } from '../src/utils.js'; import { config } from '../src/config.js'; import { registerBidder } from '../src/adapters/bidderFactory.js'; +import {parseDomain} from '../src/refererDetection.js'; const BIDDER_CODE = 'apacdex'; const ENDPOINT = 'https://useast.quantumdex.io/auction/pbjs' const USERSYNC = 'https://sync.quantumdex.io/usersync/pbjs' @@ -103,7 +104,8 @@ export const spec = { payload.site = {}; payload.site.page = pageUrl payload.site.referrer = _extractTopWindowReferrerFromBidderRequest(bidderRequest); - payload.site.hostname = getDomain(pageUrl); + // TODO: does it make sense to fall back to window.location for the domain? + payload.site.hostname = bidderRequest.refererInfo?.domain || parseDomain(pageUrl); // Apply GDPR parameters to request. if (bidderRequest && bidderRequest.gdprConsent) { @@ -283,18 +285,8 @@ function _getDoNotTrack() { * @returns {string} */ function _extractTopWindowUrlFromBidderRequest(bidderRequest) { - if (config.getConfig('pageUrl')) { - return config.getConfig('pageUrl'); - } - if (deepAccess(bidderRequest, 'refererInfo.referer')) { - return bidderRequest.refererInfo.referer; - } - - try { - return window.top.location.href; - } catch (e) { - return window.location.href; - } + // TODO: does it make sense to fall back to window.location? + return bidderRequest?.refererInfo?.page || window.location.href; } /** @@ -304,34 +296,8 @@ function _extractTopWindowUrlFromBidderRequest(bidderRequest) { * @returns {string} */ function _extractTopWindowReferrerFromBidderRequest(bidderRequest) { - if (bidderRequest && deepAccess(bidderRequest, 'refererInfo.referer')) { - return bidderRequest.refererInfo.referer; - } - - try { - return window.top.document.referrer; - } catch (e) { - return window.document.referrer; - } -} - -/** - * Extracts the domain from given page url - * - * @param {string} url - * @returns {string} - */ -export function getDomain(pageUrl) { - if (config.getConfig('publisherDomain')) { - var publisherDomain = config.getConfig('publisherDomain'); - return publisherDomain.replace('http://', '').replace('https://', '').replace('www.', '').split(/[/?#:]/)[0]; - } - - if (!pageUrl) { - return pageUrl; - } - - return pageUrl.replace('http://', '').replace('https://', '').replace('www.', '').split(/[/?#:]/)[0]; + // TODO: does it make sense to fall back to window.document.referrer? + return bidderRequest?.refererInfo?.ref || window.document.referrer; } /** diff --git a/modules/appierBidAdapter.js b/modules/appierBidAdapter.js index 1940233a0b4..12346d15130 100644 --- a/modules/appierBidAdapter.js +++ b/modules/appierBidAdapter.js @@ -43,7 +43,8 @@ export const spec = { const bidderApiUrl = `//${server}${BIDDER_API_ENDPOINT}` const payload = { 'bids': bidRequests, - 'refererInfo': bidderRequest.refererInfo, + // TODO: please do not pass internal data structures over to the network + 'refererInfo': bidderRequest.refererInfo.legacy, 'version': ADAPTER_VERSION }; return [{ diff --git a/modules/appnexusBidAdapter.js b/modules/appnexusBidAdapter.js index 2e2d6b093db..55b9595ea4f 100644 --- a/modules/appnexusBidAdapter.js +++ b/modules/appnexusBidAdapter.js @@ -265,12 +265,13 @@ export const spec = { if (bidderRequest && bidderRequest.refererInfo) { let refererinfo = { - rd_ref: encodeURIComponent(bidderRequest.refererInfo.referer), + // TODO: are these the correct referer values? + rd_ref: encodeURIComponent(bidderRequest.refererInfo.topmostLocation), rd_top: bidderRequest.refererInfo.reachedTop, rd_ifs: bidderRequest.refererInfo.numIframes, rd_stk: bidderRequest.refererInfo.stack.map((url) => encodeURIComponent(url)).join(',') } - let pubPageUrl = config.getConfig('pageUrl'); + let pubPageUrl = bidderRequest.refererInfo.canonicalUrl; if (isStr(pubPageUrl) && pubPageUrl !== '') { refererinfo.rd_can = pubPageUrl; } diff --git a/modules/asealBidAdapter.js b/modules/asealBidAdapter.js index 855aee65f34..abe0cf907ed 100644 --- a/modules/asealBidAdapter.js +++ b/modules/asealBidAdapter.js @@ -59,7 +59,8 @@ export const spec = { const data = { bids: validBidRequests, - refererInfo: bidderRequest.refererInfo, + // TODO: please do not pass internal data structures over to the network + refererInfo: bidderRequest.refererInfo?.legacy, device: { webSessionId: getTrekWebSessionId(), }, diff --git a/modules/asoBidAdapter.js b/modules/asoBidAdapter.js index bf45b9ee48f..9469bc6b00c 100644 --- a/modules/asoBidAdapter.js +++ b/modules/asoBidAdapter.js @@ -1,8 +1,19 @@ -import { _each, deepAccess, logWarn, tryAppendQueryString, inIframe, getWindowTop, parseUrl, parseSizesInput, isFn, getDNT, deepSetValue } from '../src/utils.js'; +import { + _each, + deepAccess, + deepSetValue, + getDNT, + inIframe, + isFn, + logWarn, + parseSizesInput, + tryAppendQueryString +} from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {config} from '../src/config.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; import {Renderer} from '../src/Renderer.js'; +import {parseDomain} from '../src/refererDetection.js'; const BIDDER_CODE = 'aso'; const DEFAULT_SERVER_URL = 'https://srv.aso1.net'; @@ -167,28 +178,13 @@ function createRenderer(bid, url) { } function getUrlsInfo(bidderRequest) { - let page = ''; - let referrer = ''; - - const {refererInfo} = bidderRequest; - - if (inIframe()) { - page = refererInfo.referer; - } else { - const w = getWindowTop(); - page = w.location.href; - referrer = w.document.referrer || ''; - } - - page = config.getConfig('pageUrl') || page; - const url = parseUrl(page); - const domain = url.hostname; - + const {page, domain, ref} = bidderRequest.refererInfo; return { - domain, - page, - referrer - }; + // TODO: do the fallbacks make sense here? + page: page || bidderRequest.refererInfo?.topmostLocation, + referrer: ref || '', + domain: domain || parseDomain(bidderRequest?.refererInfo?.topmostLocation) + } } function getSize(paramSizes) { diff --git a/modules/astraoneBidAdapter.js b/modules/astraoneBidAdapter.js index c233e665499..d6bfa4b93ee 100644 --- a/modules/astraoneBidAdapter.js +++ b/modules/astraoneBidAdapter.js @@ -99,7 +99,7 @@ export const spec = { */ buildRequests(validBidRequests, bidderRequest) { const payload = { - url: bidderRequest.refererInfo.referer, + url: bidderRequest.refererInfo.page, cmp: !!bidderRequest.gdprConsent, bidRequests: buildBidRequests(validBidRequests) }; diff --git a/modules/audiencerunBidAdapter.js b/modules/audiencerunBidAdapter.js index 2744e38e820..754a48ede75 100644 --- a/modules/audiencerunBidAdapter.js +++ b/modules/audiencerunBidAdapter.js @@ -71,12 +71,7 @@ function getPageReferer() { * @return {string} */ function getPageUrl(bidderRequest) { - return ( - config.getConfig('pageUrl') || - deepAccess(bidderRequest, 'refererInfo.referer') || - getPageReferer() || - null - ); + return bidderRequest?.refererInfo?.page } export const spec = { @@ -127,10 +122,12 @@ export const spec = { const payload = { libVersion: this.version, - pageUrl: config.getConfig('pageUrl'), + pageUrl: bidderRequest?.refererInfo?.page, + // TODO: does it make sense to find a half-way referer? what should these parameters pick pageReferer: getPageReferer(), - referer: deepAccess(bidderRequest, 'refererInfo.referer'), - refererInfo: deepAccess(bidderRequest, 'refererInfo'), + referer: deepAccess(bidderRequest, 'refererInfo.topmostLocation'), + // TODO: please do not send internal data structures over the network + refererInfo: deepAccess(bidderRequest, 'refererInfo.legacy'), currencyCode: config.getConfig('currency.adServerCurrency'), timeout: config.getConfig('bidderTimeout'), bids, diff --git a/modules/automatadBidAdapter.js b/modules/automatadBidAdapter.js index d3aeb204d5e..1174c2a9f38 100644 --- a/modules/automatadBidAdapter.js +++ b/modules/automatadBidAdapter.js @@ -61,9 +61,9 @@ export const spec = { imp: impressions, site: { id: siteId, - domain: window.location.hostname, - page: window.location.href, - ref: bidderRequest.refererInfo ? bidderRequest.refererInfo.referer || null : null, + domain: bidderRequest.refererInfo?.domain, + page: bidderRequest.refererInfo?.page, + ref: bidderRequest.refererInfo?.ref }, } diff --git a/modules/axonixBidAdapter.js b/modules/axonixBidAdapter.js index a790a89a0c1..5435bf09059 100644 --- a/modules/axonixBidAdapter.js +++ b/modules/axonixBidAdapter.js @@ -25,12 +25,11 @@ function getBidFloor(bidRequest) { } function getPageUrl(bidRequest, bidderRequest) { - let pageUrl = config.getConfig('pageUrl'); - + let pageUrl; if (bidRequest.params.referrer) { pageUrl = bidRequest.params.referrer; - } else if (!pageUrl) { - pageUrl = bidderRequest.refererInfo.referer; + } else { + pageUrl = bidderRequest.refererInfo.page; } return bidRequest.params.secure ? pageUrl.replace(/^http:/i, 'https:') : pageUrl; diff --git a/modules/beachfrontBidAdapter.js b/modules/beachfrontBidAdapter.js index 19232c07234..f80481d66c8 100644 --- a/modules/beachfrontBidAdapter.js +++ b/modules/beachfrontBidAdapter.js @@ -9,7 +9,6 @@ import { parseSizesInput, parseUrl } from '../src/utils.js'; -import {config} from '../src/config.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {Renderer} from '../src/Renderer.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; @@ -305,16 +304,7 @@ function isBannerBidValid(bid) { } function getTopWindowLocation(bidderRequest) { - let url = bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer; - return parseUrl(config.getConfig('pageUrl') || url, { decodeSearchAsString: true }); -} - -function getTopWindowReferrer() { - try { - return window.top.document.referrer; - } catch (e) { - return ''; - } + return parseUrl(bidderRequest?.refererInfo?.page, { decodeSearchAsString: true }); } function getEids(bid) { @@ -433,7 +423,7 @@ function createVideoRequestData(bid, bidderRequest) { function createBannerRequestData(bids, bidderRequest) { let topLocation = getTopWindowLocation(bidderRequest); - let topReferrer = getTopWindowReferrer(); + let topReferrer = bidderRequest.refererInfo?.ref; let slots = bids.map(bid => { return { slot: bid.adUnitCode, diff --git a/modules/betweenBidAdapter.js b/modules/betweenBidAdapter.js index e4907c15974..9e57d0f5cd3 100644 --- a/modules/betweenBidAdapter.js +++ b/modules/betweenBidAdapter.js @@ -1,7 +1,6 @@ import {registerBidder} from '../src/adapters/bidderFactory.js'; -import { getAdUnitSizes, parseSizesInput } from '../src/utils.js'; -import { getRefererInfo } from '../src/refererDetection.js'; -import {includes} from '../src/polyfill.js' +import {getAdUnitSizes, parseSizesInput} from '../src/utils.js'; +import {includes} from '../src/polyfill.js'; const BIDDER_CODE = 'between'; let ENDPOINT = 'https://ads.betweendigital.com/adjson?t=prebid'; @@ -29,7 +28,7 @@ export const spec = { buildRequests: function(validBidRequests, bidderRequest) { let requests = []; const gdprConsent = bidderRequest && bidderRequest.gdprConsent; - const refInfo = getRefererInfo(); + const refInfo = bidderRequest?.refererInfo; validBidRequests.forEach((i) => { const video = i.mediaTypes && i.mediaTypes.video; @@ -79,7 +78,8 @@ export const spec = { params.schain = encodeToBase64WebSafe(JSON.stringify(i.schain)); } - if (refInfo && refInfo.referer) params.ref = refInfo.referer; + // TODO: is 'page' the right value here? + if (refInfo && refInfo.page) params.ref = refInfo.page; if (gdprConsent) { if (typeof gdprConsent.gdprApplies !== 'undefined') { diff --git a/modules/bizzclickBidAdapter.js b/modules/bizzclickBidAdapter.js index a798671cbaf..ce961867c59 100644 --- a/modules/bizzclickBidAdapter.js +++ b/modules/bizzclickBidAdapter.js @@ -63,7 +63,7 @@ export const spec = { let winTop = window; let location; try { - location = new URL(bidderRequest.refererInfo.referer) + location = new URL(bidderRequest.refererInfo.page) winTop = window.top; } catch (e) { location = winTop.location; diff --git a/modules/bliinkBidAdapter.js b/modules/bliinkBidAdapter.js index 45b6c46c2df..962a61efad5 100644 --- a/modules/bliinkBidAdapter.js +++ b/modules/bliinkBidAdapter.js @@ -170,7 +170,7 @@ export const buildRequests = (_, bidderRequest) => { if (!bidderRequest) return null let data = { - pageUrl: bidderRequest.refererInfo.referer, + pageUrl: bidderRequest.refererInfo.page, pageDescription: getMetaValue(META_DESCRIPTION), keywords: getKeywords().join(','), gdpr: false, @@ -184,7 +184,8 @@ export const buildRequests = (_, bidderRequest) => { bidderRequestId: bidderRequest.bidderRequestId, bidderCode: bidderRequest.bidderCode, bids: bidderRequest.bids, - refererInfo: bidderRequest.refererInfo, + // TODO: please do not send internal data structures over the network + refererInfo: bidderRequest.refererInfo.legacy, } if (bidderRequest.gdprConsent) { diff --git a/modules/bluebillywigBidAdapter.js b/modules/bluebillywigBidAdapter.js index d362dfa5fdb..27e310177f6 100644 --- a/modules/bluebillywigBidAdapter.js +++ b/modules/bluebillywigBidAdapter.js @@ -306,7 +306,7 @@ export const spec = { if (getConfig('coppa') == true) deepSetValue(request, 'regs.coppa', 1); // Enrich the request with any external data we may have - BB_HELPERS.addSiteAppDevice(request, bidderRequest.refererInfo && bidderRequest.refererInfo.referer); + BB_HELPERS.addSiteAppDevice(request, bidderRequest.refererInfo && bidderRequest.refererInfo.page); BB_HELPERS.addSchain(request, validBidRequests); BB_HELPERS.addCurrency(request); BB_HELPERS.addUserIds(request, validBidRequests); diff --git a/modules/boldwinBidAdapter.js b/modules/boldwinBidAdapter.js index fcff7134a92..33e99211e9b 100644 --- a/modules/boldwinBidAdapter.js +++ b/modules/boldwinBidAdapter.js @@ -51,8 +51,9 @@ export const spec = { buildRequests: (validBidRequests = [], bidderRequest) => { let winTop = window; let location; + // TODO: this odd try-catch block was copied in several adapters; it doesn't seem to be correct for cross-origin try { - location = new URL(bidderRequest.refererInfo.referer) + location = new URL(bidderRequest.refererInfo.page) winTop = window.top; } catch (e) { location = winTop.location; diff --git a/modules/braveBidAdapter.js b/modules/braveBidAdapter.js index 18bad6b0f75..d29d58a2129 100644 --- a/modules/braveBidAdapter.js +++ b/modules/braveBidAdapter.js @@ -62,23 +62,9 @@ export const spec = { return impObject; }); - let w = window; - let l = w.document.location.href; - let r = w.document.referrer; - - let loopChecker = 0; - while (w !== w.parent) { - if (++loopChecker == 10) break; - try { - w = w.parent; - l = w.location.href; - r = w.document.referrer; - } catch (e) { - break; - } - } - - let page = l || bidderRequest.refererInfo.referer; + // TODO: do these values make sense? + let page = bidderRequest.refererInfo.page || bidderRequest.refererInfo.topmostLocation; + let r = bidderRequest.refererInfo.ref; let data = { id: bidderRequest.bidderRequestId, diff --git a/modules/bridgewellBidAdapter.js b/modules/bridgewellBidAdapter.js index b141763af8e..6af7f4fc8a0 100644 --- a/modules/bridgewellBidAdapter.js +++ b/modules/bridgewellBidAdapter.js @@ -72,7 +72,7 @@ export const spec = { let topUrl = ''; if (bidderRequest && bidderRequest.refererInfo) { - topUrl = bidderRequest.refererInfo.referer; + topUrl = bidderRequest.refererInfo.page; } return { @@ -85,9 +85,10 @@ export const spec = { }, inIframe: inIframe(), url: topUrl, - referrer: getTopWindowReferrer(), + referrer: bidderRequest.refererInfo.ref, adUnits: adUnits, - refererInfo: bidderRequest.refererInfo, + // TODO: please do not send internal data structures over the network + refererInfo: bidderRequest.refererInfo.legacy, }, validBidRequests: validBidRequests }; @@ -289,12 +290,4 @@ export const spec = { } }; -function getTopWindowReferrer() { - try { - return window.top.document.referrer; - } catch (e) { - return ''; - } -} - registerBidder(spec); diff --git a/modules/brightMountainMediaBidAdapter.js b/modules/brightMountainMediaBidAdapter.js index d3ae1d9cf43..bfe1e8ecb29 100644 --- a/modules/brightMountainMediaBidAdapter.js +++ b/modules/brightMountainMediaBidAdapter.js @@ -149,6 +149,7 @@ export const spec = { registerBidder(spec); function buildSite(bidderRequest) { + // TODO: should name/domain be the domain? let site = { name: window.location.hostname, publisher: { @@ -160,12 +161,12 @@ function buildSite(bidderRequest) { deepSetValue( site, 'page', - bidderRequest.refererInfo.referer.href ? bidderRequest.refererInfo.referer.href : '', + bidderRequest.refererInfo.page ); deepSetValue( site, 'ref', - bidderRequest.refererInfo.referer ? bidderRequest.refererInfo.referer : '', + bidderRequest.refererInfo.ref ); } return site; diff --git a/modules/brightcomBidAdapter.js b/modules/brightcomBidAdapter.js index 4895f303973..64b3c3a9fc8 100644 --- a/modules/brightcomBidAdapter.js +++ b/modules/brightcomBidAdapter.js @@ -1,4 +1,4 @@ -import { getBidIdParameter, _each, isArray, getWindowTop, getUniqueIdentifierStr, parseUrl, deepSetValue, logError, logWarn, createTrackPixelHtml, getWindowSelf, isFn, isPlainObject } from '../src/utils.js'; +import { getBidIdParameter, _each, isArray, getWindowTop, getUniqueIdentifierStr, deepSetValue, logError, logWarn, createTrackPixelHtml, getWindowSelf, isFn, isPlainObject } from '../src/utils.js'; import { registerBidder } from '../src/adapters/bidderFactory.js'; import { BANNER } from '../src/mediaTypes.js'; import { config } from '../src/config.js'; @@ -19,7 +19,7 @@ function buildRequests(bidReqs, bidderRequest) { try { let referrer = ''; if (bidderRequest && bidderRequest.refererInfo) { - referrer = bidderRequest.refererInfo.referer; + referrer = bidderRequest.refererInfo.page; } const brightcomImps = []; const publisherId = getBidIdParameter('publisherId', bidReqs[0].params); @@ -56,7 +56,7 @@ function buildRequests(bidReqs, bidderRequest) { id: getUniqueIdentifierStr(), imp: brightcomImps, site: { - domain: parseUrl(referrer).host, + domain: bidderRequest?.refererInfo?.domain || '', page: referrer, publisher: { id: publisherId diff --git a/modules/ccxBidAdapter.js b/modules/ccxBidAdapter.js index 65d1ced30e2..7c6b0411023 100644 --- a/modules/ccxBidAdapter.js +++ b/modules/ccxBidAdapter.js @@ -1,7 +1,6 @@ -import { deepAccess, isArray, _each, logWarn, isEmpty } from '../src/utils.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js' -import { config } from '../src/config.js' -import { getStorageManager } from '../src/storageManager.js'; +import {_each, deepAccess, isArray, isEmpty, logWarn} from '../src/utils.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {getStorageManager} from '../src/storageManager.js'; const BIDDER_CODE = 'ccx' const storage = getStorageManager({bidderCode: BIDDER_CODE}); @@ -20,7 +19,8 @@ function _getDeviceObj () { function _getSiteObj (bidderRequest) { let site = {} - let url = config.getConfig('pageUrl') || deepAccess(window, 'location.href'); + // TODO: does the fallback to window.location make sense? + let url = bidderRequest?.refererInfo?.page || window.location.href if (url.length > 0) { url = url.split('?')[0] } diff --git a/modules/cleanmedianetBidAdapter.js b/modules/cleanmedianetBidAdapter.js index c0227e7efcb..f7d74c0df64 100644 --- a/modules/cleanmedianetBidAdapter.js +++ b/modules/cleanmedianetBidAdapter.js @@ -1,6 +1,5 @@ import {deepAccess, getDNT, inIframe, isArray, isNumber, logError, logWarn} from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; -import {config} from '../src/config.js'; import {Renderer} from '../src/Renderer.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; import {includes} from '../src/polyfill.js'; @@ -64,15 +63,14 @@ export const spec = { params.supplyPartnerId }/bidr?rformat=open_rtb&reqformat=rtb_json&bidder=prebid` + (params.query ? '&' + params.query : ''); - let url = - config.getConfig('pageUrl') || bidderRequest.refererInfo.referer; + let url = bidderRequest.refererInfo.page; const rtbBidRequest = { id: auctionId, site: { - domain: helper.getTopWindowDomain(url), + domain: bidderRequest.refererInfo.domain, page: url, - ref: bidderRequest.refererInfo.referer + ref: bidderRequest.refererInfo.ref }, device: { ua: navigator.userAgent, diff --git a/modules/codefuelBidAdapter.js b/modules/codefuelBidAdapter.js index b9da86ac24e..bde168a79e3 100644 --- a/modules/codefuelBidAdapter.js +++ b/modules/codefuelBidAdapter.js @@ -1,6 +1,7 @@ -import { deepAccess, isArray } from '../src/utils.js'; +import {deepAccess, isArray} from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; -import { BANNER } from '../src/mediaTypes.js'; +import {BANNER} from '../src/mediaTypes.js'; + const BIDDER_CODE = 'codefuel'; const CURRENCY = 'USD'; @@ -27,8 +28,8 @@ export const spec = { * @return ServerRequest Info describing the request to the server. */ buildRequests: function(validBidRequests, bidderRequest) { - const page = bidderRequest.refererInfo.referer; - const domain = getDomainFromURL(page) + const page = bidderRequest.refererInfo.page; + const domain = bidderRequest.refererInfo.domain; const ua = navigator.userAgent; const devicetype = getDeviceType() const publisher = setOnAny(validBidRequests, 'params.publisher'); @@ -128,12 +129,6 @@ export const spec = { } registerBidder(spec); -function getDomainFromURL(url) { - let anchor = document.createElement('a'); - anchor.href = url; - return anchor.hostname; -} - function getDeviceType() { if ((/ipad|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i.test(navigator.userAgent.toLowerCase()))) { return 5; // 'tablet' diff --git a/modules/cointrafficBidAdapter.js b/modules/cointrafficBidAdapter.js index f61d58664ca..ce366cbecc8 100644 --- a/modules/cointrafficBidAdapter.js +++ b/modules/cointrafficBidAdapter.js @@ -50,7 +50,8 @@ export const spec = { currency: currency, sizes: sizes, bidId: bidRequest.bidId, - referer: bidderRequest.refererInfo.referer, + // TODO: is 'page' the right value here? + referer: bidderRequest.refererInfo.page, }; return { diff --git a/modules/coinzillaBidAdapter.js b/modules/coinzillaBidAdapter.js index cd087daa8cb..7e9fb964a87 100644 --- a/modules/coinzillaBidAdapter.js +++ b/modules/coinzillaBidAdapter.js @@ -39,7 +39,8 @@ export const spec = { width: width, height: height, bidId: bidRequest.bidId, - referer: bidderRequest.refererInfo.referer, + // TODO: is 'page' the right value here? + referer: bidderRequest.refererInfo.page, }; return { method: 'POST', diff --git a/modules/colossussspBidAdapter.js b/modules/colossussspBidAdapter.js index 8fab37a433f..cd0721fa80f 100644 --- a/modules/colossussspBidAdapter.js +++ b/modules/colossussspBidAdapter.js @@ -75,7 +75,7 @@ export const spec = { winLocation = window.location; } - const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.referer; + const refferUrl = bidderRequest.refererInfo?.page; let refferLocation; try { refferLocation = refferUrl && new URL(refferUrl); @@ -83,6 +83,7 @@ export const spec = { logMessage(e); } + // TODO: does the fallback to window.location make sense? const location = refferLocation || winLocation; let placements = []; let request = { diff --git a/modules/compassBidAdapter.js b/modules/compassBidAdapter.js index 77f918276bc..e439e72d1d9 100644 --- a/modules/compassBidAdapter.js +++ b/modules/compassBidAdapter.js @@ -126,14 +126,14 @@ export const spec = { winLocation = window.location; } - const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.referer; + const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.page; let refferLocation; try { refferLocation = refferUrl && new URL(refferUrl); } catch (e) { logMessage(e); } - + // TODO: does the fallback make sense here? let location = refferLocation || winLocation; const language = (navigator && navigator.language) ? navigator.language.split('-')[0] : ''; const host = location.host; diff --git a/modules/concertBidAdapter.js b/modules/concertBidAdapter.js index 99e2492fb94..398248bfeab 100644 --- a/modules/concertBidAdapter.js +++ b/modules/concertBidAdapter.js @@ -36,7 +36,7 @@ export const spec = { let payload = { meta: { prebidVersion: '$prebid.version$', - pageUrl: bidderRequest.refererInfo.referer, + pageUrl: bidderRequest.refererInfo.page, screen: [window.screen.width, window.screen.height].join('x'), debug: debugTurnedOn(), uid: getUid(bidderRequest), @@ -57,7 +57,7 @@ export const spec = { slotType: bidRequest.params.slotType, adSlot: bidRequest.params.slot || bidRequest.adUnitCode, placementId: bidRequest.params.placementId || '', - site: bidRequest.params.site || bidderRequest.refererInfo.referer + site: bidRequest.params.site || bidderRequest.refererInfo.page } return slot; diff --git a/modules/connectadBidAdapter.js b/modules/connectadBidAdapter.js index 711afd98d0f..5185308eab0 100644 --- a/modules/connectadBidAdapter.js +++ b/modules/connectadBidAdapter.js @@ -35,9 +35,11 @@ export const spec = { placements: [], time: Date.now(), user: {}, - url: (bidderRequest.refererInfo && bidderRequest.refererInfo.referer) ? bidderRequest.refererInfo.referer : window.location.href, - referrer: window.document.referrer, - referrer_info: bidderRequest.refererInfo, + // TODO: does the fallback to window.location make sense? + url: bidderRequest.refererInfo?.page || window.location.href, + referrer: bidderRequest.refererInfo?.ref, + // TODO: please do not send internal data structures over the network + referrer_info: bidderRequest.refererInfo?.legacy, screensize: getScreenSize(), dnt: (navigator.doNotTrack == 'yes' || navigator.doNotTrack == '1' || navigator.msDoNotTrack == '1') ? 1 : 0, language: navigator.language, diff --git a/modules/consumableBidAdapter.js b/modules/consumableBidAdapter.js index de08fc8677a..afdf34b72c1 100644 --- a/modules/consumableBidAdapter.js +++ b/modules/consumableBidAdapter.js @@ -47,8 +47,8 @@ export const spec = { const data = Object.assign({ placements: [], time: Date.now(), - url: bidderRequest.refererInfo.referer, - referrer: document.referrer, + url: bidderRequest.refererInfo.page, + referrer: bidderRequest.refererInfo.ref, source: [{ 'name': 'prebidjs', 'version': '$prebid.version$' @@ -123,7 +123,7 @@ export const spec = { bid.creativeId = decision.adId; bid.ttl = 30; bid.netRevenue = true; - bid.referrer = bidRequest.bidderRequest.refererInfo.referer; + bid.referrer = bidRequest.bidderRequest.refererInfo.page; bid.meta = { advertiserDomains: decision.adomain || [] diff --git a/modules/contentexchangeBidAdapter.js b/modules/contentexchangeBidAdapter.js index b3a5056f816..906359252ee 100644 --- a/modules/contentexchangeBidAdapter.js +++ b/modules/contentexchangeBidAdapter.js @@ -127,7 +127,7 @@ export const spec = { winLocation = window.location; } - const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.referer; + const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.page; let refferLocation; try { refferLocation = refferUrl && new URL(refferUrl); @@ -135,6 +135,7 @@ export const spec = { logMessage(e); } + // TODO: does the fallback to 'window.location' make sense? let location = refferLocation || winLocation; const language = (navigator && navigator.language) ? navigator.language.split('-')[0] : ''; const host = location.host; diff --git a/modules/conversantBidAdapter.js b/modules/conversantBidAdapter.js index 6f14a74c776..41a8200c6ea 100644 --- a/modules/conversantBidAdapter.js +++ b/modules/conversantBidAdapter.js @@ -54,7 +54,7 @@ export const spec = { * @return {ServerRequest} Info describing the request to the server. */ buildRequests: function(validBidRequests, bidderRequest) { - const page = (bidderRequest && bidderRequest.refererInfo) ? bidderRequest.refererInfo.referer : ''; + const page = (bidderRequest && bidderRequest.refererInfo) ? bidderRequest.refererInfo.page : ''; let siteId = ''; let requestId = ''; let pubcid = null; diff --git a/modules/cpmstarBidAdapter.js b/modules/cpmstarBidAdapter.js index 75a7007ee36..6e32c5c4713 100755 --- a/modules/cpmstarBidAdapter.js +++ b/modules/cpmstarBidAdapter.js @@ -46,7 +46,8 @@ export const spec = { for (var i = 0; i < validBidRequests.length; i++) { var bidRequest = validBidRequests[i]; - var referer = encodeURIComponent(bidderRequest.refererInfo.referer); + // TODO: is 'page' the right value here? + var referer = encodeURIComponent(bidderRequest.refererInfo.page); var e = getBidIdParameter('endpoint', bidRequest.params); var ENDPOINT = e == 'dev' ? ENDPOINT_DEV : e == 'staging' ? ENDPOINT_STAGING : ENDPOINT_PRODUCTION; var mediaType = spec.getMediaType(bidRequest); diff --git a/modules/craftBidAdapter.js b/modules/craftBidAdapter.js index 61ca4f929e7..777b71e31e3 100644 --- a/modules/craftBidAdapter.js +++ b/modules/craftBidAdapter.js @@ -51,7 +51,8 @@ export const spec = { } if (bidderRequest && bidderRequest.refererInfo) { let refererinfo = { - rd_ref: bidderRequest.refererInfo.referer, + // TODO: this collects everything it finds, except for the canonical URL + rd_ref: bidderRequest.refererInfo.topmostLocation, rd_top: bidderRequest.refererInfo.reachedTop, rd_ifs: bidderRequest.refererInfo.numIframes, }; diff --git a/modules/criteoBidAdapter.js b/modules/criteoBidAdapter.js index 49de68dc673..dfcca535728 100644 --- a/modules/criteoBidAdapter.js +++ b/modules/criteoBidAdapter.js @@ -224,9 +224,9 @@ function publisherTagAvailable() { function buildContext(bidRequests, bidderRequest) { let referrer = ''; if (bidderRequest && bidderRequest.refererInfo) { - referrer = bidderRequest.refererInfo.referer; + referrer = bidderRequest.refererInfo.page; } - const queryString = parseUrl(referrer).search; + const queryString = parseUrl(bidderRequest?.refererInfo?.topmostLocation).search; const context = { url: referrer, diff --git a/modules/criteoIdSystem.js b/modules/criteoIdSystem.js index c73c4422a77..d7dff9949f4 100644 --- a/modules/criteoIdSystem.js +++ b/modules/criteoIdSystem.js @@ -90,7 +90,8 @@ function buildCriteoUsersyncUrl(topUrl, domain, bundle, areCookiesWriteable, isL function callCriteoUserSync(parsedCriteoData, gdprString, callback) { const cw = storage.cookiesAreEnabled(); const lsw = storage.localStorageIsEnabled(); - const topUrl = extractProtocolHost(getRefererInfo().referer); + const topUrl = extractProtocolHost(getRefererInfo().page); + // TODO: should domain really be extracted from the current frame? const domain = extractProtocolHost(document.location.href, true); const isPublishertagPresent = typeof criteo_pubtag !== 'undefined'; // eslint-disable-line camelcase diff --git a/modules/cwireBidAdapter.js b/modules/cwireBidAdapter.js index c0a24b49a3c..27ce764be58 100644 --- a/modules/cwireBidAdapter.js +++ b/modules/cwireBidAdapter.js @@ -1,5 +1,4 @@ import {registerBidder} from '../src/adapters/bidderFactory.js'; -import {getRefererInfo} from '../src/refererDetection.js'; import {getStorageManager} from '../src/storageManager.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; import {OUTSTREAM} from '../src/video.js'; @@ -170,7 +169,7 @@ export const spec = { let slots = []; let referer; try { - referer = getRefererInfo().referer; + referer = bidderRequest?.refererInfo?.page; slots = mapSlotsData(validBidRequests); } catch (e) { logWarn(e); diff --git a/modules/dailyhuntBidAdapter.js b/modules/dailyhuntBidAdapter.js index ffa84ff88fd..590f3e79f85 100644 --- a/modules/dailyhuntBidAdapter.js +++ b/modules/dailyhuntBidAdapter.js @@ -96,7 +96,7 @@ const flatten = (arr) => { const createOrtbRequest = (validBidRequests, bidderRequest) => { let device = createOrtbDeviceObj(validBidRequests); let user = createOrtbUserObj(validBidRequests) - let site = createOrtbSiteObj(validBidRequests, bidderRequest.refererInfo.referer) + let site = createOrtbSiteObj(validBidRequests, bidderRequest.refererInfo.page) return { id: bidderRequest.auctionId, imp: [], diff --git a/modules/datablocksBidAdapter.js b/modules/datablocksBidAdapter.js index 4959d413a53..fb036d4ff0c 100644 --- a/modules/datablocksBidAdapter.js +++ b/modules/datablocksBidAdapter.js @@ -347,10 +347,11 @@ export const spec = { // GENERATE SITE OBJECT let site = { domain: window.location.host, - page: bidderRequest.refererInfo.referer, + // TODO: is 'page' the right value here? + page: bidderRequest.refererInfo.page, schain: validRequests[0].schain || {}, ext: { - p_domain: config.getConfig('publisherDomain'), + p_domain: bidderRequest.refererInfo.domain, rt: bidderRequest.refererInfo.reachedTop, frames: bidderRequest.refererInfo.numIframes, stack: bidderRequest.refererInfo.stack, diff --git a/modules/deepintentBidAdapter.js b/modules/deepintentBidAdapter.js index 94167b92bb0..e062686b320 100644 --- a/modules/deepintentBidAdapter.js +++ b/modules/deepintentBidAdapter.js @@ -262,21 +262,13 @@ function buildBanner(bid) { function buildSite(bidderRequest) { let site = {}; - if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { - site.page = bidderRequest.refererInfo.referer; - site.domain = getDomain(bidderRequest.refererInfo.referer); + if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.page) { + site.page = bidderRequest.refererInfo.page; + site.domain = bidderRequest.refererInfo.domain; } return site; } -function getDomain(referer) { - if (referer) { - let domainA = document.createElement('a'); - domainA.href = referer; - return domainA.hostname; - } -} - function buildDevice() { return { ua: navigator.userAgent, diff --git a/modules/deltaprojectsBidAdapter.js b/modules/deltaprojectsBidAdapter.js index 33df5bd252e..e40ec58461c 100644 --- a/modules/deltaprojectsBidAdapter.js +++ b/modules/deltaprojectsBidAdapter.js @@ -1,8 +1,6 @@ -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { BANNER } from '../src/mediaTypes.js'; -import { - _each, _map, isFn, isNumber, createTrackPixelHtml, deepAccess, parseUrl, logWarn, logError -} from '../src/utils.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {BANNER} from '../src/mediaTypes.js'; +import {_each, _map, createTrackPixelHtml, deepAccess, isFn, isNumber, logError, logWarn} from '../src/utils.js'; import {config} from '../src/config.js'; export const BIDDER_CODE = 'deltaprojects'; @@ -32,14 +30,13 @@ function buildRequests(validBidRequests, bidderRequest) { const id = bidderRequest.auctionId; // -- build site - const loc = parseUrl(bidderRequest.refererInfo.referer); const publisherId = setOnAny(validBidRequests, 'params.publisherId'); const siteId = setOnAny(validBidRequests, 'params.siteId'); const site = { id: siteId, - domain: loc.hostname, - page: loc.href, - ref: loc.href, + domain: bidderRequest.refererInfo.domain, + page: bidderRequest.refererInfo.page, + ref: bidderRequest.refererInfo.ref, publisher: { id: publisherId }, }; diff --git a/modules/displayioBidAdapter.js b/modules/displayioBidAdapter.js index 55a2f4a8604..e039d461fc7 100644 --- a/modules/displayioBidAdapter.js +++ b/modules/displayioBidAdapter.js @@ -88,9 +88,10 @@ export const spec = { keywords: params.keywords ? params.keywords.split(',').map(k => k.trim()) : [], lang_content: document.documentElement.lang, lang: window.navigator.language, - domain: window.location.hostname, - page: window.location.href, - ref: refererInfo.referer, + // TODO: are these the correct refererInfo values? + domain: refererInfo.domain, + page: refererInfo.page, + ref: refererInfo.ref, userids: _getUserIDs(), geo: '', }, diff --git a/modules/distroscaleBidAdapter.js b/modules/distroscaleBidAdapter.js index b08f6755b00..005dd3e67d6 100644 --- a/modules/distroscaleBidAdapter.js +++ b/modules/distroscaleBidAdapter.js @@ -129,7 +129,8 @@ export const spec = { }, buildRequests: (validBidRequests, bidderRequest) => { - var pageUrl = (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer) || window.location.href; + // TODO: does the fallback to window.location make sense? + var pageUrl = bidderRequest?.refererInfo?.page || window.location.href; var payload = { id: '' + (new Date()).getTime(), diff --git a/modules/docereeBidAdapter.js b/modules/docereeBidAdapter.js index 737a9f707db..524f464cee3 100644 --- a/modules/docereeBidAdapter.js +++ b/modules/docereeBidAdapter.js @@ -24,6 +24,7 @@ export const spec = { buildRequests: (validBidRequests) => { const serverRequests = []; const { data } = config.getConfig('doceree.user') + // TODO: this should probably look at refererInfo const { page, domain, token } = config.getConfig('doceree.context') const encodedUserInfo = window.btoa(encodeURIComponent(JSON.stringify(data))) diff --git a/modules/dspxBidAdapter.js b/modules/dspxBidAdapter.js index 7f15a71298e..6af0236d3bb 100644 --- a/modules/dspxBidAdapter.js +++ b/modules/dspxBidAdapter.js @@ -22,7 +22,7 @@ export const spec = { const placementId = params.placement; const rnd = Math.floor(Math.random() * 99999999999); - const referrer = bidderRequest.refererInfo.referer; + const referrer = bidderRequest.refererInfo.page; const bidId = bidRequest.bidId; const isDev = params.devMode || false; const pbcode = bidRequest.adUnitCode || false; // div id diff --git a/modules/e_volutionBidAdapter.js b/modules/e_volutionBidAdapter.js index 63332db8725..a4372fc5dec 100644 --- a/modules/e_volutionBidAdapter.js +++ b/modules/e_volutionBidAdapter.js @@ -66,8 +66,9 @@ export const spec = { buildRequests: (validBidRequests = [], bidderRequest) => { let winTop = window; let location; + // TODO: this odd try-catch block was copied in several adapters; it doesn't seem to be correct for cross-origin try { - location = new URL(bidderRequest.refererInfo.referer) + location = new URL(bidderRequest.refererInfo.page) winTop = window.top; } catch (e) { location = winTop.location; diff --git a/modules/emx_digitalBidAdapter.js b/modules/emx_digitalBidAdapter.js index 66fd2eb2ac1..d904ebda9c8 100644 --- a/modules/emx_digitalBidAdapter.js +++ b/modules/emx_digitalBidAdapter.js @@ -7,13 +7,13 @@ import { isPlainObject, isStr, logError, - logWarn, - parseUrl + logWarn } from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; import {Renderer} from '../src/Renderer.js'; import {find, includes} from '../src/polyfill.js'; +import {parseDomain} from '../src/refererDetection.js'; const BIDDER_CODE = 'emx_digital'; const ENDPOINT = 'hb.emxdgt.com'; @@ -140,19 +140,12 @@ export const emxAdapter = { logError('emx_digitalBidAdapter', 'error', err); } }, - getReferrer: () => { - try { - return window.top.document.referrer; - } catch (err) { - return document.referrer; - } - }, getSite: (refInfo) => { - let url = parseUrl(refInfo.referer); + // TODO: do the fallbacks make sense? return { - domain: url.hostname, - page: refInfo.referer, - ref: emxAdapter.getReferrer() + domain: refInfo.domain || parseDomain(refInfo.topmostLocation), + page: refInfo.page || refInfo.topmostLocation, + ref: refInfo.ref || window.document.referrer } }, getGdpr: (bidRequests, emxData) => { diff --git a/modules/engageyaBidAdapter.js b/modules/engageyaBidAdapter.js index 95ab8ecbd03..ceec1de8fe7 100644 --- a/modules/engageyaBidAdapter.js +++ b/modules/engageyaBidAdapter.js @@ -13,9 +13,10 @@ function getPageUrl(bidRequest, bidderRequest) { if (bidRequest.params.pageUrl && bidRequest.params.pageUrl != '[PAGE_URL]') { return bidRequest.params.pageUrl; } - if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { - return bidderRequest.refererInfo.referer; + if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.page) { + return bidderRequest.refererInfo.page; } + // TODO: does this fallback make sense? const pageUrl = (isInIframe() && document.referrer) ? document.referrer : window.location.href; diff --git a/modules/enrichmentFpdModule.js b/modules/enrichmentFpdModule.js index 76bae635fd3..139b03d6189 100644 --- a/modules/enrichmentFpdModule.js +++ b/modules/enrichmentFpdModule.js @@ -5,7 +5,7 @@ */ import { timestamp, mergeDeep } from '../src/utils.js'; import { submodule } from '../src/hook.js'; -import { getRefererInfo } from '../src/refererDetection.js'; +import {getRefererInfo, parseDomain} from '../src/refererDetection.js'; import { getCoreStorageManager } from '../src/storageManager.js'; let ortb2 = {}; @@ -70,30 +70,21 @@ export function findRootDomain(fullDomain = window.location.hostname) { * Checks for referer and if exists merges into ortb2 global data */ function setReferer() { - if (getRefererInfo().referer) mergeDeep(ortb2, { site: { ref: getRefererInfo().referer } }); + if (getRefererInfo().ref) mergeDeep(ortb2, { site: { ref: getRefererInfo().ref } }); } /** * Checks for canonical url and if exists merges into ortb2 global data */ function setPage() { - if (getRefererInfo().canonicalUrl) mergeDeep(ortb2, { site: { page: getRefererInfo().canonicalUrl } }); + if (getRefererInfo().page) mergeDeep(ortb2, { site: { page: getRefererInfo().page } }); } /** * Checks for canonical url and if exists retrieves domain and merges into ortb2 global data */ function setDomain() { - let parseDomain = function(url) { - if (!url || typeof url !== 'string' || url.length === 0) return; - - var match = url.match(/^(?:https?:\/\/)?(?:www\.)?(.*?(?=(\?|\#|\/|$)))/i); - - return match && match[1]; - }; - - let domain = parseDomain(getRefererInfo().canonicalUrl) - + const domain = parseDomain(getRefererInfo().page, {noLeadingWww: true}); if (domain) { mergeDeep(ortb2, { site: { domain: domain } }); mergeDeep(ortb2, { site: { publisher: { domain: findRootDomain(domain) } } }); diff --git a/modules/eplanningBidAdapter.js b/modules/eplanningBidAdapter.js index 780531964ad..ca2cbfd9908 100644 --- a/modules/eplanningBidAdapter.js +++ b/modules/eplanningBidAdapter.js @@ -1,7 +1,7 @@ -import { isEmpty, getWindowSelf, parseSizesInput } from '../src/utils.js'; -import { getGlobal } from '../src/prebidGlobal.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { getStorageManager } from '../src/storageManager.js'; +import {getWindowSelf, isEmpty, parseSizesInput} from '../src/utils.js'; +import {getGlobal} from '../src/prebidGlobal.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {getStorageManager} from '../src/storageManager.js'; const BIDDER_CODE = 'eplanning'; export const storage = getStorageManager({bidderCode: BIDDER_CODE}); @@ -36,18 +36,16 @@ export const spec = { const urlConfig = getUrlConfig(bidRequests); const pcrs = getCharset(); const spaces = getSpaces(bidRequests, urlConfig.ml); - const pageUrl = bidderRequest.refererInfo.referer; - const getDomain = (url) => { - let anchor = document.createElement('a'); - anchor.href = url; - return anchor.hostname; - } + // TODO: do the fallbacks make sense here? + const pageUrl = bidderRequest.refererInfo.page || bidderRequest.refererInfo.topmostLocation; + const domain = bidderRequest.refererInfo.domain || window.location.host if (urlConfig.t) { url = 'https://' + urlConfig.isv + '/layers/t_pbjs_2.json'; params = {}; } else { - url = 'https://' + (urlConfig.sv || DEFAULT_SV) + '/pbjs/1/' + urlConfig.ci + '/' + dfpClientId + '/' + getDomain(pageUrl) + '/' + sec; - const referrerUrl = bidderRequest.refererInfo.referer.reachedTop ? window.top.document.referrer : bidderRequest.refererInfo.referer; + url = 'https://' + (urlConfig.sv || DEFAULT_SV) + '/pbjs/1/' + urlConfig.ci + '/' + dfpClientId + '/' + domain + '/' + sec; + // TODO: does the fallback make sense here? + const referrerUrl = bidderRequest.refererInfo.ref || bidderRequest.refererInfo.topmostLocation if (storage.hasLocalStorage()) { registerViewabilityAllBids(bidRequests); diff --git a/modules/fabrickIdSystem.js b/modules/fabrickIdSystem.js index 08eb2d4f043..24eac8517b0 100644 --- a/modules/fabrickIdSystem.js +++ b/modules/fabrickIdSystem.js @@ -73,7 +73,7 @@ export const fabrickIdSubmodule = { url = url.slice(0, -1) const referer = _getRefererInfo(configParams); const refs = new Map(); - _setReferrer(refs, referer.referer); + _setReferrer(refs, referer.topmostLocation); if (referer.stack && referer.stack[0]) { _setReferrer(refs, referer.stack[0]); } diff --git a/modules/feedadBidAdapter.js b/modules/feedadBidAdapter.js index 6fb39c49ec8..d695292bb4a 100644 --- a/modules/feedadBidAdapter.js +++ b/modules/feedadBidAdapter.js @@ -206,7 +206,8 @@ function buildRequests(validBidRequests, bidderRequest) { }) }); data.bids.forEach(bid => BID_METADATA[bid.bidId] = { - referer: data.refererInfo.referer, + // TODO: is 'page' the right value here? + referer: data.refererInfo.page, transactionId: bid.transactionId }); if (bidderRequest.gdprConsent) { diff --git a/modules/fluctBidAdapter.js b/modules/fluctBidAdapter.js index 44b9f3bf217..ea634027dbe 100644 --- a/modules/fluctBidAdapter.js +++ b/modules/fluctBidAdapter.js @@ -39,7 +39,8 @@ export const spec = { */ buildRequests: (validBidRequests, bidderRequest) => { const serverRequests = []; - const referer = bidderRequest.refererInfo.referer; + // TODO: is 'page' the right value here? + const referer = bidderRequest.refererInfo.page; _each(validBidRequests, (request) => { const data = Object(); diff --git a/modules/freewheel-sspBidAdapter.js b/modules/freewheel-sspBidAdapter.js index eca31dd5a95..91453fdcf5d 100644 --- a/modules/freewheel-sspBidAdapter.js +++ b/modules/freewheel-sspBidAdapter.js @@ -326,8 +326,8 @@ export const spec = { } } } - - var location = (bidderRequest && bidderRequest.refererInfo) ? bidderRequest.refererInfo.referer : getTopMostWindow().location.href; + // TODO: is 'page' the right value here? + var location = bidderRequest?.refererInfo?.page; if (isValidUrl(location)) { requestParams.loc = location; } diff --git a/modules/gammaBidAdapter.js b/modules/gammaBidAdapter.js index 3e1298b7e23..279eb78812e 100644 --- a/modules/gammaBidAdapter.js +++ b/modules/gammaBidAdapter.js @@ -27,7 +27,7 @@ export const spec = { */ buildRequests: function(bidRequests, bidderRequest) { const serverRequests = []; - const bidderRequestReferer = (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer) || ''; + const bidderRequestReferer = bidderRequest?.refererInfo?.page || ''; for (var i = 0, len = bidRequests.length; i < len; i++) { const gaxObjParams = bidRequests[i]; serverRequests.push({ diff --git a/modules/gamoshiBidAdapter.js b/modules/gamoshiBidAdapter.js index 2d97290df88..26afe6e6b87 100644 --- a/modules/gamoshiBidAdapter.js +++ b/modules/gamoshiBidAdapter.js @@ -12,7 +12,6 @@ import { logWarn } from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; -import {config} from '../src/config.js'; import {Renderer} from '../src/Renderer.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; import {includes} from '../src/polyfill.js'; @@ -34,11 +33,6 @@ export const helper = { startsWith: function (str, search) { return str.substr(0, search.length) === search; }, - getTopWindowDomain: function (url) { - const domainStart = url.indexOf('://') + '://'.length; - return url.substring(domainStart, url.indexOf('/', domainStart) < 0 ? url.length : url.indexOf('/', domainStart)); - }, - getMediaType: function (bid) { if (bid.ext) { if (bid.ext.media_type) { @@ -89,14 +83,12 @@ export const spec = { const {adUnitCode, auctionId, mediaTypes, params, sizes, transactionId} = bidRequest; const baseEndpoint = params['rtbEndpoint'] || ENDPOINTS['gamoshi']; const rtbEndpoint = `${baseEndpoint}/r/${params.supplyPartnerId}/bidr?rformat=open_rtb&reqformat=rtb_json&bidder=prebid` + (params.query ? '&' + params.query : ''); - let url = config.getConfig('pageUrl') || bidderRequest.refererInfo.referer; - const rtbBidRequest = { id: auctionId, site: { - domain: helper.getTopWindowDomain(url), - page: url, - ref: bidderRequest.refererInfo.referer + domain: bidderRequest.refererInfo.domain, + page: bidderRequest.refererInfo.page, + ref: bidderRequest.refererInfo.ref }, device: { ua: navigator.userAgent, diff --git a/modules/gjirafaBidAdapter.js b/modules/gjirafaBidAdapter.js index 48b2cd43c3b..af70c0c67f0 100644 --- a/modules/gjirafaBidAdapter.js +++ b/modules/gjirafaBidAdapter.js @@ -45,7 +45,7 @@ export const spec = { if (!propertyId) { propertyId = bidRequest.params.propertyId; } if (!pageViewGuid && bidRequest.params) { pageViewGuid = bidRequest.params.pageViewGuid || ''; } if (!bidderRequestId) { bidderRequestId = bidRequest.bidderRequestId; } - if (!url && bidderRequest) { url = bidderRequest.refererInfo.referer; } + if (!url && bidderRequest) { url = bidderRequest.refererInfo.page; } if (!contents.length && bidRequest.params.contents && bidRequest.params.contents.length) { contents = bidRequest.params.contents; } if (Object.keys(data).length === 0 && bidRequest.params.data && Object.keys(bidRequest.params.data).length !== 0) { data = bidRequest.params.data; } diff --git a/modules/glimpseBidAdapter.js b/modules/glimpseBidAdapter.js index 3f414f32f4a..bbb4dbb30cd 100644 --- a/modules/glimpseBidAdapter.js +++ b/modules/glimpseBidAdapter.js @@ -95,7 +95,8 @@ function getVaultJwt() { } function getReferer(bidderRequest) { - return bidderRequest?.refererInfo?.referer || ''; + // TODO: is 'page' the right value here? + return bidderRequest?.refererInfo?.page || ''; } function buildQuery(bidderRequest) { diff --git a/modules/glomexBidAdapter.js b/modules/glomexBidAdapter.js index 5cabd2515a9..32c2036a748 100644 --- a/modules/glomexBidAdapter.js +++ b/modules/glomexBidAdapter.js @@ -26,10 +26,11 @@ export const spec = { data: { auctionId: bidderRequest.auctionId, refererInfo: { + // TODO: this collects everything it finds, except for canonicalUrl isAmp: refererInfo.isAmp, numIframes: refererInfo.numIframes, reachedTop: refererInfo.reachedTop, - referer: refererInfo.referer + referer: refererInfo.topmostLocation, }, gdprConsent: { consentString: gdprConsent.consentString, diff --git a/modules/gmosspBidAdapter.js b/modules/gmosspBidAdapter.js index 087f74906fb..9bc1a15b60b 100644 --- a/modules/gmosspBidAdapter.js +++ b/modules/gmosspBidAdapter.js @@ -1,7 +1,18 @@ -import { deepAccess, getDNT, getBidIdParameter, tryAppendQueryString, isEmpty, createTrackPixelHtml, logError, deepSetValue, getWindowTop, getWindowLocation } from '../src/utils.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { config } from '../src/config.js'; -import { BANNER } from '../src/mediaTypes.js'; +import { + createTrackPixelHtml, + deepAccess, + deepSetValue, + getBidIdParameter, + getDNT, + getWindowTop, + isEmpty, + logError, + tryAppendQueryString +} from '../src/utils.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {config} from '../src/config.js'; +import {BANNER} from '../src/mediaTypes.js'; + const BIDDER_CODE = 'gmossp'; const ENDPOINT = 'https://sp.gmossp-sp.jp/hb/prebid/query.ad'; @@ -155,9 +166,10 @@ function getUrlInfo(refererInfo) { } return { - url: getUrl(refererInfo), canonicalLink: canonicalLink, - ref: getReferrer(), + // TODO: are these the right refererInfo values? + url: refererInfo.topmostLocation, + ref: refererInfo.ref || window.document.referrer, }; } @@ -169,24 +181,4 @@ function getMetaElements() { } } -function getUrl(refererInfo) { - if (refererInfo && refererInfo.referer) { - return refererInfo.referer; - } - - try { - return getWindowTop.location.href; - } catch (e) { - return getWindowLocation.href; - } -} - -function getReferrer() { - try { - return getWindowTop.document.referrer; - } catch (e) { - return document.referrer; - } -} - registerBidder(spec); diff --git a/modules/gnetBidAdapter.js b/modules/gnetBidAdapter.js index 274e8db2b50..8bab043d0db 100644 --- a/modules/gnetBidAdapter.js +++ b/modules/gnetBidAdapter.js @@ -31,7 +31,8 @@ export const spec = { */ buildRequests: function (validBidRequests, bidderRequest) { const bidRequests = []; - const referer = bidderRequest.refererInfo.referer; + // TODO: is 'page' the right value? + const referer = bidderRequest.refererInfo.page; _each(validBidRequests, (request) => { const data = {}; diff --git a/modules/goldbachBidAdapter.js b/modules/goldbachBidAdapter.js index 7b6ae810b67..49229b31b38 100644 --- a/modules/goldbachBidAdapter.js +++ b/modules/goldbachBidAdapter.js @@ -246,7 +246,8 @@ export const spec = { if (bidderRequest && bidderRequest.refererInfo) { let refererinfo = { - rd_ref: encodeURIComponent(bidderRequest.refererInfo.referer), + // TODO: this collects everything it finds, except for topmostLocation + rd_ref: encodeURIComponent(bidderRequest.refererInfo.topmostLocation), rd_top: bidderRequest.refererInfo.reachedTop, rd_ifs: bidderRequest.refererInfo.numIframes, rd_stk: bidderRequest.refererInfo.stack.map((url) => encodeURIComponent(url)).join(',') diff --git a/modules/gothamadsBidAdapter.js b/modules/gothamadsBidAdapter.js index 1993f0c9b64..5f2d3c4f36a 100644 --- a/modules/gothamadsBidAdapter.js +++ b/modules/gothamadsBidAdapter.js @@ -74,8 +74,9 @@ export const spec = { let winTop = window; let location; + // TODO: this odd try-catch block was copied in several adapters; it doesn't seem to be correct for cross-origin try { - location = new URL(bidderRequest.refererInfo.referer) + location = new URL(bidderRequest.refererInfo.page) winTop = window.top; } catch (e) { location = winTop.location; diff --git a/modules/gridBidAdapter.js b/modules/gridBidAdapter.js index dc9c793701b..40b79784595 100644 --- a/modules/gridBidAdapter.js +++ b/modules/gridBidAdapter.js @@ -72,7 +72,8 @@ export const spec = { let forceBidderName = false; let {bidderRequestId, auctionId, gdprConsent, uspConsent, timeout, refererInfo} = bidderRequest || {}; - const referer = refererInfo ? encodeURIComponent(refererInfo.referer) : ''; + // TODO: is 'page' the right value here? + const referer = refererInfo ? encodeURIComponent(refererInfo.page) : ''; const imp = []; const bidsMap = {}; diff --git a/modules/gridNMBidAdapter.js b/modules/gridNMBidAdapter.js index 3c46b25b8e1..63c42f60933 100644 --- a/modules/gridNMBidAdapter.js +++ b/modules/gridNMBidAdapter.js @@ -67,7 +67,7 @@ export const spec = { const requests = []; let { bidderRequestId, auctionId, gdprConsent, uspConsent, timeout, refererInfo } = bidderRequest || {}; - const referer = refererInfo ? encodeURIComponent(refererInfo.referer) : ''; + const referer = refererInfo ? encodeURIComponent(refererInfo.page) : ''; bids.forEach(bid => { let user; diff --git a/modules/growadvertisingBidAdapter.js b/modules/growadvertisingBidAdapter.js index 286d27607c5..0fdca8265c6 100644 --- a/modules/growadvertisingBidAdapter.js +++ b/modules/growadvertisingBidAdapter.js @@ -101,7 +101,8 @@ export const spec = { netRevenue: true, ttl: response.ttl, adUnitCode: request.adUnitCode, - referrer: deepAccess(request, 'refererInfo.referer') + // TODO: is 'page' the right value here? + referrer: deepAccess(request, 'refererInfo.page') }; if (response.hasOwnProperty(NATIVE)) { diff --git a/modules/gumgumBidAdapter.js b/modules/gumgumBidAdapter.js index f7662f54fae..cf6c390d494 100644 --- a/modules/gumgumBidAdapter.js +++ b/modules/gumgumBidAdapter.js @@ -294,7 +294,7 @@ function buildRequests(validBidRequests, bidderRequest) { const gdprConsent = bidderRequest && bidderRequest.gdprConsent; const uspConsent = bidderRequest && bidderRequest.uspConsent; const timeout = config.getConfig('bidderTimeout'); - const topWindowUrl = bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer; + const topWindowUrl = bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.page; _each(validBidRequests, bidRequest => { const { bidId, diff --git a/modules/h12mediaBidAdapter.js b/modules/h12mediaBidAdapter.js index 9a6244a9e82..29d8bfa5e0f 100644 --- a/modules/h12mediaBidAdapter.js +++ b/modules/h12mediaBidAdapter.js @@ -70,8 +70,9 @@ export const spec = { gdpr_cs: deepAccess(bidderRequest, 'gdprConsent.consentString', ''), usp: !!deepAccess(bidderRequest, 'uspConsent', false), usp_cs: deepAccess(bidderRequest, 'uspConsent', ''), - topLevelUrl: deepAccess(bidderRequest, 'refererInfo.referer', ''), - refererUrl: windowTop.document.referrer, + topLevelUrl: deepAccess(bidderRequest, 'refererInfo.page', ''), + // TODO: does the fallback make sense here? + refererUrl: deepAccess(bidderRequest, 'refererInfo.ref', window.document.referrer), isiframe, version: '$prebid.version$', ExtUserIDs: bidRequest.userId, diff --git a/modules/hadronAnalyticsAdapter.js b/modules/hadronAnalyticsAdapter.js index bc112989426..c0e39925b4a 100644 --- a/modules/hadronAnalyticsAdapter.js +++ b/modules/hadronAnalyticsAdapter.js @@ -36,10 +36,7 @@ var pageView = { timezoneOffset: new Date().getTimezoneOffset(), language: window.navigator.language, vendor: window.navigator.vendor, - pageUrl: (() => { - const ri = getRefererInfo(); - return ri.canonicalUrl || ri.referer; - })(), + pageUrl: getRefererInfo().page, screenWidth: x, screenHeight: y }; diff --git a/modules/hybridBidAdapter.js b/modules/hybridBidAdapter.js index 98fecf04d8d..6cedb094444 100644 --- a/modules/hybridBidAdapter.js +++ b/modules/hybridBidAdapter.js @@ -204,7 +204,8 @@ export const spec = { */ buildRequests(validBidRequests, bidderRequest) { const payload = { - url: bidderRequest.refererInfo.referer, + // TODO: is 'page' the right value here? + url: bidderRequest.refererInfo.page, cmp: !!bidderRequest.gdprConsent, trafficType: TRAFFIC_TYPE_WEB, bidRequests: buildBidRequests(validBidRequests) diff --git a/modules/id5IdSystem.js b/modules/id5IdSystem.js index b57be00d3ac..96ec1fed754 100644 --- a/modules/id5IdSystem.js +++ b/modules/id5IdSystem.js @@ -122,7 +122,7 @@ export const id5IdSubmodule = { 'gdpr': hasGdpr, 'nbPage': incrementNb(config.params.partner), 'o': 'pbjs', - 'rf': referer.referer, + 'rf': referer.topmostLocation, 'top': referer.reachedTop ? 1 : 0, 'u': referer.stack[0] || window.location.href, 'v': '$prebid.version$' diff --git a/modules/impactifyBidAdapter.js b/modules/impactifyBidAdapter.js index b204e81f22c..a4010772db0 100644 --- a/modules/impactifyBidAdapter.js +++ b/modules/impactifyBidAdapter.js @@ -65,7 +65,7 @@ const createOpenRtbRequest = (validBidRequests, bidderRequest) => { dnt: (navigator.doNotTrack == 'yes' || navigator.doNotTrack == '1' || navigator.msDoNotTrack == '1') ? 1 : 0, language: ((navigator.language || navigator.userLanguage || '').split('-'))[0] || 'en', }; - request.site = {page: bidderRequest.refererInfo.referer}; + request.site = {page: bidderRequest.refererInfo.page}; // Handle privacy settings for GDPR/CCPA/COPPA let gdprApplies = 0; diff --git a/modules/improvedigitalBidAdapter.js b/modules/improvedigitalBidAdapter.js index 3a94356ff71..687eabca2d7 100644 --- a/modules/improvedigitalBidAdapter.js +++ b/modules/improvedigitalBidAdapter.js @@ -1,6 +1,16 @@ import { - cleanObj, deepAccess, deepClone, deepSetValue, getBidIdParameter, getBidRequest, getDNT, - getUniqueIdentifierStr, isFn, isPlainObject, logWarn, mergeDeep, parseUrl + cleanObj, + deepAccess, + deepClone, + deepSetValue, + getBidIdParameter, + getBidRequest, + getDNT, + getUniqueIdentifierStr, + isFn, + isPlainObject, + logWarn, + mergeDeep } from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {config} from '../src/config.js'; @@ -487,10 +497,10 @@ const ID_REQUEST = { request.app = app; } else { const site = {}; - const url = config.getConfig('pageUrl') || deepAccess(bidderRequest, 'refererInfo.referer'); + const url = deepAccess(bidderRequest, 'refererInfo.page'); if (url) { site.page = url; - site.domain = parseUrl(url).hostname; + site.domain = bidderRequest.refererInfo.domain } const configSiteSettings = config.getConfig('site') || {}; const fpdSiteSettings = deepAccess(bidderRequest, 'ortb2.site') || {}; diff --git a/modules/incrxBidAdapter.js b/modules/incrxBidAdapter.js index 5926f5a8729..914ef0b904e 100644 --- a/modules/incrxBidAdapter.js +++ b/modules/incrxBidAdapter.js @@ -36,7 +36,8 @@ export const spec = { _vzPlacementId: bidRequest.params.placementId, sizes: sizes, _slotBidId: bidRequest.bidId, - _rqsrc: bidderRequest.refererInfo.referer, + // TODO: is 'page' the right value here? + _rqsrc: bidderRequest.refererInfo.page, }; const payload = { diff --git a/modules/inmarBidAdapter.js b/modules/inmarBidAdapter.js index a1b772bb204..42bd64ee816 100755 --- a/modules/inmarBidAdapter.js +++ b/modules/inmarBidAdapter.js @@ -34,7 +34,8 @@ export const spec = { bidRequests: validBidRequests, auctionStart: bidderRequest.auctionStart, timeout: bidderRequest.timeout, - refererInfo: bidderRequest.refererInfo, + // TODO: please do not send internal data structures over the network + refererInfo: bidderRequest.refererInfo.legacy, start: bidderRequest.start, gdprConsent: bidderRequest.gdprConsent, uspConsent: bidderRequest.uspConsent, diff --git a/modules/innityBidAdapter.js b/modules/innityBidAdapter.js index 0a2f701ef64..71fe588441c 100644 --- a/modules/innityBidAdapter.js +++ b/modules/innityBidAdapter.js @@ -23,7 +23,7 @@ export const spec = { output: 'js', pub: bidRequest.params.pub, zone: bidRequest.params.zone, - url: bidderRequest && bidderRequest.refererInfo ? encodeURIComponent(bidderRequest.refererInfo.referer) : '', + url: bidderRequest && bidderRequest.refererInfo ? encodeURIComponent(bidderRequest.refererInfo.page) : '', width: arrSize[0], height: arrSize[1], vpw: window.screen.width, diff --git a/modules/inskinBidAdapter.js b/modules/inskinBidAdapter.js index 6f0023498aa..212696383d9 100644 --- a/modules/inskinBidAdapter.js +++ b/modules/inskinBidAdapter.js @@ -50,7 +50,7 @@ export const spec = { placements: [], time: Date.now(), user: {}, - url: bidderRequest.refererInfo.referer, + url: bidderRequest.refererInfo.page, enableBotFiltering: true, includePricingData: true, parallel: true diff --git a/modules/insticatorBidAdapter.js b/modules/insticatorBidAdapter.js index 4d069cc91a6..07ccfb16de1 100644 --- a/modules/insticatorBidAdapter.js +++ b/modules/insticatorBidAdapter.js @@ -177,9 +177,10 @@ function buildRequest(validBidRequests, bidderRequest) { tid: bidderRequest.auctionId, }, site: { - domain: location.hostname, - page: location.href, - ref: bidderRequest.refererInfo.referer, + // TODO: are these the right refererInfo values? + domain: bidderRequest.refererInfo.domain, + page: bidderRequest.refererInfo.page, + ref: bidderRequest.refererInfo.ref, }, device: buildDevice(), regs: buildRegs(bidderRequest), diff --git a/modules/integr8BidAdapter.js b/modules/integr8BidAdapter.js index d61fe624c59..3ba68ffb6d6 100644 --- a/modules/integr8BidAdapter.js +++ b/modules/integr8BidAdapter.js @@ -46,7 +46,7 @@ export const spec = { bidderRequestId = bidderRequest.bidderRequestId; if (bidderRequest.refererInfo) { - url = bidderRequest.refererInfo.referer; + url = bidderRequest.refererInfo.page; } } diff --git a/modules/interactiveOffersBidAdapter.js b/modules/interactiveOffersBidAdapter.js index d8a106623fd..25dcd4f3cd1 100644 --- a/modules/interactiveOffersBidAdapter.js +++ b/modules/interactiveOffersBidAdapter.js @@ -1,7 +1,6 @@ -import { logWarn, isNumber } from '../src/utils.js'; +import {isNumber, logWarn} from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER} from '../src/mediaTypes.js'; -import {config} from '../src/config.js'; const BIDDER_CODE = 'interactiveOffers'; const ENDPOINT = 'https://prebid.ioadx.com/bidRequest/?partnerId='; @@ -77,13 +76,15 @@ function parseRequestPrebidjsToOpenRTB(prebidRequest) { payload: {}, partnerId: null }; + // TODO: these should probably look at refererInfo let pageURL = window.location.href; let domain = window.location.hostname; let secure = (window.location.protocol == 'https:' ? 1 : 0); let openRTBRequest = JSON.parse(JSON.stringify(DEFAULT['OpenRTBBidRequest'])); openRTBRequest.id = prebidRequest.auctionId; openRTBRequest.ext = { - refererInfo: prebidRequest.refererInfo, + // TODO: please do not send internal data structures over the network + refererInfo: prebidRequest.refererInfo.legacy, auctionId: prebidRequest.auctionId }; @@ -92,11 +93,11 @@ function parseRequestPrebidjsToOpenRTB(prebidRequest) { openRTBRequest.site.name = domain; openRTBRequest.site.domain = domain; openRTBRequest.site.page = pageURL; - openRTBRequest.site.ref = prebidRequest.refererInfo.referer; + openRTBRequest.site.ref = prebidRequest.refererInfo.ref; openRTBRequest.site.publisher = JSON.parse(JSON.stringify(DEFAULT['OpenRTBBidRequestSitePublisher'])); openRTBRequest.site.publisher.id = 0; - openRTBRequest.site.publisher.name = config.getConfig('publisherDomain'); + openRTBRequest.site.publisher.name = prebidRequest.refererInfo.domain; openRTBRequest.site.publisher.domain = domain; openRTBRequest.site.publisher.domain = domain; diff --git a/modules/ipromBidAdapter.js b/modules/ipromBidAdapter.js index 46582ce95a1..eaf20ad3ad3 100644 --- a/modules/ipromBidAdapter.js +++ b/modules/ipromBidAdapter.js @@ -34,7 +34,8 @@ export const spec = { buildRequests: function (validBidRequests, bidderRequest) { const payload = { bids: validBidRequests, - referer: bidderRequest.refererInfo, + // TODO: please do not send internal data structures over the network + referer: bidderRequest.refererInfo.legacy, version: VERSION }; const payloadString = JSON.stringify(payload); diff --git a/modules/iqmBidAdapter.js b/modules/iqmBidAdapter.js index 75854d39fd5..68b027c1bec 100644 --- a/modules/iqmBidAdapter.js +++ b/modules/iqmBidAdapter.js @@ -1,4 +1,4 @@ -import { deepAccess, getBidIdParameter, isArray, _each, getWindowTop, parseUrl } from '../src/utils.js'; +import {_each, deepAccess, getBidIdParameter, isArray} from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {config} from '../src/config.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; @@ -102,7 +102,7 @@ export const spec = { imp.video = _buildVideoORTB(bid); imp.mediatype = 'video'; } - const site = getSite(bid); + const site = getSite(bidderRequest); let device = getDevice(bid.params); finalRequest = { sizes: bid.sizes, @@ -116,6 +116,8 @@ export const spec = { adUnitCode: bid.adUnitCode, bidderRequestId: bid.bidderRequestId, uuid: bid.bidId, + // TODO: please do not send internal data structures over the network + // I am not going to attempt to accommodate this, no way this is usable on their end, it changes way too frequently bidderRequest } const request = { @@ -227,19 +229,10 @@ function getSite(bidderRequest) { const {refererInfo} = bidderRequest; - if (canAccessTopWindow()) { - const wt = getWindowTop(); - domain = wt.location.hostname; - page = wt.location.href; - referrer = wt.document.referrer || ''; - } else if (refererInfo.reachedTop) { - const url = parseUrl(refererInfo.referer); - domain = url.hostname; - page = refererInfo.referer; - } else if (refererInfo.stack && refererInfo.stack.length && refererInfo.stack[0]) { - const url = parseUrl(refererInfo.stack[0]); - domain = url.hostname; - } + // TODO: are these the right refererInfo values? + domain = refererInfo.domain; + page = refererInfo.page; + referrer = refererInfo.ref; return { domain, @@ -249,16 +242,6 @@ function getSite(bidderRequest) { }; }; -function canAccessTopWindow() { - try { - if (getWindowTop().location.href) { - return true; - } - } catch (error) { - return false; - } -} - function _buildVideoORTB(bidRequest) { const videoAdUnit = deepAccess(bidRequest, 'mediaTypes.video'); const videoBidderParams = deepAccess(bidRequest, 'params.video', {}); diff --git a/modules/iqzoneBidAdapter.js b/modules/iqzoneBidAdapter.js index 6c0a2e5f56d..3bd613e786b 100644 --- a/modules/iqzoneBidAdapter.js +++ b/modules/iqzoneBidAdapter.js @@ -125,7 +125,7 @@ export const spec = { winLocation = window.location; } - const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.referer; + const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.page; let refferLocation; try { refferLocation = refferUrl && new URL(refferUrl); diff --git a/modules/ixBidAdapter.js b/modules/ixBidAdapter.js index 26bb67bb7a0..cfdf644eff3 100644 --- a/modules/ixBidAdapter.js +++ b/modules/ixBidAdapter.js @@ -491,7 +491,7 @@ function buildRequest(validBidRequests, bidderRequest, impressions, version) { // Get ids from Prebid User ID Modules let eidInfo = getEidInfo(deepAccess(validBidRequests, '0.userIdAsEids')); let userEids = eidInfo.toSend; - const pageUrl = getPageUrl() || deepAccess(bidderRequest, 'refererInfo.referer'); + const pageUrl = deepAccess(bidderRequest, 'refererInfo.page'); // RTI ids will be included in the bid request if the function getIdentityInfo() is loaded // and if the data for the partner exist @@ -936,20 +936,6 @@ function createBannerImps(validBidRequest, missingBannerSizes, bannerImps) { } } -/** - * Returns the `pageUrl` set by publisher on the page if it is an valid url - */ -function getPageUrl() { - const pageUrl = config.getConfig('pageUrl'); - try { - const url = new URL(pageUrl); - return url.href; - } catch (_) { - logWarn(`IX Bid Adapter: invalid pageUrl config property value set: ${pageUrl}`); - return undefined; - } -} - /** * Determines IX configuration type based on IX params * @param {object} valid IX configured param diff --git a/modules/jixieBidAdapter.js b/modules/jixieBidAdapter.js index fb55add910f..2de2de6b481 100644 --- a/modules/jixieBidAdapter.js +++ b/modules/jixieBidAdapter.js @@ -1,11 +1,11 @@ -import { logWarn, parseUrl, deepAccess, isArray, getDNT } from '../src/utils.js'; -import { config } from '../src/config.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { getStorageManager } from '../src/storageManager.js'; -import { BANNER, VIDEO } from '../src/mediaTypes.js'; -import { ajax } from '../src/ajax.js'; -import { getRefererInfo } from '../src/refererDetection.js'; -import { Renderer } from '../src/Renderer.js'; +import {deepAccess, getDNT, isArray, logWarn} from '../src/utils.js'; +import {config} from '../src/config.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {getStorageManager} from '../src/storageManager.js'; +import {BANNER, VIDEO} from '../src/mediaTypes.js'; +import {ajax} from '../src/ajax.js'; +import {getRefererInfo} from '../src/refererDetection.js'; +import {Renderer} from '../src/Renderer.js'; import {createEidsArray} from './userId/eids.js'; const BIDDER_CODE = 'jixie'; @@ -116,10 +116,12 @@ function getMiscDims_() { mkeywords: '' } try { + // TODO: this should pick refererInfo from bidderRequest let refererInfo_ = getRefererInfo(); - let url_ = ((refererInfo_ && refererInfo_.referer) ? refererInfo_.referer : window.location.href); + // TODO: does the fallback make sense here? + let url_ = refererInfo_?.page || window.location.href ret.pageurl = url_; - ret.domain = parseUrl(url_).host; + ret.domain = refererInfo_?.domain || window.location.host ret.device = getDevice_(); let keywords = document.getElementsByTagName('meta')['keywords']; if (keywords && keywords.content) { diff --git a/modules/justpremiumBidAdapter.js b/modules/justpremiumBidAdapter.js index e2ba92d51d9..7f154614e4d 100644 --- a/modules/justpremiumBidAdapter.js +++ b/modules/justpremiumBidAdapter.js @@ -25,7 +25,8 @@ export const spec = { }).filter((value, index, self) => { return self.indexOf(value) === index }), - referer: bidderRequest.refererInfo.referer, + // TODO: is 'page' the right value here? + referer: bidderRequest.refererInfo.page, sw: dim.screenWidth, sh: dim.screenHeight, ww: dim.innerWidth, diff --git a/modules/kargoBidAdapter.js b/modules/kargoBidAdapter.js index 80b3d83167e..866f0e5a4bc 100644 --- a/modules/kargoBidAdapter.js +++ b/modules/kargoBidAdapter.js @@ -241,6 +241,7 @@ export const spec = { _getAllMetadata(tdid, usp, gdpr) { return { userIDs: spec._getUserIds(tdid, usp, gdpr), + // TODO: this should probably look at refererInfo pageURL: window.location.href, rawCRB: spec._readCookie('krg_crb'), rawCRBLocalStorage: spec._getLocalStorageSafely('krg_crb') diff --git a/modules/koblerBidAdapter.js b/modules/koblerBidAdapter.js index 5fc28c47ac5..1dc22d0099a 100644 --- a/modules/koblerBidAdapter.js +++ b/modules/koblerBidAdapter.js @@ -102,21 +102,23 @@ export const onTimeout = function (timeoutDataArray) { } }; -function getPageUrlFromRefererInfo() { - const refererInfo = getRefererInfo(); - return (refererInfo && refererInfo.referer) - ? refererInfo.referer - : window.location.href; -} - function getPageUrlFromRequest(validBidRequest, bidderRequest) { // pageUrl is considered only when testing to ensure that non-test requests always contain the correct URL if (isTest(validBidRequest) && config.getConfig('pageUrl')) { + // TODO: it's not clear what the intent is here - but all adapters should always respect pageUrl. + // With prebid 7, using `refererInfo.page` will do that automatically. return config.getConfig('pageUrl'); } - return (bidderRequest.refererInfo && bidderRequest.refererInfo.referer) - ? bidderRequest.refererInfo.referer + return (bidderRequest.refererInfo && bidderRequest.refererInfo.page) + ? bidderRequest.refererInfo.page + : window.location.href; +} + +function getPageUrlFromRefererInfo() { + const refererInfo = getRefererInfo(); + return (refererInfo && refererInfo.page) + ? refererInfo.page : window.location.href; } diff --git a/modules/krushmediaBidAdapter.js b/modules/krushmediaBidAdapter.js index da68bddcb7b..6dce40524a7 100644 --- a/modules/krushmediaBidAdapter.js +++ b/modules/krushmediaBidAdapter.js @@ -51,8 +51,9 @@ export const spec = { buildRequests: (validBidRequests = [], bidderRequest) => { let winTop = window; let location; + // TODO: this odd try-catch block was copied in several adapters; it doesn't seem to be correct for cross-origin try { - location = new URL(bidderRequest.refererInfo.referer) + location = new URL(bidderRequest.refererInfo.page) winTop = window.top; } catch (e) { location = winTop.location; diff --git a/modules/kubientBidAdapter.js b/modules/kubientBidAdapter.js index 46360572576..a710db7a712 100644 --- a/modules/kubientBidAdapter.js +++ b/modules/kubientBidAdapter.js @@ -67,8 +67,9 @@ export const spec = { data.coppa = 1 } - if (bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { - data.referer = bidderRequest.refererInfo.referer + if (bidderRequest?.refererInfo?.page) { + // TODO: is 'page' the right value here? + data.referer = bidderRequest.refererInfo.page } if (bidderRequest.gdprConsent && bidderRequest.gdprConsent.consentString) { diff --git a/modules/livewrappedBidAdapter.js b/modules/livewrappedBidAdapter.js index 34773e31a37..104ff667fcb 100644 --- a/modules/livewrappedBidAdapter.js +++ b/modules/livewrappedBidAdapter.js @@ -276,8 +276,7 @@ function handleEids(bidRequests) { } function getTopWindowLocation(bidderRequest) { - let url = bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer; - return config.getConfig('pageUrl') || url; + return bidderRequest?.refererInfo?.page; } function getAppBundle() { diff --git a/modules/lkqdBidAdapter.js b/modules/lkqdBidAdapter.js index e58c643f4f0..6d2766ff2f1 100644 --- a/modules/lkqdBidAdapter.js +++ b/modules/lkqdBidAdapter.js @@ -37,7 +37,8 @@ export const spec = { const UTC_OFFSET = new Date().getTimezoneOffset(); const UA = navigator.userAgent; const USP = BIDDER_REQUEST.uspConsent || null; - const REFERER = BIDDER_REQUEST.refererInfo ? new URL(BIDDER_REQUEST.refererInfo.referer).hostname : window.location.hostname; + // TODO: does the fallback make sense here? + const REFERER = BIDDER_REQUEST?.refererInfo?.domain || window.location.host const BIDDER_GDPR = BIDDER_REQUEST.gdprConsent && BIDDER_REQUEST.gdprConsent.gdprApplies ? 1 : null; const BIDDER_GDPRS = BIDDER_REQUEST.gdprConsent && BIDDER_REQUEST.gdprConsent.consentString ? BIDDER_REQUEST.gdprConsent.consentString : null; diff --git a/modules/lockerdomeBidAdapter.js b/modules/lockerdomeBidAdapter.js index 66accb4e02a..5c38753c1e2 100644 --- a/modules/lockerdomeBidAdapter.js +++ b/modules/lockerdomeBidAdapter.js @@ -21,12 +21,11 @@ export const spec = { }; }); - const bidderRequestCanonicalUrl = (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.canonicalUrl) || ''; - const bidderRequestReferer = (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer) || ''; const payload = { bidRequests: adUnitBidRequests, - url: encodeURIComponent(bidderRequestCanonicalUrl), - referrer: encodeURIComponent(bidderRequestReferer) + // TODO: are these the right refererInfo values? + url: encodeURIComponent(bidderRequest?.refererInfo?.canonicalUrl || ''), + referrer: encodeURIComponent(bidderRequest?.refererInfo?.topmostLocation || '') }; if (schain) { payload.schain = schain; diff --git a/modules/logicadBidAdapter.js b/modules/logicadBidAdapter.js index 2c919f9c157..4f996ba3f09 100644 --- a/modules/logicadBidAdapter.js +++ b/modules/logicadBidAdapter.js @@ -60,7 +60,8 @@ function newBidRequest(bid, bidderRequest) { mediaTypes: bid.mediaTypes }], prebidJsVersion: '$prebid.version$', - referrer: bidderRequest.refererInfo.referer, + // TODO: is 'page' the right value here? + referrer: bidderRequest.refererInfo.page, auctionStartTime: bidderRequest.auctionStart, eids: bid.userIdAsEids, }; diff --git a/modules/loglyliftBidAdapter.js b/modules/loglyliftBidAdapter.js index dd5f0af1cdf..a05434e8ee5 100644 --- a/modules/loglyliftBidAdapter.js +++ b/modules/loglyliftBidAdapter.js @@ -69,8 +69,8 @@ function newBidRequest(bid, bidderRequest) { params: bid.params, prebidJsVersion: '$prebid.version$', url: window.location.href, - domain: config.getConfig('publisherDomain'), - referer: bidderRequest.refererInfo.referer, + domain: bidderRequest.refererInfo.domain, + referer: bidderRequest.refererInfo.page, auctionStartTime: bidderRequest.auctionStart, currency: currency, timeout: config.getConfig('bidderTimeout') diff --git a/modules/lunamediahbBidAdapter.js b/modules/lunamediahbBidAdapter.js index ebd88d34940..286e87668fa 100644 --- a/modules/lunamediahbBidAdapter.js +++ b/modules/lunamediahbBidAdapter.js @@ -35,8 +35,9 @@ export const spec = { buildRequests: (validBidRequests = [], bidderRequest) => { let winTop = window; let location; + // TODO: this odd try-catch block was copied in several adapters; it doesn't seem to be correct for cross-origin try { - location = new URL(bidderRequest.refererInfo.referer) + location = new URL(bidderRequest.refererInfo.page) winTop = window.top; } catch (e) { location = winTop.location; diff --git a/modules/luponmediaBidAdapter.js b/modules/luponmediaBidAdapter.js index 4c73887d81b..31e2120d364 100755 --- a/modules/luponmediaBidAdapter.js +++ b/modules/luponmediaBidAdapter.js @@ -500,11 +500,12 @@ function _getDigiTrustQueryParams(bidRequest = {}, endpointName) { } function _getPageUrl(bidRequest, bidderRequest) { - let pageUrl = config.getConfig('pageUrl'); + // TODO: do the fallbacks make sense here? + let pageUrl = bidderRequest.refererInfo.page; if (bidRequest.params.referrer) { pageUrl = bidRequest.params.referrer; } else if (!pageUrl) { - pageUrl = bidderRequest.refererInfo.referer; + pageUrl = bidderRequest.refererInfo.topmostLocation; } return bidRequest.params.secure ? pageUrl.replace(/^http:/i, 'https:') : pageUrl; } diff --git a/modules/malltvBidAdapter.js b/modules/malltvBidAdapter.js index 53f745d4004..6466aa4feed 100644 --- a/modules/malltvBidAdapter.js +++ b/modules/malltvBidAdapter.js @@ -47,7 +47,8 @@ export const spec = { if (!propertyId) { propertyId = bidRequest.params.propertyId; } if (!pageViewGuid && bidRequest.params) { pageViewGuid = bidRequest.params.pageViewGuid || ''; } if (!bidderRequestId) { bidderRequestId = bidRequest.bidderRequestId; } - if (!url && bidderRequest) { url = bidderRequest.refererInfo.referer; } + // TODO: is 'page' the right value here? + if (!url && bidderRequest) { url = bidderRequest.refererInfo.page; } if (!contents.length && bidRequest.params.contents && bidRequest.params.contents.length) { contents = bidRequest.params.contents; } if (Object.keys(data).length === 0 && bidRequest.params.data && Object.keys(bidRequest.params.data).length !== 0) { data = bidRequest.params.data; } if (bidderRequest && bidRequest.gdprConsent) { gdrpApplies = bidderRequest.gdprConsent && bidderRequest.gdprConsent.gdprApplies ? bidderRequest.gdprConsent.gdprApplies : true; } diff --git a/modules/marsmediaBidAdapter.js b/modules/marsmediaBidAdapter.js index 92374b748c7..82a25af60d1 100644 --- a/modules/marsmediaBidAdapter.js +++ b/modules/marsmediaBidAdapter.js @@ -31,6 +31,7 @@ function MarsmediaAdapter() { var isSecure = 0; if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.stack.length) { // clever trick to get the protocol + // TODO: this should probably use parseUrl var el = document.createElement('a'); el.href = bidderRequest.refererInfo.stack[0]; isSecure = (el.protocol == 'https:') ? 1 : 0; @@ -68,12 +69,15 @@ function MarsmediaAdapter() { } if (bidderRequest && bidderRequest.refererInfo) { var ri = bidderRequest.refererInfo; - site.ref = ri.referer; + // TODO: is 'ref' the right value here? + site.ref = ri.ref; if (ri.stack.length) { site.page = ri.stack[ri.stack.length - 1]; // clever trick to get the domain + // TODO: does this logic make sense? why should domain be set to the lowermost frame's? + // TODO: this should probably use parseUrl var el = document.createElement('a'); el.href = ri.stack[0]; site.domain = el.hostname; diff --git a/modules/mathildeadsBidAdapter.js b/modules/mathildeadsBidAdapter.js index 3f5d94f0df2..f80e6e1f749 100644 --- a/modules/mathildeadsBidAdapter.js +++ b/modules/mathildeadsBidAdapter.js @@ -125,7 +125,7 @@ export const spec = { winLocation = window.location; } - const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.referer; + const refferUrl = bidderRequest?.refererInfo?.page; let refferLocation; try { refferLocation = refferUrl && new URL(refferUrl); @@ -133,6 +133,7 @@ export const spec = { logMessage(e); } + // TODO: does the fallback make sense here? let location = refferLocation || winLocation; const language = (navigator && navigator.language) ? navigator.language.split('-')[0] : ''; const host = location.host; diff --git a/modules/mediaforceBidAdapter.js b/modules/mediaforceBidAdapter.js index c686a2e378d..8f15af72235 100644 --- a/modules/mediaforceBidAdapter.js +++ b/modules/mediaforceBidAdapter.js @@ -113,7 +113,8 @@ export const spec = { return; } - const referer = bidderRequest && bidderRequest.refererInfo ? encodeURIComponent(bidderRequest.refererInfo.referer) : ''; + // TODO: is 'ref' the right value here? + const referer = bidderRequest && bidderRequest.refererInfo ? encodeURIComponent(bidderRequest.refererInfo.ref) : ''; const auctionId = bidderRequest && bidderRequest.auctionId; const timeout = bidderRequest && bidderRequest.timeout; const dnt = getDNT() ? 1 : 0; @@ -156,6 +157,7 @@ export const spec = { request = { id: Math.round(Math.random() * 1e16).toString(16), site: { + // TODO: this should probably look at refererInfo page: window.location.href, ref: referer, id: bid.params.publisher_id, diff --git a/modules/mediafuseBidAdapter.js b/modules/mediafuseBidAdapter.js index f813fb2e131..5f3339ee5b4 100644 --- a/modules/mediafuseBidAdapter.js +++ b/modules/mediafuseBidAdapter.js @@ -228,7 +228,8 @@ export const spec = { if (bidderRequest && bidderRequest.refererInfo) { let refererinfo = { - rd_ref: encodeURIComponent(bidderRequest.refererInfo.referer), + // TODO: this collects everything it finds, except for canonicalUrl + rd_ref: encodeURIComponent(bidderRequest.refererInfo.topmostLocation), rd_top: bidderRequest.refererInfo.reachedTop, rd_ifs: bidderRequest.refererInfo.numIframes, rd_stk: bidderRequest.refererInfo.stack.map((url) => encodeURIComponent(url)).join(',') diff --git a/modules/mediakeysBidAdapter.js b/modules/mediakeysBidAdapter.js index a2b5d8b8ecc..6a4092cef4b 100644 --- a/modules/mediakeysBidAdapter.js +++ b/modules/mediakeysBidAdapter.js @@ -5,7 +5,6 @@ import { deepClone, deepSetValue, getDNT, - getWindowTop, inIframe, isArray, isEmpty, @@ -16,7 +15,6 @@ import { logError, logWarn, mergeDeep, - parseUrl, triggerPixel } from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; @@ -85,19 +83,6 @@ const ORTB_VIDEO_PARAMS = { api: value => Array.isArray(value) && value.every(v => [1, 2, 3, 4, 5, 6].indexOf(v) !== -1), }; -/** - * Detects the capability to reach window.top. - * - * @returns {boolean} - */ -function canAccessTopWindow() { - try { - return !!getWindowTop().location.href; - } catch (error) { - return false; - } -} - /** * Returns the OpenRtb deviceType id detected from User Agent * Voluntary limited to phone, tablet, desktop. @@ -650,15 +635,12 @@ export const spec = { // Assign payload.site from refererinfo if (bidderRequest.refererInfo) { + // TODO: reachedTop is probably not the right check here - it may be false when page is available or vice-versa if (bidderRequest.refererInfo.reachedTop) { - const sitePage = bidderRequest.refererInfo.referer; - deepSetValue(payload, 'site.page', sitePage); - deepSetValue(payload, 'site.domain', parseUrl(sitePage, { - noDecodeWholeURL: true - }).hostname); - - if (canAccessTopWindow()) { - deepSetValue(payload, 'site.ref', getWindowTop().document.referrer); + deepSetValue(payload, 'site.page', bidderRequest.refererInfo.page); + deepSetValue(payload, 'site.domain', bidderRequest.refererInfo.domain) + if (bidderRequest.refererInfo.ref) { + deepSetValue(payload, 'site.ref', bidderRequest.refererInfo.ref); } } } diff --git a/modules/medianetAnalyticsAdapter.js b/modules/medianetAnalyticsAdapter.js index 09ebbc9bc31..05c18a47f94 100644 --- a/modules/medianetAnalyticsAdapter.js +++ b/modules/medianetAnalyticsAdapter.js @@ -182,16 +182,16 @@ class Configure { class PageDetail { constructor () { - const canonicalUrl = this._getUrlFromSelector('link[rel="canonical"]', 'href'); const ogUrl = this._getUrlFromSelector('meta[property="og:url"]', 'content'); const twitterUrl = this._getUrlFromSelector('meta[name="twitter:url"]', 'content'); const refererInfo = getRefererInfo(); - this.domain = URL.parseUrl(refererInfo.referer).hostname; - this.page = refererInfo.referer; + // TODO: are these the right refererInfo values? + this.domain = refererInfo.domain; + this.page = refererInfo.page; this.is_top = refererInfo.reachedTop; - this.referrer = this._getTopWindowReferrer(); - this.canonical_url = canonicalUrl; + this.referrer = refererInfo.ref || window.document.referrer; + this.canonical_url = refererInfo.canonicalUrl; this.og_url = ogUrl; this.twitter_url = twitterUrl; this.screen = this._getWindowSize(); diff --git a/modules/medianetBidAdapter.js b/modules/medianetBidAdapter.js index eb3f8b7416a..1ca10b75e0e 100644 --- a/modules/medianetBidAdapter.js +++ b/modules/medianetBidAdapter.js @@ -1,9 +1,21 @@ -import { parseUrl, getWindowTop, isArray, getGptSlotInfoForAdUnitCode, isStr, deepAccess, isEmpty, logError, triggerPixel, buildUrl, isEmptyStr, logInfo } from '../src/utils.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { config } from '../src/config.js'; -import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js'; -import { getRefererInfo } from '../src/refererDetection.js'; -import { Renderer } from '../src/Renderer.js'; +import { + buildUrl, + deepAccess, + getGptSlotInfoForAdUnitCode, + getWindowTop, + isArray, + isEmpty, + isEmptyStr, + isStr, + logError, + logInfo, + triggerPixel +} from '../src/utils.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {config} from '../src/config.js'; +import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js'; +import {getRefererInfo} from '../src/refererDetection.js'; +import {Renderer} from '../src/Renderer.js'; const BIDDER_CODE = 'medianet'; const BID_URL = 'https://prebid.media.net/rtb/prebid'; @@ -19,6 +31,8 @@ const EVENTS = { }; const EVENT_PIXEL_URL = 'qsearch-a.akamaihd.net/log'; const OUTSTREAM = 'outstream'; + +// TODO: this should be picked from bidderRequest let refererInfo = getRefererInfo(); let mnData = {}; @@ -27,8 +41,8 @@ window.mnet = window.mnet || {}; window.mnet.queue = window.mnet.queue || []; mnData.urlData = { - domain: parseUrl(refererInfo.referer, {noDecodeWholeURL: true}).hostname, - page: refererInfo.referer, + domain: refererInfo.domain, + page: refererInfo.page, isTop: refererInfo.reachedTop }; diff --git a/modules/mediasniperBidAdapter.js b/modules/mediasniperBidAdapter.js index 3e57503f7fb..417642b7a6f 100644 --- a/modules/mediasniperBidAdapter.js +++ b/modules/mediasniperBidAdapter.js @@ -2,23 +2,21 @@ import { deepAccess, deepClone, deepSetValue, - getWindowTop, + getBidIdParameter, inIframe, isArray, isEmpty, isFn, isNumber, isStr, - logWarn, logError, logMessage, - parseUrl, - getBidIdParameter, + logWarn, triggerPixel, } from '../src/utils.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { BANNER } from '../src/mediaTypes.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {BANNER} from '../src/mediaTypes.js'; const BIDDER_CODE = 'mediasniper'; const DEFAULT_BID_TTL = 360; @@ -76,19 +74,18 @@ export const spec = { // Assign payload.site from refererinfo if (bidderRequest.refererInfo) { + // TODO: reachedTop is probably not the right check - it may be false when page is available or vice-versa if (bidderRequest.refererInfo.reachedTop) { - const sitePage = bidderRequest.refererInfo.referer; + const sitePage = bidderRequest.refererInfo.page; deepSetValue(payload, 'site.page', sitePage); deepSetValue( payload, 'site.domain', - parseUrl(sitePage, { - noDecodeWholeURL: true, - }).hostname + bidderRequest.refererInfo.domain ); - if (canAccessTopWindow()) { - deepSetValue(payload, 'site.ref', getWindowTop().document.referrer); + if (bidderRequest.refererInfo?.ref) { + deepSetValue(payload, 'site.ref', bidderRequest.refererInfo.ref); } } } @@ -165,19 +162,6 @@ export const spec = { }; registerBidder(spec); -/** - * Detects the capability to reach window.top. - * - * @returns {boolean} - */ -function canAccessTopWindow() { - try { - return !!getWindowTop().location.href; - } catch (error) { - return false; - } -} - /** * Returns an openRTB 2.5 object. * This one will be populated at each step of the buildRequest process. diff --git a/modules/mediasquareBidAdapter.js b/modules/mediasquareBidAdapter.js index 427a16f1341..1be58501828 100644 --- a/modules/mediasquareBidAdapter.js +++ b/modules/mediasquareBidAdapter.js @@ -55,7 +55,8 @@ export const spec = { }); const payload = { codes: codes, - referer: encodeURIComponent(bidderRequest.refererInfo.referer), + // TODO: is 'page' the right value here? + referer: encodeURIComponent(bidderRequest.refererInfo.page || bidderRequest.refererInfo.topmostLocation), pbjs: '$prebid.version$' }; if (bidderRequest) { // modules informations (gdpr, ccpa, schain, userId) diff --git a/modules/mgidBidAdapter.js b/modules/mgidBidAdapter.js index 51b713c8958..7565b713e88 100644 --- a/modules/mgidBidAdapter.js +++ b/modules/mgidBidAdapter.js @@ -122,7 +122,8 @@ export const spec = { return; } const info = pageInfo(); - const page = info.location || deepAccess(bidderRequest, 'refererInfo.referer') || deepAccess(bidderRequest, 'refererInfo.canonicalUrl'); + // TODO: the fallback seems to never be used here, and probably in the wrong order + const page = info.location || deepAccess(bidderRequest, 'refererInfo.page') const hostname = parseUrl(page).hostname; let domain = extractDomainFromHost(hostname) || hostname; const accountId = setOnAny(validBidRequests, 'params.accountId'); diff --git a/modules/microadBidAdapter.js b/modules/microadBidAdapter.js index 982bd61840a..77710584f41 100644 --- a/modules/microadBidAdapter.js +++ b/modules/microadBidAdapter.js @@ -51,8 +51,9 @@ export const spec = { const bidParams = bid.params; const params = { spot: bidParams.spot, - url: bidderRequest.refererInfo.canonicalUrl || window.location.href, - referrer: bidderRequest.refererInfo.referer, + // TODO: are these the right refererInfo values - does the fallback make sense here? + url: bidderRequest.refererInfo.page || window.location.href, + referrer: bidderRequest.refererInfo.ref, bid_id: bid.bidId, transaction_id: bid.transactionId, media_types: convertMediaTypes(bid), diff --git a/modules/minutemediaBidAdapter.js b/modules/minutemediaBidAdapter.js index 9096fa3e31a..beb6618631d 100644 --- a/modules/minutemediaBidAdapter.js +++ b/modules/minutemediaBidAdapter.js @@ -423,8 +423,8 @@ function generateGeneralParams(generalObject, bidderRequest) { } if (bidderRequest && bidderRequest.refererInfo) { - generalParams.referrer = deepAccess(bidderRequest, 'refererInfo.referer'); - generalParams.page_url = config.getConfig('pageUrl') || deepAccess(window, 'location.href'); + generalParams.referrer = deepAccess(bidderRequest, 'refererInfo.ref'); + generalParams.page_url = deepAccess(bidderRequest, 'refererInfo.page') || window.location.href } return generalParams diff --git a/modules/missenaBidAdapter.js b/modules/missenaBidAdapter.js index 41bae4d6568..4f629784a17 100644 --- a/modules/missenaBidAdapter.js +++ b/modules/missenaBidAdapter.js @@ -35,7 +35,8 @@ export const spec = { }; if (bidderRequest && bidderRequest.refererInfo) { - payload.referer = bidderRequest.refererInfo.referer; + // TODO: is 'topmostLocation' the right value here? + payload.referer = bidderRequest.refererInfo.topmostLocation; payload.referer_canonical = bidderRequest.refererInfo.canonicalUrl; } diff --git a/modules/my6senseBidAdapter.js b/modules/my6senseBidAdapter.js index b4fc1049304..163e3c20e4b 100644 --- a/modules/my6senseBidAdapter.js +++ b/modules/my6senseBidAdapter.js @@ -11,6 +11,7 @@ function isBidRequestValid(bid) { } function getUrl(url) { + // TODO: this should probably look at refererInfo if (!url) { url = window.location.href;// "clean" url of current web page } diff --git a/modules/mytargetBidAdapter.js b/modules/mytargetBidAdapter.js index f55f2e6b802..b9ce8b133d1 100644 --- a/modules/mytargetBidAdapter.js +++ b/modules/mytargetBidAdapter.js @@ -51,7 +51,7 @@ export const spec = { let referrer = ''; if (bidderRequest && bidderRequest.refererInfo) { - referrer = bidderRequest.refererInfo.referer; + referrer = bidderRequest.refererInfo.page; } const payload = { diff --git a/modules/nativoBidAdapter.js b/modules/nativoBidAdapter.js index e07a124665f..ff6ae0887b4 100644 --- a/modules/nativoBidAdapter.js +++ b/modules/nativoBidAdapter.js @@ -138,7 +138,7 @@ export const spec = { pageUrl = deepAccess( request, 'params.url', - bidderRequest.refererInfo.referer + bidderRequest.refererInfo.page ) placementId = deepAccess(request, 'params.placementId') diff --git a/modules/nextrollBidAdapter.js b/modules/nextrollBidAdapter.js index da5c0c848bf..533c47e1ea6 100644 --- a/modules/nextrollBidAdapter.js +++ b/modules/nextrollBidAdapter.js @@ -39,7 +39,8 @@ export const spec = { * @return ServerRequest Info describing the request to the server. */ buildRequests: function (validBidRequests, bidderRequest) { - let topLocation = parseUrl(deepAccess(bidderRequest, 'refererInfo.referer')); + // TODO: is 'page' the right value here? + let topLocation = parseUrl(deepAccess(bidderRequest, 'refererInfo.page')); return validBidRequests.map((bidRequest) => { return { diff --git a/modules/nexx360BidAdapter.js b/modules/nexx360BidAdapter.js index 814a2f55299..ed0c0c66a7a 100644 --- a/modules/nexx360BidAdapter.js +++ b/modules/nexx360BidAdapter.js @@ -59,7 +59,8 @@ export const spec = { }); const payload = { adUnits, - href: encodeURIComponent(bidderRequest.refererInfo.referer) + // TODO: does the fallback make sense here? + href: encodeURIComponent(bidderRequest.refererInfo.page || bidderRequest.refererInfo.topmostLocation) }; if (bidderRequest) { // modules informations (gdpr, ccpa, schain, userId) if (bidderRequest.gdprConsent) { diff --git a/modules/nobidBidAdapter.js b/modules/nobidBidAdapter.js index 08119beafb4..b69f3b09d97 100644 --- a/modules/nobidBidAdapter.js +++ b/modules/nobidBidAdapter.js @@ -88,9 +88,10 @@ function nobidBuildRequests(bids, bidderRequest) { } var topLocation = function(bidderRequest) { var ret = ''; - if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { - ret = bidderRequest.refererInfo.referer; + if (bidderRequest?.refererInfo?.page) { + ret = bidderRequest.refererInfo.page; } else { + // TODO: does this fallback make sense here? ret = (window.context && window.context.location && window.context.location.href) ? window.context.location.href : document.location.href; } return encodeURIComponent(ret.replace(/\%/g, '')); diff --git a/modules/onomagicBidAdapter.js b/modules/onomagicBidAdapter.js index 25b0f1a5934..d99455f3f73 100644 --- a/modules/onomagicBidAdapter.js +++ b/modules/onomagicBidAdapter.js @@ -1,7 +1,19 @@ -import { getBidIdParameter, _each, isArray, getWindowTop, getUniqueIdentifierStr, parseUrl, logError, logWarn, createTrackPixelHtml, getWindowSelf, isFn, isPlainObject } from '../src/utils.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { BANNER } from '../src/mediaTypes.js'; -import { config } from '../src/config.js'; +import { + _each, + createTrackPixelHtml, + getBidIdParameter, + getUniqueIdentifierStr, + getWindowSelf, + getWindowTop, + isArray, + isFn, + isPlainObject, + logError, + logWarn +} from '../src/utils.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {BANNER} from '../src/mediaTypes.js'; +import {config} from '../src/config.js'; const BIDDER_CODE = 'onomagic'; const URL = 'https://bidder.onomagic.com/hb'; @@ -19,7 +31,7 @@ function buildRequests(bidReqs, bidderRequest) { try { let referrer = ''; if (bidderRequest && bidderRequest.refererInfo) { - referrer = bidderRequest.refererInfo.referer; + referrer = bidderRequest.refererInfo.page; } const onomagicImps = []; const publisherId = getBidIdParameter('publisherId', bidReqs[0].params); @@ -56,7 +68,8 @@ function buildRequests(bidReqs, bidderRequest) { id: getUniqueIdentifierStr(), imp: onomagicImps, site: { - domain: parseUrl(referrer).host, + // TODO: does the fallback make sense here? + domain: bidderRequest?.refererInfo?.domain || window.location.host, page: referrer, publisher: { id: publisherId diff --git a/modules/openwebBidAdapter.js b/modules/openwebBidAdapter.js index f515eb14011..f07b37e16e1 100644 --- a/modules/openwebBidAdapter.js +++ b/modules/openwebBidAdapter.js @@ -126,7 +126,8 @@ function parseRTBResponse(serverResponse, adapterRequest) { function bidToTag(bidRequests, adapterRequest) { // start publisher env const tag = { - Domain: deepAccess(adapterRequest, 'refererInfo.referer') + // TODO: is 'page' the right value here? + Domain: deepAccess(adapterRequest, 'refererInfo.page') }; if (config.getConfig('coppa') === true) { tag.Coppa = 1; diff --git a/modules/openxBidAdapter.js b/modules/openxBidAdapter.js index 2c47011fed0..7bea38a2de3 100644 --- a/modules/openxBidAdapter.js +++ b/modules/openxBidAdapter.js @@ -258,7 +258,7 @@ function buildCommonQueryParamsFromBids(bids, bidderRequest) { let defaultParams; defaultParams = { - ju: config.getConfig('pageUrl') || bidderRequest.refererInfo.referer, + ju: bidderRequest.refererInfo.page, ch: document.charSet || document.characterSet, res: `${screen.width}x${screen.height}x${screen.colorDepth}`, ifr: isInIframe, diff --git a/modules/operaadsBidAdapter.js b/modules/operaadsBidAdapter.js index 61ea8cdcb76..27ca2dc0ed8 100644 --- a/modules/operaadsBidAdapter.js +++ b/modules/operaadsBidAdapter.js @@ -1,9 +1,21 @@ -import { logWarn, isArray, isStr, triggerPixel, deepAccess, deepSetValue, isPlainObject, generateUUID, parseUrl, isFn, getDNT, logError } from '../src/utils.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { config } from '../src/config.js'; -import { BANNER, VIDEO, NATIVE } from '../src/mediaTypes.js'; -import { Renderer } from '../src/Renderer.js'; -import { OUTSTREAM } from '../src/video.js'; +import { + deepAccess, + deepSetValue, + generateUUID, + getDNT, + isArray, + isFn, + isPlainObject, + isStr, + logError, + logWarn, + triggerPixel +} from '../src/utils.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {config} from '../src/config.js'; +import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js'; +import {Renderer} from '../src/Renderer.js'; +import {OUTSTREAM} from '../src/video.js'; const BIDDER_CODE = 'operaads'; @@ -209,8 +221,6 @@ export const spec = { * @returns {Request} */ function buildOpenRtbBidRequest(bidRequest, bidderRequest) { - const pageReferrer = deepAccess(bidderRequest, 'refererInfo.referer'); - // build OpenRTB request body const payload = { id: bidderRequest.auctionId, @@ -220,9 +230,10 @@ function buildOpenRtbBidRequest(bidRequest, bidderRequest) { device: getDevice(), site: { id: String(deepAccess(bidRequest, 'params.publisherId')), - domain: getDomain(pageReferrer), - page: pageReferrer, - ref: window.self === window.top ? document.referrer : '', + // TODO: does the fallback make sense here? + domain: bidderRequest?.refererInfo?.domain || window.location.host, + page: bidderRequest?.refererInfo?.page, + ref: bidderRequest?.refererInfo?.ref || '', }, at: 1, bcat: getBcat(bidRequest), @@ -680,23 +691,6 @@ function getUserId(bidRequest) { return generateUUID(); } -/** - * Get publisher domain - * - * @param {String} referer - * @returns {String} domain - */ -function getDomain(referer) { - let domain; - - if (!(domain = config.getConfig('publisherDomain'))) { - const u = parseUrl(referer); - domain = u.hostname; - } - - return domain.replace(/^https?:\/\/([\w\-\.]+)(?::\d+)?/, '$1'); -} - /** * Get bid floor price * diff --git a/modules/orbidderBidAdapter.js b/modules/orbidderBidAdapter.js index 38af3a8d1d6..bda0a0587f4 100644 --- a/modules/orbidderBidAdapter.js +++ b/modules/orbidderBidAdapter.js @@ -82,7 +82,7 @@ export const spec = { return validBidRequests.map((bidRequest) => { let referer = ''; if (bidderRequest && bidderRequest.refererInfo) { - referer = bidderRequest.refererInfo.referer || ''; + referer = bidderRequest.refererInfo.page || ''; } bidRequest.params.bidfloor = getBidFloor(bidRequest); diff --git a/modules/otmBidAdapter.js b/modules/otmBidAdapter.js index e81bdfa9e6a..1230694fc65 100644 --- a/modules/otmBidAdapter.js +++ b/modules/otmBidAdapter.js @@ -45,13 +45,11 @@ export const spec = { const bidRequests = []; const tz = new Date().getTimezoneOffset() - const referrer = bidderRequest && bidderRequest.refererInfo ? bidderRequest.refererInfo.referer : ''; + // TODO: are these the right referer values? + const referrer = bidderRequest?.refererInfo?.page || ''; + const topOrigin = bidderRequest?.refererInfo?.domain || ''; _each(validBidRequests, (bid) => { - let topOrigin = '' - try { - if (isStr(referrer)) topOrigin = new URL(referrer).host - } catch (e) { /* do nothing */ } const domain = isStr(bid.params.domain) ? bid.params.domain : topOrigin const cur = getValue(bid.params, 'currency') || DEFAULT_CURRENCY const bidid = getBidIdParameter('bidId', bid) diff --git a/modules/outbrainBidAdapter.js b/modules/outbrainBidAdapter.js index e903f053c7e..a640fa776c9 100644 --- a/modules/outbrainBidAdapter.js +++ b/modules/outbrainBidAdapter.js @@ -53,7 +53,7 @@ export const spec = { ); }, buildRequests: (validBidRequests, bidderRequest) => { - const page = bidderRequest.refererInfo.referer; + const page = bidderRequest.refererInfo.page; const ua = navigator.userAgent; const test = setOnAny(validBidRequests, 'params.test'); const publisher = setOnAny(validBidRequests, 'params.publisher'); diff --git a/modules/padsquadBidAdapter.js b/modules/padsquadBidAdapter.js index 72449cf28be..d5fe37ef34b 100644 --- a/modules/padsquadBidAdapter.js +++ b/modules/padsquadBidAdapter.js @@ -43,9 +43,9 @@ export const spec = { id: bidderRequest.auctionId, imp: impressions, site: { - domain: window.location.hostname, - page: window.location.href, - ref: bidderRequest.refererInfo ? bidderRequest.refererInfo.referer || null : null + domain: bidderRequest?.refererInfo?.domain, + page: bidderRequest?.refererInfo?.page, + ref: bidderRequest?.refererInfo?.ref, }, ext: { exchange: { diff --git a/modules/parrableIdSystem.js b/modules/parrableIdSystem.js index 04f36d0cb63..4a777097914 100644 --- a/modules/parrableIdSystem.js +++ b/modules/parrableIdSystem.js @@ -244,7 +244,7 @@ function fetchId(configParams, gdprConsentData) { const data = { eid, trackers, - url: refererInfo.referer, + url: refererInfo.page, prebidVersion: '$prebid.version$', isIframe: inIframe(), tpcSupport diff --git a/modules/pixfutureBidAdapter.js b/modules/pixfutureBidAdapter.js index 231ecf08782..70b741d1028 100644 --- a/modules/pixfutureBidAdapter.js +++ b/modules/pixfutureBidAdapter.js @@ -42,7 +42,7 @@ export const spec = { return validBidRequests.map((bidRequest) => { let referer = ''; if (bidderRequest && bidderRequest.refererInfo) { - referer = bidderRequest.refererInfo.referer || ''; + referer = bidderRequest.refererInfo.page || ''; } const userObjBid = find(validBidRequests, hasUserInfo); @@ -90,7 +90,8 @@ export const spec = { if (bidderRequest && bidderRequest.refererInfo) { let refererinfo = { - rd_ref: encodeURIComponent(bidderRequest.refererInfo.referer), + // TODO: this collects everything it finds, except for canonicalUrl + rd_ref: encodeURIComponent(bidderRequest.refererInfo.topmostLocation), rd_top: bidderRequest.refererInfo.reachedTop, rd_ifs: bidderRequest.refererInfo.numIframes, rd_stk: bidderRequest.refererInfo.stack.map((url) => encodeURIComponent(url)).join(',') diff --git a/modules/prebidServerBidAdapter/index.js b/modules/prebidServerBidAdapter/index.js index c1ae613202c..0380aa30ad7 100644 --- a/modules/prebidServerBidAdapter/index.js +++ b/modules/prebidServerBidAdapter/index.js @@ -868,7 +868,7 @@ Object.assign(ORTB2.prototype, { request.cur = [adServerCur[0]]; } - _appendSiteAppDevice(request, bidRequests[0].refererInfo.referer, s2sConfig.accountId); + _appendSiteAppDevice(request, bidRequests[0].refererInfo.page, s2sConfig.accountId); // pass schain object if it is present const schain = deepAccess(bidRequests, '0.bids.0.schain'); diff --git a/modules/priceFloors.js b/modules/priceFloors.js index e548de768b4..f397e92055e 100644 --- a/modules/priceFloors.js +++ b/modules/priceFloors.js @@ -75,11 +75,15 @@ function roundUp(number, precision) { return Math.ceil((parseFloat(number) * Math.pow(10, precision)).toFixed(1)) / Math.pow(10, precision); } -let referrerHostname; -function getHostNameFromReferer(referer) { - referrerHostname = parseUrl(referer, {noDecodeWholeURL: true}).hostname; - return referrerHostname; -} +const getHostname = (() => { + let domain; + return function() { + if (domain == null) { + domain = parseUrl(getRefererInfo().topmostLocation, {noDecodeWholeUrl: true}).hostname; + } + return domain; + } +})(); // First look into bidRequest! function getGptSlotFromAdUnit(transactionId, {index = auctionManager.index} = {}) { @@ -99,7 +103,7 @@ export let fieldMatchingFunctions = { 'size': (bidRequest, bidResponse) => parseGPTSingleSizeArray(bidResponse.size) || '*', 'mediaType': (bidRequest, bidResponse) => bidResponse.mediaType || 'banner', 'gptSlot': (bidRequest, bidResponse) => getGptSlotFromAdUnit((bidRequest || bidResponse).transactionId) || getGptSlotInfoForAdUnitCode(getAdUnitCode(bidRequest, bidResponse)).gptSlot, - 'domain': (bidRequest, bidResponse) => referrerHostname || getHostNameFromReferer(getRefererInfo().referer), + 'domain': getHostname, 'adUnitCode': (bidRequest, bidResponse) => getAdUnitCode(bidRequest, bidResponse) } diff --git a/modules/pubgeniusBidAdapter.js b/modules/pubgeniusBidAdapter.js index 28c4fdefd42..5e7ce6fc9fb 100644 --- a/modules/pubgeniusBidAdapter.js +++ b/modules/pubgeniusBidAdapter.js @@ -228,20 +228,15 @@ function buildSite(bidderRequest) { let site = null; const { refererInfo } = bidderRequest; - const pageUrl = config.getConfig('pageUrl') || refererInfo.canonicalUrl || refererInfo.referer; + const pageUrl = refererInfo.page; if (pageUrl) { site = site || {}; site.page = pageUrl; } - if (refererInfo.reachedTop) { - try { - const pageRef = window.top.document.referrer; - if (pageRef) { - site = site || {}; - site.ref = pageRef; - } - } catch (e) {} + if (refererInfo.ref) { + site = site || {}; + site.ref = refererInfo.ref; } return site; diff --git a/modules/pubmaticAnalyticsAdapter.js b/modules/pubmaticAnalyticsAdapter.js index f69fb20e5d5..6f61b4e519b 100755 --- a/modules/pubmaticAnalyticsAdapter.js +++ b/modules/pubmaticAnalyticsAdapter.js @@ -349,7 +349,7 @@ function auctionInitHandler(args) { 'bidderDonePendingCount', () => args.bidderRequests.length, ]); cacheEntry.adUnitCodes = {}; - cacheEntry.referer = args.bidderRequests[0].refererInfo.referer; + cacheEntry.referer = args.bidderRequests[0].refererInfo.topmostLocation; cache.auctions[args.auctionId] = cacheEntry; } diff --git a/modules/pubmaticBidAdapter.js b/modules/pubmaticBidAdapter.js index df80e189708..e34d58ddd2e 100644 --- a/modules/pubmaticBidAdapter.js +++ b/modules/pubmaticBidAdapter.js @@ -269,8 +269,9 @@ function _parseAdSlot(bid) { function _initConf(refererInfo) { return { - pageURL: (refererInfo && refererInfo.referer) ? refererInfo.referer : window.location.href, - refURL: window.document.referrer + // TODO: do the fallbacks make sense here? + pageURL: refererInfo?.page || window.location.href, + refURL: refererInfo?.ref || window.document.referrer }; } diff --git a/modules/pubwiseAnalyticsAdapter.js b/modules/pubwiseAnalyticsAdapter.js index 006d6da7eb7..a3061eb1c99 100644 --- a/modules/pubwiseAnalyticsAdapter.js +++ b/modules/pubwiseAnalyticsAdapter.js @@ -224,7 +224,8 @@ function filterAuctionInit(data) { modified.refererInfo = {}; // handle clean referrer, we only need one if (typeof modified.bidderRequests !== 'undefined' && typeof modified.bidderRequests[0] !== 'undefined' && typeof modified.bidderRequests[0].refererInfo !== 'undefined') { - modified.refererInfo = modified.bidderRequests[0].refererInfo; + // TODO: please do not send internal data structures over the network + modified.refererInfo = modified.bidderRequests[0].refererInfo.legacy; } if (typeof modified.adUnitCodes !== 'undefined') { diff --git a/modules/pubwiseBidAdapter.js b/modules/pubwiseBidAdapter.js index a1b9ffb56a0..1a3adf12bd8 100644 --- a/modules/pubwiseBidAdapter.js +++ b/modules/pubwiseBidAdapter.js @@ -528,8 +528,9 @@ function _cleanSlotName(slotName) { function _initConf(refererInfo) { return { - pageURL: (refererInfo && refererInfo.referer) ? refererInfo.referer : window.location.href, - refURL: window.document.referrer + // TODO: do the fallbacks make sense here? + pageURL: refererInfo?.page || window.location.href, + refURL: refererInfo?.ref || window.document.referrer }; } diff --git a/modules/pulsepointBidAdapter.js b/modules/pulsepointBidAdapter.js index 3fe70272767..0bff10bc6be 100644 --- a/modules/pulsepointBidAdapter.js +++ b/modules/pulsepointBidAdapter.js @@ -1,7 +1,7 @@ /* eslint dot-notation:0, quote-props:0 */ -import { convertTypes, deepAccess, isArray, logError, isFn } from '../src/utils.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { Renderer } from '../src/Renderer.js'; +import {convertTypes, deepAccess, isArray, isFn, logError} from '../src/utils.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {Renderer} from '../src/Renderer.js'; const NATIVE_DEFAULTS = { TITLE_LEN: 100, @@ -330,8 +330,9 @@ function site(bidRequests, bidderRequest) { publisher: { id: pubId.toString(), }, - ref: referrer(), - page: bidderRequest && bidderRequest.refererInfo ? bidderRequest.refererInfo.referer : '', + // TODO: does the fallback make sense here? + ref: bidderRequest?.refererInfo?.ref || window.document.referrer, + page: bidderRequest?.refererInfo?.page || '' } } return null; @@ -356,17 +357,6 @@ function app(bidderRequest) { return null; } -/** - * Attempts to capture the referrer url. - */ -function referrer() { - try { - return window.top.document.referrer; - } catch (e) { - return document.referrer; - } -} - /** * Produces an OpenRTB Device object. */ diff --git a/modules/pxyzBidAdapter.js b/modules/pxyzBidAdapter.js index e144eb84a01..b40e0c79d6b 100644 --- a/modules/pxyzBidAdapter.js +++ b/modules/pxyzBidAdapter.js @@ -32,7 +32,7 @@ export const spec = { * @return ServerRequest Info describing the request to the server. */ buildRequests: function (bidRequests, bidderRequest) { - const referer = bidderRequest.refererInfo.referer; + const referer = bidderRequest.refererInfo.page || bidderRequest.refererInfo.topmostLocation; const parts = referer.split('/'); let protocol, hostname; diff --git a/modules/quantcastBidAdapter.js b/modules/quantcastBidAdapter.js index 449c7d12d6f..9db765a9e2a 100644 --- a/modules/quantcastBidAdapter.js +++ b/modules/quantcastBidAdapter.js @@ -4,6 +4,7 @@ import {config} from '../src/config.js'; import {getStorageManager} from '../src/storageManager.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {find} from '../src/polyfill.js'; +import {parseDomain} from '../src/refererDetection.js'; const BIDDER_CODE = 'quantcast'; const DEFAULT_BID_FLOOR = 0.0000000001; @@ -74,13 +75,6 @@ function makeBannerImp(bid) { }; } -function getDomain(url) { - if (!url) { - return url; - } - return url.replace('http://', '').replace('https://', '').replace('www.', '').split(/[/?#]/)[0]; -} - function checkTCFv1(vendorData) { let vendorConsent = vendorData.vendorConsents && vendorData.vendorConsents[QUANTCAST_VENDOR_ID]; let purposeConsent = vendorData.purposeConsents && vendorData.purposeConsents[PURPOSE_DATA_COLLECT]; @@ -144,9 +138,9 @@ export const spec = { const bids = bidRequests || []; const gdprConsent = deepAccess(bidderRequest, 'gdprConsent') || {}; const uspConsent = deepAccess(bidderRequest, 'uspConsent'); - const referrer = deepAccess(bidderRequest, 'refererInfo.referer'); - const page = deepAccess(bidderRequest, 'refererInfo.canonicalUrl') || config.getConfig('pageUrl') || deepAccess(window, 'location.href'); - const domain = getDomain(page); + const referrer = deepAccess(bidderRequest, 'refererInfo.ref'); + const page = deepAccess(bidderRequest, 'refererInfo.page') || deepAccess(window, 'location.href'); + const domain = parseDomain(page, {noLeadingWww: true}); // Check for GDPR consent for purpose 1, and drop request if consent has not been given // Remaining consent checks are performed server-side. diff --git a/modules/qwarryBidAdapter.js b/modules/qwarryBidAdapter.js index c9a86f73910..4b3e8fa8a19 100644 --- a/modules/qwarryBidAdapter.js +++ b/modules/qwarryBidAdapter.js @@ -28,7 +28,7 @@ export const spec = { let payload = { requestId: bidderRequest.bidderRequestId, bids, - referer: bidderRequest.refererInfo.referer, + referer: bidderRequest.refererInfo.page, schain: validBidRequests[0].schain } diff --git a/modules/radsBidAdapter.js b/modules/radsBidAdapter.js index c10ad88d0c3..938fd566159 100644 --- a/modules/radsBidAdapter.js +++ b/modules/radsBidAdapter.js @@ -23,7 +23,7 @@ export const spec = { const placementId = params.placement; const rnd = Math.floor(Math.random() * 99999999999); - const referrer = encodeURIComponent(bidderRequest.refererInfo.referer); + const referrer = encodeURIComponent(bidderRequest.refererInfo.page); const bidId = bidRequest.bidId; const isDev = params.devMode || false; diff --git a/modules/rakutenBidAdapter/index.js b/modules/rakutenBidAdapter/index.js index e567509b3c1..27c04029231 100644 --- a/modules/rakutenBidAdapter/index.js +++ b/modules/rakutenBidAdapter/index.js @@ -22,8 +22,9 @@ export const spec = { l: navigator.browserLanguage || navigator.language, d: document.domain, + // TODO: what are 'tp' and 'pp'? tp: bidderRequest.refererInfo.stack[0] || window.location.href, - pp: bidderRequest.refererInfo.referer, + pp: bidderRequest.refererInfo.topmostLocation, gdpr: ((_a = bidderRequest.gdprConsent) === null || _a === void 0 ? void 0 : _a.gdprApplies) ? 1 : 0, ...((_b = bidderRequest.gdprConsent) === null || _b === void 0 ? void 0 : _b.consentString) && { cd: bidderRequest.gdprConsent.consentString diff --git a/modules/readpeakBidAdapter.js b/modules/readpeakBidAdapter.js index 099e1fb6332..bc03881bed1 100644 --- a/modules/readpeakBidAdapter.js +++ b/modules/readpeakBidAdapter.js @@ -1,7 +1,7 @@ -import { logError, replaceAuctionPrice, parseUrl } from '../src/utils.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { config } from '../src/config.js'; -import { NATIVE, BANNER } from '../src/mediaTypes.js'; +import {logError, replaceAuctionPrice} from '../src/utils.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {config} from '../src/config.js'; +import {BANNER, NATIVE} from '../src/mediaTypes.js'; export const ENDPOINT = 'https://app.readpeak.com/header/prebid'; @@ -238,12 +238,6 @@ function bannerImpression(slot) { } function site(bidRequests, bidderRequest) { - const url = - config.getConfig('pageUrl') || - (bidderRequest && - bidderRequest.refererInfo && - bidderRequest.refererInfo.referer); - const pubId = bidRequests && bidRequests.length > 0 ? bidRequests[0].params.publisherId @@ -255,12 +249,11 @@ function site(bidRequests, bidderRequest) { return { publisher: { id: pubId.toString(), - domain: config.getConfig('publisherDomain') + domain: bidderRequest?.refererInfo?.domain, }, id: siteId ? siteId.toString() : pubId.toString(), - page: url, - domain: - (url && parseUrl(url).hostname) || config.getConfig('publisherDomain') + page: bidderRequest?.refererInfo?.page, + domain: bidderRequest?.refererInfo?.domain }; } return undefined; diff --git a/modules/relaidoBidAdapter.js b/modules/relaidoBidAdapter.js index 8312dacbdbb..0b2cdaa711e 100644 --- a/modules/relaidoBidAdapter.js +++ b/modules/relaidoBidAdapter.js @@ -101,7 +101,8 @@ function buildRequests(validBidRequests, bidderRequest) { uuid: getUuid(), pv: '$prebid.version$', imuid: imuid, - ref: bidderRequest.refererInfo.referer + // TODO: is 'page' the right value here? + ref: bidderRequest.refererInfo.page }) return { diff --git a/modules/resetdigitalBidAdapter.js b/modules/resetdigitalBidAdapter.js index 255ee32629c..3aa06c8a756 100644 --- a/modules/resetdigitalBidAdapter.js +++ b/modules/resetdigitalBidAdapter.js @@ -24,9 +24,11 @@ export const spec = { site: { domain: getOrigin(), iframe: !bidderRequest.refererInfo.reachedTop, + // TODO: the last element in refererInfo.stack is window.location.href, that's unlikely to have been the intent here url: stack && stack.length > 0 ? [stack.length - 1] : null, https: (window.location.protocol === 'https:'), - referrer: bidderRequest.refererInfo.referer + // TODO: is 'page' the right value here? + referrer: bidderRequest.refererInfo.page }, imps: [], user_ids: validBidRequests[0].userId, diff --git a/modules/revcontentBidAdapter.js b/modules/revcontentBidAdapter.js index 0888e5ad1b4..3787c23b8ea 100644 --- a/modules/revcontentBidAdapter.js +++ b/modules/revcontentBidAdapter.js @@ -4,6 +4,7 @@ import {registerBidder} from '../src/adapters/bidderFactory.js'; import { BANNER, NATIVE } from '../src/mediaTypes.js'; import { triggerPixel, isFn, deepAccess, getAdUnitSizes, parseGPTSingleSizeArrayToRtbSize, _map } from '../src/utils.js'; +import {parseDomain} from '../src/refererDetection.js'; const BIDDER_CODE = 'revcontent'; const NATIVE_PARAMS = { @@ -44,11 +45,11 @@ export const spec = { let serverRequests = []; var refererInfo; if (bidderRequest && bidderRequest.refererInfo) { - refererInfo = bidderRequest.refererInfo.referer; + refererInfo = bidderRequest.refererInfo.page; } if (typeof domain === 'undefined') { - domain = extractHostname(refererInfo); + domain = parseDomain(refererInfo, {noPort: true}); } var endpoint = 'https://' + host + '/rtb?apiKey=' + apiKey + '&userId=' + userId; @@ -196,23 +197,6 @@ function getTemplate(size, customTemplate) { return ''; } -function extractHostname(url) { - if (typeof url == 'undefined' || url == null) { - return ''; - } - var hostname; - if (url.indexOf('//') > -1) { - hostname = url.split('/')[2]; - } else { - hostname = url.split('/')[0]; - } - - hostname = hostname.split(':')[0]; - hostname = hostname.split('?')[0]; - - return hostname; -} - function buildImp(bid, id) { let bidfloor; if (isFn(bid.getFloor)) { diff --git a/modules/rhythmoneBidAdapter.js b/modules/rhythmoneBidAdapter.js index 9e378f2d2ed..94b3645f57b 100644 --- a/modules/rhythmoneBidAdapter.js +++ b/modules/rhythmoneBidAdapter.js @@ -62,25 +62,11 @@ function RhythmOneBidAdapter() { } function frameSite(bidderRequest) { - var site = { - domain: '', - page: '', - ref: '' - } - if (bidderRequest && bidderRequest.refererInfo) { - var ri = bidderRequest.refererInfo; - site.ref = ri.referer; - - if (ri.stack.length) { - site.page = ri.stack[ri.stack.length - 1]; - - // clever trick to get the domain - var el = document.createElement('a'); - el.href = ri.stack[0]; - site.domain = el.hostname; - } + return { + domain: bidderRequest?.refererInfo?.domain || '', + page: bidderRequest?.refererInfo?.page || '', + ref: bidderRequest?.refererInfo?.ref || '' } - return site; } function frameDevice() { diff --git a/modules/richaudienceBidAdapter.js b/modules/richaudienceBidAdapter.js index b49d7c5584c..564b67641a2 100755 --- a/modules/richaudienceBidAdapter.js +++ b/modules/richaudienceBidAdapter.js @@ -43,7 +43,8 @@ export const spec = { bidderRequestId: bid.bidderRequestId, tagId: bid.adUnitCode, sizes: raiGetSizes(bid), - referer: (typeof bidderRequest.refererInfo.referer != 'undefined' ? encodeURIComponent(bidderRequest.refererInfo.referer) : null), + // TODO: is 'page' the right value here? + referer: (typeof bidderRequest.refererInfo.page != 'undefined' ? encodeURIComponent(bidderRequest.refererInfo.page) : null), numIframes: (typeof bidderRequest.refererInfo.numIframes != 'undefined' ? bidderRequest.refererInfo.numIframes : null), transactionId: bid.transactionId, timeout: config.getConfig('bidderTimeout'), @@ -56,7 +57,8 @@ export const spec = { schain: bid.schain }; - REFERER = (typeof bidderRequest.refererInfo.referer != 'undefined' ? encodeURIComponent(bidderRequest.refererInfo.referer) : null) + // TODO: is 'page' the right value here? + REFERER = (typeof bidderRequest.refererInfo.page != 'undefined' ? encodeURIComponent(bidderRequest.refererInfo.page) : null) payload.gdpr_consent = ''; payload.gdpr = false; diff --git a/modules/riseBidAdapter.js b/modules/riseBidAdapter.js index 4e28a485074..3a39311a2f1 100644 --- a/modules/riseBidAdapter.js +++ b/modules/riseBidAdapter.js @@ -423,8 +423,10 @@ function generateGeneralParams(generalObject, bidderRequest) { } if (bidderRequest && bidderRequest.refererInfo) { - generalParams.referrer = deepAccess(bidderRequest, 'refererInfo.referer'); - generalParams.page_url = config.getConfig('pageUrl') || deepAccess(window, 'location.href'); + // TODO: is 'ref' the right value here? + generalParams.referrer = deepAccess(bidderRequest, 'refererInfo.ref'); + // TODO: does the fallback make sense here? + generalParams.page_url = deepAccess(bidderRequest, 'refererInfo.page') || deepAccess(window, 'location.href'); } return generalParams diff --git a/modules/rtbhouseBidAdapter.js b/modules/rtbhouseBidAdapter.js index b8436179a30..f76b5ae18bd 100644 --- a/modules/rtbhouseBidAdapter.js +++ b/modules/rtbhouseBidAdapter.js @@ -180,7 +180,7 @@ function mapSite(slot, bidderRequest) { publisher: { id: pubId.toString(), }, - page: bidderRequest.refererInfo.referer, + page: bidderRequest.refererInfo.page, name: getOrigin() }; if (channel) { diff --git a/modules/rtbsapeBidAdapter.js b/modules/rtbsapeBidAdapter.js index d58b3a1f240..cf3d79eb377 100644 --- a/modules/rtbsapeBidAdapter.js +++ b/modules/rtbsapeBidAdapter.js @@ -43,7 +43,8 @@ export const spec = { requestId: bidderRequest.bidderRequestId, bids: validBidRequests, timezone: (tz > 0 ? '-' : '+') + padInt(Math.floor(Math.abs(tz) / 60)) + ':' + padInt(Math.abs(tz) % 60), - refererInfo: bidderRequest.refererInfo + // TODO: please do not send internal data structures over the network + refererInfo: bidderRequest.refererInfo.legacy }, } }, diff --git a/modules/rubiconAnalyticsAdapter.js b/modules/rubiconAnalyticsAdapter.js index 69335ff33a8..ca0d0c1fe65 100644 --- a/modules/rubiconAnalyticsAdapter.js +++ b/modules/rubiconAnalyticsAdapter.js @@ -148,7 +148,7 @@ function sendBillingEvent(event) { function getBasicEventDetails(auctionId, trigger) { let auctionCache = cache.auctions[auctionId]; - let referrer = config.getConfig('pageUrl') || pageReferer || (auctionCache && auctionCache.referrer); + let referrer = pageReferer || (auctionCache && auctionCache.referrer); let message = { timestamps: { prebidLoaded: rubiconAdapter.MODULE_INITIALIZED_TIME, @@ -676,7 +676,8 @@ let rubiconAdapter = Object.assign({}, baseAdapter, { cacheEntry.bids = {}; cacheEntry.bidsWon = {}; cacheEntry.gamHasRendered = {}; - cacheEntry.referrer = pageReferer = deepAccess(args, 'bidderRequests.0.refererInfo.referer'); + // TODO: is 'page' the right value here? + cacheEntry.referrer = pageReferer = deepAccess(args, 'bidderRequests.0.refererInfo.page'); cacheEntry.bidderOrder = []; const floorData = deepAccess(args, 'bidderRequests.0.bids.0.floorData'); if (floorData) { diff --git a/modules/rubiconBidAdapter.js b/modules/rubiconBidAdapter.js index 9731b1ee901..c551f8909cf 100644 --- a/modules/rubiconBidAdapter.js +++ b/modules/rubiconBidAdapter.js @@ -831,11 +831,11 @@ function _getScreenResolution() { * @returns {string} */ function _getPageUrl(bidRequest, bidderRequest) { - let pageUrl = config.getConfig('pageUrl'); + let pageUrl; if (bidRequest.params.referrer) { pageUrl = bidRequest.params.referrer; - } else if (!pageUrl) { - pageUrl = bidderRequest.refererInfo.referer; + } else { + pageUrl = bidderRequest.refererInfo.page; } return bidRequest.params.secure ? pageUrl.replace(/^http:/i, 'https:') : pageUrl; } diff --git a/modules/saambaaBidAdapter.js b/modules/saambaaBidAdapter.js index 36ab50bfddd..5300fe879b0 100644 --- a/modules/saambaaBidAdapter.js +++ b/modules/saambaaBidAdapter.js @@ -1,3 +1,5 @@ +// TODO: this adapter appears to have no tests + import {deepAccess, generateUUID, isEmpty, isFn, parseSizesInput, parseUrl} from '../src/utils.js'; import {config} from '../src/config.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; @@ -321,8 +323,7 @@ function createVideoRequestData(bid, bidderRequest) { } function getTopWindowLocation(bidderRequest) { - let url = bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer; - return parseUrl(config.getConfig('pageUrl') || url, { decodeSearchAsString: true }); + return parseUrl(bidderRequest?.refererInfo?.page || '', { decodeSearchAsString: true }); } function createBannerRequestData(bid, bidderRequest) { diff --git a/modules/seedingAllianceBidAdapter.js b/modules/seedingAllianceBidAdapter.js index a071cdfea80..98b27de678c 100755 --- a/modules/seedingAllianceBidAdapter.js +++ b/modules/seedingAllianceBidAdapter.js @@ -62,7 +62,7 @@ export const spec = { const pt = setOnAny(validBidRequests, 'params.pt') || setOnAny(validBidRequests, 'params.priceType') || 'net'; const tid = validBidRequests[0].transactionId; const cur = [config.getConfig('currency.adServerCurrency') || DEFAULT_CUR]; - let url = bidderRequest.refererInfo.referer; + let url = bidderRequest.refererInfo.page; const imp = validBidRequests.map((bid, id) => { const assets = _map(bid.nativeParams, (bidParams, key) => { diff --git a/modules/seedtagBidAdapter.js b/modules/seedtagBidAdapter.js index 2f61e0bc56a..f0f82a002f3 100644 --- a/modules/seedtagBidAdapter.js +++ b/modules/seedtagBidAdapter.js @@ -189,7 +189,7 @@ export const spec = { */ buildRequests(validBidRequests, bidderRequest) { const payload = { - url: bidderRequest.refererInfo.referer, + url: bidderRequest.refererInfo.page, publisherToken: validBidRequests[0].params.publisherId, cmp: !!bidderRequest.gdprConsent, timeout: bidderRequest.timeout, diff --git a/modules/sharethroughBidAdapter.js b/modules/sharethroughBidAdapter.js index 57e60a039b3..16495b647ab 100644 --- a/modules/sharethroughBidAdapter.js +++ b/modules/sharethroughBidAdapter.js @@ -34,9 +34,10 @@ export const sharethroughAdapterSpec = { cur: ['USD'], tmax: timeout, site: { - domain: window.location.hostname, - page: window.location.href, - ref: deepAccess(bidderRequest, 'refererInfo.referer'), + // TODO: do the fallbacks make sense here? + domain: deepAccess(bidderRequest, 'refererInfo.domain') || window.location.hostname, + page: deepAccess(bidderRequest, 'refererInfo.page') || window.location.href, + ref: deepAccess(bidderRequest, 'refererInfo.ref'), ...firstPartyData.site, }, device: { diff --git a/modules/showheroes-bsBidAdapter.js b/modules/showheroes-bsBidAdapter.js index 4c8fb812edc..c1987a32c80 100644 --- a/modules/showheroes-bsBidAdapter.js +++ b/modules/showheroes-bsBidAdapter.js @@ -30,7 +30,7 @@ export const spec = { }, buildRequests: function(validBidRequests, bidderRequest) { let adUnits = []; - const pageURL = validBidRequests[0].params.contentPageUrl || bidderRequest.refererInfo.referer; + const pageURL = validBidRequests[0].params.contentPageUrl || bidderRequest.refererInfo.page; const isStage = !!validBidRequests[0].params.stage; const isOutstream = deepAccess(validBidRequests[0], 'mediaTypes.video.context') === 'outstream'; const isCustomRender = deepAccess(validBidRequests[0], 'params.outstreamOptions.customRender'); diff --git a/modules/sirdataRtdProvider.js b/modules/sirdataRtdProvider.js index 098016ce125..532d938375e 100644 --- a/modules/sirdataRtdProvider.js +++ b/modules/sirdataRtdProvider.js @@ -47,8 +47,8 @@ export function getSegmentsAndCategories(reqBidsConfigObj, onDone, moduleConfig, sirdataDomain = 'sddan.com'; sendWithCredentials = true; } - - var actualUrl = moduleConfig.params.actualUrl || getRefererInfo().referer; + // TODO: is 'page' the right value here? + var actualUrl = moduleConfig.params.actualUrl || getRefererInfo().page; const url = 'https://kvt.' + sirdataDomain + '/api/v1/public/p/' + moduleConfig.params.partnerId + '/d/' + moduleConfig.params.key + '/s?callback=&gdpr=' + gdprApplies + '&gdpr_consent=' + tcString + (actualUrl ? '&url=' + encodeURIComponent(actualUrl) : ''); diff --git a/modules/slimcutBidAdapter.js b/modules/slimcutBidAdapter.js index 537372e687f..a04a2fda89a 100644 --- a/modules/slimcutBidAdapter.js +++ b/modules/slimcutBidAdapter.js @@ -113,8 +113,8 @@ function buildRequestObject(bid) { } function getReferrerInfo(bidderRequest) { let ref = window.location.href; - if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { - ref = bidderRequest.refererInfo.referer; + if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.page) { + ref = bidderRequest.refererInfo.page; } return ref; } diff --git a/modules/smaatoBidAdapter.js b/modules/smaatoBidAdapter.js index 522d7ed8e12..a24f296102f 100644 --- a/modules/smaatoBidAdapter.js +++ b/modules/smaatoBidAdapter.js @@ -16,9 +16,10 @@ const buildOpenRtbBidRequest = (bidRequest, bidderRequest) => { tmax: bidderRequest.timeout, site: { id: window.location.hostname, - domain: window.location.hostname, - page: window.location.href, - ref: bidderRequest.refererInfo.referer + // TODO: do the fallbacks make sense here? + domain: bidderRequest.refererInfo.domain || window.location.hostname, + page: bidderRequest.refererInfo.page || window.location.href, + ref: bidderRequest.refererInfo.ref }, device: { language: (navigator && navigator.language) ? navigator.language.split('-')[0] : '', diff --git a/modules/smartadserverBidAdapter.js b/modules/smartadserverBidAdapter.js index d6e1c8de452..5d64cad27b5 100644 --- a/modules/smartadserverBidAdapter.js +++ b/modules/smartadserverBidAdapter.js @@ -148,7 +148,8 @@ export const spec = { appname: bid.params.appName && bid.params.appName !== '' ? bid.params.appName : undefined, ckid: bid.params.ckId || 0, tagId: bid.adUnitCode, - pageDomain: bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer ? bidderRequest.refererInfo.referer : undefined, + // TODO: is 'page' the right value here? + pageDomain: bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.page ? bidderRequest.refererInfo.page : undefined, transactionId: bid.transactionId, timeout: config.getConfig('bidderTimeout'), bidId: bid.bidId, diff --git a/modules/smarthubBidAdapter.js b/modules/smarthubBidAdapter.js index a94ed972b2e..e15b4c488f4 100644 --- a/modules/smarthubBidAdapter.js +++ b/modules/smarthubBidAdapter.js @@ -100,7 +100,7 @@ function buildRequestParams(bidderRequest = {}, placements = []) { winLocation = window.location; } - const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.referer; + const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.page; let refferLocation; try { refferLocation = refferUrl && new URL(refferUrl); diff --git a/modules/smartxBidAdapter.js b/modules/smartxBidAdapter.js index 00c962445d9..5b36e17be11 100644 --- a/modules/smartxBidAdapter.js +++ b/modules/smartxBidAdapter.js @@ -67,7 +67,8 @@ export const spec = { * @return ServerRequest Info describing the request to the server. */ buildRequests: function (bidRequests, bidderRequest) { - const page = bidderRequest.refererInfo.referer; + // TODO: does the fallback make sense here? + const page = bidderRequest.refererInfo.page || bidderRequest.refererInfo.topmostLocation; const isPageSecure = !!page.match(/^https:/) const smartxRequests = bidRequests.map(function (bid) { diff --git a/modules/smartyadsBidAdapter.js b/modules/smartyadsBidAdapter.js index b999d02b059..5125eacc716 100644 --- a/modules/smartyadsBidAdapter.js +++ b/modules/smartyadsBidAdapter.js @@ -35,8 +35,9 @@ export const spec = { buildRequests: (validBidRequests = [], bidderRequest) => { let winTop = window; let location; + // TODO: this odd try-catch block was copied in several adapters; it doesn't seem to be correct for cross-origin try { - location = new URL(bidderRequest.refererInfo.referer) + location = new URL(bidderRequest.refererInfo.page) winTop = window.top; } catch (e) { location = winTop.location; diff --git a/modules/smilewantedBidAdapter.js b/modules/smilewantedBidAdapter.js index f41874c9753..f82e7c9258f 100644 --- a/modules/smilewantedBidAdapter.js +++ b/modules/smilewantedBidAdapter.js @@ -56,7 +56,7 @@ export const spec = { } if (bidderRequest && bidderRequest.refererInfo) { - payload.pageDomain = bidderRequest.refererInfo.referer || ''; + payload.pageDomain = bidderRequest.refererInfo.page || ''; } if (bidderRequest && bidderRequest.gdprConsent) { diff --git a/modules/sonobiBidAdapter.js b/modules/sonobiBidAdapter.js index 8ea05ff52d6..b65fde79553 100644 --- a/modules/sonobiBidAdapter.js +++ b/modules/sonobiBidAdapter.js @@ -76,7 +76,8 @@ export const spec = { const payload = { 'key_maker': JSON.stringify(data), - 'ref': bidderRequest.refererInfo.referer, + // TODO: is 'page' the right value here? + 'ref': bidderRequest.refererInfo.page, 's': generateUUID(), 'pv': PAGEVIEW_ID, 'vp': _getPlatform(), diff --git a/modules/sovrnAnalyticsAdapter.js b/modules/sovrnAnalyticsAdapter.js index 065cfaa58bc..8a5b816ef43 100644 --- a/modules/sovrnAnalyticsAdapter.js +++ b/modules/sovrnAnalyticsAdapter.js @@ -5,6 +5,7 @@ import CONSTANTS from '../src/constants.json'; import {ajaxBuilder} from '../src/ajax.js'; import {config} from '../src/config.js'; import {find, includes} from '../src/polyfill.js'; +import {getRefererInfo} from '../src/refererDetection.js'; const ajax = ajaxBuilder(0) @@ -22,49 +23,11 @@ let pbaUrl = 'https://pba.aws.lijit.com/analytics' let currentAuctions = {}; const analyticsType = 'endpoint' -const getClosestTop = () => { - let topFrame = window; - let err = false; - try { - while (topFrame.parent.document !== topFrame.document) { - if (topFrame.parent.document) { - topFrame = topFrame.parent; - } else { - throw new Error(); - } - } - } catch (e) { - // bException = true; - } - - return { - topFrame, - err - }; -}; - -const getBestPageUrl = ({err: crossDomainError, topFrame}) => { - let sBestPageUrl = ''; - - if (!crossDomainError) { - // easy case- we can get top frame location - sBestPageUrl = topFrame.location.href; - } else { - try { - try { - sBestPageUrl = window.top.location.href; - } catch (e) { - let aOrigins = window.location.ancestorOrigins; - sBestPageUrl = aOrigins[aOrigins.length - 1]; - } - } catch (e) { - sBestPageUrl = topFrame.document.referrer; - } - } - - return sBestPageUrl; -}; -const rootURL = getBestPageUrl(getClosestTop()) +const rootURL = (() => { + const ref = getRefererInfo(); + // TODO: does the fallback make sense here? + return ref.page || ref.topmostLocation; +})(); let sovrnAnalyticsAdapter = Object.assign(adapter({url: pbaUrl, analyticsType}), { track({ eventType, args }) { diff --git a/modules/sovrnBidAdapter.js b/modules/sovrnBidAdapter.js index 1f33250a160..13a866d61f5 100644 --- a/modules/sovrnBidAdapter.js +++ b/modules/sovrnBidAdapter.js @@ -1,7 +1,17 @@ -import { _each, getBidIdParameter, isArray, parseUrl, getUniqueIdentifierStr, deepSetValue, logError, deepAccess, isInteger, logWarn } from '../src/utils.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js' -import { ADPOD, BANNER, VIDEO } from '../src/mediaTypes.js' -import { createEidsArray } from './userId/eids.js' +import { + _each, + deepAccess, + deepSetValue, + getBidIdParameter, + getUniqueIdentifierStr, + isArray, + isInteger, + logError, + logWarn +} from '../src/utils.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {ADPOD, BANNER, VIDEO} from '../src/mediaTypes.js'; +import {createEidsArray} from './userId/eids.js'; const ORTB_VIDEO_PARAMS = { 'mimes': (value) => Array.isArray(value) && value.length > 0 && value.every(v => typeof v === 'string'), @@ -137,9 +147,8 @@ export const spec = { const fpd = bidderRequest.ortb2 || {}; const site = fpd.site || {} - site.page = bidderRequest.refererInfo.referer - // clever trick to get the domain - site.domain = parseUrl(site.page).hostname + site.page = bidderRequest.refererInfo.page + site.domain = bidderRequest.refererInfo.domain const sovrnBidReq = { id: getUniqueIdentifierStr(), diff --git a/modules/spotxBidAdapter.js b/modules/spotxBidAdapter.js index 4e5ff5161af..86a37e97e2f 100644 --- a/modules/spotxBidAdapter.js +++ b/modules/spotxBidAdapter.js @@ -68,7 +68,8 @@ export const spec = { * @return {ServerRequest} Info describing the request to the server. */ buildRequests: function(bidRequests, bidderRequest) { - const referer = bidderRequest.refererInfo.referer; + // TODO: does the fallback make sense here? + const referer = bidderRequest.refererInfo.page || bidderRequest.refererInfo.topmostLocation; const isPageSecure = !!referer.match(/^https:/); const siteId = ''; @@ -76,8 +77,6 @@ export const spec = { let page; if (getBidIdParameter('page', bid.params)) { page = getBidIdParameter('page', bid.params); - } else if (config.getConfig('pageUrl')) { - page = config.getConfig('pageUrl'); } else { page = referer; } diff --git a/modules/sspBCBidAdapter.js b/modules/sspBCBidAdapter.js index 67f806ff792..c8e3d6cb5d3 100644 --- a/modules/sspBCBidAdapter.js +++ b/modules/sspBCBidAdapter.js @@ -1,9 +1,9 @@ -import { deepAccess, isArray, logWarn, parseUrl, getWindowTop } from '../src/utils.js'; -import { ajax } from '../src/ajax.js'; -import { config } from '../src/config.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js'; -import { includes as strIncludes } from '../src/polyfill.js'; +import {deepAccess, getWindowTop, isArray, logWarn} from '../src/utils.js'; +import {ajax} from '../src/ajax.js'; +import {config} from '../src/config.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js'; +import {includes as strIncludes} from '../src/polyfill.js'; const BIDDER_CODE = 'sspBC'; const BIDDER_URL = 'https://ssp.wp.pl/bidder/'; @@ -543,18 +543,12 @@ const spec = { const siteId = setOnAny(validBidRequests, 'params.siteId'); const publisherId = setOnAny(validBidRequests, 'params.publisherId'); - const page = setOnAny(validBidRequests, 'params.page') || bidderRequest.refererInfo.referer; - const domain = setOnAny(validBidRequests, 'params.domain') || parseUrl(page).hostname; + const page = setOnAny(validBidRequests, 'params.page') || bidderRequest.refererInfo.page; + const domain = setOnAny(validBidRequests, 'params.domain') || bidderRequest.refererInfo.domain; const tmax = setOnAny(validBidRequests, 'params.tmax') ? parseInt(setOnAny(validBidRequests, 'params.tmax'), 10) : TMAX; const pbver = '$prebid.version$'; const testMode = setOnAny(validBidRequests, 'params.test') ? 1 : undefined; - - let ref; - - try { - if (W.self === W.top && document.referrer) { ref = document.referrer; } - } catch (e) { - } + const ref = bidderRequest.refererInfo.ref; const payload = { id: bidderRequest.auctionId, diff --git a/modules/staqAnalyticsAdapter.js b/modules/staqAnalyticsAdapter.js index 55d9da54656..b9bfe5212c6 100644 --- a/modules/staqAnalyticsAdapter.js +++ b/modules/staqAnalyticsAdapter.js @@ -24,9 +24,10 @@ const STAQ_EVENTS = { } function buildRequestTemplate(connId) { - const url = staqAdapterRefWin.referer; - const ref = staqAdapterRefWin.referer; - const topLocation = staqAdapterRefWin.referer; + // TODO: what should these pick from refererInfo? + const url = staqAdapterRefWin.topmostLocation; + const ref = staqAdapterRefWin.topmostLocation; + const topLocation = staqAdapterRefWin.topmostLocation; return { ver: ANALYTICS_VERSION, diff --git a/modules/sublimeBidAdapter.js b/modules/sublimeBidAdapter.js index 4dfdd4f3faa..2d177fbe6eb 100644 --- a/modules/sublimeBidAdapter.js +++ b/modules/sublimeBidAdapter.js @@ -154,7 +154,8 @@ function buildRequests(validBidRequests, bidderRequest) { // RefererInfo if (bidderRequest && bidderRequest.refererInfo) { - commonPayload.referer = bidderRequest.refererInfo.referer; + // TODO: is 'topmostLocation' the right value here? + commonPayload.referer = bidderRequest.refererInfo.topmostLocation; commonPayload.numIframes = bidderRequest.refererInfo.numIframes; } // GDPR handling diff --git a/modules/synacormediaBidAdapter.js b/modules/synacormediaBidAdapter.js index 76e33ffbf79..cddd4f0736c 100644 --- a/modules/synacormediaBidAdapter.js +++ b/modules/synacormediaBidAdapter.js @@ -38,9 +38,10 @@ export const spec = { const openRtbBidRequest = { id: bidderRequest.auctionId, site: { - domain: config.getConfig('publisherDomain') || location.hostname, - page: refererInfo.referer, - ref: document.referrer + // TODO: does the fallback make sense here? + domain: refererInfo.domain || location.hostname, + page: refererInfo.page, + ref: refererInfo.ref }, device: { ua: navigator.userAgent diff --git a/modules/taboolaBidAdapter.js b/modules/taboolaBidAdapter.js index 0144f68694f..94fcd1f853c 100644 --- a/modules/taboolaBidAdapter.js +++ b/modules/taboolaBidAdapter.js @@ -3,7 +3,7 @@ import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER} from '../src/mediaTypes.js'; import {config} from '../src/config.js'; -import {getWindowSelf, getWindowTop} from '../src/utils.js' +import {getWindowSelf} from '../src/utils.js' import {getStorageManager} from '../src/storageManager.js'; const BIDDER_CODE = 'taboola'; @@ -60,28 +60,12 @@ export const userData = { export const internal = { getPageUrl: (refererInfo = {}) => { - if (refererInfo.canonicalUrl) { - return refererInfo.canonicalUrl; - } - - if (config.getConfig('pageUrl')) { - return config.getConfig('pageUrl'); - } - - try { - return getWindowTop().location.href; - } catch (e) { - return getWindowSelf().location.href; - } + return refererInfo.page || getWindowSelf().location.href; }, getReferrer: (refererInfo = {}) => { - if (refererInfo.referer) { - return refererInfo.referer; - } - - try { - return getWindowTop().document.referrer; - } catch (e) { + if (refererInfo.ref) { + return refererInfo.ref; + } else { return getWindowSelf().document.referrer; } } @@ -176,7 +160,7 @@ function getSiteProperties({publisherId, bcat = []}, refererInfo) { return { id: publisherId, name: publisherId, - domain: window.location.host, + domain: refererInfo?.domain || window.location.host, page: getPageUrl(refererInfo), ref: getReferrer(refererInfo), publisher: { diff --git a/modules/tappxBidAdapter.js b/modules/tappxBidAdapter.js index 769e8f73565..fd038f3104e 100644 --- a/modules/tappxBidAdapter.js +++ b/modules/tappxBidAdapter.js @@ -5,6 +5,7 @@ import { registerBidder } from '../src/adapters/bidderFactory.js'; import { BANNER, VIDEO } from '../src/mediaTypes.js'; import { config } from '../src/config.js'; import { Renderer } from '../src/Renderer.js'; +import {parseDomain} from '../src/refererDetection.js'; const BIDDER_CODE = 'tappx'; const GVLID_CODE = 628; @@ -555,19 +556,9 @@ export function _checkParamDataType(key, value, datatype) { } export function _extractPageUrl(validBidRequests, bidderRequest) { - let referrer = deepAccess(bidderRequest, 'refererInfo.referer'); - let page = deepAccess(bidderRequest, 'refererInfo.canonicalUrl') || deepAccess(window, 'location.href'); - let paramUrl = deepAccess(validBidRequests, 'params.domainUrl') || config.getConfig('pageUrl'); - - let domainUrl = referrer || page || paramUrl; - - try { - domainUrl = domainUrl.match(/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n?]+)/img)[0].replace(/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?/img, ''); - } catch (error) { - domainUrl = undefined; - } - - return domainUrl; + // TODO: does the fallback make sense? + let url = bidderRequest?.refererInfo?.page || bidderRequest.refererInfo?.topmostLocation; + return parseDomain(url, {noLeadingWww: true}); } registerBidder(spec); diff --git a/modules/teadsBidAdapter.js b/modules/teadsBidAdapter.js index ea94411b80f..841b134d692 100644 --- a/modules/teadsBidAdapter.js +++ b/modules/teadsBidAdapter.js @@ -126,8 +126,8 @@ export const spec = { function getReferrerInfo(bidderRequest) { let ref = ''; - if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { - ref = bidderRequest.refererInfo.referer; + if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.page) { + ref = bidderRequest.refererInfo.page; } return ref; } diff --git a/modules/telariaBidAdapter.js b/modules/telariaBidAdapter.js index 3132e82b9b2..5fb71d1d627 100644 --- a/modules/telariaBidAdapter.js +++ b/modules/telariaBidAdapter.js @@ -247,8 +247,9 @@ function generateUrl(bid, bidderRequest) { } } - if (bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { - url += (`&referrer=${encodeURIComponent(bidderRequest.refererInfo.referer)}`); + if (bidderRequest.refererInfo && bidderRequest.refererInfo.page) { + // TODO: is 'page' the right value here? + url += (`&referrer=${encodeURIComponent(bidderRequest.refererInfo.page)}`); } } diff --git a/modules/theAdxBidAdapter.js b/modules/theAdxBidAdapter.js index d7a79fe74d0..92bfb89f5e0 100644 --- a/modules/theAdxBidAdapter.js +++ b/modules/theAdxBidAdapter.js @@ -155,7 +155,8 @@ export const spec = { withCredentials: true, }, bidder: 'theadx', - referrer: encodeURIComponent(bidderRequest.refererInfo.referer), + // TODO: is 'page' the right value here? + referrer: encodeURIComponent(bidderRequest.refererInfo.page || ''), data: generatePayload(bidRequest, bidderRequest), mediaTypes: bidRequest['mediaTypes'], requestId: bidderRequest.bidderRequestId, @@ -314,7 +315,7 @@ export const spec = { } let buildSiteComponent = (bidRequest, bidderRequest) => { - let loc = parseUrl(bidderRequest.refererInfo.referer, { + let loc = parseUrl(bidderRequest.refererInfo.page || '', { decodeSearchAsString: true }); diff --git a/modules/tpmnBidAdapter.js b/modules/tpmnBidAdapter.js index 88e89bcd64b..8687ab06f4c 100644 --- a/modules/tpmnBidAdapter.js +++ b/modules/tpmnBidAdapter.js @@ -116,13 +116,13 @@ registerBidder(spec); * Creates site description object */ function createSite(refInfo) { - let url = parseUrl(refInfo.referer); + let url = parseUrl(refInfo.page || ''); let site = { 'domain': url.hostname, 'page': url.protocol + '://' + url.hostname + url.pathname }; - if (self === top && document.referrer) { - site.ref = document.referrer; + if (refInfo.ref) { + site.ref = refInfo.ref } let keywords = document.getElementsByTagName('meta')['keywords']; if (keywords && keywords.content) { diff --git a/modules/tripleliftBidAdapter.js b/modules/tripleliftBidAdapter.js index 309c23a2bb3..e9e6e5d2a63 100644 --- a/modules/tripleliftBidAdapter.js +++ b/modules/tripleliftBidAdapter.js @@ -27,7 +27,7 @@ export const tripleliftAdapterSpec = { tlCall = tryAppendQueryString(tlCall, 'v', '$prebid.version$'); if (bidderRequest && bidderRequest.refererInfo) { - let referrer = bidderRequest.refererInfo.referer; + let referrer = bidderRequest.refererInfo.page; tlCall = tryAppendQueryString(tlCall, 'referrer', referrer); } diff --git a/modules/ttdBidAdapter.js b/modules/ttdBidAdapter.js index 4ec4971ee5c..55d7490a4ad 100644 --- a/modules/ttdBidAdapter.js +++ b/modules/ttdBidAdapter.js @@ -125,14 +125,14 @@ function getUser(bidderRequest) { function getSite(bidderRequest, firstPartyData) { var site = { id: utils.deepAccess(bidderRequest, 'bids.0.params.siteId'), - page: utils.deepAccess(bidderRequest, 'refererInfo.referer'), + page: utils.deepAccess(bidderRequest, 'refererInfo.page'), publisher: { id: utils.deepAccess(bidderRequest, 'bids.0.params.publisherId'), }, ...firstPartyData.site }; - var publisherDomain = config.getConfig('publisherDomain'); + var publisherDomain = bidderRequest.refererInfo.domain; if (publisherDomain) { utils.deepSetValue(site, 'publisher.domain', publisherDomain); } diff --git a/modules/ucfunnelBidAdapter.js b/modules/ucfunnelBidAdapter.js index a945f2da2ec..1718382946c 100644 --- a/modules/ucfunnelBidAdapter.js +++ b/modules/ucfunnelBidAdapter.js @@ -264,13 +264,13 @@ function getRequestData(bid, bidderRequest) { } addUserId(bidData, bid.userId); + // TODO: is 'page' the right value here? does the fallback make sense? + bidData.u = bidderRequest?.refererInfo?.page || bidderRequest?.refererInfo?.topmostLocation; try { bidData.host = window.top.location.hostname; - bidData.u = config.getConfig('publisherDomain') || window.top.location.href; bidData.xr = 0; } catch (e) { bidData.host = window.location.hostname; - bidData.u = config.getConfig('publisherDomain') || bidderRequest.refererInfo.referrer || document.referrer || window.location.href; bidData.xr = 1; } diff --git a/modules/undertoneBidAdapter.js b/modules/undertoneBidAdapter.js index f86faf3fe4d..eda4b6f579c 100644 --- a/modules/undertoneBidAdapter.js +++ b/modules/undertoneBidAdapter.js @@ -2,8 +2,8 @@ * Adapter to send bids to Undertone */ -import { deepAccess, parseUrl } from '../src/utils.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; +import {deepAccess, parseUrl} from '../src/utils.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; const BIDDER_CODE = 'undertone'; @@ -26,18 +26,6 @@ function getBidFloor(bidRequest, mediaType) { return (floor && floor.currency === 'USD' && floor.floor) || 0; } -function getCanonicalUrl() { - try { - let doc = window.top.document; - let element = doc.querySelector("link[rel='canonical']"); - if (element !== null) { - return element.href; - } - } catch (e) { - } - return null; -} - function extractDomainFromHost(pageHost) { let domain = null; try { @@ -111,8 +99,8 @@ export const spec = { 'x-ut-hb-params': [], 'commons': commons }; - const referer = bidderRequest.refererInfo.referer; - const canonicalUrl = getCanonicalUrl(); + const referer = bidderRequest.refererInfo.topmostLocation; + const canonicalUrl = bidderRequest.refererInfo.canonicalUrl; if (referer) { commons.referrer = referer; } diff --git a/modules/unicornBidAdapter.js b/modules/unicornBidAdapter.js index 977e694acf7..9cbc79f3e61 100644 --- a/modules/unicornBidAdapter.js +++ b/modules/unicornBidAdapter.js @@ -64,9 +64,9 @@ function buildOpenRtbBidRequestPayload(validBidRequests, bidderRequest) { publisher: { id: String(deepAccess(validBidRequests[0], 'params.publisherId') || 0) }, - domain: window.location.hostname, - page: window.location.href, - ref: bidderRequest.refererInfo.referer + domain: bidderRequest.refererInfo.domain, + page: bidderRequest.refererInfo.page, + ref: bidderRequest.refererInfo.ref }, device: { language: navigator.language, diff --git a/modules/vdoaiBidAdapter.js b/modules/vdoaiBidAdapter.js index 40e3b3322a7..e149a56f988 100644 --- a/modules/vdoaiBidAdapter.js +++ b/modules/vdoaiBidAdapter.js @@ -37,7 +37,8 @@ export const spec = { placementId: bidRequest.params.placementId, sizes: sizes, bidId: bidRequest.bidId, - referer: bidderRequest.refererInfo.referer, + // TODO: is 'page' the right value here? + referer: bidderRequest.refererInfo.page, id: bidRequest.auctionId, mediaType: bidRequest.mediaTypes.video ? 'video' : 'banner' }; diff --git a/modules/ventesBidAdapter.js b/modules/ventesBidAdapter.js index 42292ddaed3..054d59807a4 100644 --- a/modules/ventesBidAdapter.js +++ b/modules/ventesBidAdapter.js @@ -6,8 +6,6 @@ import {registerBidder} from '../src/adapters/bidderFactory.js'; const BID_METHOD = 'POST'; const BIDDER_URL = 'http://13.234.201.146:8088/va/ad'; -const DOMAIN_REGEX = new RegExp('//([^/]*)'); - function groupBy(values, key) { const groups = values.reduce((acc, value) => { const groupId = value[key]; @@ -69,26 +67,16 @@ function validateParameters(parameters) { return true; } -function extractSiteDomainFromURL(url) { - if (!url || !isStr(url)) return null; - - const domain = url.match(DOMAIN_REGEX); - - if (isArray(domain) && domain.length === 2) return domain[1]; - - return null; -} - function generateSiteFromAdUnitContext(bidRequests, adUnitContext) { if (!adUnitContext || !adUnitContext.refererInfo) return null; - const domain = extractSiteDomainFromURL(adUnitContext.refererInfo.referer); + const domain = adUnitContext.refererInfo.domain; const publisherId = bidRequests[0].params.publisherId; if (!domain) return null; return { - page: adUnitContext.refererInfo.referer, + page: adUnitContext.refererInfo.page, domain: domain, name: domain, publisher: { diff --git a/modules/vidazooBidAdapter.js b/modules/vidazooBidAdapter.js index fcd138a2443..3933d7632b6 100644 --- a/modules/vidazooBidAdapter.js +++ b/modules/vidazooBidAdapter.js @@ -128,7 +128,8 @@ function appendUserIdsToRequestPayload(payloadRef, userIds) { } function buildRequests(validBidRequests, bidderRequest) { - const topWindowUrl = bidderRequest.refererInfo.referer; + // TODO: does the fallback make sense here? + const topWindowUrl = bidderRequest.refererInfo.page || bidderRequest.refererInfo.topmostLocation; const requests = []; validBidRequests.forEach(validBidRequest => { const sizes = parseSizesInput(validBidRequest.sizes); diff --git a/modules/videobyteBidAdapter.js b/modules/videobyteBidAdapter.js index 6e99b5bc42a..2ecc3d481aa 100644 --- a/modules/videobyteBidAdapter.js +++ b/modules/videobyteBidAdapter.js @@ -221,9 +221,9 @@ function buildRequestData(bidRequest, bidderRequest) { } ], site: { - domain: window.location.hostname, - page: window.location.href, - ref: bidRequest.refererInfo ? bidRequest.refererInfo.referer || null : null + domain: bidderRequest.refererInfo.domain, + page: bidderRequest.refererInfo.page, + ref: bidderRequest.refererInfo.ref, }, ext: { hb: 1, diff --git a/modules/videoheroesBidAdapter.js b/modules/videoheroesBidAdapter.js index edcdd698153..61123820cf5 100644 --- a/modules/videoheroesBidAdapter.js +++ b/modules/videoheroesBidAdapter.js @@ -62,23 +62,7 @@ export const spec = { return impObject; }); - let w = window; - let l = w.document.location.href; - let r = w.document.referrer; - - let loopChecker = 0; - while (w !== w.parent) { - if (++loopChecker == 10) break; - try { - w = w.parent; - l = w.location.href; - r = w.document.referrer; - } catch (e) { - break; - } - } - - let page = l || bidderRequest.refererInfo.referer; + let page = bidderRequest.refererInfo.page || bidderRequest.refererInfo.topmostLocation; let data = { id: bidderRequest.bidderRequestId, @@ -97,8 +81,8 @@ export const spec = { imp }; - if (r) { - data.site.ref = r; + if (bidderRequest.refererInfo.ref) { + data.site.ref = bidderRequest.refererInfo.ref } if (bidderRequest.gdprConsent) { diff --git a/modules/videoreachBidAdapter.js b/modules/videoreachBidAdapter.js index 61ecd55a2ef..1fc38066407 100644 --- a/modules/videoreachBidAdapter.js +++ b/modules/videoreachBidAdapter.js @@ -28,7 +28,8 @@ export const spec = { }; if (bidderRequest && bidderRequest.refererInfo) { - data.referrer = bidderRequest.refererInfo.referer; + // TODO: is 'page' the right value here? + data.referrer = bidderRequest.refererInfo.page; } if (bidderRequest && bidderRequest.gdprConsent) { diff --git a/modules/vidoomyBidAdapter.js b/modules/vidoomyBidAdapter.js index ffa4a290072..ebecb5a46ae 100644 --- a/modules/vidoomyBidAdapter.js +++ b/modules/vidoomyBidAdapter.js @@ -73,9 +73,8 @@ const buildRequests = (validBidRequests, bidderRequest) => { } const [w, h] = (parseSizesInput(sizes)[0] || '0x0').split('x'); - const aElement = document.createElement('a'); - aElement.href = (bidderRequest.refererInfo && bidderRequest.refererInfo.referer) || top.location.href; - const hostname = aElement.hostname + // TODO: is 'domain' the right value here? + const hostname = bidderRequest.refererInfo.domain || window.location.hostname; const videoContext = deepAccess(bid, 'mediaTypes.video.context'); const bidfloor = deepAccess(bid, `params.bidfloor`, 0); @@ -95,7 +94,8 @@ const buildRequests = (validBidRequests, bidderRequest) => { schain: bid.schain || '', bidfloor, d: getDomainWithoutSubdomain(hostname), // 'vidoomy.com', - sp: encodeURIComponent(aElement.href), + // TODO: does the fallback make sense here? + sp: encodeURIComponent(bidderRequest.refererInfo.page || bidderRequest.refererInfo.topmostLocation), usp: bidderRequest.uspConsent || '', coppa: !!config.getConfig('coppa'), videoContext: videoContext || '' diff --git a/modules/viewdeosDXBidAdapter.js b/modules/viewdeosDXBidAdapter.js index 9e0cb91af9b..7afd23cbde7 100644 --- a/modules/viewdeosDXBidAdapter.js +++ b/modules/viewdeosDXBidAdapter.js @@ -125,7 +125,8 @@ function parseRTBResponse(serverResponse, bidderRequest) { function bidToTag(bidRequests, bidderRequest) { const tag = { - domain: deepAccess(bidderRequest, 'refererInfo.referer') + // TODO: is 'page' the right value here? + domain: deepAccess(bidderRequest, 'refererInfo.page') }; if (deepAccess(bidderRequest, 'gdprConsent.gdprApplies')) { diff --git a/modules/visxBidAdapter.js b/modules/visxBidAdapter.js index 696d54e4b52..cec48a83c35 100644 --- a/modules/visxBidAdapter.js +++ b/modules/visxBidAdapter.js @@ -94,8 +94,9 @@ export const spec = { if (bidderRequest) { timeout = bidderRequest.timeout; - if (bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { - payload.u = bidderRequest.refererInfo.referer; + if (bidderRequest.refererInfo && bidderRequest.refererInfo.page) { + // TODO: is 'page' the right value here? + payload.u = bidderRequest.refererInfo.page; } if (bidderRequest.gdprConsent) { if (bidderRequest.gdprConsent.consentString) { diff --git a/modules/voxBidAdapter.js b/modules/voxBidAdapter.js index 25dbbda90cf..7b8cb42bb0a 100644 --- a/modules/voxBidAdapter.js +++ b/modules/voxBidAdapter.js @@ -198,7 +198,8 @@ export const spec = { */ buildRequests(validBidRequests, bidderRequest) { const payload = { - url: bidderRequest.refererInfo.referer, + // TODO: is 'page' the right value here? + url: bidderRequest.refererInfo.page, cmp: !!bidderRequest.gdprConsent, bidRequests: buildBidRequests(validBidRequests) }; diff --git a/modules/waardexBidAdapter.js b/modules/waardexBidAdapter.js index 51390840650..92b7fc26e4c 100644 --- a/modules/waardexBidAdapter.js +++ b/modules/waardexBidAdapter.js @@ -69,7 +69,8 @@ const getCommonBidsData = bidderRequest => { }; if (bidderRequest && bidderRequest.refererInfo) { - payload.referer = encodeURIComponent(bidderRequest.refererInfo.referer); + // TODO: is 'page' the right value here? + payload.referer = encodeURIComponent(bidderRequest.refererInfo.page || ''); } if (bidderRequest && bidderRequest.uspConsent) { diff --git a/modules/winrBidAdapter.js b/modules/winrBidAdapter.js index 072f8320cfc..9113ea695c2 100644 --- a/modules/winrBidAdapter.js +++ b/modules/winrBidAdapter.js @@ -227,7 +227,8 @@ export const spec = { if (bidderRequest && bidderRequest.refererInfo) { let refererinfo = { - rd_ref: encodeURIComponent(bidderRequest.refererInfo.referer), + // TODO: this collects everything it finds, except for canonicalUrl + rd_ref: encodeURIComponent(bidderRequest.refererInfo.topmostLocation), rd_top: bidderRequest.refererInfo.reachedTop, rd_ifs: bidderRequest.refererInfo.numIframes, rd_stk: bidderRequest.refererInfo.stack diff --git a/modules/yahoosspBidAdapter.js b/modules/yahoosspBidAdapter.js index a1fdb84774f..18356725f99 100644 --- a/modules/yahoosspBidAdapter.js +++ b/modules/yahoosspBidAdapter.js @@ -239,7 +239,7 @@ function generateOpenRtbObject(bidderRequest, bid) { cur: [getFloorModuleData(bidderRequest).currency || deepAccess(bid, 'params.bidOverride.cur') || DEFAULT_CURRENCY], imp: [], site: { - page: deepAccess(bidderRequest, 'refererInfo.referer'), + page: deepAccess(bidderRequest, 'refererInfo.page'), }, device: { dnt: 0, diff --git a/modules/yandexBidAdapter.js b/modules/yandexBidAdapter.js index e20f71bc08d..ae2fb16c8ac 100644 --- a/modules/yandexBidAdapter.js +++ b/modules/yandexBidAdapter.js @@ -1,4 +1,4 @@ -import {parseUrl, formatQS, deepAccess} from '../src/utils.js'; +import {formatQS, deepAccess} from '../src/utils.js'; import { registerBidder } from '../src/adapters/bidderFactory.js'; const BIDDER_CODE = 'yandex'; @@ -20,8 +20,8 @@ export const spec = { let referrer = ''; if (bidderRequest && bidderRequest.refererInfo) { - const url = parseUrl(bidderRequest.refererInfo.referer); - referrer = url.hostname; + // TODO: is 'domain' the right value here? + referrer = bidderRequest.refererInfo.domain } return validBidRequests.map((bidRequest) => { diff --git a/modules/yieldlabBidAdapter.js b/modules/yieldlabBidAdapter.js index bdbb36a9a6c..02486a82115 100644 --- a/modules/yieldlabBidAdapter.js +++ b/modules/yieldlabBidAdapter.js @@ -60,8 +60,9 @@ export const spec = { }) if (bidderRequest) { - if (bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { - query.pubref = bidderRequest.refererInfo.referer + if (bidderRequest.refererInfo && bidderRequest.refererInfo.page) { + // TODO: is 'page' the right value here? + query.pubref = bidderRequest.refererInfo.page } if (bidderRequest.gdprConsent) { diff --git a/modules/yieldliftBidAdapter.js b/modules/yieldliftBidAdapter.js index 61b99d95605..9fe1bfe84fc 100644 --- a/modules/yieldliftBidAdapter.js +++ b/modules/yieldliftBidAdapter.js @@ -44,9 +44,9 @@ export const spec = { id: bidderRequest.auctionId, imp: impressions, site: { - domain: window.location.hostname, - page: window.location.href, - ref: bidderRequest.refererInfo ? bidderRequest.refererInfo.referer || null : null + domain: bidderRequest.refererInfo?.domain, + page: bidderRequest.refererInfo?.page, + ref: bidderRequest.refererInfo?.ref, }, ext: { exchange: { diff --git a/modules/yieldmoBidAdapter.js b/modules/yieldmoBidAdapter.js index 1d2eea27328..538de3f448d 100644 --- a/modules/yieldmoBidAdapter.js +++ b/modules/yieldmoBidAdapter.js @@ -66,7 +66,8 @@ export const spec = { let serverRequest = { pbav: '$prebid.version$', p: [], - page_url: bidderRequest.refererInfo.referer, + // TODO: is 'page' the right value here? + page_url: bidderRequest.refererInfo.page, bust: new Date().getTime().toString(), dnt: getDNT(), description: getPageDescription(), @@ -445,13 +446,13 @@ function extractPlayerSize(bidRequest) { function openRtbSite(bidRequest, bidderRequest) { let result = {}; - const loc = parseUrl(deepAccess(bidderRequest, 'refererInfo.referer')); + const loc = parseUrl(deepAccess(bidderRequest, 'refererInfo.page')); if (!isEmpty(loc)) { result.page = `${loc.protocol}://${loc.hostname}${loc.pathname}`; } - if (self === top && document.referrer) { - result.ref = document.referrer; + if (bidderRequest.refererInfo?.ref) { + result.ref = bidderRequest.refererInfo.ref; } const keywords = document.getElementsByTagName('meta')['keywords']; diff --git a/modules/yieldoneAnalyticsAdapter.js b/modules/yieldoneAnalyticsAdapter.js index cb13503365e..126e3504f98 100644 --- a/modules/yieldoneAnalyticsAdapter.js +++ b/modules/yieldoneAnalyticsAdapter.js @@ -99,7 +99,8 @@ const yieldoneAnalytics = Object.assign(adapter({analyticsType}), { if (currentAuctionId) { const eventsStorage = yieldoneAnalytics.eventsStorage; if (!eventsStorage[currentAuctionId]) eventsStorage[currentAuctionId] = {events: []}; - const referrer = args.refererInfo && args.refererInfo.referer; + // TODO: is 'page' the right value here? + const referrer = args.refererInfo && args.refererInfo.page; if (referrer && referrers[currentAuctionId] !== referrer) { referrers[currentAuctionId] = referrer; } diff --git a/modules/yieldoneBidAdapter.js b/modules/yieldoneBidAdapter.js index 334de9eb3fa..69a5def17bd 100644 --- a/modules/yieldoneBidAdapter.js +++ b/modules/yieldoneBidAdapter.js @@ -25,7 +25,8 @@ export const spec = { const params = bidRequest.params; const placementId = params.placementId; const cb = Math.floor(Math.random() * 99999999999); - const referrer = bidderRequest.refererInfo.referer; + // TODO: is 'page' the right value here? + const referrer = bidderRequest.refererInfo.page; const bidId = bidRequest.bidId; const transactionId = bidRequest.transactionId; const unitCode = bidRequest.adUnitCode; diff --git a/modules/yuktamediaAnalyticsAdapter.js b/modules/yuktamediaAnalyticsAdapter.js index 6872820dd48..8ff22faa7f4 100644 --- a/modules/yuktamediaAnalyticsAdapter.js +++ b/modules/yuktamediaAnalyticsAdapter.js @@ -18,7 +18,8 @@ const events = { const localStoragePrefix = 'yuktamediaAnalytics_'; const utmTags = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content']; const location = getWindowLocation(); -const referer = getRefererInfo().referer; +// TODO: is 'page' the right value here? +const referer = getRefererInfo().page; const _pageInfo = { userAgent: window.navigator.userAgent, timezoneOffset: new Date().getTimezoneOffset(), diff --git a/modules/zetaBidAdapter.js b/modules/zetaBidAdapter.js index a93c94ae4df..159ea42cead 100644 --- a/modules/zetaBidAdapter.js +++ b/modules/zetaBidAdapter.js @@ -94,7 +94,7 @@ export const spec = { payload.device.ua = navigator.userAgent; payload.device.ip = navigator.ip; - payload.site.page = bidderRequest.refererInfo.referer; + payload.site.page = bidderRequest.refererInfo.page; payload.site.mobile = /(ios|ipod|ipad|iphone|android)/i.test(navigator.userAgent) ? 1 : 0; payload.ext.definerId = params.definerId; diff --git a/modules/zeta_global_sspBidAdapter.js b/modules/zeta_global_sspBidAdapter.js index f67fd425026..86b28021bab 100644 --- a/modules/zeta_global_sspBidAdapter.js +++ b/modules/zeta_global_sspBidAdapter.js @@ -2,6 +2,7 @@ import {deepAccess, deepSetValue, isArray, isBoolean, isNumber, isStr, logWarn} import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; import {config} from '../src/config.js'; +import {parseDomain} from '../src/refererDetection.js'; const BIDDER_CODE = 'zeta_global_ssp'; const ENDPOINT_URL = 'https://ssp.disqus.com/bid'; @@ -103,8 +104,9 @@ export const spec = { } }; const rInfo = bidderRequest.refererInfo; - payload.site.page = config.getConfig('pageUrl') || ((rInfo && rInfo.referer) ? rInfo.referer.trim() : window.location.href); - payload.site.domain = config.getConfig('publisherDomain') || getDomainFromURL(payload.site.page); + // TODO: do the fallbacks make sense here? + payload.site.page = rInfo.page || rInfo.topmostLocation; + payload.site.domain = parseDomain(payload.site.page, {noLeadingWww: true}); payload.device.ua = navigator.userAgent; payload.device.language = navigator.language; @@ -268,16 +270,6 @@ function provideEids(request, payload) { } } -function getDomainFromURL(url) { - let anchor = document.createElement('a'); - anchor.href = url; - let hostname = anchor.hostname; - if (hostname.indexOf('www.') === 0) { - return hostname.substring(4); - } - return hostname; -} - function provideMediaType(zetaBid, bid) { if (zetaBid.ext && zetaBid.ext.bidtype) { if (zetaBid.ext.bidtype === VIDEO) { diff --git a/src/config.js b/src/config.js index ea0e9599c93..2403719557f 100644 --- a/src/config.js +++ b/src/config.js @@ -22,7 +22,6 @@ import CONSTANTS from './constants.json'; const DEFAULT_DEBUG = getParameterByName(CONSTANTS.DEBUG_MODE).toUpperCase() === 'TRUE'; const DEFAULT_BIDDER_TIMEOUT = 3000; -const DEFAULT_PUBLISHER_DOMAIN = window.location.origin; const DEFAULT_ENABLE_SEND_ALL_BIDS = true; const DEFAULT_DISABLE_AJAX_TIMEOUT = false; const DEFAULT_BID_CACHE = false; @@ -86,12 +85,12 @@ export function newConfig() { this._bidderTimeout = val; }, - // domain where prebid is running for cross domain iframe communication - _publisherDomain: DEFAULT_PUBLISHER_DOMAIN, + _publisherDomain: null, get publisherDomain() { return this._publisherDomain; }, set publisherDomain(val) { + logWarn('publisherDomain is deprecated and has no effect since v7 - use pageUrl instead') this._publisherDomain = val; }, diff --git a/src/prebid.js b/src/prebid.js index 6bf771e6f59..367695ccf9f 100644 --- a/src/prebid.js +++ b/src/prebid.js @@ -934,49 +934,9 @@ $$PREBID_GLOBAL$$.mergeBidderConfig = config.mergeBidderConfig; /** * Set Prebid config options. - * (Added in version 0.27.0). - * - * `setConfig` is designed to allow for advanced configuration while - * reducing the surface area of the public API. For more information - * about the move to `setConfig` (and the resulting deprecations of - * some other public methods), see [the Prebid 1.0 public API - * proposal](https://gist.github.com/mkendall07/51ee5f6b9f2df01a89162cf6de7fe5b6). - * - * #### Troubleshooting your configuration - * - * If you call `pbjs.setConfig` without an object, e.g., - * - * `pbjs.setConfig('debug', 'true'))` - * - * then Prebid.js will print an error to the console that says: - * - * ``` - * ERROR: setConfig options must be an object - * ``` - * - * If you don't see that message, you can assume the config object is valid. + * See https://docs.prebid.org/dev-docs/publisher-api-reference/setConfig.html * * @param {Object} options Global Prebid configuration object. Must be JSON - no JavaScript functions are allowed. - * @param {string} options.bidderSequence The order in which bidders are called. Example: `pbjs.setConfig({ bidderSequence: "fixed" })`. Allowed values: `"fixed"` (order defined in `adUnit.bids` array on page), `"random"`. - * @param {boolean} options.debug Turn debug logging on/off. Example: `pbjs.setConfig({ debug: true })`. - * @param {string} options.priceGranularity The bid price granularity to use. Example: `pbjs.setConfig({ priceGranularity: "medium" })`. Allowed values: `"low"` ($0.50), `"medium"` ($0.10), `"high"` ($0.01), `"auto"` (sliding scale), `"dense"` (like `"auto"`, with smaller increments at lower CPMs), or a custom price bucket object, e.g., `{ "buckets" : [{"min" : 0,"max" : 20,"increment" : 0.1,"cap" : true}]}`. - * @param {boolean} options.enableSendAllBids Turn "send all bids" mode on/off. Example: `pbjs.setConfig({ enableSendAllBids: true })`. - * @param {number} options.bidderTimeout Set a global bidder timeout, in milliseconds. Example: `pbjs.setConfig({ bidderTimeout: 3000 })`. Note that it's still possible for a bid to get into the auction that responds after this timeout. This is due to how [`setTimeout`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout) works in JS: it queues the callback in the event loop in an approximate location that should execute after this time but it is not guaranteed. For more information about the asynchronous event loop and `setTimeout`, see [How JavaScript Timers Work](https://johnresig.com/blog/how-javascript-timers-work/). - * @param {string} options.publisherDomain The publisher's domain where Prebid is running, for cross-domain iFrame communication. Example: `pbjs.setConfig({ publisherDomain: "https://www.theverge.com" })`. - * @param {Object} options.s2sConfig The configuration object for [server-to-server header bidding](http://prebid.org/dev-docs/get-started-with-prebid-server.html). Example: - * @alias module:pbjs.setConfig - * ``` - * pbjs.setConfig({ - * s2sConfig: { - * accountId: '1', - * enabled: true, - * bidders: ['appnexus', 'pubmatic'], - * timeout: 1000, - * adapter: 'prebidServer', - * endpoint: 'https://prebid.adnxs.com/pbs/v1/auction' - * } - * }) - * ``` */ $$PREBID_GLOBAL$$.setConfig = config.setConfig; $$PREBID_GLOBAL$$.setBidderConfig = config.setBidderConfig; diff --git a/src/refererDetection.js b/src/refererDetection.js index 7e9f2a7e6c7..15c080f5c69 100644 --- a/src/refererDetection.js +++ b/src/refererDetection.js @@ -9,7 +9,47 @@ */ import { config } from './config.js'; -import { logWarn } from './utils.js'; +import {logWarn} from './utils.js'; + +/** + * Prepend a URL with the page's protocol (http/https), if necessary. + */ +export function ensureProtocol(url, win = window) { + if (!url) return url; + if (/\w+:\/\//.exec(url)) { + // url already has protocol + return url; + } + let windowProto = win.location.protocol; + try { + windowProto = win.top.location.protocol; + } catch (e) {} + if (/^\/\//.exec(url)) { + // url uses relative protocol ("//example.com") + return windowProto + url; + } else { + return `${windowProto}//${url}`; + } +} + +/** + * Extract the domain portion from a URL. + * @param url + * @param noLeadingWww: if true, remove 'www.' appearing at the beginning of the domain. + * @param noPort: if true, do not include the ':[port]' portion + */ +export function parseDomain(url, {noLeadingWww = false, noPort = false} = {}) { + try { + url = new URL(ensureProtocol(url)); + } catch (e) { + return; + } + url = noPort ? url.hostname : url.host; + if (noLeadingWww && url.startsWith('www.')) { + url = url.substring(4); + } + return url; +} /** * @param {Window} win Window @@ -42,10 +82,6 @@ export function detectReferer(win) { * @returns {string|null} */ function getCanonicalUrl(doc) { - let pageURL = config.getConfig('pageUrl'); - - if (pageURL) return pageURL; - try { const element = doc.querySelector("link[rel='canonical']"); @@ -59,14 +95,20 @@ export function detectReferer(win) { return null; } + // TODO: the meaning of "reachedTop" seems to be intentionally ambiguous - best to leave them out of + // the typedef for now. (for example, unit tests enforce that "reachedTop" should be false in some situations where we + // happily provide a location for the top). + /** - * Referer info * @typedef {Object} refererInfo - * @property {string} referer detected top url - * @property {boolean} reachedTop whether prebid was able to walk upto top window or not - * @property {number} numIframes number of iframes - * @property {string} stack comma separated urls of all origins - * @property {string} canonicalUrl canonical URL refers to an HTML link element, with the attribute of rel="canonical", found in the element of your webpage + * @property {string|null} location the browser's location, or null if not available (due to cross-origin restrictions) + * @property {string|null} canonicalUrl the site's canonical URL as set by the publisher, through setConfig({pageUrl}) or + * @property {string|null} page the best candidate for the current page URL: `canonicalUrl`, falling back to `location` + * @property {string|null} domain the domain portion of `page` + * @property {string|null} ref the referrer (document.referrer) to the current page, or null if not available (due to cross-origin restrictions) + * @property {string} topmostLocation of the top-most frame for which we could guess the location. Outside of cross-origin scenarios, this is equivalent to `location`. + * @property {number} numIframes number of steps between window.self and window.top + * @property {Array[string|null]} stack our best guess at the location for each frame, in the direction top -> self. */ /** @@ -79,19 +121,20 @@ export function detectReferer(win) { const ancestors = getAncestorOrigins(win); const maxNestedIframes = config.getConfig('maxNestedIframes'); let currentWindow; - let bestReferrer; + let bestLocation; let bestCanonicalUrl; let reachedTop = false; let level = 0; let valuesFromAmp = false; let inAmpFrame = false; + let hasTopLocation = false; do { const previousWindow = currentWindow; const wasInAmpFrame = inAmpFrame; let currentLocation; let crossOrigin = false; - let foundReferrer = null; + let foundLocation = null; inAmpFrame = false; currentWindow = currentWindow ? currentWindow.parent : win; @@ -107,8 +150,9 @@ export function detectReferer(win) { const context = previousWindow.context; try { - foundReferrer = context.sourceUrl; - bestReferrer = foundReferrer; + foundLocation = context.sourceUrl; + bestLocation = foundLocation; + hasTopLocation = true; valuesFromAmp = true; @@ -124,10 +168,11 @@ export function detectReferer(win) { logWarn('Trying to access cross domain iframe. Continuing without referrer and location'); try { + // the referrer to an iframe is the parent window const referrer = previousWindow.document.referrer; if (referrer) { - foundReferrer = referrer; + foundLocation = referrer; if (currentWindow === win.top) { reachedTop = true; @@ -135,18 +180,21 @@ export function detectReferer(win) { } } catch (e) { /* Do nothing */ } - if (!foundReferrer && ancestors && ancestors[level - 1]) { - foundReferrer = ancestors[level - 1]; + if (!foundLocation && ancestors && ancestors[level - 1]) { + foundLocation = ancestors[level - 1]; + if (currentWindow === win.top) { + hasTopLocation = true; + } } - if (foundReferrer && !valuesFromAmp) { - bestReferrer = foundReferrer; + if (foundLocation && !valuesFromAmp) { + bestLocation = foundLocation; } } } else { if (currentLocation) { - foundReferrer = currentLocation; - bestReferrer = foundReferrer; + foundLocation = currentLocation; + bestLocation = foundLocation; valuesFromAmp = false; if (currentWindow === win.top) { @@ -165,23 +213,49 @@ export function detectReferer(win) { } } - stack.push(foundReferrer); + stack.push(foundLocation); level++; } while (currentWindow !== win.top && level < maxNestedIframes); stack.reverse(); + let ref; + try { + ref = win.top.document.referrer; + } catch (e) {} + + const location = reachedTop || hasTopLocation ? bestLocation : null; + const canonicalUrl = config.getConfig('pageUrl') || bestCanonicalUrl || null; + const page = ensureProtocol(canonicalUrl, win) || location; + return { - referer: bestReferrer || null, reachedTop, isAmp: valuesFromAmp, numIframes: level - 1, stack, - canonicalUrl: bestCanonicalUrl || null + topmostLocation: bestLocation || null, + location, + canonicalUrl, + page, + domain: parseDomain(page) || null, + ref: ref || null, + // TODO: the "legacy" refererInfo object is provided here, for now, to accomodate + // adapters that decided to just send it verbatim to their backend. + legacy: { + reachedTop, + isAmp: valuesFromAmp, + numIframes: level - 1, + stack, + referer: bestLocation || null, + canonicalUrl + } }; } return refererInfo; } +/** + * @type {function(): refererInfo} + */ export const getRefererInfo = detectReferer(window); diff --git a/test/spec/modules/33acrossBidAdapter_spec.js b/test/spec/modules/33acrossBidAdapter_spec.js index 141edc1e61c..94e4f50edd7 100644 --- a/test/spec/modules/33acrossBidAdapter_spec.js +++ b/test/spec/modules/33acrossBidAdapter_spec.js @@ -919,7 +919,7 @@ describe('33acrossBidAdapter:', function () { it('returns corresponding server requests with site.page set', function() { const bidderRequest = { refererInfo: { - referer: 'http://foo.com/bar' + page: 'http://foo.com/bar' } }; diff --git a/test/spec/modules/adagioBidAdapter_spec.js b/test/spec/modules/adagioBidAdapter_spec.js index 7dc58acafd1..15f79b407d1 100644 --- a/test/spec/modules/adagioBidAdapter_spec.js +++ b/test/spec/modules/adagioBidAdapter_spec.js @@ -16,7 +16,6 @@ import { loadExternalScript } from '../../../src/adloader.js'; import * as utils from '../../../src/utils.js'; import { config } from '../../../src/config.js'; import { NATIVE } from '../../../src/mediaTypes.js'; -import * as prebidGlobal from 'src/prebidGlobal.js'; import { executeRenderer } from '../../../src/Renderer.js'; const BidRequestBuilder = function BidRequestBuilder(options) { @@ -1388,21 +1387,13 @@ describe('Adagio bid adapter', () => { describe('site information using refererDetection or window.top', function() { it('should returns domain, page and window.referrer in a window.top context', function() { - sandbox.stub(utils, 'getWindowTop').returns({ - location: { - hostname: 'test.io', - href: 'https://test.io/article/a.html' - }, - document: { - referrer: 'https://google.com' - } - }); - const bidderRequest = new BidderRequestBuilder({ refererInfo: { numIframes: 0, reachedTop: true, - referer: 'https://test.io/article/a.html' + page: 'https://test.io/article/a.html', + domain: 'test.io', + ref: 'https://google.com' } }).build(); @@ -1425,13 +1416,15 @@ describe('Adagio bid adapter', () => { const info = { numIframes: 0, reachedTop: true, - referer: 'http://level.io/', + page: 'http://level.io/', stack: [ 'http://level.io/', 'http://example.com/iframe1.html', 'http://example.com/iframe2.html' ], - canonicalUrl: '' + canonicalUrl: '', + domain: 'level.io', + ref: null, }; const bidderRequest = new BidderRequestBuilder({ @@ -1452,13 +1445,16 @@ describe('Adagio bid adapter', () => { const info = { numIframes: 2, reachedTop: false, - referer: 'http://example.com/iframe1.html', + topmostLocation: 'http://example.com/iframe1.html', stack: [ null, 'http://example.com/iframe1.html', 'http://example.com/iframe2.html' ], - canonicalUrl: '' + canonicalUrl: '', + page: null, + domain: null, + ref: null }; const bidderRequest = new BidderRequestBuilder({ diff --git a/test/spec/modules/adbookpspBidAdapter_spec.js b/test/spec/modules/adbookpspBidAdapter_spec.js index 3a49f25edb6..f7e401fefbd 100755 --- a/test/spec/modules/adbookpspBidAdapter_spec.js +++ b/test/spec/modules/adbookpspBidAdapter_spec.js @@ -951,7 +951,9 @@ const bidderRequest = { bidderRequestId: '999ccceeee11', timeout: 200, refererInfo: { - referer: 'http://example-domain.com/foo', + page: 'http://mock-page.com', + domain: 'mock-page.com', + ref: 'http://example-domain.com/foo', }, gdprConsent: { gdprApplies: 1, @@ -999,8 +1001,8 @@ const bannerExchangeRequest = { }, }, site: { - domain: location.hostname, - page: location.href, + domain: 'mock-page.com', + page: 'http://mock-page.com', ref: 'http://example-domain.com/foo', }, source: { @@ -1089,8 +1091,8 @@ const videoExchangeRequest = { }, }, site: { - domain: location.hostname, - page: location.href, + domain: 'mock-page.com', + page: 'http://mock-page.com', ref: 'http://example-domain.com/foo', }, source: { @@ -1171,8 +1173,8 @@ const mixedExchangeRequest = { }, }, site: { - domain: location.hostname, - page: location.href, + domain: 'mock-page.com', + page: 'http://mock-page.com', ref: 'http://example-domain.com/foo', }, source: { diff --git a/test/spec/modules/addefendBidAdapter_spec.js b/test/spec/modules/addefendBidAdapter_spec.js index ac01750e98f..b3b6b2d417a 100644 --- a/test/spec/modules/addefendBidAdapter_spec.js +++ b/test/spec/modules/addefendBidAdapter_spec.js @@ -25,7 +25,7 @@ describe('addefendBidAdapter', () => { return spec.buildRequests(buildRequest, { ...bidderRequest || {}, refererInfo: { - referer: 'https://referer.example.com' + page: 'https://referer.example.com' } })[0]; }; diff --git a/test/spec/modules/adfBidAdapter_spec.js b/test/spec/modules/adfBidAdapter_spec.js index aca907a8742..b1c2d0b4ad2 100644 --- a/test/spec/modules/adfBidAdapter_spec.js +++ b/test/spec/modules/adfBidAdapter_spec.js @@ -71,7 +71,7 @@ describe('Adf adapter', function () { adxDomain: '10.8.57.207' } }]; - let request = spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }); + let request = spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }); assert.equal(request.method, 'POST'); assert.equal(request.url, 'https://10.8.57.207/adx/openrtb'); @@ -82,7 +82,7 @@ describe('Adf adapter', function () { describe('user privacy', function () { it('should send GDPR Consent data to adform if gdprApplies', function () { let validBidRequests = [{ bidId: 'bidId', params: { test: 1 } }]; - let bidderRequest = { gdprConsent: { gdprApplies: true, consentString: 'consentDataString' }, refererInfo: { referer: 'page' } }; + let bidderRequest = { gdprConsent: { gdprApplies: true, consentString: 'consentDataString' }, refererInfo: { page: 'page' } }; let request = JSON.parse(spec.buildRequests(validBidRequests, bidderRequest).data); assert.equal(request.user.ext.consent, bidderRequest.gdprConsent.consentString); @@ -92,7 +92,7 @@ describe('Adf adapter', function () { it('should send gdpr as number', function () { let validBidRequests = [{ bidId: 'bidId', params: { test: 1 } }]; - let bidderRequest = { gdprConsent: { gdprApplies: true, consentString: 'consentDataString' }, refererInfo: { referer: 'page' } }; + let bidderRequest = { gdprConsent: { gdprApplies: true, consentString: 'consentDataString' }, refererInfo: { page: 'page' } }; let request = JSON.parse(spec.buildRequests(validBidRequests, bidderRequest).data); assert.equal(typeof request.regs.ext.gdpr, 'number'); @@ -101,12 +101,12 @@ describe('Adf adapter', function () { it('should send CCPA Consent data to adform', function () { let validBidRequests = [{ bidId: 'bidId', params: { test: 1 } }]; - let bidderRequest = { uspConsent: '1YA-', refererInfo: { referer: 'page' } }; + let bidderRequest = { uspConsent: '1YA-', refererInfo: { page: 'page' } }; let request = JSON.parse(spec.buildRequests(validBidRequests, bidderRequest).data); assert.equal(request.regs.ext.us_privacy, '1YA-'); - bidderRequest = { uspConsent: '1YA-', gdprConsent: { gdprApplies: true, consentString: 'consentDataString' }, refererInfo: { referer: 'page' } }; + bidderRequest = { uspConsent: '1YA-', gdprConsent: { gdprApplies: true, consentString: 'consentDataString' }, refererInfo: { page: 'page' } }; request = JSON.parse(spec.buildRequests(validBidRequests, bidderRequest).data); assert.equal(request.regs.ext.us_privacy, '1YA-'); @@ -119,13 +119,13 @@ describe('Adf adapter', function () { bidId: 'bidId', params: { siteId: 'siteId' } }]; - let bidderRequest = {gdprConsent: {gdprApplies: false, consentString: 'consentDataString'}, refererInfo: { referer: 'page' }}; + let bidderRequest = { gdprConsent: {gdprApplies: false, consentString: 'consentDataString'}, refererInfo: { page: 'page' } }; let request = JSON.parse(spec.buildRequests(validBidRequests, bidderRequest).data); assert.equal(request.user.ext.consent, 'consentDataString'); assert.equal(request.regs.ext.gdpr, 0); - bidderRequest = {gdprConsent: {consentString: 'consentDataString'}, refererInfo: { referer: 'page' }}; + bidderRequest = {gdprConsent: {consentString: 'consentDataString'}, refererInfo: { page: 'page' }}; request = JSON.parse(spec.buildRequests(validBidRequests, bidderRequest).data); assert.equal(request.user, undefined); @@ -136,7 +136,7 @@ describe('Adf adapter', function () { bidId: 'bidId', params: { siteId: 'siteId' } }]; - let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data); + let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data); assert.equal(request.user, undefined); assert.equal(request.regs, undefined); @@ -148,7 +148,7 @@ describe('Adf adapter', function () { bidId: 'bidId', params: { test: 1 } }]; - let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data); + let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data); assert.ok(request.is_debug); assert.equal(request.test, 1); @@ -160,7 +160,7 @@ describe('Adf adapter', function () { bidId: 'bidId', params: { siteId: 'siteId' } }]; - let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data); + let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data); let data = Object.keys(request); assert.deepEqual(keys, data); @@ -172,7 +172,7 @@ describe('Adf adapter', function () { params: { siteId: 'siteId' }, transactionId: 'transactionId' }]; - let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data); + let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data); assert.equal(request.source.tid, validBidRequests[0].transactionId); assert.equal(request.source.fd, 1); @@ -182,7 +182,7 @@ describe('Adf adapter', function () { config.setConfig({ }); let validBidRequests = [{ bidId: 'bidId', params: { test: 1 } }]; - let bidderRequest = { gdprConsent: { gdprApplies: true, consentString: 'consentDataString' }, refererInfo: { referer: 'page' } }; + let bidderRequest = { gdprConsent: { gdprApplies: true, consentString: 'consentDataString' }, refererInfo: { page: 'page' } }; let request = JSON.parse(spec.buildRequests(validBidRequests, bidderRequest).data); assert.equal(request.regs.coppa, undefined); @@ -200,7 +200,7 @@ describe('Adf adapter', function () { coppa: true }); let validBidRequests = [{ bidId: 'bidId', params: { test: 1 } }]; - let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data); + let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data); assert.equal(request.regs.coppa, 1); }); @@ -213,7 +213,7 @@ describe('Adf adapter', function () { bidId: 'bidId', params: { mid: '1000' } }]; - let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data); + let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data); assert.equal(request.device.ua, navigator.userAgent); assert.equal(request.device.w, 100); @@ -230,7 +230,7 @@ describe('Adf adapter', function () { params: { mid: '1000' }, ortb2 }]; - let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' }, ortb2 }).data); + let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' }, ortb2 }).data); assert.equal(request.app.id, 'appid'); assert.equal(request.app.name, 'appname'); @@ -258,11 +258,11 @@ describe('Adf adapter', function () { params: { mid: '1000' }, ortb2 }]; - let refererInfo = { referer: 'page' }; + let refererInfo = { page: 'page' }; let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo, ortb2 }).data); assert.deepEqual(request.site, { - page: refererInfo.referer, + page: refererInfo.page, publisher: { domain: 'publisher.domain.com', name: 'publisher\'s name' @@ -281,7 +281,7 @@ describe('Adf adapter', function () { }) }]; - let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data); + let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data); assert.deepEqual(request.user.ext.eids, [ { source: 'adserver.org', uids: [ { id: 'TTD_ID_FROM_USER_ID_MODULE', atype: 1, ext: { rtiPartner: 'TDID' } } ] }, { source: 'pubcid.org', uids: [ { id: 'pubCommonId_FROM_USER_ID_MODULE', atype: 1 } ] } @@ -291,7 +291,7 @@ describe('Adf adapter', function () { it('should send currency if defined', function () { config.setConfig({ currency: { adServerCurrency: 'EUR' } }); let validBidRequests = [{ params: {} }]; - let refererInfo = { referer: 'page' }; + let refererInfo = { page: 'page' }; let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo }).data); assert.deepEqual(request.cur, [ 'EUR' ]); @@ -309,7 +309,7 @@ describe('Adf adapter', function () { } }]; - let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data); + let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data); assert.deepEqual(request.source.ext.schain, { validation: 'strict', config: { @@ -324,7 +324,7 @@ describe('Adf adapter', function () { bidId: 'bidId', params: { siteId: 'siteId' } }]; - let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data); + let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data); assert.equal(request.ext.pt, 'net'); }); @@ -333,7 +333,7 @@ describe('Adf adapter', function () { bidId: 'bidId', params: { priceType: 'net' } }]; - let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data); + let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data); assert.equal(request.ext.pt, 'net'); }); @@ -348,7 +348,7 @@ describe('Adf adapter', function () { bidId: 'bidId2', params: { siteId: 'siteId' } }]; - let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data); + let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data); assert.equal(request.imp.length, 2); }); @@ -366,7 +366,7 @@ describe('Adf adapter', function () { params: { mid: '1000' }, mediaTypes: {video: {}} }]; - let imps = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp; + let imps = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data).imp; for (let i = 0; i < 3; i++) { assert.equal(imps[i].id, i + 1); @@ -377,7 +377,7 @@ describe('Adf adapter', function () { let validBidRequests = [{ bidId: 'bidId', params: {mid: 1000}, mediaTypes: {video: {}} }, { bidId: 'bidId2', params: {mid: 1001}, mediaTypes: {video: {}} }, { bidId: 'bidId3', params: {mid: 1002}, mediaTypes: {video: {}} }]; - let imps = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp; + let imps = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data).imp; for (let i = 0; i < 3; i++) { assert.equal(imps[i].tagid, validBidRequests[i].params.mid); } @@ -490,7 +490,7 @@ describe('Adf adapter', function () { video: {} } }]; - let [ first, second, third ] = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp; + let [ first, second, third ] = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data).imp; assert.ok(first.banner); assert.ok(first.video); @@ -517,7 +517,7 @@ describe('Adf adapter', function () { } } }]; - let { banner } = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp[0]; + let { banner } = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data).imp[0]; assert.deepEqual(banner, { format: [ { w: 100, h: 100 }, { w: 200, h: 300 } ] }); @@ -537,7 +537,7 @@ describe('Adf adapter', function () { } } }]; - let { video } = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp[0]; + let { video } = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data).imp[0]; assert.deepEqual(video, { playerSize: [640, 480], context: 'outstream', @@ -558,7 +558,7 @@ describe('Adf adapter', function () { body: { len: 140 } } }]; - let assets = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp[0].native.request.assets; + let assets = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data).imp[0].native.request.assets; assert.equal(assets[0].id, 0); assert.equal(assets[1].id, 3); @@ -576,7 +576,7 @@ describe('Adf adapter', function () { } }]; - let assets = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp[0].native.request.assets; + let assets = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data).imp[0].native.request.assets; assert.equal(assets[0].required, 1); assert.ok(!assets[1].required); @@ -599,7 +599,7 @@ describe('Adf adapter', function () { } }]; - let assets = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp[0].native.request.assets; + let assets = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data).imp[0].native.request.assets; assert.ok(assets[0].title); assert.equal(assets[0].title.len, 140); assert.deepEqual(assets[1].img, { type: 3, w: 150, h: 50 }); @@ -622,7 +622,7 @@ describe('Adf adapter', function () { } }]; - let assets = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp[0].native.request.assets; + let assets = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data).imp[0].native.request.assets; assert.ok(assets[0].img); assert.equal(assets[0].img.w, 200); assert.equal(assets[0].img.h, 300); @@ -651,7 +651,7 @@ describe('Adf adapter', function () { } }]; - let assets = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp[0].native.request.assets; + let assets = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data).imp[0].native.request.assets; assert.ok(assets[0].img); assert.equal(assets[0].img.wmin, 100); assert.equal(assets[0].img.hmin, 300); @@ -675,7 +675,7 @@ describe('Adf adapter', function () { } }]; - assert.doesNotThrow(() => spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } })); + assert.doesNotThrow(() => spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } })); }); }); @@ -693,7 +693,7 @@ describe('Adf adapter', function () { } }]; - let assets = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp[0].native.request.assets; + let assets = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data).imp[0].native.request.assets; assert.ok(assets[0].img); assert.equal(assets[0].img.wmin, 0); assert.equal(assets[0].img.hmin, 0); @@ -703,7 +703,7 @@ describe('Adf adapter', function () { }); function getRequestImps(validBidRequests) { - return JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp; + return JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data).imp; } }); diff --git a/test/spec/modules/adgenerationBidAdapter_spec.js b/test/spec/modules/adgenerationBidAdapter_spec.js index 030aa448c19..ac5ab220880 100644 --- a/test/spec/modules/adgenerationBidAdapter_spec.js +++ b/test/spec/modules/adgenerationBidAdapter_spec.js @@ -105,7 +105,7 @@ describe('AdgenerationAdapter', function () { ]; const bidderRequest = { refererInfo: { - referer: 'https://example.com' + page: 'https://example.com' } }; const data = { diff --git a/test/spec/modules/adheseBidAdapter_spec.js b/test/spec/modules/adheseBidAdapter_spec.js index 3fe0a62b2a0..a2e2691c8ba 100644 --- a/test/spec/modules/adheseBidAdapter_spec.js +++ b/test/spec/modules/adheseBidAdapter_spec.js @@ -67,7 +67,7 @@ describe('AdheseAdapter', function () { consentString: 'CONSENT_STRING' }, refererInfo: { - referer: 'http://prebid.org/dev-docs/subjects?_d=1' + page: 'http://prebid.org/dev-docs/subjects?_d=1' } }; diff --git a/test/spec/modules/adkernelAdnBidAdapter_spec.js b/test/spec/modules/adkernelAdnBidAdapter_spec.js index c4ad134711a..67c168f5063 100644 --- a/test/spec/modules/adkernelAdnBidAdapter_spec.js +++ b/test/spec/modules/adkernelAdnBidAdapter_spec.js @@ -144,7 +144,7 @@ describe('AdkernelAdn adapter', function () { auctionStart: 1545836987704, timeout: 3000, refererInfo: { - referer: 'https://example.com/index.html', + page: 'https://example.com/index.html', reachedTop: true, numIframes: 0, stack: ['https://example.com/index.html'] diff --git a/test/spec/modules/adkernelBidAdapter_spec.js b/test/spec/modules/adkernelBidAdapter_spec.js index ab1c5501bd9..4b0eebdf519 100644 --- a/test/spec/modules/adkernelBidAdapter_spec.js +++ b/test/spec/modules/adkernelBidAdapter_spec.js @@ -3,6 +3,7 @@ import {spec} from 'modules/adkernelBidAdapter'; import * as utils from 'src/utils'; import {NATIVE, BANNER, VIDEO} from 'src/mediaTypes'; import {config} from 'src/config'; +import {parseDomain} from '../../../src/refererDetection.js'; describe('Adkernel adapter', function () { const bid1_zone1 = { @@ -253,7 +254,7 @@ describe('Adkernel adapter', function () { }); function buildBidderRequest(url = 'https://example.com/index.html', params = {}) { - return Object.assign({}, params, {refererInfo: {referer: url, reachedTop: true}, timeout: 3000, bidderCode: 'adkernel'}); + return Object.assign({}, params, {refererInfo: {page: url, domain: parseDomain(url), reachedTop: true}, timeout: 3000, bidderCode: 'adkernel'}); } const DEFAULT_BIDDER_REQUEST = buildBidderRequest(); diff --git a/test/spec/modules/admixerBidAdapter_spec.js b/test/spec/modules/admixerBidAdapter_spec.js index 6dfde0d0652..228b87ae4d5 100644 --- a/test/spec/modules/admixerBidAdapter_spec.js +++ b/test/spec/modules/admixerBidAdapter_spec.js @@ -61,7 +61,7 @@ describe('AdmixerAdapter', function () { let bidderRequest = { bidderCode: BIDDER_CODE, refererInfo: { - referer: 'https://example.com' + page: 'https://example.com' } }; diff --git a/test/spec/modules/adotBidAdapter_spec.js b/test/spec/modules/adotBidAdapter_spec.js index 81b9c5e15e9..8851df37d34 100644 --- a/test/spec/modules/adotBidAdapter_spec.js +++ b/test/spec/modules/adotBidAdapter_spec.js @@ -28,7 +28,7 @@ describe('Adot Adapter', function () { it('should build request (banner)', function () { const bidderRequestId = 'bidderRequestId'; const validBidRequests = [{ bidderRequestId, mediaTypes: {} }, { bidderRequestId, bidId: 'bidId', mediaTypes: { banner: { sizes: [[300, 250]] } }, params: { placementId: 'placementId', adUnitCode: 200 } }]; - const bidderRequest = { position: 2, refererInfo: { referer: 'http://localhost.com' }, gdprConsent: { consentString: 'consentString', gdprApplies: true } }; + const bidderRequest = { position: 2, refererInfo: { page: 'http://localhost.com', domain: 'localhost.com' }, gdprConsent: { consentString: 'consentString', gdprApplies: true } }; const request = spec.buildRequests(validBidRequests, bidderRequest); const buildBidRequestResponse = { @@ -48,7 +48,7 @@ describe('Adot Adapter', function () { bidfloor: 0 }], site: { - page: bidderRequest.refererInfo.referer, + page: bidderRequest.refererInfo.page, domain: 'localhost.com', name: 'localhost.com', publisher: { @@ -76,7 +76,7 @@ describe('Adot Adapter', function () { it('should build request (native)', function () { const bidderRequestId = 'bidderRequestId'; const validBidRequests = [{ bidderRequestId, mediaTypes: {} }, { bidderRequestId, bidId: 'bidId', mediaTypes: { native: { title: { required: true, len: 50, sizes: [[300, 250]] }, wrong: {}, image: {} } }, params: { placementId: 'placementId', adUnitCode: 200 } }]; - const bidderRequest = { position: 2, refererInfo: { referer: 'http://localhost.com' }, gdprConsent: { consentString: 'consentString', gdprApplies: true } }; + const bidderRequest = { position: 2, refererInfo: { page: 'http://localhost.com', domain: 'localhost.com' }, gdprConsent: { consentString: 'consentString', gdprApplies: true } }; const request = spec.buildRequests(validBidRequests, bidderRequest); const buildBidRequestResponse = { @@ -95,7 +95,7 @@ describe('Adot Adapter', function () { bidfloor: 0 }], site: { - page: bidderRequest.refererInfo.referer, + page: bidderRequest.refererInfo.page, domain: 'localhost.com', name: 'localhost.com', publisher: { @@ -123,7 +123,7 @@ describe('Adot Adapter', function () { it('should build request (video)', function () { const bidderRequestId = 'bidderRequestId'; const validBidRequests = [{ bidderRequestId, mediaTypes: {} }, { bidderRequestId, bidId: 'bidId', mediaTypes: { video: { playerSize: [[300, 250]], minduration: 1, maxduration: 2, api: 'api', linearity: 'linearity', mimes: [], placement: 'placement', playbackmethod: 'playbackmethod', protocols: 'protocol', startdelay: 'startdelay' } }, params: { placementId: 'placementId', adUnitCode: 200 } }]; - const bidderRequest = { position: 2, refererInfo: { referer: 'http://localhost.com' }, gdprConsent: { consentString: 'consentString', gdprApplies: true } }; + const bidderRequest = { position: 2, refererInfo: { page: 'http://localhost.com', domain: 'localhost.com' }, gdprConsent: { consentString: 'consentString', gdprApplies: true } }; const request = spec.buildRequests(validBidRequests, bidderRequest); const buildBidRequestResponse = { @@ -154,7 +154,7 @@ describe('Adot Adapter', function () { bidfloor: 0 }], site: { - page: bidderRequest.refererInfo.referer, + page: bidderRequest.refererInfo.page, domain: 'localhost.com', name: 'localhost.com', publisher: { diff --git a/test/spec/modules/adpartnerBidAdapter_spec.js b/test/spec/modules/adpartnerBidAdapter_spec.js index 94b56f7735b..d9f9b0d0074 100644 --- a/test/spec/modules/adpartnerBidAdapter_spec.js +++ b/test/spec/modules/adpartnerBidAdapter_spec.js @@ -86,7 +86,7 @@ describe('AdpartnerAdapter', function () { let bidderRequest = { refererInfo: { - referer: 'https://test.domain' + page: 'https://test.domain' } }; diff --git a/test/spec/modules/adrelevantisBidAdapter_spec.js b/test/spec/modules/adrelevantisBidAdapter_spec.js index 569cb0eba60..2612800aa56 100644 --- a/test/spec/modules/adrelevantisBidAdapter_spec.js +++ b/test/spec/modules/adrelevantisBidAdapter_spec.js @@ -445,7 +445,7 @@ describe('AdrelevantisAdapter', function () { const bidRequest = Object.assign({}, bidRequests[0]) const bidderRequest = { refererInfo: { - referer: 'http://example.com/page.html', + topmostLocation: 'http://example.com/page.html', reachedTop: true, numIframes: 2, stack: [ diff --git a/test/spec/modules/adrinoBidAdapter_spec.js b/test/spec/modules/adrinoBidAdapter_spec.js index 52b2796e6db..a7b7007dcf8 100644 --- a/test/spec/modules/adrinoBidAdapter_spec.js +++ b/test/spec/modules/adrinoBidAdapter_spec.js @@ -75,7 +75,7 @@ describe('adrinoBidAdapter', function () { it('should build the request correctly with gdpr', function () { const result = spec.buildRequests( [ bidRequest ], - { gdprConsent: { gdprApplies: true, consentString: 'abc123' }, refererInfo: { referer: 'http://example.com/' } } + { gdprConsent: { gdprApplies: true, consentString: 'abc123' }, refererInfo: { page: 'http://example.com/' } } ); expect(result.length).to.equal(1); expect(result[0].method).to.equal('POST'); @@ -91,7 +91,7 @@ describe('adrinoBidAdapter', function () { it('should build the request correctly without gdpr', function () { const result = spec.buildRequests( [ bidRequest ], - { refererInfo: { referer: 'http://example.com/' } } + { refererInfo: { page: 'http://example.com/' } } ); expect(result.length).to.equal(1); expect(result[0].method).to.equal('POST'); diff --git a/test/spec/modules/aduptechBidAdapter_spec.js b/test/spec/modules/aduptechBidAdapter_spec.js index 362cd3e506a..f76851861a3 100644 --- a/test/spec/modules/aduptechBidAdapter_spec.js +++ b/test/spec/modules/aduptechBidAdapter_spec.js @@ -77,59 +77,41 @@ describe('AduptechBidAdapter', () => { }); it('should handle empty or missing data', () => { - expect(internal.extractPageUrl(null)).to.equal(utils.getWindowTop().location.href); - expect(internal.extractPageUrl({})).to.equal(utils.getWindowTop().location.href); - expect(internal.extractPageUrl({ refererInfo: {} })).to.equal(utils.getWindowTop().location.href); - expect(internal.extractPageUrl({ refererInfo: { canonicalUrl: null } })).to.equal(utils.getWindowTop().location.href); - expect(internal.extractPageUrl({ refererInfo: { canonicalUrl: '' } })).to.equal(utils.getWindowTop().location.href); + expect(internal.extractPageUrl(null)).to.equal(utils.getWindowSelf().location.href); + expect(internal.extractPageUrl({})).to.equal(utils.getWindowSelf().location.href); + expect(internal.extractPageUrl({ refererInfo: {} })).to.equal(utils.getWindowSelf().location.href); + expect(internal.extractPageUrl({ refererInfo: { canonicalUrl: null } })).to.equal(utils.getWindowSelf().location.href); + expect(internal.extractPageUrl({ refererInfo: { canonicalUrl: '' } })).to.equal(utils.getWindowSelf().location.href); }); - it('should use "pageUrl" from config', () => { - config.setConfig({ pageUrl: 'http://page.url' }); - - expect(internal.extractPageUrl({})).to.equal(config.getConfig('pageUrl')); - }); - - it('should use bidderRequest.refererInfo.canonicalUrl', () => { + it('should use bidderRequest.refererInfo.page', () => { const bidderRequest = { refererInfo: { - canonicalUrl: 'http://canonical.url' + page: 'http://canonical.url' } }; - expect(internal.extractPageUrl(bidderRequest)).to.equal(bidderRequest.refererInfo.canonicalUrl); - }); - - it('should prefer bidderRequest.refererInfo.canonicalUrl over "pageUrl" from config', () => { - const bidderRequest = { - refererInfo: { - canonicalUrl: 'http://canonical.url' - } - }; - - config.setConfig({ pageUrl: 'http://page.url' }); - - expect(internal.extractPageUrl(bidderRequest)).to.equal(bidderRequest.refererInfo.canonicalUrl); + expect(internal.extractPageUrl(bidderRequest)).to.equal(bidderRequest.refererInfo.page); }); }); describe('extractReferrer', () => { it('should handle empty or missing data', () => { - expect(internal.extractReferrer(null)).to.equal(utils.getWindowTop().document.referrer); - expect(internal.extractReferrer({})).to.equal(utils.getWindowTop().document.referrer); - expect(internal.extractReferrer({ refererInfo: {} })).to.equal(utils.getWindowTop().document.referrer); - expect(internal.extractReferrer({ refererInfo: { referer: null } })).to.equal(utils.getWindowTop().document.referrer); - expect(internal.extractReferrer({ refererInfo: { referer: '' } })).to.equal(utils.getWindowTop().document.referrer); + expect(internal.extractReferrer(null)).to.equal(utils.getWindowSelf().document.referrer); + expect(internal.extractReferrer({})).to.equal(utils.getWindowSelf().document.referrer); + expect(internal.extractReferrer({ refererInfo: {} })).to.equal(utils.getWindowSelf().document.referrer); + expect(internal.extractReferrer({ refererInfo: { referer: null } })).to.equal(utils.getWindowSelf().document.referrer); + expect(internal.extractReferrer({ refererInfo: { referer: '' } })).to.equal(utils.getWindowSelf().document.referrer); }); - it('hould use bidderRequest.refererInfo.referer', () => { + it('hould use bidderRequest.refererInfo.ref', () => { const bidderRequest = { refererInfo: { - referer: 'foobar' + ref: 'foobar' } }; - expect(internal.extractReferrer(bidderRequest)).to.equal(bidderRequest.refererInfo.referer); + expect(internal.extractReferrer(bidderRequest)).to.equal(bidderRequest.refererInfo.ref); }); }); @@ -426,8 +408,8 @@ describe('AduptechBidAdapter', () => { const bidderRequest = { auctionId: 'auctionId123', refererInfo: { - canonicalUrl: 'http://crazy.canonical.url', - referer: 'http://crazy.referer.url' + page: 'http://crazy.canonical.url', + ref: 'http://crazy.referer.url' }, gdprConsent: { consentString: 'consentString123', @@ -497,8 +479,8 @@ describe('AduptechBidAdapter', () => { method: ENDPOINT_METHOD, data: { auctionId: bidderRequest.auctionId, - pageUrl: bidderRequest.refererInfo.canonicalUrl, - referrer: bidderRequest.refererInfo.referer, + pageUrl: bidderRequest.refererInfo.page, + referrer: bidderRequest.refererInfo.ref, gdpr: { consentString: bidderRequest.gdprConsent.consentString, consentRequired: bidderRequest.gdprConsent.gdprApplies @@ -526,8 +508,8 @@ describe('AduptechBidAdapter', () => { method: ENDPOINT_METHOD, data: { auctionId: bidderRequest.auctionId, - pageUrl: bidderRequest.refererInfo.canonicalUrl, - referrer: bidderRequest.refererInfo.referer, + pageUrl: bidderRequest.refererInfo.page, + referrer: bidderRequest.refererInfo.ref, gdpr: { consentString: bidderRequest.gdprConsent.consentString, consentRequired: bidderRequest.gdprConsent.gdprApplies diff --git a/test/spec/modules/adxcgBidAdapter_spec.js b/test/spec/modules/adxcgBidAdapter_spec.js index 13afd3ea8e3..32e9921f0ae 100644 --- a/test/spec/modules/adxcgBidAdapter_spec.js +++ b/test/spec/modules/adxcgBidAdapter_spec.js @@ -52,7 +52,7 @@ describe('Adxcg adapter', function () { adzoneid: '19910113' } }]; - let request = spec.buildRequests(validBidRequests, {refererInfo: {referer: 'page'}}); + let request = spec.buildRequests(validBidRequests, {refererInfo: {page: 'page', domain: 'localhost'}}); assert.equal(request.method, 'POST'); assert.equal(request.url, 'https://pbc.adxcg.net/rtb/ortb/pbc?adExchangeId=1'); @@ -180,7 +180,7 @@ describe('Adxcg adapter', function () { bidId: 'bidId', params: {adzoneid: '1000'} }]; - let request = JSON.parse(spec.buildRequests(validBidRequests, {refererInfo: {referer: 'page'}}).data); + let request = JSON.parse(spec.buildRequests(validBidRequests, {refererInfo: {page: 'page', domain: 'localhost'}}).data); assert.equal(request.device.ua, navigator.userAgent); assert.equal(request.device.w, 100); @@ -227,13 +227,13 @@ describe('Adxcg adapter', function () { params: {adzoneid: '1000'}, ortb2 }]; - let refererInfo = {referer: 'page'}; + let refererInfo = {page: 'page', domain: 'localhost'}; let request = JSON.parse(spec.buildRequests(validBidRequests, {refererInfo, ortb2}).data); assert.deepEqual(request.site, { domain: 'localhost', id: '123123', - page: refererInfo.referer, + page: refererInfo.page, publisher: { domain: 'publisher.domain.com', id: 4441, diff --git a/test/spec/modules/adxpremiumAnalyticsAdapter_spec.js b/test/spec/modules/adxpremiumAnalyticsAdapter_spec.js index e4a8fa9dccd..fd698e9e1fd 100644 --- a/test/spec/modules/adxpremiumAnalyticsAdapter_spec.js +++ b/test/spec/modules/adxpremiumAnalyticsAdapter_spec.js @@ -122,7 +122,7 @@ describe('AdxPremium analytics adapter', function () { 'auctionStart': 1589707613899, 'timeout': 2000, 'refererInfo': { - 'referer': 'https://test.com/article/176067', + 'page': 'https://test.com/article/176067', 'reachedTop': true, 'numIframes': 0, 'stack': [ @@ -222,7 +222,7 @@ describe('AdxPremium analytics adapter', function () { 'auctionStart': 1589707613899, 'timeout': 2000, 'refererInfo': { - 'referer': 'https://test.com/article/176067', + 'page': 'https://test.com/article/176067', 'reachedTop': true, 'numIframes': 0, 'stack': [ diff --git a/test/spec/modules/adyoulikeBidAdapter_spec.js b/test/spec/modules/adyoulikeBidAdapter_spec.js index b5365e8d21a..12278900ab0 100644 --- a/test/spec/modules/adyoulikeBidAdapter_spec.js +++ b/test/spec/modules/adyoulikeBidAdapter_spec.js @@ -6,6 +6,7 @@ import { newBidder } from 'src/adapters/bidderFactory.js'; describe('Adyoulike Adapter', function () { const canonicalUrl = 'https://canonical.url/?t=%26'; const referrerUrl = 'http://referrer.url/?param=value'; + const domain = 'domain:123'; const defaultDC = 'hb-api'; const consentString = 'BOJ8RZsOJ8RZsABAB8AAAAAZ+A=='; const bidderRequest = { @@ -16,7 +17,7 @@ describe('Adyoulike Adapter', function () { consentString: consentString, gdprApplies: true }, - refererInfo: {referer: referrerUrl} + refererInfo: {location: referrerUrl, canonicalUrl, domain} }; const bidRequestWithEmptyPlacement = [ { @@ -592,20 +593,6 @@ describe('Adyoulike Adapter', function () { }); describe('buildRequests', function () { - let canonicalQuery; - - beforeEach(function () { - let canonical = document.createElement('link'); - canonical.rel = 'canonical'; - canonical.href = canonicalUrl; - canonicalQuery = sinon.stub(window.top.document.head, 'querySelector'); - canonicalQuery.withArgs('link[rel="canonical"][href]').returns(canonical); - }); - - afterEach(function () { - canonicalQuery.restore(); - }); - it('Should expand short native image config type', function() { const request = spec.buildRequests(bidRequestWithNativeImageType, bidderRequest); const payload = JSON.parse(request.data); @@ -614,7 +601,7 @@ describe('Adyoulike Adapter', function () { expect(request.method).to.equal('POST'); expect(request.url).to.contains('CanonicalUrl=' + encodeURIComponent(canonicalUrl)); expect(request.url).to.contains('RefererUrl=' + encodeURIComponent(referrerUrl)); - expect(request.url).to.contains('PublisherDomain=http%3A%2F%2Flocalhost%3A9876'); + expect(request.url).to.contains('PublisherDomain=' + encodeURIComponent(domain)); expect(payload.Version).to.equal('1.0'); expect(payload.Bids['bid_id_0'].PlacementID).to.be.equal('placement_0'); @@ -711,7 +698,7 @@ describe('Adyoulike Adapter', function () { expect(request.method).to.equal('POST'); expect(request.url).to.contains('CanonicalUrl=' + encodeURIComponent(canonicalUrl)); expect(request.url).to.contains('RefererUrl=' + encodeURIComponent(referrerUrl)); - expect(request.url).to.contains('PublisherDomain=http%3A%2F%2Flocalhost%3A9876'); + expect(request.url).to.contains('PublisherDomain=' + encodeURIComponent(domain)); expect(payload.Version).to.equal('1.0'); expect(payload.Bids['bid_id_0'].PlacementID).to.be.equal('placement_0'); @@ -720,8 +707,7 @@ describe('Adyoulike Adapter', function () { }); it('sends bid request to endpoint with single placement without canonical', function () { - canonicalQuery.restore(); - const request = spec.buildRequests(bidRequestWithSinglePlacement, bidderRequest); + const request = spec.buildRequests(bidRequestWithSinglePlacement, {...bidderRequest, refererInfo: {...bidderRequest.refererInfo, canonicalUrl: null}}); const payload = JSON.parse(request.data); expect(request.url).to.contain(getEndpoint()); @@ -735,8 +721,7 @@ describe('Adyoulike Adapter', function () { }); it('sends bid request to endpoint with single placement multiple mediatype', function () { - canonicalQuery.restore(); - const request = spec.buildRequests(bidRequestWithMultipleMediatype, bidderRequest); + const request = spec.buildRequests(bidRequestWithSinglePlacement, {...bidderRequest, refererInfo: {...bidderRequest.refererInfo, canonicalUrl: null}}); const payload = JSON.parse(request.data); expect(request.url).to.contain(getEndpoint()); diff --git a/test/spec/modules/ajaBidAdapter_spec.js b/test/spec/modules/ajaBidAdapter_spec.js index 9bb77520212..a2095d52857 100644 --- a/test/spec/modules/ajaBidAdapter_spec.js +++ b/test/spec/modules/ajaBidAdapter_spec.js @@ -50,7 +50,7 @@ describe('AjaAdapter', function () { const bidderRequest = { refererInfo: { - referer: 'https://hoge.com' + page: 'https://hoge.com' } }; @@ -88,7 +88,7 @@ describe('AjaAdapter', function () { const bidderRequest = { refererInfo: { - referer: 'https://hoge.com' + page: 'https://hoge.com' } }; diff --git a/test/spec/modules/alkimiBidAdapter_spec.js b/test/spec/modules/alkimiBidAdapter_spec.js index 58a5a3b54ab..9147f4548bd 100644 --- a/test/spec/modules/alkimiBidAdapter_spec.js +++ b/test/spec/modules/alkimiBidAdapter_spec.js @@ -88,7 +88,7 @@ describe('alkimiBidAdapter', function () { const bidderRequest = spec.buildRequests(bidRequests, { auctionId: '123', refererInfo: { - referer: 'http://test.com/path.html' + page: 'http://test.com/path.html' } }) diff --git a/test/spec/modules/amxBidAdapter_spec.js b/test/spec/modules/amxBidAdapter_spec.js index 48701ce1b60..e6a87d6035e 100644 --- a/test/spec/modules/amxBidAdapter_spec.js +++ b/test/spec/modules/amxBidAdapter_spec.js @@ -40,7 +40,8 @@ const sampleBidderRequest = { auctionId: utils.getUniqueIdentifierStr(), uspConsent: '1YYY', refererInfo: { - referer: 'https://www.prebid.org', + location: 'https://www.prebid.org', + topmostLocation: 'https://www.prebid.org', canonicalUrl: 'https://www.prebid.org/the/link/to/the/page' }, ortb2: sampleFPD @@ -227,35 +228,22 @@ describe('AmxBidAdapter', () => { const { data } = spec.buildRequests([sampleBidRequestBase], { ...sampleBidderRequest, refererInfo: { - numIframes: 1, - referer: 'http://search-traffic-source.com', - stack: [] + location: null, + topmostLocation: null, + ref: 'http://search-traffic-source.com', } }); expect(data.do).to.equal('localhost') expect(data.re).to.equal('http://search-traffic-source.com'); }); - it('if we are in AMP, make sure we use the canonical URL or the referrer (which is sourceUrl)', () => { - const { data } = spec.buildRequests([sampleBidRequestBase], { - ...sampleBidderRequest, - refererInfo: { - isAmp: true, - referer: 'http://real-publisher-site.com/content', - stack: [] - } - }); - expect(data.do).to.equal('real-publisher-site.com') - expect(data.re).to.equal('http://real-publisher-site.com/content'); - }) - it('if prebid is in an iframe, will use the topmost url as domain', () => { const { data } = spec.buildRequests([sampleBidRequestBase], { ...sampleBidderRequest, refererInfo: { - numIframes: 1, - referer: 'http://search-traffic-source.com', - stack: ['http://top-site.com', 'http://iframe.com'] + location: null, + topmostLocation: 'http://top-site.com', + ref: 'http://search-traffic-source.com', } }); expect(data.do).to.equal('top-site.com'); diff --git a/test/spec/modules/apacdexBidAdapter_spec.js b/test/spec/modules/apacdexBidAdapter_spec.js index ff1d3b813ce..773c9925d58 100644 --- a/test/spec/modules/apacdexBidAdapter_spec.js +++ b/test/spec/modules/apacdexBidAdapter_spec.js @@ -730,22 +730,4 @@ describe('ApacdexBidAdapter', function () { expect(validateGeoObject(geoObject)).to.equal(false); }); }); - - describe('getDomain', function () { - it('should return valid domain from publisherDomain config', () => { - let pageUrl = 'https://www.example.com/page/prebid/exam.html'; - config.setConfig({ publisherDomain: pageUrl }); - expect(getDomain(pageUrl)).to.equal('example.com'); - }); - it('should return valid domain from pageUrl argument', () => { - let pageUrl = 'https://www.example.com/page/prebid/exam.html'; - config.setConfig({ publisherDomain: '' }); - expect(getDomain(pageUrl)).to.equal('example.com'); - }); - it('should return undefined if pageUrl and publisherDomain not config', () => { - let pageUrl; - config.setConfig({ publisherDomain: '' }); - expect(getDomain(pageUrl)).to.equal(pageUrl); - }); - }); }); diff --git a/test/spec/modules/appierBidAdapter_spec.js b/test/spec/modules/appierBidAdapter_spec.js index 5b6ccf14162..8b6ad5c2f6f 100644 --- a/test/spec/modules/appierBidAdapter_spec.js +++ b/test/spec/modules/appierBidAdapter_spec.js @@ -64,12 +64,16 @@ describe('AppierAdapter', function () { 'auctionId': '1d1a030790a475', }; const fakeBidRequests = [bid]; - const fakeBidderRequest = {refererInfo: { - 'referer': 'fakeReferer', - 'reachedTop': true, - 'numIframes': 1, - 'stack': [] - }}; + const fakeBidderRequest = { + refererInfo: { + legacy: { + 'referer': 'fakeReferer', + 'reachedTop': true, + 'numIframes': 1, + 'stack': [] + } + } + }; const builtRequests = spec.buildRequests(fakeBidRequests, fakeBidderRequest); expect(builtRequests.length).to.equal(1); @@ -77,7 +81,7 @@ describe('AppierAdapter', function () { expect(builtRequests[0].url).match(/v1\/prebid\/bid/); expect(builtRequests[0].data).deep.equal({ 'bids': fakeBidRequests, - 'refererInfo': fakeBidderRequest.refererInfo, + 'refererInfo': fakeBidderRequest.refererInfo.legacy, 'version': ADAPTER_VERSION }); }); diff --git a/test/spec/modules/appnexusBidAdapter_spec.js b/test/spec/modules/appnexusBidAdapter_spec.js index d4b2ee13246..15fa61d8766 100644 --- a/test/spec/modules/appnexusBidAdapter_spec.js +++ b/test/spec/modules/appnexusBidAdapter_spec.js @@ -871,7 +871,7 @@ describe('AppNexusAdapter', function () { const bidRequest = Object.assign({}, bidRequests[0]); const bidderRequest = { refererInfo: { - referer: 'https://example.com/page.html', + topmostLocation: 'https://example.com/page.html', reachedTop: true, numIframes: 2, stack: [ @@ -895,14 +895,11 @@ describe('AppNexusAdapter', function () { it('if defined, should include publisher pageUrl to normal referer info in payload', function () { const bidRequest = Object.assign({}, bidRequests[0]); - sinon - .stub(config, 'getConfig') - .withArgs('pageUrl') - .returns('https://mypub.override.com/test/page.html'); const bidderRequest = { refererInfo: { - referer: 'https://example.com/page.html', + canonicalUrl: 'https://mypub.override.com/test/page.html', + topmostLocation: 'https://example.com/page.html', reachedTop: true, numIframes: 2, stack: [ @@ -923,8 +920,6 @@ describe('AppNexusAdapter', function () { rd_stk: bidderRequest.refererInfo.stack.map((url) => encodeURIComponent(url)).join(','), rd_can: 'https://mypub.override.com/test/page.html' }); - - config.getConfig.restore(); }); it('should populate schain if available', function () { diff --git a/test/spec/modules/asoBidAdapter_spec.js b/test/spec/modules/asoBidAdapter_spec.js index 0dc779a300d..5ac44cb1db4 100644 --- a/test/spec/modules/asoBidAdapter_spec.js +++ b/test/spec/modules/asoBidAdapter_spec.js @@ -62,7 +62,8 @@ describe('Adserver.Online bidding adapter', function () { refererInfo: { numIframes: 0, reachedTop: true, - referer: 'https://example.com' + page: 'https://example.com', + domain: 'example.com' } }; diff --git a/test/spec/modules/audiencerunBidAdapter_spec.js b/test/spec/modules/audiencerunBidAdapter_spec.js index 7f1e059fa2a..57de8bdb0df 100644 --- a/test/spec/modules/audiencerunBidAdapter_spec.js +++ b/test/spec/modules/audiencerunBidAdapter_spec.js @@ -114,7 +114,8 @@ describe('AudienceRun bid adapter tests', function () { }, refererInfo: { canonicalUrl: undefined, - referer: 'https://example.com', + page: 'https://example.com', + topmostLocation: 'https://example.com', numIframes: 0, reachedTop: true, }, diff --git a/test/spec/modules/axonixBidAdapter_spec.js b/test/spec/modules/axonixBidAdapter_spec.js index a952d527600..37f409e5769 100644 --- a/test/spec/modules/axonixBidAdapter_spec.js +++ b/test/spec/modules/axonixBidAdapter_spec.js @@ -65,7 +65,7 @@ describe('AxonixBidAdapter', function () { gdprApplies: true }, refererInfo: { - referer: 'https://www.prebid.org', + page: 'https://www.prebid.org', canonicalUrl: 'https://www.prebid.org/the/link/to/the/page' } }; diff --git a/test/spec/modules/beachfrontBidAdapter_spec.js b/test/spec/modules/beachfrontBidAdapter_spec.js index 98adafa72df..addd4304c7d 100644 --- a/test/spec/modules/beachfrontBidAdapter_spec.js +++ b/test/spec/modules/beachfrontBidAdapter_spec.js @@ -155,7 +155,7 @@ describe('BeachfrontAdapter', function () { const topLocation = parseUrl('http://www.example.com?foo=bar', { decodeSearchAsString: true }); const bidderRequest = { refererInfo: { - referer: topLocation.href + page: topLocation.href } }; const requests = spec.buildRequests([ bidRequest ], bidderRequest); @@ -398,7 +398,7 @@ describe('BeachfrontAdapter', function () { const topLocation = parseUrl('http://www.example.com?foo=bar', { decodeSearchAsString: true }); const bidderRequest = { refererInfo: { - referer: topLocation.href + page: topLocation.href } }; const requests = spec.buildRequests([ bidRequest ], bidderRequest); @@ -572,7 +572,7 @@ describe('BeachfrontAdapter', function () { bidRequest.mediaTypes = { video: {} }; const bidderRequest = { refererInfo: { - referer: 'http://example.com/page.html' + page: 'http://example.com/page.html' }, ortb2 }; diff --git a/test/spec/modules/bliinkBidAdapter_spec.js b/test/spec/modules/bliinkBidAdapter_spec.js index 729605f7db8..748ed2c8279 100644 --- a/test/spec/modules/bliinkBidAdapter_spec.js +++ b/test/spec/modules/bliinkBidAdapter_spec.js @@ -120,11 +120,14 @@ const getConfigBuildRequest = (placement) => { bidderCode: 'bliink', bids: [getConfigBid(placement)], refererInfo: { - canonicalUrl: null, - isAmp: false, - numIframes: 0, - reachedTop: true, - referer: 'http://localhost:9999/integrationExamples/gpt/bliink-adapter.html?pbjs_debug=true', + page: 'http://localhost:9999/integrationExamples/gpt/bliink-adapter.html?pbjs_debug=true', + legacy: { + canonicalUrl: null, + isAmp: false, + numIframes: 0, + reachedTop: true, + referer: 'http://localhost:9999/integrationExamples/gpt/bliink-adapter.html?pbjs_debug=true', + } }, } @@ -474,7 +477,7 @@ const testsBuildRequests = [ bidderRequestId: getConfigBuildRequest('banner').bidderRequestId, bidderCode: getConfigBuildRequest('banner').bidderCode, bids: getConfigBuildRequest('banner').bids, - refererInfo: getConfigBuildRequest('banner').refererInfo + refererInfo: getConfigBuildRequest('banner').refererInfo.legacy }, data: { gdpr: false, @@ -505,7 +508,7 @@ const testsBuildRequests = [ bidderRequestId: getConfigBuildRequest('banner').bidderRequestId, bidderCode: getConfigBuildRequest('banner').bidderCode, bids: getConfigBuildRequest('banner').bids, - refererInfo: getConfigBuildRequest('banner').refererInfo + refererInfo: getConfigBuildRequest('banner').refererInfo.legacy }, data: { gdpr: true, diff --git a/test/spec/modules/bluebillywigBidAdapter_spec.js b/test/spec/modules/bluebillywigBidAdapter_spec.js index c831ddf6ddf..0a9c6b30c94 100644 --- a/test/spec/modules/bluebillywigBidAdapter_spec.js +++ b/test/spec/modules/bluebillywigBidAdapter_spec.js @@ -439,7 +439,7 @@ describe('BlueBillywigAdapter', () => { it('should add referrerInfo as site when no app is set', () => { const newValidBidderRequest = deepClone(validBidderRequest); - newValidBidderRequest.refererInfo = { referer: 'https://www.bluebillywig.com' }; + newValidBidderRequest.refererInfo = { page: 'https://www.bluebillywig.com' }; const request = spec.buildRequests(baseValidBidRequests, newValidBidderRequest); const payload = JSON.parse(request.data); diff --git a/test/spec/modules/bridgewellBidAdapter_spec.js b/test/spec/modules/bridgewellBidAdapter_spec.js index 2c0db5d9dce..77818f34a62 100644 --- a/test/spec/modules/bridgewellBidAdapter_spec.js +++ b/test/spec/modules/bridgewellBidAdapter_spec.js @@ -141,7 +141,10 @@ describe('bridgewellBidAdapter', function () { it('should attach valid params to the tag', function () { const bidderRequest = { refererInfo: { - referer: 'https://www.bridgewell.com/' + page: 'https://www.bridgewell.com/', + legacy: { + referer: 'https://www.bridgewell.com/', + } } } const request = spec.buildRequests(bidRequests, bidderRequest); @@ -164,7 +167,10 @@ describe('bridgewellBidAdapter', function () { it('should attach valid params to the tag, part2', function() { const bidderRequest = { refererInfo: { - referer: 'https://www.bridgewell.com/' + page: 'https://www.bridgewell.com/', + legacy: { + referer: 'https://www.bridgewell.com/' + } } } const bidRequests2 = [ @@ -206,7 +212,10 @@ describe('bridgewellBidAdapter', function () { it('should attach validBidRequests to the tag', function () { const bidderRequest = { refererInfo: { - referer: 'https://www.bridgewell.com/' + page: 'https://www.bridgewell.com/', + legacy: { + referer: 'https://www.bridgewell.com/', + } } } diff --git a/test/spec/modules/brightcomBidAdapter_spec.js b/test/spec/modules/brightcomBidAdapter_spec.js index b7d52c9f7d5..9354544ee5a 100644 --- a/test/spec/modules/brightcomBidAdapter_spec.js +++ b/test/spec/modules/brightcomBidAdapter_spec.js @@ -153,7 +153,8 @@ describe('brightcomBidAdapter', function() { gdprApplies: true }, refererInfo: { - referer: 'http://example.com/page.html', + page: 'http://example.com/page.html', + domain: 'example.com', } }; bidderRequest.bids = bidRequests; diff --git a/test/spec/modules/cleanmedianetBidAdapter_spec.js b/test/spec/modules/cleanmedianetBidAdapter_spec.js index c2eea6f32d7..8c2ac34350b 100644 --- a/test/spec/modules/cleanmedianetBidAdapter_spec.js +++ b/test/spec/modules/cleanmedianetBidAdapter_spec.js @@ -85,7 +85,7 @@ describe('CleanmedianetAdapter', function () { }, sizes: [[300, 250], [300, 600]], transactionId: 'a123456789', - refererInfo: { referer: 'https://examplereferer.com' }, + refererInfo: { referer: 'https://examplereferer.com', domain: 'examplereferer.com' }, gdprConsent: { consentString: 'some string', gdprApplies: true @@ -114,11 +114,16 @@ describe('CleanmedianetAdapter', function () { it('builds request correctly', function() { let bidRequest2 = utils.deepClone(bidRequest); - bidRequest2.refererInfo.referer = 'https://www.test.com/page.html'; + Object.assign(bidRequest2.refererInfo, { + page: 'https://www.test.com/page.html', + domain: 'test.com', + ref: 'https://referer.com' + }) + let response = spec.buildRequests([bidRequest], bidRequest2)[0]; - expect(response.data.site.domain).to.equal('www.test.com'); + expect(response.data.site.domain).to.equal('test.com'); expect(response.data.site.page).to.equal('https://www.test.com/page.html'); - expect(response.data.site.ref).to.equal('https://www.test.com/page.html'); + expect(response.data.site.ref).to.equal('https://referer.com'); expect(response.data.imp.length).to.equal(1); expect(response.data.imp[0].id).to.equal(bidRequest.transactionId); expect(response.data.imp[0].instl).to.equal(0); diff --git a/test/spec/modules/codefuelBidAdapter_spec.js b/test/spec/modules/codefuelBidAdapter_spec.js index a2549012d84..354cbe63ffa 100644 --- a/test/spec/modules/codefuelBidAdapter_spec.js +++ b/test/spec/modules/codefuelBidAdapter_spec.js @@ -139,7 +139,8 @@ describe('Codefuel Adapter', function () { timeout: 500, auctionId: '12043683-3254-4f74-8934-f941b085579e', refererInfo: { - referer: 'https://example.com/', + page: 'https://example.com/', + domain: 'example.com' } } diff --git a/test/spec/modules/concertBidAdapter_spec.js b/test/spec/modules/concertBidAdapter_spec.js index 50527c60b85..2f9eda0ca7c 100644 --- a/test/spec/modules/concertBidAdapter_spec.js +++ b/test/spec/modules/concertBidAdapter_spec.js @@ -33,7 +33,7 @@ describe('ConcertAdapter', function () { bidRequest = { refererInfo: { - referer: 'https://www.google.com' + page: 'https://www.google.com' }, uspConsent: '1YYY', gdprConsent: {} diff --git a/test/spec/modules/connectadBidAdapter_spec.js b/test/spec/modules/connectadBidAdapter_spec.js index 657bc432d06..7a70c4bacdb 100644 --- a/test/spec/modules/connectadBidAdapter_spec.js +++ b/test/spec/modules/connectadBidAdapter_spec.js @@ -255,14 +255,17 @@ describe('ConnectAd Adapter', function () { const bidRequest = Object.assign({}, bidRequests[0]) const bidderRequ = { refererInfo: { - referer: 'https://connectad.io/page.html', - reachedTop: true, - numIframes: 2, - stack: [ - 'https://connectad.io/page.html', - 'https://connectad.io/iframe1.html', - 'https://connectad.io/iframe2.html' - ] + page: 'https://connectad.io/page.html', + legacy: { + referer: 'https://connectad.io/page.html', + reachedTop: true, + numIframes: 2, + stack: [ + 'https://connectad.io/page.html', + 'https://connectad.io/iframe1.html', + 'https://connectad.io/iframe2.html' + ] + } } } const request = spec.buildRequests([bidRequest], bidderRequ); diff --git a/test/spec/modules/conversantBidAdapter_spec.js b/test/spec/modules/conversantBidAdapter_spec.js index 82569e0d49c..c63dc8f9c3b 100644 --- a/test/spec/modules/conversantBidAdapter_spec.js +++ b/test/spec/modules/conversantBidAdapter_spec.js @@ -254,7 +254,7 @@ describe('Conversant adapter tests', function() { const page = 'http://test.com?a=b&c=123'; const bidderRequest = { refererInfo: { - referer: page + page: page } }; const request = spec.buildRequests(bidRequests, bidderRequest); @@ -393,7 +393,7 @@ describe('Conversant adapter tests', function() { it('Verify first party data', () => { const bidderRequest = { - refererInfo: {referer: 'http://test.com?a=b&c=123'}, + refererInfo: {page: 'http://test.com?a=b&c=123'}, ortb2: {site: {content: {series: 'MySeries', season: 'MySeason', episode: 3, title: 'MyTitle'}}} }; const request = spec.buildRequests(bidRequests, bidderRequest); @@ -406,7 +406,7 @@ describe('Conversant adapter tests', function() { }); it('Verify supply chain data', () => { - const bidderRequest = {refererInfo: {referer: 'http://test.com?a=b&c=123'}}; + const bidderRequest = {refererInfo: {page: 'http://test.com?a=b&c=123'}}; const schain = {complete: 1, ver: '1.0', nodes: [{asi: 'bidderA.com', sid: '00001', hp: 1}]}; const bidsWithSchain = bidRequests.map((bid) => { return Object.assign({ diff --git a/test/spec/modules/cpmstarBidAdapter_spec.js b/test/spec/modules/cpmstarBidAdapter_spec.js index 285fca9690a..dd076d060b9 100755 --- a/test/spec/modules/cpmstarBidAdapter_spec.js +++ b/test/spec/modules/cpmstarBidAdapter_spec.js @@ -14,7 +14,7 @@ const valid_bid_requests = [{ const bidderRequest = { refererInfo: { - referer: 'referer', + page: 'referer', reachedTop: false, } }; diff --git a/test/spec/modules/craftBidAdapter_spec.js b/test/spec/modules/craftBidAdapter_spec.js index 00adc3c68d8..dfdbebde738 100644 --- a/test/spec/modules/craftBidAdapter_spec.js +++ b/test/spec/modules/craftBidAdapter_spec.js @@ -91,7 +91,7 @@ describe('craftAdapter', function () { }]; let bidderRequest = { refererInfo: { - referer: 'https://www.gacraft.jp/publish/craft-prebid-example.html' + topmostLocation: 'https://www.gacraft.jp/publish/craft-prebid-example.html' } }; it('sends bid request to ENDPOINT via POST', function () { diff --git a/test/spec/modules/criteoBidAdapter_spec.js b/test/spec/modules/criteoBidAdapter_spec.js index 345777006c2..a271aea9396 100755 --- a/test/spec/modules/criteoBidAdapter_spec.js +++ b/test/spec/modules/criteoBidAdapter_spec.js @@ -410,7 +410,8 @@ describe('The Criteo bidding adapter', function () { const refererUrl = 'https://criteo.com?pbt_debug=1&pbt_nolog=1'; const bidderRequest = { refererInfo: { - referer: refererUrl + page: refererUrl, + topmostLocation: refererUrl }, timeout: 3000, gdprConsent: { @@ -559,7 +560,8 @@ describe('The Criteo bidding adapter', function () { it('should properly build a networkId request', function () { const bidderRequest = { refererInfo: { - referer: refererUrl + page: refererUrl, + topmostLocation: refererUrl, }, timeout: 3000, gdprConsent: { @@ -606,7 +608,8 @@ describe('The Criteo bidding adapter', function () { it('should properly build a mixed request', function () { const bidderRequest = { refererInfo: { - referer: refererUrl + page: refererUrl, + topmostLocation: refererUrl, }, timeout: 3000 }; diff --git a/test/spec/modules/deltaprojectsBidAdapter_spec.js b/test/spec/modules/deltaprojectsBidAdapter_spec.js index 382415eab62..b966d1580ca 100644 --- a/test/spec/modules/deltaprojectsBidAdapter_spec.js +++ b/test/spec/modules/deltaprojectsBidAdapter_spec.js @@ -7,6 +7,7 @@ import { } from 'modules/deltaprojectsBidAdapter.js'; const BID_REQ_REFER = 'http://example.com/page?param=val'; +const BID_REQ_DOMAIN = 'example.com' describe('deltaprojectsBidAdapter', function() { describe('isBidRequestValid', function () { @@ -62,7 +63,7 @@ describe('deltaprojectsBidAdapter', function() { auctionId: '1d1a030790a475', } const bidRequests = [BIDREQ]; - const bannerRequest = spec.buildRequests(bidRequests, {refererInfo: { referer: BID_REQ_REFER }})[0]; + const bannerRequest = spec.buildRequests(bidRequests, {refererInfo: { page: BID_REQ_REFER, domain: BID_REQ_DOMAIN }})[0]; const bannerRequestBody = bannerRequest.data; it('send bid request with test tag if it is set in the param', function () { diff --git a/test/spec/modules/emx_digitalBidAdapter_spec.js b/test/spec/modules/emx_digitalBidAdapter_spec.js index 043a8a3709e..d99318b5ddc 100644 --- a/test/spec/modules/emx_digitalBidAdapter_spec.js +++ b/test/spec/modules/emx_digitalBidAdapter_spec.js @@ -211,7 +211,9 @@ describe('emx_digital Adapter', function () { 'refererInfo': { 'numIframes': 0, 'reachedTop': true, - 'referer': 'https://example.com/index.html?pbjs_debug=true' + 'page': 'https://example.com/index.html?pbjs_debug=true', + 'domain': 'example.com', + 'ref': 'https://referrer.com' }, 'bids': [{ 'bidder': 'emx_digital', @@ -304,7 +306,7 @@ describe('emx_digital Adapter', function () { request = JSON.parse(request.data); expect(request.site).to.have.property('domain', 'example.com'); expect(request.site).to.have.property('page', 'https://example.com/index.html?pbjs_debug=true'); - expect(request.site).to.have.property('ref', window.top.document.referrer); + expect(request.site).to.have.property('ref', 'https://referrer.com'); }); it('builds correctly formatted request banner object', function () { diff --git a/test/spec/modules/enrichmentFpdModule_spec.js b/test/spec/modules/enrichmentFpdModule_spec.js index 41340372d4e..7d7e463c015 100644 --- a/test/spec/modules/enrichmentFpdModule_spec.js +++ b/test/spec/modules/enrichmentFpdModule_spec.js @@ -54,9 +54,10 @@ describe('the first party data enrichment module', function() { let validated = processFpd({}, {}).global; - expect(validated.site.ref).to.equal(getRefererInfo().referer); - expect(validated.site.page).to.be.undefined; - expect(validated.site.domain).to.be.undefined; + const {ref, page, domain} = getRefererInfo(); + expect(validated.site.ref).to.equal(ref || undefined); + expect(validated.site.page).to.equal(page || undefined) + expect(validated.site.domain).to.equal(domain || undefined) expect(validated.device).to.deep.equal({ w: 800, h: 500 }); expect(validated.site.keywords).to.be.undefined; }); @@ -68,7 +69,7 @@ describe('the first party data enrichment module', function() { let validated = processFpd({}, {}).global; - expect(validated.site.ref).to.equal(getRefererInfo().referer); + expect(validated.site.ref).to.equal(getRefererInfo().ref || undefined); expect(validated.site.page).to.equal('https://www.subdomain.domain.co.uk/path?query=12345'); expect(validated.site.domain).to.equal('subdomain.domain.co.uk'); expect(validated.site.publisher.domain).to.equal('domain.co.uk'); @@ -83,10 +84,6 @@ describe('the first party data enrichment module', function() { let validated = processFpd({}, {}).global; - expect(validated.site.ref).to.equal(getRefererInfo().referer); - expect(validated.site.page).to.be.undefined; - expect(validated.site.domain).to.be.undefined; - expect(validated.device).to.deep.equal({ w: 800, h: 500 }); expect(validated.site.keywords).to.equal('value1,value2,value3'); }); @@ -98,7 +95,6 @@ describe('the first party data enrichment module', function() { expect(validated.site.ref).to.equal('https://someUrl.com'); expect(validated.site.page).to.equal('test.com'); - expect(validated.site.domain).to.be.undefined; expect(validated.device).to.deep.equal({ w: 1200, h: 700 }); expect(validated.site.keywords).to.be.undefined; }); diff --git a/test/spec/modules/eplanningBidAdapter_spec.js b/test/spec/modules/eplanningBidAdapter_spec.js index e2d38d3b016..52d2fb76115 100644 --- a/test/spec/modules/eplanningBidAdapter_spec.js +++ b/test/spec/modules/eplanningBidAdapter_spec.js @@ -293,7 +293,9 @@ describe('E-Planning Adapter', function () { const refererUrl = 'https://localhost'; const bidderRequest = { refererInfo: { - referer: refererUrl + page: refererUrl, + domain: 'localhost', + ref: refererUrl, }, gdprConsent: { gdprApplies: 1, @@ -473,7 +475,7 @@ describe('E-Planning Adapter', function () { it('should return ur parameter with current window url', function () { const ur = spec.buildRequests(bidRequests, bidderRequest).data.ur; - expect(ur).to.equal(bidderRequest.refererInfo.referer); + expect(ur).to.equal(bidderRequest.refererInfo.page); }); it('should return fr parameter when there is a referrer', function () { diff --git a/test/spec/modules/fabrickIdSystem_spec.js b/test/spec/modules/fabrickIdSystem_spec.js index c250c8e5e8b..4f3ed55ec03 100644 --- a/test/spec/modules/fabrickIdSystem_spec.js +++ b/test/spec/modules/fabrickIdSystem_spec.js @@ -53,7 +53,7 @@ describe('Fabrick ID System', function() { } let configParams = Object.assign({}, defaultConfigParams, { refererInfo: { - referer: r, + topmostLocation: r, stack: ['s-0'], canonicalUrl: 'cu-0' } @@ -81,7 +81,7 @@ describe('Fabrick ID System', function() { it('should complete successfully', function() { let configParams = Object.assign({}, defaultConfigParams, { refererInfo: { - referer: 'r-0', + topmostLocation: 'r-0', stack: ['s-0'], canonicalUrl: 'cu-0' } diff --git a/test/spec/modules/feedadBidAdapter_spec.js b/test/spec/modules/feedadBidAdapter_spec.js index 2739654eb5d..fc26d9bc0cf 100644 --- a/test/spec/modules/feedadBidAdapter_spec.js +++ b/test/spec/modules/feedadBidAdapter_spec.js @@ -108,7 +108,7 @@ describe('FeedAdAdapter', function () { describe('buildRequests', function () { const bidderRequest = { refererInfo: { - referer: 'the referer' + page: 'the referer' }, some: 'thing' }; @@ -332,7 +332,7 @@ describe('FeedAdAdapter', function () { const referer = 'the referer'; const bidderRequest = { refererInfo: { - referer: referer + page: referer }, some: 'thing' }; diff --git a/test/spec/modules/fpdModule_spec.js b/test/spec/modules/fpdModule_spec.js index 4c80a8bb692..cedfd22a5d7 100644 --- a/test/spec/modules/fpdModule_spec.js +++ b/test/spec/modules/fpdModule_spec.js @@ -51,63 +51,6 @@ describe('the first party data module', function () { keywords.name = 'keywords'; }); - it('sets default referer and dimension values to ortb2 data', function () { - registerSubmodules(enrichments); - registerSubmodules(validations); - - let validated; - - width = 1120; - height = 750; - - ({global: validated} = processFpd()); - - expect(validated.site.ref).to.equal(getRefererInfo().referer); - expect(validated.site.page).to.be.undefined; - expect(validated.site.domain).to.be.undefined; - expect(validated.device).to.deep.equal({w: 1120, h: 750}); - expect(validated.site.keywords).to.be.undefined; - }); - - it('sets page and domain values to ortb2 data if canonical link exists', function () { - let validated; - - canonical.href = 'https://www.domain.com/path?query=12345'; - - ({global: validated} = processFpd()); - expect(validated.site.ref).to.equal(getRefererInfo().referer); - expect(validated.site.page).to.equal('https://www.domain.com/path?query=12345'); - expect(validated.site.domain).to.equal('domain.com'); - expect(validated.device).to.deep.to.equal({w: 1120, h: 750}); - expect(validated.site.keywords).to.be.undefined; - }); - - it('sets keyword values to ortb2 data if keywords meta exists', function () { - let validated; - - keywords.content = 'value1,value2,value3'; - - ({global: validated} = processFpd()); - expect(validated.site.ref).to.equal(getRefererInfo().referer); - expect(validated.site.page).to.be.undefined; - expect(validated.site.domain).to.be.undefined; - expect(validated.device).to.deep.to.equal({w: 1120, h: 750}); - expect(validated.site.keywords).to.equal('value1,value2,value3'); - }); - - it('only sets values that do not exist in ortb2 config', function () { - let validated; - - const global = {site: {ref: 'https://testpage.com', domain: 'newDomain.com'}}; - - ({global: validated} = processFpd({global})); - expect(validated.site.ref).to.equal('https://testpage.com'); - expect(validated.site.page).to.be.undefined; - expect(validated.site.domain).to.equal('newDomain.com'); - expect(validated.device).to.deep.to.equal({w: 1120, h: 750}); - expect(validated.site.keywords).to.be.undefined; - }); - it('filters ortb2 data that is set', function () { let validated; const global = { @@ -144,7 +87,7 @@ describe('the first party data module', function () { height = 750; ({global: validated} = processFpd({global})); - expect(validated.site.ref).to.equal(getRefererInfo().referer); + expect(validated.site.ref).to.equal(getRefererInfo().ref || undefined); expect(validated.site.page).to.equal('https://www.domain.com/path?query=12345'); expect(validated.site.domain).to.equal('domain.com'); expect(validated.site.content.data).to.deep.equal([{segment: [{id: 'test'}], name: 'bar'}]); diff --git a/test/spec/modules/gamoshiBidAdapter_spec.js b/test/spec/modules/gamoshiBidAdapter_spec.js index 8d63a32ef4d..8f8e3f03736 100644 --- a/test/spec/modules/gamoshiBidAdapter_spec.js +++ b/test/spec/modules/gamoshiBidAdapter_spec.js @@ -201,10 +201,6 @@ describe('GamoshiAdapter', () => { it('check if you are in the top frame', () => { expect(helper.getTopFrame()).to.equal(0); }); - - it('verify domain parsing', () => { - expect(helper.getTopWindowDomain('http://www.domain.com')).to.equal('www.domain.com'); - }); }); describe('Is String start with search', () => { @@ -323,12 +319,16 @@ describe('GamoshiAdapter', () => { it('builds request correctly', () => { let bidRequest2 = utils.deepClone(bidRequest); - bidRequest2.refererInfo.referer = 'http://www.test.com/page.html'; + Object.assign(bidRequest2.refererInfo, { + page: 'http://www.test.com/page.html', + domain: 'www.test.com', + ref: 'http://referrer.com' + }) let response = spec.buildRequests([bidRequest], bidRequest2)[0]; expect(response.data.site.domain).to.equal('www.test.com'); expect(response.data.site.page).to.equal('http://www.test.com/page.html'); - expect(response.data.site.ref).to.equal('http://www.test.com/page.html'); + expect(response.data.site.ref).to.equal('http://referrer.com'); expect(response.data.imp.length).to.equal(1); expect(response.data.imp[0].id).to.equal(bidRequest.transactionId); expect(response.data.imp[0].instl).to.equal(0); diff --git a/test/spec/modules/glimpseBidAdapter_spec.js b/test/spec/modules/glimpseBidAdapter_spec.js index 72d9d230e9e..353e61c7859 100644 --- a/test/spec/modules/glimpseBidAdapter_spec.js +++ b/test/spec/modules/glimpseBidAdapter_spec.js @@ -36,7 +36,7 @@ const mock = { refererInfo: { numIframes: 0, reachedTop: true, - referer: 'https://demo.glimpseprotocol.io/prebid/desktop', + page: 'https://demo.glimpseprotocol.io/prebid/desktop', stack: ['https://demo.glimpseprotocol.io/prebid/desktop'], }, }, @@ -167,7 +167,7 @@ describe('GlimpseProtocolAdapter', () => { it('Has referer information', () => { const request = spec.buildRequests(bidRequests, bidderRequest); const payload = JSON.parse(request.data); - const expected = mock.bidderRequest.refererInfo.referer; + const expected = mock.bidderRequest.refererInfo.page; expect(payload.data.referer).to.equal(expected); }); diff --git a/test/spec/modules/glomexBidAdapter_spec.js b/test/spec/modules/glomexBidAdapter_spec.js index 6e5765c31f5..30157da858b 100644 --- a/test/spec/modules/glomexBidAdapter_spec.js +++ b/test/spec/modules/glomexBidAdapter_spec.js @@ -21,7 +21,7 @@ const BIDDER_REQUEST = { isAmp: true, numIframes: 0, reachedTop: true, - referer: 'https://glomex.com' + topmostLocation: 'https://glomex.com' }, gdprConsent: { gdprApplies: true, @@ -91,7 +91,12 @@ describe('glomexBidAdapter', function () { }) it('sends refererInfo', function () { - expect(request.data.refererInfo).to.eql(BIDDER_REQUEST.refererInfo) + const expected = { + ...BIDDER_REQUEST.refererInfo, + referer: BIDDER_REQUEST.refererInfo.topmostLocation + } + delete expected.topmostLocation; + expect(request.data.refererInfo).to.eql(expected) }) it('sends gdprConsent', function () { diff --git a/test/spec/modules/gmosspBidAdapter_spec.js b/test/spec/modules/gmosspBidAdapter_spec.js index 87c87600b97..6d290504194 100644 --- a/test/spec/modules/gmosspBidAdapter_spec.js +++ b/test/spec/modules/gmosspBidAdapter_spec.js @@ -62,7 +62,7 @@ describe('GmosspAdapter', function () { it('sends bid request to ENDPOINT via GET', function () { const bidderRequest = { refererInfo: { - referer: 'https://hoge.com' + topmostLocation: 'https://hoge.com' } }; const requests = spec.buildRequests(bidRequests, bidderRequest); @@ -74,7 +74,7 @@ describe('GmosspAdapter', function () { it('should use fallback if refererInfo.referer in bid request is empty and im_uid ,shared_id, idl_env cookie is empty', function () { const bidderRequest = { refererInfo: { - referer: '' + topmostLocation: '' }, }; bidRequests[0].userId.imuid = ''; diff --git a/test/spec/modules/gnetBidAdapter_spec.js b/test/spec/modules/gnetBidAdapter_spec.js index a69b196bc5c..21526aba201 100644 --- a/test/spec/modules/gnetBidAdapter_spec.js +++ b/test/spec/modules/gnetBidAdapter_spec.js @@ -69,7 +69,7 @@ describe('gnetAdapter', function () { const bidderRequest = { refererInfo: { - referer: 'https://gnetrtb.com' + page: 'https://gnetrtb.com' } }; diff --git a/test/spec/modules/goldbachBidAdapter_spec.js b/test/spec/modules/goldbachBidAdapter_spec.js index b5e5c596d0c..fc2c1beb900 100644 --- a/test/spec/modules/goldbachBidAdapter_spec.js +++ b/test/spec/modules/goldbachBidAdapter_spec.js @@ -802,7 +802,7 @@ describe('GoldbachXandrAdapter', function () { const bidRequest = Object.assign({}, bidRequests[0]) const bidderRequest = { refererInfo: { - referer: 'https://example.com/page.html', + topmostLocation: 'https://example.com/page.html', reachedTop: true, numIframes: 2, stack: [ diff --git a/test/spec/modules/gridBidAdapter_spec.js b/test/spec/modules/gridBidAdapter_spec.js index 68bfaade44f..94524e07fb3 100644 --- a/test/spec/modules/gridBidAdapter_spec.js +++ b/test/spec/modules/gridBidAdapter_spec.js @@ -44,12 +44,12 @@ describe('TheMediaGrid Adapter', function () { return JSON.parse(data); } const bidderRequest = { - refererInfo: {referer: 'https://example.com'}, + refererInfo: {page: 'https://example.com'}, bidderRequestId: '22edbae2733bf6', auctionId: '9e2dfbfe-00c7-4f5e-9850-4044df3229c7', timeout: 3000 }; - const referrer = encodeURIComponent(bidderRequest.refererInfo.referer); + const referrer = encodeURIComponent(bidderRequest.refererInfo.page); let bidRequests = [ { 'bidder': 'grid', @@ -744,12 +744,12 @@ describe('TheMediaGrid Adapter', function () { 'auctionId': 654645, }; const bidderRequestWithNumId = { - refererInfo: {referer: 'https://example.com'}, + refererInfo: {page: 'https://example.com'}, bidderRequestId: 345345345, auctionId: 654645, timeout: 3000 }; - const parsedReferrer = encodeURIComponent(bidderRequestWithNumId.refererInfo.referer); + const parsedReferrer = encodeURIComponent(bidderRequestWithNumId.refererInfo.page); const request = spec.buildRequests([bidRequestWithNumId], bidderRequestWithNumId); expect(request.data).to.be.an('string'); const payload = parseRequest(request.data); diff --git a/test/spec/modules/gridNMBidAdapter_spec.js b/test/spec/modules/gridNMBidAdapter_spec.js index 89efe942c1f..c09aca07cc3 100644 --- a/test/spec/modules/gridNMBidAdapter_spec.js +++ b/test/spec/modules/gridNMBidAdapter_spec.js @@ -184,9 +184,9 @@ describe('TheMediaGridNM Adapter', function () { bidderRequestId: '22edbae2733bf6', auctionId: '1d1a030790a475', timeout: 3000, - refererInfo: { referer: 'https://example.com' } + refererInfo: { page: 'https://example.com' } }; - const referrer = encodeURIComponent(bidderRequest.refererInfo.referer); + const referrer = encodeURIComponent(bidderRequest.refererInfo.page); let bidRequests = [ { 'bidder': 'gridNM', diff --git a/test/spec/modules/gumgumBidAdapter_spec.js b/test/spec/modules/gumgumBidAdapter_spec.js index ebbc1c230f1..1a2641e5133 100644 --- a/test/spec/modules/gumgumBidAdapter_spec.js +++ b/test/spec/modules/gumgumBidAdapter_spec.js @@ -546,7 +546,7 @@ describe('gumgumAdapter', function () { }); it('should handle no gg params', function () { - const bidRequest = spec.buildRequests(bidRequests, { refererInfo: { referer: 'https://www.prebid.org/?param1=foo¶m2=bar¶m3=baz' } })[0]; + const bidRequest = spec.buildRequests(bidRequests, { refererInfo: { page: 'https://www.prebid.org/?param1=foo¶m2=bar¶m3=baz' } })[0]; // no params are in object expect(bidRequest.data.hasOwnProperty('eAdBuyId')).to.be.false; @@ -555,7 +555,7 @@ describe('gumgumAdapter', function () { }); it('should handle encrypted ad buy id', function () { - const bidRequest = spec.buildRequests(bidRequests, { refererInfo: { referer: 'https://www.prebid.org/?param1=foo&ggad=bar¶m3=baz' } })[0]; + const bidRequest = spec.buildRequests(bidRequests, { refererInfo: { page: 'https://www.prebid.org/?param1=foo&ggad=bar¶m3=baz' } })[0]; // correct params are in object expect(bidRequest.data.hasOwnProperty('eAdBuyId')).to.be.true; @@ -567,7 +567,7 @@ describe('gumgumAdapter', function () { }); it('should handle unencrypted ad buy id', function () { - const bidRequest = spec.buildRequests(bidRequests, { refererInfo: { referer: 'https://www.prebid.org/?param1=foo&ggad=123¶m3=baz' } })[0]; + const bidRequest = spec.buildRequests(bidRequests, { refererInfo: { page: 'https://www.prebid.org/?param1=foo&ggad=123¶m3=baz' } })[0]; // correct params are in object expect(bidRequest.data.hasOwnProperty('eAdBuyId')).to.be.false; @@ -579,7 +579,7 @@ describe('gumgumAdapter', function () { }); it('should handle multiple gg params', function () { - const bidRequest = spec.buildRequests(bidRequests, { refererInfo: { referer: 'https://www.prebid.org/?ggdeal=foo&ggad=bar¶m3=baz' } })[0]; + const bidRequest = spec.buildRequests(bidRequests, { refererInfo: { page: 'https://www.prebid.org/?ggdeal=foo&ggad=bar¶m3=baz' } })[0]; // correct params are in object expect(bidRequest.data.hasOwnProperty('eAdBuyId')).to.be.true; diff --git a/test/spec/modules/hybridBidAdapter_spec.js b/test/spec/modules/hybridBidAdapter_spec.js index ffbc27293fb..6c98264c06f 100644 --- a/test/spec/modules/hybridBidAdapter_spec.js +++ b/test/spec/modules/hybridBidAdapter_spec.js @@ -15,7 +15,7 @@ function getSlotConfigs(mediaTypes, params) { describe('Hybrid.ai Adapter', function() { const PLACE_ID = '5af45ad34d506ee7acad0c26'; const bidderRequest = { - refererInfo: { referer: 'referer' } + refererInfo: { page: 'referer' } } const bannerMandatoryParams = { placeId: PLACE_ID, diff --git a/test/spec/modules/improvedigitalBidAdapter_spec.js b/test/spec/modules/improvedigitalBidAdapter_spec.js index c3c77cd5853..b44859f73a0 100644 --- a/test/spec/modules/improvedigitalBidAdapter_spec.js +++ b/test/spec/modules/improvedigitalBidAdapter_spec.js @@ -141,7 +141,8 @@ describe('Improve Digital Adapter Tests', function () { const bidderRequestReferrer = { bids: [simpleBidRequest], refererInfo: { - referer: 'https://blah.com/test.html', + page: 'https://blah.com/test.html', + domain: 'blah.com' }, }; @@ -742,22 +743,6 @@ describe('Improve Digital Adapter Tests', function () { expect(payload.site.domain).does.exist.and.equal('blah.com'); }); - it('should set pageUrl as site param', function () { - getConfigStub = sinon.stub(config, 'getConfig'); - getConfigStub.withArgs('pageUrl').returns('https://improvidigital.com/test-page'); - let request = spec.buildRequests([simpleBidRequest], bidderRequestReferrer)[0]; - let payload = JSON.parse(request.data); - expect(payload.site.page).does.exist.and.equal('https://improvidigital.com/test-page'); - expect(payload.site.domain).does.exist.and.equal('improvidigital.com'); - getConfigStub.reset(); - - getConfigStub.withArgs('pageUrl').returns(undefined); - request = spec.buildRequests([simpleBidRequest], bidderRequestReferrer)[0]; - payload = JSON.parse(request.data); - expect(payload.site.page).does.exist.and.equal('https://blah.com/test.html'); - expect(payload.site.domain).does.exist.and.equal('blah.com'); - }); - it('should set site when app not available', function () { getConfigStub = sinon.stub(config, 'getConfig'); getConfigStub.withArgs('app').returns(undefined); diff --git a/test/spec/modules/incrxBidAdapter_spec.js b/test/spec/modules/incrxBidAdapter_spec.js index da90cf181f3..8fb95742766 100644 --- a/test/spec/modules/incrxBidAdapter_spec.js +++ b/test/spec/modules/incrxBidAdapter_spec.js @@ -35,7 +35,7 @@ describe('IncrementX', function () { describe('buildRequests', function () { let bidderRequest = { refererInfo: { - referer: 'https://www.test.com', + page: 'https://www.test.com', reachedTop: true, isAmp: false, numIframes: 0, diff --git a/test/spec/modules/inmarBidAdapter_spec.js b/test/spec/modules/inmarBidAdapter_spec.js index 998fe20d369..d21fcbc377b 100644 --- a/test/spec/modules/inmarBidAdapter_spec.js +++ b/test/spec/modules/inmarBidAdapter_spec.js @@ -108,8 +108,10 @@ describe('Inmar adapter tests', function () { gdprApplies: true }, refererInfo: { - referer: 'https://domain.com', - numIframes: 0 + legacy: { + referer: 'https://domain.com', + numIframes: 0 + } } }); diff --git a/test/spec/modules/innityBidAdapter_spec.js b/test/spec/modules/innityBidAdapter_spec.js index d4a28ec2100..192ab4911ee 100644 --- a/test/spec/modules/innityBidAdapter_spec.js +++ b/test/spec/modules/innityBidAdapter_spec.js @@ -39,7 +39,7 @@ describe('innityAdapterTest', () => { let bidderRequest = { refererInfo: { - referer: 'https://refererExample.com' + page: 'https://refererExample.com' } }; diff --git a/test/spec/modules/insticatorBidAdapter_spec.js b/test/spec/modules/insticatorBidAdapter_spec.js index 211addaf626..e05033d67a6 100644 --- a/test/spec/modules/insticatorBidAdapter_spec.js +++ b/test/spec/modules/insticatorBidAdapter_spec.js @@ -81,7 +81,9 @@ describe('InsticatorBidAdapter', function () { refererInfo: { numIframes: 0, reachedTop: true, - referer: 'https://example.com', + page: 'https://example.com', + domain: 'example.com', + ref: 'https://referrer.com', stack: ['https://example.com'] }, }; @@ -236,7 +238,7 @@ describe('InsticatorBidAdapter', function () { expect(data.site).to.be.an('object'); expect(data.site.domain).not.to.be.empty; expect(data.site.page).not.to.be.empty; - expect(data.site.ref).to.equal(bidderRequest.refererInfo.referer); + expect(data.site.ref).to.equal(bidderRequest.refererInfo.ref); expect(data.device).to.be.an('object'); expect(data.device.w).to.equal(window.innerWidth); expect(data.device.h).to.equal(window.innerHeight); diff --git a/test/spec/modules/ipromBidAdapter_spec.js b/test/spec/modules/ipromBidAdapter_spec.js index a3310a33cc2..bb2f364bece 100644 --- a/test/spec/modules/ipromBidAdapter_spec.js +++ b/test/spec/modules/ipromBidAdapter_spec.js @@ -29,13 +29,15 @@ describe('iPROM Adapter', function () { bidderRequest = { timeout: 3000, refererInfo: { - referer: 'https://adserver.si/index.html', - reachedTop: true, - numIframes: 1, - stack: [ - 'https://adserver.si/index.html', - 'https://adserver.si/iframe1.html', - ] + legacy: { + referer: 'https://adserver.si/index.html', + reachedTop: true, + numIframes: 1, + stack: [ + 'https://adserver.si/index.html', + 'https://adserver.si/iframe1.html', + ] + } } } }); diff --git a/test/spec/modules/iqmBidAdapter_spec.js b/test/spec/modules/iqmBidAdapter_spec.js index 3ec2fb3c4be..2f8b5811b2f 100644 --- a/test/spec/modules/iqmBidAdapter_spec.js +++ b/test/spec/modules/iqmBidAdapter_spec.js @@ -116,7 +116,41 @@ describe('iqmAdapter', function () { bidderRequestsCount: 1, bidderWinsCount: 0}]; - let bidderRequest = {bidderCode: 'iqm', auctionId: '565ab569-ab95-40d6-8b42-b9707a92062f', bidderRequestId: '13c05d264c7ffe', bids: [{bidder: 'iqm', params: {publisherId: 'df5fd732-c5f3-11e7-abc4-cec278b6b50a', placementId: 23451, bidfloor: 0.5}, crumbs: {pubcid: 'a0f51f64-6d86-41d0-abaf-7ece71404d94'}, ortb2Imp: {ext: {data: {'pbadslot': '/19968336/header-bid-tag-0'}}}, mediaTypes: {banner: {sizes: [[300, 250]]}}, adUnitCode: '/19968336/header-bid-tag-0', transactionId: '56fe8d92-ff6e-4c34-90ad-2f743cd0eae8', sizes: [[300, 250]], bidId: '266d810da21904', bidderRequestId: '13c05d264c7ffe', auctionId: '565ab569-ab95-40d6-8b42-b9707a92062f', src: 'client', bidRequestsCount: 1, bidderRequestsCount: 1, bidderWinsCount: 0}], auctionStart: 1615205942159, timeout: 7000, refererInfo: {referer: 'http://test.localhost:9999/integrationExamples/gpt/hello_world.html', reachedTop: true, isAmp: false, numIframes: 0, stack: ['http://test.localhost:9999/integrationExamples/gpt/hello_world.html'], canonicalUrl: null}, start: 1615205942162}; + let bidderRequest = { + bidderCode: 'iqm', + auctionId: '565ab569-ab95-40d6-8b42-b9707a92062f', + bidderRequestId: '13c05d264c7ffe', + bids: [{ + bidder: 'iqm', + params: {publisherId: 'df5fd732-c5f3-11e7-abc4-cec278b6b50a', placementId: 23451, bidfloor: 0.5}, + crumbs: {pubcid: 'a0f51f64-6d86-41d0-abaf-7ece71404d94'}, + ortb2Imp: {ext: {data: {'pbadslot': '/19968336/header-bid-tag-0'}}}, + mediaTypes: {banner: {sizes: [[300, 250]]}}, + adUnitCode: '/19968336/header-bid-tag-0', + transactionId: '56fe8d92-ff6e-4c34-90ad-2f743cd0eae8', + sizes: [[300, 250]], + bidId: '266d810da21904', + bidderRequestId: '13c05d264c7ffe', + auctionId: '565ab569-ab95-40d6-8b42-b9707a92062f', + src: 'client', + bidRequestsCount: 1, + bidderRequestsCount: 1, + bidderWinsCount: 0 + }], + auctionStart: 1615205942159, + timeout: 7000, + refererInfo: { + page: 'http://test.localhost:9999/integrationExamples/gpt/hello_world.html', + domain: 'test.localhost.com:9999', + ref: null, + reachedTop: true, + isAmp: false, + numIframes: 0, + stack: ['http://test.localhost:9999/integrationExamples/gpt/hello_world.html'], + canonicalUrl: null + }, + start: 1615205942162 + }; it('should parse out sizes', function () { let temp = []; @@ -141,8 +175,80 @@ describe('iqmAdapter', function () { expect(request[0].method).to.equal('POST'); }); it('should attach valid video params to the tag', function () { - let validBidRequests_video = [{bidder: 'iqm', params: {publisherId: 'df5fd732-c5f3-11e7-abc4-cec278b6b50a', placementId: 23451, bidfloor: 0.5, video: {placement: 2, mimes: ['video/mp4'], protocols: [2, 5], skipppable: true, playback_method: ['auto_play_sound_off']}}, crumbs: {pubcid: '09b8f065-9d1b-4a36-bd0c-ea22e2dad807'}, ortb2Imp: {ext: {data: {'pbadslot': 'video1'}}}, mediaTypes: {video: {playerSize: [[640, 480]], context: 'instream'}}, adUnitCode: 'video1', transactionId: '86795c66-acf9-4dd5-998f-6d5362aaa541', sizes: [[640, 480]], bidId: '28bfb7e2d12897', bidderRequestId: '16e1ce8481bc6d', auctionId: '3140a2ec-d567-4db0-9bbb-eb6fa20ccb71', src: 'client', bidRequestsCount: 1, bidderRequestsCount: 1, bidderWinsCount: 0}]; - let bidderRequest_video = {bidderCode: 'iqm', auctionId: '3140a2ec-d567-4db0-9bbb-eb6fa20ccb71', bidderRequestId: '16e1ce8481bc6d', bids: [{bidder: 'iqm', params: {publisherId: 'df5fd732-c5f3-11e7-abc4-cec278b6b50a', placementId: 23451, bidfloor: 0.5, video: {placement: 2, mimes: ['video/mp4'], protocols: [2, 5], skipppable: true, playback_method: ['auto_play_sound_off']}}, crumbs: {pubcid: '09b8f065-9d1b-4a36-bd0c-ea22e2dad807'}, fpd: {context: {pbAdSlot: 'video1'}}, mediaTypes: {video: {playerSize: [[640, 480]], context: 'instream'}}, adUnitCode: 'video1', transactionId: '86795c66-acf9-4dd5-998f-6d5362aaa541', sizes: [[640, 480]], bidId: '28bfb7e2d12897', bidderRequestId: '16e1ce8481bc6d', auctionId: '3140a2ec-d567-4db0-9bbb-eb6fa20ccb71', src: 'client', bidRequestsCount: 1, bidderRequestsCount: 1, bidderWinsCount: 0}], auctionStart: 1615271191985, timeout: 3000, refererInfo: {referer: 'http://test.localhost:9999/integrationExamples/gpt/pbjs_video_adUnit.html', reachedTop: true, isAmp: false, numIframes: 0, stack: ['http://test.localhost:9999/integrationExamples/gpt/pbjs_video_adUnit.html'], canonicalUrl: null}, start: 1615271191988}; + let validBidRequests_video = [{ + bidder: 'iqm', + params: { + publisherId: 'df5fd732-c5f3-11e7-abc4-cec278b6b50a', + placementId: 23451, + bidfloor: 0.5, + video: { + placement: 2, + mimes: ['video/mp4'], + protocols: [2, 5], + skipppable: true, + playback_method: ['auto_play_sound_off'] + } + }, + crumbs: {pubcid: '09b8f065-9d1b-4a36-bd0c-ea22e2dad807'}, + ortb2Imp: {ext: {data: {'pbadslot': 'video1'}}}, + mediaTypes: {video: {playerSize: [[640, 480]], context: 'instream'}}, + adUnitCode: 'video1', + transactionId: '86795c66-acf9-4dd5-998f-6d5362aaa541', + sizes: [[640, 480]], + bidId: '28bfb7e2d12897', + bidderRequestId: '16e1ce8481bc6d', + auctionId: '3140a2ec-d567-4db0-9bbb-eb6fa20ccb71', + src: 'client', + bidRequestsCount: 1, + bidderRequestsCount: 1, + bidderWinsCount: 0 + }]; + let bidderRequest_video = { + bidderCode: 'iqm', + auctionId: '3140a2ec-d567-4db0-9bbb-eb6fa20ccb71', + bidderRequestId: '16e1ce8481bc6d', + bids: [{ + bidder: 'iqm', + params: { + publisherId: 'df5fd732-c5f3-11e7-abc4-cec278b6b50a', + placementId: 23451, + bidfloor: 0.5, + video: { + placement: 2, + mimes: ['video/mp4'], + protocols: [2, 5], + skipppable: true, + playback_method: ['auto_play_sound_off'] + } + }, + crumbs: {pubcid: '09b8f065-9d1b-4a36-bd0c-ea22e2dad807'}, + fpd: {context: {pbAdSlot: 'video1'}}, + mediaTypes: {video: {playerSize: [[640, 480]], context: 'instream'}}, + adUnitCode: 'video1', + transactionId: '86795c66-acf9-4dd5-998f-6d5362aaa541', + sizes: [[640, 480]], + bidId: '28bfb7e2d12897', + bidderRequestId: '16e1ce8481bc6d', + auctionId: '3140a2ec-d567-4db0-9bbb-eb6fa20ccb71', + src: 'client', + bidRequestsCount: 1, + bidderRequestsCount: 1, + bidderWinsCount: 0 + }], + auctionStart: 1615271191985, + timeout: 3000, + refererInfo: { + page: 'http://test.localhost:9999/integrationExamples/gpt/pbjs_video_adUnit.html', + domain: 'test.localhost.com:9999', + ref: null, + reachedTop: true, + isAmp: false, + numIframes: 0, + stack: ['http://test.localhost:9999/integrationExamples/gpt/pbjs_video_adUnit.html'], + canonicalUrl: null + }, + start: 1615271191988 + }; const request = spec.buildRequests(validBidRequests_video, bidderRequest_video); const payload = request[0].data; expect(payload.imp.id).to.exist; @@ -161,11 +267,13 @@ describe('iqmAdapter', function () { }); it('should add referer info to payload', function () { + // TODO: this is wrong on multiple levels + // The payload contains everything in `bidderRequest`; that is sometimes not even serializable + // this should not be testing the validity of internal Prebid structures const request = spec.buildRequests(validBidRequests, bidderRequest); const payload = request[0].data; expect(payload.bidderRequest.refererInfo).to.exist; - expect(payload.bidderRequest.refererInfo).to.deep.equal({referer: 'http://test.localhost:9999/integrationExamples/gpt/hello_world.html', reachedTop: true, isAmp: false, numIframes: 0, stack: ['http://test.localhost:9999/integrationExamples/gpt/hello_world.html'], canonicalUrl: null}); }); }) @@ -193,7 +301,41 @@ describe('iqmAdapter', function () { bidRequestsCount: 1, bidderRequestsCount: 1, bidderWinsCount: 0}]; - let bidderRequest = {bidderCode: 'iqm', auctionId: '565ab569-ab95-40d6-8b42-b9707a92062f', bidderRequestId: '13c05d264c7ffe', bids: [{bidder: 'iqm', params: {publisherId: 'df5fd732-c5f3-11e7-abc4-cec278b6b50a', placementId: 23451, bidfloor: 0.5}, crumbs: {pubcid: 'a0f51f64-6d86-41d0-abaf-7ece71404d94'}, ortb2Imp: {ext: {data: {'pbadslot': '/19968336/header-bid-tag-0'}}}, mediaTypes: {banner: {sizes: [[300, 250]]}}, adUnitCode: '/19968336/header-bid-tag-0', transactionId: '56fe8d92-ff6e-4c34-90ad-2f743cd0eae8', sizes: [[300, 250]], bidId: '266d810da21904', bidderRequestId: '13c05d264c7ffe', auctionId: '565ab569-ab95-40d6-8b42-b9707a92062f', src: 'client', bidRequestsCount: 1, bidderRequestsCount: 1, bidderWinsCount: 0}], auctionStart: 1615205942159, timeout: 7000, refererInfo: {referer: 'http://test.localhost:9999/integrationExamples/gpt/hello_world.html', reachedTop: true, isAmp: false, numIframes: 0, stack: ['http://test.localhost:9999/integrationExamples/gpt/hello_world.html'], canonicalUrl: null}, start: 1615205942162}; + let bidderRequest = { + bidderCode: 'iqm', + auctionId: '565ab569-ab95-40d6-8b42-b9707a92062f', + bidderRequestId: '13c05d264c7ffe', + bids: [{ + bidder: 'iqm', + params: {publisherId: 'df5fd732-c5f3-11e7-abc4-cec278b6b50a', placementId: 23451, bidfloor: 0.5}, + crumbs: {pubcid: 'a0f51f64-6d86-41d0-abaf-7ece71404d94'}, + ortb2Imp: {ext: {data: {'pbadslot': '/19968336/header-bid-tag-0'}}}, + mediaTypes: {banner: {sizes: [[300, 250]]}}, + adUnitCode: '/19968336/header-bid-tag-0', + transactionId: '56fe8d92-ff6e-4c34-90ad-2f743cd0eae8', + sizes: [[300, 250]], + bidId: '266d810da21904', + bidderRequestId: '13c05d264c7ffe', + auctionId: '565ab569-ab95-40d6-8b42-b9707a92062f', + src: 'client', + bidRequestsCount: 1, + bidderRequestsCount: 1, + bidderWinsCount: 0 + }], + auctionStart: 1615205942159, + timeout: 7000, + refererInfo: { + page: 'http://test.localhost:9999/integrationExamples/gpt/hello_world.html', + domain: 'test.localhost.com:9999', + ref: null, + reachedTop: true, + isAmp: false, + numIframes: 0, + stack: ['http://test.localhost:9999/integrationExamples/gpt/hello_world.html'], + canonicalUrl: null + }, + start: 1615205942162 + }; let response = { id: '5bdbab92aae961cfbdf7465d', @@ -213,7 +355,52 @@ describe('iqmAdapter', function () { let validBidRequests_temp_video = [{bidder: 'iqm', params: {publisherId: 'df5fd732-c5f3-11e7-abc4-cec278b6b50a', placementId: 23451, bidfloor: 0.5, video: {placement: 2, mimes: ['video/mp4'], protocols: [2, 5], skipppable: true, playback_method: ['auto_play_sound_off']}}, crumbs: {pubcid: 'cd86c3ff-d630-40e6-83ab-420e9e800594'}, fpd: {context: {pbAdSlot: 'video1'}}, mediaTypes: {video: {playerSize: [[640, 480]], context: 'instream'}}, adUnitCode: 'video1', transactionId: '8335b266-7a41-45f9-86a2-92fdc7cf0cd9', sizes: [[640, 480]], bidId: '26274beff25455', bidderRequestId: '17c5d8c3168761', auctionId: '2c592dcf-7dfc-4823-8203-dd1ebab77fe0', src: 'client', bidRequestsCount: 1, bidderRequestsCount: 1, bidderWinsCount: 0}]; - let bidderRequest_video = {bidderCode: 'iqm', auctionId: '3140a2ec-d567-4db0-9bbb-eb6fa20ccb71', bidderRequestId: '16e1ce8481bc6d', bids: [{bidder: 'iqm', params: {publisherId: 'df5fd732-c5f3-11e7-abc4-cec278b6b50a', placementId: 23451, bidfloor: 0.5, video: {placement: 2, mimes: ['video/mp4'], protocols: [2, 5], skipppable: true, playback_method: ['auto_play_sound_off']}}, crumbs: {pubcid: '09b8f065-9d1b-4a36-bd0c-ea22e2dad807'}, ortb2Imp: {ext: {data: {'pbadslot': 'video1'}}}, mediaTypes: {video: {playerSize: [[640, 480]], context: 'instream'}}, adUnitCode: 'video1', transactionId: '86795c66-acf9-4dd5-998f-6d5362aaa541', sizes: [[640, 480]], bidId: '28bfb7e2d12897', bidderRequestId: '16e1ce8481bc6d', auctionId: '3140a2ec-d567-4db0-9bbb-eb6fa20ccb71', src: 'client', bidRequestsCount: 1, bidderRequestsCount: 1, bidderWinsCount: 0}], auctionStart: 1615271191985, timeout: 3000, refererInfo: {referer: 'http://test.localhost:9999/integrationExamples/gpt/pbjs_video_adUnit.html', reachedTop: true, isAmp: false, numIframes: 0, stack: ['http://test.localhost:9999/integrationExamples/gpt/pbjs_video_adUnit.html'], canonicalUrl: null}, start: 1615271191988}; + let bidderRequest_video = { + bidderCode: 'iqm', + auctionId: '3140a2ec-d567-4db0-9bbb-eb6fa20ccb71', + bidderRequestId: '16e1ce8481bc6d', + bids: [{ + bidder: 'iqm', + params: { + publisherId: 'df5fd732-c5f3-11e7-abc4-cec278b6b50a', + placementId: 23451, + bidfloor: 0.5, + video: { + placement: 2, + mimes: ['video/mp4'], + protocols: [2, 5], + skipppable: true, + playback_method: ['auto_play_sound_off'] + } + }, + crumbs: {pubcid: '09b8f065-9d1b-4a36-bd0c-ea22e2dad807'}, + ortb2Imp: {ext: {data: {'pbadslot': 'video1'}}}, + mediaTypes: {video: {playerSize: [[640, 480]], context: 'instream'}}, + adUnitCode: 'video1', + transactionId: '86795c66-acf9-4dd5-998f-6d5362aaa541', + sizes: [[640, 480]], + bidId: '28bfb7e2d12897', + bidderRequestId: '16e1ce8481bc6d', + auctionId: '3140a2ec-d567-4db0-9bbb-eb6fa20ccb71', + src: 'client', + bidRequestsCount: 1, + bidderRequestsCount: 1, + bidderWinsCount: 0 + }], + auctionStart: 1615271191985, + timeout: 3000, + refererInfo: { + page: 'http://test.localhost:9999/integrationExamples/gpt/pbjs_video_adUnit.html', + domain: 'test.localhost.com:9999', + ref: '', + reachedTop: true, + isAmp: false, + numIframes: 0, + stack: ['http://test.localhost:9999/integrationExamples/gpt/pbjs_video_adUnit.html'], + canonicalUrl: null + }, + start: 1615271191988 + }; it('handles non-banner media responses', function () { let response = {id: '2341234', seatbid: [{bid: [{id: 'bid-2341234-1', impid: '1', price: 9, nurl: 'https://frontend.stage.iqm.com/static/vast-01.xml', adm: 'http://cdn.iqm.com/pbd?raw=312730_203cf73dc83fb_2824348636878_pbd', adomain: ['app1.stage.iqm.com'], cid: '168900', crid: 'cr-304503', attr: []}]}], bidid: '2341234'}; diff --git a/test/spec/modules/ixBidAdapter_spec.js b/test/spec/modules/ixBidAdapter_spec.js index d07ed120fd8..491a8f68c97 100644 --- a/test/spec/modules/ixBidAdapter_spec.js +++ b/test/spec/modules/ixBidAdapter_spec.js @@ -444,7 +444,7 @@ describe('IndexexchangeAdapter', function () { vendorData: {} }, refererInfo: { - referer: 'https://www.prebid.org', + page: 'https://www.prebid.org', canonicalUrl: 'https://www.prebid.org/the/link/to/the/page' } }; @@ -1422,7 +1422,7 @@ describe('IndexexchangeAdapter', function () { const payload = JSON.parse(query.r); expect(payload.id).to.equal(DEFAULT_BANNER_VALID_BID[0].bidderRequestId); expect(payload.id).to.be.a('string'); - expect(payload.site.page).to.equal(DEFAULT_OPTION.refererInfo.referer); + expect(payload.site.page).to.equal(DEFAULT_OPTION.refererInfo.page); expect(payload.site.ref).to.equal(document.referrer); expect(payload.ext.source).to.equal('prebid'); expect(payload.source.ext.schain).to.deep.equal(SAMPLE_SCHAIN); @@ -1430,14 +1430,6 @@ describe('IndexexchangeAdapter', function () { expect(payload.imp).to.have.lengthOf(1); }); - it('payload should set site.page to pageUrl when it exists in config object', function () { - const url = 'https://example.com/index.html'; - config.setConfig({ pageUrl: url }); - const request = spec.buildRequests(DEFAULT_BANNER_VALID_BID, DEFAULT_OPTION)[0].data; - const payload = JSON.parse(request.r); - expect(payload.site.page).to.contains(url); - }); - it('payload should have correct format and value for r.id when bidderRequestId is a number ', function () { const bidWithIntId = utils.deepClone(DEFAULT_BANNER_VALID_BID); bidWithIntId[0].bidderRequestId = 123456; @@ -1665,7 +1657,7 @@ describe('IndexexchangeAdapter', function () { const requestWithFirstPartyData = spec.buildRequests(DEFAULT_BANNER_VALID_BID, DEFAULT_OPTION)[0]; const pageUrl = JSON.parse(requestWithFirstPartyData.data.r).site.page; - const expectedPageUrl = DEFAULT_OPTION.refererInfo.referer + '?ab=123&cd=123%23ab&e%2Ff=456&h%3Fg=456%23cd'; + const expectedPageUrl = DEFAULT_OPTION.refererInfo.page + '?ab=123&cd=123%23ab&e%2Ff=456&h%3Fg=456%23cd'; expect(pageUrl).to.equal(expectedPageUrl); }); @@ -1679,7 +1671,7 @@ describe('IndexexchangeAdapter', function () { const requestFirstPartyDataNumber = spec.buildRequests(DEFAULT_BANNER_VALID_BID, DEFAULT_OPTION)[0]; const pageUrl = JSON.parse(requestFirstPartyDataNumber.data.r).site.page; - expect(pageUrl).to.equal(DEFAULT_OPTION.refererInfo.referer); + expect(pageUrl).to.equal(DEFAULT_OPTION.refererInfo.page); }); it('should not set first party or timeout if it is not present', function () { @@ -1690,7 +1682,7 @@ describe('IndexexchangeAdapter', function () { const requestWithoutConfig = spec.buildRequests(DEFAULT_BANNER_VALID_BID, DEFAULT_OPTION)[0]; const pageUrl = JSON.parse(requestWithoutConfig.data.r).site.page; - expect(pageUrl).to.equal(DEFAULT_OPTION.refererInfo.referer); + expect(pageUrl).to.equal(DEFAULT_OPTION.refererInfo.page); expect(requestWithoutConfig.data.t).to.be.undefined; }); @@ -1698,7 +1690,7 @@ describe('IndexexchangeAdapter', function () { const requestWithoutConfig = spec.buildRequests(DEFAULT_BANNER_VALID_BID, DEFAULT_OPTION)[0]; const pageUrl = JSON.parse(requestWithoutConfig.data.r).site.page; - expect(pageUrl).to.equal(DEFAULT_OPTION.refererInfo.referer); + expect(pageUrl).to.equal(DEFAULT_OPTION.refererInfo.page); expect(requestWithoutConfig.data.t).to.be.undefined; }); @@ -2521,7 +2513,7 @@ describe('IndexexchangeAdapter', function () { const validBidWithoutreferInfo = spec.buildRequests(DEFAULT_BANNER_VALID_BID, options); const requestWithoutreferInfo = JSON.parse(validBidWithoutreferInfo[0].data.r); - expect(requestWithoutreferInfo.site.page).to.equal(options.refererInfo.referer); + expect(requestWithoutreferInfo.site.page).to.equal(options.refererInfo.page); expect(validBidWithoutreferInfo[0].url).to.equal(IX_SECURE_ENDPOINT); }); diff --git a/test/spec/modules/koblerBidAdapter_spec.js b/test/spec/modules/koblerBidAdapter_spec.js index 8b45fead744..5bcf62ff95d 100644 --- a/test/spec/modules/koblerBidAdapter_spec.js +++ b/test/spec/modules/koblerBidAdapter_spec.js @@ -10,7 +10,7 @@ function createBidderRequest(auctionId, timeout, pageUrl) { auctionId: auctionId || 'c1243d83-0bed-4fdb-8c76-42b456be17d0', timeout: timeout || 2000, refererInfo: { - referer: pageUrl || 'example.com' + page: pageUrl || 'example.com' } }; } @@ -373,7 +373,7 @@ describe('KoblerAdapter', function () { const bidderRequest = { auctionId: 'c1243d83-0bed-4fdb-8c76-42b456be17d0', refererInfo: { - referer: 'example.com' + page: 'example.com' } }; config.setConfig({ @@ -729,12 +729,12 @@ describe('KoblerAdapter', function () { expect(utils.triggerPixel.getCall(0).args[0]).to.be.equal( 'https://bid.essrtb.com/notify/prebid_timeout?ad_unit_code=adunit-code&' + 'auction_id=a1fba829-dd41-409f-acfb-b7b0ac5f30c6&bid_id=ef236c6c-e934-406b-a877-d7be8e8a839a&timeout=100&' + - 'page_url=' + encodeURIComponent(getRefererInfo().referer) + 'page_url=' + encodeURIComponent(getRefererInfo().page) ); expect(utils.triggerPixel.getCall(1).args[0]).to.be.equal( 'https://bid.essrtb.com/notify/prebid_timeout?ad_unit_code=adunit-code-2&' + 'auction_id=a1fba829-dd41-409f-acfb-b7b0ac5f30c6&bid_id=ca4121c8-9a4a-46ba-a624-e9b64af206f2&timeout=100&' + - 'page_url=' + encodeURIComponent(getRefererInfo().referer) + 'page_url=' + encodeURIComponent(getRefererInfo().page) ); }); }); diff --git a/test/spec/modules/kubientBidAdapter_spec.js b/test/spec/modules/kubientBidAdapter_spec.js index f7afc709564..a6241aa8d41 100644 --- a/test/spec/modules/kubientBidAdapter_spec.js +++ b/test/spec/modules/kubientBidAdapter_spec.js @@ -91,7 +91,7 @@ describe('KubientAdapter', function () { auctionStart: 1472239426000, timeout: 5000, refererInfo: { - referer: 'http://www.example.com', + page: 'http://www.example.com', reachedTop: true, }, gdprConsent: { diff --git a/test/spec/modules/livewrappedBidAdapter_spec.js b/test/spec/modules/livewrappedBidAdapter_spec.js index 5d031d5b948..a4fee5e3b26 100644 --- a/test/spec/modules/livewrappedBidAdapter_spec.js +++ b/test/spec/modules/livewrappedBidAdapter_spec.js @@ -758,9 +758,9 @@ describe('Livewrapped adapter tests', function () { expect(data).to.deep.equal(expectedQuery); }); - it('should use params.url, then config pageUrl, then bidderRequest.refererInfo.referer', function() { + it('should use params.url, then bidderRequest.refererInfo.page', function() { let testRequest = clone(bidderRequest); - testRequest.refererInfo = {referer: 'https://www.topurl.com'}; + testRequest.refererInfo = {page: 'https://www.topurl.com'}; let result = spec.buildRequests(testRequest.bids, testRequest); let data = JSON.parse(result.data); @@ -773,19 +773,6 @@ describe('Livewrapped adapter tests', function () { data = JSON.parse(result.data); expect(data.url).to.equal('https://www.topurl.com'); - - let origGetConfig = config.getConfig; - sandbox.stub(config, 'getConfig').callsFake(function (key) { - if (key === 'pageUrl') { - return 'https://www.configurl.com'; - } - return origGetConfig.apply(config, arguments); - }); - - result = spec.buildRequests(testRequest.bids, testRequest); - data = JSON.parse(result.data); - - expect(data.url).to.equal('https://www.configurl.com'); }); it('should make use of pubcid if available', function() { diff --git a/test/spec/modules/lockerdomeBidAdapter_spec.js b/test/spec/modules/lockerdomeBidAdapter_spec.js index 9e3d7981300..d65837c39ab 100644 --- a/test/spec/modules/lockerdomeBidAdapter_spec.js +++ b/test/spec/modules/lockerdomeBidAdapter_spec.js @@ -74,7 +74,7 @@ describe('LockerDomeAdapter', function () { const bidderRequest = { refererInfo: { canonicalUrl: 'https://example.com/canonical', - referer: 'https://example.com' + topmostLocation: 'https://example.com' } }; const request = spec.buildRequests(bidRequests, bidderRequest); @@ -88,7 +88,7 @@ describe('LockerDomeAdapter', function () { expect(bids).to.have.lengthOf(2); expect(requestData.url).to.equal(encodeURIComponent(bidderRequest.refererInfo.canonicalUrl)); - expect(requestData.referrer).to.equal(encodeURIComponent(bidderRequest.refererInfo.referer)); + expect(requestData.referrer).to.equal(encodeURIComponent(bidderRequest.refererInfo.topmostLocation)); expect(bids[0].requestId).to.equal('2652ca954bce9'); expect(bids[0].adUnitCode).to.equal('ad-1'); diff --git a/test/spec/modules/loglyliftBidAdapter_spec.js b/test/spec/modules/loglyliftBidAdapter_spec.js index d091c4b042d..8ff2eb97463 100644 --- a/test/spec/modules/loglyliftBidAdapter_spec.js +++ b/test/spec/modules/loglyliftBidAdapter_spec.js @@ -63,7 +63,8 @@ describe('loglyliftBidAdapter', function () { const bidderRequest = { refererInfo: { - referer: 'fakeReferer', + domain: 'domain', + page: 'fakeReferer', reachedTop: true, numIframes: 1, stack: [] @@ -160,7 +161,7 @@ describe('loglyliftBidAdapter', function () { expect(data.prebidJsVersion).to.equal('$prebid.version$'); expect(data.url).to.exist; expect(data.domain).to.exist; - expect(data.referer).to.equal(bidderRequest.refererInfo.referer); + expect(data.referer).to.equal(bidderRequest.refererInfo.page); expect(data.auctionStartTime).to.equal(bidderRequest.auctionStart); expect(data.currency).to.exist; expect(data.timeout).to.equal(bidderRequest.timeout); diff --git a/test/spec/modules/luponmediaBidAdapter_spec.js b/test/spec/modules/luponmediaBidAdapter_spec.js index 8aeecc87c98..9f109ff1892 100755 --- a/test/spec/modules/luponmediaBidAdapter_spec.js +++ b/test/spec/modules/luponmediaBidAdapter_spec.js @@ -135,7 +135,7 @@ describe('luponmediaBidAdapter', function () { 'auctionStart': 1587413920820, 'timeout': 2000, 'refererInfo': { - 'referer': 'https://novi.ba/clanak/176067/fast-car-beginner-s-guide-to-tuning-turbo-engines', + 'page': 'https://novi.ba/clanak/176067/fast-car-beginner-s-guide-to-tuning-turbo-engines', 'reachedTop': true, 'numIframes': 0, 'stack': [ diff --git a/test/spec/modules/marsmediaBidAdapter_spec.js b/test/spec/modules/marsmediaBidAdapter_spec.js index cf074b0f3d6..055b05700b2 100644 --- a/test/spec/modules/marsmediaBidAdapter_spec.js +++ b/test/spec/modules/marsmediaBidAdapter_spec.js @@ -38,7 +38,7 @@ describe('marsmedia adapter tests', function () { }; this.defaultBidderRequest = { 'refererInfo': { - 'referer': 'Reference Page', + 'ref': 'Reference Page', 'stack': [ 'aodomain.dvl', 'page.dvl' diff --git a/test/spec/modules/mediaforceBidAdapter_spec.js b/test/spec/modules/mediaforceBidAdapter_spec.js index 0b5c4d00f53..22f584306a9 100644 --- a/test/spec/modules/mediaforceBidAdapter_spec.js +++ b/test/spec/modules/mediaforceBidAdapter_spec.js @@ -132,7 +132,7 @@ describe('mediaforce bid adapter', function () { }); const refererInfo = { - referer: 'https://www.prebid.org', + ref: 'https://www.prebid.org', reachedTop: true, stack: [ 'https://www.prebid.org/page.html', @@ -181,7 +181,7 @@ describe('mediaforce bid adapter', function () { site: { id: bid.params.publisher_id, publisher: {id: bid.params.publisher_id}, - ref: encodeURIComponent(refererInfo.referer), + ref: encodeURIComponent(refererInfo.ref), page: pageUrl, }, device: { @@ -265,7 +265,7 @@ describe('mediaforce bid adapter', function () { site: { id: 'pub123', publisher: {id: 'pub123'}, - ref: encodeURIComponent(refererInfo.referer), + ref: encodeURIComponent(refererInfo.ref), page: pageUrl, }, device: { @@ -321,7 +321,7 @@ describe('mediaforce bid adapter', function () { site: { id: 'pub124', publisher: {id: 'pub124'}, - ref: encodeURIComponent(refererInfo.referer), + ref: encodeURIComponent(refererInfo.ref), page: pageUrl, }, device: { diff --git a/test/spec/modules/mediafuseBidAdapter_spec.js b/test/spec/modules/mediafuseBidAdapter_spec.js index 8c424cd5fc5..bb9bbd34d1d 100644 --- a/test/spec/modules/mediafuseBidAdapter_spec.js +++ b/test/spec/modules/mediafuseBidAdapter_spec.js @@ -822,7 +822,7 @@ describe('MediaFuseAdapter', function () { const bidRequest = Object.assign({}, bidRequests[0]) const bidderRequest = { refererInfo: { - referer: 'https://example.com/page.html', + topmostLocation: 'https://example.com/page.html', reachedTop: true, numIframes: 2, stack: [ diff --git a/test/spec/microadBidAdapter_spec.js b/test/spec/modules/microadBidAdapter_spec.js similarity index 98% rename from test/spec/microadBidAdapter_spec.js rename to test/spec/modules/microadBidAdapter_spec.js index be310fb8e3c..ff0b705594b 100644 --- a/test/spec/microadBidAdapter_spec.js +++ b/test/spec/modules/microadBidAdapter_spec.js @@ -61,8 +61,8 @@ describe('microadBidAdapter', () => { describe('buildRequests', () => { const bidderRequest = { refererInfo: { - canonicalUrl: 'https://example.com/to', - referer: 'https://example.com/from' + page: 'https://example.com/to', + ref: 'https://example.com/from' } }; const expectedResultTemplate = { @@ -124,10 +124,10 @@ describe('microadBidAdapter', () => { ]); }); - it('should use window.location.href if there is no canonicalUrl', () => { + it('should use window.location.href if there is no page', () => { const bidderRequestWithoutCanonicalUrl = { refererInfo: { - referer: 'https://example.com/from' + ref: 'https://example.com/from' } }; const requests = spec.buildRequests([bidRequestTemplate], bidderRequestWithoutCanonicalUrl); diff --git a/test/spec/modules/missenaBidAdapter_spec.js b/test/spec/modules/missenaBidAdapter_spec.js index 86b967cca5b..2b3a271e300 100644 --- a/test/spec/modules/missenaBidAdapter_spec.js +++ b/test/spec/modules/missenaBidAdapter_spec.js @@ -49,7 +49,7 @@ describe('Missena Adapter', function () { gdprApplies: true, }, refererInfo: { - referer: 'https://referer', + topmostLocation: 'https://referer', canonicalUrl: 'https://canonical', }, }; diff --git a/test/spec/modules/mytargetBidAdapter_spec.js b/test/spec/modules/mytargetBidAdapter_spec.js index 62d139bb926..8880efd3d7c 100644 --- a/test/spec/modules/mytargetBidAdapter_spec.js +++ b/test/spec/modules/mytargetBidAdapter_spec.js @@ -46,7 +46,7 @@ describe('MyTarget Adapter', function() { ]; let bidderRequest = { refererInfo: { - referer: 'https://example.com?param=value' + page: 'https://example.com?param=value' } }; diff --git a/test/spec/modules/nobidBidAdapter_spec.js b/test/spec/modules/nobidBidAdapter_spec.js index 6af803c66f3..7ea89f7dd3f 100644 --- a/test/spec/modules/nobidBidAdapter_spec.js +++ b/test/spec/modules/nobidBidAdapter_spec.js @@ -70,7 +70,7 @@ describe('Nobid Adapter', function () { ]; let bidderRequest = { - refererInfo: {referer: REFERER}, bidderCode: BIDDER_CODE + refererInfo: {page: REFERER}, bidderCode: BIDDER_CODE } const siteName = 'example'; @@ -132,7 +132,7 @@ describe('Nobid Adapter', function () { ]; let bidderRequest = { - refererInfo: {referer: REFERER}, bidderCode: BIDDER_CODE + refererInfo: {page: REFERER}, bidderCode: BIDDER_CODE } it('should add source and version to the tag', function () { @@ -306,7 +306,7 @@ describe('Nobid Adapter', function () { ]; let bidderRequest = { - refererInfo: {referer: REFERER} + refererInfo: {page: REFERER} } it('should add source and version to the tag', function () { @@ -395,7 +395,7 @@ describe('Nobid Adapter', function () { ]; let bidderRequest = { - refererInfo: {referer: REFERER} + refererInfo: {page: REFERER} } it('should add source and version to the tag', function () { @@ -481,7 +481,7 @@ describe('Nobid Adapter', function () { ]; let bidderRequest = { - refererInfo: {referer: REFERER} + refererInfo: {page: REFERER} } it('should criteo eid', function () { @@ -515,7 +515,7 @@ describe('Nobid Adapter', function () { ]; let bidderRequest = { - refererInfo: {referer: REFERER} + refererInfo: {page: REFERER} } it('should add source and version to the tag', function () { @@ -649,7 +649,7 @@ describe('Nobid Adapter', function () { ]; let bidderRequest = { - refererInfo: {referer: REFERER} + refererInfo: {page: REFERER} } it('should refreshCount = 4', function () { diff --git a/test/spec/modules/operaadsBidAdapter_spec.js b/test/spec/modules/operaadsBidAdapter_spec.js index 849a3eada3f..45bc8995a5c 100644 --- a/test/spec/modules/operaadsBidAdapter_spec.js +++ b/test/spec/modules/operaadsBidAdapter_spec.js @@ -49,7 +49,7 @@ describe('Opera Ads Bid Adapter', function () { bidderCode: 'myBidderCode', bidderRequestId: '15246a574e859f', refererInfo: { - referer: 'http://example.com', + page: 'http://example.com', stack: ['http://example.com'] }, gdprConsent: { @@ -242,7 +242,7 @@ describe('Opera Ads Bid Adapter', function () { expect(requestData.site).to.be.an('object'); expect(requestData.site.id).to.equal(bidRequest.params.publisherId); expect(requestData.site.domain).to.not.be.empty; - expect(requestData.site.page).to.equal(bidderRequest.refererInfo.referer); + expect(requestData.site.page).to.equal(bidderRequest.refererInfo.page); expect(requestData.at).to.equal(1); expect(requestData.bcat).to.be.an('array').that.is.empty; expect(requestData.cur).to.be.an('array').that.not.be.empty; diff --git a/test/spec/modules/orbidderBidAdapter_spec.js b/test/spec/modules/orbidderBidAdapter_spec.js index 750524cf47f..0d1396866e7 100644 --- a/test/spec/modules/orbidderBidAdapter_spec.js +++ b/test/spec/modules/orbidderBidAdapter_spec.js @@ -63,7 +63,7 @@ describe('orbidderBidAdapter', () => { return spec.buildRequests(buildRequest, { ...bidderRequest || {}, refererInfo: { - referer: 'https://localhost:9876/' + page: 'https://localhost:9876/' } })[0]; }; diff --git a/test/spec/modules/otmBidAdapter_spec.js b/test/spec/modules/otmBidAdapter_spec.js index ce033d0fba5..27da17b8415 100644 --- a/test/spec/modules/otmBidAdapter_spec.js +++ b/test/spec/modules/otmBidAdapter_spec.js @@ -42,7 +42,7 @@ describe('otmBidAdapter', function () { sizes: [[240, 400]] }]; - const bidderRequest = {refererInfo: {referer: `https://github.com:3000/`}} + const bidderRequest = {refererInfo: {page: `https://github.com:3000/`, domain: 'github.com:3000'}} const request = spec.buildRequests(bidRequestData, bidderRequest); const req_data = request[0].data; diff --git a/test/spec/modules/outbrainBidAdapter_spec.js b/test/spec/modules/outbrainBidAdapter_spec.js index 5dbdd049d82..b55ad04eac3 100644 --- a/test/spec/modules/outbrainBidAdapter_spec.js +++ b/test/spec/modules/outbrainBidAdapter_spec.js @@ -180,7 +180,7 @@ describe('Outbrain Adapter', function () { const commonBidderRequest = { refererInfo: { - referer: 'https://example.com/' + page: 'https://example.com/' } } diff --git a/test/spec/modules/parrableIdSystem_spec.js b/test/spec/modules/parrableIdSystem_spec.js index a6e6185bbb2..481c3289f1f 100644 --- a/test/spec/modules/parrableIdSystem_spec.js +++ b/test/spec/modules/parrableIdSystem_spec.js @@ -128,7 +128,7 @@ describe('Parrable ID System', function() { expect(data).to.deep.equal({ eid: P_COOKIE_EID, trackers: P_CONFIG_MOCK.params.partners.split(','), - url: getRefererInfo().referer, + url: getRefererInfo().page, prebidVersion: '$prebid.version$', isIframe: true }); diff --git a/test/spec/modules/prebidServerBidAdapter_spec.js b/test/spec/modules/prebidServerBidAdapter_spec.js index 36862535946..53d6b1e98f3 100644 --- a/test/spec/modules/prebidServerBidAdapter_spec.js +++ b/test/spec/modules/prebidServerBidAdapter_spec.js @@ -509,7 +509,7 @@ describe('S2S Adapter', function () { 'src': 's2s', 'doneCbCallCount': 0, 'refererInfo': { - 'referer': 'http://mytestpage.com' + 'page': 'http://mytestpage.com' } } ]; diff --git a/test/spec/modules/pubgeniusBidAdapter_spec.js b/test/spec/modules/pubgeniusBidAdapter_spec.js index 4599eb2a6fa..1d1b0e65ec8 100644 --- a/test/spec/modules/pubgeniusBidAdapter_spec.js +++ b/test/spec/modules/pubgeniusBidAdapter_spec.js @@ -239,17 +239,8 @@ describe('pubGENIUS adapter', () => { expect(buildRequests([bidRequest], bidderRequest)).to.deep.equal(expectedRequest); }); - it('should take pageUrl in config over referer in refererInfo', () => { - config.setConfig({ pageUrl: 'http://pageurl.org' }); - bidderRequest.refererInfo.referer = 'http://referer.org'; - expectedRequest.data.site = { page: 'http://pageurl.org' }; - - expect(buildRequests([bidRequest], bidderRequest)).to.deep.equal(expectedRequest); - }); - - it('should use canonical URL over referer in refererInfo', () => { - bidderRequest.refererInfo.canonicalUrl = 'http://pageurl.org'; - bidderRequest.refererInfo.referer = 'http://referer.org'; + it('should use page from refererInfo', () => { + bidderRequest.refererInfo.page = 'http://pageurl.org'; expectedRequest.data.site = { page: 'http://pageurl.org' }; expect(buildRequests([bidRequest], bidderRequest)).to.deep.equal(expectedRequest); diff --git a/test/spec/modules/pubmaticAnalyticsAdapter_spec.js b/test/spec/modules/pubmaticAnalyticsAdapter_spec.js index c60b08ae972..2166a192a14 100755 --- a/test/spec/modules/pubmaticAnalyticsAdapter_spec.js +++ b/test/spec/modules/pubmaticAnalyticsAdapter_spec.js @@ -149,7 +149,7 @@ const MOCK = { ], 'timeout': 3000, 'refererInfo': { - 'referer': 'http://www.test.com/page.html', 'reachedTop': true, 'numIframes': 0, 'stack': ['http://www.test.com/page.html'] + 'topmostLocation': 'http://www.test.com/page.html', 'reachedTop': true, 'numIframes': 0, 'stack': ['http://www.test.com/page.html'] } } ], @@ -203,7 +203,7 @@ const MOCK = { 'timeout': 5000, 'start': 1519149562216, 'refererInfo': { - 'referer': 'http://www.test.com/page.html', 'reachedTop': true, 'numIframes': 0, 'stack': ['http://www.test.com/page.html'] + 'topmostLocation': 'http://www.test.com/page.html', 'reachedTop': true, 'numIframes': 0, 'stack': ['http://www.test.com/page.html'] }, 'gdprConsent': { 'consentString': 'here-goes-gdpr-consent-string', diff --git a/test/spec/modules/pulsepointBidAdapter_spec.js b/test/spec/modules/pulsepointBidAdapter_spec.js index c8ec0493d54..4426c91e1ec 100644 --- a/test/spec/modules/pulsepointBidAdapter_spec.js +++ b/test/spec/modules/pulsepointBidAdapter_spec.js @@ -195,7 +195,8 @@ describe('PulsePoint Adapter Tests', function () { const bidderRequest = { refererInfo: { - referer: 'https://publisher.com/home' + page: 'https://publisher.com/home', + ref: 'https://referrer' } }; @@ -208,7 +209,7 @@ describe('PulsePoint Adapter Tests', function () { expect(ortbRequest.site).to.not.equal(null); expect(ortbRequest.site.publisher).to.not.equal(null); expect(ortbRequest.site.publisher.id).to.equal('p10000'); - expect(ortbRequest.site.ref).to.equal(window.top.document.referrer); + expect(ortbRequest.site.ref).to.equal(bidderRequest.refererInfo.ref); expect(ortbRequest.site.page).to.equal('https://publisher.com/home'); expect(ortbRequest.imp).to.have.lengthOf(2); // device object diff --git a/test/spec/modules/pxyzBidAdapter_spec.js b/test/spec/modules/pxyzBidAdapter_spec.js index 21dd252c909..3a336c86e46 100644 --- a/test/spec/modules/pxyzBidAdapter_spec.js +++ b/test/spec/modules/pxyzBidAdapter_spec.js @@ -8,7 +8,7 @@ const GDPR_CONSENT = 'XYZ-CONSENT'; const BIDDER_REQUEST = { refererInfo: { - referer: 'https://example.com' + page: 'https://example.com', } }; diff --git a/test/spec/modules/quantcastBidAdapter_spec.js b/test/spec/modules/quantcastBidAdapter_spec.js index 9e3b24c79d2..6ba9d9b4e01 100644 --- a/test/spec/modules/quantcastBidAdapter_spec.js +++ b/test/spec/modules/quantcastBidAdapter_spec.js @@ -47,8 +47,9 @@ describe('Quantcast adapter', function () { bidderRequest = { refererInfo: { - referer: 'http://example.com/hello.html', - canonicalUrl: 'http://example.com/hello.html' + page: 'http://example.com/hello.html', + ref: 'http://example.com/hello.html', + domain: 'example.com' } }; diff --git a/test/spec/modules/qwarryBidAdapter_spec.js b/test/spec/modules/qwarryBidAdapter_spec.js index 560206681ee..5d48d92066a 100644 --- a/test/spec/modules/qwarryBidAdapter_spec.js +++ b/test/spec/modules/qwarryBidAdapter_spec.js @@ -89,7 +89,7 @@ describe('qwarryBidAdapter', function () { consentString: 'BOJ8RZsOJ8RZsABAB8AAAAAZ+A==' }, refererInfo: { - referer: 'http://test.com/path.html' + page: 'http://test.com/path.html', } }) diff --git a/test/spec/modules/radsBidAdapter_spec.js b/test/spec/modules/radsBidAdapter_spec.js index 271f7cb1147..3ad7ada2ae7 100644 --- a/test/spec/modules/radsBidAdapter_spec.js +++ b/test/spec/modules/radsBidAdapter_spec.js @@ -105,13 +105,13 @@ describe('radsAdapter', function () { // Without gdprConsent let bidderRequest = { refererInfo: { - referer: 'some_referrer.net' + page: 'some_referrer.net' } } // With gdprConsent var bidderRequestGdprConsent = { refererInfo: { - referer: 'some_referrer.net' + page: 'some_referrer.net' }, gdprConsent: { consentString: 'BOJ/P2HOJ/P2HABABMAAAAAZ+A==', diff --git a/test/spec/modules/readpeakBidAdapter_spec.js b/test/spec/modules/readpeakBidAdapter_spec.js index 04358fad52b..758bef49c20 100644 --- a/test/spec/modules/readpeakBidAdapter_spec.js +++ b/test/spec/modules/readpeakBidAdapter_spec.js @@ -16,7 +16,8 @@ describe('ReadPeakAdapter', function() { beforeEach(function() { bidderRequest = { refererInfo: { - referer: 'https://publisher.com/home' + page: 'https://publisher.com/home', + domain: 'publisher.com' } }; @@ -266,8 +267,8 @@ describe('ReadPeakAdapter', function() { expect(data.imp[0].tagId).to.equal('test-tag-1'); expect(data.site.publisher.id).to.equal(nativeBidRequest.params.publisherId); expect(data.site.id).to.equal(nativeBidRequest.params.siteId); - expect(data.site.page).to.equal(bidderRequest.refererInfo.referer); - expect(data.site.domain).to.equal(parseUrl(bidderRequest.refererInfo.referer).hostname); + expect(data.site.page).to.equal(bidderRequest.refererInfo.page); + expect(data.site.domain).to.equal(bidderRequest.refererInfo.domain); expect(data.device).to.deep.contain({ ua: navigator.userAgent, language: navigator.language @@ -428,8 +429,8 @@ describe('ReadPeakAdapter', function() { expect(data.imp[0].tagId).to.equal('test-tag-1'); expect(data.site.publisher.id).to.equal(bannerBidRequest.params.publisherId); expect(data.site.id).to.equal(bannerBidRequest.params.siteId); - expect(data.site.page).to.equal(bidderRequest.refererInfo.referer); - expect(data.site.domain).to.equal(parseUrl(bidderRequest.refererInfo.referer).hostname); + expect(data.site.page).to.equal(bidderRequest.refererInfo.page); + expect(data.site.domain).to.equal(bidderRequest.refererInfo.domain); expect(data.device).to.deep.contain({ ua: navigator.userAgent, language: navigator.language diff --git a/test/spec/modules/relaidoBidAdapter_spec.js b/test/spec/modules/relaidoBidAdapter_spec.js index f0d381ee3ed..cea49424b4d 100644 --- a/test/spec/modules/relaidoBidAdapter_spec.js +++ b/test/spec/modules/relaidoBidAdapter_spec.js @@ -51,7 +51,7 @@ describe('RelaidoAdapter', function () { bidderRequest = { timeout: 1000, refererInfo: { - referer: 'https://publisher.com/home' + page: 'https://publisher.com/home' } }; serverResponse = { @@ -211,7 +211,7 @@ describe('RelaidoAdapter', function () { const request = data.bids[0]; expect(bidRequests.method).to.equal('POST'); expect(bidRequests.url).to.equal('https://api.relaido.jp/bid/v1/sprebid'); - expect(data.ref).to.equal(bidderRequest.refererInfo.referer); + expect(data.ref).to.equal(bidderRequest.refererInfo.page); expect(data.timeout_ms).to.equal(bidderRequest.timeout); expect(request.ad_unit_code).to.equal(bidRequest.adUnitCode); expect(request.auction_id).to.equal(bidRequest.auctionId); diff --git a/test/spec/modules/revcontentBidAdapter_spec.js b/test/spec/modules/revcontentBidAdapter_spec.js index 022dd0e1aa9..e6ef4adec87 100644 --- a/test/spec/modules/revcontentBidAdapter_spec.js +++ b/test/spec/modules/revcontentBidAdapter_spec.js @@ -45,7 +45,7 @@ describe('revcontent adapter', function () { endpoint: 'trends-s0.revcontent.com' } }]; - let request = spec.buildRequests(validBidRequests, {refererInfo: {referer: 'page'}}); + let request = spec.buildRequests(validBidRequests, {refererInfo: {page: 'page'}}); request = request[0]; assert.equal(request.method, 'POST'); assert.equal(request.url, 'https://trends-s0.revcontent.com/rtb?apiKey=8a33fa9cf220ae685dcc3544f847cdda858d3b1c&userId=673&widgetId=33861'); @@ -66,7 +66,7 @@ describe('revcontent adapter', function () { endpoint: 'trends-s0.revcontent.com' } }]; - let request = spec.buildRequests(validBidRequests, {refererInfo: {referer: 'page'}}); + let request = spec.buildRequests(validBidRequests, {refererInfo: {page: 'page'}}); request = request[0]; let data = Object.keys(request); @@ -87,7 +87,7 @@ describe('revcontent adapter', function () { bidfloor: 0.05 } }]; - let request = spec.buildRequests(validBidRequests, {refererInfo: {referer: 'page'}}); + let request = spec.buildRequests(validBidRequests, {refererInfo: {page: 'page'}}); request = JSON.parse(request[0].data); assert.equal(request.imp[0].bidfloor, 0.05); assert.equal(request.device.ua, navigator.userAgent); @@ -112,7 +112,7 @@ describe('revcontent adapter', function () { currency: 'USD' }; }; - let request = spec.buildRequests(validBidRequests, {refererInfo: {referer: 'page'}}); + let request = spec.buildRequests(validBidRequests, {refererInfo: {page: 'page'}}); request = JSON.parse(request[0].data); assert.equal(request.imp[0].bidfloor, 0.07); assert.equal(request.device.ua, navigator.userAgent); @@ -146,7 +146,7 @@ describe('revcontent adapter', function () { endpoint: 'trends-s0.revcontent.com' } }]; - let refererInfo = {referer: 'page'}; + let refererInfo = {page: 'page'}; let request = spec.buildRequests(validBidRequests, {refererInfo}); request = JSON.parse(request[0].data); diff --git a/test/spec/modules/rhythmoneBidAdapter_spec.js b/test/spec/modules/rhythmoneBidAdapter_spec.js index e0e58fc89cd..359b02db37e 100644 --- a/test/spec/modules/rhythmoneBidAdapter_spec.js +++ b/test/spec/modules/rhythmoneBidAdapter_spec.js @@ -8,7 +8,7 @@ describe('rhythmone adapter tests', function () { beforeEach(function() { this.defaultBidderRequest = { 'refererInfo': { - 'referer': 'Reference Page', + 'ref': 'Reference Page', 'stack': [ 'aodomain.dvl', 'page.dvl' @@ -647,35 +647,6 @@ describe('rhythmone adapter tests', function () { }); }); - it('should return empty site.domain and site.page when refererInfo.stack is empty', function() { - this.defaultBidderRequest.refererInfo.stack = []; - var bidRequestList = [ - { - 'bidder': 'rhythmone', - 'params': { - 'placementId': 'myplacement', - 'zone': 'myzone', - 'path': 'mypath' - }, - 'mediaType': 'banner', - 'adUnitCode': 'div-gpt-ad-1438287399331-0', - 'sizes': [[300, 250]], - 'transactionId': 'd7b773de-ceaa-484d-89ca-d9f51b8d61ec', - 'bidderRequestId': '418b37f85e772c', - 'auctionId': '18fd8b8b0bd757', - 'bidRequestsCount': 1, - 'bidId': '51ef8751f9aead' - } - ]; - - var bidRequest = r1adapter.buildRequests(bidRequestList, this.defaultBidderRequest); - const openrtbRequest = JSON.parse(bidRequest.data); - - expect(openrtbRequest.site.domain).to.equal(''); - expect(openrtbRequest.site.page).to.equal(''); - expect(openrtbRequest.site.ref).to.equal('Reference Page'); - }); - it('should secure correctly', function() { this.defaultBidderRequest.refererInfo.stack[0] = ['https://securesite.dvl']; var bidRequestList = [ diff --git a/test/spec/modules/richaudienceBidAdapter_spec.js b/test/spec/modules/richaudienceBidAdapter_spec.js index 9e9366072be..86d3df8be59 100644 --- a/test/spec/modules/richaudienceBidAdapter_spec.js +++ b/test/spec/modules/richaudienceBidAdapter_spec.js @@ -176,7 +176,7 @@ describe('Richaudience adapter tests', function () { gdprApplies: true }, refererInfo: { - referer: 'http://domain.com', + page: 'http://domain.com', numIframes: 0 } } @@ -205,7 +205,7 @@ describe('Richaudience adapter tests', function () { gdprApplies: true }, refererInfo: { - referer: 'https://domain.com', + page: 'https://domain.com', numIframes: 0 } }); @@ -246,7 +246,7 @@ describe('Richaudience adapter tests', function () { gdprApplies: true }, refererInfo: { - referer: 'https://domain.com', + page: 'https://domain.com', numIframes: 0 } }); @@ -265,7 +265,7 @@ describe('Richaudience adapter tests', function () { gdprApplies: true }, refererInfo: { - referer: 'https://domain.com', + page: 'https://domain.com', numIframes: 0 } }); @@ -296,7 +296,7 @@ describe('Richaudience adapter tests', function () { gdprApplies: true }, refererInfo: { - referer: 'https://domain.com', + page: 'https://domain.com', numIframes: 0 } }); @@ -311,7 +311,7 @@ describe('Richaudience adapter tests', function () { gdprApplies: true }, refererInfo: { - referer: 'https://domain.com', + page: 'https://domain.com', numIframes: 0 } }); @@ -334,7 +334,7 @@ describe('Richaudience adapter tests', function () { consentString: 'BOZcQl_ObPFjWAeABAESCD-AAAAjx7_______9______9uz_Ov_v_f__33e8__9v_l_7_-___u_-33d4-_1vf99yfm1-7ftr3tp_87ues2_Xur__59__3z3_NohBgA' }, refererInfo: { - referer: 'https://domain.com', + page: 'https://domain.com', numIframes: 0 } }); @@ -583,7 +583,7 @@ describe('Richaudience adapter tests', function () { gdprApplies: true }, refererInfo: { - referer: 'https://domain.com', + page: 'https://domain.com', numIframes: 0 } }); @@ -611,7 +611,7 @@ describe('Richaudience adapter tests', function () { gdprApplies: true }, refererInfo: { - referer: 'https://domain.com', + page: 'https://domain.com', numIframes: 0 } }); @@ -640,7 +640,7 @@ describe('Richaudience adapter tests', function () { gdprApplies: true }, refererInfo: { - referer: 'https://domain.com', + page: 'https://domain.com', numIframes: 0 } }); @@ -669,7 +669,7 @@ describe('Richaudience adapter tests', function () { gdprApplies: true }, refererInfo: { - referer: 'https://domain.com', + page: 'https://domain.com', numIframes: 0 } }); diff --git a/test/spec/modules/rubiconAnalyticsAdapter_spec.js b/test/spec/modules/rubiconAnalyticsAdapter_spec.js index 1f52e83dab9..bef3eda0afc 100644 --- a/test/spec/modules/rubiconAnalyticsAdapter_spec.js +++ b/test/spec/modules/rubiconAnalyticsAdapter_spec.js @@ -235,7 +235,7 @@ const MOCK = { ], 'timeout': 3000, 'refererInfo': { - 'referer': 'http://www.test.com/page.html', 'reachedTop': true, 'numIframes': 0, 'stack': ['http://www.test.com/page.html'] + 'page': 'http://www.test.com/page.html', 'reachedTop': true, 'numIframes': 0, 'stack': ['http://www.test.com/page.html'] } } ], @@ -319,7 +319,7 @@ const MOCK = { 'timeout': 5000, 'start': 1519149562216, 'refererInfo': { - 'referer': 'http://www.test.com/page.html', 'reachedTop': true, 'numIframes': 0, 'stack': ['http://www.test.com/page.html'] + 'page': 'http://www.test.com/page.html', 'reachedTop': true, 'numIframes': 0, 'stack': ['http://www.test.com/page.html'] } }, BID_RESPONSE: [ diff --git a/test/spec/modules/rubiconBidAdapter_spec.js b/test/spec/modules/rubiconBidAdapter_spec.js index 63cdda2ee7b..ebfe6689a3e 100644 --- a/test/spec/modules/rubiconBidAdapter_spec.js +++ b/test/spec/modules/rubiconBidAdapter_spec.js @@ -665,7 +665,7 @@ describe('the rubicon adapter', function () { it('should add referer info to request data', function () { let refererInfo = { - referer: 'https://www.prebid.org', + page: 'https://www.prebid.org', reachedTop: true, numIframes: 1, stack: [ @@ -682,29 +682,20 @@ describe('the rubicon adapter', function () { expect(parseQuery(request.data).rf).to.equal('https://www.prebid.org'); }); - it('page_url should use params.referrer, config.getConfig("pageUrl"), bidderRequest.refererInfo in that order', function () { + it('page_url should use params.referrer, bidderRequest.refererInfo in that order', function () { let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest); expect(parseQuery(request.data).rf).to.equal('localhost'); delete bidderRequest.bids[0].params.referrer; - let refererInfo = {referer: 'https://www.prebid.org'}; + let refererInfo = {page: 'https://www.prebid.org'}; bidderRequest = Object.assign({refererInfo}, bidderRequest); [request] = spec.buildRequests(bidderRequest.bids, bidderRequest); expect(parseQuery(request.data).rf).to.equal('https://www.prebid.org'); - let origGetConfig = config.getConfig; - sandbox.stub(config, 'getConfig').callsFake(function (key) { - if (key === 'pageUrl') { - return 'https://www.rubiconproject.com'; - } - return origGetConfig.apply(config, arguments); - }); - [request] = spec.buildRequests(bidderRequest.bids, bidderRequest); - expect(parseQuery(request.data).rf).to.equal('https://www.rubiconproject.com'); - + bidderRequest.refererInfo.page = 'http://www.prebid.org'; bidderRequest.bids[0].params.secure = true; [request] = spec.buildRequests(bidderRequest.bids, bidderRequest); - expect(parseQuery(request.data).rf).to.equal('https://www.rubiconproject.com'); + expect(parseQuery(request.data).rf).to.equal('https://www.prebid.org'); }); it('should use rubicon sizes if present (including non-mappable sizes)', function () { diff --git a/test/spec/modules/seedtagBidAdapter_spec.js b/test/spec/modules/seedtagBidAdapter_spec.js index 1e0dca68d00..fc659f4de69 100644 --- a/test/spec/modules/seedtagBidAdapter_spec.js +++ b/test/spec/modules/seedtagBidAdapter_spec.js @@ -196,7 +196,7 @@ describe('Seedtag Adapter', function () { describe('buildRequests method', function () { const bidderRequest = { - refererInfo: { referer: 'referer' }, + refererInfo: { page: 'referer' }, timeout: 1000, }; const mandatoryParams = { diff --git a/test/spec/modules/sharethroughBidAdapter_spec.js b/test/spec/modules/sharethroughBidAdapter_spec.js index ccdeaaf794d..4ef93c9b530 100644 --- a/test/spec/modules/sharethroughBidAdapter_spec.js +++ b/test/spec/modules/sharethroughBidAdapter_spec.js @@ -166,7 +166,7 @@ describe('sharethrough adapter spec', function () { bidderRequest = { refererInfo: { - referer: 'https://referer.com', + ref: 'https://referer.com', }, }; }); diff --git a/test/spec/modules/slimcutBidAdapter_spec.js b/test/spec/modules/slimcutBidAdapter_spec.js index 300791c9658..d821627c24b 100644 --- a/test/spec/modules/slimcutBidAdapter_spec.js +++ b/test/spec/modules/slimcutBidAdapter_spec.js @@ -106,7 +106,7 @@ describe('slimcutBidAdapter', function() { const bidRequest = Object.assign({}, bidRequests[0]) const bidderRequest = { refererInfo: { - referer: 'https://example.com/page.html', + page: 'https://example.com/page.html', reachedTop: true, numIframes: 2 } diff --git a/test/spec/modules/smaatoBidAdapter_spec.js b/test/spec/modules/smaatoBidAdapter_spec.js index f9bff4d0d0d..99592765845 100644 --- a/test/spec/modules/smaatoBidAdapter_spec.js +++ b/test/spec/modules/smaatoBidAdapter_spec.js @@ -18,7 +18,7 @@ const defaultBidderRequest = { }, uspConsent: 'uspConsentString', refererInfo: { - referer: REFERRER, + ref: REFERRER, }, timeout: 1200, auctionId: AUCTION_ID @@ -123,7 +123,7 @@ describe('smaatoBidAdapterTest', () => { describe('common', () => { const MINIMAL_BIDDER_REQUEST = { refererInfo: { - referer: REFERRER, + ref: REFERRER, } }; diff --git a/test/spec/modules/smarthubBidAdapter_spec.js b/test/spec/modules/smarthubBidAdapter_spec.js index 05fb1424dca..e1787dfe880 100644 --- a/test/spec/modules/smarthubBidAdapter_spec.js +++ b/test/spec/modules/smarthubBidAdapter_spec.js @@ -90,7 +90,7 @@ describe('SmartHubBidAdapter', function () { uspConsent: '1---', gdprConsent: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw', refererInfo: { - referer: 'https://test.com' + page: 'https://test.com' } }; diff --git a/test/spec/modules/smartxBidAdapter_spec.js b/test/spec/modules/smartxBidAdapter_spec.js index ddee2fa3347..b7235eee878 100644 --- a/test/spec/modules/smartxBidAdapter_spec.js +++ b/test/spec/modules/smartxBidAdapter_spec.js @@ -145,7 +145,7 @@ describe('The smartx adapter', function () { bid = getValidBidObject(); bidRequestObj = { refererInfo: { - referer: 'prebid.js' + page: 'prebid.js' } }; }); @@ -574,7 +574,7 @@ describe('The smartx adapter', function () { bid = getValidBidObject(); bidRequestObj = { refererInfo: { - referer: 'prebid.js' + page: 'prebid.js' } }; delete bid.params.bidfloor; diff --git a/test/spec/modules/smilewantedBidAdapter_spec.js b/test/spec/modules/smilewantedBidAdapter_spec.js index 0359e470f9b..b9a816cf3d5 100644 --- a/test/spec/modules/smilewantedBidAdapter_spec.js +++ b/test/spec/modules/smilewantedBidAdapter_spec.js @@ -163,7 +163,7 @@ describe('smilewantedBidAdapterTests', function () { it('SmileWanted - Verify build request with referrer', function () { const request = spec.buildRequests(DISPLAY_REQUEST, { refererInfo: { - referer: 'https://localhost/Prebid.js/integrationExamples/gpt/hello_world.html' + page: 'https://localhost/Prebid.js/integrationExamples/gpt/hello_world.html' } }); const requestContent = JSON.parse(request[0].data); diff --git a/test/spec/modules/sonobiBidAdapter_spec.js b/test/spec/modules/sonobiBidAdapter_spec.js index 62a6d32d8ae..a502cc3d17d 100644 --- a/test/spec/modules/sonobiBidAdapter_spec.js +++ b/test/spec/modules/sonobiBidAdapter_spec.js @@ -330,7 +330,7 @@ describe('SonobiBidAdapter', function () { 'refererInfo': { 'numIframes': 0, 'reachedTop': true, - 'referer': 'https://example.com', + 'page': 'https://example.com', 'stack': ['https://example.com'] }, uspConsent: 'someCCPAString' @@ -420,7 +420,7 @@ describe('SonobiBidAdapter', function () { 'refererInfo': { 'numIframes': 0, 'reachedTop': true, - 'referer': 'https://example.com', + 'page': 'https://example.com', 'stack': ['https://example.com'] } }; @@ -440,7 +440,7 @@ describe('SonobiBidAdapter', function () { 'refererInfo': { 'numIframes': 0, 'reachedTop': true, - 'referer': 'https://example.com', + 'page': 'https://example.com', 'stack': ['https://example.com'] } }; diff --git a/test/spec/modules/sovrnBidAdapter_spec.js b/test/spec/modules/sovrnBidAdapter_spec.js index fea44c567c3..261a868f5a0 100644 --- a/test/spec/modules/sovrnBidAdapter_spec.js +++ b/test/spec/modules/sovrnBidAdapter_spec.js @@ -21,7 +21,8 @@ const baseBidRequest = { } const baseBidderRequest = { refererInfo: { - referer: 'http://example.com/page.html', + page: 'http://example.com/page.html', + domain: 'example.com', } } diff --git a/test/spec/modules/spotxBidAdapter_spec.js b/test/spec/modules/spotxBidAdapter_spec.js index d536976092b..9d961657ac2 100644 --- a/test/spec/modules/spotxBidAdapter_spec.js +++ b/test/spec/modules/spotxBidAdapter_spec.js @@ -96,7 +96,11 @@ describe('the spotx adapter', function () { beforeEach(function() { bid = getValidBidObject(); - bidRequestObj = {refererInfo: {referer: 'prebid.js'}}; + bidRequestObj = { + refererInfo: { + page: 'prebid.js' + } + }; }); it('should build a very basic request', function() { @@ -353,24 +357,7 @@ describe('the spotx adapter', function () { config.getConfig.restore(); }); - it('should use pageUrl from config if page param is not passed', function() { - var request; - - var origGetConfig = config.getConfig; - sinon.stub(config, 'getConfig').callsFake(function (key) { - if (key === 'pageUrl') { - return 'https://www.spotx.tv'; - } - return origGetConfig.apply(config, arguments); - }); - - request = spec.buildRequests([bid], bidRequestObj)[0]; - - expect(request.data.site.page).to.equal('https://www.spotx.tv'); - config.getConfig.restore(); - }); - - it('should use refererInfo.referer if no page or pageUrl are passed', function() { + it('should use refererInfo.referer if no page is passed', function() { var request; request = spec.buildRequests([bid], bidRequestObj)[0]; diff --git a/test/spec/modules/sspBCBidAdapter_spec.js b/test/spec/modules/sspBCBidAdapter_spec.js index 257d6815709..f286eb3a1ff 100644 --- a/test/spec/modules/sspBCBidAdapter_spec.js +++ b/test/spec/modules/sspBCBidAdapter_spec.js @@ -209,7 +209,8 @@ describe('SSPBC adapter', function () { gdprConsent, refererInfo: { reachedTop: true, - referer: 'https://test.site.pl/', + page: 'https://test.site.pl/', + domain: 'test.site.pl', stack: ['https://test.site.pl/'], } }; @@ -221,7 +222,8 @@ describe('SSPBC adapter', function () { gdprConsent, refererInfo: { reachedTop: true, - referer: 'https://test.site.pl/', + page: 'https://test.site.pl/', + domain: 'test.site.pl', stack: ['https://test.site.pl/'], } }; @@ -233,7 +235,8 @@ describe('SSPBC adapter', function () { gdprConsent, refererInfo: { reachedTop: true, - referer: 'https://test.site.pl/', + page: 'https://test.site.pl/', + domain: 'test.site.pl', stack: ['https://test.site.pl/'], } }; @@ -245,7 +248,8 @@ describe('SSPBC adapter', function () { gdprConsent, refererInfo: { reachedTop: true, - referer: 'https://test.site.pl/', + page: 'https://test.site.pl/', + domain: 'test.site.pl', stack: ['https://test.site.pl/'], } }; @@ -257,7 +261,8 @@ describe('SSPBC adapter', function () { gdprConsent, refererInfo: { reachedTop: true, - referer: 'https://test.site.pl/', + page: 'https://test.site.pl/', + domain: 'test.site.pl', stack: ['https://test.site.pl/'], } }; @@ -269,7 +274,8 @@ describe('SSPBC adapter', function () { gdprConsent, refererInfo: { reachedTop: true, - referer: 'https://test.site.pl/', + page: 'https://test.site.pl/', + domain: 'test.site.pl', stack: ['https://test.site.pl/'], } }; @@ -280,7 +286,8 @@ describe('SSPBC adapter', function () { bids: bids_test, refererInfo: { reachedTop: true, - referer: 'https://test.site.pl/', + page: 'https://test.site.pl/', + domain: 'test.site.pl', stack: ['https://test.site.pl/'], } }; @@ -511,7 +518,7 @@ describe('SSPBC adapter', function () { }); it('should send page url from refererInfo', function () { - expect(payload.site.page).to.equal(bidRequest.refererInfo.referer); + expect(payload.site.page).to.equal(bidRequest.refererInfo.page); }); it('should send gdpr data', function () { diff --git a/test/spec/modules/taboolaBidAdapter_spec.js b/test/spec/modules/taboolaBidAdapter_spec.js index 1c4f0fa4c32..cc7f5574fc3 100644 --- a/test/spec/modules/taboolaBidAdapter_spec.js +++ b/test/spec/modules/taboolaBidAdapter_spec.js @@ -99,8 +99,9 @@ describe('Taboola Adapter', function () { const commonBidderRequest = { refererInfo: { - referer: 'https://example.com/ref', - canonicalUrl: 'https://example.com/' + page: 'https://example.com/ref', + ref: 'https://ref', + domain: 'example.com', } } @@ -126,9 +127,9 @@ describe('Taboola Adapter', function () { 'site': { 'id': commonBidRequest.params.publisherId, 'name': commonBidRequest.params.publisherId, - 'domain': window.location.host, - 'page': commonBidderRequest.refererInfo.canonicalUrl, - 'ref': commonBidderRequest.refererInfo.referer, + 'domain': commonBidderRequest.refererInfo.domain, + 'page': commonBidderRequest.refererInfo.page, + 'ref': commonBidderRequest.refererInfo.ref, 'publisher': {'id': commonBidRequest.params.publisherId}, 'content': {'language': navigator.language} }, @@ -393,62 +394,36 @@ describe('Taboola Adapter', function () { describe('internal functions', function () { describe('getPageUrl', function () { - let origPageUrl; const bidderRequest = { refererInfo: { - canonicalUrl: 'http://canonical.url' + page: 'http://canonical.url' } }; - beforeEach(function () { - // remember original pageUrl in config - origPageUrl = config.getConfig('pageUrl'); - - // unset pageUrl in config - config.setConfig({pageUrl: null}); - }); - - afterEach(function () { - // set original pageUrl to config - config.setConfig({pageUrl: origPageUrl}); - }); - it('should handle empty or missing data', function () { - expect(internal.getPageUrl(undefined)).to.equal(utils.getWindowTop().location.href); - expect(internal.getPageUrl('')).to.equal(utils.getWindowTop().location.href); + expect(internal.getPageUrl(undefined)).to.equal(utils.getWindowSelf().location.href); + expect(internal.getPageUrl('')).to.equal(utils.getWindowSelf().location.href); }); - it('should use "pageUrl" from config', function () { - config.setConfig({pageUrl: 'http://page.url'}); - - expect(internal.getPageUrl(undefined)).to.equal(config.getConfig('pageUrl')); - }); - - it('should use bidderRequest.refererInfo.canonicalUrl', function () { - expect(internal.getPageUrl(bidderRequest.refererInfo)).to.equal(bidderRequest.refererInfo.canonicalUrl); - }); - - it('should prefer bidderRequest.refererInfo.canonicalUrl over "pageUrl" from config', () => { - config.setConfig({pageUrl: 'https://page.url'}); - - expect(internal.getPageUrl(bidderRequest.refererInfo)).to.equal(bidderRequest.refererInfo.canonicalUrl); + it('should use bidderRequest.refererInfo.page', function () { + expect(internal.getPageUrl(bidderRequest.refererInfo)).to.equal(bidderRequest.refererInfo.page); }); }); describe('getReferrer', function () { it('should handle empty or missing data', function () { - expect(internal.getReferrer(undefined)).to.equal(utils.getWindowTop().document.referrer); - expect(internal.getReferrer('')).to.equal(utils.getWindowTop().document.referrer); + expect(internal.getReferrer(undefined)).to.equal(utils.getWindowSelf().document.referrer); + expect(internal.getReferrer('')).to.equal(utils.getWindowSelf().document.referrer); }); - it('should use bidderRequest.refererInfo.referer', () => { + it('should use bidderRequest.refererInfo.ref', () => { const bidderRequest = { refererInfo: { - referer: 'foobar' + ref: 'foobar' } }; - expect(internal.getReferrer(bidderRequest.refererInfo)).to.equal(bidderRequest.refererInfo.referer); + expect(internal.getReferrer(bidderRequest.refererInfo)).to.equal(bidderRequest.refererInfo.ref); }); }); }) diff --git a/test/spec/modules/tappxBidAdapter_spec.js b/test/spec/modules/tappxBidAdapter_spec.js index e8525053217..58a62fb2869 100644 --- a/test/spec/modules/tappxBidAdapter_spec.js +++ b/test/spec/modules/tappxBidAdapter_spec.js @@ -123,7 +123,7 @@ const c_SERVERRESPONSE_V = { const c_CONSENTSTRING = 'BOJ8RZsOJ8RZsABAB8AAAAAZ+A=='; const c_VALIDBIDREQUESTS = [{'bidder': 'tappx', 'params': {'host': 'testing.ssp.tappx.com\/rtb\/v2\/', 'tappxkey': 'pub-1234-android-1234', 'endpoint': 'ZZ1234PBJS', 'bidfloor': 0.005, 'test': 1}, 'userId': {'haloId': '0000x179MZAzMqUWsFonu7Drm3eDDBMYtj5SPoWQnl89Upk3WTlCvEnKI9SshX0p6eFJ7otPYix179MZAzMqUWsFonu7Drm3eDDBMYtj5SPoWQnl89Upk3WTlCvEnKI9SshX0p6e', 'id5id': {'uid': 'ID5@iu-PJX_OQ0d6FJjKS8kYfUpHriD_rEXbz6UYtYEJelYrDaZOLkh8WcF9J0ZHmEHFKZEBlLXsgP6xqXU3BCj4Ay0Z6fw_jSOaHxMHwd-voRHqFA4Q9NwAxFcVLyPWnNGZ9VbcSAPos1wupq7Xu3MIm-Bw_0vxjhZdWNy4chM9x3i', 'ext': {'linkType': 0}}, 'intentIqId': 'GIF89a\u0000\u0000\u0000\u0000�\u0000\u0000���\u0000\u0000\u0000?�\u0000\u0000\u0000\u0000\u0000\u0000,\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000A\u0000\u0000;', 'lotamePanoramaId': 'xTtLUY7GwqX2MMqSHo9RQ2YUOIBFhlASOR43I9KjvgtcrxIys3RxME96M02LTjWR', 'parrableId': {'eid': '02.YoqC9lWZh8.C8QTSiJTNgI6Pp0KCM5zZgEgwVMSsVP5W51X8cmiUHQESq9WRKB4nreqZJwsWIcNKlORhG4u25Wm6lmDOBmQ0B8hv0KP6uVQ97aouuH52zaz2ctVQTORUKkErPRPcaCJ7dKFcrNoF2i6WOR0S5Nk'}, 'pubcid': 'b1254-152f-12F5-5698-dI1eljK6C7WA', 'pubProvidedId': [{'source': 'domain.com', 'uids': [{'id': 'value read from cookie or local storage', 'atype': 1, 'ext': {'stype': 'ppuid'}}]}, {'source': '3rdpartyprovided.com', 'uids': [{'id': 'value read from cookie or local storage', 'atype': 3, 'ext': {'stype': 'sha256email'}}]}]}, 'userIdAsEids': [{'source': 'audigent.com', 'uids': [{'id': '0000fgclxw05ycn0608xiyi90bwpa0c0evvlif0hv1x0i0ku88il0ntek0o0qskvir0trr70u0wqxiix0zq3u1012pa5j315ogh1618nmsj91bmt41c1elzfjf1hl5r1i1kkc2jl', 'atype': 1}]}, {'source': 'id5-sync.com', 'uids': [{'id': 'ID5@iu-PJX_OQ0d6FJjKS8kYfUpHriD_qpoXJUngedfpNva812If1fHEqHHkamLC89txVxk1i9WGqeQrTX97HFCgv9QDa1M_bkHUBsAWFm-D5r1rYrsfMFFiyqwCAEzqNbvsUZXOYCAQSjPcLxR4of22w-U9_JDRThCGRDV3Fmvc38E', 'atype': 1, 'ext': {'linkType': 0}}]}], 'ortb2Imp': {'ext': {'data': {'adserver': {'name': 'gam', 'adslot': '/19968336/header-bid-tag-0'}, 'pbadslot': '/19968336/header-bid-tag-0'}}}, 'mediaTypes': {'banner': {'sizes': [[320, 480], [320, 50]]}}, 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'transactionId': '71c0d86b-4b47-4aff-a6da-1af0b1712439', 'sizes': [[320, 480], [320, 50]], 'bidId': '264d7969b125a5', 'bidderRequestId': '1c674c14a3889c', 'auctionId': '13a8a3a9-ed3a-4101-9435-4699ee77bb62', 'src': 'client', 'bidRequestsCount': 1, 'bidderRequestsCount': 1, 'bidderWinsCount': 0}]; const c_VALIDBIDAPPREQUESTS = [{'bidder': 'tappx', 'params': {'host': 'testing.ssp.tappx.com\/rtb\/v2\/', 'tappxkey': 'pub-1234-android-1234', 'endpoint': 'ZZ1234PBJS', 'bidfloor': 0.005, 'test': 1, 'app': {'name': 'Tappx Test', 'bundle': 'com.test.tappx', 'domain': 'tappx.com', 'publisher': { 'name': 'Tappx', 'domain': 'tappx.com' }}}, 'userId': {'haloId': '0000fgclxw05ycn0608xiyi90bwpa0c0evvlif0hv1x0i0ku88il0ntek0o0qskvir0trr70u0wqxiix0zq3u1012pa5j315ogh1618nmsj91bmt41c1elzfjf1hl5r1i1kkc2jl', 'id5id': {'uid': 'ID5@iu-PJX_OQ0d6FJjKS8kYfUpHriD_qpoXJUngedfpNva812If1fHEqHHkamLC89txVxk1i9WGqeQrTX97HFCgv9QDa1M_bkHUBsAWFm-D5r1rYrsfMFFiyqwCAEzqNbvsUZXOYCAQSjPcLxR4of22w-U9_JDRThCGRDV3Fmvc38E', 'ext': {'linkType': 0}}, 'intentIqId': 'GIF89a\u0001\u0000\u0001\u0000�\u0000\u0000���\u0000\u0000\u0000!�\u0004\u0001\u0000\u0000\u0000\u0000,\u0000\u0000\u0000\u0000\u0001\u0000\u0001\u0000\u0000\u0002\u0002D\u0001\u0000;', 'lotamePanoramaId': '8003916b61a95b185690ec103bdf4945a70213e01818a5e5d8690b542730755a', 'parrableId': {'eid': '01.1617088921.7faa68d9570a50ea8e4f359e9b99ca4b7509e948a6175b3e5b0b8cbaf5b62424104ccfb0191ca79366de8368ed267b89a68e236df5f41f96f238e4301659e9023fec05e46399fb1ad0a0'}, 'pubcid': 'b7143795-852f-42f0-8864-5ecbea1ade4e', 'pubProvidedId': [{'source': 'domain.com', 'uids': [{'id': 'value read from cookie or local storage', 'atype': 1, 'ext': {'stype': 'ppuid'}}]}, {'source': '3rdpartyprovided.com', 'uids': [{'id': 'value read from cookie or local storage', 'atype': 3, 'ext': {'stype': 'sha256email'}}]}]}, 'userIdAsEids': [{'source': 'audigent.com', 'uids': [{'id': '0000fgclxw05ycn0608xiyi90bwpa0c0evvlif0hv1x0i0ku88il0ntek0o0qskvir0trr70u0wqxiix0zq3u1012pa5j315ogh1618nmsj91bmt41c1elzfjf1hl5r1i1kkc2jl', 'atype': 1}]}, {'source': 'id5-sync.com', 'uids': [{'id': 'ID5@iu-PJX_OQ0d6FJjKS8kYfUpHriD_qpoXJUngedfpNva812If1fHEqHHkamLC89txVxk1i9WGqeQrTX97HFCgv9QDa1M_bkHUBsAWFm-D5r1rYrsfMFFiyqwCAEzqNbvsUZXOYCAQSjPcLxR4of22w-U9_JDRThCGRDV3Fmvc38E', 'atype': 1, 'ext': {'linkType': 0}}]}, {'source': 'intentiq.com', 'uids': [{'id': 'GIF89a\u0001\u0000\u0001\u0000�\u0000\u0000���\u0000\u0000\u0000!�\u0004\u0001\u0000\u0000\u0000\u0000,\u0000\u0000\u0000\u0000\u0001\u0000\u0001\u0000\u0000\u0002\u0002D\u0001\u0000;', 'atype': 1}]}, {'source': 'crwdcntrl.net', 'uids': [{'id': '8003916b61a95b185690ec103bdf4945a70213e01818a5e5d8690b542730755a', 'atype': 1}]}, {'source': 'parrable.com', 'uids': [{'id': '01.1617088921.7faa68d9570a50ea8e4f359e9b99ca4b7509e948a6175b3e5b0b8cbaf5b62424104ccfb0191ca79366de8368ed267b89a68e236df5f41f96f238e4301659e9023fec05e46399fb1ad0a0', 'atype': 1}]}, {'source': 'pubcid.org', 'uids': [{'id': 'b7143795-852f-42f0-8864-5ecbea1ade4e', 'atype': 1}]}, {'source': 'domain.com', 'uids': [{'id': 'value read from cookie or local storage', 'atype': 1, 'ext': {'stype': 'ppuid'}}]}, {'source': '3rdpartyprovided.com', 'uids': [{'id': 'value read from cookie or local storage', 'atype': 3, 'ext': {'stype': 'sha256email'}}]}], 'ortb2Imp': {'ext': {'data': {'adserver': {'name': 'gam', 'adslot': '/19968336/header-bid-tag-0'}, 'pbadslot': '/19968336/header-bid-tag-0'}}}, 'mediaTypes': {'banner': {'sizes': [[320, 480], [320, 50]]}}, 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'transactionId': '71c0d86b-4b47-4aff-a6da-1af0b1712439', 'sizes': [[320, 480], [320, 50]], 'bidId': '264d7969b125a5', 'bidderRequestId': '1c674c14a3889c', 'auctionId': '13a8a3a9-ed3a-4101-9435-4699ee77bb62', 'src': 'client', 'bidRequestsCount': 1, 'bidderRequestsCount': 1, 'bidderWinsCount': 0}]; -const c_BIDDERREQUEST_B = {'bidderCode': 'tappx', 'auctionId': '13a8a3a9-ed3a-4101-9435-4699ee77bb62', 'bidderRequestId': '1c674c14a3889c', 'bids': [{'bidder': 'tappx', 'params': {'host': 'testing.ssp.tappx.com\/rtb\/v2\/', 'tappxkey': 'pub-1234-android-1234', 'endpoint': 'ZZ1234PBJS', 'bidfloor': 0.005, 'test': 1}, 'userId': {'haloId': '0000fgclxw05ycn0608xiyi90bwpa0c0evvlif0hv1x0i0ku88il0ntek0o0qskvir0trr70u0wqxiix0zq3u1012pa5j315ogh1618nmsj91bmt41c1elzfjf1hl5r1i1kkc2jl', 'id5id': {'uid': 'ID5@iu-PJX_OQ0d6FJjKS8kYfUpHriD_qpoXJUngedfpNva812If1fHEqHHkamLC89txVxk1i9WGqeQrTX97HFCgv9QDa1M_bkHUBsAWFm-D5r1rYrsfMFFiyqwCAEzqNbvsUZXOYCAQSjPcLxR4of22w-U9_JDRThCGRDV3Fmvc38E', 'ext': {'linkType': 0}}, 'intentIqId': 'GIF89a\u0000\u0000\u0000\u0000�\u0000\u0000���\u0000\u0000\u0000?�\u0000\u0000\u0000\u0000\u0000\u0000,\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000A\u0000\u0000;', 'lotamePanoramaId': '8003916b61a95b185690ec103bdf4945a70213e01818a5e5d8690b542730755a', 'parrableId': {'eid': '01.1617088921.7faa68d9570a50ea8e4f359e9b99ca4b7509e948a6175b3e5b0b8cbaf5b62424104ccfb0191ca79366de8368ed267b89a68e236df5f41f96f238e4301659e9023fec05e46399fb1ad0a0'}, 'pubcid': 'b7143795-852f-42f0-8864-5ecbea1ade4e', 'pubProvidedId': [{'source': 'domain.com', 'uids': [{'id': 'value read from cookie or local storage', 'atype': 1, 'ext': {'stype': 'ppuid'}}]}, {'source': '3rdpartyprovided.com', 'uids': [{'id': 'value read from cookie or local storage', 'atype': 3, 'ext': {'stype': 'sha256email'}}]}]}, 'userIdAsEids': [{'source': 'audigent.com', 'uids': [{'id': '0000fgclxw05ycn0608xiyi90bwpa0c0evvlif0hv1x0i0ku88il0ntek0o0qskvir0trr70u0wqxiix0zq3u1012pa5j315ogh1618nmsj91bmt41c1elzfjf1hl5r1i1kkc2jl', 'atype': 1}]}, {'source': 'id5-sync.com', 'uids': [{'id': 'ID5@iu-PJX_OQ0d6FJjKS8kYfUpHriD_qpoXJUngedfpNva812If1fHEqHHkamLC89txVxk1i9WGqeQrTX97HFCgv9QDa1M_bkHUBsAWFm-D5r1rYrsfMFFiyqwCAEzqNbvsUZXOYCAQSjPcLxR4of22w-U9_JDRThCGRDV3Fmvc38E', 'atype': 1, 'ext': {'linkType': 0}}]}], 'ortb2Imp': {'ext': {'data': {'adserver': {'name': 'gam', 'adslot': '/19968336/header-bid-tag-0'}, 'pbadslot': '/19968336/header-bid-tag-0'}}}, 'mediaTypes': {'banner': {'sizes': [[320, 480], [320, 50]]}}, 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'transactionId': '71c0d86b-4b47-4aff-a6da-1af0b1712439', 'sizes': [[320, 480], [320, 50]], 'bidId': '264d7969b125a5', 'bidderRequestId': '1c674c14a3889c', 'auctionId': '13a8a3a9-ed3a-4101-9435-4699ee77bb62', 'src': 'client', 'bidRequestsCount': 1, 'bidderRequestsCount': 1, 'bidderWinsCount': 0}], 'auctionStart': 1617088922120, 'timeout': 700, 'refererInfo': {'referer': 'http://localhost:9999/integrationExamples/gpt/gdpr_hello_world.html?pbjs_debug=true', 'reachedTop': true, 'isAmp': false, 'numIframes': 0, 'stack': ['http://localhost:9999/integrationExamples/gpt/gdpr_hello_world.html?pbjs_debug=true'], 'canonicalUrl': null}, 'gdprConsent': {'consentString': c_CONSENTSTRING, 'vendorData': {'metadata': 'BO-JeiTPABAOkAAABAENABA', 'gdprApplies': true, 'hasGlobalScope': false, 'cookieVersion': 1, 'created': '2020-12-09T09:22:09.900Z', 'lastUpdated': '2021-01-14T15:44:03.600Z', 'cmpId': 0, 'cmpVersion': 1, 'consentScreen': 0, 'consentLanguage': 'EN', 'vendorListVersion': 1, 'maxVendorId': 0, 'purposeConsents': {}, 'vendorConsents': {}}, 'gdprApplies': true, 'apiVersion': 1}, 'uspConsent': '1YCC', 'start': 1611308859099}; +const c_BIDDERREQUEST_B = {'bidderCode': 'tappx', 'auctionId': '13a8a3a9-ed3a-4101-9435-4699ee77bb62', 'bidderRequestId': '1c674c14a3889c', 'bids': [{'bidder': 'tappx', 'params': {'host': 'testing.ssp.tappx.com\/rtb\/v2\/', 'tappxkey': 'pub-1234-android-1234', 'endpoint': 'ZZ1234PBJS', 'bidfloor': 0.005, 'test': 1}, 'userId': {'haloId': '0000fgclxw05ycn0608xiyi90bwpa0c0evvlif0hv1x0i0ku88il0ntek0o0qskvir0trr70u0wqxiix0zq3u1012pa5j315ogh1618nmsj91bmt41c1elzfjf1hl5r1i1kkc2jl', 'id5id': {'uid': 'ID5@iu-PJX_OQ0d6FJjKS8kYfUpHriD_qpoXJUngedfpNva812If1fHEqHHkamLC89txVxk1i9WGqeQrTX97HFCgv9QDa1M_bkHUBsAWFm-D5r1rYrsfMFFiyqwCAEzqNbvsUZXOYCAQSjPcLxR4of22w-U9_JDRThCGRDV3Fmvc38E', 'ext': {'linkType': 0}}, 'intentIqId': 'GIF89a\u0000\u0000\u0000\u0000�\u0000\u0000���\u0000\u0000\u0000?�\u0000\u0000\u0000\u0000\u0000\u0000,\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000A\u0000\u0000;', 'lotamePanoramaId': '8003916b61a95b185690ec103bdf4945a70213e01818a5e5d8690b542730755a', 'parrableId': {'eid': '01.1617088921.7faa68d9570a50ea8e4f359e9b99ca4b7509e948a6175b3e5b0b8cbaf5b62424104ccfb0191ca79366de8368ed267b89a68e236df5f41f96f238e4301659e9023fec05e46399fb1ad0a0'}, 'pubcid': 'b7143795-852f-42f0-8864-5ecbea1ade4e', 'pubProvidedId': [{'source': 'domain.com', 'uids': [{'id': 'value read from cookie or local storage', 'atype': 1, 'ext': {'stype': 'ppuid'}}]}, {'source': '3rdpartyprovided.com', 'uids': [{'id': 'value read from cookie or local storage', 'atype': 3, 'ext': {'stype': 'sha256email'}}]}]}, 'userIdAsEids': [{'source': 'audigent.com', 'uids': [{'id': '0000fgclxw05ycn0608xiyi90bwpa0c0evvlif0hv1x0i0ku88il0ntek0o0qskvir0trr70u0wqxiix0zq3u1012pa5j315ogh1618nmsj91bmt41c1elzfjf1hl5r1i1kkc2jl', 'atype': 1}]}, {'source': 'id5-sync.com', 'uids': [{'id': 'ID5@iu-PJX_OQ0d6FJjKS8kYfUpHriD_qpoXJUngedfpNva812If1fHEqHHkamLC89txVxk1i9WGqeQrTX97HFCgv9QDa1M_bkHUBsAWFm-D5r1rYrsfMFFiyqwCAEzqNbvsUZXOYCAQSjPcLxR4of22w-U9_JDRThCGRDV3Fmvc38E', 'atype': 1, 'ext': {'linkType': 0}}]}], 'ortb2Imp': {'ext': {'data': {'adserver': {'name': 'gam', 'adslot': '/19968336/header-bid-tag-0'}, 'pbadslot': '/19968336/header-bid-tag-0'}}}, 'mediaTypes': {'banner': {'sizes': [[320, 480], [320, 50]]}}, 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'transactionId': '71c0d86b-4b47-4aff-a6da-1af0b1712439', 'sizes': [[320, 480], [320, 50]], 'bidId': '264d7969b125a5', 'bidderRequestId': '1c674c14a3889c', 'auctionId': '13a8a3a9-ed3a-4101-9435-4699ee77bb62', 'src': 'client', 'bidRequestsCount': 1, 'bidderRequestsCount': 1, 'bidderWinsCount': 0}], 'auctionStart': 1617088922120, 'timeout': 700, 'refererInfo': {'page': 'http://localhost:9999/integrationExamples/gpt/gdpr_hello_world.html?pbjs_debug=true', 'reachedTop': true, 'isAmp': false, 'numIframes': 0, 'stack': ['http://localhost:9999/integrationExamples/gpt/gdpr_hello_world.html?pbjs_debug=true'], 'canonicalUrl': null}, 'gdprConsent': {'consentString': c_CONSENTSTRING, 'vendorData': {'metadata': 'BO-JeiTPABAOkAAABAENABA', 'gdprApplies': true, 'hasGlobalScope': false, 'cookieVersion': 1, 'created': '2020-12-09T09:22:09.900Z', 'lastUpdated': '2021-01-14T15:44:03.600Z', 'cmpId': 0, 'cmpVersion': 1, 'consentScreen': 0, 'consentLanguage': 'EN', 'vendorListVersion': 1, 'maxVendorId': 0, 'purposeConsents': {}, 'vendorConsents': {}}, 'gdprApplies': true, 'apiVersion': 1}, 'uspConsent': '1YCC', 'start': 1611308859099}; const c_BIDDERREQUEST_V = {'method': 'POST', 'url': 'https://testing.ssp.tappx.com/rtb/v2//VZ12TESTCTV?type_cnn=prebidjs&v=0.1.10329', 'data': '{"site":{"name":"localhost","bundle":"localhost","domain":"localhost"},"user":{"ext":{}},"id":"0fecfa84-c541-49f8-8c45-76b90fddc30e","test":1,"at":1,"tmax":1000,"bidder":"tappx","imp":[{"video":{"mimes":["video/mp4","application/javascript"],"minduration":3,"maxduration":30,"startdelay":5,"playbackmethod":[1,3],"api":[1,2],"protocols":[2,3],"battr":[13,14],"linearity":1,"placement":2,"minbitrate":10,"maxbitrate":10,"w":320,"h":250},"id":"2398241a5a860b","tagid":"localhost_typeAdBanVid_windows","secure":1,"bidfloor":0.005,"ext":{"bidder":{"tappxkey":"pub-1234-desktop-1234","endpoint":"vz34906po","host":"https://vz34906po.pub.tappx.com/rtb/","bidfloor":0.005}}}],"device":{"os":"windows","ip":"peer","ua":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36","h":864,"w":1536,"dnt":0,"language":"en","make":"Google Inc."},"params":{"host":"tappx.com","bidfloor":0.005},"regs":{"gdpr":0,"ext":{}}}', 'bids': {'bidder': 'tappx', 'params': {'host': 'testing.ssp.tappx.com/rtb/v2/', 'tappxkey': 'pub-1234-desktop-1234', 'endpoint': 'VZ12TESTCTV', 'bidfloor': 0.005, 'test': true}, 'crumbs': {'pubcid': 'dccfe922-3823-4676-b7b2-e5ed8743154e'}, 'ortb2Imp': {'ext': {'data': {'pbadslot': 'video-ad-div'}}}, 'renderer': {'options': {'text': 'Tappx Outstream Video'}}, 'mediaTypes': {'video': {'mimes': ['video/mp4', 'application/javascript'], 'minduration': 3, 'maxduration': 30, 'startdelay': 5, 'playbackmethod': [1, 3], 'api': [1, 2], 'protocols': [2, 3], 'battr': [13, 14], 'linearity': 1, 'placement': 2, 'minbitrate': 10, 'maxbitrate': 10, 'w': 320, 'h': 250}}, 'adUnitCode': 'video-ad-div', 'transactionId': 'ed41c805-d14c-49c3-954d-26b98b2aa2c2', 'sizes': [[320, 250]], 'bidId': '28f49c71b13f2f', 'bidderRequestId': '1401710496dc7', 'auctionId': 'e807363f-3095-43a8-a4a6-f44196cb7318', 'src': 'client', 'bidRequestsCount': 1, 'bidderRequestsCount': 1, 'bidderWinsCount': 0}} const c_BIDDERREQUEST_VOutstream = {'method': 'POST', 'url': 'https://testing.ssp.tappx.com/rtb/v2//VZ12TESTCTV?type_cnn=prebidjs&v=0.1.10329', 'data': '{"site":{"name":"localhost","bundle":"localhost","domain":"localhost"},"user":{"ext":{}},"id":"0fecfa84-c541-49f8-8c45-76b90fddc30e","test":1,"at":1,"tmax":1000,"bidder":"tappx","imp":[{"video":{"context": "outstream","playerSize":[640, 480],"mimes":["video/mp4","application/javascript"],"minduration":3,"maxduration":30,"startdelay":5,"playbackmethod":[1,3],"api":[1,2],"protocols":[2,3],"battr":[13,14],"linearity":1,"placement":2,"minbitrate":10,"maxbitrate":10,"w":320,"h":250},"id":"2398241a5a860b","tagid":"localhost_typeAdBanVid_windows","secure":1,"bidfloor":0.005,"ext":{"bidder":{"tappxkey":"pub-1234-desktop-1234","endpoint":"vz34906po","host":"https://vz34906po.pub.tappx.com/rtb/","bidfloor":0.005}}}],"device":{"os":"windows","ip":"peer","ua":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36","h":864,"w":1536,"dnt":0,"language":"en","make":"Google Inc."},"params":{"host":"tappx.com","bidfloor":0.005},"regs":{"gdpr":0,"ext":{}}}', 'bids': {'bidder': 'tappx', 'params': {'host': 'testing.ssp.tappx.com/rtb/v2/', 'tappxkey': 'pub-1234-desktop-1234', 'endpoint': 'VZ12TESTCTV', 'bidfloor': 0.005, 'test': true}, 'crumbs': {'pubcid': 'dccfe922-3823-4676-b7b2-e5ed8743154e'}, 'ortb2Imp': {'ext': {'data': {'pbadslot': 'video-ad-div'}}}, 'renderer': {'options': {'text': 'Tappx Outstream Video'}}, 'mediaTypes': {'video': {'mimes': ['video/mp4', 'application/javascript'], 'minduration': 3, 'maxduration': 30, 'startdelay': 5, 'playbackmethod': [1, 3], 'api': [1, 2], 'protocols': [2, 3], 'battr': [13, 14], 'linearity': 1, 'placement': 2, 'minbitrate': 10, 'maxbitrate': 10, 'w': 320, 'h': 250}}, 'adUnitCode': 'video-ad-div', 'transactionId': 'ed41c805-d14c-49c3-954d-26b98b2aa2c2', 'sizes': [[320, 250]], 'bidId': '28f49c71b13f2f', 'bidderRequestId': '1401710496dc7', 'auctionId': 'e807363f-3095-43a8-a4a6-f44196cb7318', 'src': 'client', 'bidRequestsCount': 1, 'bidderRequestsCount': 1, 'bidderWinsCount': 0}} diff --git a/test/spec/modules/teadsBidAdapter_spec.js b/test/spec/modules/teadsBidAdapter_spec.js index 8ebe7b907f5..a8315050970 100644 --- a/test/spec/modules/teadsBidAdapter_spec.js +++ b/test/spec/modules/teadsBidAdapter_spec.js @@ -166,7 +166,7 @@ describe('teadsBidAdapter', () => { const bidRequest = Object.assign({}, bidRequests[0]) const bidderRequest = { refererInfo: { - referer: 'https://example.com/page.html', + page: 'https://example.com/page.html', reachedTop: true, numIframes: 2 } diff --git a/test/spec/modules/tpmnBidAdapter_spec.js b/test/spec/modules/tpmnBidAdapter_spec.js index 468769c2573..e2b14b18f61 100644 --- a/test/spec/modules/tpmnBidAdapter_spec.js +++ b/test/spec/modules/tpmnBidAdapter_spec.js @@ -98,7 +98,7 @@ describe('tpmnAdapterTests', function () { const tempBidRequests = [bid]; const tempBidderRequest = { refererInfo: { - referer: 'http://localhost/test', + page: 'http://localhost/test', site: { domain: 'localhost', page: 'http://localhost/test' diff --git a/test/spec/modules/tripleliftBidAdapter_spec.js b/test/spec/modules/tripleliftBidAdapter_spec.js index f4a07f536e1..733265b0bae 100644 --- a/test/spec/modules/tripleliftBidAdapter_spec.js +++ b/test/spec/modules/tripleliftBidAdapter_spec.js @@ -370,7 +370,7 @@ describe('triplelift adapter', function () { } ], refererInfo: { - referer: 'https://examplereferer.com' + page: 'https://examplereferer.com' }, gdprConsent: { consentString: GDPR_CONSENT_STR, diff --git a/test/spec/modules/ttdBidAdapter_spec.js b/test/spec/modules/ttdBidAdapter_spec.js index b99bb03f270..b933a5dd0c9 100644 --- a/test/spec/modules/ttdBidAdapter_spec.js +++ b/test/spec/modules/ttdBidAdapter_spec.js @@ -212,7 +212,7 @@ describe('ttdBidAdapter', function () { 'auctionStart': 1540945362095, 'timeout': 3000, 'refererInfo': { - 'referer': 'https://www.example.com/test', + 'page': 'https://www.example.com/test', 'reachedTop': true, 'numIframes': 0, 'stack': [ diff --git a/test/spec/modules/undertoneBidAdapter_spec.js b/test/spec/modules/undertoneBidAdapter_spec.js index c24f63c0b99..8766307b3bd 100644 --- a/test/spec/modules/undertoneBidAdapter_spec.js +++ b/test/spec/modules/undertoneBidAdapter_spec.js @@ -152,13 +152,13 @@ const bidReqUserIds = [{ const bidderReq = { refererInfo: { - referer: 'http://prebid.org/dev-docs/bidder-adaptor.html' + topmostLocation: 'http://prebid.org/dev-docs/bidder-adaptor.html' } }; const bidderReqGdpr = { refererInfo: { - referer: 'http://prebid.org/dev-docs/bidder-adaptor.html' + topmostLocation: 'http://prebid.org/dev-docs/bidder-adaptor.html' }, gdprConsent: { gdprApplies: true, @@ -168,14 +168,14 @@ const bidderReqGdpr = { const bidderReqCcpa = { refererInfo: { - referer: 'http://prebid.org/dev-docs/bidder-adaptor.html' + topmostLocation: 'http://prebid.org/dev-docs/bidder-adaptor.html' }, uspConsent: 'NY12' }; const bidderReqCcpaAndGdpr = { refererInfo: { - referer: 'http://prebid.org/dev-docs/bidder-adaptor.html' + topmostLocation: 'http://prebid.org/dev-docs/bidder-adaptor.html' }, gdprConsent: { gdprApplies: true, @@ -343,18 +343,18 @@ describe('Undertone Adapter', () => { }); it('should send request to correct url via POST not in GDPR or CCPA', function () { const request = spec.buildRequests(bidReq, bidderReq); - const domainStart = bidderReq.refererInfo.referer.indexOf('//'); - const domainEnd = bidderReq.refererInfo.referer.indexOf('/', domainStart + 2); - const domain = bidderReq.refererInfo.referer.substring(domainStart + 2, domainEnd); + const domainStart = bidderReq.refererInfo.topmostLocation.indexOf('//'); + const domainEnd = bidderReq.refererInfo.topmostLocation.indexOf('/', domainStart + 2); + const domain = bidderReq.refererInfo.topmostLocation.substring(domainStart + 2, domainEnd); const REQ_URL = `${URL}?pid=${bidReq[0].params.publisherId}&domain=${domain}`; expect(request.url).to.equal(REQ_URL); expect(request.method).to.equal('POST'); }); it('should send request to correct url via POST when in GDPR', function () { const request = spec.buildRequests(bidReq, bidderReqGdpr); - const domainStart = bidderReq.refererInfo.referer.indexOf('//'); - const domainEnd = bidderReq.refererInfo.referer.indexOf('/', domainStart + 2); - const domain = bidderReq.refererInfo.referer.substring(domainStart + 2, domainEnd); + const domainStart = bidderReq.refererInfo.topmostLocation.indexOf('//'); + const domainEnd = bidderReq.refererInfo.topmostLocation.indexOf('/', domainStart + 2); + const domain = bidderReq.refererInfo.topmostLocation.substring(domainStart + 2, domainEnd); let gdpr = bidderReqGdpr.gdprConsent.gdprApplies ? 1 : 0; const REQ_URL = `${URL}?pid=${bidReq[0].params.publisherId}&domain=${domain}&gdpr=${gdpr}&gdprstr=${bidderReqGdpr.gdprConsent.consentString}`; expect(request.url).to.equal(REQ_URL); @@ -362,9 +362,9 @@ describe('Undertone Adapter', () => { }); it('should send request to correct url via POST when in CCPA', function () { const request = spec.buildRequests(bidReq, bidderReqCcpa); - const domainStart = bidderReq.refererInfo.referer.indexOf('//'); - const domainEnd = bidderReq.refererInfo.referer.indexOf('/', domainStart + 2); - const domain = bidderReq.refererInfo.referer.substring(domainStart + 2, domainEnd); + const domainStart = bidderReq.refererInfo.topmostLocation.indexOf('//'); + const domainEnd = bidderReq.refererInfo.topmostLocation.indexOf('/', domainStart + 2); + const domain = bidderReq.refererInfo.topmostLocation.substring(domainStart + 2, domainEnd); let ccpa = bidderReqCcpa.uspConsent; const REQ_URL = `${URL}?pid=${bidReq[0].params.publisherId}&domain=${domain}&ccpa=${ccpa}`; expect(request.url).to.equal(REQ_URL); @@ -372,9 +372,9 @@ describe('Undertone Adapter', () => { }); it('should send request to correct url via POST when in GDPR and CCPA', function () { const request = spec.buildRequests(bidReq, bidderReqCcpaAndGdpr); - const domainStart = bidderReq.refererInfo.referer.indexOf('//'); - const domainEnd = bidderReq.refererInfo.referer.indexOf('/', domainStart + 2); - const domain = bidderReq.refererInfo.referer.substring(domainStart + 2, domainEnd); + const domainStart = bidderReq.refererInfo.topmostLocation.indexOf('//'); + const domainEnd = bidderReq.refererInfo.topmostLocation.indexOf('/', domainStart + 2); + const domain = bidderReq.refererInfo.topmostLocation.substring(domainStart + 2, domainEnd); let ccpa = bidderReqCcpaAndGdpr.uspConsent; let gdpr = bidderReqCcpaAndGdpr.gdprConsent.gdprApplies ? 1 : 0; const REQ_URL = `${URL}?pid=${bidReq[0].params.publisherId}&domain=${domain}&gdpr=${gdpr}&gdprstr=${bidderReqGdpr.gdprConsent.consentString}&ccpa=${ccpa}`; diff --git a/test/spec/modules/unicornBidAdapter_spec.js b/test/spec/modules/unicornBidAdapter_spec.js index d10324a8c86..0abb09bfb78 100644 --- a/test/spec/modules/unicornBidAdapter_spec.js +++ b/test/spec/modules/unicornBidAdapter_spec.js @@ -270,7 +270,7 @@ const bidderRequest = { auctionStart: 1581064124172, timeout: 1000, refererInfo: { - referer: 'https://uni-corn.net/', + ref: 'https://uni-corn.net/', reachedTop: true, numIframes: 0, stack: ['https://uni-corn.net/'] diff --git a/test/spec/modules/ventesBidAdapter_spec.js b/test/spec/modules/ventesBidAdapter_spec.js index 219c24deced..ffe4ef79cfb 100644 --- a/test/spec/modules/ventesBidAdapter_spec.js +++ b/test/spec/modules/ventesBidAdapter_spec.js @@ -28,7 +28,8 @@ describe('Ventes Adapter', function () { adUnitContext: { refererInfo: { - referer: 'https://ventesavenues.in', + page: 'https://ventesavenues.in', + domain: 'ventesavenues.in', } }, @@ -373,7 +374,7 @@ describe('Ventes Adapter', function () { expect(serverRequests[0].data).to.exist.and.to.be.an('object'); expect(serverRequests[0].data.id).to.exist.and.to.be.an('string').and.to.equal(adUnits[0].bidderRequestId); expect(serverRequests[0].data.site).to.exist.and.to.be.an('object'); - expect(serverRequests[0].data.site.page).to.exist.and.to.be.an('string').and.to.equal(adUnitContext.refererInfo.referer); + expect(serverRequests[0].data.site.page).to.exist.and.to.be.an('string').and.to.equal(adUnitContext.refererInfo.page); expect(serverRequests[0].data.site.domain).to.exist.and.to.be.an('string').and.to.equal('ventesavenues.in'); expect(serverRequests[0].data.site.name).to.exist.and.to.be.an('string').and.to.equal('ventesavenues.in'); }); diff --git a/test/spec/modules/vidazooBidAdapter_spec.js b/test/spec/modules/vidazooBidAdapter_spec.js index 8963815826d..87107db4dc3 100644 --- a/test/spec/modules/vidazooBidAdapter_spec.js +++ b/test/spec/modules/vidazooBidAdapter_spec.js @@ -48,7 +48,7 @@ const BIDDER_REQUEST = { }, 'uspConsent': 'consent_string', 'refererInfo': { - 'referer': 'https://www.greatsite.com' + 'page': 'https://www.greatsite.com' } }; @@ -147,7 +147,7 @@ describe('VidazooBidAdapter', function () { }); it('should build request for each size', function () { - const hashUrl = hashCode(BIDDER_REQUEST.refererInfo.referer); + const hashUrl = hashCode(BIDDER_REQUEST.refererInfo.page); const requests = adapter.buildRequests([BID], BIDDER_REQUEST); expect(requests).to.have.length(1); expect(requests[0]).to.deep.equal({ diff --git a/test/spec/modules/vidoomyBidAdapter_spec.js b/test/spec/modules/vidoomyBidAdapter_spec.js index 8aa127faef2..61b7f2fad7d 100644 --- a/test/spec/modules/vidoomyBidAdapter_spec.js +++ b/test/spec/modules/vidoomyBidAdapter_spec.js @@ -95,7 +95,8 @@ describe('vidoomyBidAdapter', function() { refererInfo: { numIframes: 0, reachedTop: true, - referer: 'http://example.com', + domain: 'example.com', + page: 'http://example.com', stack: ['http://example.com'] } }; diff --git a/test/spec/modules/visxBidAdapter_spec.js b/test/spec/modules/visxBidAdapter_spec.js index 4aaaf996f58..b8a66e7c3b9 100755 --- a/test/spec/modules/visxBidAdapter_spec.js +++ b/test/spec/modules/visxBidAdapter_spec.js @@ -85,10 +85,10 @@ describe('VisxAdapter', function () { const bidderRequest = { timeout: 3000, refererInfo: { - referer: 'https://example.com' + page: 'https://example.com' } }; - const referrer = bidderRequest.refererInfo.referer; + const referrer = bidderRequest.refererInfo.page; const schainObject = { ver: '1.0', nodes: [ @@ -425,10 +425,10 @@ describe('VisxAdapter', function () { const bidderRequest = { timeout: 3000, refererInfo: { - referer: 'https://example.com' + page: 'https://example.com' } }; - const referrer = bidderRequest.refererInfo.referer; + const referrer = bidderRequest.refererInfo.page; const bidRequests = [ { 'bidder': 'visx', @@ -489,10 +489,10 @@ describe('VisxAdapter', function () { const bidderRequest = { timeout: 3000, refererInfo: { - referer: 'https://example.com' + page: 'https://example.com' } }; - const referrer = bidderRequest.refererInfo.referer; + const referrer = bidderRequest.refererInfo.page; const bidRequests = [ { 'bidder': 'visx', diff --git a/test/spec/modules/voxBidAdapter_spec.js b/test/spec/modules/voxBidAdapter_spec.js index 6906c7dbba4..923b0465e6c 100644 --- a/test/spec/modules/voxBidAdapter_spec.js +++ b/test/spec/modules/voxBidAdapter_spec.js @@ -15,7 +15,7 @@ function getSlotConfigs(mediaTypes, params) { describe('VOX Adapter', function() { const PLACE_ID = '5af45ad34d506ee7acad0c26'; const bidderRequest = { - refererInfo: { referer: 'referer' } + refererInfo: { page: 'referer' } } const bannerMandatoryParams = { placementId: PLACE_ID, diff --git a/test/spec/modules/winrBidAdapter_spec.js b/test/spec/modules/winrBidAdapter_spec.js index 445ccc9d19f..174f600fa06 100644 --- a/test/spec/modules/winrBidAdapter_spec.js +++ b/test/spec/modules/winrBidAdapter_spec.js @@ -434,7 +434,7 @@ describe('WinrAdapter', function () { const bidRequest = Object.assign({}, bidRequests[0]) const bidderRequest = { refererInfo: { - referer: 'https://example.com/page.html', + topmostLocation: 'https://example.com/page.html', reachedTop: true, numIframes: 2, stack: [ diff --git a/test/spec/modules/yahoosspBidAdapter_spec.js b/test/spec/modules/yahoosspBidAdapter_spec.js index 4b157865c06..3c958f2cdc8 100644 --- a/test/spec/modules/yahoosspBidAdapter_spec.js +++ b/test/spec/modules/yahoosspBidAdapter_spec.js @@ -81,7 +81,7 @@ let generateBidderRequest = (bidRequestArray, adUnitCode, ortb2 = {}) => { bidderRequestId: '112f1c7c5d399a', bids: bidRequestArray, refererInfo: { - referer: 'https://publisher-test.com', + page: 'https://publisher-test.com', reachedTop: true, isAmp: false, numIframes: 0, @@ -827,7 +827,7 @@ describe('YahooSSP Bid Adapter:', () => { const data = spec.buildRequests(validBidRequests, bidderRequest).data; expect(data.site).to.deep.equal({ id: bidderRequest.bids[0].params.dcn, - page: bidderRequest.refererInfo.referer + page: bidderRequest.refererInfo.page }); expect(data.device).to.deep.equal({ diff --git a/test/spec/modules/yandexBidAdapter_spec.js b/test/spec/modules/yandexBidAdapter_spec.js index 833f883fb7c..f4b15d6dbc4 100644 --- a/test/spec/modules/yandexBidAdapter_spec.js +++ b/test/spec/modules/yandexBidAdapter_spec.js @@ -56,8 +56,6 @@ describe('Yandex adapter', function () { }); describe('buildRequests', function () { - const refererUrl = 'https://yandex.ru/secure-ads'; - const gdprConsent = { gdprApplies: 1, consentString: 'concent-string', @@ -66,7 +64,7 @@ describe('Yandex adapter', function () { const bidderRequest = { refererInfo: { - referer: refererUrl + domain: 'yandex.ru' }, gdprConsent }; diff --git a/test/spec/modules/yieldlabBidAdapter_spec.js b/test/spec/modules/yieldlabBidAdapter_spec.js index 2811d6b1370..6ec1e995bfc 100644 --- a/test/spec/modules/yieldlabBidAdapter_spec.js +++ b/test/spec/modules/yieldlabBidAdapter_spec.js @@ -238,7 +238,7 @@ describe('yieldlabBidAdapter', function () { canonicalUrl: undefined, numIframes: 0, reachedTop: true, - referer: 'https://www.yieldlab.de/test?with=querystring', + page: 'https://www.yieldlab.de/test?with=querystring', stack: ['https://www.yieldlab.de/test?with=querystring'] } }) diff --git a/test/spec/modules/yieldoneAnalyticsAdapter_spec.js b/test/spec/modules/yieldoneAnalyticsAdapter_spec.js index 81a6365bba2..f77bc7bc7ba 100644 --- a/test/spec/modules/yieldoneAnalyticsAdapter_spec.js +++ b/test/spec/modules/yieldoneAnalyticsAdapter_spec.js @@ -46,7 +46,7 @@ describe('Yieldone Prebid Analytic', function () { { bidderCode: 'biddertest_1', auctionId: auctionId, - refererInfo: {referer: testReferrer}, + refererInfo: {page: testReferrer}, bids: [ { adUnitCode: '0000', @@ -71,7 +71,7 @@ describe('Yieldone Prebid Analytic', function () { { bidderCode: 'biddertest_2', auctionId: auctionId, - refererInfo: {referer: testReferrer}, + refererInfo: {page: testReferrer}, bids: [ { adUnitCode: '0000', @@ -87,7 +87,7 @@ describe('Yieldone Prebid Analytic', function () { { bidderCode: 'biddertest_3', auctionId: auctionId, - refererInfo: {referer: testReferrer}, + refererInfo: {page: testReferrer}, bids: [ { adUnitCode: '0000', diff --git a/test/spec/modules/zetaBidAdapter_spec.js b/test/spec/modules/zetaBidAdapter_spec.js index 25350725dee..529fb8e8d31 100644 --- a/test/spec/modules/zetaBidAdapter_spec.js +++ b/test/spec/modules/zetaBidAdapter_spec.js @@ -10,7 +10,7 @@ describe('Zeta Bid Adapter', function() { } }, refererInfo: { - referer: 'testprebid.com' + page: 'testprebid.com' }, params: { placement: 12345, diff --git a/test/spec/modules/zeta_global_sspBidAdapter_spec.js b/test/spec/modules/zeta_global_sspBidAdapter_spec.js index d439da8e711..e67629cb4f7 100644 --- a/test/spec/modules/zeta_global_sspBidAdapter_spec.js +++ b/test/spec/modules/zeta_global_sspBidAdapter_spec.js @@ -53,7 +53,8 @@ describe('Zeta Ssp Bid Adapter', function () { } }, refererInfo: { - referer: 'http://www.zetaglobal.com/page?param=value' + page: 'http://www.zetaglobal.com/page?param=value', + domain: 'www.zetaglobal.com', }, gdprConsent: { gdprApplies: 1, @@ -108,7 +109,7 @@ describe('Zeta Ssp Bid Adapter', function () { const request = spec.buildRequests(bannerRequest, bannerRequest[0]); const payload = JSON.parse(request.data); expect(payload.site.page).to.eql('http://www.zetaglobal.com/page?param=value'); - expect(payload.site.domain).to.eql(window.location.origin); // config.js -> DEFAULT_PUBLISHER_DOMAIN + expect(payload.site.domain).to.eql('zetaglobal.com'); }); it('Test the request processing function', function () { diff --git a/test/spec/refererDetection_spec.js b/test/spec/refererDetection_spec.js index a404e4f883e..3f33d1646a1 100644 --- a/test/spec/refererDetection_spec.js +++ b/test/spec/refererDetection_spec.js @@ -1,6 +1,6 @@ -import { detectReferer } from 'src/refererDetection.js'; -import { config } from 'src/config.js'; -import { expect } from 'chai'; +import {detectReferer, ensureProtocol, parseDomain} from 'src/refererDetection.js'; +import {config} from 'src/config.js'; +import {expect} from 'chai'; /** * Build a walkable linked list of window-like objects for testing. @@ -11,13 +11,13 @@ import { expect } from 'chai'; * @param {boolean} [ancestorOrigins] * @returns {Object} */ -function buildWindowTree(urls, topReferrer = '', canonicalUrl = null, ancestorOrigins = false) { +function buildWindowTree(urls, topReferrer = null, canonicalUrl = null, ancestorOrigins = false) { /** - * Find the origin from a given fully-qualified URL. - * - * @param {string} url The fully qualified URL - * @returns {string|null} - */ + * Find the origin from a given fully-qualified URL. + * + * @param {string} url The fully qualified URL + * @returns {string|null} + */ function getOrigin(url) { const originRegex = new RegExp('^(https?://[^/]+/?)'); @@ -30,83 +30,89 @@ function buildWindowTree(urls, topReferrer = '', canonicalUrl = null, ancestorOr return null; } - let previousWindow; - const myOrigin = getOrigin(urls[urls.length - 1]); + const inaccessibles = []; - const windowList = urls.map((url, index) => { - const theirOrigin = getOrigin(url), - sameOrigin = (myOrigin === theirOrigin); - - const win = {}; - - if (sameOrigin) { - win.location = { - href: url - }; + let previousWindow, topWindow; + const topOrigin = getOrigin(urls[0]); - if (ancestorOrigins) { - win.location.ancestorOrigins = urls.slice(0, index).reverse().map(getOrigin); + const windowList = urls.map((url, index) => { + const thisOrigin = getOrigin(url), + sameOriginAsPrevious = index === 0 ? true : (getOrigin(urls[index - 1]) === thisOrigin), + sameOriginAsTop = thisOrigin === topOrigin; + + const win = { + location: { + href: url, + }, + document: { + referrer: index === 0 ? topReferrer : urls[index - 1] } - - if (index === 0) { - win.document = { - referrer: topReferrer - }; - - if (canonicalUrl) { - win.document.querySelector = function(selector) { - if (selector === "link[rel='canonical']") { - return { - href: canonicalUrl - }; - } - - return null; + }; + + if (topWindow == null) { + topWindow = win; + win.document.querySelector = function (selector) { + if (selector === 'link[rel=\'canonical\']') { + return { + href: canonicalUrl }; } - } else { - win.document = { - referrer: urls[index - 1] - }; - } + return null; + }; } + if (sameOriginAsPrevious) { + win.parent = previousWindow; + } else { + win.parent = inaccessibles[inaccessibles.length - 1]; + } + if (ancestorOrigins) { + win.location.ancestorOrigins = urls.slice(0, index).reverse().map(getOrigin); + } + win.top = sameOriginAsTop ? topWindow : inaccessibles[0]; + + const inWin = {parent: inaccessibles[inaccessibles.length - 1], top: inaccessibles[0]}; + if (index === 0) { + inWin.top = inWin; + } + ['document', 'location'].forEach((prop) => { + Object.defineProperty(inWin, prop, { + get: function () { + throw new Error('cross-origin access'); + } + }); + }); + inaccessibles.push(inWin); previousWindow = win; return win; }); - const topWindow = windowList[0]; - - previousWindow = null; - - windowList.forEach((win) => { - win.top = topWindow; - win.parent = previousWindow || topWindow; - previousWindow = win; - }); - return windowList[windowList.length - 1]; } describe('Referer detection', () => { + afterEach(function () { + config.resetConfig(); + }); + describe('Non cross-origin scenarios', () => { describe('No iframes', () => { - afterEach(function () { - config.resetConfig(); - }); - it('Should return the current window location and no canonical URL', () => { const testWindow = buildWindowTree(['https://example.com/some/page'], 'https://othersite.com/'), result = detectReferer(testWindow)(); - expect(result).to.deep.equal({ - referer: 'https://example.com/some/page', + sinon.assert.match(result, { + topmostLocation: 'https://example.com/some/page', + location: 'https://example.com/some/page', reachedTop: true, isAmp: false, numIframes: 0, stack: ['https://example.com/some/page'], - canonicalUrl: null + canonicalUrl: null, + page: 'https://example.com/some/page', + ref: 'https://othersite.com/', + domain: 'example.com', }); }); @@ -114,13 +120,17 @@ describe('Referer detection', () => { const testWindow = buildWindowTree(['https://example.com/some/page'], 'https://othersite.com/', 'https://example.com/canonical/page'), result = detectReferer(testWindow)(); - expect(result).to.deep.equal({ - referer: 'https://example.com/some/page', + sinon.assert.match(result, { + topmostLocation: 'https://example.com/some/page', + location: 'https://example.com/some/page', reachedTop: true, isAmp: false, numIframes: 0, stack: ['https://example.com/some/page'], - canonicalUrl: 'https://example.com/canonical/page' + canonicalUrl: 'https://example.com/canonical/page', + page: 'https://example.com/canonical/page', + ref: 'https://othersite.com/', + domain: 'example.com' }); }); }); @@ -130,8 +140,9 @@ describe('Referer detection', () => { const testWindow = buildWindowTree(['https://example.com/some/page', 'https://example.com/other/page', 'https://example.com/third/page'], 'https://othersite.com/'), result = detectReferer(testWindow)(); - expect(result).to.deep.equal({ - referer: 'https://example.com/some/page', + sinon.assert.match(result, { + topmostLocation: 'https://example.com/some/page', + location: 'https://example.com/some/page', reachedTop: true, isAmp: false, numIframes: 2, @@ -140,7 +151,10 @@ describe('Referer detection', () => { 'https://example.com/other/page', 'https://example.com/third/page' ], - canonicalUrl: null + canonicalUrl: null, + page: 'https://example.com/some/page', + ref: 'https://othersite.com/', + domain: 'example.com' }); }); @@ -148,8 +162,9 @@ describe('Referer detection', () => { const testWindow = buildWindowTree(['https://example.com/some/page', 'https://example.com/other/page', 'https://example.com/third/page'], 'https://othersite.com/', 'https://example.com/canonical/page'), result = detectReferer(testWindow)(); - expect(result).to.deep.equal({ - referer: 'https://example.com/some/page', + sinon.assert.match(result, { + topmostLocation: 'https://example.com/some/page', + location: 'https://example.com/some/page', reachedTop: true, isAmp: false, numIframes: 2, @@ -158,18 +173,22 @@ describe('Referer detection', () => { 'https://example.com/other/page', 'https://example.com/third/page' ], - canonicalUrl: 'https://example.com/canonical/page' + canonicalUrl: 'https://example.com/canonical/page', + page: 'https://example.com/canonical/page', + ref: 'https://othersite.com/', + domain: 'example.com' }); }); - it('Should override canonical URL with config pageUrl', () => { - config.setConfig({'pageUrl': 'testUrl.com'}); + it('Should override canonical URL (and page) with config pageUrl', () => { + config.setConfig({'pageUrl': 'https://testurl.com'}); const testWindow = buildWindowTree(['https://example.com/some/page', 'https://example.com/other/page', 'https://example.com/third/page'], 'https://othersite.com/', 'https://example.com/canonical/page'), result = detectReferer(testWindow)(); - expect(result).to.deep.equal({ - referer: 'https://example.com/some/page', + sinon.assert.match(result, { + topmostLocation: 'https://example.com/some/page', + location: 'https://example.com/some/page', reachedTop: true, isAmp: false, numIframes: 2, @@ -178,7 +197,10 @@ describe('Referer detection', () => { 'https://example.com/other/page', 'https://example.com/third/page' ], - canonicalUrl: 'testUrl.com' + canonicalUrl: 'https://testurl.com', + page: 'https://testurl.com', + ref: 'https://othersite.com/', + domain: 'testurl.com' }); }); }); @@ -189,8 +211,9 @@ describe('Referer detection', () => { const testWindow = buildWindowTree(['https://example.com/some/page', 'https://safe.frame/ad'], 'https://othersite.com/', 'https://canonical.example.com/'), result = detectReferer(testWindow)(); - expect(result).to.deep.equal({ - referer: 'https://example.com/some/page', + sinon.assert.match(result, { + location: 'https://example.com/some/page', + topmostLocation: 'https://example.com/some/page', reachedTop: true, isAmp: false, numIframes: 1, @@ -198,7 +221,10 @@ describe('Referer detection', () => { 'https://example.com/some/page', 'https://safe.frame/ad' ], - canonicalUrl: null + canonicalUrl: null, + page: 'https://example.com/some/page', + ref: null, + domain: 'example.com' }); }); @@ -206,8 +232,9 @@ describe('Referer detection', () => { const testWindow = buildWindowTree(['https://example.com/some/page', 'https://safe.frame/ad', 'https://safe.frame/ad'], 'https://othersite.com/', 'https://canonical.example.com/'), result = detectReferer(testWindow)(); - expect(result).to.deep.equal({ - referer: 'https://example.com/some/page', + sinon.assert.match(result, { + topmostLocation: 'https://example.com/some/page', + location: 'https://example.com/some/page', reachedTop: true, isAmp: false, numIframes: 2, @@ -216,16 +243,20 @@ describe('Referer detection', () => { 'https://safe.frame/ad', 'https://safe.frame/ad' ], - canonicalUrl: null + canonicalUrl: null, + page: 'https://example.com/some/page', + ref: null, + domain: 'example.com', }); }); - it('Should return the second iframe location with three cross-origin windows and no ancessorOrigins', () => { + it('Should return the second iframe location with three cross-origin windows and no ancestorOrigins', () => { const testWindow = buildWindowTree(['https://example.com/some/page', 'https://safe.frame/ad', 'https://otherfr.ame/ad'], 'https://othersite.com/', 'https://canonical.example.com/'), result = detectReferer(testWindow)(); - expect(result).to.deep.equal({ - referer: 'https://safe.frame/ad', + sinon.assert.match(result, { + topmostLocation: 'https://safe.frame/ad', + location: null, reachedTop: false, isAmp: false, numIframes: 2, @@ -234,16 +265,20 @@ describe('Referer detection', () => { 'https://safe.frame/ad', 'https://otherfr.ame/ad' ], - canonicalUrl: null + canonicalUrl: null, + page: null, + ref: null, + domain: null }); }); - it('Should return the top window origin with three cross-origin windows with ancessorOrigins', () => { + it('Should return the top window origin with three cross-origin windows with ancestorOrigins', () => { const testWindow = buildWindowTree(['https://example.com/some/page', 'https://safe.frame/ad', 'https://otherfr.ame/ad'], 'https://othersite.com/', 'https://canonical.example.com/', true), result = detectReferer(testWindow)(); - expect(result).to.deep.equal({ - referer: 'https://example.com/', + sinon.assert.match(result, { + topmostLocation: 'https://example.com/', + location: 'https://example.com/', reachedTop: false, isAmp: false, numIframes: 2, @@ -252,7 +287,10 @@ describe('Referer detection', () => { 'https://safe.frame/ad', 'https://otherfr.ame/ad' ], - canonicalUrl: null + canonicalUrl: null, + page: 'https://example.com/', + ref: null, + domain: 'example.com' }); }); }); @@ -268,8 +306,9 @@ describe('Referer detection', () => { const result = detectReferer(testWindow)(); - expect(result).to.deep.equal({ - referer: 'https://example.com/some/page/amp/', + sinon.assert.match(result, { + location: 'https://example.com/some/page/amp/', + topmostLocation: 'https://example.com/some/page/amp/', reachedTop: true, isAmp: true, numIframes: 1, @@ -277,7 +316,10 @@ describe('Referer detection', () => { 'https://example.com/some/page/amp/', 'https://ad-iframe.ampproject.org/ad' ], - canonicalUrl: 'https://example.com/some/page/' + canonicalUrl: 'https://example.com/some/page/', + page: 'https://example.com/some/page/', + ref: null, + domain: 'example.com' }); }); @@ -291,8 +333,9 @@ describe('Referer detection', () => { const result = detectReferer(testWindow)(); - expect(result).to.deep.equal({ - referer: 'https://example.com/some/page/amp/', + sinon.assert.match(result, { + topmostLocation: 'https://example.com/some/page/amp/', + location: 'https://example.com/some/page/amp/', reachedTop: true, isAmp: true, numIframes: 1, @@ -300,10 +343,24 @@ describe('Referer detection', () => { 'https://example.com/some/page/amp/', 'https://ad-iframe.ampproject.org/ad' ], - canonicalUrl: 'https://example.com/some/page/' + canonicalUrl: 'https://example.com/some/page/', + page: 'https://example.com/some/page/', + ref: null, + domain: 'example.com' }); }); + it('should respect pageUrl as the primary source of canonicalUrl', () => { + config.setConfig({ + pageUrl: 'pub-defined' + }); + const w = buildWindowTree(['https://example.com', 'https://amp.com']); + w.context = { + canonicalUrl: 'should-be-overridden' + }; + expect(detectReferer(w)().canonicalUrl).to.equal('pub-defined'); + }); + describe('Cached AMP page in iframed search result', () => { it('Should return the AMP source and canonical URLs but with a null top-level stack location Without ancesorOrigins', () => { const testWindow = buildWindowTree(['https://google.com/amp/example-com/some/page/amp/', 'https://example-com.amp-cache.example.com/some/page/amp/', 'https://ad-iframe.ampproject.org/ad']); @@ -315,8 +372,9 @@ describe('Referer detection', () => { const result = detectReferer(testWindow)(); - expect(result).to.deep.equal({ - referer: 'https://example.com/some/page/amp/', + sinon.assert.match(result, { + topmostLocation: 'https://example.com/some/page/amp/', + location: 'https://example.com/some/page/amp/', reachedTop: false, isAmp: true, numIframes: 2, @@ -325,7 +383,10 @@ describe('Referer detection', () => { 'https://example.com/some/page/amp/', 'https://ad-iframe.ampproject.org/ad' ], - canonicalUrl: 'https://example.com/some/page/' + canonicalUrl: 'https://example.com/some/page/', + page: 'https://example.com/some/page/', + ref: null, + domain: 'example.com', }); }); @@ -339,8 +400,9 @@ describe('Referer detection', () => { const result = detectReferer(testWindow)(); - expect(result).to.deep.equal({ - referer: 'https://example.com/some/page/amp/', + sinon.assert.match(result, { + location: 'https://example.com/some/page/amp/', + topmostLocation: 'https://example.com/some/page/amp/', reachedTop: false, isAmp: true, numIframes: 2, @@ -349,7 +411,10 @@ describe('Referer detection', () => { 'https://example.com/some/page/amp/', 'https://ad-iframe.ampproject.org/ad' ], - canonicalUrl: 'https://example.com/some/page/' + canonicalUrl: 'https://example.com/some/page/', + page: 'https://example.com/some/page/', + ref: null, + domain: 'example.com' }); }); @@ -363,8 +428,9 @@ describe('Referer detection', () => { const result = detectReferer(testWindow)(); - expect(result).to.deep.equal({ - referer: 'https://example.com/some/page/amp/', + sinon.assert.match(result, { + location: 'https://example.com/some/page/amp/', + topmostLocation: 'https://example.com/some/page/amp/', reachedTop: false, isAmp: true, numIframes: 3, @@ -374,9 +440,105 @@ describe('Referer detection', () => { 'https://ad-iframe.ampproject.org/ad', 'https://ad-iframe.ampproject.org/ad' ], - canonicalUrl: 'https://example.com/some/page/' + canonicalUrl: 'https://example.com/some/page/', + page: 'https://example.com/some/page/', + ref: null, + domain: 'example.com', }); }); }); }); }); + +describe('ensureProtocol', () => { + ['', null, undefined].forEach((val) => { + it(`should return unchanged invalid input: ${val}`, () => { + expect(ensureProtocol(val)).to.eql(val); + }); + }); + + ['http:', 'https:'].forEach((protocol) => { + Object.entries({ + 'window.top.location.protocol': { + top: { + location: { + protocol + } + }, + location: { + protocol: 'unused' + } + }, + 'window.location.protocol': (() => { + const w = { + top: {}, + location: { + protocol + } + }; + Object.defineProperty(w.top, 'location', { + get: function () { + throw new Error('cross-origin'); + } + }); + return w; + })(), + }).forEach(([t, win]) => { + describe(`when ${t} declares ${protocol}`, () => { + Object.entries({ + 'declared': { + url: 'proto://example.com/page', + expect: 'proto://example.com/page' + }, + 'relative': { + url: '//example.com/page', + expect: `${protocol}//example.com/page` + }, + 'missing': { + url: 'example.com/page', + expect: `${protocol}//example.com/page` + } + }).forEach(([t, {url, expect: expected}]) => { + it(`should handle URLs with ${t} protocols`, () => { + expect(ensureProtocol(url, win)).to.equal(expected); + }); + }); + }); + }); + }); +}); + +describe('parseDomain', () => { + Object.entries({ + 'www.example.com': 'www.example.com', + 'example.com:443': 'example.com:443', + 'www.sub.example.com': 'www.sub.example.com', + 'example.com/page': 'example.com', + 'www.example.com:443/page': 'www.example.com:443', + 'http://www.example.com:443/page?query=value': 'www.example.com:443', + '': undefined, + }).forEach(([input, expected]) => { + it(`should extract domain from '${input}' -> '${expected}`, () => { + expect(parseDomain(input)).to.equal(expected); + }); + }); + Object.entries({ + 'www.example.com': 'example.com', + 'https://www.sub.example.com': 'sub.example.com', + '//www.example.com:443': 'example.com:443', + 'without.www.example.com': 'without.www.example.com' + }).forEach(([input, expected]) => { + it('should remove leading www if requested', () => { + expect(parseDomain(input, {noLeadingWww: true})).to.equal(expected); + }) + }); + Object.entries({ + 'example.com:443': 'example.com', + 'https://sub.example.com': 'sub.example.com', + 'http://sub.example.com:8443': 'sub.example.com' + }).forEach(([input, expected]) => { + it('should remove port if requested', () => { + expect(parseDomain(input, {noPort: true})).to.equal(expected); + }) + }) +});