aboutsummaryrefslogtreecommitdiff
path: root/ext/mixed/js
diff options
context:
space:
mode:
authortoasted-nutbread <toasted-nutbread@users.noreply.github.com>2020-06-10 20:58:46 -0400
committerGitHub <noreply@github.com>2020-06-10 20:58:46 -0400
commita84f188b737c616f6fc5172ef13af0b00fee03f2 (patch)
tree3cf93afb1097c1ca0747c06a934070573af96e33 /ext/mixed/js
parent839e306cacbe122803b97589b89798d283069fb9 (diff)
Handle cases where platform info is not available (#597)
* Handle cases where platform info is not available * Safely return the correct os property
Diffstat (limited to 'ext/mixed/js')
-rw-r--r--ext/mixed/js/environment.js44
1 files changed, 37 insertions, 7 deletions
diff --git a/ext/mixed/js/environment.js b/ext/mixed/js/environment.js
index e5bc20a7..5bd84010 100644
--- a/ext/mixed/js/environment.js
+++ b/ext/mixed/js/environment.js
@@ -32,17 +32,40 @@ class Environment {
async _loadEnvironmentInfo() {
const browser = await this._getBrowser();
- const platform = await new Promise((resolve) => chrome.runtime.getPlatformInfo(resolve));
- const modifierInfo = this._getModifierInfo(browser, platform.os);
+ const os = await this._getOperatingSystem();
+ const modifierInfo = this._getModifierInfo(browser, os);
return {
browser,
- platform: {
- os: platform.os
- },
+ platform: {os},
modifiers: modifierInfo
};
}
+ async _getOperatingSystem() {
+ try {
+ const {os} = await this._getPlatformInfo();
+ if (typeof os === 'string') {
+ return os;
+ }
+ } catch (e) {
+ // NOP
+ }
+ return 'unknown';
+ }
+
+ _getPlatformInfo() {
+ return new Promise((resolve, reject) => {
+ chrome.runtime.getPlatformInfo((result) => {
+ const error = chrome.runtime.lastError;
+ if (error) {
+ reject(error);
+ } else {
+ resolve(result);
+ }
+ });
+ });
+ }
+
async _getBrowser() {
if (EXTENSION_IS_BROWSER_EDGE) {
return 'edge';
@@ -96,8 +119,15 @@ class Environment {
['meta', 'Super']
];
break;
- default:
- throw new Error(`Invalid OS: ${os}`);
+ default: // 'unknown', etc
+ separator = ' + ';
+ osKeys = [
+ ['alt', 'Alt'],
+ ['ctrl', 'Ctrl'],
+ ['shift', 'Shift'],
+ ['meta', 'Meta']
+ ];
+ break;
}
const isFirefox = (browser === 'firefox' || browser === 'firefox-mobile');