Source/WebKit:
[WebKit-https.git] / Tools / TestWebKitAPI / Tests / ios / TestInputDelegate.mm
1 /*
2  * Copyright (C) 2018 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 #include "config.h"
27 #include "TestInputDelegate.h"
28
29 #if PLATFORM(IOS_FAMILY)
30
31 #import <wtf/BlockPtr.h>
32
33 @implementation TestInputDelegate {
34     BlockPtr<_WKFocusStartsInputSessionPolicy(WKWebView *, id <_WKFocusedElementInfo>)> _focusStartsInputSessionPolicyHandler;
35     BlockPtr<void(WKWebView *, id <_WKFormInputSession>)> _willStartInputSessionHandler;
36     BlockPtr<void(WKWebView *, id <_WKFormInputSession>)> _didStartInputSessionHandler;
37     BlockPtr<NSDictionary<id, NSString *> *(WKWebView *)> _webViewAdditionalContextForStrongPasswordAssistanceHandler;
38     BlockPtr<BOOL(WKWebView *, id <_WKFocusedElementInfo>)> _focusRequiresStrongPasswordAssistanceHandler;
39 }
40
41 - (void)setFocusStartsInputSessionPolicyHandler:(_WKFocusStartsInputSessionPolicy (^)(WKWebView *, id <_WKFocusedElementInfo>))handler
42 {
43     _focusStartsInputSessionPolicyHandler = makeBlockPtr(handler);
44 }
45
46 - (_WKFocusStartsInputSessionPolicy (^)(WKWebView *, id <_WKFocusedElementInfo>))focusStartsInputSessionPolicyHandler
47 {
48     return _focusStartsInputSessionPolicyHandler.get();
49 }
50
51 - (void)setDidStartInputSessionHandler:(void (^)(WKWebView *, id <_WKFormInputSession>))handler
52 {
53     _didStartInputSessionHandler = makeBlockPtr(handler);
54 }
55
56 - (void (^)(WKWebView *, id <_WKFormInputSession>))didStartInputSessionHandler
57 {
58     return _didStartInputSessionHandler.get();
59 }
60
61 - (void)setWillStartInputSessionHandler:(void (^)(WKWebView *, id <_WKFormInputSession>))willStartInputSessionHandler
62 {
63     _willStartInputSessionHandler = makeBlockPtr(willStartInputSessionHandler);
64 }
65
66 - (void (^)(WKWebView *, id <_WKFormInputSession>))willStartInputSessionHandler
67 {
68     return _willStartInputSessionHandler.get();
69 }
70
71 - (_WKFocusStartsInputSessionPolicy)_webView:(WKWebView *)webView decidePolicyForFocusedElement:(id <_WKFocusedElementInfo>)info
72 {
73     return self.focusStartsInputSessionPolicyHandler ? self.focusStartsInputSessionPolicyHandler(webView, info) : _WKFocusStartsInputSessionPolicyAuto;
74 }
75
76 - (void)_webView:(WKWebView *)webView willStartInputSession:(id <_WKFormInputSession>)inputSession
77 {
78     if (_willStartInputSessionHandler)
79         _willStartInputSessionHandler(webView, inputSession);
80 }
81
82 - (void)_webView:(WKWebView *)webView didStartInputSession:(id <_WKFormInputSession>)inputSession
83 {
84     if (_didStartInputSessionHandler)
85         _didStartInputSessionHandler(webView, inputSession);
86 }
87
88 - (void)setWebViewAdditionalContextForStrongPasswordAssistanceHandler:(NSDictionary<id, NSString *> * (^)(WKWebView *))webViewAdditionalContextForStrongPasswordAssistanceHandler
89 {
90     _webViewAdditionalContextForStrongPasswordAssistanceHandler = makeBlockPtr(webViewAdditionalContextForStrongPasswordAssistanceHandler);
91 }
92
93 - (NSDictionary<id, NSString *> * (^)(WKWebView *))webViewAdditionalContextForStrongPasswordAssistanceHandler
94 {
95     return _webViewAdditionalContextForStrongPasswordAssistanceHandler.get();
96 }
97
98 - (NSDictionary<id, NSString *> *)_webViewAdditionalContextForStrongPasswordAssistance:(WKWebView *)webView
99 {
100     if (_webViewAdditionalContextForStrongPasswordAssistanceHandler)
101         return _webViewAdditionalContextForStrongPasswordAssistanceHandler(webView);
102     return @{ };
103 }
104
105 - (void)setFocusRequiresStrongPasswordAssistanceHandler:(BOOL (^)(WKWebView *, id <_WKFocusedElementInfo>))handler
106 {
107     _focusRequiresStrongPasswordAssistanceHandler = makeBlockPtr(handler);
108 }
109
110 - (BOOL (^)(WKWebView *, id <_WKFocusedElementInfo>))focusRequiresStrongPasswordAssistanceHandler
111 {
112     return _focusRequiresStrongPasswordAssistanceHandler.get();
113 }
114
115 - (BOOL)_webView:(WKWebView *)webView focusRequiresStrongPasswordAssistance:(id <_WKFocusedElementInfo>)info
116 {
117     if (_focusRequiresStrongPasswordAssistanceHandler)
118         return _focusRequiresStrongPasswordAssistanceHandler(webView, info);
119     return NO;
120 }
121
122 @end
123
124 #endif // PLATFORM(IOS_FAMILY)