aboutsummaryrefslogtreecommitdiff
path: root/src/webex/compat.ts
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2020-06-03 16:21:09 +0530
committerFlorian Dold <florian.dold@gmail.com>2020-06-03 16:21:21 +0530
commite15e56c65a07b5b39c9f781099909469d65eefba (patch)
tree8559db0839b0f5c881da08d9501f63c8c7eee38c /src/webex/compat.ts
parenta3354306c629ab3ab5f45617f31b90976416105a (diff)
downloadwallet-core-e15e56c65a07b5b39c9f781099909469d65eefba.tar.xz
make permissions work for firefox
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,
+ };
+ }
+}