| ... | ... | @@ -272,6 +272,7 @@ const makeTestPreviewWebContents = ( |
| 272 | 272 | ipc: { on: vi.fn(), off: vi.fn() }, |
| 273 | 273 | send: webviewSend, |
| 274 | 274 | navigationHistory: { canGoBack: () => false, canGoForward: () => false }, |
| 275 | setIgnoreMenuShortcuts: vi.fn(), |
| 275 | 276 | setWindowOpenHandler: vi.fn(), |
| 276 | 277 | debugger: { |
| 277 | 278 | isAttached: () => false, |
| ... | ... | @@ -382,6 +383,7 @@ const makeFaviconWebContents = (options?: { |
| 382 | 383 | send: webviewSend, |
| 383 | 384 | session: { fetch }, |
| 384 | 385 | navigationHistory: { canGoBack: () => false, canGoForward: () => false }, |
| 386 | setIgnoreMenuShortcuts: vi.fn(), |
| 385 | 387 | setWindowOpenHandler: vi.fn(), |
| 386 | 388 | executeJavaScriptInIsolatedWorld, |
| 387 | 389 | debugger: { |
| ... | ... | @@ -474,6 +476,67 @@ describe("PreviewManager", () => { |
| 474 | 476 | webviewSend.mockClear(); |
| 475 | 477 | }); |
| 476 | 478 | |
| 479 | effectIt.effect("keeps preview shortcuts out of the host window", () => |
| 480 | withManager((manager) => |
| 481 | Effect.gen(function* () { |
| 482 | const preview = makeFaviconWebContents(); |
| 483 | const sendInputEvent = vi.fn(); |
| 484 | const hostWebContents = { sendInputEvent }; |
| 485 | Object.assign(preview.webContents, { hostWebContents }); |
| 486 | fromId.mockReturnValue(preview.webContents); |
| 487 | yield* manager.setMainWindow({ |
| 488 | isDestroyed: () => false, |
| 489 | once: vi.fn(), |
| 490 | webContents: hostWebContents, |
| 491 | } as never); |
| 492 | yield* manager.createTab("tab_keys"); |
| 493 | yield* manager.registerWebview("tab_keys", 42); |
| 494 | |
| 495 | expect( |
| 496 | (preview.webContents as Electron.WebContents).setIgnoreMenuShortcuts, |
| 497 | ).toHaveBeenCalledWith(true); |
| 498 | const beforeInput = preview.listeners.get("before-input-event")!; |
| 499 | for (const control of [false, true]) { |
| 500 | for (const key of ["k", ",", "w", "j", "q", "+", "a", "c", "v", "x"]) { |
| 501 | for (const type of ["keyDown", "keyUp"]) { |
| 502 | const preventDefault = vi.fn(); |
| 503 | beforeInput( |
| 504 | { preventDefault } as never, |
| 505 | { type, key, meta: !control, control, shift: key === "j", alt: false } as never, |
| 506 | ); |
| 507 | yield* Effect.yieldNow; |
| 508 | expect(preventDefault).not.toHaveBeenCalled(); |
| 509 | } |
| 510 | } |
| 511 | } |
| 512 | expect(sendInputEvent).not.toHaveBeenCalled(); |
| 513 | |
| 514 | const preventDefault = vi.fn(); |
| 515 | beforeInput( |
| 516 | { preventDefault } as never, |
| 517 | { |
| 518 | type: "keyDown", |
| 519 | key: "r", |
| 520 | meta: true, |
| 521 | control: false, |
| 522 | shift: false, |
| 523 | alt: false, |
| 524 | } as never, |
| 525 | ); |
| 526 | yield* Effect.yieldNow; |
| 527 | expect(preventDefault).toHaveBeenCalledOnce(); |
| 528 | expect(preview.reload).toHaveBeenCalledOnce(); |
| 529 | expect(sendInputEvent).not.toHaveBeenCalled(); |
| 530 | |
| 531 | const setIgnoreMenuShortcuts = vi.fn(); |
| 532 | preview.listeners.get("did-create-window")!({ |
| 533 | webContents: { setIgnoreMenuShortcuts, setWindowOpenHandler: vi.fn() }, |
| 534 | } as never); |
| 535 | expect(setIgnoreMenuShortcuts).toHaveBeenCalledWith(true); |
| 536 | }), |
| 537 | ), |
| 538 | ); |
| 539 | |
| 477 | 540 | effectIt.effect("reports an unregistered webview as temporarily unavailable", () => |
| 478 | 541 | withManager((manager) => |
| 479 | 542 | Effect.gen(function* () { |
| ... | ... | @@ -617,6 +680,7 @@ describe("PreviewManager", () => { |
| 617 | 680 | ipc: { on: vi.fn(), off: vi.fn() }, |
| 618 | 681 | send: webviewSend, |
| 619 | 682 | navigationHistory: { canGoBack: () => false, canGoForward: () => false }, |
| 683 | setIgnoreMenuShortcuts: vi.fn(), |
| 620 | 684 | setWindowOpenHandler: vi.fn(), |
| 621 | 685 | debugger: { |
| 622 | 686 | isAttached: () => false, |
| ... | ... | @@ -718,6 +782,7 @@ describe("PreviewManager", () => { |
| 718 | 782 | ipc: { on: vi.fn(), off: vi.fn() }, |
| 719 | 783 | send: webviewSend, |
| 720 | 784 | navigationHistory: { canGoBack: () => false, canGoForward: () => false }, |
| 785 | setIgnoreMenuShortcuts: vi.fn(), |
| 721 | 786 | setWindowOpenHandler: vi.fn(), |
| 722 | 787 | get debugger() { |
| 723 | 788 | if (destroyed) throw new Error("Object has been destroyed"); |
| ... | ... | @@ -1222,6 +1287,7 @@ describe("PreviewManager", () => { |
| 1222 | 1287 | ipc: { on: vi.fn(), off: vi.fn() }, |
| 1223 | 1288 | send: webviewSend, |
| 1224 | 1289 | navigationHistory: { canGoBack: () => false, canGoForward: () => false }, |
| 1290 | setIgnoreMenuShortcuts: vi.fn(), |
| 1225 | 1291 | setWindowOpenHandler: vi.fn(), |
| 1226 | 1292 | debugger: { |
| 1227 | 1293 | isAttached: () => false, |
| ... | ... | @@ -1286,6 +1352,7 @@ describe("PreviewManager", () => { |
| 1286 | 1352 | ipc: { on: vi.fn(), off: vi.fn() }, |
| 1287 | 1353 | send: webviewSend, |
| 1288 | 1354 | navigationHistory: { canGoBack: () => false, canGoForward: () => false }, |
| 1355 | setIgnoreMenuShortcuts: vi.fn(), |
| 1289 | 1356 | setWindowOpenHandler: vi.fn(), |
| 1290 | 1357 | debugger: { |
| 1291 | 1358 | isAttached: () => false, |
| ... | ... | @@ -1326,6 +1393,7 @@ describe("PreviewManager", () => { |
| 1326 | 1393 | ipc: { on: vi.fn(), off: vi.fn() }, |
| 1327 | 1394 | send: webviewSend, |
| 1328 | 1395 | navigationHistory: { canGoBack: () => false, canGoForward: () => false }, |
| 1396 | setIgnoreMenuShortcuts: vi.fn(), |
| 1329 | 1397 | setWindowOpenHandler: vi.fn(), |
| 1330 | 1398 | debugger: { |
| 1331 | 1399 | isAttached: () => false, |
| ... | ... | @@ -1372,6 +1440,7 @@ describe("PreviewManager", () => { |
| 1372 | 1440 | ipc: { on: vi.fn(), off: vi.fn() }, |
| 1373 | 1441 | send: webviewSend, |
| 1374 | 1442 | navigationHistory: { canGoBack: () => false, canGoForward: () => false }, |
| 1443 | setIgnoreMenuShortcuts: vi.fn(), |
| 1375 | 1444 | setWindowOpenHandler: vi.fn(), |
| 1376 | 1445 | debugger: { |
| 1377 | 1446 | isAttached: () => false, |
| ... | ... | @@ -1427,6 +1496,7 @@ describe("PreviewManager", () => { |
| 1427 | 1496 | ipc: { on: vi.fn(), off: vi.fn() }, |
| 1428 | 1497 | send: webviewSend, |
| 1429 | 1498 | navigationHistory: { canGoBack: () => false, canGoForward: () => false }, |
| 1499 | setIgnoreMenuShortcuts: vi.fn(), |
| 1430 | 1500 | setWindowOpenHandler: vi.fn(), |
| 1431 | 1501 | debugger: { |
| 1432 | 1502 | isAttached: () => false, |
| ... | ... | @@ -1524,6 +1594,7 @@ describe("PreviewManager", () => { |
| 1524 | 1594 | ipc: { on: vi.fn(), off: vi.fn() }, |
| 1525 | 1595 | send: webviewSend, |
| 1526 | 1596 | navigationHistory: { canGoBack: () => false, canGoForward: () => false }, |
| 1597 | setIgnoreMenuShortcuts: vi.fn(), |
| 1527 | 1598 | setWindowOpenHandler: vi.fn(), |
| 1528 | 1599 | debugger: { |
| 1529 | 1600 | isAttached: () => false, |
| ... | ... | @@ -1859,6 +1930,7 @@ describe("PreviewManager", () => { |
| 1859 | 1930 | ipc: { on: vi.fn(), off: vi.fn() }, |
| 1860 | 1931 | send: webviewSend, |
| 1861 | 1932 | navigationHistory: { canGoBack: () => false, canGoForward: () => false }, |
| 1933 | setIgnoreMenuShortcuts: vi.fn(), |
| 1862 | 1934 | setWindowOpenHandler: vi.fn(), |
| 1863 | 1935 | debugger: { |
| 1864 | 1936 | isAttached: () => false, |
| ... | ... | @@ -1951,6 +2023,7 @@ describe("PreviewManager", () => { |
| 1951 | 2023 | ipc: { on: vi.fn(), off: vi.fn() }, |
| 1952 | 2024 | send: webviewSend, |
| 1953 | 2025 | navigationHistory: { canGoBack: () => false, canGoForward: () => false }, |
| 2026 | setIgnoreMenuShortcuts: vi.fn(), |
| 1954 | 2027 | setWindowOpenHandler: vi.fn(), |
| 1955 | 2028 | debugger: { |
| 1956 | 2029 | isAttached: () => false, |
| ... | ... | @@ -2368,6 +2441,7 @@ describe("PreviewManager", () => { |
| 2368 | 2441 | ipc: { on: vi.fn(), off: vi.fn() }, |
| 2369 | 2442 | send: webviewSend, |
| 2370 | 2443 | navigationHistory: { canGoBack: () => false, canGoForward: () => false }, |
| 2444 | setIgnoreMenuShortcuts: vi.fn(), |
| 2371 | 2445 | setWindowOpenHandler: vi.fn(), |
| 2372 | 2446 | debugger: { |
| 2373 | 2447 | isAttached: () => false, |
| ... | ... | @@ -2670,6 +2744,7 @@ describe("PreviewManager", () => { |
| 2670 | 2744 | ipc: { on: vi.fn(), off: vi.fn() }, |
| 2671 | 2745 | send: webviewSend, |
| 2672 | 2746 | navigationHistory: { canGoBack: () => false, canGoForward: () => false }, |
| 2747 | setIgnoreMenuShortcuts: vi.fn(), |
| 2673 | 2748 | setWindowOpenHandler: vi.fn(), |
| 2674 | 2749 | debugger: { |
| 2675 | 2750 | isAttached: () => false, |
| ... | ... | @@ -3173,6 +3248,7 @@ describe("PreviewManager", () => { |
| 3173 | 3248 | ipc: { on: vi.fn(), off: vi.fn(), removeListener: vi.fn() }, |
| 3174 | 3249 | send: webviewSend, |
| 3175 | 3250 | navigationHistory: { canGoBack: () => false, canGoForward: () => false }, |
| 3251 | setIgnoreMenuShortcuts: vi.fn(), |
| 3176 | 3252 | setWindowOpenHandler: vi.fn(), |
| 3177 | 3253 | debugger: { |
| 3178 | 3254 | isAttached: () => false, |
| ... | ... | @@ -3228,6 +3304,7 @@ describe("PreviewManager", () => { |
| 3228 | 3304 | }, |
| 3229 | 3305 | send: webviewSend, |
| 3230 | 3306 | navigationHistory: { canGoBack: () => false, canGoForward: () => false }, |
| 3307 | setIgnoreMenuShortcuts: vi.fn(), |
| 3231 | 3308 | setWindowOpenHandler: vi.fn(), |
| 3232 | 3309 | debugger: { |
| 3233 | 3310 | isAttached: () => false, |
| ... | ... | @@ -3304,6 +3381,7 @@ describe("PreviewManager", () => { |
| 3304 | 3381 | }, |
| 3305 | 3382 | send: webviewSend, |
| 3306 | 3383 | navigationHistory: { canGoBack: () => false, canGoForward: () => false }, |
| 3384 | setIgnoreMenuShortcuts: vi.fn(), |
| 3307 | 3385 | setWindowOpenHandler: vi.fn(), |
| 3308 | 3386 | debugger: { |
| 3309 | 3387 | isAttached: () => false, |
| ... | ... | @@ -3389,6 +3467,7 @@ describe("PreviewManager", () => { |
| 3389 | 3467 | goBack, |
| 3390 | 3468 | goForward, |
| 3391 | 3469 | }, |
| 3470 | setIgnoreMenuShortcuts: vi.fn(), |
| 3392 | 3471 | setWindowOpenHandler: vi.fn(), |
| 3393 | 3472 | debugger: { |
| 3394 | 3473 | isAttached: () => false, |
| ... | ... | @@ -3518,6 +3597,7 @@ describe("PreviewManager", () => { |
| 3518 | 3597 | }, |
| 3519 | 3598 | send: webviewSend, |
| 3520 | 3599 | navigationHistory: { canGoBack: () => false, canGoForward: () => false }, |
| 3600 | setIgnoreMenuShortcuts: vi.fn(), |
| 3521 | 3601 | setWindowOpenHandler: vi.fn(), |
| 3522 | 3602 | debugger: { |
| 3523 | 3603 | isAttached: () => false, |
| ... | ... | @@ -3618,6 +3698,7 @@ describe("PreviewManager", () => { |
| 3618 | 3698 | }, |
| 3619 | 3699 | send: webviewSend, |
| 3620 | 3700 | navigationHistory: { canGoBack: () => false, canGoForward: () => false }, |
| 3701 | setIgnoreMenuShortcuts: vi.fn(), |
| 3621 | 3702 | setWindowOpenHandler: vi.fn(), |
| 3622 | 3703 | debugger: { |
| 3623 | 3704 | isAttached: () => false, |
| ... | ... | @@ -3773,6 +3854,7 @@ describe("PreviewManager", () => { |
| 3773 | 3854 | }, |
| 3774 | 3855 | send: webviewSend, |
| 3775 | 3856 | navigationHistory: { canGoBack: () => false, canGoForward: () => false }, |
| 3857 | setIgnoreMenuShortcuts: vi.fn(), |
| 3776 | 3858 | setWindowOpenHandler: vi.fn(), |
| 3777 | 3859 | debugger: { |
| 3778 | 3860 | isAttached: () => false, |
| ... | ... | @@ -3837,6 +3919,7 @@ describe("PreviewManager", () => { |
| 3837 | 3919 | ipc: { on: vi.fn(), off: vi.fn() }, |
| 3838 | 3920 | send: webviewSend, |
| 3839 | 3921 | navigationHistory: { canGoBack: () => false, canGoForward: () => false }, |
| 3922 | setIgnoreMenuShortcuts: vi.fn(), |
| 3840 | 3923 | setWindowOpenHandler: vi.fn(), |
| 3841 | 3924 | debugger: { |
| 3842 | 3925 | isAttached: () => false, |