#import <DOM/EventTarget.idl>
#import <HTML/HTMLElement.idl>
#import <Internals/InternalAnimationTimeline.idl>

[Exposed=Nobody]
interface Internals {

    undefined signalTextTestIsDone(DOMString text);
    undefined setTestTimeout(double milliseconds);

    undefined gc();
    object hitTest(double x, double y);

    const unsigned short MOD_NONE = 0;
    const unsigned short MOD_ALT = 1;
    const unsigned short MOD_CTRL = 2;
    const unsigned short MOD_SHIFT = 4;
    const unsigned short MOD_SUPER = 8;
    const unsigned short MOD_KEYPAD = 16;

    undefined sendText(HTMLElement target, DOMString text, optional unsigned short modifiers = 0);
    undefined sendKey(HTMLElement target, DOMString keyName, optional unsigned short modifiers = 0);
    undefined commitText();

    undefined click(double x, double y);
    undefined doubleclick(double x, double y);
    undefined middleClick(double x, double y);
    undefined mouseDown(double x, double y);
    undefined movePointerTo(double x, double y);
    undefined wheel(double x, double y, double deltaX, double deltaY);

    boolean dispatchUserActivatedEvent(EventTarget target, Event event);
    undefined spoofCurrentURL(USVString url);

    InternalAnimationTimeline createInternalAnimationTimeline();

    undefined simulateDragStart(double x, double y, DOMString mimeType, DOMString contents);
    undefined simulateDragMove(double x, double y);
    undefined simulateDrop(double x, double y);

    undefined enableCookiesOnFileDomains();
    undefined expireCookiesWithTimeOffset(long long seconds);

    DOMString getComputedRole(Element element);
    DOMString getComputedLabel(Element element);
    unsigned short getEchoServerPort();

    undefined setBrowserZoom(double factor);

    readonly attribute boolean headless;
};
