summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2022-12-23 16:36:49 +0100
committerPierre Ossman <ossman@cendio.se>2022-12-27 12:50:57 +0100
commita187821e4f576c0569e7ca9a71ebb525734dda00 (patch)
tree4e5885f3cdd6862500a0ecf6e37751c42d52c98d
parent8fb30fb9dc6771ca0e0c2ca8a37d13ee37a503da (diff)
downloadnovnc-a187821e4f576c0569e7ca9a71ebb525734dda00.tar.gz
Add OS checks for Android and ChromeOS
-rw-r--r--core/util/browser.js9
-rw-r--r--tests/test.browser.js44
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;
});
});
});