// The approval window shows no screen until the background has described the // approval it answers (https://git.eeqj.de/sneak/AutistMask/issues/408). The // connection prompt's "Allow" and the network switch prompt's "Switch" answer // on the same port, so a window that showed the connection prompt while it // waited could approve a network switch. // // Booted through the real popup entry point, which is where the connection // prompt used to be put up before the background had answered. const { bootPopup, cleanupPopup, settle, unversionedValidProfile, } = require("./support/popupBoot"); afterEach(cleanupPopup); test("the approval window shows no screen until the background describes the approval", async () => { // The background's answer, held until the test gives it. let answer = null; const env = await bootPopup(unversionedValidProfile(), { search: "?approval=approval-1", runtime: { connect: () => ({ postMessage: () => {} }), sendMessage: (msg, reply) => { if (msg.type === "AUTISTMASK_GET_APPROVAL") answer = reply; }, }, }); expect(answer).not.toBeNull(); // No screen at all, the connection prompt included. expect(env.visibleViews()).toEqual([]); answer({ type: "network", origin: "https://dapp.example", currentNetworkId: "mainnet", requestedNetworkId: "sepolia", isPhishingDomain: false, }); await settle(); expect(env.visibleViews()).toEqual(["approve-network"]); expect(env.pageErrors).toEqual([]); }); // The background opens the approval window as wide as the page, but the // browser counts the window's frame in that width // (https://git.eeqj.de/sneak/AutistMask/issues/518). The browser suites run // without frames, so the widening is checked here. function windowsStub(type) { const updates = []; return { updates, getCurrent: (done) => done({ id: 7, type, width: 396 }), update: (id, info, done) => { updates.push({ id, info }); done({}); }, }; } const approvalRuntime = { connect: () => ({ postMessage: () => {} }), sendMessage: () => {}, }; test("the approval window widens itself by whatever its frame takes", async () => { const windows = windowsStub("popup"); const env = await bootPopup(unversionedValidProfile(), { search: "?approval=approval-1", runtime: approvalRuntime, windows, documentElement: { scrollWidth: 396, clientWidth: 380 }, }); expect(windows.updates).toEqual([{ id: 7, info: { width: 412 } }]); expect(env.pageErrors).toEqual([]); }); test("a connection prompt in the toolbar popup leaves the browser window alone", async () => { const windows = windowsStub("normal"); const env = await bootPopup(unversionedValidProfile(), { search: "?approval=approval-1", runtime: approvalRuntime, windows, documentElement: { scrollWidth: 396, clientWidth: 380 }, }); expect(windows.updates).toEqual([]); expect(env.pageErrors).toEqual([]); });