Allow WebKit clients to specify a minimum effective width for layout.
[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_FAMILY)
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::resignFirstResponder()
86 {
87 }
88
89 void UIScriptController::setViewScale(double)
90 {
91 }
92
93 void UIScriptController::setMinimumEffectiveWidth(double)
94 {
95 }
96
97 void UIScriptController::simulateAccessibilitySettingsChangeNotification(JSValueRef)
98 {
99 }
100
101 double UIScriptController::zoomScale() const
102 {
103     return gWebScrollView.zoomScale;
104 }
105
106 void UIScriptController::touchDownAtPoint(long x, long y, long touchCount, JSValueRef callback)
107 {
108 }
109
110 void UIScriptController::liftUpAtPoint(long x, long y, long touchCount, JSValueRef callback)
111 {
112 }
113
114 void UIScriptController::singleTapAtPoint(long x, long y, JSValueRef callback)
115 {
116 }
117
118 void UIScriptController::doubleTapAtPoint(long x, long y, JSValueRef callback)
119 {
120 }
121
122 void UIScriptController::dragFromPointToPoint(long startX, long startY, long endX, long endY, double durationSeconds, JSValueRef callback)
123 {
124 }
125     
126 void UIScriptController::longPressAtPoint(long x, long y, JSValueRef)
127 {
128 }
129
130 void UIScriptController::stylusDownAtPoint(long x, long y, float azimuthAngle, float altitudeAngle, float pressure, JSValueRef callback)
131 {
132 }
133
134 void UIScriptController::stylusMoveToPoint(long x, long y, float azimuthAngle, float altitudeAngle, float pressure, JSValueRef callback)
135 {
136 }
137
138 void UIScriptController::stylusUpAtPoint(long x, long y, JSValueRef callback)
139 {
140 }
141
142 void UIScriptController::stylusTapAtPoint(long x, long y, float azimuthAngle, float altitudeAngle, float pressure, JSValueRef callback)
143 {
144 }
145
146 void UIScriptController::sendEventStream(JSStringRef eventsJSON, JSValueRef callback)
147 {
148 }
149
150 void UIScriptController::enterText(JSStringRef)
151 {
152 }
153
154 void UIScriptController::typeCharacterUsingHardwareKeyboard(JSStringRef character, JSValueRef callback)
155 {
156 }
157
158 void UIScriptController::keyDown(JSStringRef, JSValueRef)
159 {
160 }
161
162 void UIScriptController::dismissFormAccessoryView()
163 {
164 }
165
166 void UIScriptController::setTimePickerValue(long, long)
167 {
168 }
169
170 void UIScriptController::setShareSheetCompletesImmediatelyWithResolution(bool)
171 {
172 }
173
174 void UIScriptController::selectFormAccessoryPickerRow(long rowIndex)
175 {
176 }
177
178 JSRetainPtr<JSStringRef> UIScriptController::textContentType() const
179 {
180     return nullptr;
181 }
182
183 JSRetainPtr<JSStringRef> UIScriptController::selectFormPopoverTitle() const
184 {
185     return nullptr;
186 }
187
188 JSRetainPtr<JSStringRef> UIScriptController::formInputLabel() const
189 {
190     return nullptr;
191 }
192     
193 JSObjectRef UIScriptController::contentsOfUserInterfaceItem(JSStringRef interfaceItem) const
194 {
195     return nullptr;
196 }
197
198 static CGPoint contentOffsetBoundedInValidRange(UIScrollView *scrollView, CGPoint contentOffset)
199 {
200     UIEdgeInsets contentInsets = scrollView.contentInset;
201     CGSize contentSize = scrollView.contentSize;
202     CGSize scrollViewSize = scrollView.bounds.size;
203
204     CGFloat maxHorizontalOffset = contentSize.width + contentInsets.right - scrollViewSize.width;
205     contentOffset.x = std::min(maxHorizontalOffset, contentOffset.x);
206     contentOffset.x = std::max(-contentInsets.left, contentOffset.x);
207
208     CGFloat maxVerticalOffset = contentSize.height + contentInsets.bottom - scrollViewSize.height;
209     contentOffset.y = std::min(maxVerticalOffset, contentOffset.y);
210     contentOffset.y = std::max(-contentInsets.top, contentOffset.y);
211     return contentOffset;
212 }
213
214 void UIScriptController::scrollToOffset(long x, long y)
215 {
216     [gWebScrollView setContentOffset:contentOffsetBoundedInValidRange(gWebScrollView, CGPointMake(x, y)) animated:YES];
217 }
218
219 void UIScriptController::immediateScrollToOffset(long x, long y)
220 {
221     [gWebScrollView setContentOffset:contentOffsetBoundedInValidRange(gWebScrollView, CGPointMake(x, y)) animated:NO];
222 }
223
224 void UIScriptController::immediateZoomToScale(double scale)
225 {
226     [gWebScrollView setZoomScale:scale animated:NO];
227 }
228
229 void UIScriptController::keyboardAccessoryBarNext()
230 {
231 }
232
233 void UIScriptController::keyboardAccessoryBarPrevious()
234 {
235 }
236
237 void UIScriptController::applyAutocorrection(JSStringRef, JSStringRef, JSValueRef)
238 {
239 }
240
241 bool UIScriptController::isShowingKeyboard() const
242 {
243     return false;
244 }
245
246 double UIScriptController::minimumZoomScale() const
247 {
248     return gWebScrollView.minimumZoomScale;
249 }
250
251 double UIScriptController::maximumZoomScale() const
252 {
253     return gWebScrollView.maximumZoomScale;
254 }
255
256 std::optional<bool> UIScriptController::stableStateOverride() const
257 {
258     return std::nullopt;
259 }
260
261 void UIScriptController::setStableStateOverride(std::optional<bool>)
262 {
263 }
264
265 JSObjectRef UIScriptController::contentVisibleRect() const
266 {
267     CGRect contentVisibleRect = [gWebBrowserView documentVisibleRect];
268     WebCore::FloatRect rect(contentVisibleRect.origin.x, contentVisibleRect.origin.y, contentVisibleRect.size.width, contentVisibleRect.size.height);
269     return m_context->objectFromRect(rect);
270 }
271
272 void UIScriptController::platformSetDidStartFormControlInteractionCallback()
273 {
274 }
275
276 void UIScriptController::platformSetDidEndFormControlInteractionCallback()
277 {
278 }
279     
280 void UIScriptController::platformSetDidShowForcePressPreviewCallback()
281 {
282 }
283
284 void UIScriptController::platformSetDidDismissForcePressPreviewCallback()
285 {
286 }
287
288 void UIScriptController::platformSetWillBeginZoomingCallback()
289 {
290 }
291
292 void UIScriptController::platformSetDidEndZoomingCallback()
293 {
294 }
295
296 void UIScriptController::platformSetDidShowKeyboardCallback()
297 {
298 }
299
300 void UIScriptController::platformSetDidHideKeyboardCallback()
301 {
302 }
303
304 void UIScriptController::platformSetDidEndScrollingCallback()
305 {
306 }
307
308 void UIScriptController::platformClearAllCallbacks()
309 {
310 }
311
312 JSObjectRef UIScriptController::textSelectionRangeRects() const
313 {
314     return nullptr;
315 }
316
317 JSObjectRef UIScriptController::textSelectionCaretRect() const
318 {
319     return nullptr;
320 }
321
322 JSObjectRef UIScriptController::inputViewBounds() const
323 {
324     return nullptr;
325 }
326
327 void UIScriptController::removeAllDynamicDictionaries()
328 {
329 }
330
331 JSRetainPtr<JSStringRef> UIScriptController::scrollingTreeAsText() const
332 {
333     return nullptr;
334 }
335
336 JSObjectRef UIScriptController::propertiesOfLayerWithID(uint64_t layerID) const
337 {
338     return nullptr;
339 }
340
341 void UIScriptController::retrieveSpeakSelectionContent(JSValueRef)
342 {
343 }
344
345 JSRetainPtr<JSStringRef> UIScriptController::accessibilitySpeakSelectionContent() const
346 {
347     return nullptr;
348 }
349
350 void UIScriptController::simulateRotation(DeviceOrientation*, JSValueRef)
351 {
352 }
353
354 void UIScriptController::simulateRotationLikeSafari(DeviceOrientation*, JSValueRef)
355 {
356 }
357
358 void UIScriptController::findString(JSStringRef, unsigned long options, unsigned long maxCount)
359 {
360 }
361
362 void UIScriptController::removeViewFromWindow(JSValueRef)
363 {
364 }
365
366 void UIScriptController::addViewToWindow(JSValueRef)
367 {
368 }
369
370 void UIScriptController::setSafeAreaInsets(double, double, double, double)
371 {
372 }
373
374 void UIScriptController::beginBackSwipe(JSValueRef callback)
375 {
376 }
377
378 void UIScriptController::completeBackSwipe(JSValueRef callback)
379 {
380 }
381
382 JSObjectRef UIScriptController::selectionStartGrabberViewRect() const
383 {
384     return nullptr;
385 }
386
387 JSObjectRef UIScriptController::selectionEndGrabberViewRect() const
388 {
389     return nullptr;
390 }
391
392 JSObjectRef UIScriptController::selectionCaretViewRect() const
393 {
394     return nullptr;
395 }
396
397 JSObjectRef UIScriptController::selectionRangeViewRects() const
398 {
399     return nullptr;
400 }
401
402 bool UIScriptController::isShowingDataListSuggestions() const
403 {
404     return false;
405 }
406
407 JSObjectRef UIScriptController::calendarType() const
408 {
409     return nullptr;
410 }
411
412 void UIScriptController::setDefaultCalendarType(JSStringRef calendarIdentifier)
413 {
414 }
415
416 void UIScriptController::overridePreference(JSStringRef, JSStringRef)
417 {
418 }
419
420 void UIScriptController::drawSquareInEditableImage()
421 {
422 }
423
424 long UIScriptController::numberOfStrokesInEditableImage()
425 {
426     return 0;
427 }
428
429 void UIScriptController::toggleCapsLock(JSValueRef callback)
430 {
431     doAsyncTask(callback);
432 }
433
434 JSObjectRef UIScriptController::attachmentInfo(JSStringRef)
435 {
436     return nullptr;
437 }
438
439 }
440
441 #endif // PLATFORM(IOS_FAMILY)