@@ -6,12 +6,18 @@ import { handle } from '../../../common/event-emitter/handle'
66import { setupSetPageViewNameAPI } from '../../../loaders/api/setPageViewName'
77import { InstrumentBase } from '../../utils/instrument-base'
88import * as CONSTANTS from '../constants'
9+ import { SESSION_EVENTS } from '../../../common/session/constants'
10+ import { dispatchGlobalEvent } from '../../../common/dispatch/global-event'
11+ import { onDOMContentLoaded , onPopstateChange , onWindowLoad } from '../../../common/window/load'
912
1013export class Instrument extends InstrumentBase {
1114 static featureName = CONSTANTS . FEATURE_NAME
1215 constructor ( agentRef ) {
1316 super ( agentRef , CONSTANTS . FEATURE_NAME )
1417
18+ /** setup inspection events for window lifecycle */
19+ this . setupInspectionEvents ( agentRef . agentIdentifier )
20+
1521 /** feature specific APIs */
1622 setupSetPageViewNameAPI ( agentRef )
1723
@@ -20,6 +26,41 @@ export class Instrument extends InstrumentBase {
2026
2127 this . importAggregator ( agentRef , ( ) => import ( /* webpackChunkName: "page_view_event-aggregate" */ '../aggregate' ) )
2228 }
29+
30+ setupInspectionEvents ( agentIdentifier ) {
31+ const dispatch = ( evt , name ) => {
32+ if ( ! evt ) return
33+ dispatchGlobalEvent ( {
34+ agentIdentifier,
35+ timeStamp : evt . timeStamp ,
36+ loaded : evt . target . readyState === 'complete' ,
37+ type : 'window' ,
38+ name,
39+ data : evt . target . location + ''
40+ } )
41+ }
42+
43+ onDOMContentLoaded ( ( evt ) => {
44+ dispatch ( evt , 'DOMContentLoaded' )
45+ } )
46+
47+ onWindowLoad ( ( evt ) => {
48+ dispatch ( evt , 'load' )
49+ } )
50+
51+ onPopstateChange ( ( evt ) => {
52+ dispatch ( evt , 'navigate' )
53+ } )
54+
55+ this . ee . on ( SESSION_EVENTS . UPDATE , ( _ , data ) => {
56+ dispatchGlobalEvent ( {
57+ agentIdentifier,
58+ type : 'lifecycle' ,
59+ name : 'session' ,
60+ data
61+ } )
62+ } )
63+ }
2364}
2465
2566export const PageViewEvent = Instrument
0 commit comments