Add a test to ensure that we dispatch keydown and keyup events when multiple keys...
[WebKit-https.git] / Tools / TestRunnerShared / UIScriptContext / Bindings / UIScriptController.idl
1 /*
2  * Copyright (C) 2015-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 enum DeviceOrientation {
27     "portrait",
28     "portrait-upsidedown",
29     "landscape-left",
30     "landscape-right"
31 };
32
33 enum ModifierKey {
34     "alt",
35     "capsLock",
36     "ctrl",
37     "meta", // Command key on Mac and iOS
38     "shift"
39 };
40
41 interface UIScriptController {
42
43     void doAsyncTask(object callback); // Used to test the harness.
44     void uiScriptComplete(DOMString result);
45
46     void doAfterPresentationUpdate(object callback); // Call the callback after sending a message to the WebProcess and receiving a subsequent update.
47     void doAfterNextStablePresentationUpdate(object callback);
48     void ensurePositionInformationIsUpToDateAt(long x, long y, object callback);
49     void doAfterVisibleContentRectUpdate(object callback);
50
51     void simulateAccessibilitySettingsChangeNotification(object callback);
52
53     // Interaction.
54     // These functions post events asynchronously. The callback is fired when the events have been dispatched, but any
55     // resulting behavior may also be asynchronous. Points are in "global" (WKWebView) coordinates.
56     void touchDownAtPoint(long x, long y, long touchCount, object callback);
57     void liftUpAtPoint(long x, long y, long touchCount, object callback);
58     void singleTapAtPoint(long x, long y, object callback);
59     void singleTapAtPointWithModifiers(long x, long y, object modifierArray, object callback);
60     void doubleTapAtPoint(long x, long y, object callback);
61     void dragFromPointToPoint(long startX, long startY, long endX, long endY, double durationSeconds, object callback);
62
63     void longPressAtPoint(long x, long y, object callback);
64
65     void stylusDownAtPoint(long x, long y, float azimuthAngle, float altitudeAngle, float pressure, object callback);
66     void stylusMoveToPoint(long x, long y, float azimuthAngle, float altitudeAngle, float pressure, object callback);
67     void stylusUpAtPoint(long x, long y, object callback);
68     void stylusTapAtPoint(long x, long y, float azimuthAngle, float altitudeAngle, float pressure, object callback);
69     void stylusTapAtPointWithModifiers(long x, long y, float azimuthAngle, float altitudeAngle, float pressure, object modifierArray, object callback);
70
71     void enterText(DOMString text);
72     void typeCharacterUsingHardwareKeyboard(DOMString character, object callback);
73
74     void keyDown(DOMString character, object modifierArray);
75     void toggleCapsLock(object callback);
76
77     void rawKeyDown(DOMString key);
78     void rawKeyUp(DOMString key);
79
80     // eventsJSON describes a series of user events in JSON form. For the keys, see HIDEventGenerator.mm.
81     // For example, this JSON describes a touch down followed by a touch up (i.e. a single tap).
82     //  {
83     //      "events" : [
84     //          {
85     //              "inputType" : "hand",
86     //              "timeOffset" : 0,
87     //              "coordinateSpace" : "content",
88     //              "touches" : [
89     //                  {
90     //                      "inputType" : "finger",
91     //                      "phase" : "began",
92     //                      "id" : 1,
93     //                      "x" : 100,
94     //                      "y" : 120
95     //                  }
96     //              ]
97     //          },
98     //          // This is a basic force press
99     //          {
100     //              "interpolate" : "linear",
101     //              "timestep" : 0.025,
102     //              "coordinateSpace" : "global",
103     //              "startEvent" : {
104     //                  "inputType" : "hand",
105     //                  "timeOffset" : 0.025,
106     //                  "touches" : [
107     //                      {
108     //                          "inputType" : "finger",
109     //                          "phase" : "began",
110     //                          "id" : 1,
111     //                          "x" : 100,
112     //                          "y" : 120,
113     //                          "pressure" : 0
114     //                      }
115     //                  ]
116     //              },
117     //              "endEvent" : {
118     //                  "inputType" : "hand",
119     //                  "timeOffset" : 3.0,
120     //                  "touches" : [
121     //                      {
122     //                          "inputType" : "finger",
123     //                          "phase" : "stationary",
124     //                          "id" : 1,
125     //                          "x" : 100,
126     //                          "y" : 120,
127     //                          "pressure" : 500
128     //                      }
129     //                  ]
130     //              }
131     //          },
132     //          //This is a basic drag
133     //          {
134     //              "interpolate" : "linear",
135     //              "timestep" : 0.025,
136     //              "coordinateSpace" : "content",
137     //              "startEvent" : {
138     //                  "inputType" : "hand",
139     //                  "timeOffset" : 3.025,
140     //                  "touches" : [
141     //                      {
142     //                          "inputType" : "finger",
143     //                          "phase" : "moved",
144     //                          "id" : 1,
145     //                          "x" : 100,
146     //                          "y" : 120,
147     //                          "pressure" : 0
148     //                      }
149     //                  ]
150     //              },
151     //              "endEvent" : {
152     //                  "inputType" : "hand",
153     //                  "timeOffset" : 4.0,
154     //                  "touches" : [
155     //                      {
156     //                          "inputType" : "finger",
157     //                          "phase" : "moved",
158     //                          "id" : 1,
159     //                          "x" : 20,
160     //                          "y" : 40,
161     //                          "pressure" : 0
162     //                      }
163     //                  ]
164     //              }
165     //          },
166     //          //ending lift
167     //          {
168     //              "inputType" : "hand",
169     //              "timeOffset" : 4.025, // seconds relative to the first event
170     //              "coordinateSpace" : "content",
171     //              "touches" : [
172     //                  {
173     //                      "inputType" : "finger",
174     //                      "phase" : "ended",
175     //                      "id" : 1,
176     //                      "x" : 20,
177     //                      "y" : 40
178     //                  }
179     //              ]
180     //          },
181     //      ]
182     //  }
183     void sendEventStream(DOMString eventsJSON, object callback);
184
185     void beginBackSwipe(object callback);
186     void completeBackSwipe(object callback);
187
188     void playBackEventStream(DOMString eventStream, object callback);
189
190     // Equivalent of pressing the Done button in the form accessory bar.
191     void dismissFormAccessoryView();
192
193     void dismissFilePicker(object callback);
194
195     readonly attribute DOMString textContentType;
196
197     // Form control handling
198     attribute object didStartFormControlInteractionCallback;
199     attribute object didEndFormControlInteractionCallback;
200
201     // Force press preview handling
202     attribute object didShowForcePressPreviewCallback;
203     attribute object didDismissForcePressPreviewCallback;
204
205     // <select> picker
206     void selectFormAccessoryPickerRow(long rowIndex);
207     readonly attribute DOMString selectFormPopoverTitle;
208     readonly attribute DOMString formInputLabel;
209
210     void setTimePickerValue(long hour, long minute);
211
212     // Share sheet
213     void setShareSheetCompletesImmediatelyWithResolution(boolean resolved);
214
215     // <datalist>
216     readonly attribute boolean isShowingDataListSuggestions;
217
218     void keyboardAccessoryBarNext();
219     void keyboardAccessoryBarPrevious();
220
221     void applyAutocorrection(DOMString newString, DOMString oldString, object callback);
222
223     // Returned object is a dictionary with the passed in string as a key for returned object
224     object contentsOfUserInterfaceItem(DOMString interfaceItem);
225
226     // These callbacks also work for the form accessory views.
227     attribute object didShowKeyboardCallback;
228     attribute object didHideKeyboardCallback;
229     readonly attribute boolean isShowingKeyboard;
230     readonly attribute boolean hasInputSession;
231
232     attribute object didShowMenuCallback;
233     attribute object didHideMenuCallback;
234     readonly attribute boolean isDismissingMenu;
235     readonly attribute boolean isShowingMenu;
236     readonly attribute object menuRect;
237     object rectForMenuAction(DOMString action);
238
239     readonly attribute boolean isShowingPopover;
240     attribute object willPresentPopoverCallback;
241     attribute object didDismissPopoverCallback;
242
243     attribute object willBeginZoomingCallback;
244     attribute object didEndZoomingCallback;
245
246     attribute object willCreateNewPageCallback;
247
248     void zoomToScale(double scale, object callback);
249
250     void setViewScale(double scale);
251     void setMinimumEffectiveWidth(double effectiveWidth);
252     void setAllowsViewportShrinkToFit(boolean allows);
253
254     void becomeFirstResponder();
255     void resignFirstResponder();
256     readonly attribute boolean isPresentingModally;
257
258     readonly attribute double contentOffsetX;
259     readonly attribute double contentOffsetY;
260
261     attribute boolean scrollUpdatesDisabled; // Turns off notifications back to the web process after scrolls (used for testing scrolling tree).
262
263     void scrollToOffset(long x, long y); // Initiate an animated scroll in the UI process.
264     attribute object didEndScrollingCallback;
265
266     void immediateScrollToOffset(long x, long y); // Set the scroll position in the UI process without animation.
267     void immediateZoomToScale(double scale); // Set the zoom scale in the UI process without animation.
268
269     // Find the scroller for the given point in content ("absolute") coordinates, and do an immediate scroll.
270     void immediateScrollElementAtContentPointToOffset(long x, long y, long xOffset, long yOffset);
271
272     // View state
273     readonly attribute double zoomScale;
274     readonly attribute double minimumZoomScale;
275     readonly attribute double maximumZoomScale;
276
277     // Overides the "in stable state" behavior of WKWebView (only applies to iOS)
278     // When false, content rect updates to the web process have inStableState=false, as if a scroll or zoom were in progress.
279     attribute boolean? stableStateOverride;
280
281     readonly attribute object contentVisibleRect; // Returned object has 'left', 'top', 'width', 'height' properties.
282
283     readonly attribute object textSelectionRangeRects; // An array of objects with 'left', 'top', 'width', and 'height' properties.
284     readonly attribute object textSelectionCaretRect; // An object with 'left', 'top', 'width', 'height' properties.
285     readonly attribute object selectionStartGrabberViewRect;
286     readonly attribute object selectionEndGrabberViewRect;
287     readonly attribute object selectionCaretViewRect;
288     readonly attribute object selectionRangeViewRects;
289     readonly attribute object calendarType;
290     void setDefaultCalendarType(DOMString calendarIdentifier);
291     readonly attribute object inputViewBounds;
292
293     void setKeyboardInputModeIdentifier(DOMString identifier);
294
295     void replaceTextAtRange(DOMString text, long location, long length);
296     void removeAllDynamicDictionaries();
297
298     readonly attribute DOMString scrollingTreeAsText;
299
300     object propertiesOfLayerWithID(unsigned long long layerID);
301
302     void retrieveSpeakSelectionContent(object callback);
303     readonly attribute DOMString accessibilitySpeakSelectionContent;
304     
305     void simulateRotation(DeviceOrientation orientation, object callback);
306     void simulateRotationLikeSafari(DeviceOrientation orientation, object callback);
307
308     void findString(DOMString string, unsigned long options, unsigned long maxCount);
309
310     // Unparent and parent the web view, simulating, for example, tab switching.
311     void removeViewFromWindow(object callback);
312     void addViewToWindow(object callback);
313
314     void overridePreference(DOMString preference, DOMString value);
315
316     void setSafeAreaInsets(double top, double right, double bottom, double left);
317
318     void firstResponderSuppressionForWebView(boolean shouldSuppress);
319     void makeWindowContentViewFirstResponder();
320     readonly attribute boolean isWindowContentViewFirstResponder;
321
322     void setHardwareKeyboardAttached(boolean attached);
323
324     object attachmentInfo(DOMString attachmentIdentifier);
325
326     // Editing
327     void drawSquareInEditableImage();
328     readonly attribute long numberOfStrokesInEditableImage;
329     readonly attribute DOMString lastUndoLabel;
330     readonly attribute DOMString firstRedoLabel;
331 };