Skip to content

Commit 98eeb59

Browse files
committed
feat(replay): Ensure too short/long sessions are not flushed
1 parent 768b025 commit 98eeb59

File tree

54 files changed

+231
-5
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+231
-5
lines changed

packages/browser-integration-tests/suites/replay/bufferMode/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
});
89

910
Sentry.init({

packages/browser-integration-tests/suites/replay/captureReplayFromReplayPackage/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ window.Sentry = Sentry;
55
window.Replay = new Replay({
66
flushMinDelay: 200,
77
flushMaxDelay: 200,
8+
minReplayDuration: 0,
89
});
910

1011
Sentry.init({

packages/browser-integration-tests/suites/replay/compression/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
useCompression: true,
89
});
910

packages/browser-integration-tests/suites/replay/customEvents/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
useCompression: false,
89
blockAllMedia: false,
910
});

packages/browser-integration-tests/suites/replay/dsc/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ window.Sentry = Sentry;
55
window.Replay = new Sentry.Replay({
66
flushMinDelay: 200,
77
flushMaxDelay: 200,
8+
minReplayDuration: 0,
89
useCompression: false,
910
});
1011

packages/browser-integration-tests/suites/replay/errors/droppedError/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
});
89

910
Sentry.init({

packages/browser-integration-tests/suites/replay/errors/errorModeCustomTransport/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
});
89

910
Sentry.init({

packages/browser-integration-tests/suites/replay/errors/errorNotSent/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
});
89

910
Sentry.init({

packages/browser-integration-tests/suites/replay/errors/errorsInSession/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
});
89

910
Sentry.init({

packages/browser-integration-tests/suites/replay/errors/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
});
89

910
Sentry.init({

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/fetch/captureRequestBody/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78

89
networkDetailAllowUrls: ['http://localhost:7654/foo', 'http://sentry-test.io/foo'],
910
networkCaptureBodies: true,

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/fetch/captureRequestHeaders/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78

89
networkDetailAllowUrls: ['http://localhost:7654/foo'],
910
networkRequestHeaders: ['X-Test-Header'],

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/fetch/captureResponseBody/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78

89
networkDetailAllowUrls: ['http://localhost:7654/foo'],
910
networkCaptureBodies: true,

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/fetch/captureResponseHeaders/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78

89
networkDetailAllowUrls: ['http://localhost:7654/foo'],
910
networkResponseHeaders: ['X-Test-Header'],

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/fetch/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
});
89

910
Sentry.init({

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/xhr/captureRequestBody/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78

89
networkDetailAllowUrls: ['http://localhost:7654/foo', 'http://sentry-test.io/foo'],
910
networkCaptureBodies: true,

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/xhr/captureRequestHeaders/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78

89
networkDetailAllowUrls: ['http://localhost:7654/foo'],
910
networkRequestHeaders: ['X-Test-Header'],

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/xhr/captureResponseBody/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78

89
networkDetailAllowUrls: ['http://localhost:7654/foo'],
910
networkCaptureBodies: true,

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/xhr/captureResponseHeaders/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78

89
networkDetailAllowUrls: ['http://localhost:7654/foo'],
910
networkResponseHeaders: ['X-Test-Header'],

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/xhr/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
});
89

910
Sentry.init({

packages/browser-integration-tests/suites/replay/fileInput/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
useCompression: false,
89
maskAllInputs: false,
910
});

packages/browser-integration-tests/suites/replay/flushing/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
useCompression: false,
89
});
910

packages/browser-integration-tests/suites/replay/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
});
89

910
Sentry.init({

packages/browser-integration-tests/suites/replay/keyboardEvents/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
});
89

910
Sentry.init({

packages/browser-integration-tests/suites/replay/largeMutations/defaultOptions/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
});
89

910
Sentry.init({

packages/browser-integration-tests/suites/replay/largeMutations/mutationLimit/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
mutationLimit: 250,
89
});
910

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import * as Sentry from '@sentry/browser';
2+
3+
window.Sentry = Sentry;
4+
window.Replay = new Sentry.Replay({
5+
flushMinDelay: 200,
6+
flushMaxDelay: 200,
7+
minReplayDuration: 2000,
8+
});
9+
10+
Sentry.init({
11+
dsn: 'https://[email protected]/1337',
12+
sampleRate: 0,
13+
replaysSessionSampleRate: 1.0,
14+
replaysOnErrorSampleRate: 0.0,
15+
debug: true,
16+
17+
integrations: [window.Replay],
18+
});
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="utf-8" />
5+
</head>
6+
<body>
7+
<button onclick="console.log('Test log 1')" id="button1">Click me</button>
8+
<button onclick="console.log('Test log 2')" id="button2">Click me</button>
9+
</body>
10+
</html>
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import { expect } from '@playwright/test';
2+
3+
import { sentryTest } from '../../../utils/fixtures';
4+
import { getExpectedReplayEvent } from '../../../utils/replayEventTemplates';
5+
import { getReplayEvent, shouldSkipReplayTest, waitForReplayRequest } from '../../../utils/replayHelpers';
6+
7+
const MIN_DURATION = 2000;
8+
9+
sentryTest('doest not send replay before min. duration', async ({ getLocalTestPath, page, forceFlushReplay }) => {
10+
if (shouldSkipReplayTest()) {
11+
sentryTest.skip();
12+
}
13+
14+
let counter = 0;
15+
const reqPromise0 = waitForReplayRequest(page, () => {
16+
counter++;
17+
return true;
18+
});
19+
20+
await page.route('https://dsn.ingest.sentry.io/**/*', route => {
21+
return route.fulfill({
22+
status: 200,
23+
contentType: 'application/json',
24+
body: JSON.stringify({ id: 'test-id' }),
25+
});
26+
});
27+
28+
const url = await getLocalTestPath({ testDir: __dirname });
29+
30+
await page.goto(url);
31+
32+
// This triggers a page blur, which should trigger a flush
33+
// However, as we are only here too short, this should not actually _send_ anything
34+
await page.evaluate(`Object.defineProperty(document, 'visibilityState', {
35+
configurable: true,
36+
get: function () {
37+
return 'hidden';
38+
},
39+
});
40+
document.dispatchEvent(new Event('visibilitychange'));`);
41+
expect(counter).toBe(0);
42+
43+
// Now wait for 2s until min duration is reached, and try again
44+
await new Promise(resolve => setTimeout(resolve, MIN_DURATION));
45+
await page.evaluate(`Object.defineProperty(document, 'visibilityState', {
46+
configurable: true,
47+
get: function () {
48+
return 'visible';
49+
},
50+
});
51+
document.dispatchEvent(new Event('visibilitychange'));`);
52+
await page.evaluate(`Object.defineProperty(document, 'visibilityState', {
53+
configurable: true,
54+
get: function () {
55+
return 'hidden';
56+
},
57+
});
58+
document.dispatchEvent(new Event('visibilitychange'));`);
59+
60+
const replayEvent0 = getReplayEvent(await reqPromise0);
61+
expect(replayEvent0).toEqual(getExpectedReplayEvent({}));
62+
expect(counter).toBe(1);
63+
});

packages/browser-integration-tests/suites/replay/multiple-pages/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
});
89

910
Sentry.init({

packages/browser-integration-tests/suites/replay/privacyBlock/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
useCompression: false,
89
blockAllMedia: false,
910
block: ['link[rel="icon"]', 'video', '.nested-hide'],

packages/browser-integration-tests/suites/replay/privacyDefault/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
useCompression: false,
89
});
910

packages/browser-integration-tests/suites/replay/privacyInput/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
useCompression: false,
89
maskAllInputs: false,
910
});

packages/browser-integration-tests/suites/replay/privacyInputMaskAll/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
useCompression: false,
89
maskAllInputs: true,
910
});

packages/browser-integration-tests/suites/replay/replayShim/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ window.Sentry = Sentry;
66
window.Replay = new Sentry.Replay({
77
flushMinDelay: 200,
88
flushMaxDelay: 200,
9+
minReplayDuration: 0,
910
});
1011

1112
Sentry.init({

packages/browser-integration-tests/suites/replay/requests/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
useCompression: false,
89
});
910

packages/browser-integration-tests/suites/replay/sampling/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
});
89

910
Sentry.init({

packages/browser-integration-tests/suites/replay/sessionExpiry/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
});
89

910
Sentry.init({

packages/browser-integration-tests/suites/replay/sessionInactive/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
});
89

910
Sentry.init({

packages/browser-integration-tests/suites/replay/sessionMaxAge/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
});
89

910
Sentry.init({

packages/browser-integration-tests/suites/replay/slowClick/disable/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ window.Sentry = Sentry;
44
window.Replay = new Sentry.Replay({
55
flushMinDelay: 200,
66
flushMaxDelay: 200,
7+
minReplayDuration: 0,
78
slowClickTimeout: 0,
89
});
910

0 commit comments

Comments
 (0)