Skip to content

Commit deccddb

Browse files
authored
feat(rpc): update BrowserServer (#3112)
- Make BrowserServer a scope. - Plumb exitCode and signal to BrowserServer.on('close'). - Use toImpl in a test.
1 parent 0f0e2ac commit deccddb

File tree

7 files changed

+29
-10
lines changed

7 files changed

+29
-10
lines changed

src/rpc/channels.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,10 @@ export interface BrowserServerChannel extends Channel {
274274
close(params?: BrowserServerCloseParams): Promise<BrowserServerCloseResult>;
275275
kill(params?: BrowserServerKillParams): Promise<BrowserServerKillResult>;
276276
}
277-
export type BrowserServerCloseEvent = {};
277+
export type BrowserServerCloseEvent = {
278+
exitCode?: number,
279+
signal?: string,
280+
};
278281
export type BrowserServerCloseParams = {};
279282
export type BrowserServerCloseResult = void;
280283
export type BrowserServerKillParams = {};

src/rpc/client/browserServer.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,11 @@ export class BrowserServer extends ChannelOwner<BrowserServerChannel, BrowserSer
2525
}
2626

2727
constructor(parent: ChannelOwner, type: string, guid: string, initializer: BrowserServerInitializer) {
28-
super(parent, type, guid, initializer);
29-
this._channel.on('close', () => this.emit(Events.BrowserServer.Close));
28+
super(parent, type, guid, initializer, true);
29+
this._channel.on('close', ({ exitCode, signal }) => {
30+
this.emit(Events.BrowserServer.Close, exitCode === undefined ? null : exitCode, signal === undefined ? null : signal);
31+
this._dispose();
32+
});
3033
}
3134

3235
process(): ChildProcess {

src/rpc/client/validator.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,10 @@ scheme.BrowserServerInitializer = tObject({
242242
wsEndpoint: tString,
243243
pid: tNumber,
244244
});
245-
scheme.BrowserServerCloseEvent = tObject({});
245+
scheme.BrowserServerCloseEvent = tObject({
246+
exitCode: tOptional(tNumber),
247+
signal: tOptional(tString),
248+
});
246249
scheme.BrowserServerCloseParams = tOptional(tObject({}));
247250
scheme.BrowserServerCloseResult = tUndefined;
248251
scheme.BrowserServerKillParams = tOptional(tObject({}));

src/rpc/protocol.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,9 @@ BrowserServer:
354354
events:
355355

356356
close:
357-
357+
parameters:
358+
exitCode: number?
359+
signal: string?
358360

359361

360362
Browser:

src/rpc/server/browserServerDispatcher.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,14 @@ export class BrowserServerDispatcher extends Dispatcher<BrowserServer, BrowserSe
2424
super(scope, browserServer, 'BrowserServer', {
2525
wsEndpoint: browserServer.wsEndpoint(),
2626
pid: browserServer.process().pid
27+
}, true);
28+
browserServer.on(Events.BrowserServer.Close, (exitCode, signal) => {
29+
this._dispatchEvent('close', {
30+
exitCode: exitCode === null ? undefined : exitCode,
31+
signal: signal === null ? undefined : signal,
32+
});
33+
this._dispose();
2734
});
28-
browserServer.on(Events.BrowserServer.Close, () => this._dispatchEvent('close'));
2935
}
3036

3137
async close(): Promise<void> {

test/defaultbrowsercontext.jest.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -327,8 +327,8 @@ describe('launchPersistentContext()', function() {
327327
const error = await browserType.launchPersistentContext(userDataDir, options).catch(e => e);
328328
expect(error.message).toContain('can not specify page');
329329
});
330-
it('should have passed URL when launching with ignoreDefaultArgs: true', async ({browserType, defaultBrowserOptions, server, userDataDir}) => {
331-
const args = require('..')[browserType.name()]._defaultArgs(defaultBrowserOptions, 'persistent', userDataDir, 0).filter(a => a !== 'about:blank');
330+
it.skip(USES_HOOKS)('should have passed URL when launching with ignoreDefaultArgs: true', async ({browserType, defaultBrowserOptions, server, userDataDir, toImpl}) => {
331+
const args = toImpl(browserType)._defaultArgs(defaultBrowserOptions, 'persistent', userDataDir, 0).filter(a => a !== 'about:blank');
332332
const options = {
333333
...defaultBrowserOptions,
334334
args: [...args, server.EMPTY_PAGE],

test/launcher.jest.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,10 +274,12 @@ describe('browserType.launchServer', function() {
274274
});
275275
it('should fire close event', async ({browserType, defaultBrowserOptions}) => {
276276
const browserServer = await browserType.launchServer(defaultBrowserOptions);
277-
await Promise.all([
278-
new Promise(f => browserServer.on('close', f)),
277+
const [result] = await Promise.all([
278+
new Promise(f => browserServer.on('close', (exitCode, signal) => f({ exitCode, signal }))),
279279
browserServer.close(),
280280
]);
281+
expect(result.exitCode).toBe(0);
282+
expect(result.signal).toBe(null);
281283
});
282284
});
283285

0 commit comments

Comments
 (0)