From 53f3623481058fb872cd3055832d0e32e19d4b94 Mon Sep 17 00:00:00 2001 From: Andrey Babushkin <55714097+reyand43@users.noreply.github.com> Date: Fri, 25 Apr 2025 17:45:21 +0200 Subject: [PATCH] Css inliner tuning (#3337) * tracker: don't send double sheets * tracker: don't send double sheets * tracker: slot checker * add slot tag to custom elements --------- Co-authored-by: nick-delirium --- .../app/player/web/managers/DOM/DOMManager.ts | 5 ++--- .../tracker/src/main/app/observer/cssInliner.ts | 17 ++++++++++------- .../tracker/src/main/app/observer/observer.ts | 3 ++- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/frontend/app/player/web/managers/DOM/DOMManager.ts b/frontend/app/player/web/managers/DOM/DOMManager.ts index 725fe66dc..9e4f06f8d 100644 --- a/frontend/app/player/web/managers/DOM/DOMManager.ts +++ b/frontend/app/player/web/managers/DOM/DOMManager.ts @@ -450,9 +450,8 @@ export default class DOMManager extends ListWalker { logger.error('CreateIFrameDocument: Node not found', msg); return; } - - // shadow DOM for a custom element - const isCustomElement = vElem.tagName.includes('-'); + // shadow DOM for a custom element + SALESFORCE () + const isCustomElement = vElem.tagName.includes('-') || vElem.tagName === 'SLOT'; const isNotActualIframe = !["IFRAME", "FRAME"].includes(vElem.tagName.toUpperCase()); const isLikelyShadowRoot = isCustomElement && isNotActualIframe; diff --git a/tracker/tracker/src/main/app/observer/cssInliner.ts b/tracker/tracker/src/main/app/observer/cssInliner.ts index b8c5fb57d..b0aeb034f 100644 --- a/tracker/tracker/src/main/app/observer/cssInliner.ts +++ b/tracker/tracker/src/main/app/observer/cssInliner.ts @@ -11,8 +11,10 @@ export function inlineRemoteCss( sendPlain?: boolean, onPlain?: (cssText: string, id: number) => void, ) { - const sheetId = getNextID(); - addOwner(sheetId, id); + const sheetId = sendPlain ? null : getNextID(); + if (!sendPlain) { + addOwner(sheetId!, id); + } const sheet = node.sheet; @@ -25,7 +27,7 @@ export function inlineRemoteCss( return; } } catch (e) { - console.warn("Could not stringify sheet, falling back to fetch:", e); + // console.warn("Could not stringify sheet, falling back to fetch:", e); } } @@ -34,18 +36,19 @@ export function inlineRemoteCss( fetch(node.href) .then(response => { if (!response.ok) { - throw new Error(`Failed to fetch CSS: ${response.status}`); + throw new Error(`response status ${response.status}`); } return response.text(); }) .then(cssText => { if (sendPlain && onPlain) { onPlain(cssText, fakeIdHolder++); + } else { + processCssText(cssText); } - processCssText(cssText); }) .catch(error => { - console.error(`Failed to fetch CSS from ${node.href}:`, error); + console.error(`OpenReplay: Failed to fetch CSS from ${node.href}:`, error); }); } @@ -57,7 +60,7 @@ export function inlineRemoteCss( const ruleTexts = parseCSS(cssText); for (let i = 0; i < ruleTexts.length; i++) { - insertRule(sheetId, ruleTexts[i], i, baseHref); + insertRule(sheetId!, ruleTexts[i], i, baseHref); } } diff --git a/tracker/tracker/src/main/app/observer/observer.ts b/tracker/tracker/src/main/app/observer/observer.ts index a0ef5723f..ade273c52 100644 --- a/tracker/tracker/src/main/app/observer/observer.ts +++ b/tracker/tracker/src/main/app/observer/observer.ts @@ -497,7 +497,8 @@ export default abstract class Observer { if (isRootNode(node)) { return true } - const parent = node.parentNode + // @ts-ignore SALESFORCE + const parent = node.assignedSlot ? node.assignedSlot : node.parentNode let parentID: number | undefined // Disable parent check for the upper context HTMLHtmlElement, because it is root there... (before)