diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-06-10 20:58:46 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-10 20:58:46 -0400 |
commit | a84f188b737c616f6fc5172ef13af0b00fee03f2 (patch) | |
tree | 3cf93afb1097c1ca0747c06a934070573af96e33 /ext/mixed/js | |
parent | 839e306cacbe122803b97589b89798d283069fb9 (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.js | 44 |
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'); |