diff --git a/packages/web-extension/src/messaging/index.ts b/packages/web-extension/src/messaging/index.ts index 0f08eecf8ce..e90b6b2e8c6 100644 --- a/packages/web-extension/src/messaging/index.ts +++ b/packages/web-extension/src/messaging/index.ts @@ -1,8 +1,9 @@ import { BackgroundMessenger, createBackgroundMessenger, generalizeBackgroundMessenger } from './BackgroundMessenger'; import { ChannelName, ConsumeRemoteApiOptions, ExposeApiProps, MessengerDependencies } from './types'; -import { FinalizationRegistryDestructor } from './util'; +import { FinalizationRegistryDestructor, isBackgroundProcess } from './util'; import { consumeMessengerRemoteApi, exposeMessengerApi } from './remoteApi'; import { createNonBackgroundMessenger } from './NonBackgroundMessenger'; +import { runtime } from 'webextension-polyfill'; export * from './BackgroundMessenger'; export * from './NonBackgroundMessenger'; @@ -15,7 +16,7 @@ export * from './errors'; export type BaseChannel = { baseChannel: ChannelName }; -const isInBackgroundProcess = typeof window === 'undefined'; +const isInBackgroundProcess = isBackgroundProcess(runtime); const getBackgroundMessenger = (() => { let backgroundMessenger: BackgroundMessenger | null = null; diff --git a/packages/web-extension/src/messaging/types.ts b/packages/web-extension/src/messaging/types.ts index c4270bc974f..ae734f8bbad 100644 --- a/packages/web-extension/src/messaging/types.ts +++ b/packages/web-extension/src/messaging/types.ts @@ -60,6 +60,7 @@ export interface MessengerPort { export interface MinimalRuntime { connect(connectInfo: Runtime.ConnectConnectInfoType): MessengerPort; onConnect: MinimalEvent<(port: MessengerPort) => void>; + getBackgroundPage?: unknown; lastError?: unknown; } diff --git a/packages/web-extension/src/messaging/util.ts b/packages/web-extension/src/messaging/util.ts index bf06c7293ae..9a7cba7438d 100644 --- a/packages/web-extension/src/messaging/util.ts +++ b/packages/web-extension/src/messaging/util.ts @@ -9,6 +9,7 @@ import { FactoryCallMessage, InternalMsg, MethodRequest, + MinimalRuntime, RequestMessage, ResponseMessage } from './types'; @@ -77,3 +78,6 @@ export class FinalizationRegistryDestructor implements Destructor { this.#registry.register(obj, objectId); } } + +export const isBackgroundProcess = (runtime: MinimalRuntime) => + typeof window === 'undefined' || typeof runtime.getBackgroundPage === 'function';