Skip to content
Snippets Groups Projects
Unverified Commit d87794e9 authored by Marshall Quander's avatar Marshall Quander Committed by GitHub
Browse files

Merge pull request #457 from mozilla/vr-ua-check-fix

Fix regex tests in VR capabilities checks
parents 708bf2a7 e205f442
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