From 44c8db0655427a947b21a879e5ac112ff2c81184 Mon Sep 17 00:00:00 2001 From: George Xu Date: Thu, 30 Apr 2026 22:37:40 -0700 Subject: [PATCH] test: cover window and browser values of preferredDisplaySurface The request-object test only asserted the 'monitor' case, leaving 'window' and 'browser' unexercised. Since PreferredDisplaySurfaceToString has a default branch that coerces unknown enum values to 'none', a typo swapping the 'window' or 'browser' arms would ship silently. Parameterize the existing test over all three non-default values. Notes: none --- spec/api-media-handler-spec.ts | 43 +++++++++++++++++----------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/spec/api-media-handler-spec.ts b/spec/api-media-handler-spec.ts index 81bd33e373..4dad9d700b 100644 --- a/spec/api-media-handler-spec.ts +++ b/spec/api-media-handler-spec.ts @@ -62,28 +62,29 @@ describe('setDisplayMediaRequestHandler', () => { expect(ok).to.be.true(message); }); - it('includes preferredDisplaySurface in the request object', async () => { - const ses = session.fromPartition('' + Math.random()); - let mediaRequest: any = null; - ses.setDisplayMediaRequestHandler((request, callback) => { - mediaRequest = request; - callback({ video: request.frame }); + for (const surface of ['monitor', 'window', 'browser'] as const) { + it(`includes preferredDisplaySurface='${surface}' in the request object`, async () => { + const ses = session.fromPartition('' + Math.random()); + let mediaRequest: any = null; + ses.setDisplayMediaRequestHandler((request, callback) => { + mediaRequest = request; + callback({ video: request.frame }); + }); + const w = new BrowserWindow({ show: false, webPreferences: { session: ses } }); + await w.loadURL(serverUrl); + const { ok, message } = await w.webContents.executeJavaScript( + ` + navigator.mediaDevices.getDisplayMedia({ + video: { displaySurface: '${surface}' }, + audio: false, + }).then(x => ({ok: x instanceof MediaStream}), e => ({ok: false, message: e.message})) + `, + true + ); + expect(ok).to.be.true(message); + expect(mediaRequest.preferredDisplaySurface).to.equal(surface); }); - const w = new BrowserWindow({ show: false, webPreferences: { session: ses } }); - await w.loadURL(serverUrl); - const { ok, message } = await w.webContents.executeJavaScript( - ` - navigator.mediaDevices.getDisplayMedia({ - video: { displaySurface: 'monitor' }, - audio: false, - }).then(x => ({ok: x instanceof MediaStream}), e => ({ok: false, message: e.message})) - `, - true - ); - expect(ok).to.be.true(message); - expect(mediaRequest.preferredDisplaySurface).to.be.a('string'); - expect(mediaRequest.preferredDisplaySurface).to.equal('monitor'); - }); + } it('defaults preferredDisplaySurface to none when not specified', async () => { const ses = session.fromPartition('' + Math.random());