diff --git a/packages/core/src/browser/keyboard/browser-keyboard-layout-provider.ts b/packages/core/src/browser/keyboard/browser-keyboard-layout-provider.ts index 958be1ac29a0b..74320b043b5f6 100644 --- a/packages/core/src/browser/keyboard/browser-keyboard-layout-provider.ts +++ b/packages/core/src/browser/keyboard/browser-keyboard-layout-provider.ts @@ -54,11 +54,21 @@ export class BrowserKeyboardLayoutProvider implements KeyboardLayoutProvider, Ke } } - getNativeLayout(): Promise { + async getNativeLayout(): Promise { const keyboard = (navigator as NavigatorExtension).keyboard; if (keyboard && keyboard.getLayoutMap) { - return keyboard.getLayoutMap().then(layoutMap => this.getFromLayoutMap(layoutMap)); - } else if (navigator.language) { + try { + const layoutMap = await keyboard.getLayoutMap(); + return this.getFromLayoutMap(layoutMap); + } catch (error) { + return this.getLayoutByLanguageOrPlatform(); + } + } + return this.getLayoutByLanguageOrPlatform(); + } + + private getLayoutByLanguageOrPlatform(): Promise { + if (navigator.language) { return Promise.resolve(this.getFromLanguage(navigator.language)); } else { return Promise.resolve(isOSX ? this.macUS : this.winUS);