/* * Copyright (C) 2015-2018 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. */ enum DeviceOrientation { "portrait", "portrait-upsidedown", "landscape-left", "landscape-right" }; enum ModifierKey { "alt", "capsLock", "ctrl", "meta", // Command key on Mac and iOS "shift" }; dictionary ScrollToOptions { boolean unconstrained = false; }; interface UIScriptController { undefined doAsyncTask(object callback); // Used to test the harness. undefined uiScriptComplete(DOMString result); undefined doAfterPresentationUpdate(object callback); // Call the callback after sending a message to the WebProcess and receiving a subsequent update. undefined doAfterNextStablePresentationUpdate(object callback); undefined ensurePositionInformationIsUpToDateAt(long x, long y, object callback); undefined doAfterVisibleContentRectUpdate(object callback); undefined doAfterDoubleTapDelay(object callback); undefined simulateAccessibilitySettingsChangeNotification(object callback); // Interaction. // These functions post events asynchronously. The callback is fired when the events have been dispatched, but any // resulting behavior may also be asynchronous. Points are in "global" (WKWebView) coordinates. undefined touchDownAtPoint(long x, long y, long touchCount, object callback); undefined liftUpAtPoint(long x, long y, long touchCount, object callback); undefined singleTapAtPoint(long x, long y, object callback); undefined singleTapAtPointWithModifiers(long x, long y, object modifierArray, object callback); undefined twoFingerSingleTapAtPoint(long x, long y, object callback); undefined doubleTapAtPoint(long x, long y, float delay, object callback); undefined dragFromPointToPoint(long startX, long startY, long endX, long endY, double durationSeconds, object callback); undefined activateAtPoint(long x, long y, object callback); undefined longPressAtPoint(long x, long y, object callback); undefined stylusDownAtPoint(long x, long y, float azimuthAngle, float altitudeAngle, float pressure, object callback); undefined stylusMoveToPoint(long x, long y, float azimuthAngle, float altitudeAngle, float pressure, object callback); undefined stylusUpAtPoint(long x, long y, object callback); undefined stylusTapAtPoint(long x, long y, float azimuthAngle, float altitudeAngle, float pressure, object callback); undefined stylusTapAtPointWithModifiers(long x, long y, float azimuthAngle, float altitudeAngle, float pressure, object modifierArray, object callback); undefined enterText(DOMString text); undefined typeCharacterUsingHardwareKeyboard(DOMString character, object callback); undefined keyDown(DOMString character, object modifierArray); undefined toggleCapsLock(object callback); undefined setContinuousSpellCheckingEnabled(boolean enabled); undefined setSpellCheckerResults(object results); readonly attribute boolean keyboardIsAutomaticallyShifted; undefined rawKeyDown(DOMString key); undefined rawKeyUp(DOMString key); readonly attribute boolean isAnimatingDragCancel; readonly attribute DOMString selectionCaretBackgroundColor; readonly attribute object tapHighlightViewRect; // eventsJSON describes a series of user events in JSON form. For the keys, see HIDEventGenerator.mm. // For example, this JSON describes a touch down followed by a touch up (i.e. a single tap). // { // "events" : [ // { // "inputType" : "hand", // "timeOffset" : 0, // "coordinateSpace" : "content", // "touches" : [ // { // "inputType" : "finger", // "phase" : "began", // "id" : 1, // "x" : 100, // "y" : 120 // } // ] // }, // // This is a basic force press // { // "interpolate" : "linear", // "timestep" : 0.025, // "coordinateSpace" : "global", // "startEvent" : { // "inputType" : "hand", // "timeOffset" : 0.025, // "touches" : [ // { // "inputType" : "finger", // "phase" : "began", // "id" : 1, // "x" : 100, // "y" : 120, // "pressure" : 0 // } // ] // }, // "endEvent" : { // "inputType" : "hand", // "timeOffset" : 3.0, // "touches" : [ // { // "inputType" : "finger", // "phase" : "stationary", // "id" : 1, // "x" : 100, // "y" : 120, // "pressure" : 500 // } // ] // } // }, // //This is a basic drag // { // "interpolate" : "linear", // "timestep" : 0.025, // "coordinateSpace" : "content", // "startEvent" : { // "inputType" : "hand", // "timeOffset" : 3.025, // "touches" : [ // { // "inputType" : "finger", // "phase" : "moved", // "id" : 1, // "x" : 100, // "y" : 120, // "pressure" : 0 // } // ] // }, // "endEvent" : { // "inputType" : "hand", // "timeOffset" : 4.0, // "touches" : [ // { // "inputType" : "finger", // "phase" : "moved", // "id" : 1, // "x" : 20, // "y" : 40, // "pressure" : 0 // } // ] // } // }, // //ending lift // { // "inputType" : "hand", // "timeOffset" : 4.025, // seconds relative to the first event // "coordinateSpace" : "content", // "touches" : [ // { // "inputType" : "finger", // "phase" : "ended", // "id" : 1, // "x" : 20, // "y" : 40 // } // ] // }, // ] // } undefined sendEventStream(DOMString eventsJSON, object callback); undefined beginBackSwipe(object callback); undefined completeBackSwipe(object callback); undefined playBackEventStream(DOMString eventStream, object callback); // Equivalent of pressing the Done button in the form accessory bar. undefined dismissFormAccessoryView(); readonly attribute object filePickerAcceptedTypeIdentifiers; undefined dismissFilePicker(object callback); readonly attribute DOMString textContentType; // Form control handling attribute object didStartFormControlInteractionCallback; attribute object didEndFormControlInteractionCallback; // Pop Over preview handling attribute object didShowContextMenuCallback; attribute object didDismissContextMenuCallback; readonly attribute boolean isShowingContextMenu; // undefined setSelectedColorForColorPicker(double red, double green, double blue); undefined keyboardAccessoryBarNext(); undefined keyboardAccessoryBarPrevious(); undefined applyAutocorrection(DOMString newString, DOMString oldString, object callback); // Returned object is a dictionary with the passed in string as a key for returned object object contentsOfUserInterfaceItem(DOMString interfaceItem); // These callbacks also work for the form accessory views. attribute object didShowKeyboardCallback; attribute object didHideKeyboardCallback; readonly attribute boolean isShowingKeyboard; readonly attribute boolean hasInputSession; attribute object willStartInputSessionCallback; attribute double suppressSoftwareKeyboard; attribute boolean windowIsKey; attribute object didShowMenuCallback; attribute object didHideMenuCallback; readonly attribute boolean isDismissingMenu; readonly attribute boolean isShowingMenu; readonly attribute object menuRect; readonly attribute object contextMenuRect; object rectForMenuAction(DOMString action); undefined chooseMenuAction(DOMString action, object callback); undefined dismissMenu(); readonly attribute boolean isShowingPopover; attribute object willPresentPopoverCallback; attribute object didDismissPopoverCallback; attribute object willBeginZoomingCallback; attribute object didEndZoomingCallback; attribute object willCreateNewPageCallback; undefined zoomToScale(double scale, object callback); undefined setViewScale(double scale); undefined setMinimumEffectiveWidth(double effectiveWidth); undefined setAllowsViewportShrinkToFit(boolean allows); undefined setScrollViewKeyboardAvoidanceEnabled(boolean enabled); undefined becomeFirstResponder(); undefined resignFirstResponder(); readonly attribute boolean isPresentingModally; undefined copyText(DOMString text); undefined paste(); readonly attribute double contentOffsetX; readonly attribute double contentOffsetY; attribute boolean scrollUpdatesDisabled; // Turns off notifications back to the web process after scrolls (used for testing scrolling tree). undefined scrollToOffset(long x, long y, ScrollToOptions options); // Initiate an animated scroll in the UI process. attribute object didEndScrollingCallback; undefined immediateScrollToOffset(long x, long y, ScrollToOptions options); // Set the scroll position in the UI process without animation. undefined immediateZoomToScale(double scale); // Set the zoom scale in the UI process without animation. // Find the scroller for the given point in content ("absolute") coordinates, and do an immediate scroll. undefined immediateScrollElementAtContentPointToOffset(long x, long y, long xOffset, long yOffset); // View state readonly attribute double zoomScale; readonly attribute double minimumZoomScale; readonly attribute double maximumZoomScale; // Overides the "in stable state" behavior of WKWebView (only applies to iOS) // When false, content rect updates to the web process have inStableState=false, as if a scroll or zoom were in progress. attribute boolean? stableStateOverride; readonly attribute object contentVisibleRect; // Returned object has 'left', 'top', 'width', 'height' properties. readonly attribute object textSelectionRangeRects; // An array of objects with 'left', 'top', 'width', and 'height' properties. readonly attribute object textSelectionCaretRect; // An object with 'left', 'top', 'width', 'height' properties. readonly attribute object selectionStartGrabberViewRect; readonly attribute object selectionEndGrabberViewRect; readonly attribute object selectionCaretViewRect; readonly attribute object selectionRangeViewRects; readonly attribute object calendarType; undefined setDefaultCalendarType(DOMString calendarIdentifier, DOMString localeIdentifier); readonly attribute object inputViewBounds; undefined setKeyboardInputModeIdentifier(DOMString identifier); undefined replaceTextAtRange(DOMString text, long location, long length); readonly attribute DOMString scrollingTreeAsText; readonly attribute DOMString uiViewTreeAsText; boolean mayContainEditableElementsInRect(unsigned long x, unsigned long y, unsigned long width, unsigned long height); object propertiesOfLayerWithID(unsigned long long layerID); undefined retrieveSpeakSelectionContent(object callback); readonly attribute DOMString accessibilitySpeakSelectionContent; undefined simulateRotation(DeviceOrientation orientation, object callback); undefined simulateRotationLikeSafari(DeviceOrientation orientation, object callback); undefined findString(DOMString string, unsigned long options, unsigned long maxCount); // Unparent and parent the web view, simulating, for example, tab switching. undefined removeViewFromWindow(object callback); undefined addViewToWindow(object callback); undefined installTapGestureOnWindow(object callback); undefined overridePreference(DOMString preference, DOMString value); undefined setSafeAreaInsets(double top, double right, double bottom, double left); undefined firstResponderSuppressionForWebView(boolean shouldSuppress); undefined makeWindowContentViewFirstResponder(); readonly attribute boolean isWindowContentViewFirstResponder; readonly attribute boolean isWebContentFirstResponder; undefined setHardwareKeyboardAttached(boolean attached); undefined setWebViewEditable(boolean editable); object attachmentInfo(DOMString attachmentIdentifier); undefined insertAttachmentForFilePath(DOMString filePath, DOMString contentType, object callback); attribute object didShowContactPickerCallback; attribute object didHideContactPickerCallback; undefined dismissContactPickerWithContacts(object contacts); readonly attribute boolean isShowingContactPicker; readonly attribute DOMString lastUndoLabel; readonly attribute DOMString firstRedoLabel; };