From c6dbfc87a494de6bea78fac225bae401d4e8bd68 Mon Sep 17 00:00:00 2001 From: Luke De Feo Date: Mon, 24 Oct 2022 08:07:01 -0700 Subject: [PATCH] Wait for client to initliaze on startup deep link Summary: We were incorrectly assuming a client did not support a plugin because it was not fully initialized. This issue was only apparant on start deep links Reviewed By: mweststrate Differential Revision: D40477503 fbshipit-source-id: 5fd9db765f559b8eb80cc3680ee694dfd2cf9a37 --- desktop/flipper-frontend-core/src/AbstractClient.tsx | 8 +++++++- .../src/dispatcher/handleOpenPluginDeeplink.tsx | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/desktop/flipper-frontend-core/src/AbstractClient.tsx b/desktop/flipper-frontend-core/src/AbstractClient.tsx index e228ddc5e..dfaef0a4b 100644 --- a/desktop/flipper-frontend-core/src/AbstractClient.tsx +++ b/desktop/flipper-frontend-core/src/AbstractClient.tsx @@ -50,6 +50,7 @@ export type RequestMetadata = { export interface ClientConnection { send(data: any): void; + sendExpectResponse(data: any): Promise; } @@ -63,7 +64,6 @@ export default abstract class AbstractClient extends EventEmitter { backgroundPlugins: Plugins; connection: ClientConnection | null | undefined; activePlugins: Set; - device: BaseDevice; logger: Logger; @@ -71,6 +71,11 @@ export default abstract class AbstractClient extends EventEmitter { private readonly serverAddOnControls: ServerAddOnControls; private readonly flipperServer: FlipperServer; + private resolveInitPromise!: (_: unknown) => void; + readonly initializationPromise = new Promise((_resolve) => { + this.resolveInitPromise = _resolve; + }); + constructor( id: string, query: ClientQuery, @@ -116,6 +121,7 @@ export default abstract class AbstractClient extends EventEmitter { } }); this.emit('plugins-change'); + this.resolveInitPromise?.(null); } // get the supported plugins diff --git a/desktop/flipper-ui-core/src/dispatcher/handleOpenPluginDeeplink.tsx b/desktop/flipper-ui-core/src/dispatcher/handleOpenPluginDeeplink.tsx index bb50fdcd4..cb7f21e1f 100644 --- a/desktop/flipper-ui-core/src/dispatcher/handleOpenPluginDeeplink.tsx +++ b/desktop/flipper-ui-core/src/dispatcher/handleOpenPluginDeeplink.tsx @@ -143,6 +143,11 @@ export async function handleOpenPluginDeeplink( return; } console.debug('[deeplink] Cleared device plugin support check.'); + + await client?.initializationPromise; + + console.debug('[deeplink] Client initialized'); + if (!isDevicePlugin && !client!.plugins.has(params.pluginId)) { await Dialog.alert({ title,