import Exchange from '../Exchange/Exchange';
import { CloseEvent } from './events';
import IOpenLinkOptions, { IDeprecatedOpenLinkOptions } from './IOpenLinkOptions';
import { IBrowserMessage } from './messages';
import IBrowser from './IBrowser';
/**
* There are several use cases when you need to open a web browser on a touch-enabled device (also known as a tablet). For these cases, you can use a custom web browser we built. Default URL can be opened and even the whitelisting/blacklisting of certain domains is supported.
*
* :::info
*
* **This API is currently available on:**
* - Android devices with Android 5+ (Philips, Benq, Sharp, generic Android device)
*
* **With some limitations, you can also use this API on**
* - Samsung Tizen (SSSP 4 and above); where the website is just in fullscreen without an address bar or theme options (headless mode)
* - LG webOS (webOS 3.0 and above); where the website is just in fullscreen without an address bar or theme options (headless mode)
* - Linux (Fedora, Ubuntu), Raspberry Pi, NEC Compute Module; where the website is just in fullscreen without an address bar or theme options (headless mode)
* - BrightSign; where the website is just in fullscreen without an address bar or theme options (headless mode)
* :::
*
*
* Device Browser Capabilities
* | Capability | Description |
* |:------------|:-------------|
* | `BROWSER` | If device can open browser with custom URL |
*
* If you want to check if the device supports this capability, use [`sos.display.supports()`](https://developers.signageos.io/sdk/sos/display#supports).
*
*/
export default class Browser implements IBrowser {
private readonly exchange;
private readonly events;
/** @internal */
constructor(exchange: Exchange);
/**
* The `open()` method opens the specified url in a browser window.
*
* @param uri The URL to open in the browser.
* @param options Optional parameters to configure the browser window.
* @param options.aclDomains List of domains to be interpreted according to `aclMode`. Example: `signageos.io`, `www.example.com`
* @param options.aclMode `blacklist` – Allow access to all domains except those in aclDomains and their subdomains, `whitelist` – Allow access only to domains in aclDomains and their subdomains.
* @param options.readOnlyAddressBar If `true`, the address bar is read-only, if `false` the user can navigate away by entering a URL in the address bar.
* @param options.idleTimeout The browser will automatically close after a specified period of inactivity (in milliseconds).
* @param options.coordinates Size and position of the browser window. Defaults to fullscreen.
* @param options.theme Specify custom UI theme. (Android only)
* @param options.headlessMode Headless mode hides the entire address bar. (Android only)
* @param options.canUserClose Whether the user can manually close the browser. (default if headless false, else true)
* @param options.clearData Clear cache after the browser closes. (default if headless false, else true)
* @param options.method Can only be native (which opens a new, fully sandboxed fullscreen window) or iframe (which opens a configurable-sized window). (only Linux)
* @returns {Promise} A promise that resolves when the browser is opened.
* @throws {Error} If the `uri` is not a valid URL or string.
* @throws {Error} If the `options` are not valid.
* @throws {Error} If unexpected error occurred when opening link.
* @since 4.0.0
*
* @example // {@link https://github.com/signageos/applet-examples/tree/master/examples/content-js-api/browser | Example of Applet for using browser on Android }
*
* @example
* await sos.browser.open('https://www.signageos.io', {
* aclDomains: ['google.com', 'yahoo.com'],
* aclMode: 'blacklist', // or 'whitelist'
* readOnlyAddressBar: true,
* coordinates: { // Supported only on Linux and Android
* x: 0,
* y: 0,
* height: 500,
* width: 500,
* },
* // theme: { ... }
* headlessMode: false,
* });
*/
open(uri: string, options?: IOpenLinkOptions): Promise;
/**
* The `close()` method closes the browser window opened by the `open()` method.
*
* @returns {Promise} A promise that resolves when the browser is closed.
* @since 4.0.0
*
* @example
* await sos.browser.open('https://www.signageos.io', {
* readOnlyAddressBar: true,
* });
* // some time later
* await sos.browser.close();
*/
close(): Promise;
/**
* The `onClose()` method sets up a listener, which is called whenever a browser window is closed. This can happen by an API call, by a
* user request or after a timeout. This doesn't fire between `open` calls or on subsequent `close` calls.
*
* @param listener The listener to be called when the browser is closed.
* @returns {void} A callback which removes the listener.
*/
onClose(listener: (event: CloseEvent) => void): () => void;
/** @internal */
handleMessageData(data: IBrowserMessage): void;
/**
* @deprecated use `sos.browser.open()` instead
*/
openLink(uri: string, options?: IDeprecatedOpenLinkOptions): Promise;
}