@@ -605,6 +605,63 @@ describe('chromium features', () => {
605605    } ) ; 
606606  } ) ; 
607607
608+   describe ( 'navigator.keyboard' ,  ( )  =>  { 
609+     afterEach ( closeAllWindows ) ; 
610+ 
611+     it ( 'getLayoutMap() should return a KeyboardLayoutMap object' ,  async  ( )  =>  { 
612+       const  w  =  new  BrowserWindow ( {  show : false  } ) ; 
613+       await  w . loadFile ( path . join ( fixturesPath ,  'pages' ,  'blank.html' ) ) ; 
614+       const  size  =  await  w . webContents . executeJavaScript ( ` 
615+         navigator.keyboard.getLayoutMap().then(map => map.size) 
616+       ` ) ; 
617+ 
618+       expect ( size ) . to . be . a ( 'number' ) ; 
619+     } ) ; 
620+ 
621+     it ( 'should lock the keyboard' ,  async  ( )  =>  { 
622+       const  w  =  new  BrowserWindow ( {  show : false  } ) ; 
623+       await  w . loadFile ( path . join ( fixturesPath ,  'pages' ,  'modal.html' ) ) ; 
624+ 
625+       // Test that without lock, with ESC: 
626+       // - the window leaves fullscreen 
627+       // - the dialog is not closed 
628+       const  enterFS1  =  once ( w ,  'enter-full-screen' ) ; 
629+       await  w . webContents . executeJavaScript ( 'document.body.requestFullscreen()' ,  true ) ; 
630+       await  enterFS1 ; 
631+ 
632+       await  w . webContents . executeJavaScript ( 'document.getElementById(\'favDialog\').showModal()' ,  true ) ; 
633+       const  open1  =  await  w . webContents . executeJavaScript ( 'document.getElementById(\'favDialog\').open' ) ; 
634+       expect ( open1 ) . to . be . true ( ) ; 
635+ 
636+       w . webContents . sendInputEvent ( {  type : 'keyDown' ,  keyCode : 'Escape'  } ) ; 
637+       await  setTimeout ( 1000 ) ; 
638+       const  openAfter1  =  await  w . webContents . executeJavaScript ( 'document.getElementById(\'favDialog\').open' ) ; 
639+       expect ( openAfter1 ) . to . be . true ( ) ; 
640+       expect ( w . isFullScreen ( ) ) . to . be . false ( ) ; 
641+ 
642+       // Test that with lock, with ESC: 
643+       // - the window does not leave fullscreen 
644+       // - the dialog is closed 
645+       const  enterFS2  =  once ( w ,  'enter-full-screen' ) ; 
646+       await  w . webContents . executeJavaScript ( ` 
647+         navigator.keyboard.lock(['Escape']); 
648+         document.body.requestFullscreen(); 
649+       ` ,  true ) ; 
650+ 
651+       await  enterFS2 ; 
652+ 
653+       await  w . webContents . executeJavaScript ( 'document.getElementById(\'favDialog\').showModal()' ,  true ) ; 
654+       const  open2  =  await  w . webContents . executeJavaScript ( 'document.getElementById(\'favDialog\').open' ) ; 
655+       expect ( open2 ) . to . be . true ( ) ; 
656+ 
657+       w . webContents . sendInputEvent ( {  type : 'keyDown' ,  keyCode : 'Escape'  } ) ; 
658+       await  setTimeout ( 1000 ) ; 
659+       const  openAfter2  =  await  w . webContents . executeJavaScript ( 'document.getElementById(\'favDialog\').open' ) ; 
660+       expect ( openAfter2 ) . to . be . false ( ) ; 
661+       expect ( w . isFullScreen ( ) ) . to . be . true ( ) ; 
662+     } ) ; 
663+   } ) ; 
664+ 
608665  describe ( 'navigator.languages' ,  ( )  =>  { 
609666    it ( 'should return the system locale only' ,  async  ( )  =>  { 
610667      const  appLocale  =  app . getLocale ( ) ; 
0 commit comments