mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-17 15:25:52 +00:00
Bug 1713721 - Add a SmartBlock shim for Cxense; r=denschub,webcompat-reviewers
Differential Revision: https://phabricator.services.mozilla.com/D121213
This commit is contained in:
parent
9ffcc24b65
commit
98db09fff6
@ -2,7 +2,7 @@
|
|||||||
"manifest_version": 2,
|
"manifest_version": 2,
|
||||||
"name": "Web Compatibility Interventions",
|
"name": "Web Compatibility Interventions",
|
||||||
"description": "Urgent post-release fixes for web compatibility.",
|
"description": "Urgent post-release fixes for web compatibility.",
|
||||||
"version": "24.13.0",
|
"version": "24.14.0",
|
||||||
|
|
||||||
"applications": {
|
"applications": {
|
||||||
"gecko": {
|
"gecko": {
|
||||||
@ -97,6 +97,7 @@
|
|||||||
"shims/bmauth.js",
|
"shims/bmauth.js",
|
||||||
"shims/chartbeat.js",
|
"shims/chartbeat.js",
|
||||||
"shims/criteo.js",
|
"shims/criteo.js",
|
||||||
|
"shims/cxense.js",
|
||||||
"shims/eluminate.js",
|
"shims/eluminate.js",
|
||||||
"shims/empty-script.js",
|
"shims/empty-script.js",
|
||||||
"shims/empty-shim.txt",
|
"shims/empty-shim.txt",
|
||||||
|
@ -86,6 +86,7 @@ FINAL_TARGET_FILES.features["webcompat@mozilla.org"]["shims"] += [
|
|||||||
"shims/bmauth.js",
|
"shims/bmauth.js",
|
||||||
"shims/chartbeat.js",
|
"shims/chartbeat.js",
|
||||||
"shims/criteo.js",
|
"shims/criteo.js",
|
||||||
|
"shims/cxense.js",
|
||||||
"shims/eluminate.js",
|
"shims/eluminate.js",
|
||||||
"shims/empty-script.js",
|
"shims/empty-script.js",
|
||||||
"shims/empty-shim.txt",
|
"shims/empty-shim.txt",
|
||||||
|
593
browser/extensions/webcompat/shims/cxense.js
Normal file
593
browser/extensions/webcompat/shims/cxense.js
Normal file
@ -0,0 +1,593 @@
|
|||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bug 1713721 - Shim Cxense
|
||||||
|
*
|
||||||
|
* Sites relying on window.cX can experience breakage if it is blocked.
|
||||||
|
* Stubbing out the API in a shim can mitigate this breakage. There are
|
||||||
|
* two versions of the API, one including window.cX.CCE, but both appear
|
||||||
|
* to be very similar so we use one shim for both.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (window.cX?.getUserSegmentIds === undefined) {
|
||||||
|
const callQueue = window.cX?.callQueue || [];
|
||||||
|
const callQueueCCE = window.cX?.CCE?.callQueue || [];
|
||||||
|
|
||||||
|
function getRandomString(l = 16) {
|
||||||
|
const v = crypto.getRandomValues(new Uint8Array(l));
|
||||||
|
const s = Array.from(v, c => c.toString(16)).join("");
|
||||||
|
return s.slice(0, l);
|
||||||
|
}
|
||||||
|
|
||||||
|
const call = (cb, ...args) => {
|
||||||
|
if (typeof cb !== "function") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
cb(...args);
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const invokeOn = lib => {
|
||||||
|
return (fn, ...args) => {
|
||||||
|
try {
|
||||||
|
lib[fn](...args);
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const userId = getRandomString();
|
||||||
|
const cxUserId = `cx:${getRandomString(25)}:${getRandomString(12)}`;
|
||||||
|
const topLeft = { left: 0, top: 0 };
|
||||||
|
const margins = { left: 0, top: 0, right: 0, bottom: 0 };
|
||||||
|
const ccePushUrl =
|
||||||
|
"https://comcluster.cxense.com/cce/push?callback={{callback}}";
|
||||||
|
const displayWidget = (divId, a, ctx, callback) => call(callback, ctx, divId);
|
||||||
|
const getUserSegmentIds = a => call(a?.callback, a?.defaultValue || []);
|
||||||
|
const init = (a, b, c, d, callback) => call(callback);
|
||||||
|
const render = (a, data, ctx, callback) => call(callback, data, ctx);
|
||||||
|
const run = (params, ctx, callback) => call(callback, params, ctx);
|
||||||
|
const runCtrlVersion = (a, b, callback) => call(callback);
|
||||||
|
const runCxVersion = (a, data, b, ctx, callback) => call(callback, data, ctx);
|
||||||
|
const runTest = (a, divId, b, c, ctx, callback) => call(callback, divId, ctx);
|
||||||
|
const sendConversionEvent = (a, options) => call(options?.callback, {});
|
||||||
|
const sendEvent = (a, b, args) => call(args?.callback, {});
|
||||||
|
|
||||||
|
const getDivId = className => {
|
||||||
|
const e = document.querySelector(`.${className}`);
|
||||||
|
if (e) {
|
||||||
|
return `${className}-01`;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
const getDocumentSize = () => {
|
||||||
|
const width = document.body.clientWidth;
|
||||||
|
const height = document.body.clientHeight;
|
||||||
|
return { width, height };
|
||||||
|
};
|
||||||
|
|
||||||
|
const getNowSeconds = () => {
|
||||||
|
return Math.round(new Date().getTime() / 1000);
|
||||||
|
};
|
||||||
|
|
||||||
|
const getPageContext = () => {
|
||||||
|
return {
|
||||||
|
location: location.href,
|
||||||
|
pageViewRandom: "",
|
||||||
|
userId,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const getWindowSize = () => {
|
||||||
|
const width = window.innerWidth;
|
||||||
|
const height = window.innerHeight;
|
||||||
|
return { width, height };
|
||||||
|
};
|
||||||
|
|
||||||
|
const isObject = i => {
|
||||||
|
return typeof i === "object" && i !== null && !Array.isArray(i);
|
||||||
|
};
|
||||||
|
|
||||||
|
const runMulti = widgets => {
|
||||||
|
widgets?.forEach(({ widgetParams, widgetContext, widgetCallback }) => {
|
||||||
|
call(widgetCallback, widgetParams, widgetContext);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
let testGroup = -1;
|
||||||
|
let snapPoints = [];
|
||||||
|
const startTime = new Date();
|
||||||
|
|
||||||
|
const library = {
|
||||||
|
addCustomerScript() {},
|
||||||
|
addEventListener() {},
|
||||||
|
addExternalId() {},
|
||||||
|
afterInitializePage() {},
|
||||||
|
allUserConsents() {},
|
||||||
|
backends: {
|
||||||
|
production: {
|
||||||
|
baseAdDeliveryUrl: "http://adserver.cxad.cxense.com/adserver/search",
|
||||||
|
secureBaseAdDeliveryUrl:
|
||||||
|
"https://s-adserver.cxad.cxense.com/adserver/search",
|
||||||
|
},
|
||||||
|
sandbox: {
|
||||||
|
baseAdDeliveryUrl:
|
||||||
|
"http://adserver.sandbox.cxad.cxense.com/adserver/search",
|
||||||
|
secureBaseAdDeliveryUrl:
|
||||||
|
"https://s-adserver.sandbox.cxad.cxense.com/adserver/search",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
calculateAdSpaceSize(adCount, adUnitSize, marginA, marginB) {
|
||||||
|
return adCount * (adUnitSize + marginA + marginB);
|
||||||
|
},
|
||||||
|
cdn: {
|
||||||
|
template: {
|
||||||
|
direct: {
|
||||||
|
http: "http://cdn.cxpublic.com/",
|
||||||
|
https: "https://cdn.cxpublic.com/",
|
||||||
|
},
|
||||||
|
mapped: {
|
||||||
|
http: "http://cdn-templates.cxpublic.com/",
|
||||||
|
https: "https://cdn-templates.cxpublic.com/",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
cint() {},
|
||||||
|
cleanUpGlobalIds: [],
|
||||||
|
clearBaseUrl: "https://scdn.cxense.com/sclear.html",
|
||||||
|
clearCustomParameters() {},
|
||||||
|
clearIdUrl: "https://scomcluster.cxense.com/public/clearid",
|
||||||
|
clearIds() {},
|
||||||
|
clickTracker: (a, b, callback) => call(callback),
|
||||||
|
clientStorageUrl: "https://clientstorage.cxense.com",
|
||||||
|
combineArgs: () => Object.create(),
|
||||||
|
combineKeywordsIntoArray: () => [],
|
||||||
|
consentClasses: ["pv", "segment", "ad", "recs"],
|
||||||
|
consentClassesV2: ["geo", "device"],
|
||||||
|
cookieSyncRUrl: "csyn-r.cxense.com",
|
||||||
|
createDelegate() {},
|
||||||
|
csdUrls: {
|
||||||
|
domainScriptUrl: "//csd.cxpublic.com/d/",
|
||||||
|
customerScriptUrl: "//csd.cxpublic.com/t/",
|
||||||
|
},
|
||||||
|
cxenseGlobalIdIframeUrl: "https://scdn.cxense.com/sglobal.html",
|
||||||
|
cxenseUserIdUrl: "https://id.cxense.com/public/user/id",
|
||||||
|
decodeUrlEncodedNameValuePairs: () => Object.create(),
|
||||||
|
defaultAdRenderer: () => "",
|
||||||
|
deleteCookie() {},
|
||||||
|
denyWithoutConsent: {
|
||||||
|
addExternalId: "pv",
|
||||||
|
getUserSegmentIds: "segment",
|
||||||
|
insertAdSpace: "ad",
|
||||||
|
insertMultipleAdSpaces: "ad",
|
||||||
|
sendEvent: "pv",
|
||||||
|
sendPageViewEvent: "pv",
|
||||||
|
sync: "ad",
|
||||||
|
},
|
||||||
|
dmpPushUrl: "https://comcluster.cxense.com/dmp/push?callback={{callback}}",
|
||||||
|
emptyWidgetUrl: "https://scdn.cxense.com/empty.html",
|
||||||
|
eventReceiverBaseUrl: "https://scomcluster.cxense.com/Repo/rep.html",
|
||||||
|
eventReceiverBaseUrlGif: "https://scomcluster.cxense.com/Repo/rep.gif",
|
||||||
|
getAllText: () => "",
|
||||||
|
getClientStorageVariable() {},
|
||||||
|
getCookie: () => null,
|
||||||
|
getCxenseUserId: () => cxUserId,
|
||||||
|
getDocumentSize,
|
||||||
|
getElementPosition: () => topLeft,
|
||||||
|
getHashFragment: () => location.hash.substr(1),
|
||||||
|
getLocalStats: () => Object.create(),
|
||||||
|
getNodeValue: n => n.nodeValue,
|
||||||
|
getNowSeconds,
|
||||||
|
getPageContext,
|
||||||
|
getRandomString,
|
||||||
|
getScrollPos: () => topLeft,
|
||||||
|
getSessionId: () => "",
|
||||||
|
getSiteId: () => "",
|
||||||
|
getTimezoneOffset: () => new Date().getTimezoneOffset(),
|
||||||
|
getTopLevelDomain: () => location.hostname,
|
||||||
|
getUserId: () => userId,
|
||||||
|
getUserSegmentIds,
|
||||||
|
getWindowSize,
|
||||||
|
hasConsent: () => true,
|
||||||
|
hasHistory: () => true,
|
||||||
|
hasLocalStorage: () => true,
|
||||||
|
hasPassiveEventListeners: () => true,
|
||||||
|
hasPostMessage: () => true,
|
||||||
|
hasSessionStorage() {},
|
||||||
|
initializePage() {},
|
||||||
|
insertAdSpace() {},
|
||||||
|
insertMultipleAdSpaces() {},
|
||||||
|
insertWidget() {},
|
||||||
|
invoke: invokeOn(library),
|
||||||
|
isAmpIFrame() {},
|
||||||
|
isArray() {},
|
||||||
|
isCompatModeActive() {},
|
||||||
|
isConsentRequired() {},
|
||||||
|
isEdge: () => false,
|
||||||
|
isFirefox: () => true,
|
||||||
|
isIE6Or7: () => false,
|
||||||
|
isObject,
|
||||||
|
isRecsDestination: () => false,
|
||||||
|
isSafari: () => false,
|
||||||
|
isTextNode: n => n?.nodeType === 3,
|
||||||
|
isTopWindow: () => window === top,
|
||||||
|
jsonpRequest: () => false,
|
||||||
|
loadScript() {},
|
||||||
|
m_accountId: "0",
|
||||||
|
m_activityEvents: false,
|
||||||
|
m_activityState: {
|
||||||
|
activeTime: startTime,
|
||||||
|
currScrollLeft: 0,
|
||||||
|
currScrollTop: 0,
|
||||||
|
exitLink: "",
|
||||||
|
hadHIDActivity: false,
|
||||||
|
maxViewLeft: 1,
|
||||||
|
maxViewTop: 1,
|
||||||
|
parentMetrics: undefined,
|
||||||
|
prevActivityTime: startTime + 2,
|
||||||
|
prevScreenX: 0,
|
||||||
|
prevScreenY: 0,
|
||||||
|
prevScrollLeft: 0,
|
||||||
|
prevScrollTop: 0,
|
||||||
|
prevTime: startTime + 1,
|
||||||
|
prevWindowHeight: 1,
|
||||||
|
prevWindowWidth: 1,
|
||||||
|
scrollDepthPercentage: 0,
|
||||||
|
scrollDepthPixels: 0,
|
||||||
|
},
|
||||||
|
m_atfr: null,
|
||||||
|
m_c1xTpWait: 0,
|
||||||
|
m_clientStorage: {
|
||||||
|
iframeEl: null,
|
||||||
|
iframeIsLoaded: false,
|
||||||
|
iframeOrigin: "https://clientstorage.cxense.com",
|
||||||
|
iframePath: "/clientstorage_v2.html",
|
||||||
|
messageContexts: {},
|
||||||
|
messageQueue: [],
|
||||||
|
},
|
||||||
|
m_compatMode: {},
|
||||||
|
m_compatModeActive: false,
|
||||||
|
m_compatPvSent: false,
|
||||||
|
m_consentVersion: 1,
|
||||||
|
m_customParameters: [],
|
||||||
|
m_documentSizeRequestedFromChild: false,
|
||||||
|
m_externalUserIds: [],
|
||||||
|
m_globalIdLoading: {
|
||||||
|
globalIdIFrameEl: null,
|
||||||
|
globalIdIFrameElLoaded: false,
|
||||||
|
},
|
||||||
|
m_isSpaRecsDestination: false,
|
||||||
|
m_knownMessageSources: [],
|
||||||
|
m_p1Complete: false,
|
||||||
|
m_prevLocationHash: "",
|
||||||
|
m_previousPageViewReport: null,
|
||||||
|
m_rawCustomParameters: {},
|
||||||
|
m_rnd: getRandomString(),
|
||||||
|
m_scriptStartTime: startTime,
|
||||||
|
m_siteId: "0",
|
||||||
|
m_spaRecsClickUrl: null,
|
||||||
|
m_thirdPartyIds: true,
|
||||||
|
m_usesConsent: false,
|
||||||
|
m_usesIabConsent: false,
|
||||||
|
m_usesSecureCookies: true,
|
||||||
|
m_usesTcf20Consent: false,
|
||||||
|
m_widgetSpecs: {},
|
||||||
|
Object,
|
||||||
|
onClearIds() {},
|
||||||
|
onFFP1() {},
|
||||||
|
onP1() {},
|
||||||
|
p1BaseUrl: "https://scdn.cxense.com/sp1.html",
|
||||||
|
p1JsUrl: "https://p1cluster.cxense.com/p1.js",
|
||||||
|
parseHashArgs: () => Object.create(),
|
||||||
|
parseMargins: () => margins,
|
||||||
|
parseUrlArgs: () => Object.create(),
|
||||||
|
postMessageToParent() {},
|
||||||
|
publicWidgetDataUrl: "https://api.cxense.com/public/widget/data",
|
||||||
|
removeClientStorageVariable() {},
|
||||||
|
removeEventListener() {},
|
||||||
|
renderContainedImage: () => "<div/>",
|
||||||
|
renderTemplate: () => "<div/>",
|
||||||
|
reportActivity() {},
|
||||||
|
requireActivityEvents() {},
|
||||||
|
requireConsent() {},
|
||||||
|
requireOnlyFirstPartyIds() {},
|
||||||
|
requireSecureCookies() {},
|
||||||
|
requireTcf20() {},
|
||||||
|
sendEvent,
|
||||||
|
sendSpaRecsClick: (a, callback) => call(callback),
|
||||||
|
setAccountId() {},
|
||||||
|
setAllConsentsTo() {},
|
||||||
|
setClientStorageVariable() {},
|
||||||
|
setCompatMode() {},
|
||||||
|
setConsent() {},
|
||||||
|
setCookie() {},
|
||||||
|
setCustomParameters() {},
|
||||||
|
setEventAttributes() {},
|
||||||
|
setGeoPosition() {},
|
||||||
|
setNodeValue() {},
|
||||||
|
setRandomId() {},
|
||||||
|
setRestrictionsToConsentClasses() {},
|
||||||
|
setRetargetingParameters() {},
|
||||||
|
setSiteId() {},
|
||||||
|
setUserProfileParameters() {},
|
||||||
|
setupIabCmp() {},
|
||||||
|
setupTcfApi() {},
|
||||||
|
shouldPollActivity() {},
|
||||||
|
startLocalStats() {},
|
||||||
|
startSessionAnnotation() {},
|
||||||
|
stopAllSessionAnnotations() {},
|
||||||
|
stopSessionAnnotation() {},
|
||||||
|
sync() {},
|
||||||
|
trackAmpIFrame() {},
|
||||||
|
trackElement() {},
|
||||||
|
trim: s => s.trim(),
|
||||||
|
tsridUrl: "https://tsrid.cxense.com/lookup?callback={{callback}}",
|
||||||
|
userSegmentUrl:
|
||||||
|
"https://api.cxense.com/profile/user/segment?callback={{callback}}",
|
||||||
|
};
|
||||||
|
|
||||||
|
const libraryCCE = {
|
||||||
|
"__cx-toolkit__": {
|
||||||
|
isShown: true,
|
||||||
|
data: [],
|
||||||
|
},
|
||||||
|
activeSnapPoint: null,
|
||||||
|
activeWidgets: [],
|
||||||
|
ccePushUrl,
|
||||||
|
clickTracker: () => "",
|
||||||
|
displayResult() {},
|
||||||
|
displayWidget,
|
||||||
|
getDivId,
|
||||||
|
getTestGroup: () => testGroup,
|
||||||
|
init,
|
||||||
|
insertMaster() {},
|
||||||
|
instrumentClickLinks() {},
|
||||||
|
invoke: invokeOn(libraryCCE),
|
||||||
|
noCache: false,
|
||||||
|
offerProductId: null,
|
||||||
|
persistedQueryId: null,
|
||||||
|
prefix: null,
|
||||||
|
previewCampaign: null,
|
||||||
|
previewDiv: null,
|
||||||
|
previewId: null,
|
||||||
|
previewTestId: null,
|
||||||
|
processCxResult() {},
|
||||||
|
render,
|
||||||
|
reportTestImpression() {},
|
||||||
|
run,
|
||||||
|
runCtrlVersion,
|
||||||
|
runCxVersion,
|
||||||
|
runMulti,
|
||||||
|
runTest,
|
||||||
|
sendConversionEvent,
|
||||||
|
sendPageViewEvent: (a, b, c, callback) => call(callback),
|
||||||
|
setSnapPoints(x) {
|
||||||
|
snapPoints = x;
|
||||||
|
},
|
||||||
|
setTestGroup(x) {
|
||||||
|
testGroup = x;
|
||||||
|
},
|
||||||
|
setVisibilityField() {},
|
||||||
|
get snapPoints() {
|
||||||
|
return snapPoints;
|
||||||
|
},
|
||||||
|
startTime,
|
||||||
|
get testGroup() {
|
||||||
|
return testGroup;
|
||||||
|
},
|
||||||
|
testVariant: null,
|
||||||
|
trackTime: 0.5,
|
||||||
|
trackVisibility() {},
|
||||||
|
updateRecsClickUrls() {},
|
||||||
|
utmParams: [],
|
||||||
|
version: "2.42",
|
||||||
|
visibilityField: "timeHalf",
|
||||||
|
};
|
||||||
|
|
||||||
|
const CCE = {
|
||||||
|
activeSnapPoint: null,
|
||||||
|
activeWidgets: [],
|
||||||
|
callQueue: callQueueCCE,
|
||||||
|
ccePushUrl,
|
||||||
|
clickTracker: () => "",
|
||||||
|
displayResult() {},
|
||||||
|
displayWidget,
|
||||||
|
getDivId,
|
||||||
|
getTestGroup: () => testGroup,
|
||||||
|
init,
|
||||||
|
insertMaster() {},
|
||||||
|
instrumentClickLinks() {},
|
||||||
|
invoke: invokeOn(libraryCCE),
|
||||||
|
library: libraryCCE,
|
||||||
|
noCache: false,
|
||||||
|
offerProductId: null,
|
||||||
|
persistedQueryId: null,
|
||||||
|
prefix: null,
|
||||||
|
previewCampaign: null,
|
||||||
|
previewDiv: null,
|
||||||
|
previewId: null,
|
||||||
|
previewTestId: null,
|
||||||
|
processCxResult() {},
|
||||||
|
render,
|
||||||
|
reportTestImpression() {},
|
||||||
|
run,
|
||||||
|
runCtrlVersion,
|
||||||
|
runCxVersion,
|
||||||
|
runMulti,
|
||||||
|
runTest,
|
||||||
|
sendConversionEvent,
|
||||||
|
sendPageViewEvent: (a, b, c, callback) => call(callback),
|
||||||
|
setSnapPoints(x) {
|
||||||
|
snapPoints = x;
|
||||||
|
},
|
||||||
|
setTestGroup(x) {
|
||||||
|
testGroup = x;
|
||||||
|
},
|
||||||
|
setVisibilityField() {},
|
||||||
|
get snapPoints() {
|
||||||
|
return snapPoints;
|
||||||
|
},
|
||||||
|
startTime,
|
||||||
|
get testGroup() {
|
||||||
|
return testGroup;
|
||||||
|
},
|
||||||
|
testVariant: null,
|
||||||
|
trackTime: 0.5,
|
||||||
|
trackVisibility() {},
|
||||||
|
updateRecsClickUrls() {},
|
||||||
|
utmParams: [],
|
||||||
|
version: "2.42",
|
||||||
|
visibilityField: "timeHalf",
|
||||||
|
};
|
||||||
|
|
||||||
|
window.cX = {
|
||||||
|
addCustomerScript() {},
|
||||||
|
addEventListener() {},
|
||||||
|
addExternalId() {},
|
||||||
|
afterInitializePage() {},
|
||||||
|
allUserConsents: () => undefined,
|
||||||
|
Array,
|
||||||
|
calculateAdSpaceSize: () => 0,
|
||||||
|
callQueue,
|
||||||
|
CCE,
|
||||||
|
cint: () => undefined,
|
||||||
|
clearCustomParameters() {},
|
||||||
|
clearIds() {},
|
||||||
|
clickTracker: () => "",
|
||||||
|
combineArgs: () => Object.create(),
|
||||||
|
combineKeywordsIntoArray: () => [],
|
||||||
|
createDelegate() {},
|
||||||
|
decodeUrlEncodedNameValuePairs: () => Object.create(),
|
||||||
|
defaultAdRenderer: () => "",
|
||||||
|
deleteCookie() {},
|
||||||
|
getAllText: () => "",
|
||||||
|
getClientStorageVariable() {},
|
||||||
|
getCookie: () => null,
|
||||||
|
getCxenseUserId: () => cxUserId,
|
||||||
|
getDocumentSize,
|
||||||
|
getElementPosition: () => topLeft,
|
||||||
|
getHashFragment: () => location.hash.substr(1),
|
||||||
|
getLocalStats: () => Object.create(),
|
||||||
|
getNodeValue: n => n.nodeValue,
|
||||||
|
getNowSeconds,
|
||||||
|
getPageContext,
|
||||||
|
getRandomString,
|
||||||
|
getScrollPos: () => topLeft,
|
||||||
|
getSessionId: () => "",
|
||||||
|
getSiteId: () => "",
|
||||||
|
getTimezoneOffset: () => new Date().getTimezoneOffset(),
|
||||||
|
getTopLevelDomain: () => location.hostname,
|
||||||
|
getUserId: () => userId,
|
||||||
|
getUserSegmentIds,
|
||||||
|
getWindowSize,
|
||||||
|
hasConsent: () => true,
|
||||||
|
hasHistory: () => true,
|
||||||
|
hasLocalStorage: () => true,
|
||||||
|
hasPassiveEventListeners: () => true,
|
||||||
|
hasPostMessage: () => true,
|
||||||
|
hasSessionStorage() {},
|
||||||
|
initializePage() {},
|
||||||
|
insertAdSpace() {},
|
||||||
|
insertMultipleAdSpaces() {},
|
||||||
|
insertWidget() {},
|
||||||
|
invoke: invokeOn(library),
|
||||||
|
isAmpIFrame() {},
|
||||||
|
isArray() {},
|
||||||
|
isCompatModeActive() {},
|
||||||
|
isConsentRequired() {},
|
||||||
|
isEdge: () => false,
|
||||||
|
isFirefox: () => true,
|
||||||
|
isIE6Or7: () => false,
|
||||||
|
isObject,
|
||||||
|
isRecsDestination: () => false,
|
||||||
|
isSafari: () => false,
|
||||||
|
isTextNode: n => n?.nodeType === 3,
|
||||||
|
isTopWindow: () => window === top,
|
||||||
|
JSON,
|
||||||
|
jsonpRequest: () => false,
|
||||||
|
library,
|
||||||
|
loadScript() {},
|
||||||
|
Object,
|
||||||
|
onClearIds() {},
|
||||||
|
onFFP1() {},
|
||||||
|
onP1() {},
|
||||||
|
parseHashArgs: () => Object.create(),
|
||||||
|
parseMargins: () => margins,
|
||||||
|
parseUrlArgs: () => Object.create(),
|
||||||
|
postMessageToParent() {},
|
||||||
|
removeClientStorageVariable() {},
|
||||||
|
removeEventListener() {},
|
||||||
|
renderContainedImage: () => "<div/>",
|
||||||
|
renderTemplate: () => "<div/>",
|
||||||
|
reportActivity() {},
|
||||||
|
requireActivityEvents() {},
|
||||||
|
requireConsent() {},
|
||||||
|
requireOnlyFirstPartyIds() {},
|
||||||
|
requireSecureCookies() {},
|
||||||
|
requireTcf20() {},
|
||||||
|
sendEvent,
|
||||||
|
sendPageViewEvent: (a, callback) => call(callback, {}),
|
||||||
|
sendSpaRecsClick() {},
|
||||||
|
setAccountId() {},
|
||||||
|
setAllConsentsTo() {},
|
||||||
|
setClientStorageVariable() {},
|
||||||
|
setCompatMode() {},
|
||||||
|
setConsent() {},
|
||||||
|
setCookie() {},
|
||||||
|
setCustomParameters() {},
|
||||||
|
setEventAttributes() {},
|
||||||
|
setGeoPosition() {},
|
||||||
|
setNodeValue() {},
|
||||||
|
setRandomId() {},
|
||||||
|
setRestrictionsToConsentClasses() {},
|
||||||
|
setRetargetingParameters() {},
|
||||||
|
setSiteId() {},
|
||||||
|
setUserProfileParameters() {},
|
||||||
|
setupIabCmp() {},
|
||||||
|
setupTcfApi() {},
|
||||||
|
shouldPollActivity() {},
|
||||||
|
startLocalStats() {},
|
||||||
|
startSessionAnnotation() {},
|
||||||
|
stopAllSessionAnnotations() {},
|
||||||
|
stopSessionAnnotation() {},
|
||||||
|
sync() {},
|
||||||
|
trackAmpIFrame() {},
|
||||||
|
trackElement() {},
|
||||||
|
trim: s => s.trim(),
|
||||||
|
};
|
||||||
|
|
||||||
|
window.cxTest = window.cX;
|
||||||
|
|
||||||
|
window.cx_pollActiveTime = () => undefined;
|
||||||
|
window.cx_pollActivity = () => undefined;
|
||||||
|
window.cx_pollFragmentMessage = () => undefined;
|
||||||
|
|
||||||
|
const execQueue = (lib, queue) => {
|
||||||
|
return () => {
|
||||||
|
const invoke = invokeOn(lib);
|
||||||
|
setTimeout(() => {
|
||||||
|
queue.push = cmd => {
|
||||||
|
setTimeout(() => invoke(...cmd), 1);
|
||||||
|
};
|
||||||
|
for (const cmd of queue) {
|
||||||
|
invoke(...cmd);
|
||||||
|
}
|
||||||
|
}, 25);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
window.cx_callQueueExecute = execQueue(library, callQueue);
|
||||||
|
window.cxCCE_callQueueExecute = execQueue(libraryCCE, callQueueCCE);
|
||||||
|
|
||||||
|
window.cx_callQueueExecute();
|
||||||
|
window.cxCCE_callQueueExecute();
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user