feat(tracker): wip: replace-rule with no new messages

This commit is contained in:
Alex Kaminskii 2022-09-13 16:11:48 +02:00
parent 07d8ce74cb
commit 23240536b7
16 changed files with 38 additions and 209 deletions

View file

@ -2,7 +2,7 @@
package messages
func IsReplayerType(id int) bool {
return 0 == id || 4 == id || 5 == id || 6 == id || 7 == id || 8 == id || 9 == id || 10 == id || 11 == id || 12 == id || 13 == id || 14 == id || 15 == id || 16 == id || 18 == id || 19 == id || 20 == id || 22 == id || 37 == id || 38 == id || 39 == id || 40 == id || 41 == id || 44 == id || 45 == id || 46 == id || 47 == id || 48 == id || 49 == id || 54 == id || 55 == id || 59 == id || 60 == id || 61 == id || 67 == id || 69 == id || 70 == id || 71 == id || 72 == id || 73 == id || 74 == id || 75 == id || 76 == id || 77 == id || 79 == id || 83 == id || 90 == id || 93 == id || 96 == id || 100 == id || 102 == id || 103 == id || 105 == id
return 0 == id || 4 == id || 5 == id || 6 == id || 7 == id || 8 == id || 9 == id || 10 == id || 11 == id || 12 == id || 13 == id || 14 == id || 15 == id || 16 == id || 18 == id || 19 == id || 20 == id || 22 == id || 37 == id || 38 == id || 39 == id || 40 == id || 41 == id || 44 == id || 45 == id || 46 == id || 47 == id || 48 == id || 49 == id || 54 == id || 55 == id || 59 == id || 60 == id || 61 == id || 67 == id || 69 == id || 70 == id || 71 == id || 72 == id || 73 == id || 74 == id || 75 == id || 76 == id || 77 == id || 79 == id || 90 == id || 93 == id || 96 == id || 100 == id || 102 == id || 103 == id || 105 == id
}
func IsIOSType(id int) bool {

View file

@ -158,8 +158,6 @@ const (
MsgZustand = 79
MsgReplaceVCSS = 83
MsgIOSBatchMeta = 107
MsgIOSSessionStart = 90
@ -3076,44 +3074,6 @@ func (msg *Zustand) TypeID() int {
return 79
}
type ReplaceVCSS struct {
message
ID uint64
Styles string
SheetID uint64
BaseURL string
}
func (msg *ReplaceVCSS) Encode() []byte {
buf := make([]byte, 41+len(msg.Styles)+len(msg.BaseURL))
buf[0] = 83
p := 1
p = WriteUint(msg.ID, buf, p)
p = WriteString(msg.Styles, buf, p)
p = WriteUint(msg.SheetID, buf, p)
p = WriteString(msg.BaseURL, buf, p)
return buf[:p]
}
func (msg *ReplaceVCSS) EncodeWithIndex() []byte {
encoded := msg.Encode()
if IsIOSType(msg.TypeID()) {
return encoded
}
data := make([]byte, len(encoded)+8)
copy(data[8:], encoded[:])
binary.LittleEndian.PutUint64(data[0:], msg.Meta().Index)
return data
}
func (msg *ReplaceVCSS) Decode() Message {
return msg
}
func (msg *ReplaceVCSS) TypeID() int {
return 83
}
type IOSBatchMeta struct {
message
Timestamp uint64

View file

@ -1318,24 +1318,6 @@ func DecodeZustand(reader io.Reader) (Message, error) {
return msg, err
}
func DecodeReplaceVCSS(reader io.Reader) (Message, error) {
var err error = nil
msg := &ReplaceVCSS{}
if msg.ID, err = ReadUint(reader); err != nil {
return nil, err
}
if msg.Styles, err = ReadString(reader); err != nil {
return nil, err
}
if msg.SheetID, err = ReadUint(reader); err != nil {
return nil, err
}
if msg.BaseURL, err = ReadString(reader); err != nil {
return nil, err
}
return msg, err
}
func DecodeIOSBatchMeta(reader io.Reader) (Message, error) {
var err error = nil
msg := &IOSBatchMeta{}
@ -1972,9 +1954,6 @@ func ReadMessage(t uint64, reader io.Reader) (Message, error) {
case 79:
return DecodeZustand(reader)
case 83:
return DecodeReplaceVCSS(reader)
case 107:
return DecodeIOSBatchMeta(reader)

View file

@ -752,16 +752,6 @@ class Zustand(Message):
self.state = state
class ReplaceVCSS(Message):
__id__ = 83
def __init__(self, id, styles, sheet_id, base_url):
self.id = id
self.styles = styles
self.sheet_id = sheet_id
self.base_url = base_url
class IOSBatchMeta(Message):
__id__ = 107

View file

@ -668,14 +668,6 @@ class MessageCodec(Codec):
state=self.read_string(reader)
)
if message_id == 83:
return ReplaceVCSS(
id=self.read_uint(reader),
styles=self.read_string(reader),
sheet_id=self.read_uint(reader),
base_url=self.read_string(reader)
)
if message_id == 107:
return IOSBatchMeta(
timestamp=self.read_uint(reader),

View file

@ -10,7 +10,6 @@ import type {
RawAdoptedSsInsertRule,
RawAdoptedSsReplaceURLBased,
RawAdoptedSsReplace,
RawReplaceVcss,
} from './raw'
import type { TrackerMessage } from './tracker'
import translate from './tracker'
@ -66,12 +65,6 @@ const resolvers = {
text: resolveCSS(msg.baseURL, msg.text),
tp: "adopted_ss_replace"
}),
"replace_vcss_url_based": (msg: RawReplaceVcss): RawReplaceVcss =>
({
...msg,
styles: resolveCSS(msg.baseURL, msg.styles),
tp: "replace_vcss",
})
} as const
type ResolvableType = keyof typeof resolvers

View file

@ -538,20 +538,6 @@ export default class RawMessageReader extends PrimitiveReader {
};
}
case 83: {
const id = this.readUint(); if (id === null) { return resetPointer() }
const styles = this.readString(); if (styles === null) { return resetPointer() }
const sheetID = this.readUint(); if (sheetID === null) { return resetPointer() }
const baseURL = this.readString(); if (baseURL === null) { return resetPointer() }
return {
tp: "replace_vcss",
id,
styles,
sheetID,
baseURL,
};
}
case 90: {
const timestamp = this.readUint(); if (timestamp === null) { return resetPointer() }
const projectID = this.readUint(); if (projectID === null) { return resetPointer() }

View file

@ -49,7 +49,6 @@ import type {
RawAdoptedSsAddOwner,
RawAdoptedSsRemoveOwner,
RawZustand,
RawReplaceVcss,
RawIosSessionStart,
RawIosCustomEvent,
RawIosScreenChanges,
@ -152,8 +151,6 @@ export type AdoptedSsRemoveOwner = RawAdoptedSsRemoveOwner & Timed
export type Zustand = RawZustand & Timed
export type ReplaceVcss = RawReplaceVcss & Timed
export type IosSessionStart = RawIosSessionStart & Timed
export type IosCustomEvent = RawIosCustomEvent & Timed

View file

@ -307,14 +307,6 @@ export interface RawZustand {
state: string,
}
export interface RawReplaceVcss {
tp: "replace_vcss",
id: number,
styles: string,
sheetID: number,
baseURL: string,
}
export interface RawIosSessionStart {
tp: "ios_session_start",
timestamp: number,
@ -386,4 +378,4 @@ export interface RawIosNetworkCall {
}
export type RawMessage = RawTimestamp | RawSetPageLocation | RawSetViewportSize | RawSetViewportScroll | RawCreateDocument | RawCreateElementNode | RawCreateTextNode | RawMoveNode | RawRemoveNode | RawSetNodeAttribute | RawRemoveNodeAttribute | RawSetNodeData | RawSetCssData | RawSetNodeScroll | RawSetInputValue | RawSetInputChecked | RawMouseMove | RawConsoleLog | RawCssInsertRule | RawCssDeleteRule | RawFetch | RawProfiler | RawOTable | RawRedux | RawVuex | RawMobX | RawNgRx | RawGraphQl | RawPerformanceTrack | RawConnectionInformation | RawSetPageVisibility | RawLongTask | RawSetNodeAttributeURLBased | RawSetCssDataURLBased | RawCssInsertRuleURLBased | RawMouseClick | RawCreateIFrameDocument | RawAdoptedSsReplaceURLBased | RawAdoptedSsReplace | RawAdoptedSsInsertRuleURLBased | RawAdoptedSsInsertRule | RawAdoptedSsDeleteRule | RawAdoptedSsAddOwner | RawAdoptedSsRemoveOwner | RawZustand | RawReplaceVcss | RawIosSessionStart | RawIosCustomEvent | RawIosScreenChanges | RawIosClickEvent | RawIosPerformanceEvent | RawIosLog | RawIosNetworkCall;
export type RawMessage = RawTimestamp | RawSetPageLocation | RawSetViewportSize | RawSetViewportScroll | RawCreateDocument | RawCreateElementNode | RawCreateTextNode | RawMoveNode | RawRemoveNode | RawSetNodeAttribute | RawRemoveNodeAttribute | RawSetNodeData | RawSetCssData | RawSetNodeScroll | RawSetInputValue | RawSetInputChecked | RawMouseMove | RawConsoleLog | RawCssInsertRule | RawCssDeleteRule | RawFetch | RawProfiler | RawOTable | RawRedux | RawVuex | RawMobX | RawNgRx | RawGraphQl | RawPerformanceTrack | RawConnectionInformation | RawSetPageVisibility | RawLongTask | RawSetNodeAttributeURLBased | RawSetCssDataURLBased | RawCssInsertRuleURLBased | RawMouseClick | RawCreateIFrameDocument | RawAdoptedSsReplaceURLBased | RawAdoptedSsReplace | RawAdoptedSsInsertRuleURLBased | RawAdoptedSsInsertRule | RawAdoptedSsDeleteRule | RawAdoptedSsAddOwner | RawAdoptedSsRemoveOwner | RawZustand | RawIosSessionStart | RawIosCustomEvent | RawIosScreenChanges | RawIosClickEvent | RawIosPerformanceEvent | RawIosLog | RawIosNetworkCall;

View file

@ -62,7 +62,6 @@ export const TP_MAP = {
76: "adopted_ss_add_owner",
77: "adopted_ss_remove_owner",
79: "zustand",
83: "replace_vcss",
90: "ios_session_start",
93: "ios_custom_event",
96: "ios_screen_changes",

View file

@ -389,16 +389,8 @@ type TrZustand = [
state: string,
]
type TrReplaceVCSS = [
type: 83,
id: number,
styles: string,
sheetID: number,
baseURL: string,
]
export type TrackerMessage = TrBatchMetadata | TrPartitionedMessage | TrTimestamp | TrSetPageLocation | TrSetViewportSize | TrSetViewportScroll | TrCreateDocument | TrCreateElementNode | TrCreateTextNode | TrMoveNode | TrRemoveNode | TrSetNodeAttribute | TrRemoveNodeAttribute | TrSetNodeData | TrSetNodeScroll | TrSetInputTarget | TrSetInputValue | TrSetInputChecked | TrMouseMove | TrConsoleLog | TrPageLoadTiming | TrPageRenderTiming | TrJSException | TrRawCustomEvent | TrUserID | TrUserAnonymousID | TrMetadata | TrCSSInsertRule | TrCSSDeleteRule | TrFetch | TrProfiler | TrOTable | TrStateAction | TrRedux | TrVuex | TrMobX | TrNgRx | TrGraphQL | TrPerformanceTrack | TrResourceTiming | TrConnectionInformation | TrSetPageVisibility | TrLongTask | TrSetNodeAttributeURLBased | TrSetCSSDataURLBased | TrTechnicalInfo | TrCustomIssue | TrCSSInsertRuleURLBased | TrMouseClick | TrCreateIFrameDocument | TrAdoptedSSReplaceURLBased | TrAdoptedSSInsertRuleURLBased | TrAdoptedSSDeleteRule | TrAdoptedSSAddOwner | TrAdoptedSSRemoveOwner | TrZustand | TrReplaceVCSS
export type TrackerMessage = TrBatchMetadata | TrPartitionedMessage | TrTimestamp | TrSetPageLocation | TrSetViewportSize | TrSetViewportScroll | TrCreateDocument | TrCreateElementNode | TrCreateTextNode | TrMoveNode | TrRemoveNode | TrSetNodeAttribute | TrRemoveNodeAttribute | TrSetNodeData | TrSetNodeScroll | TrSetInputTarget | TrSetInputValue | TrSetInputChecked | TrMouseMove | TrConsoleLog | TrPageLoadTiming | TrPageRenderTiming | TrJSException | TrRawCustomEvent | TrUserID | TrUserAnonymousID | TrMetadata | TrCSSInsertRule | TrCSSDeleteRule | TrFetch | TrProfiler | TrOTable | TrStateAction | TrRedux | TrVuex | TrMobX | TrNgRx | TrGraphQL | TrPerformanceTrack | TrResourceTiming | TrConnectionInformation | TrSetPageVisibility | TrLongTask | TrSetNodeAttributeURLBased | TrSetCSSDataURLBased | TrTechnicalInfo | TrCustomIssue | TrCSSInsertRuleURLBased | TrMouseClick | TrCreateIFrameDocument | TrAdoptedSSReplaceURLBased | TrAdoptedSSInsertRuleURLBased | TrAdoptedSSDeleteRule | TrAdoptedSSAddOwner | TrAdoptedSSRemoveOwner | TrZustand
export default function translate(tMsg: TrackerMessage): RawMessage | null {
switch(tMsg[0]) {
@ -773,16 +765,6 @@ export default function translate(tMsg: TrackerMessage): RawMessage | null {
}
}
case 83: {
return {
tp: "replace_vcss",
id: tMsg[1],
styles: tMsg[2],
sheetID: tMsg[3],
baseURL: tMsg[4],
}
}
default:
return null
}

View file

@ -44,7 +44,7 @@ message 1, 'SessionStart', :tracker => false, :replayer => false do
string 'UserCountry'
string 'UserID'
end
# message 2, 'CreateDocument', do
## message 2, 'CreateDocument', do
# end
message 3, 'SessionEnd', :tracker => false, :replayer => false do
uint 'Timestamp'
@ -62,7 +62,7 @@ message 6, 'SetViewportScroll' do
int 'X'
int 'Y'
end
# Depricated sinse tracker 3.6.0 in favor of CreateDocument(id=2)
# (should be) Depricated sinse tracker ?.?.? in favor of CreateDocument(id=2)
# in order to use Document as a default root node instead of the documentElement
message 7, 'CreateDocument' do
end
@ -238,8 +238,6 @@ message 36, 'CustomEvent', :tracker => false, :replayer => false do
string 'Name'
string 'Payload'
end
message 37, 'CSSInsertRule' do
uint 'ID'
string 'Rule'
@ -249,7 +247,6 @@ message 38, 'CSSDeleteRule' do
uint 'ID'
uint 'Index'
end
message 39, 'Fetch' do
string 'Method'
string 'URL'
@ -265,7 +262,6 @@ message 40, 'Profiler' do
string 'Args'
string 'Result'
end
message 41, 'OTable' do
string 'Key'
string 'Value'
@ -278,7 +274,6 @@ message 43, 'StateActionEvent', :tracker => false, :replayer => false do
uint 'Timestamp'
string 'Type'
end
message 44, 'Redux' do
string 'Action'
string 'State'
@ -363,6 +358,7 @@ message 56, 'PerformanceTrackAggr', :tracker => false, :replayer => false do
uint 'AvgUsedJSHeapSize'
uint 'MaxUsedJSHeapSize'
end
## 57 58
message 59, 'LongTask' do
uint 'Timestamp'
uint 'Duration'
@ -400,6 +396,7 @@ message 64, 'CustomIssue', :replayer => false do
string 'Name'
string 'Payload'
end
## 65
message 66, 'AssetCache', :replayer => false, :tracker => false do
string 'URL'
end
@ -409,6 +406,7 @@ message 67, 'CSSInsertRuleURLBased' do
uint 'Index'
string 'BaseURL'
end
## 68
message 69, 'MouseClick' do
uint 'ID'
uint 'HesitationTime'
@ -416,13 +414,13 @@ message 69, 'MouseClick' do
string 'Selector'
end
# Since 3.4.0
# Since 3.4.0 //also used for ShadowDom. TODO:remane to CreateRoot
message 70, 'CreateIFrameDocument' do
uint 'FrameID'
uint 'ID'
end
#Since 3.6.0 AdoptedStyleSheets
#Since 4.0.0 AdoptedStyleSheets etc
message 71, 'AdoptedSSReplaceURLBased' do
uint 'SheetID'
string 'Text'
@ -455,15 +453,16 @@ message 77, 'AdoptedSSRemoveOwner' do
uint 'SheetID'
uint 'ID'
end
#Since 4.0.1
# message 78, 'ReplaceVCSSURLBased' do
# uint 'SheetID'
# uint 'Index'
# string 'Styles'
# string 'BaseURL'
# end
message 79, 'Zustand' do
string 'Mutation'
string 'State'
end
message 83, 'ReplaceVCSS' do
uint 'ID'
string 'Styles'
uint 'SheetID'
string 'BaseURL'
end
# 80 -- 90 reserved

View file

@ -58,7 +58,6 @@ export declare const enum Type {
AdoptedSSAddOwner = 76,
AdoptedSSRemoveOwner = 77,
Zustand = 79,
ReplaceVCSS = 83,
}
@ -447,14 +446,6 @@ export type Zustand = [
/*state:*/ string,
]
export type ReplaceVCSS = [
/*type:*/ Type.ReplaceVCSS,
/*id:*/ number,
/*styles:*/ string,
/*sheetID:*/ number,
/*baseURL:*/ string,
]
type Message = BatchMetadata | PartitionedMessage | Timestamp | SetPageLocation | SetViewportSize | SetViewportScroll | CreateDocument | CreateElementNode | CreateTextNode | MoveNode | RemoveNode | SetNodeAttribute | RemoveNodeAttribute | SetNodeData | SetNodeScroll | SetInputTarget | SetInputValue | SetInputChecked | MouseMove | ConsoleLog | PageLoadTiming | PageRenderTiming | JSException | RawCustomEvent | UserID | UserAnonymousID | Metadata | CSSInsertRule | CSSDeleteRule | Fetch | Profiler | OTable | StateAction | Redux | Vuex | MobX | NgRx | GraphQL | PerformanceTrack | ResourceTiming | ConnectionInformation | SetPageVisibility | LongTask | SetNodeAttributeURLBased | SetCSSDataURLBased | TechnicalInfo | CustomIssue | CSSInsertRuleURLBased | MouseClick | CreateIFrameDocument | AdoptedSSReplaceURLBased | AdoptedSSInsertRuleURLBased | AdoptedSSDeleteRule | AdoptedSSAddOwner | AdoptedSSRemoveOwner | Zustand | ReplaceVCSS
type Message = BatchMetadata | PartitionedMessage | Timestamp | SetPageLocation | SetViewportSize | SetViewportScroll | CreateDocument | CreateElementNode | CreateTextNode | MoveNode | RemoveNode | SetNodeAttribute | RemoveNodeAttribute | SetNodeData | SetNodeScroll | SetInputTarget | SetInputValue | SetInputChecked | MouseMove | ConsoleLog | PageLoadTiming | PageRenderTiming | JSException | RawCustomEvent | UserID | UserAnonymousID | Metadata | CSSInsertRule | CSSDeleteRule | Fetch | Profiler | OTable | StateAction | Redux | Vuex | MobX | NgRx | GraphQL | PerformanceTrack | ResourceTiming | ConnectionInformation | SetPageVisibility | LongTask | SetNodeAttributeURLBased | SetCSSDataURLBased | TechnicalInfo | CustomIssue | CSSInsertRuleURLBased | MouseClick | CreateIFrameDocument | AdoptedSSReplaceURLBased | AdoptedSSInsertRuleURLBased | AdoptedSSDeleteRule | AdoptedSSAddOwner | AdoptedSSRemoveOwner | Zustand
export default Message

View file

@ -719,18 +719,3 @@ export function Zustand(
]
}
export function ReplaceVCSS(
id: number,
styles: string,
sheetID: number,
baseURL: string,
): Messages.ReplaceVCSS {
return [
Messages.Type.ReplaceVCSS,
id,
styles,
sheetID,
baseURL,
]
}

View file

@ -1,10 +1,5 @@
import type App from '../app/index.js'
import {
CSSInsertRuleURLBased,
CSSDeleteRule,
TechnicalInfo,
ReplaceVCSS,
} from '../app/messages.gen.js'
import { CSSInsertRuleURLBased, CSSDeleteRule, TechnicalInfo } from '../app/messages.gen.js'
import { hasTag } from '../app/guards.js'
export default function (app: App | null) {
@ -32,28 +27,25 @@ export default function (app: App | null) {
} // else error?
})
const replaceVirtualCss = app.safe((ctx: CSSGroupingRule) => {
let uppermostRuleset = ctx.parentRule
while (uppermostRuleset?.parentRule) {
uppermostRuleset = uppermostRuleset.parentRule
const replaceGroupingRule = app.safe((ctx: CSSGroupingRule) => {
let topmostRule: CSSRule = ctx
while (topmostRule.parentRule) {
topmostRule = topmostRule.parentRule
}
if (uppermostRuleset?.parentStyleSheet?.ownerNode) {
const entireStyle = uppermostRuleset.cssText
const parentNodeID = app.nodes.getID(uppermostRuleset.parentStyleSheet.ownerNode)
const ruleList = uppermostRuleset.parentStyleSheet.cssRules
let id = -1
for (let i = 0; i < ruleList.length; i++) {
const rule = ruleList.item(i)
if (rule === uppermostRuleset) {
id = i
break
}
if (topmostRule.parentStyleSheet?.ownerNode) {
const entireStyle = topmostRule.cssText
const nodeID = app.nodes.getID(topmostRule.parentStyleSheet.ownerNode)
if (nodeID === undefined) {
return
}
if (parentNodeID && id >= 0) {
app.send(ReplaceVCSS(parentNodeID, entireStyle, id, app.getBaseHref()))
const ruleList = topmostRule.parentStyleSheet.cssRules
const idx = Array.from(ruleList).indexOf(topmostRule)
if (idx >= 0) {
app.send(CSSDeleteRule(nodeID, idx))
app.send(CSSInsertRuleURLBased(nodeID, entireStyle, idx, app.getBaseHref()))
}
} else {
app.debug.error('Owner Node not found')
app.debug.error('Owner Node not found for the rule', topmostRule)
}
})
@ -73,21 +65,17 @@ export default function (app: App | null) {
context.CSSGroupingRule.prototype.insertRule = function (rule: string, index = 0) {
const result = groupInsertRule.call(this, rule, index) as number
replaceVirtualCss(this)
replaceGroupingRule(this)
return result
}
context.CSSGroupingRule.prototype.deleteRule = function (index = 0) {
const result = groupDeleteRule.call(this, index) as number
replaceVirtualCss(this)
replaceGroupingRule(this)
return result
}
}
sheet.patchContext(window)
patchContext(window)
app.observer.attachContextCallback(patchContext)
app.nodes.attachNodeCallback((node: Node): void => {

View file

@ -234,10 +234,6 @@ export default class MessageEncoder extends PrimitiveEncoder {
return this.string(msg[1]) && this.string(msg[2])
break
case Messages.Type.ReplaceVCSS:
return this.uint(msg[1]) && this.string(msg[2]) && this.uint(msg[3]) && this.string(msg[4])
break
}
}