( win, element, config, qqid, isVerifiedAmpCreative )
| 792 | * @return {?JsonObject} config or null if invalid/missing. |
| 793 | */ |
| 794 | export function addCsiSignalsToAmpAnalyticsConfig( |
| 795 | win, |
| 796 | element, |
| 797 | config, |
| 798 | qqid, |
| 799 | isVerifiedAmpCreative |
| 800 | ) { |
| 801 | // Add CSI pingbacks. |
| 802 | const correlator = getCorrelator(win, element); |
| 803 | const slotId = Number(element.getAttribute('data-amp-slot-index')); |
| 804 | const eids = encodeURIComponent(element.getAttribute(EXPERIMENT_ATTRIBUTE)); |
| 805 | let aexp = element.getAttribute(AMP_EXPERIMENT_ATTRIBUTE); |
| 806 | if (aexp) { |
| 807 | // aexp URL param is separated by `!`, not `,`. |
| 808 | aexp = aexp.replace(/,/g, '!'); |
| 809 | } |
| 810 | const adType = element.getAttribute('type'); |
| 811 | const initTime = Number( |
| 812 | getTimingDataSync(win, 'navigationStart') || Date.now() |
| 813 | ); |
| 814 | const deltaTime = Math.round( |
| 815 | win.performance && win.performance.now |
| 816 | ? win.performance.now() |
| 817 | : Date.now() - initTime |
| 818 | ); |
| 819 | const baseCsiUrl = |
| 820 | 'https://csi.gstatic.com/csi?s=a4a' + |
| 821 | `&c=${correlator}&slotId=${slotId}&qqid.${slotId}=${qqid}` + |
| 822 | `&dt=${initTime}` + |
| 823 | (eids != 'null' ? `&e.${slotId}=${eids}` : '') + |
| 824 | (aexp ? `&aexp=${aexp}` : '') + |
| 825 | `&rls=${mode.version()}&adt.${slotId}=${adType}`; |
| 826 | const isAmpSuffix = isVerifiedAmpCreative ? 'Friendly' : 'CrossDomain'; |
| 827 | config['triggers']['continuousVisibleIniLoad'] = { |
| 828 | 'on': 'ini-load', |
| 829 | 'selector': 'amp-ad', |
| 830 | 'selectionMethod': 'closest', |
| 831 | 'request': 'iniLoadCsi', |
| 832 | }; |
| 833 | config['triggers']['continuousVisibleRenderStart'] = { |
| 834 | 'on': 'render-start', |
| 835 | 'selector': 'amp-ad', |
| 836 | 'selectionMethod': 'closest', |
| 837 | 'request': 'renderStartCsi', |
| 838 | }; |
| 839 | config['requests']['iniLoadCsi'] = |
| 840 | baseCsiUrl + `&met.a4a.${slotId}=iniLoadCsi${isAmpSuffix}.${deltaTime}`; |
| 841 | config['requests']['renderStartCsi'] = |
| 842 | baseCsiUrl + `&met.a4a.${slotId}=renderStartCsi${isAmpSuffix}.${deltaTime}`; |
| 843 | |
| 844 | // Add CSI ping for visibility. |
| 845 | config['requests']['visibilityCsi'] = |
| 846 | baseCsiUrl + `&met.a4a.${slotId}=visibilityCsi.${deltaTime}`; |
| 847 | config['triggers']['continuousVisible']['request'].push('visibilityCsi'); |
| 848 | return config; |
| 849 | } |
| 850 | |
| 851 | /** |
no test coverage detected