From 5e42b685399797160d3baacdc90afb67a46bfcfd Mon Sep 17 00:00:00 2001 From: Sero <69639595+Seroxdesign@users.noreply.github.com> Date: Wed, 12 Jun 2024 12:00:37 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix:=20Add=20confirm=20signature?= =?UTF-8?q?=20race=20condition=20handler=20(#1144)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * sign message race condition * linting --- .../src/pages/NotificationPage/page.ts | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/wallets/metamask/src/pages/NotificationPage/page.ts b/wallets/metamask/src/pages/NotificationPage/page.ts index ebed5cced..7ca06f7d2 100644 --- a/wallets/metamask/src/pages/NotificationPage/page.ts +++ b/wallets/metamask/src/pages/NotificationPage/page.ts @@ -1,6 +1,5 @@ import type { Page } from '@playwright/test' import { getNotificationPageAndWaitForLoad } from '../../utils/getNotificationPageAndWaitForLoad' -import { waitFor } from '../../utils/waitFor' import { type GasSetting, approvePermission, @@ -31,17 +30,22 @@ export class NotificationPage { await connectToDapp(notificationPage, accounts) } - // TODO: Revisit this logic in the future to see if we can increase the performance by utilizing `Promise.race`. private async beforeMessageSignature(extensionId: string) { const notificationPage = await getNotificationPageAndWaitForLoad(this.page.context(), extensionId) + const scrollDownButton = notificationPage.locator(Selectors.SignaturePage.structuredMessage.scrollDownButton) - // TODO: Make this configurable. - // Most of the time, this function will be used to sign structured messages, so we check for the scroll button first. - const isScrollButtonVisible = await waitFor( - () => notificationPage.locator(Selectors.SignaturePage.structuredMessage.scrollDownButton).isVisible(), - 1_500, - false - ) + let isScrollButtonVisible = false + + const scrollButtonPromise = scrollDownButton + .waitFor({ state: 'visible' }) + .then(async () => { + isScrollButtonVisible = true + await scrollDownButton.click() + return true + }) + .catch(() => false) + + await Promise.race([scrollButtonPromise, notificationPage.waitForLoadState('load').then(() => false)]) return { notificationPage,