WKWebView Find-in-page API.
[WebKit-https.git] / Tools / TestWebKitAPI / cocoa / TestWKWebView.h
1 /*
2  * Copyright (C) 2016 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #import <WebKit/WebKit.h>
27 #import <wtf/RetainPtr.h>
28
29 @class _WKProcessPoolConfiguration;
30
31 #if PLATFORM(IOS_FAMILY)
32 @class _WKActivatedElementInfo;
33 @protocol UITextInputInternal;
34 @protocol UITextInputMultiDocument;
35 @protocol UITextInputPrivate;
36 @protocol UIWKInteractionViewProtocol;
37 #endif
38
39 @interface WKWebView (AdditionalDeclarations)
40 #if PLATFORM(MAC)
41 - (void)paste:(id)sender;
42 - (void)changeAttributes:(id)sender;
43 - (void)changeColor:(id)sender;
44 - (void)superscript:(id)sender;
45 - (void)subscript:(id)sender;
46 - (void)unscript:(id)sender;
47 #endif
48 @end
49
50 @interface WKWebView (TestWebKitAPI)
51 @property (nonatomic, readonly) NSArray<NSString *> *tagsInBody;
52 - (void)loadTestPageNamed:(NSString *)pageName;
53 - (void)synchronouslyGoBack;
54 - (void)synchronouslyGoForward;
55 - (void)synchronouslyLoadHTMLString:(NSString *)html;
56 - (void)synchronouslyLoadHTMLString:(NSString *)html baseURL:(NSURL *)url;
57 - (void)synchronouslyLoadRequest:(NSURLRequest *)request;
58 - (void)synchronouslyLoadTestPageNamed:(NSString *)pageName;
59 - (BOOL)_synchronouslyExecuteEditCommand:(NSString *)command argument:(NSString *)argument;
60 - (void)expectElementTagsInOrder:(NSArray<NSString *> *)tagNames;
61 - (void)expectElementCount:(NSInteger)count querySelector:(NSString *)querySelector;
62 - (void)expectElementTag:(NSString *)tagName toComeBefore:(NSString *)otherTagName;
63 - (NSString *)stringByEvaluatingJavaScript:(NSString *)script;
64 - (id)objectByEvaluatingJavaScriptWithUserGesture:(NSString *)script;
65 - (id)objectByEvaluatingJavaScript:(NSString *)script;
66 @end
67
68 @interface TestMessageHandler : NSObject <WKScriptMessageHandler>
69 - (void)addMessage:(NSString *)message withHandler:(dispatch_block_t)handler;
70 @end
71
72 @interface TestWKWebView : WKWebView
73 - (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration processPoolConfiguration:(_WKProcessPoolConfiguration *)processPoolConfiguration;
74 - (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration addToWindow:(BOOL)addToWindow;
75 - (void)clearMessageHandlers:(NSArray *)messageNames;
76 - (void)performAfterReceivingMessage:(NSString *)message action:(dispatch_block_t)action;
77 - (void)waitForMessage:(NSString *)message;
78 - (void)performAfterLoading:(dispatch_block_t)actions;
79 - (void)waitForNextPresentationUpdate;
80 - (void)forceDarkMode;
81 - (NSString *)stylePropertyAtSelectionStart:(NSString *)propertyName;
82 - (NSString *)stylePropertyAtSelectionEnd:(NSString *)propertyName;
83 - (void)collapseToStart;
84 - (void)collapseToEnd;
85 - (void)addToTestWindow;
86 - (BOOL)selectionRangeHasStartOffset:(int)start endOffset:(int)end;
87 @end
88
89 #if PLATFORM(IOS_FAMILY)
90 @interface UIView (WKTestingUIViewUtilities)
91 - (UIView *)wkFirstSubviewWithClass:(Class)targetClass;
92 - (UIView *)wkFirstSubviewWithBoundsSize:(CGSize)size;
93 @end
94 #endif
95
96 #if PLATFORM(IOS_FAMILY)
97 @interface WKContentView : UIView
98 @end
99
100 @interface TestWKWebView (IOSOnly)
101 @property (nonatomic, readonly) UIView <UITextInputPrivate, UITextInputInternal, UITextInputMultiDocument, UIWKInteractionViewProtocol, UITextInputTokenizer> *textInputContentView;
102 @property (nonatomic, readonly) RetainPtr<NSArray> selectionRectsAfterPresentationUpdate;
103 @property (nonatomic, readonly) CGRect caretViewRectInContentCoordinates;
104 @property (nonatomic, readonly) NSArray<NSValue *> *selectionViewRectsInContentCoordinates;
105 - (_WKActivatedElementInfo *)activatedElementAtPosition:(CGPoint)position;
106 - (void)evaluateJavaScriptAndWaitForInputSessionToChange:(NSString *)script;
107 - (WKContentView *)wkContentView;
108 @end
109 #endif
110
111 #if PLATFORM(MAC)
112 @interface TestWKWebView (MacOnly)
113 // Simulates clicking with a pressure-sensitive device, if possible.
114 - (void)mouseDownAtPoint:(NSPoint)pointInWindow simulatePressure:(BOOL)simulatePressure;
115 - (void)mouseDragToPoint:(NSPoint)pointInWindow;
116 - (void)mouseEnterAtPoint:(NSPoint)pointInWindow;
117 - (void)mouseUpAtPoint:(NSPoint)pointInWindow;
118 - (void)mouseMoveToPoint:(NSPoint)pointInWindow withFlags:(NSEventModifierFlags)flags;
119 - (void)sendClicksAtPoint:(NSPoint)pointInWindow numberOfClicks:(NSUInteger)numberOfClicks;
120 - (void)sendClickAtPoint:(NSPoint)pointInWindow;
121 - (NSWindow *)hostWindow;
122 - (void)typeCharacter:(char)character;
123 @end
124 #endif
125