From c391d8a73c1a030c24845bc191b021bfb6cba256 Mon Sep 17 00:00:00 2001 From: Faisal Salman Date: Sat, 27 Jul 2024 10:57:11 +0700 Subject: [PATCH] Update `isAppleSilicon()` helper method to also check for WebGL renderer info #732 --- src/helpers/ua-parser-helpers.js | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/helpers/ua-parser-helpers.js b/src/helpers/ua-parser-helpers.js index 74923e1..3c7d399 100644 --- a/src/helpers/ua-parser-helpers.js +++ b/src/helpers/ua-parser-helpers.js @@ -9,7 +9,25 @@ const { CPU, OS, Engine } = require('../enums/ua-parser-enums'); -const isAppleSilicon = (res) => res.os.is(OS.MACOS) && res.cpu.is(CPU.ARM); +const isAppleSilicon = (res) => { + if (res.os.is(OS.MACOS)) { + if (res.cpu.is(CPU.ARM)) { + return true; + } + try { + const canvas = document.createElement('canvas'); + const webgl = canvas.getContext('webgl2') || canvas.getContext('webgl') || canvas.getContext('experimental-webgl'); + const debug = webgl.getExtension('WEBGL_debug_renderer_info'); + const renderer = webgl.getParameter(debug.UNMASKED_RENDERER_WEBGL); + if (renderer.match(/apple m\d/i)) { + return true; + } + } catch { + return false; + } + } + return false; +} const isChromeFamily = (res) => res.engine.is(Engine.BLINK);