Skip to content

Commit

Permalink
[fix] Don't trigger Finish event when in liveMode (#1115)
Browse files Browse the repository at this point in the history
  • Loading branch information
Juice10 authored Feb 9, 2023
1 parent a77e302 commit 25a4f5a
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 2 deletions.
5 changes: 4 additions & 1 deletion packages/rrweb/src/replay/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -709,7 +709,10 @@ export class Replayer {

// events are kept sorted by timestamp, check if this is the last event
const last_index = this.service.state.context.events.length - 1;
if (event === this.service.state.context.events[last_index]) {
if (
!this.config.liveMode &&
event === this.service.state.context.events[last_index]
) {
const finish = () => {
if (last_index < this.service.state.context.events.length - 1) {
// more events have been added since the setTimeout
Expand Down
29 changes: 28 additions & 1 deletion packages/rrweb/test/replayer.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,17 @@ import StyleSheetTextMutation from './events/style-sheet-text-mutation';
import canvasInIframe from './events/canvas-in-iframe';
import adoptedStyleSheet from './events/adopted-style-sheet';
import adoptedStyleSheetModification from './events/adopted-style-sheet-modification';
import { ReplayerEvents } from '@rrweb/types';

interface ISuite {
code: string;
browser: puppeteer.Browser;
page: puppeteer.Page;
}

type IWindow = Window &
typeof globalThis & { rrweb: typeof import('../src'); events: typeof events };

describe('replayer', function () {
jest.setTimeout(10_000);

Expand All @@ -45,7 +49,7 @@ describe('replayer', function () {
page = await browser.newPage();
await page.goto('about:blank');
await page.evaluate(code);
await page.evaluate(`let events = ${JSON.stringify(events)}`);
await page.evaluate(`var events = ${JSON.stringify(events)}`);

page.on('console', (msg) => console.log('PAGE LOG:', msg.text()));
});
Expand Down Expand Up @@ -679,6 +683,29 @@ describe('replayer', function () {
expect(status).toEqual('live');
});

it("shouldn't trigger ReplayerEvents.Finish in live mode", async () => {
const status = await page.evaluate((FinishState) => {
return new Promise((resolve) => {
const win = window as IWindow;
let triggeredFinish = false;
const { Replayer } = win.rrweb;
const replayer = new Replayer([], {
liveMode: true,
});
replayer.on(FinishState, () => {
triggeredFinish = true;
});
replayer.startLive();
replayer.addEvent(win.events[0]);
requestAnimationFrame(() => {
resolve(triggeredFinish);
});
});
}, ReplayerEvents.Finish);

expect(status).toEqual(false);
});

it('replays same timestamp events in correct order', async () => {
await page.evaluate(`events = ${JSON.stringify(orderingEvents)}`);
await page.evaluate(`
Expand Down

0 comments on commit 25a4f5a

Please sign in to comment.