Changeset 252441 in webkit
- Timestamp:
- Nov 13, 2019, 5:54:21 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/platform/win/TestExpectations (modified) (2 diffs)
-
LayoutTests/platform/wincairo/TestExpectations (modified) (1 diff)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/DumpRenderTree/win/EventSender.cpp (modified) (3 diffs)
-
Tools/WebKitTestRunner/win/EventSenderProxyWin.cpp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r252439 r252441 1 2019-11-13 Fujii Hironori <Hironori.Fujii@sony.com> 2 3 [Win][DumpRenderTree][WebKitTestRunner] eventSender.keyDown should support function keys 4 https://bugs.webkit.org/show_bug.cgi?id=204146 5 6 Reviewed by Ross Kirsling. 7 8 * platform/win/TestExpectations: 9 * platform/wincairo/TestExpectations: 10 Unskipped fast/events/keydown-function-keys.html and fast/events/keydown-leftright-keys.html. 11 1 12 2019-11-13 youenn fablet <youenn@apple.com> 2 13 -
trunk/LayoutTests/platform/win/TestExpectations
r252406 r252441 233 233 # TODO BlodBuilder is not enabled 234 234 http/tests/local/blob/send-data-blob.html [ Skip ] 235 236 # TODO A test that failed because eventSender cannot send function-key events.237 fast/events/keydown-function-keys.html [ Skip ]238 235 239 236 # TODO No support for WebArchives in WebKitWin <rdar://problem/6436020> … … 2787 2784 2788 2785 webkit.org/b/103043 fast/events/frame-scroll-fake-mouse-move.html [ Skip ] 2789 webkit.org/b/97026 [ Release ] fast/events/keydown-leftright-keys.html [ Failure ]2790 webkit.org/b/97026 [ Debug ] fast/events/keydown-leftright-keys.html [ Skip ] # Debug Assertion2791 2786 # fast/events/page-visibility tests timeout. 2792 2787 webkit.org/b/121509 fast/events/wheelevent-mousewheel-interaction.html [ Skip ] # [ Timeout ] -
trunk/LayoutTests/platform/wincairo/TestExpectations
r252391 r252441 1676 1676 fast/events/keyboardevent-code.html [ Failure ] 1677 1677 fast/events/keyboardevent-key.html [ Failure ] 1678 fast/events/keydown-function-keys.html [ Failure ]1679 fast/events/keydown-leftright-keys.html [ Failure ]1680 1678 fast/events/keydown-numpad-keys.html [ Failure ] 1681 1679 fast/events/mouse-cursor-image-set.html [ Failure ] -
trunk/Tools/ChangeLog
r252440 r252441 1 2019-11-13 Fujii Hironori <Hironori.Fujii@sony.com> 2 3 [Win][DumpRenderTree][WebKitTestRunner] eventSender.keyDown should support function keys 4 https://bugs.webkit.org/show_bug.cgi?id=204146 5 6 Reviewed by Ross Kirsling. 7 8 Changed eventSender.keyDown of DRT and WTR to support sending 9 function keys. 10 11 In addition to that, this change set correct scan code to LPARAM 12 for all key events. Unfortunately, there is no API to get a 13 correct extended scan code from a virtual key because 14 MapVirtualKey and MapVirtualKeyEx doesn't work as expected. 15 makeKeyDataForScanCode turns on KF_EXTENDED flag for some keys 16 explicitly for the workaround. 17 <http://www.setnode.com/blog/mapvirtualkey-getkeynametext-and-a-story-of-how-to/> 18 19 * DumpRenderTree/win/EventSender.cpp: 20 (makeKeyDataForScanCode): 21 (keyDownCallback): 22 * WebKitTestRunner/win/EventSenderProxyWin.cpp: 23 (WTR::makeKeyDataForScanCode): 24 (WTR::EventSenderProxy::keyDown): 25 1 26 2019-11-13 Jonathan Bedard <jbedard@apple.com> 2 27 -
trunk/Tools/DumpRenderTree/win/EventSender.cpp
r248762 r252441 442 442 } 443 443 444 static intmakeKeyDataForScanCode(int virtualKeyCode)444 static unsigned makeKeyDataForScanCode(int virtualKeyCode) 445 445 { 446 446 unsigned scancode = MapVirtualKey(virtualKeyCode, MAPVK_VK_TO_VSC); 447 447 int keyData = scancode & 0xFF; 448 449 bool forceExtended = false; 450 switch (virtualKeyCode) { 451 case VK_LEFT: 452 case VK_UP: 453 case VK_RIGHT: 454 case VK_DOWN: 455 case VK_PRIOR: 456 case VK_NEXT: 457 case VK_END: 458 case VK_HOME: 459 case VK_INSERT: 460 case VK_DELETE: 461 case VK_DIVIDE: 462 case VK_NUMLOCK: 463 case VK_RCONTROL: 464 case VK_RMENU: 465 // Some keys need to turn on KF_EXTENDED explicitly 466 forceExtended = true; 467 break; 468 default: 469 break; 470 } 471 448 472 scancode = scancode >> 8; 449 if (scancode == 0xe0 || scancode == 0xe1 )473 if (scancode == 0xe0 || scancode == 0xe1 || forceExtended) 450 474 keyData += KF_EXTENDED; 451 return keyData << 16; 475 unsigned repeat = 1; 476 return keyData << 16 | repeat; 452 477 } 453 478 … … 465 490 JSStringRef character = JSValueToStringCopy(context, arguments[0], exception); 466 491 ASSERT(!*exception); 467 int virtualKeyCode ;492 int virtualKeyCode = 0; 468 493 int charCode = 0; 469 int keyData = 1;470 494 bool needsShiftKeyModifier = false; 471 if (JSStringIsEqualToUTF8CString(character, "leftArrow")) {495 if (JSStringIsEqualToUTF8CString(character, "leftArrow")) 472 496 virtualKeyCode = VK_LEFT; 473 keyData += KF_EXTENDED << 16; // In this case, extended means "not keypad". 474 } else if (JSStringIsEqualToUTF8CString(character, "rightArrow")) { 497 else if (JSStringIsEqualToUTF8CString(character, "rightArrow")) 475 498 virtualKeyCode = VK_RIGHT; 476 keyData += KF_EXTENDED << 16; 477 } else if (JSStringIsEqualToUTF8CString(character, "upArrow")) { 499 else if (JSStringIsEqualToUTF8CString(character, "upArrow")) 478 500 virtualKeyCode = VK_UP; 479 keyData += KF_EXTENDED << 16; 480 } else if (JSStringIsEqualToUTF8CString(character, "downArrow")) { 501 else if (JSStringIsEqualToUTF8CString(character, "downArrow")) 481 502 virtualKeyCode = VK_DOWN; 482 keyData += KF_EXTENDED << 16; 483 } else if (JSStringIsEqualToUTF8CString(character, "pageUp")) 503 else if (JSStringIsEqualToUTF8CString(character, "pageUp")) 484 504 virtualKeyCode = VK_PRIOR; 485 505 else if (JSStringIsEqualToUTF8CString(character, "pageDown")) … … 497 517 else if (JSStringIsEqualToUTF8CString(character, "menu")) 498 518 virtualKeyCode = VK_APPS; 499 else if (JSStringIsEqualToUTF8CString(character, "leftControl")) { 519 else if (JSStringIsEqualToUTF8CString(character, "leftControl")) 520 virtualKeyCode = VK_LCONTROL; 521 else if (JSStringIsEqualToUTF8CString(character, "leftShift")) 522 virtualKeyCode = VK_LSHIFT; 523 else if (JSStringIsEqualToUTF8CString(character, "leftAlt")) 524 virtualKeyCode = VK_LMENU; 525 else if (JSStringIsEqualToUTF8CString(character, "rightControl")) 526 virtualKeyCode = VK_RCONTROL; 527 else if (JSStringIsEqualToUTF8CString(character, "rightShift")) 528 virtualKeyCode = VK_RSHIFT; 529 else if (JSStringIsEqualToUTF8CString(character, "rightAlt")) 530 virtualKeyCode = VK_RMENU; 531 else { 532 size_t characterLength = JSStringGetLength(character); 533 static const char shiftedUSCharacters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_+{}|:\"<>?"; 534 const wchar_t* characterPtr = JSStringGetCharactersPtr(character); 535 if (characterLength == 1) { 536 charCode = characterPtr[0]; 537 virtualKeyCode = LOBYTE(VkKeyScan(charCode)); 538 if (strchr(shiftedUSCharacters, charCode)) 539 needsShiftKeyModifier = true; 540 } else if (characterPtr[0] == 'F') { 541 if (characterLength == 2 && isASCIIDigit(characterPtr[1])) 542 virtualKeyCode = VK_F1 + characterPtr[1] - '1'; 543 else if (characterLength == 3 && characterPtr[1] == '1' && isASCIIDigit(characterPtr[2])) 544 virtualKeyCode = VK_F10 + characterPtr[2] - '0'; 545 } 546 } 547 JSStringRelease(character); 548 549 unsigned keyData = makeKeyDataForScanCode(virtualKeyCode); 550 551 switch (virtualKeyCode) { 552 case VK_LCONTROL: 553 case VK_RCONTROL: 500 554 virtualKeyCode = VK_CONTROL; 501 keyData += makeKeyDataForScanCode(VK_LCONTROL); 502 } else if (JSStringIsEqualToUTF8CString(character, "leftShift")) { 555 break; 556 case VK_LSHIFT: 557 case VK_RSHIFT: 503 558 virtualKeyCode = VK_SHIFT; 504 keyData += makeKeyDataForScanCode(VK_LSHIFT); 505 } else if (JSStringIsEqualToUTF8CString(character, "leftAlt")) { 559 break; 560 case VK_LMENU: 561 case VK_RMENU: 506 562 virtualKeyCode = VK_MENU; 507 keyData += makeKeyDataForScanCode(VK_LMENU); 508 } else if (JSStringIsEqualToUTF8CString(character, "rightControl")) { 509 virtualKeyCode = VK_CONTROL; 510 keyData += makeKeyDataForScanCode(VK_RCONTROL); 511 } else if (JSStringIsEqualToUTF8CString(character, "rightShift")) { 512 virtualKeyCode = VK_SHIFT; 513 keyData += makeKeyDataForScanCode(VK_RSHIFT); 514 } else if (JSStringIsEqualToUTF8CString(character, "rightAlt")) { 515 virtualKeyCode = VK_MENU; 516 keyData += makeKeyDataForScanCode(VK_RMENU); 517 } else { 518 static const char shiftedUSCharacters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_+{}|:\"<>?"; 519 charCode = JSStringGetCharactersPtr(character)[0]; 520 virtualKeyCode = LOBYTE(VkKeyScan(charCode)); 521 if (strchr(shiftedUSCharacters, charCode)) 522 needsShiftKeyModifier = true; 523 } 524 JSStringRelease(character); 563 break; 564 default: 565 break; 566 } 525 567 526 568 BYTE keyState[256]; -
trunk/Tools/WebKitTestRunner/win/EventSenderProxyWin.cpp
r250279 r252441 153 153 } 154 154 155 static intmakeKeyDataForScanCode(int virtualKeyCode)155 static unsigned makeKeyDataForScanCode(int virtualKeyCode) 156 156 { 157 157 unsigned scancode = MapVirtualKey(virtualKeyCode, MAPVK_VK_TO_VSC); 158 158 int keyData = scancode & 0xFF; 159 160 bool forceExtended = false; 161 switch (virtualKeyCode) { 162 case VK_LEFT: 163 case VK_UP: 164 case VK_RIGHT: 165 case VK_DOWN: 166 case VK_PRIOR: 167 case VK_NEXT: 168 case VK_END: 169 case VK_HOME: 170 case VK_INSERT: 171 case VK_DELETE: 172 case VK_DIVIDE: 173 case VK_NUMLOCK: 174 case VK_RCONTROL: 175 case VK_RMENU: 176 // Some keys need to turn on KF_EXTENDED explicitly 177 forceExtended = true; 178 break; 179 default: 180 break; 181 } 182 159 183 scancode = scancode >> 8; 160 if (scancode == 0xe0 || scancode == 0xe1 )184 if (scancode == 0xe0 || scancode == 0xe1 || forceExtended) 161 185 keyData += KF_EXTENDED; 162 return keyData << 16; 186 unsigned repeat = 1; 187 return keyData << 16 | repeat; 163 188 } 164 189 … … 174 199 void EventSenderProxy::keyDown(WKStringRef keyRef, WKEventModifiers wkModifiers, unsigned location) 175 200 { 176 int virtualKeyCode ;201 int virtualKeyCode = 0; 177 202 int charCode = 0; 178 int keyData = 1; 203 179 204 bool needsShiftKeyModifier = false; 180 if (WKStringIsEqualToUTF8CString(keyRef, "leftArrow")) {205 if (WKStringIsEqualToUTF8CString(keyRef, "leftArrow")) 181 206 virtualKeyCode = VK_LEFT; 182 keyData += KF_EXTENDED << 16; // In this case, extended means "not keypad". 183 } else if (WKStringIsEqualToUTF8CString(keyRef, "rightArrow")) { 207 else if (WKStringIsEqualToUTF8CString(keyRef, "rightArrow")) 184 208 virtualKeyCode = VK_RIGHT; 185 keyData += KF_EXTENDED << 16; 186 } else if (WKStringIsEqualToUTF8CString(keyRef, "upArrow")) { 209 else if (WKStringIsEqualToUTF8CString(keyRef, "upArrow")) 187 210 virtualKeyCode = VK_UP; 188 keyData += KF_EXTENDED << 16; 189 } else if (WKStringIsEqualToUTF8CString(keyRef, "downArrow")) { 211 else if (WKStringIsEqualToUTF8CString(keyRef, "downArrow")) 190 212 virtualKeyCode = VK_DOWN; 191 keyData += KF_EXTENDED << 16; 192 } else if (WKStringIsEqualToUTF8CString(keyRef, "pageUp")) 213 else if (WKStringIsEqualToUTF8CString(keyRef, "pageUp")) 193 214 virtualKeyCode = VK_PRIOR; 194 215 else if (WKStringIsEqualToUTF8CString(keyRef, "pageDown")) … … 206 227 else if (WKStringIsEqualToUTF8CString(keyRef, "menu")) 207 228 virtualKeyCode = VK_APPS; 208 else if (WKStringIsEqualToUTF8CString(keyRef, "leftControl")) { 229 else if (WKStringIsEqualToUTF8CString(keyRef, "leftControl")) 230 virtualKeyCode = VK_LCONTROL; 231 else if (WKStringIsEqualToUTF8CString(keyRef, "leftShift")) 232 virtualKeyCode = VK_LSHIFT; 233 else if (WKStringIsEqualToUTF8CString(keyRef, "leftAlt")) 234 virtualKeyCode = VK_LMENU; 235 else if (WKStringIsEqualToUTF8CString(keyRef, "rightControl")) 236 virtualKeyCode = VK_RCONTROL; 237 else if (WKStringIsEqualToUTF8CString(keyRef, "rightShift")) 238 virtualKeyCode = VK_RSHIFT; 239 else if (WKStringIsEqualToUTF8CString(keyRef, "rightAlt")) 240 virtualKeyCode = VK_RMENU; 241 else { 242 size_t keyLength = WKStringGetLength(keyRef); 243 static const char shiftedUSCharacters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_+{}|:\"<>?"; 244 wchar_t keyStr[3]; 245 WKStringGetCharacters(keyRef, keyStr, _countof(keyStr)); 246 if (keyLength == 1) { 247 charCode = keyStr[0]; 248 virtualKeyCode = LOBYTE(VkKeyScan(charCode)); 249 if (strchr(shiftedUSCharacters, charCode)) 250 needsShiftKeyModifier = true; 251 } else if (keyStr[0] == 'F') { 252 if (keyLength == 2 && isASCIIDigit(keyStr[1])) 253 virtualKeyCode = VK_F1 + keyStr[1] - '1'; 254 else if (keyLength == 3 && keyStr[1] == '1' && isASCIIDigit(keyStr[2])) 255 virtualKeyCode = VK_F10 + keyStr[2] - '0'; 256 } 257 } 258 259 unsigned keyData = makeKeyDataForScanCode(virtualKeyCode); 260 261 switch (virtualKeyCode) { 262 case VK_LCONTROL: 263 case VK_RCONTROL: 209 264 virtualKeyCode = VK_CONTROL; 210 keyData += makeKeyDataForScanCode(VK_LCONTROL); 211 } else if (WKStringIsEqualToUTF8CString(keyRef, "leftShift")) { 265 break; 266 case VK_LSHIFT: 267 case VK_RSHIFT: 212 268 virtualKeyCode = VK_SHIFT; 213 keyData += makeKeyDataForScanCode(VK_LSHIFT); 214 } else if (WKStringIsEqualToUTF8CString(keyRef, "leftAlt")) { 269 break; 270 case VK_LMENU: 271 case VK_RMENU: 215 272 virtualKeyCode = VK_MENU; 216 keyData += makeKeyDataForScanCode(VK_LMENU); 217 } else if (WKStringIsEqualToUTF8CString(keyRef, "rightControl")) { 218 virtualKeyCode = VK_CONTROL; 219 keyData += makeKeyDataForScanCode(VK_RCONTROL); 220 } else if (WKStringIsEqualToUTF8CString(keyRef, "rightShift")) { 221 virtualKeyCode = VK_SHIFT; 222 keyData += makeKeyDataForScanCode(VK_RSHIFT); 223 } else if (WKStringIsEqualToUTF8CString(keyRef, "rightAlt")) { 224 virtualKeyCode = VK_MENU; 225 keyData += makeKeyDataForScanCode(VK_RMENU); 226 } else { 227 static const char shiftedUSCharacters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_+{}|:\"<>?"; 228 wchar_t buff[1]; 229 WKStringGetCharacters(keyRef, buff, _countof(buff)); 230 charCode = buff[0]; 231 virtualKeyCode = LOBYTE(VkKeyScan(charCode)); 232 if (strchr(shiftedUSCharacters, charCode)) 233 needsShiftKeyModifier = true; 273 break; 274 default: 275 break; 234 276 } 235 277
Note:
See TracChangeset
for help on using the changeset viewer.