1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00
metamask-extension/ui/lib/webcam-utils.js
Erik Marks 76a2a9bb8b
@metamask/eslint config@5.0.0 (#10358)
* @metamask/eslint-config@5.0.0
* Update eslintrc and prettierrc
* yarn lint:fix
2021-02-04 10:15:23 -08:00

42 lines
1.3 KiB
JavaScript

'use strict';
import {
ENVIRONMENT_TYPE_POPUP,
PLATFORM_BRAVE,
PLATFORM_FIREFOX,
} from '../../shared/constants/app';
import { getEnvironmentType, getPlatform } from '../../app/scripts/lib/util';
class WebcamUtils {
static async checkStatus() {
const isPopup = getEnvironmentType() === ENVIRONMENT_TYPE_POPUP;
const isFirefoxOrBrave =
getPlatform() === (PLATFORM_FIREFOX || PLATFORM_BRAVE);
const devices = await window.navigator.mediaDevices.enumerateDevices();
const webcams = devices.filter((device) => device.kind === 'videoinput');
const hasWebcam = webcams.length > 0;
// A non-empty-string label implies that the webcam has been granted permission, as
// otherwise the label is kept blank to prevent fingerprinting
const hasWebcamPermissions = webcams.some(
(webcam) => webcam.label && webcam.label.length > 0,
);
if (hasWebcam) {
let environmentReady = true;
if ((isFirefoxOrBrave && isPopup) || (isPopup && !hasWebcamPermissions)) {
environmentReady = false;
}
return {
permissions: hasWebcamPermissions,
environmentReady,
};
}
const error = new Error('No webcam found');
error.type = 'NO_WEBCAM_FOUND';
throw error;
}
}
export default WebcamUtils;