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