Provide a viewport parameter to disable clipping to the safe area
[WebKit-https.git] / Tools / DumpRenderTree / ios / UIScriptControllerIOS.mm
1 /*
2  * Copyright (C) 2015 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 "config.h"
27 #import "UIScriptController.h"
28
29 #if PLATFORM(IOS)
30
31 #import "DumpRenderTreeBrowserView.h"
32 #import "UIScriptContext.h"
33 #import <WebCore/FloatRect.h>
34 #import <wtf/MainThread.h>
35
36 extern DumpRenderTreeBrowserView *gWebBrowserView;
37 extern DumpRenderTreeWebScrollView *gWebScrollView;
38
39 namespace WTR {
40     
41 void UIScriptController::checkForOutstandingCallbacks()
42 {
43 }
44
45 void UIScriptController::doAsyncTask(JSValueRef callback)
46 {
47     unsigned callbackID = m_context->prepareForAsyncTask(callback, CallbackTypeNonPersistent);
48
49     dispatch_async(dispatch_get_main_queue(), ^{
50         if (!m_context)
51             return;
52         m_context->asyncTaskComplete(callbackID);
53     });
54 }
55
56 void UIScriptController::doAfterPresentationUpdate(JSValueRef callback)
57 {
58     return doAsyncTask(callback);
59 }
60
61 void UIScriptController::doAfterNextStablePresentationUpdate(JSValueRef callback)
62 {
63     doAsyncTask(callback);
64 }
65
66 void UIScriptController::doAfterVisibleContentRectUpdate(JSValueRef callback)
67 {
68     doAsyncTask(callback);
69 }
70
71 void UIScriptController::zoomToScale(double scale, JSValueRef callback)
72 {
73     RefPtr<UIScriptController> protectedThis(this);
74     unsigned callbackID = protectedThis->context()->prepareForAsyncTask(callback, CallbackTypeNonPersistent);
75
76     dispatch_async(dispatch_get_main_queue(), ^{
77         [gWebScrollView zoomToScale:scale animated:YES completionHandler:^{
78             if (!protectedThis->context())
79                 return;
80             protectedThis->context()->asyncTaskComplete(callbackID);
81         }];
82     });
83 }
84
85 void UIScriptController::simulateAccessibilitySettingsChangeNotification(JSValueRef)
86 {
87 }
88
89 double UIScriptController::zoomScale() const
90 {
91     return gWebScrollView.zoomScale;
92 }
93
94 void UIScriptController::touchDownAtPoint(long x, long y, long touchCount, JSValueRef callback)
95 {
96 }
97
98 void UIScriptController::liftUpAtPoint(long x, long y, long touchCount, JSValueRef callback)
99 {
100 }
101
102 void UIScriptController::singleTapAtPoint(long x, long y, JSValueRef callback)
103 {
104 }
105
106 void UIScriptController::doubleTapAtPoint(long x, long y, JSValueRef callback)
107 {
108 }
109
110 void UIScriptController::dragFromPointToPoint(long startX, long startY, long endX, long endY, double durationSeconds, JSValueRef callback)
111 {
112 }
113     
114 void UIScriptController::longPressAtPoint(long x, long y, JSValueRef)
115 {
116 }
117
118 void UIScriptController::stylusDownAtPoint(long x, long y, float azimuthAngle, float altitudeAngle, float pressure, JSValueRef callback)
119 {
120 }
121
122 void UIScriptController::stylusMoveToPoint(long x, long y, float azimuthAngle, float altitudeAngle, float pressure, JSValueRef callback)
123 {
124 }
125
126 void UIScriptController::stylusUpAtPoint(long x, long y, JSValueRef callback)
127 {
128 }
129
130 void UIScriptController::stylusTapAtPoint(long x, long y, float azimuthAngle, float altitudeAngle, float pressure, JSValueRef callback)
131 {
132 }
133
134 void UIScriptController::sendEventStream(JSStringRef eventsJSON, JSValueRef callback)
135 {
136 }
137
138 void UIScriptController::typeCharacterUsingHardwareKeyboard(JSStringRef character, JSValueRef callback)
139 {
140 }
141
142 void UIScriptController::selectTextCandidateAtIndex(long, JSValueRef)
143 {
144 }
145
146 void UIScriptController::keyDownUsingHardwareKeyboard(JSStringRef character, JSValueRef callback)
147 {
148 }
149
150 void UIScriptController::keyUpUsingHardwareKeyboard(JSStringRef character, JSValueRef callback)
151 {
152 }
153
154 void UIScriptController::dismissFormAccessoryView()
155 {
156 }
157
158 void UIScriptController::selectFormAccessoryPickerRow(long rowIndex)
159 {
160 }
161     
162 JSObjectRef UIScriptController::contentsOfUserInterfaceItem(JSStringRef interfaceItem) const
163 {
164     return nullptr;
165 }
166
167 static CGPoint contentOffsetBoundedInValidRange(UIScrollView *scrollView, CGPoint contentOffset)
168 {
169     UIEdgeInsets contentInsets = scrollView.contentInset;
170     CGSize contentSize = scrollView.contentSize;
171     CGSize scrollViewSize = scrollView.bounds.size;
172
173     CGFloat maxHorizontalOffset = contentSize.width + contentInsets.right - scrollViewSize.width;
174     contentOffset.x = std::min(maxHorizontalOffset, contentOffset.x);
175     contentOffset.x = std::max(-contentInsets.left, contentOffset.x);
176
177     CGFloat maxVerticalOffset = contentSize.height + contentInsets.bottom - scrollViewSize.height;
178     contentOffset.y = std::min(maxVerticalOffset, contentOffset.y);
179     contentOffset.y = std::max(-contentInsets.top, contentOffset.y);
180     return contentOffset;
181 }
182
183 void UIScriptController::scrollToOffset(long x, long y)
184 {
185     [gWebScrollView setContentOffset:contentOffsetBoundedInValidRange(gWebScrollView, CGPointMake(x, y)) animated:YES];
186 }
187
188 void UIScriptController::immediateScrollToOffset(long x, long y)
189 {
190     [gWebScrollView setContentOffset:contentOffsetBoundedInValidRange(gWebScrollView, CGPointMake(x, y)) animated:NO];
191 }
192
193 void UIScriptController::immediateZoomToScale(double scale)
194 {
195     [gWebScrollView setZoomScale:scale animated:NO];
196 }
197
198 void UIScriptController::keyboardAccessoryBarNext()
199 {
200 }
201
202 void UIScriptController::keyboardAccessoryBarPrevious()
203 {
204 }
205
206 double UIScriptController::minimumZoomScale() const
207 {
208     return gWebScrollView.minimumZoomScale;
209 }
210
211 double UIScriptController::maximumZoomScale() const
212 {
213     return gWebScrollView.maximumZoomScale;
214 }
215
216 std::optional<bool> UIScriptController::stableStateOverride() const
217 {
218     return std::nullopt;
219 }
220
221 void UIScriptController::setStableStateOverride(std::optional<bool>)
222 {
223 }
224
225
226 JSObjectRef UIScriptController::contentVisibleRect() const
227 {
228     CGRect contentVisibleRect = [gWebBrowserView documentVisibleRect];
229     WebCore::FloatRect rect(contentVisibleRect.origin.x, contentVisibleRect.origin.y, contentVisibleRect.size.width, contentVisibleRect.size.height);
230     return m_context->objectFromRect(rect);
231 }
232
233 void UIScriptController::platformSetDidStartFormControlInteractionCallback()
234 {
235 }
236
237 void UIScriptController::platformSetDidEndFormControlInteractionCallback()
238 {
239 }
240     
241 void UIScriptController::platformSetDidShowForcePressPreviewCallback()
242 {
243 }
244
245 void UIScriptController::platformSetDidDismissForcePressPreviewCallback()
246 {
247 }
248
249 void UIScriptController::platformSetWillBeginZoomingCallback()
250 {
251 }
252
253 void UIScriptController::platformSetDidEndZoomingCallback()
254 {
255 }
256
257 void UIScriptController::platformSetDidShowKeyboardCallback()
258 {
259 }
260
261 void UIScriptController::platformSetDidHideKeyboardCallback()
262 {
263 }
264
265 void UIScriptController::platformSetDidEndScrollingCallback()
266 {
267 }
268
269 void UIScriptController::platformClearAllCallbacks()
270 {
271 }
272
273 JSObjectRef UIScriptController::selectionRangeViewRects() const
274 {
275     return nullptr;
276 }
277
278 JSObjectRef UIScriptController::textSelectionCaretRect() const
279 {
280     return nullptr;
281 }
282
283 JSObjectRef UIScriptController::inputViewBounds() const
284 {
285     return nullptr;
286 }
287
288 void UIScriptController::removeAllDynamicDictionaries()
289 {
290 }
291
292 JSRetainPtr<JSStringRef> UIScriptController::scrollingTreeAsText() const
293 {
294     return nullptr;
295 }
296
297 JSObjectRef UIScriptController::propertiesOfLayerWithID(uint64_t layerID) const
298 {
299     return nullptr;
300 }
301
302 void UIScriptController::retrieveSpeakSelectionContent(JSValueRef)
303 {
304 }
305
306 JSRetainPtr<JSStringRef> UIScriptController::accessibilitySpeakSelectionContent() const
307 {
308     return nullptr;
309 }
310
311 void UIScriptController::removeViewFromWindow(JSValueRef)
312 {
313 }
314
315 void UIScriptController::addViewToWindow(JSValueRef)
316 {
317 }
318
319 void UIScriptController::setObscuredInsets(double, double, double, double)
320 {
321 }
322
323 }
324
325 #endif // PLATFORM(IOS)