Skip to content
Snippets Groups Projects
Commit e205f442 authored by Marshall Quander's avatar Marshall Quander
Browse files

Fix regex tests in VR capabilities checks

parent 708bf2a7
No related branches found
No related tags found
No related merge requests found
......@@ -10,12 +10,12 @@ export const VR_DEVICE_AVAILABILITY = {
maybe: "maybe" // Implies this device may support this VR platform, but may not be installed or in a compatible browser
};
function isMaybeGearVRCompatibleDevice() {
return navigator.userAgent.match(/\WAndroid\W/);
function isMaybeGearVRCompatibleDevice(ua) {
return /\WAndroid\W/.test(ua);
}
function isMaybeDaydreamCompatibleDevice() {
return navigator.userAgent.match(/\WAndroid\W/);
function isMaybeDaydreamCompatibleDevice(ua) {
return /\WAndroid\W/.test(ua);
}
// Blacklist of VR device name regex matchers that we do not want to consider as valid VR devices
......@@ -43,8 +43,9 @@ const GENERIC_ENTRY_TYPE_DEVICE_BLACKLIST = [/cardboard/i];
//
// This function also detects if the user is already in a headset, and returns the isInHMD key to be `true` if so.
export async function getAvailableVREntryTypes() {
const isSamsungBrowser = browser.name === "chrome" && navigator.userAgent.match(/SamsungBrowser/);
const isOculusBrowser = navigator.userAgent.match(/Oculus/);
const ua = navigator.userAgent;
const isSamsungBrowser = browser.name === "chrome" && /SamsungBrowser/.test(ua);
const isOculusBrowser = /Oculus/.test(ua);
const isInHMD = isOculusBrowser;
// This needs to be kept up-to-date with the latest browsers that can support VR and Hubs.
......@@ -73,21 +74,21 @@ export async function getAvailableVREntryTypes() {
//
// If we are in Oculus Browser (ie, we are literally wearing a GearVR) then return 'yes'.
let gearvr = VR_DEVICE_AVAILABILITY.no;
if (isMaybeGearVRCompatibleDevice()) {
if (isMaybeGearVRCompatibleDevice(ua)) {
gearvr = isOculusBrowser ? VR_DEVICE_AVAILABILITY.yes : VR_DEVICE_AVAILABILITY.maybe;
}
// For daydream detection, we first check if they are on an Android compatible device, and assume they
// may support daydream *unless* this browser has WebVR capabilities, in which case we can do better.
let daydream =
isMaybeDaydreamCompatibleDevice() && !isInHMD ? VR_DEVICE_AVAILABILITY.maybe : VR_DEVICE_AVAILABILITY.no;
isMaybeDaydreamCompatibleDevice(ua) && !isInHMD ? VR_DEVICE_AVAILABILITY.maybe : VR_DEVICE_AVAILABILITY.no;
if (isWebVRCapableBrowser) {
const displays = await navigator.getVRDisplays();
// Generic is supported for non-blacklisted devices and presentable HMDs.
generic = displays.find(
d => d.capabilities.canPresent && !GENERIC_ENTRY_TYPE_DEVICE_BLACKLIST.find(r => d.displayName.match(r))
d => d.capabilities.canPresent && !GENERIC_ENTRY_TYPE_DEVICE_BLACKLIST.find(r => r.test(d.displayName))
)
? VR_DEVICE_AVAILABILITY.yes
: VR_DEVICE_AVAILABILITY.no;
......@@ -95,12 +96,12 @@ export async function getAvailableVREntryTypes() {
cardboard =
!isIDevice &&
!isFirefoxBrowser &&
displays.find(d => d.capabilities.canPresent && d.displayName.match(/cardboard/i))
displays.find(d => d.capabilities.canPresent && /cardboard/i.test(d.displayName))
? VR_DEVICE_AVAILABILITY.yes
: VR_DEVICE_AVAILABILITY.no;
// For daydream detection, in a WebVR browser we can increase confidence in daydream compatibility.
const hasDaydreamWebVRDevice = displays.find(d => d.displayName.match(/daydream/i));
const hasDaydreamWebVRDevice = displays.find(d => /daydream/i.test(d.displayName));
if (hasDaydreamWebVRDevice) {
// If we detected daydream via WebVR
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment