Skip to content

Commit 617ee9f

Browse files
authored
fix: remove redundant start events for multi page mode
1 parent 2eb9c1d commit 617ee9f

File tree

2 files changed

+41
-3
lines changed

2 files changed

+41
-3
lines changed

src/tracker/SessionTracker.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { BaseTracker } from './BaseTracker';
1515
import { Session } from './Session';
1616
import { BrowserInfo } from '../browser';
1717
import { Event } from '../provider';
18+
import { PageType } from '../types';
1819
import { StorageUtil } from '../util/StorageUtil';
1920

2021
const logger = new Logger('SessionTracker');
@@ -69,6 +70,8 @@ export class SessionTracker extends BaseTracker {
6970
pageViewTracker.setIsEntrances();
7071
this.provider.record({ name: Event.PresetEvent.SESSION_START });
7172
}
73+
if (isFirstTime && this.isMultiPageApp() && this.isFromCurrentHost())
74+
return;
7275
this.provider.record({
7376
name: Event.PresetEvent.APP_START,
7477
attributes: {
@@ -77,6 +80,14 @@ export class SessionTracker extends BaseTracker {
7780
});
7881
}
7982

83+
isFromCurrentHost() {
84+
return window.location.host === this.context.browserInfo.latestReferrerHost;
85+
}
86+
87+
isMultiPageApp() {
88+
return this.context.configuration.pageType === PageType.multiPageApp;
89+
}
90+
8091
onPageHide() {
8192
logger.debug('page hide');
8293
this.storeSession();

test/tracker/SessionTracker.test.ts

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,17 @@ global.TextEncoder = TextEncoder;
1717
global.TextDecoder = TextDecoder;
1818

1919
import { JSDOM } from 'jsdom';
20-
import { SendMode } from '../../src';
20+
import { PageType, SendMode } from '../../src';
2121
import { BrowserInfo } from '../../src/browser';
2222
import { NetRequest } from '../../src/network/NetRequest';
23-
import { AnalyticsEventBuilder } from '../../src/provider';
2423
import {
24+
AnalyticsEventBuilder,
2525
ClickstreamContext,
2626
ClickstreamProvider,
2727
Event,
2828
EventRecorder,
2929
} from '../../src/provider';
30-
import { SessionTracker, PageViewTracker } from '../../src/tracker';
30+
import { PageViewTracker, SessionTracker } from '../../src/tracker';
3131
import { StorageUtil } from '../../src/util/StorageUtil';
3232

3333
describe('SessionTracker test', () => {
@@ -89,6 +89,33 @@ describe('SessionTracker test', () => {
8989
expect(session.isNewSession()).toBeTruthy();
9090
});
9191

92+
test('test multi page mode record app start when setUp', () => {
93+
Object.assign(provider.configuration, {
94+
pageType: PageType.multiPageApp,
95+
});
96+
sessionTracker.setUp();
97+
expect(recordMethodMock).toBeCalledWith({
98+
name: Event.PresetEvent.APP_START,
99+
attributes: {
100+
[Event.ReservedAttribute.IS_FIRST_TIME]: true,
101+
},
102+
});
103+
});
104+
105+
test('test multi page mode not record app start when come from the same host name', () => {
106+
Object.assign(provider.configuration, {
107+
pageType: PageType.multiPageApp,
108+
});
109+
context.browserInfo.latestReferrerHost = 'localhost';
110+
sessionTracker.setUp();
111+
expect(recordMethodMock).not.toBeCalledWith({
112+
name: Event.PresetEvent.APP_START,
113+
attributes: {
114+
[Event.ReservedAttribute.IS_FIRST_TIME]: true,
115+
},
116+
});
117+
});
118+
92119
test('test setUp for unsupported env', () => {
93120
const addEventListenerMock = jest.spyOn(window, 'addEventListener');
94121
const addEventListener = (global as any).document.addEventListener;

0 commit comments

Comments
 (0)