aboutsummaryrefslogtreecommitdiff
path: root/src/webex/compat.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/webex/compat.ts')
-rw-r--r--src/webex/compat.ts50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/webex/compat.ts b/src/webex/compat.ts
index 1cbf34a2c..4635abd80 100644
--- a/src/webex/compat.ts
+++ b/src/webex/compat.ts
@@ -33,3 +33,53 @@ export function isFirefox(): boolean {
export function isNode(): boolean {
return typeof process !== "undefined" && process.release.name === "node";
}
+
+/**
+ * Compatibility API that works on multiple browsers.
+ */
+export interface CrossBrowserPermissionsApi {
+ contains(
+ permissions: chrome.permissions.Permissions,
+ callback: (result: boolean) => void,
+ ): void;
+
+ addPermissionsListener(
+ callback: (permissions: chrome.permissions.Permissions) => void,
+ ): void;
+
+ request(
+ permissions: chrome.permissions.Permissions,
+ callback?: (granted: boolean) => void,
+ ): void;
+
+ remove(
+ permissions: chrome.permissions.Permissions,
+ callback?: (removed: boolean) => void,
+ ): void;
+}
+
+export function getPermissionsApi(): CrossBrowserPermissionsApi {
+ const myBrowser = (globalThis as any).browser;
+ if (
+ typeof myBrowser === "object" &&
+ typeof myBrowser.permissions === "object"
+ ) {
+ return {
+ addPermissionsListener: () => {
+ // Not supported yet.
+ },
+ contains: myBrowser.permissions.contains,
+ request: myBrowser.permissions.request,
+ remove: myBrowser.permissions.remove,
+ };
+ } else {
+ return {
+ addPermissionsListener: chrome.permissions.onAdded.addListener.bind(
+ chrome.permissions.onAdded,
+ ),
+ contains: chrome.permissions.contains,
+ request: chrome.permissions.request,
+ remove: chrome.permissions.remove,
+ };
+ }
+}