Changeset 190368 in webkit


Ignore:
Timestamp:
Sep 30, 2015, 2:48:00 PM (10 years ago)
Author:
Simon Fraser
Message:

[iOS] Allow tests to generate user gestures for UI testing
https://bugs.webkit.org/show_bug.cgi?id=149653

Reviewed by Tim Horton.

Tools:

Expose functionality in UIScriptController to allow for testing single- and double-tap,
and to listen for completion of scrolling and zooming in the WKWebView.

Tap generation is done using synthetic IOHIDEvents, via a new HIDEventGenerator class
which hides the complexity of creating these events. Event dispatch is asynchronous.
We detect when the last event has been handled by dispatching a vendor-specific event,
which is detected via -_handleHIDEvent: in our UIApplication subclass.

  • WebKitTestRunner/Configurations/WebKitTestRunnerApp.xcconfig: Link with IOKit.
  • WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl: Two new properties

for 'will begin zooming' and 'did end zooming' callbacks, and functions to dispatch
single and double taps.

  • WebKitTestRunner/UIScriptContext/UIScriptContext.cpp:

(UIScriptContext::registerCallback): Used to store the callbacks for zooming.
Unlike the "task" callbacks, these are persistent, but we store them in the same hash map.
(UIScriptContext::unregisterCallback):
(UIScriptContext::callbackWithID):
(UIScriptContext::fireCallback):

  • WebKitTestRunner/UIScriptContext/UIScriptContext.h:
  • WebKitTestRunner/UIScriptContext/UIScriptController.cpp:

(WTR::UIScriptController::setWillBeginZoomingCallback): Cross-platform code.
(WTR::UIScriptController::willBeginZoomingCallback): Ditto.
(WTR::UIScriptController::setDidEndZoomingCallback):
(WTR::UIScriptController::didEndZoomingCallback):
(WTR::UIScriptController::singleTapAtPoint): Non-iOS stub.
(WTR::UIScriptController::doubleTapAtPoint): Ditto.
(WTR::UIScriptController::platformSetWillBeginZoomingCallback):
(WTR::UIScriptController::platformSetDidEndZoomingCallback):

  • WebKitTestRunner/UIScriptContext/UIScriptController.h:
  • WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
  • WebKitTestRunner/cocoa/TestRunnerWKWebView.h: Properties for the zooming callbacks.
  • WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:

(-[TestRunnerWKWebView zoomToScale:animated:completionHandler:]): Dispatch the zooming callback.
(-[TestRunnerWKWebView scrollViewWillBeginZooming:withView:]): Ditto.
(-[TestRunnerWKWebView scrollViewDidEndZooming:withView:atScale:]): Ditto.
(-[TestRunnerWKWebView onDidEndZooming:]): Deleted.

  • WebKitTestRunner/ios/HIDEventGenerator.h: Copied from Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.h.
  • WebKitTestRunner/ios/HIDEventGenerator.m: Added.

(simpleDragCurve):
(calculateNextLocation):
(delayBetweenMove):
(+[HIDEventGenerator sharedHIDEventGenerator]):
(+[HIDEventGenerator nextEventCallbackID]):
(-[HIDEventGenerator init]):
(-[HIDEventGenerator _createIOHIDEventType:]):
(-[HIDEventGenerator _sendHIDEvent:]):
(-[HIDEventGenerator _sendMarkerHIDEventWithCompletionBlock:]):
(-[HIDEventGenerator _updateTouchPoints:count:]):
(-[HIDEventGenerator touchDownAtPoints:touchCount:]):
(-[HIDEventGenerator touchDown:touchCount:]):
(-[HIDEventGenerator touchDown:]):
(-[HIDEventGenerator liftUpAtPoints:touchCount:]):
(-[HIDEventGenerator liftUp:touchCount:]):
(-[HIDEventGenerator liftUp:]):
(-[HIDEventGenerator moveToPoints:touchCount:duration:]):
(-[HIDEventGenerator sendTaps:location:withNumberOfTouches:completionBlock:]):
(-[HIDEventGenerator tap:completionBlock:]):
(-[HIDEventGenerator doubleTap:completionBlock:]):
(-[HIDEventGenerator twoFingerTap:completionBlock:]):
(-[HIDEventGenerator dragWithStartPoint:endPoint:duration:completionBlock:]):
(-[HIDEventGenerator pinchCloseWithStartPoint:endPoint:duration:completionBlock:]):
(-[HIDEventGenerator pinchOpenWithStartPoint:endPoint:duration:completionBlock:]):
(-[HIDEventGenerator markerEventReceived:]):

  • WebKitTestRunner/ios/IOKitSPI.h: Added.
  • WebKitTestRunner/ios/UIKitSPI.h: Copied from Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.h.
  • WebKitTestRunner/ios/UIScriptControllerIOS.mm:

(WTR::globalToContentCoordinates):
(WTR::UIScriptController::singleTapAtPoint):
(WTR::UIScriptController::doubleTapAtPoint):
(WTR::UIScriptController::platformSetWillBeginZoomingCallback):
(WTR::UIScriptController::platformSetDidEndZoomingCallback):

  • WebKitTestRunner/ios/mainIOS.mm:

(-[WebKitTestRunnerApp _handleHIDEvent:]):

LayoutTests:

Simple tests for single tap triggering a click, and double-tap zoom.

  • TestExpectations:
  • fast/events/ios/double-tap-zoom-expected.txt: Added.
  • fast/events/ios/double-tap-zoom.html: Added.
  • fast/events/ios/single-tap-generates-click-expected.txt: Added.
  • fast/events/ios/single-tap-generates-click.html: Added.
  • platform/ios-simulator-wk2/TestExpectations:
Location:
trunk
Files:
7 added
15 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r190367 r190368  
     12015-09-29  Simon Fraser  <simon.fraser@apple.com>
     2
     3        [iOS] Allow tests to generate user gestures for UI testing
     4        https://bugs.webkit.org/show_bug.cgi?id=149653
     5
     6        Reviewed by Tim Horton.
     7
     8        Simple tests for single tap triggering a click, and double-tap zoom.
     9
     10        * TestExpectations:
     11        * fast/events/ios/double-tap-zoom-expected.txt: Added.
     12        * fast/events/ios/double-tap-zoom.html: Added.
     13        * fast/events/ios/single-tap-generates-click-expected.txt: Added.
     14        * fast/events/ios/single-tap-generates-click.html: Added.
     15        * platform/ios-simulator-wk2/TestExpectations:
     16
    1172015-09-30  Keith Miller  <keith_miller@apple.com>
    218
  • trunk/LayoutTests/TestExpectations

    r190260 r190368  
    1717fast/zooming/ios [ Skip ]
    1818fast/viewport/ios [ Skip ]
     19fast/events/ios [ Skip ]
    1920
    2021fast/forms/attributed-strings.html [ Skip ]
  • trunk/LayoutTests/platform/ios-simulator-wk2/TestExpectations

    r190260 r190368  
    1111fast/zooming/ios [ Pass ]
    1212fast/viewport/ios [ Pass ]
     13fast/events/ios [ Pass ]
    1314
    1415#//////////////////////////////////////////////////////////////////////////////////////////
  • trunk/Tools/ChangeLog

    r190366 r190368  
     12015-09-29  Simon Fraser  <simon.fraser@apple.com>
     2
     3        [iOS] Allow tests to generate user gestures for UI testing
     4        https://bugs.webkit.org/show_bug.cgi?id=149653
     5
     6        Reviewed by Tim Horton.
     7
     8        Expose functionality in UIScriptController to allow for testing single- and double-tap,
     9        and to listen for completion of scrolling and zooming in the WKWebView.
     10       
     11        Tap generation is done using synthetic IOHIDEvents, via a new HIDEventGenerator class
     12        which hides the complexity of creating these events. Event dispatch is asynchronous.
     13        We detect when the last event has been handled by dispatching a vendor-specific event,
     14        which is detected via -_handleHIDEvent: in our UIApplication subclass.
     15       
     16        * WebKitTestRunner/Configurations/WebKitTestRunnerApp.xcconfig: Link with IOKit.
     17        * WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl: Two new properties
     18        for 'will begin zooming' and 'did end zooming' callbacks, and functions to dispatch
     19        single and double taps.
     20        * WebKitTestRunner/UIScriptContext/UIScriptContext.cpp:
     21        (UIScriptContext::registerCallback): Used to store the callbacks for zooming.
     22        Unlike the "task" callbacks, these are persistent, but we store them in the same hash map.
     23        (UIScriptContext::unregisterCallback):
     24        (UIScriptContext::callbackWithID):
     25        (UIScriptContext::fireCallback):
     26        * WebKitTestRunner/UIScriptContext/UIScriptContext.h:
     27        * WebKitTestRunner/UIScriptContext/UIScriptController.cpp:
     28        (WTR::UIScriptController::setWillBeginZoomingCallback): Cross-platform code.
     29        (WTR::UIScriptController::willBeginZoomingCallback): Ditto.
     30        (WTR::UIScriptController::setDidEndZoomingCallback):
     31        (WTR::UIScriptController::didEndZoomingCallback):
     32        (WTR::UIScriptController::singleTapAtPoint): Non-iOS stub.
     33        (WTR::UIScriptController::doubleTapAtPoint): Ditto.
     34        (WTR::UIScriptController::platformSetWillBeginZoomingCallback):
     35        (WTR::UIScriptController::platformSetDidEndZoomingCallback):
     36        * WebKitTestRunner/UIScriptContext/UIScriptController.h:
     37        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
     38        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h: Properties for the zooming callbacks.
     39        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
     40        (-[TestRunnerWKWebView zoomToScale:animated:completionHandler:]): Dispatch the zooming callback.
     41        (-[TestRunnerWKWebView scrollViewWillBeginZooming:withView:]): Ditto.
     42        (-[TestRunnerWKWebView scrollViewDidEndZooming:withView:atScale:]): Ditto.
     43        (-[TestRunnerWKWebView onDidEndZooming:]): Deleted.
     44        * WebKitTestRunner/ios/HIDEventGenerator.h: Copied from Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.h.
     45        * WebKitTestRunner/ios/HIDEventGenerator.m: Added.
     46        (simpleDragCurve):
     47        (calculateNextLocation):
     48        (delayBetweenMove):
     49        (+[HIDEventGenerator sharedHIDEventGenerator]):
     50        (+[HIDEventGenerator nextEventCallbackID]):
     51        (-[HIDEventGenerator init]):
     52        (-[HIDEventGenerator _createIOHIDEventType:]):
     53        (-[HIDEventGenerator _sendHIDEvent:]):
     54        (-[HIDEventGenerator _sendMarkerHIDEventWithCompletionBlock:]):
     55        (-[HIDEventGenerator _updateTouchPoints:count:]):
     56        (-[HIDEventGenerator touchDownAtPoints:touchCount:]):
     57        (-[HIDEventGenerator touchDown:touchCount:]):
     58        (-[HIDEventGenerator touchDown:]):
     59        (-[HIDEventGenerator liftUpAtPoints:touchCount:]):
     60        (-[HIDEventGenerator liftUp:touchCount:]):
     61        (-[HIDEventGenerator liftUp:]):
     62        (-[HIDEventGenerator moveToPoints:touchCount:duration:]):
     63        (-[HIDEventGenerator sendTaps:location:withNumberOfTouches:completionBlock:]):
     64        (-[HIDEventGenerator tap:completionBlock:]):
     65        (-[HIDEventGenerator doubleTap:completionBlock:]):
     66        (-[HIDEventGenerator twoFingerTap:completionBlock:]):
     67        (-[HIDEventGenerator dragWithStartPoint:endPoint:duration:completionBlock:]):
     68        (-[HIDEventGenerator pinchCloseWithStartPoint:endPoint:duration:completionBlock:]):
     69        (-[HIDEventGenerator pinchOpenWithStartPoint:endPoint:duration:completionBlock:]):
     70        (-[HIDEventGenerator markerEventReceived:]):
     71        * WebKitTestRunner/ios/IOKitSPI.h: Added.
     72        * WebKitTestRunner/ios/UIKitSPI.h: Copied from Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.h.
     73        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
     74        (WTR::globalToContentCoordinates):
     75        (WTR::UIScriptController::singleTapAtPoint):
     76        (WTR::UIScriptController::doubleTapAtPoint):
     77        (WTR::UIScriptController::platformSetWillBeginZoomingCallback):
     78        (WTR::UIScriptController::platformSetDidEndZoomingCallback):
     79        * WebKitTestRunner/ios/mainIOS.mm:
     80        (-[WebKitTestRunnerApp _handleHIDEvent:]):
     81
    1822015-09-30  Dana Burkart  <dburkart@apple.com>
    283
  • trunk/Tools/WebKitTestRunner/Configurations/WebKitTestRunnerApp.xcconfig

    r190206 r190368  
    2828PRODUCT_NAME = WebKitTestRunner;
    2929GCC_ENABLE_OBJC_EXCEPTIONS = YES;
    30 OTHER_LDFLAGS = $(inherited) -l$(WEBKIT_SYSTEM_INTERFACE_LIBRARY) -lWebKitTestRunner -framework JavaScriptCore -framework CoreGraphics -framework ImageIO -framework UIKit -framework WebKit -framework Foundation;
     30OTHER_LDFLAGS = $(inherited) -l$(WEBKIT_SYSTEM_INTERFACE_LIBRARY) -lWebKitTestRunner -framework JavaScriptCore -framework CoreGraphics -framework ImageIO -framework IOKit -framework UIKit -framework WebKit -framework Foundation;
    3131SKIP_INSTALL[sdk=macosx*] = YES;
    3232EXCLUDED_SOURCE_FILE_NAMES[sdk=macosx*] = ios/* AppDelegate.m;
  • trunk/Tools/WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl

    r190065 r190368  
    3030    void zoomToScale(double scale, object callback);
    3131
     32    // Interaction.
     33    // These functions post events asynchronously. The callback is fired when the events have been disptached, but any
     34    // resulting behavior may also be asynchronous.
     35    void singleTapAtPoint(long x, long y, object callback);
     36    void doubleTapAtPoint(long x, long y, object callback);
     37
     38    attribute object willBeginZoomingCallback;
     39    attribute object didEndZoomingCallback;
     40
     41    // View state
    3242    readonly attribute double zoomScale;
    3343    readonly attribute double minimumZoomScale;
  • trunk/Tools/WebKitTestRunner/UIScriptContext/UIScriptContext.cpp

    r190065 r190368  
    103103}
    104104
     105unsigned UIScriptContext::registerCallback(JSValueRef taskCallback)
     106{
     107    return prepareForAsyncTask(taskCallback);
     108}
     109
     110void UIScriptContext::unregisterCallback(unsigned callbackID)
     111{
     112    Task task = m_callbacks.take(callbackID);
     113    ASSERT(task.callback);
     114    JSValueUnprotect(m_context.get(), task.callback);
     115}
     116
     117JSValueRef UIScriptContext::callbackWithID(unsigned callbackID)
     118{
     119    Task task = m_callbacks.get(callbackID);
     120    return task.callback;
     121}
     122
     123void UIScriptContext::fireCallback(unsigned callbackID)
     124{
     125    Task task = m_callbacks.get(callbackID);
     126    ASSERT(task.callback);
     127
     128    JSValueRef exception = nullptr;
     129    JSObjectRef callbackObject = JSValueToObject(m_context.get(), task.callback, &exception);
     130
     131    m_currentScriptCallbackID = task.parentScriptCallbackID;
     132
     133    exception = nullptr;
     134    JSObjectCallAsFunction(m_context.get(), callbackObject, JSContextGetGlobalObject(m_context.get()), 0, nullptr, &exception);
     135   
     136    m_currentScriptCallbackID = 0;
     137}
     138
    105139void UIScriptContext::uiScriptComplete(JSStringRef result)
    106140{
  • trunk/Tools/WebKitTestRunner/UIScriptContext/UIScriptContext.h

    r190065 r190368  
    4848    void uiScriptComplete(JSStringRef);
    4949
     50    // For one-shot tasks callbacks.
    5051    unsigned prepareForAsyncTask(JSValueRef taskCallback);
    5152    void asyncTaskComplete(unsigned taskCallbackID);
     53
     54    // For persistent callbacks.
     55    unsigned registerCallback(JSValueRef taskCallback);
     56    JSValueRef callbackWithID(unsigned callbackID);
     57    void unregisterCallback(unsigned callbackID);
     58    void fireCallback(unsigned callbackID);
    5259
    5360    unsigned nextTaskCallbackID();
  • trunk/Tools/WebKitTestRunner/UIScriptContext/UIScriptController.cpp

    r190065 r190368  
    2929#include "JSUIScriptController.h"
    3030#include "UIScriptContext.h"
    31 // #include <JavaScriptCore/JavaScriptCore.h>
     31#include <JavaScriptCore/JSValueRef.h>
    3232
    3333namespace WTR {
     
    5454#endif
    5555
     56void UIScriptController::setWillBeginZoomingCallback(JSValueRef callback)
     57{
     58    m_willBeginZoomingCallback = m_context.registerCallback(callback);
     59    platformSetWillBeginZoomingCallback();
     60}
     61
     62JSValueRef UIScriptController::willBeginZoomingCallback() const
     63{
     64    return m_context.callbackWithID(m_willBeginZoomingCallback);
     65}
     66
     67void UIScriptController::setDidEndZoomingCallback(JSValueRef callback)
     68{
     69    m_didEndZoomingCallback = m_context.registerCallback(callback);
     70    platformSetDidEndZoomingCallback();
     71}
     72
     73JSValueRef UIScriptController::didEndZoomingCallback() const
     74{
     75    return m_context.callbackWithID(m_didEndZoomingCallback);
     76}
     77
    5678#if !PLATFORM(IOS)
    5779void UIScriptController::zoomToScale(double, JSValueRef)
     80{
     81}
     82
     83void UIScriptController::singleTapAtPoint(long x, long y, JSValueRef)
     84{
     85}
     86
     87void UIScriptController::doubleTapAtPoint(long x, long y, JSValueRef)
    5888{
    5989}
     
    78108    return nullptr;
    79109}
     110
     111void UIScriptController::platformSetWillBeginZoomingCallback()
     112{
     113}
     114
     115void UIScriptController::platformSetDidEndZoomingCallback()
     116{
     117}
    80118#endif
    81119
  • trunk/Tools/WebKitTestRunner/UIScriptContext/UIScriptController.h

    r190065 r190368  
    4646    void zoomToScale(double scale, JSValueRef callback);
    4747
     48    void singleTapAtPoint(long x, long y, JSValueRef callback);
     49    void doubleTapAtPoint(long x, long y, JSValueRef callback);
     50   
     51    void setWillBeginZoomingCallback(JSValueRef);
     52    JSValueRef willBeginZoomingCallback() const;
     53
     54    void setDidEndZoomingCallback(JSValueRef);
     55    JSValueRef didEndZoomingCallback() const;
     56
    4857    double zoomScale() const;
    4958    double minimumZoomScale() const;
     
    5665private:
    5766    UIScriptController(UIScriptContext&);
     67   
     68    void platformSetWillBeginZoomingCallback();
     69    void platformSetDidEndZoomingCallback();
    5870
    5971    virtual JSClassRef wrapperClass() override;
     
    6274
    6375    UIScriptContext& m_context;
     76
     77    unsigned m_willBeginZoomingCallback { 0 };
     78    unsigned m_didEndZoomingCallback { 0 };
    6479};
    6580
  • trunk/Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj

    r190335 r190368  
    4747                0FEB90A01905A834000FDBF3 /* InjectedBundlePageCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0FEB909E1905A776000FDBF3 /* InjectedBundlePageCocoa.mm */; };
    4848                0FEB90A51905C016000FDBF3 /* CrashReporterInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0FEB90A31905BC6A000FDBF3 /* CrashReporterInfo.mm */; };
     49                0FEBF85A1BB61DF20028722D /* HIDEventGenerator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0FEBF8591BB61DF20028722D /* HIDEventGenerator.mm */; settings = {ASSET_TAGS = (); }; };
    4950                29210EAE144CACB700835BB5 /* AccessibilityUIElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29210EA9144CACB200835BB5 /* AccessibilityUIElement.cpp */; };
    5051                29210EB0144CACBD00835BB5 /* AccessibilityController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29210EA2144CAAA500835BB5 /* AccessibilityController.cpp */; };
     
    190191                0FEB90A21905BC6A000FDBF3 /* CrashReporterInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CrashReporterInfo.h; path = cocoa/CrashReporterInfo.h; sourceTree = "<group>"; };
    191192                0FEB90A31905BC6A000FDBF3 /* CrashReporterInfo.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = CrashReporterInfo.mm; path = cocoa/CrashReporterInfo.mm; sourceTree = "<group>"; };
     193                0FEBF8581BB61DF20028722D /* HIDEventGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HIDEventGenerator.h; sourceTree = "<group>"; };
     194                0FEBF8591BB61DF20028722D /* HIDEventGenerator.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = HIDEventGenerator.mm; sourceTree = "<group>"; };
     195                0FEBF85B1BB62A370028722D /* IOKitSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IOKitSPI.h; sourceTree = "<group>"; };
     196                0FEBF85C1BB62D460028722D /* UIKitSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIKitSPI.h; sourceTree = "<group>"; };
    192197                1A3326051B75396500F89F62 /* TestOptions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TestOptions.h; sourceTree = "<group>"; };
    193198                26D758E5160BECDC00268472 /* GeolocationProviderMock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GeolocationProviderMock.cpp; sourceTree = "<group>"; };
     
    552557                                0F87B6181BACC558004EC572 /* Launch.storyboard */,
    553558                                2EE52CEB1890A9A80010ED21 /* InfoPlist.strings */,
     559                                0FEBF85B1BB62A370028722D /* IOKitSPI.h */,
     560                                0FEBF85C1BB62D460028722D /* UIKitSPI.h */,
     561                                0FEBF8581BB61DF20028722D /* HIDEventGenerator.h */,
     562                                0FEBF8591BB61DF20028722D /* HIDEventGenerator.mm */,
    554563                                2EE52D131890A9FB0010ED21 /* PlatformWebViewIOS.mm */,
    555564                                2EE52D141890A9FB0010ED21 /* TestControllerIOS.mm */,
     
    915924                                2E63ED921891ADAD002A7AFC /* TestControllerIOS.mm in Sources */,
    916925                                2E63ED9C1891ADC7002A7AFC /* AppDelegate.m in Sources */,
     926                                0FEBF85A1BB61DF20028722D /* HIDEventGenerator.mm in Sources */,
    917927                                2E63ED911891ADAD002A7AFC /* PlatformWebViewIOS.mm in Sources */,
    918928                        );
  • trunk/Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.h

    r190065 r190368  
    3131
    3232#if PLATFORM(IOS)
     33
     34@property (nonatomic, copy) void (^willBeginZoomingCallback)(void);
     35@property (nonatomic, copy) void (^didEndZoomingCallback)(void);
     36
    3337- (void)zoomToScale:(double)scale animated:(BOOL)animated completionHandler:(void (^)(void))completionHandler;
    34 - (void)onDidEndZooming:(void (^)(void))completionHandler;
     38
    3539#endif
    3640
  • trunk/Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.mm

    r190087 r190368  
    3434@interface WKWebView ()
    3535
     36// FIXME: move these to WKWebView_Private.h
     37- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view;
    3638- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale;
    3739
     
    4244
    4345@interface TestRunnerWKWebView ()
    44 @property (nonatomic, copy) void (^zoomCompletionHandler)(void);
     46@property (nonatomic, copy) void (^zoomToScaleCompletionHandler)(void);
    4547@end
    4648
     
    5860- (void)zoomToScale:(double)scale animated:(BOOL)animated completionHandler:(void (^)(void))completionHandler
    5961{
    60     ASSERT(!self.zoomCompletionHandler);
    61     self.zoomCompletionHandler = completionHandler;
     62    ASSERT(!self.zoomToScaleCompletionHandler);
     63    self.zoomToScaleCompletionHandler = completionHandler;
    6264
    6365    [self.scrollView setZoomScale:scale animated:animated];
     66}
     67
     68- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(nullable UIView *)view
     69{
     70    [super scrollViewWillBeginZooming:scrollView withView:view];
     71
     72    if (self.willBeginZoomingCallback)
     73        self.willBeginZoomingCallback();
    6474}
    6575
     
    6878    [super scrollViewDidEndZooming:scrollView withView:view atScale:scale];
    6979   
    70     if (self.zoomCompletionHandler) {
    71         self.zoomCompletionHandler();
    72         self.zoomCompletionHandler = nullptr;
     80    if (self.didEndZoomingCallback)
     81        self.didEndZoomingCallback();
     82
     83    if (self.zoomToScaleCompletionHandler) {
     84        self.zoomToScaleCompletionHandler();
     85        self.zoomToScaleCompletionHandler = nullptr;
    7386    }
    74 }
    75 
    76 - (void)onDidEndZooming:(void (^)(void))completionHandler
    77 {
    78     ASSERT(!self.zoomCompletionHandler);
    79     self.zoomCompletionHandler = completionHandler;
    8087}
    8188#endif
  • trunk/Tools/WebKitTestRunner/ios/HIDEventGenerator.h

    r190367 r190368  
    2424 */
    2525
    26 #import <WebKit/WebKit.h>
     26#import "UIKitSPI.h"
    2727
    28 #if WK_API_ENABLED
     28#import <CoreGraphics/CGGeometry.h>
    2929
    30 @interface TestRunnerWKWebView : WKWebView
     30@interface HIDEventGenerator : NSObject
    3131
    32 #if PLATFORM(IOS)
    33 - (void)zoomToScale:(double)scale animated:(BOOL)animated completionHandler:(void (^)(void))completionHandler;
    34 - (void)onDidEndZooming:(void (^)(void))completionHandler;
    35 #endif
     32+ (HIDEventGenerator *)sharedHIDEventGenerator;
     33
     34// Touches
     35- (void)touchDown:(CGPoint)location;
     36- (void)liftUp:(CGPoint)location;
     37- (void)moveToPoints:(CGPoint*)locations touchCount:(NSUInteger)count duration:(NSTimeInterval)seconds;
     38
     39// Taps
     40- (void)tap:(CGPoint)location completionBlock:(void (^)(void))completionBlock;
     41- (void)doubleTap:(CGPoint)location completionBlock:(void (^)(void))completionBlock;
     42- (void)twoFingerTap:(CGPoint)location completionBlock:(void (^)(void))completionBlock;
     43
     44// Drags
     45- (void)dragWithStartPoint:(CGPoint)startLocation endPoint:(CGPoint)endLocation duration:(double)seconds completionBlock:(void (^)(void))completionBlock;
     46
     47// Pinches
     48- (void)pinchCloseWithStartPoint:(CGPoint)startLocation endPoint:(CGPoint)endLocation duration:(double)seconds completionBlock:(void (^)(void))completionBlock;
     49- (void)pinchOpenWithStartPoint:(CGPoint)startLocation endPoint:(CGPoint)endLocation duration:(double)seconds completionBlock:(void (^)(void))completionBlock;
     50
     51- (void)markerEventReceived:(IOHIDEventRef)event;
    3652
    3753@end
    38 
    39 #endif // #if WK_API_ENABLED
  • trunk/Tools/WebKitTestRunner/ios/UIKitSPI.h

    r190367 r190368  
    11/*
    2  * Copyright (C) 2015 Apple Inc. All rights reserved.
     2 * Copyright (C) 2014 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2424 */
    2525
    26 #import <WebKit/WebKit.h>
     26#import <UIKit/UIKit.h>
    2727
    28 #if WK_API_ENABLED
     28#if USE(APPLE_INTERNAL_SDK)
    2929
    30 @interface TestRunnerWKWebView : WKWebView
     30#import <UIKit/UIApplication_Private.h>
     31#import <UIKit/UIWindow_Private.h>
    3132
    32 #if PLATFORM(IOS)
    33 - (void)zoomToScale:(double)scale animated:(BOOL)animated completionHandler:(void (^)(void))completionHandler;
    34 - (void)onDidEndZooming:(void (^)(void))completionHandler;
    35 #endif
     33#else
    3634
     35#import "IOKitSPI.h"
     36
     37@interface UIApplication ()
     38- (void)_enqueueHIDEvent:(IOHIDEventRef)event;
     39- (void)_handleHIDEvent:(IOHIDEventRef)event;
    3740@end
    3841
    39 #endif // #if WK_API_ENABLED
     42@interface UIWindow ()
     43- (uint32_t)_contextId;
     44@end
     45
     46#endif
  • trunk/Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm

    r190065 r190368  
    2929#if PLATFORM(IOS)
    3030
     31#import "HIDEventGenerator.h"
    3132#import "PlatformWebView.h"
    3233#import "TestController.h"
     
    6566}
    6667
     68static CGPoint globalToContentCoordinates(TestRunnerWKWebView *webView, long x, long y)
     69{
     70    CGPoint point = CGPointMake(x, y);
     71    point = [webView _convertPointFromContentsToView:point];
     72    point = [webView convertPoint:point toView:nil];
     73    point = [webView.window convertPoint:point toWindow:nil];
     74    return point;
     75}
     76
     77void UIScriptController::singleTapAtPoint(long x, long y, JSValueRef callback)
     78{
     79    unsigned callbackID = m_context.prepareForAsyncTask(callback);
     80
     81    [[HIDEventGenerator sharedHIDEventGenerator] tap:globalToContentCoordinates(TestController::singleton().mainWebView()->platformView(), x, y) completionBlock:^{
     82        m_context.asyncTaskComplete(callbackID);
     83    }];
     84}
     85
     86void UIScriptController::doubleTapAtPoint(long x, long y, JSValueRef callback)
     87{
     88    unsigned callbackID = m_context.prepareForAsyncTask(callback);
     89
     90    [[HIDEventGenerator sharedHIDEventGenerator] doubleTap:globalToContentCoordinates(TestController::singleton().mainWebView()->platformView(), x, y) completionBlock:^{
     91        m_context.asyncTaskComplete(callbackID);
     92    }];
     93}
     94
    6795double UIScriptController::minimumZoomScale() const
    6896{
     
    87115}
    88116
     117void UIScriptController::platformSetWillBeginZoomingCallback()
     118{
     119    TestRunnerWKWebView *webView = TestController::singleton().mainWebView()->platformView();
     120    webView.willBeginZoomingCallback = ^{
     121        m_context.fireCallback(m_willBeginZoomingCallback);
     122    };
     123}
     124
     125void UIScriptController::platformSetDidEndZoomingCallback()
     126{
     127    TestRunnerWKWebView *webView = TestController::singleton().mainWebView()->platformView();
     128    webView.didEndZoomingCallback = ^{
     129        m_context.fireCallback(m_didEndZoomingCallback);
     130    };
     131}
     132
    89133}
    90134
  • trunk/Tools/WebKitTestRunner/ios/mainIOS.mm

    r188892 r190368  
    2626#import "config.h"
    2727
     28#import "HIDEventGenerator.h"
    2829#import "TestController.h"
     30#import "UIKitSPI.h"
    2931#import <UIKit/UIKit.h>
    3032
     
    7173}
    7274
     75- (void)_handleHIDEvent:(IOHIDEventRef)event
     76{
     77    [[HIDEventGenerator sharedHIDEventGenerator] markerEventReceived:event];
     78}
     79
    7380@end
    7481
Note: See TracChangeset for help on using the changeset viewer.