Diff
Modified: trunk/LayoutTests/ChangeLog (190406 => 190407)
--- trunk/LayoutTests/ChangeLog 2015-10-01 13:38:46 UTC (rev 190406)
+++ trunk/LayoutTests/ChangeLog 2015-10-01 14:28:38 UTC (rev 190407)
@@ -1,3 +1,15 @@
+2015-10-01 Wenson Hsieh <wenson_hs...@apple.com>
+
+ Implement keyboard event sending for iOS in WebKitTestRunner
+ https://bugs.webkit.org/show_bug.cgi?id=149676
+
+ Reviewed by Simon Fraser.
+
+ Adds a new basic test for the oninput event listener when typing in a text field.
+
+ * fast/events/ios/input-value-after-oninput-expected.txt: Added.
+ * fast/events/ios/input-value-after-oninput.html: Added.
+
2015-10-01 Youenn Fablet <youenn.fab...@crf.canon.fr>
[Streams API] Add support for private WebCore JS builtins functions
Added: trunk/LayoutTests/fast/events/ios/input-value-after-oninput-expected.txt (0 => 190407)
--- trunk/LayoutTests/fast/events/ios/input-value-after-oninput-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/events/ios/input-value-after-oninput-expected.txt 2015-10-01 14:28:38 UTC (rev 190407)
@@ -0,0 +1,2 @@
+
+Successfully handled oninput, value is now "a"
Added: trunk/LayoutTests/fast/events/ios/input-value-after-oninput.html (0 => 190407)
--- trunk/LayoutTests/fast/events/ios/input-value-after-oninput.html (rev 0)
+++ trunk/LayoutTests/fast/events/ios/input-value-after-oninput.html 2015-10-01 14:28:38 UTC (rev 190407)
@@ -0,0 +1,46 @@
+<html>
+
+<head>
+ <meta name="viewport" content="initial-scale=1.0">
+ <script id="ui-script" type="text/plain">
+ (function() {
+ uiController.singleTapAtPoint(50, 25, function() {
+ uiController.didShowKeyboardCallback = function() {
+ uiController.typeCharacterUsingHardwareKeyboard("a", function() { });
+ }
+ });
+ })();
+ </script>
+
+ <script>
+ if (window.testRunner) {
+ testRunner.dumpAsText();
+ testRunner.waitUntilDone();
+ }
+
+ function getUIScript()
+ {
+ return document.getElementById("ui-script").text;
+ }
+
+ function handleValueChanged(value) {
+ document.getElementById("console").textContent = "Successfully handled oninput, value is now \"" + value + "\"";
+ testRunner.notifyDone();
+ }
+
+ function runTest()
+ {
+ if (!window.testRunner || !testRunner.runUIScript)
+ return;
+
+ testRunner.runUIScript(getUIScript(), function(result) { });
+ }
+ </script>
+</head>
+
+<body style="margin: 0;" _onload_="runTest()">
+ <input style="width: 100px; height: 50px;" id="test-input" _oninput_="handleValueChanged(this.value)">
+<div id="console">Failed to handle oninput<div>
+</body>
+
+</html>
Modified: trunk/Tools/ChangeLog (190406 => 190407)
--- trunk/Tools/ChangeLog 2015-10-01 13:38:46 UTC (rev 190406)
+++ trunk/Tools/ChangeLog 2015-10-01 14:28:38 UTC (rev 190407)
@@ -1,3 +1,40 @@
+2015-10-01 Wenson Hsieh <wenson_hs...@apple.com>
+
+ Implement keyboard event sending for iOS in WebKitTestRunner
+ https://bugs.webkit.org/show_bug.cgi?id=149676
+
+ Reviewed by Simon Fraser.
+
+ Adds support for generating and sending key events in WebKitTestRunner. This is accomplished in a similar
+ way as touch events, using IOHIDEvent machinery. Also adds callbacks to the UIScriptController JS API that
+ allows us to run code when the keyboard is shown or hidden.
+
+ * WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl: Adds the typeCharacter JS interface.
+ * WebKitTestRunner/UIScriptContext/UIScriptController.cpp:
+ (WTR::UIScriptController::setDidShowKeyboardCallback):
+ (WTR::UIScriptController::didShowKeyboardCallback):
+ (WTR::UIScriptController::setDidHideKeyboardCallback):
+ (WTR::UIScriptController::didHideKeyboardCallback):
+ (WTR::UIScriptController::typeCharacterUsingHardwareKeyboard):
+ (WTR::UIScriptController::platformSetDidShowKeyboardCallback):
+ (WTR::UIScriptController::platformSetDidHideKeyboardCallback):
+ * WebKitTestRunner/UIScriptContext/UIScriptController.h:
+ * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
+ * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
+ (-[TestRunnerWKWebView initWithFrame:configuration:]): Registers the TestRunnerWKWebView to listen to
+ the notifications that the keyboard has been raised or lowered.
+ (-[TestRunnerWKWebView _keyboardDidShow:]):
+ (-[TestRunnerWKWebView _keyboardDidHide:]):
+ * WebKitTestRunner/ios/HIDEventGenerator.h:
+ * WebKitTestRunner/ios/HIDEventGenerator.m:
+ (-[HIDEventGenerator _sendIOHIDKeyboardEvent:usage:isKeyDown:]): Helper to send a HID keyboard event.
+ (shouldWrapWithShiftKeyEventForCharacter): Helper used to generate key events.
+ (hidUsageCodeForCharacter): Ditto.
+ (-[HIDEventGenerator keyDown:completionBlock:]): Synthesizes and sends HIDKeyboardEvents, triggering
+ a keyDown event in WebKit.
+ * WebKitTestRunner/ios/IOKitSPI.h:
+ * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
+
2015-10-01 Carlos Garcia Campos <cgar...@igalia.com>
Unreviewed, rolling out r190399.
Modified: trunk/Tools/WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl (190406 => 190407)
--- trunk/Tools/WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl 2015-10-01 13:38:46 UTC (rev 190406)
+++ trunk/Tools/WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl 2015-10-01 14:28:38 UTC (rev 190407)
@@ -35,6 +35,11 @@
void singleTapAtPoint(long x, long y, object callback);
void doubleTapAtPoint(long x, long y, object callback);
+ void typeCharacterUsingHardwareKeyboard(DOMString character, object callback);
+
+ attribute object didShowKeyboardCallback;
+ attribute object didHideKeyboardCallback;
+
attribute object willBeginZoomingCallback;
attribute object didEndZoomingCallback;
Modified: trunk/Tools/WebKitTestRunner/UIScriptContext/UIScriptController.cpp (190406 => 190407)
--- trunk/Tools/WebKitTestRunner/UIScriptContext/UIScriptController.cpp 2015-10-01 13:38:46 UTC (rev 190406)
+++ trunk/Tools/WebKitTestRunner/UIScriptContext/UIScriptController.cpp 2015-10-01 14:28:38 UTC (rev 190407)
@@ -75,6 +75,28 @@
return m_context.callbackWithID(m_didEndZoomingCallback);
}
+void UIScriptController::setDidShowKeyboardCallback(JSValueRef callback)
+{
+ m_didShowKeyboardCallback = m_context.registerCallback(callback);
+ platformSetDidShowKeyboardCallback();
+}
+
+JSValueRef UIScriptController::didShowKeyboardCallback() const
+{
+ return m_context.callbackWithID(m_didShowKeyboardCallback);
+}
+
+void UIScriptController::setDidHideKeyboardCallback(JSValueRef callback)
+{
+ m_didHideKeyboardCallback = m_context.registerCallback(callback);
+ platformSetDidHideKeyboardCallback();
+}
+
+JSValueRef UIScriptController::didHideKeyboardCallback() const
+{
+ return m_context.callbackWithID(m_didHideKeyboardCallback);
+}
+
#if !PLATFORM(IOS)
void UIScriptController::zoomToScale(double, JSValueRef)
{
@@ -88,6 +110,10 @@
{
}
+void UIScriptController::typeCharacterUsingHardwareKeyboard(JSStringRef, JSValueRef)
+{
+}
+
double UIScriptController::zoomScale() const
{
return 1;
@@ -115,6 +141,14 @@
void UIScriptController::platformSetDidEndZoomingCallback()
{
}
+
+void UIScriptController::platformSetDidShowKeyboardCallback()
+{
+}
+
+void UIScriptController::platformSetDidHideKeyboardCallback()
+{
+}
#endif
void UIScriptController::uiScriptComplete(JSStringRef result)
Modified: trunk/Tools/WebKitTestRunner/UIScriptContext/UIScriptController.h (190406 => 190407)
--- trunk/Tools/WebKitTestRunner/UIScriptContext/UIScriptController.h 2015-10-01 13:38:46 UTC (rev 190406)
+++ trunk/Tools/WebKitTestRunner/UIScriptContext/UIScriptController.h 2015-10-01 14:28:38 UTC (rev 190407)
@@ -48,12 +48,20 @@
void singleTapAtPoint(long x, long y, JSValueRef callback);
void doubleTapAtPoint(long x, long y, JSValueRef callback);
+ void typeCharacterUsingHardwareKeyboard(JSStringRef character, JSValueRef callback);
+
void setWillBeginZoomingCallback(JSValueRef);
JSValueRef willBeginZoomingCallback() const;
void setDidEndZoomingCallback(JSValueRef);
JSValueRef didEndZoomingCallback() const;
+ void setDidShowKeyboardCallback(JSValueRef);
+ JSValueRef didShowKeyboardCallback() const;
+
+ void setDidHideKeyboardCallback(JSValueRef);
+ JSValueRef didHideKeyboardCallback() const;
+
double zoomScale() const;
double minimumZoomScale() const;
double maximumZoomScale() const;
@@ -67,6 +75,8 @@
void platformSetWillBeginZoomingCallback();
void platformSetDidEndZoomingCallback();
+ void platformSetDidShowKeyboardCallback();
+ void platformSetDidHideKeyboardCallback();
virtual JSClassRef wrapperClass() override;
@@ -76,6 +86,8 @@
unsigned m_willBeginZoomingCallback { 0 };
unsigned m_didEndZoomingCallback { 0 };
+ unsigned m_didShowKeyboardCallback { 0 };
+ unsigned m_didHideKeyboardCallback { 0 };
};
}
Modified: trunk/Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.h (190406 => 190407)
--- trunk/Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.h 2015-10-01 13:38:46 UTC (rev 190406)
+++ trunk/Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.h 2015-10-01 14:28:38 UTC (rev 190407)
@@ -33,9 +33,13 @@
@property (nonatomic, copy) void (^willBeginZoomingCallback)(void);
@property (nonatomic, copy) void (^didEndZoomingCallback)(void);
+@property (nonatomic, copy) void (^didShowKeyboardCallback)(void);
+@property (nonatomic, copy) void (^didHideKeyboardCallback)(void);
+- (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration;
+- (void)dealloc;
+
- (void)zoomToScale:(double)scale animated:(BOOL)animated completionHandler:(void (^)(void))completionHandler;
-
#endif
@end
Modified: trunk/Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.mm (190406 => 190407)
--- trunk/Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.mm 2015-10-01 13:38:46 UTC (rev 190406)
+++ trunk/Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.mm 2015-10-01 14:28:38 UTC (rev 190407)
@@ -44,6 +44,7 @@
@interface TestRunnerWKWebView ()
@property (nonatomic, copy) void (^zoomToScaleCompletionHandler)(void);
+@property (nonatomic, copy) void (^showKeyboardCompletionHandler)(void);
@end
@implementation TestRunnerWKWebView
@@ -57,6 +58,22 @@
#endif
#if PLATFORM(IOS)
+- (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration
+{
+ if (self = [super initWithFrame:frame configuration:configuration]) {
+ NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
+ [center addObserver:self selector:@selector(_keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
+ [center addObserver:self selector:@selector(_keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];
+ }
+ return self;
+}
+
+- (void)dealloc
+{
+ [super dealloc];
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+}
+
- (void)zoomToScale:(double)scale animated:(BOOL)animated completionHandler:(void (^)(void))completionHandler
{
ASSERT(!self.zoomToScaleCompletionHandler);
@@ -65,6 +82,18 @@
[self.scrollView setZoomScale:scale animated:animated];
}
+- (void)_keyboardDidShow:(NSNotification *)notification
+{
+ if (self.didShowKeyboardCallback)
+ self.didShowKeyboardCallback();
+}
+
+- (void)_keyboardDidHide:(NSNotification *)notification
+{
+ if (self.didHideKeyboardCallback)
+ self.didHideKeyboardCallback();
+}
+
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(nullable UIView *)view
{
[super scrollViewWillBeginZooming:scrollView withView:view];
Modified: trunk/Tools/WebKitTestRunner/ios/HIDEventGenerator.h (190406 => 190407)
--- trunk/Tools/WebKitTestRunner/ios/HIDEventGenerator.h 2015-10-01 13:38:46 UTC (rev 190406)
+++ trunk/Tools/WebKitTestRunner/ios/HIDEventGenerator.h 2015-10-01 14:28:38 UTC (rev 190407)
@@ -50,4 +50,7 @@
- (void)markerEventReceived:(IOHIDEventRef)event;
+// Keyboard
+- (void)keyDown:(NSString *)character completionBlock:(void (^)(void))completionBlock;
+
@end
Modified: trunk/Tools/WebKitTestRunner/ios/HIDEventGenerator.mm (190406 => 190407)
--- trunk/Tools/WebKitTestRunner/ios/HIDEventGenerator.mm 2015-10-01 13:38:46 UTC (rev 190406)
+++ trunk/Tools/WebKitTestRunner/ios/HIDEventGenerator.mm 2015-10-01 14:28:38 UTC (rev 190407)
@@ -129,6 +129,17 @@
return self;
}
+- (void)_sendIOHIDKeyboardEvent:(uint64_t)timestamp usage:(uint32_t)usage isKeyDown:(bool)isKeyDown
+{
+ RetainPtr<IOHIDEventRef> eventRef = adoptCF(IOHIDEventCreateKeyboardEvent(kCFAllocatorDefault,
+ timestamp,
+ kHIDPage_KeyboardOrKeypad,
+ usage,
+ isKeyDown,
+ kIOHIDEventOptionNone));
+ [self _sendHIDEvent:eventRef.get()];
+}
+
- (IOHIDEventRef)_createIOHIDEventType:(HandEventType)eventType
{
BOOL isTouching = (eventType == HandEventTouched || eventType == HandEventMoved || eventType == HandEventChordChanged);
@@ -428,4 +439,169 @@
}
}
+static inline bool shouldWrapWithShiftKeyEventForCharacter(NSString *key)
+{
+ if (key.length != 1)
+ return false;
+ int keyCode = [key characterAtIndex:0];
+ if (65 <= keyCode && keyCode <= 90)
+ return true;
+ switch (keyCode) {
+ case '`':
+ case '!':
+ case '@':
+ case '#':
+ case '$':
+ case '%':
+ case '^':
+ case '&':
+ case '*':
+ case '(':
+ case ')':
+ case '_':
+ case '+':
+ case '{':
+ case '}':
+ case '|':
+ case ':':
+ case '"':
+ case '<':
+ case '>':
+ case '?':
+ case '~':
+ return true;
+ }
+ return false;
+}
+
+static inline uint32_t hidUsageCodeForCharacter(NSString *key)
+{
+ const int uppercaseAlphabeticOffset = 'A' - kHIDUsage_KeyboardA;
+ const int lowercaseAlphabeticOffset = 'a' - kHIDUsage_KeyboardA;
+ const int numericNonZeroOffset = '1' - kHIDUsage_Keyboard1;
+ if (key.length == 1) {
+ // Handle alphanumeric characters and basic symbols.
+ int keyCode = [key characterAtIndex:0];
+ if (97 <= keyCode && keyCode <= 122) // Handle a-z.
+ return keyCode - lowercaseAlphabeticOffset;
+
+ if (65 <= keyCode && keyCode <= 90) // Handle A-Z.
+ return keyCode - uppercaseAlphabeticOffset;
+
+ if (49 <= keyCode && keyCode <= 57) // Handle 1-9.
+ return keyCode - numericNonZeroOffset;
+
+ // Handle all other cases.
+ switch (keyCode) {
+ case '`':
+ case '~':
+ return kHIDUsage_KeyboardGraveAccentAndTilde;
+ case '!':
+ return kHIDUsage_Keyboard1;
+ case '@':
+ return kHIDUsage_Keyboard2;
+ case '#':
+ return kHIDUsage_Keyboard3;
+ case '$':
+ return kHIDUsage_Keyboard4;
+ case '%':
+ return kHIDUsage_Keyboard5;
+ case '^':
+ return kHIDUsage_Keyboard6;
+ case '&':
+ return kHIDUsage_Keyboard7;
+ case '*':
+ return kHIDUsage_Keyboard8;
+ case '(':
+ return kHIDUsage_Keyboard9;
+ case ')':
+ case '0':
+ return kHIDUsage_Keyboard0;
+ case '-':
+ case '_':
+ return kHIDUsage_KeyboardHyphen;
+ case '=':
+ case '+':
+ return kHIDUsage_KeyboardEqualSign;
+ case '\t':
+ return kHIDUsage_KeyboardTab;
+ case '[':
+ case '{':
+ return kHIDUsage_KeyboardOpenBracket;
+ case ']':
+ case '}':
+ return kHIDUsage_KeyboardCloseBracket;
+ case '\\':
+ case '|':
+ return kHIDUsage_KeyboardBackslash;
+ case ';':
+ case ':':
+ return kHIDUsage_KeyboardSemicolon;
+ case '\'':
+ case '"':
+ return kHIDUsage_KeyboardQuote;
+ case '\r':
+ case '\n':
+ return kHIDUsage_KeyboardReturnOrEnter;
+ case ',':
+ case '<':
+ return kHIDUsage_KeyboardComma;
+ case '.':
+ case '>':
+ return kHIDUsage_KeyboardPeriod;
+ case '/':
+ case '?':
+ return kHIDUsage_KeyboardSlash;
+ case ' ':
+ return kHIDUsage_KeyboardSpacebar;
+ }
+ }
+ const int functionKeyOffset = kHIDUsage_KeyboardF1;
+ for (int functionKeyIndex = 1; functionKeyIndex <= 12; ++functionKeyIndex) {
+ if ([key isEqualToString:[NSString stringWithFormat:@"F%d", functionKeyIndex]])
+ return functionKeyOffset + functionKeyIndex - 1;
+ }
+ if ([key isEqualToString:@"escape"])
+ return kHIDUsage_KeyboardEscape;
+ if ([key isEqualToString:@"return"] || [key isEqualToString:@"enter"])
+ return kHIDUsage_KeyboardReturnOrEnter;
+ if ([key isEqualToString:@"leftArrow"])
+ return kHIDUsage_KeyboardLeftArrow;
+ if ([key isEqualToString:@"rightArrow"])
+ return kHIDUsage_KeyboardRightArrow;
+ if ([key isEqualToString:@"upArrow"])
+ return kHIDUsage_KeyboardUpArrow;
+ if ([key isEqualToString:@"downArrow"])
+ return kHIDUsage_KeyboardDownArrow;
+ if ([key isEqualToString:@"delete"])
+ return kHIDUsage_KeyboardDeleteOrBackspace;
+ // The simulator keyboard interprets both left and right modifier keys using the left version of the usage code.
+ if ([key isEqualToString:@"leftControl"] || [key isEqualToString:@"rightControl"])
+ return kHIDUsage_KeyboardLeftControl;
+ if ([key isEqualToString:@"leftShift"] || [key isEqualToString:@"rightShift"])
+ return kHIDUsage_KeyboardLeftShift;
+ if ([key isEqualToString:@"leftAlt"] || [key isEqualToString:@"rightAlt"])
+ return kHIDUsage_KeyboardLeftAlt;
+
+ return 0;
+}
+
+- (void)keyDown:(NSString *)character completionBlock:(void (^)(void))completionBlock
+{
+ bool shouldWrapWithShift = shouldWrapWithShiftKeyEventForCharacter(character);
+ uint32_t usage = hidUsageCodeForCharacter(character);
+ uint64_t absoluteMachTime = mach_absolute_time();
+
+ if (shouldWrapWithShift)
+ [self _sendIOHIDKeyboardEvent:absoluteMachTime usage:kHIDUsage_KeyboardLeftShift isKeyDown:true];
+
+ [self _sendIOHIDKeyboardEvent:absoluteMachTime usage:usage isKeyDown:true];
+ [self _sendIOHIDKeyboardEvent:absoluteMachTime usage:usage isKeyDown:false];
+
+ if (shouldWrapWithShift)
+ [self _sendIOHIDKeyboardEvent:absoluteMachTime usage:kHIDUsage_KeyboardLeftShift isKeyDown:false];
+
+ [self _sendMarkerHIDEventWithCompletionBlock:completionBlock];
+}
+
@end
Modified: trunk/Tools/WebKitTestRunner/ios/IOKitSPI.h (190406 => 190407)
--- trunk/Tools/WebKitTestRunner/ios/IOKitSPI.h 2015-10-01 13:38:46 UTC (rev 190406)
+++ trunk/Tools/WebKitTestRunner/ios/IOKitSPI.h 2015-10-01 14:28:38 UTC (rev 190407)
@@ -60,6 +60,7 @@
#define IOHIDEventFieldBase(type) (type << 16)
enum {
+ kHIDPage_KeyboardOrKeypad = 0x07
kHIDPage_VendorDefinedStart = 0xFF00
};
@@ -127,6 +128,47 @@
#define kGSEventPathInfoInRange (1 << 0)
#define kGSEventPathInfoInTouch (1 << 1)
+enum {
+ kHIDUsage_KeyboardA = 0x04,
+ kHIDUsage_Keyboard1 = 0x1E,
+ kHIDUsage_Keyboard2 = 0x1F,
+ kHIDUsage_Keyboard3 = 0x20,
+ kHIDUsage_Keyboard4 = 0x21,
+ kHIDUsage_Keyboard5 = 0x22,
+ kHIDUsage_Keyboard6 = 0x23,
+ kHIDUsage_Keyboard7 = 0x24,
+ kHIDUsage_Keyboard8 = 0x25,
+ kHIDUsage_Keyboard9 = 0x26,
+ kHIDUsage_Keyboard0 = 0x27,
+ kHIDUsage_KeyboardReturnOrEnter = 0x28,
+ kHIDUsage_KeyboardEscape = 0x29,
+ kHIDUsage_KeyboardDeleteOrBackspace = 0x2A,
+ kHIDUsage_KeyboardTab = 0x2B,
+ kHIDUsage_KeyboardSpacebar = 0x2C,
+ kHIDUsage_KeyboardHyphen = 0x2D,
+ kHIDUsage_KeyboardEqualSign = 0x2E,
+ kHIDUsage_KeyboardOpenBracket = 0x2F,
+ kHIDUsage_KeyboardCloseBracket = 0x30,
+ kHIDUsage_KeyboardBackslash = 0x31,
+ kHIDUsage_KeyboardSemicolon = 0x33,
+ kHIDUsage_KeyboardQuote = 0x34,
+ kHIDUsage_KeyboardGraveAccentAndTilde = 0x35,
+ kHIDUsage_KeyboardComma = 0x36,
+ kHIDUsage_KeyboardPeriod = 0x37,
+ kHIDUsage_KeyboardSlash = 0x38,
+ kHIDUsage_KeyboardF1 = 0x3A,
+ kHIDUsage_KeyboardHome = 0x4A,
+ kHIDUsage_KeyboardPageUp = 0x4B,
+ kHIDUsage_KeyboardEnd = 0x4D,
+ kHIDUsage_KeyboardRightArrow = 0x4F,
+ kHIDUsage_KeyboardLeftArrow = 0x50,
+ kHIDUsage_KeyboardDownArrow = 0x51,
+ kHIDUsage_KeyboardUpArrow = 0x52,
+ kHIDUsage_KeyboardLeftControl = 0xE0,
+ kHIDUsage_KeyboardLeftShift = 0xE1,
+ kHIDUsage_KeyboardLeftAlt = 0xE2
+};
+
WTF_EXTERN_C_END
#endif // USE(APPLE_INTERNAL_SDK)
Modified: trunk/Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm (190406 => 190407)
--- trunk/Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm 2015-10-01 13:38:46 UTC (rev 190406)
+++ trunk/Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm 2015-10-01 14:28:38 UTC (rev 190407)
@@ -30,6 +30,7 @@
#import "HIDEventGenerator.h"
#import "PlatformWebView.h"
+#import "StringFunctions.h"
#import "TestController.h"
#import "TestRunnerWKWebView.h"
#import "UIScriptContext.h"
@@ -92,6 +93,16 @@
}];
}
+void UIScriptController::typeCharacterUsingHardwareKeyboard(JSStringRef character, JSValueRef callback)
+{
+ unsigned callbackID = m_context.prepareForAsyncTask(callback);
+
+ // Assumes that the keyboard is already shown.
+ [[HIDEventGenerator sharedHIDEventGenerator] keyDown:toWTFString(toWK(character)) completionBlock:^{
+ m_context.asyncTaskComplete(callbackID);
+ }];
+}
+
double UIScriptController::minimumZoomScale() const
{
TestRunnerWKWebView *webView = TestController::singleton().mainWebView()->platformView();
@@ -130,6 +141,22 @@
};
}
+void UIScriptController::platformSetDidShowKeyboardCallback()
+{
+ TestRunnerWKWebView *webView = TestController::singleton().mainWebView()->platformView();
+ webView.didShowKeyboardCallback = ^{
+ m_context.fireCallback(m_didShowKeyboardCallback);
+ };
}
+void UIScriptController::platformSetDidHideKeyboardCallback()
+{
+ TestRunnerWKWebView *webView = TestController::singleton().mainWebView()->platformView();
+ webView.didHideKeyboardCallback = ^{
+ m_context.fireCallback(m_didHideKeyboardCallback);
+ };
+}
+
+}
+
#endif // PLATFORM(IOS)