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 | |
| 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
| -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'); |