diff options
author | Pierre Ossman <ossman@cendio.se> | 2022-12-23 16:36:49 +0100 |
---|---|---|
committer | Pierre Ossman <ossman@cendio.se> | 2022-12-27 12:50:57 +0100 |
commit | a187821e4f576c0569e7ca9a71ebb525734dda00 (patch) | |
tree | 4e5885f3cdd6862500a0ecf6e37751c42d52c98d | |
parent | 8fb30fb9dc6771ca0e0c2ca8a37d13ee37a503da (diff) | |
download | novnc-a187821e4f576c0569e7ca9a71ebb525734dda00.tar.gz |
Add OS checks for Android and ChromeOS
-rw-r--r-- | core/util/browser.js | 9 | ||||
-rw-r--r-- | tests/test.browser.js | 44 |
2 files changed, 52 insertions, 1 deletions
diff --git a/core/util/browser.js b/core/util/browser.js index 7d2bfd8..8195438 100644 --- a/core/util/browser.js +++ b/core/util/browser.js @@ -93,6 +93,15 @@ export function isIOS() { !!(/ipod/i).exec(navigator.platform)); } +export function isAndroid() { + return !!(/android/i).exec(navigator.platform); +} + +export function isChromeOS() { + /* ChromeOS sets navigator.platform to Linux :/ */ + return !!navigator.userAgent.match(' CrOS '); +} + /* Browser */ export function isSafari() { diff --git a/tests/test.browser.js b/tests/test.browser.js index 4fdc084..4b6c127 100644 --- a/tests/test.browser.js +++ b/tests/test.browser.js @@ -1,7 +1,7 @@ /* eslint-disable no-console */ const expect = chai.expect; -import { isMac, isWindows, isIOS, +import { isMac, isWindows, isIOS, isAndroid, isChromeOS, isSafari, isFirefox, isChrome, isChromium, isOpera, isEdge, isGecko, isWebKit, isBlink } from '../core/util/browser.js'; @@ -26,11 +26,14 @@ describe('OS detection', function () { "MacPPC", ]; + navigator.userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 12_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.6 Safari/605.1.15"; platforms.forEach((platform) => { navigator.platform = platform; expect(isMac()).to.be.true; expect(isWindows()).to.be.false; expect(isIOS()).to.be.false; + expect(isAndroid()).to.be.false; + expect(isChromeOS()).to.be.false; }); }); @@ -40,11 +43,14 @@ describe('OS detection', function () { "Win64", ]; + navigator.userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36"; platforms.forEach((platform) => { navigator.platform = platform; expect(isMac()).to.be.false; expect(isWindows()).to.be.true; expect(isIOS()).to.be.false; + expect(isAndroid()).to.be.false; + expect(isChromeOS()).to.be.false; }); }); @@ -55,11 +61,47 @@ describe('OS detection', function () { "iPad", ]; + navigator.userAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Mobile/15E148 Safari/604.1"; platforms.forEach((platform) => { navigator.platform = platform; expect(isMac()).to.be.false; expect(isWindows()).to.be.false; expect(isIOS()).to.be.true; + expect(isAndroid()).to.be.false; + expect(isChromeOS()).to.be.false; + }); + }); + + it('should handle Android', function () { + const platforms = [ + "Android", + ]; + + navigator.userAgent = "Mozilla/5.0 (Android; Mobile; rv:13.0) Gecko/13.0 Firefox/13.0"; + platforms.forEach((platform) => { + navigator.platform = platform; + expect(isMac()).to.be.false; + expect(isWindows()).to.be.false; + expect(isIOS()).to.be.false; + expect(isAndroid()).to.be.true; + expect(isChromeOS()).to.be.false; + }); + }); + + it('should handle ChromeOS', function () { + let userAgents = [ + "Mozilla/5.0 (X11; CrOS x86_64 15183.59.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.75 Safari/537.36", + "Mozilla/5.0 (X11; CrOS aarch64 15183.59.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.75 Safari/537.36", + ]; + + navigator.platform = "Linux x86_64"; + userAgents.forEach((ua) => { + navigator.userAgent = ua; + expect(isMac()).to.be.false; + expect(isWindows()).to.be.false; + expect(isIOS()).to.be.false; + expect(isAndroid()).to.be.false; + expect(isChromeOS()).to.be.true; }); }); }); |