chrome_csi = """ if (!window.chrome) { // Use the exact property descriptor found in headful Chrome // fetch it via `Object.getOwnPropertyDescriptor(window, 'chrome')` Object.defineProperty(window, 'chrome', { writable: true, enumerable: true, configurable: false, // note! value: {} // We'll extend that later }) } // Check if we're running headful and don't need to mock anything // Check that the Navigation Timing API v1 is available, we need that if (!('csi' in window.chrome) && (window.performance || window.performance.timing)) { const {csi_timing} = window.performance log.info('loading chrome.csi.js') window.chrome.csi = function () { return { onloadT: csi_timing.domContentLoadedEventEnd, startE: csi_timing.navigationStart, pageT: Date.now() - csi_timing.navigationStart, tran: 15 // Transition type or something } } utils.patchToString(window.chrome.csi) } """