/** * Namespace: browser.runtime * Generated from Mozilla sources. Do not manually edit! * * Use the browser.runtime API to retrieve the background page, return details about the manifest, * and listen for and respond to events in the app or extension lifecycle. You can also use this API to convert the * relative path of URLs to fully-qualified URLs. * * Comments found in source JSON schema files: * Copyright 2014 The Chromium Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ import { Tabs } from "./tabs"; import { Manifest } from "./manifest"; import { Events } from "./events"; export namespace Runtime { /** * An object which allows two way communication with other pages. */ interface Port { name: string; disconnect(): void; /** * @param port */ onDisconnect: Events.Event<(port: Port) => void>; /** * @param message * @param port */ onMessage: Events.Event<(message: any, port: Port) => void>; /** * Send a message to the other end. This takes one argument, which is a JSON object representing the message to send. * It will be delivered to any script listening to the port's onMessage event, or to the native application if this port * is connected to a native application. * * @param message */ postMessage(message: any): void; /** * This property will only be present on ports passed to onConnect/onConnectExternal listeners. * Optional. */ sender?: MessageSender; /** * If the port was disconnected due to an error, this will be set to an object with a string property message, * giving you more information about the error. See onDisconnect. * Optional. */ error?: PortErrorType; } /** * An object containing information about the script context that sent a message or request. */ interface MessageSender { /** * The $(ref:tabs.Tab) which opened the connection, if any. This property will only * be present when the connection was opened from a tab (including content scripts), and only * if the receiver is an extension, not an app. * Optional. */ tab?: Tabs.Tab; /** * The $(topic:frame_ids)[frame] that opened the connection. 0 for top-level frames, positive for child frames. * This will only be set when tab is set. * Optional. */ frameId?: number; /** * The ID of the extension or app that opened the connection, if any. * Optional. */ id?: string; /** * The URL of the page or frame that opened the connection. If the sender is in an iframe, * it will be iframe's URL not the URL of the page which hosts it. * Optional. */ url?: string; } /** * The operating system the browser is running on. */ type PlatformOs = "mac" | "win" | "android" | "cros" | "linux" | "openbsd"; /** * The machine's processor architecture. */ type PlatformArch = "aarch64" | "arm" | "ppc64" | "s390x" | "sparc64" | "x86-32" | "x86-64"; /** * An object containing information about the current platform. */ interface PlatformInfo { /** * The operating system the browser is running on. */ os: PlatformOs; /** * The machine's processor architecture. */ arch: PlatformArch; } /** * An object containing information about the current browser. */ interface BrowserInfo { /** * The name of the browser, for example 'Firefox'. */ name: string; /** * The name of the browser vendor, for example 'Mozilla'. */ vendor: string; /** * The browser's version, for example '42.0.0' or '0.8.1pre'. */ version: string; /** * The browser's build ID/date, for example '20160101'. */ buildID: string; } /** * Result of the update check. */ type RequestUpdateCheckStatus = "throttled" | "no_update" | "update_available"; /** * The reason that this event is being dispatched. */ type OnInstalledReason = "install" | "update" | "browser_update"; /** * The reason that the event is being dispatched. 'app_update' is used when the restart is needed because the application * is updated to a newer version. 'os_update' is used when the restart is needed because the browser/OS is updated to a * newer version. 'periodic' is used when the system runs for more than the permitted uptime set in the enterprise policy. */ type OnRestartRequiredReason = "app_update" | "os_update" | "periodic"; /** * If an update is available, this contains more information about the available update. */ interface RequestUpdateCheckCallbackDetailsType { /** * The version of the available update. */ version: string; } interface ConnectConnectInfoType { /** * Will be passed into onConnect for processes that are listening for the connection event. * Optional. */ name?: string; /** * Whether the TLS channel ID will be passed into onConnectExternal for processes that are listening for the connection * event. * Optional. */ includeTlsChannelId?: boolean; } interface SendMessageOptionsType { [s: string]: unknown; } interface OnInstalledDetailsType { /** * The reason that this event is being dispatched. */ reason: OnInstalledReason; /** * Indicates the previous version of the extension, which has just been updated. This is present only if 'reason' is * 'update'. * Optional. */ previousVersion?: string; /** * Indicates whether the addon is installed as a temporary extension. */ temporary: boolean; } /** * The manifest details of the available update. */ interface OnUpdateAvailableDetailsType { /** * The version number of the available update. */ version: string; } /** * This will be defined during an API method callback if there was an error */ interface PropertyLastErrorType { /** * Details about the error which occurred. * Optional. */ message?: string; } /** * If the port was disconnected due to an error, this will be set to an object with a string property message, * giving you more information about the error. See onDisconnect. */ interface PortErrorType { message: string; } interface Static { /** * Retrieves the JavaScript 'window' object for the background page running inside the current extension/app. * If the background page is an event page, the system will ensure it is loaded before calling the callback. * If there is no background page, an error is set. */ getBackgroundPage(): Promise; /** *

Open your Extension's options page, if possible.

The precise behavior may depend on your manifest's * $(topic:optionsV2)[options_ui] or $(topic:options)[options_page] key, * or what the browser happens to support at the time.

If your Extension does not declare an options page, * or the browser failed to create one for some other reason, the callback will set $(ref:lastError).

*/ openOptionsPage(): Promise; /** * Returns details about the app or extension from the manifest. The object returned is a serialization of the full * $(topic:manifest)[manifest file]. * * @returns The manifest details. */ getManifest(): Manifest.WebExtensionManifest; /** * Converts a relative path within an app/extension install directory to a fully-qualified URL. * * @param path A path to a resource within an app/extension expressed relative to its install directory. * @returns The fully-qualified URL to the resource. */ getURL(path: string): string; /** * Sets the URL to be visited upon uninstallation. This may be used to clean up server-side data, do analytics, * and implement surveys. Maximum 255 characters. * * @param url Optional. URL to be opened after the extension is uninstalled. This URL must have an http: or https: scheme. * Set an empty string to not open a new tab upon uninstallation. * @returns Called when the uninstall URL is set. If the given URL is invalid, $(ref:runtime.lastError) will be set. */ setUninstallURL(url?: string): Promise; /** * Reloads the app or extension. */ reload(): void; /** * Requests an update check for this app/extension. */ requestUpdateCheck(): Promise<[RequestUpdateCheckStatus, RequestUpdateCheckCallbackDetailsType]>; /** * Attempts to connect to connect listeners within an extension/app (such as the background page), or other extensions/apps. * This is useful for content scripts connecting to their extension processes, inter-app/extension communication, * and $(topic:manifest/externally_connectable)[web messaging]. Note that this does not connect to any listeners in a * content script. Extensions may connect to content scripts embedded in tabs via $(ref:tabs.connect). * * @param extensionId Optional. The ID of the extension or app to connect to. If omitted, * a connection will be attempted with your own extension. Required if sending messages from a web page for * $(topic:manifest/externally_connectable)[web messaging]. * @param connectInfo Optional. * @returns Port through which messages can be sent and received. The port's $(ref:runtime.Port onDisconnect) * event is fired if the extension/app does not exist. */ connect(extensionId?: string, connectInfo?: ConnectConnectInfoType): Port; /** * Attempts to connect to connect listeners within an extension/app (such as the background page), or other extensions/apps. * This is useful for content scripts connecting to their extension processes, inter-app/extension communication, * and $(topic:manifest/externally_connectable)[web messaging]. Note that this does not connect to any listeners in a * content script. Extensions may connect to content scripts embedded in tabs via $(ref:tabs.connect). * * @param connectInfo Optional. * @returns Port through which messages can be sent and received. The port's $(ref:runtime.Port onDisconnect) * event is fired if the extension/app does not exist. */ connect(connectInfo?: ConnectConnectInfoType): Port; /** * Connects to a native application in the host machine. * * @param application The name of the registered application to connect to. * @returns Port through which messages can be sent and received with the application */ connectNative(application: string): Port; /** * Sends a single message to event listeners within your extension/app or a different extension/app. * Similar to $(ref:runtime.connect) but only sends a single message, with an optional response. * If sending to your extension, the $(ref:runtime.onMessage) event will be fired in each page, or $(ref:runtime. * onMessageExternal), if a different extension. Note that extensions cannot send messages to content scripts using this * method. To send messages to content scripts, use $(ref:tabs.sendMessage). * * @param extensionId Optional. The ID of the extension/app to send the message to. If omitted, * the message will be sent to your own extension/app. Required if sending messages from a web page for * $(topic:manifest/externally_connectable)[web messaging]. * @param message * @param options Optional. */ sendMessage(extensionId: string | undefined, message: any, options?: SendMessageOptionsType): Promise; /** * Sends a single message to event listeners within your extension/app or a different extension/app. * Similar to $(ref:runtime.connect) but only sends a single message, with an optional response. * If sending to your extension, the $(ref:runtime.onMessage) event will be fired in each page, or $(ref:runtime. * onMessageExternal), if a different extension. Note that extensions cannot send messages to content scripts using this * method. To send messages to content scripts, use $(ref:tabs.sendMessage). * * @param message * @param options Optional. */ sendMessage(message: any, options?: SendMessageOptionsType): Promise; /** * Send a single message to a native application. * * @param application The name of the native messaging host. * @param message The message that will be passed to the native messaging host. */ sendNativeMessage(application: string, message: any): Promise; /** * Returns information about the current browser. * * @returns Called with results */ getBrowserInfo(): Promise; /** * Returns information about the current platform. * * @returns Called with results */ getPlatformInfo(): Promise; /** * Fired when a profile that has this extension installed first starts up. This event is not fired for incognito profiles. */ onStartup: Events.Event<() => void>; /** * Fired when the extension is first installed, when the extension is updated to a new version, * and when the browser is updated to a new version. * * @param details */ onInstalled: Events.Event<(details: OnInstalledDetailsType) => void>; /** * Fired when an update is available, but isn't installed immediately because the app is currently running. * If you do nothing, the update will be installed the next time the background page gets unloaded, * if you want it to be installed sooner you can explicitly call $(ref:runtime.reload). * If your extension is using a persistent background page, the background page of course never gets unloaded, * so unless you call $(ref:runtime.reload) manually in response to this event the update will not get installed until the * next time the browser itself restarts. If no handlers are listening for this event, * and your extension has a persistent background page, it behaves as if $(ref:runtime.reload) * is called in response to this event. * * @param details The manifest details of the available update. */ onUpdateAvailable: Events.Event<(details: OnUpdateAvailableDetailsType) => void>; /** * Fired when a connection is made from either an extension process or a content script. * * @param port */ onConnect: Events.Event<(port: Port) => void>; /** * Fired when a connection is made from another extension. * * @param port */ onConnectExternal: Events.Event<(port: Port) => void>; /** * Fired when a message is sent from either an extension process or a content script. * * @param message Optional. The message sent by the calling script. * @param sender */ onMessage: Events.Event<(message: any, sender: MessageSender) => Promise | void>; /** * Fired when a message is sent from another extension/app. Cannot be used in a content script. * * @param message Optional. The message sent by the calling script. * @param sender */ onMessageExternal: Events.Event<(message: any, sender: MessageSender) => Promise | void>; /** * This will be defined during an API method callback if there was an error * Optional. */ lastError?: PropertyLastErrorType; /** * The ID of the extension/app. */ id: string; } }