2018-01-22 14:21:03 +01:00
|
|
|
/*
|
|
|
|
This file is part of TALER
|
|
|
|
(C) 2017 INRIA
|
|
|
|
|
|
|
|
TALER is free software; you can redistribute it and/or modify it under the
|
|
|
|
terms of the GNU General Public License as published by the Free Software
|
|
|
|
Foundation; either version 3, or (at your option) any later version.
|
|
|
|
|
|
|
|
TALER is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
|
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
|
|
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License along with
|
|
|
|
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
|
|
|
*/
|
|
|
|
|
2018-02-20 15:12:45 +01:00
|
|
|
/**
|
2018-04-09 00:41:14 +02:00
|
|
|
* Compatibility helpers needed for browsers that don't implement
|
|
|
|
* WebExtension APIs consistently.
|
|
|
|
*/
|
2018-01-22 14:21:03 +01:00
|
|
|
|
2018-02-20 15:12:45 +01:00
|
|
|
export function isFirefox(): boolean {
|
2020-03-30 12:39:32 +02:00
|
|
|
const rt = chrome.runtime as any;
|
|
|
|
if (typeof rt.getBrowserInfo === "function") {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
2018-02-20 15:12:45 +01:00
|
|
|
}
|
2020-03-26 16:05:06 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Check if we are running under nodejs.
|
|
|
|
*/
|
2020-04-07 10:07:32 +02:00
|
|
|
export function isNode(): boolean {
|
2020-03-30 12:39:32 +02:00
|
|
|
return typeof process !== "undefined" && process.release.name === "node";
|
|
|
|
}
|
2020-06-03 12:51:09 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* 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,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|