/*
 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
 * Copyright (C) 2011 Google 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 COMPUTER, INC. ``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 COMPUTER, INC. OR
 * 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.
 */

[
    CheckSecurity,
    JSCustomDefineOwnProperty,
    CustomDeleteProperty,
    CustomGetOwnPropertySlot,
    CustomEnumerateProperty,
    JSCustomMarkFunction,
    JSCustomToNativeObject,
    CustomPutFunction,
    EventTarget,
    ExtendsDOMGlobalObject,
    JSGenerateToNativeObject,
    ReplaceableConstructor,
    JSLegacyParent=JSDOMWindowBase,
    V8CustomToJSObject,
    V8NoWrapperCache,
    V8CustomIndexedGetter,
    InterfaceName=Window
] interface DOMWindow {
    // DOM Level 0
    [Replaceable] readonly attribute Screen screen;
    [Replaceable, DoNotCheckSecurityOnGetter] readonly attribute History history;
    [Replaceable] readonly attribute BarInfo locationbar;
    [Replaceable] readonly attribute BarInfo menubar;
    [Replaceable] readonly attribute BarInfo personalbar;
    [Replaceable] readonly attribute BarInfo scrollbars;
    [Replaceable] readonly attribute BarInfo statusbar;
    [Replaceable] readonly attribute BarInfo toolbar;
    [Replaceable] readonly attribute Navigator navigator;
    [Replaceable] readonly attribute Navigator clientInformation;
    readonly attribute Crypto crypto;
#if !defined(LANGUAGE_CPP) || !LANGUAGE_CPP
    attribute [DoNotCheckSecurity, CustomSetter, V8Unforgeable] Location location;
#endif
    [Replaceable, CustomGetter, V8CustomSetter] readonly attribute Event event;

    DOMSelection getSelection();

    readonly attribute [CheckSecurityForNode] Element frameElement;

    [DoNotCheckSecurity, CallWith=ScriptExecutionContext] void focus();
    [DoNotCheckSecurity] void blur();
    [DoNotCheckSecurity, CallWith=ScriptExecutionContext] void close();

    void print();
    void stop();

    [Custom] DOMWindow open(in DOMString url,
                            in DOMString name,
                            in [Optional] DOMString options);

    [Custom] any showModalDialog(in DOMString url,
                                       in [Optional] any dialogArgs,
                                       in [Optional] DOMString featureArgs);

    void alert(in [Optional=DefaultIsUndefined] DOMString message);
    boolean confirm(in [Optional=DefaultIsUndefined] DOMString message);
    [TreatReturnedNullStringAs=Null] DOMString prompt(in [Optional=DefaultIsUndefined] DOMString message,
                                                in [TreatNullAs=NullString, TreatUndefinedAs=NullString,Optional=DefaultIsUndefined] DOMString defaultValue);

    boolean find(in [Optional=DefaultIsUndefined] DOMString string,
                 in [Optional=DefaultIsUndefined] boolean caseSensitive,
                 in [Optional=DefaultIsUndefined] boolean backwards,
                 in [Optional=DefaultIsUndefined] boolean wrap,
                 in [Optional=DefaultIsUndefined] boolean wholeWord,
                 in [Optional=DefaultIsUndefined] boolean searchInFrames,
                 in [Optional=DefaultIsUndefined] boolean showDialog);

    [Replaceable] readonly attribute  boolean offscreenBuffering;

    [Replaceable] readonly attribute long outerHeight;
    [Replaceable] readonly attribute long outerWidth;
    [Replaceable] readonly attribute long innerHeight;
    [Replaceable] readonly attribute long innerWidth;
    [Replaceable] readonly attribute long screenX;
    [Replaceable] readonly attribute long screenY;
    [Replaceable] readonly attribute long screenLeft;
    [Replaceable] readonly attribute long screenTop;
    [Replaceable] readonly attribute long scrollX;
    [Replaceable] readonly attribute long scrollY;
    readonly attribute long pageXOffset;
    readonly attribute long pageYOffset;

    void scrollBy(in [Optional=DefaultIsUndefined] long x, in [Optional=DefaultIsUndefined] long y);
    void scrollTo(in [Optional=DefaultIsUndefined] long x, in [Optional=DefaultIsUndefined] long y);
    void scroll(in [Optional=DefaultIsUndefined] long x, in [Optional=DefaultIsUndefined] long y);
    void moveBy(in [Optional=DefaultIsUndefined] float x, in [Optional=DefaultIsUndefined] float y); // FIXME: this should take longs not floats.
    void moveTo(in [Optional=DefaultIsUndefined] float x, in [Optional=DefaultIsUndefined] float y); // FIXME: this should take longs not floats.
    void resizeBy(in [Optional=DefaultIsUndefined] float x, in [Optional=DefaultIsUndefined] float y); // FIXME: this should take longs not floats.
    void resizeTo(in [Optional=DefaultIsUndefined] float width, in [Optional=DefaultIsUndefined] float height); // FIXME: this should take longs not floats.

    readonly attribute [DoNotCheckSecurity] boolean closed;

    [Replaceable, DoNotCheckSecurityOnGetter] readonly attribute unsigned long length;

    attribute DOMString name;

    attribute DOMString status;
    attribute DOMString defaultStatus;
#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
    // This attribute is an alias of defaultStatus and is necessary for legacy uses.
    attribute DOMString defaultstatus;
#endif

    // Self referential attributes
    [Replaceable, DoNotCheckSecurityOnGetter] readonly attribute DOMWindow self;
    [DoNotCheckSecurity, V8Unforgeable] readonly attribute DOMWindow window;
    [Replaceable, DoNotCheckSecurityOnGetter] readonly attribute  DOMWindow frames;

    [Replaceable, DoNotCheckSecurityOnGetter, V8CustomSetter] readonly attribute DOMWindow opener;
    [Replaceable, DoNotCheckSecurityOnGetter] readonly attribute DOMWindow parent;
    [DoNotCheckSecurityOnGetter, V8Unforgeable] readonly attribute DOMWindow top;

    // DOM Level 2 AbstractView Interface
    readonly attribute Document document;

    // CSSOM View Module
    MediaQueryList matchMedia(in DOMString query);

    // styleMedia has been removed from the CSSOM View specification.
    readonly attribute StyleMedia styleMedia;

    // DOM Level 2 Style Interface
    CSSStyleDeclaration getComputedStyle(in [Optional=DefaultIsUndefined] Element element,
                                         in [TreatNullAs=NullString, TreatUndefinedAs=NullString,Optional=DefaultIsUndefined] DOMString pseudoElement);

    // WebKit extensions
#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
    CSSRuleList getMatchedCSSRules(in [Optional=DefaultIsUndefined] Element element,
                                   in [TreatNullAs=NullString, TreatUndefinedAs=NullString,Optional=DefaultIsUndefined] DOMString pseudoElement);
#endif

    [Replaceable] readonly attribute double devicePixelRatio;
    
    WebKitPoint webkitConvertPointFromPageToNode(in [Optional=DefaultIsUndefined] Node node, 
                                                 in [Optional=DefaultIsUndefined] WebKitPoint p);
    WebKitPoint webkitConvertPointFromNodeToPage(in [Optional=DefaultIsUndefined] Node node, 
                                                 in [Optional=DefaultIsUndefined] WebKitPoint p);

    readonly attribute [V8EnabledAtRuntime] DOMApplicationCache applicationCache;

    readonly attribute [V8EnabledAtRuntime] Storage sessionStorage
        getter raises(DOMException);
    readonly attribute [V8EnabledAtRuntime] Storage localStorage
        getter raises(DOMException);

#if defined(ENABLE_ORIENTATION_EVENTS) && ENABLE_ORIENTATION_EVENTS
    // This is the interface orientation in degrees. Some examples are:
    //  0 is straight up; -90 is when the device is rotated 90 clockwise;
    //  90 is when rotated counter clockwise.
    readonly attribute long orientation;
#endif

    [Replaceable] readonly attribute Console console;

    // cross-document messaging
#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
    [DoNotCheckSecurity, Custom] void postMessage(in SerializedScriptValue message, in DOMString targetOrigin, in [Optional] Array messagePorts)
        raises(DOMException);
#else
    // There's no good way to expose an array via the ObjC bindings, so for now just allow passing in a single port.
    [DoNotCheckSecurity, Custom] void postMessage(in SerializedScriptValue message, in [Optional] MessagePort messagePort, in DOMString targetOrigin)
        raises(DOMException);
#endif

#if defined(ENABLE_WEB_TIMING) && ENABLE_WEB_TIMING
    [Replaceable] readonly attribute Performance performance;
#endif

    // Timers
    [Custom] long setTimeout(in any handler, in [Optional=DefaultIsUndefined] long timeout);
    void clearTimeout(in [Optional=DefaultIsUndefined] long handle);
    [Custom] long setInterval(in any handler, in [Optional=DefaultIsUndefined] long timeout);
    void clearInterval(in [Optional=DefaultIsUndefined] long handle);

#if defined(ENABLE_REQUEST_ANIMATION_FRAME) && ENABLE_REQUEST_ANIMATION_FRAME
    [V8MeasureAs=UnprefixedRequestAnimationFrame] long requestAnimationFrame(in [Callback] RequestAnimationFrameCallback callback);
    void cancelAnimationFrame(in long id);
    [V8MeasureAs=PrefixedRequestAnimationFrame] long webkitRequestAnimationFrame(in [Callback] RequestAnimationFrameCallback callback);
    [ImplementedAs=cancelAnimationFrame] void webkitCancelAnimationFrame(in long id);
    [ImplementedAs=cancelAnimationFrame] void webkitCancelRequestAnimationFrame(in long id); // This is a deprecated alias for webkitCancelAnimationFrame(). Remove this when removing vendor prefix.
#endif

    // Base64
    DOMString atob(in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString string)
        raises(DOMException);
    DOMString btoa(in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString string)
        raises(DOMException);

    attribute [Replaceable,Conditional=CSS3_CONDITIONAL_RULES] DOMWindowCSS CSS;

    // Events
    attribute EventListener onabort;
    attribute EventListener onbeforeunload;
    attribute EventListener onblur;
    attribute EventListener oncanplay;
    attribute EventListener oncanplaythrough;
    attribute EventListener onchange;
    attribute EventListener onclick;
    attribute EventListener oncontextmenu;
    attribute EventListener ondblclick;
    attribute EventListener ondrag;
    attribute EventListener ondragend;
    attribute EventListener ondragenter;
    attribute EventListener ondragleave;
    attribute EventListener ondragover;
    attribute EventListener ondragstart;
    attribute EventListener ondrop;
    attribute EventListener ondurationchange;
    attribute EventListener onemptied;
    attribute EventListener onended;
    attribute EventListener onerror;
    attribute EventListener onfocus;
    attribute EventListener onhashchange;
    attribute EventListener oninput;
    attribute EventListener oninvalid;
    attribute EventListener onkeydown;
    attribute EventListener onkeypress;
    attribute EventListener onkeyup;
    attribute EventListener onload;
    attribute EventListener onloadeddata;
    attribute EventListener onloadedmetadata;
    attribute EventListener onloadstart;
    attribute EventListener onmessage;
    attribute EventListener onmousedown;
    attribute EventListener onmousemove;
    attribute EventListener onmouseout;
    attribute EventListener onmouseover;
    attribute EventListener onmouseup;
    attribute EventListener onmousewheel;
    attribute EventListener onoffline;
    attribute EventListener ononline;
    attribute EventListener onpagehide;
    attribute EventListener onpageshow;
    attribute EventListener onpause;
    attribute EventListener onplay;
    attribute EventListener onplaying;
    attribute EventListener onpopstate;
    attribute EventListener onprogress;
    attribute EventListener onratechange;
    attribute EventListener onresize;
    attribute EventListener onscroll;
    attribute EventListener onseeked;
    attribute EventListener onseeking;
    attribute EventListener onselect;
    attribute EventListener onstalled;
    attribute EventListener onstorage;
    attribute EventListener onsubmit;
    attribute EventListener onsuspend;
    attribute EventListener ontimeupdate;
    attribute EventListener onunload;
    attribute EventListener onvolumechange;
    attribute EventListener onwaiting;

    // Not implemented yet.
    // attribute EventListener onafterprint;
    // attribute EventListener onbeforeprint;
    // attribute EventListener onreadystatechange;
    // attribute EventListener onredo;
    // attribute EventListener onshow;
    // attribute EventListener onundo;

    // Webkit extensions
    attribute EventListener onreset;
    attribute EventListener onsearch;
    attribute EventListener onwebkitanimationend;
    attribute EventListener onwebkitanimationiteration;
    attribute EventListener onwebkitanimationstart;
    attribute EventListener onwebkittransitionend;
    attribute EventListener ontransitionend;
#if defined(ENABLE_ORIENTATION_EVENTS) && ENABLE_ORIENTATION_EVENTS
    attribute EventListener onorientationchange;
#endif
    attribute [Conditional=TOUCH_EVENTS,V8EnabledAtRuntime=touch] EventListener ontouchstart;
    attribute [Conditional=TOUCH_EVENTS,V8EnabledAtRuntime=touch] EventListener ontouchmove;
    attribute [Conditional=TOUCH_EVENTS,V8EnabledAtRuntime=touch] EventListener ontouchend;
    attribute [Conditional=TOUCH_EVENTS,V8EnabledAtRuntime=touch] EventListener ontouchcancel;

    attribute [Conditional=DEVICE_ORIENTATION,V8EnabledAtRuntime] EventListener ondevicemotion;
    attribute [Conditional=DEVICE_ORIENTATION,V8EnabledAtRuntime] EventListener ondeviceorientation;

    attribute [Conditional=PROXIMITY_EVENTS] EventListener onwebkitdeviceproximity;

    // EventTarget interface
    [Custom] void addEventListener(in DOMString type,
                                  in EventListener listener,
                                  in [Optional] boolean useCapture);
    [Custom] void removeEventListener(in DOMString type,
                                      in EventListener listener,
                                      in [Optional] boolean useCapture);
    boolean dispatchEvent(in Event evt)
        raises(EventException);

    [V8Custom] void captureEvents(/*in long eventFlags*/);
    [V8Custom] void releaseEvents(/*in long eventFlags*/);

#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
    // Global constructors
    attribute StyleSheetConstructor StyleSheet;
    attribute CSSStyleSheetConstructor CSSStyleSheet;

    attribute CSSValueConstructor CSSValue;
    attribute CSSPrimitiveValueConstructor CSSPrimitiveValue;
    attribute CSSValueListConstructor CSSValueList;
    attribute WebKitCSSTransformValueConstructor WebKitCSSTransformValue;

#if defined(ENABLE_CSS_SHADERS) && ENABLE_CSS_SHADERS
    attribute WebKitCSSFilterRuleConstructor WebKitCSSFilterRule;
    attribute WebKitCSSMixFunctionValueConstructor WebKitCSSMixFunctionValue;
#endif

#if defined(ENABLE_CSS_FILTERS) && ENABLE_CSS_FILTERS
    attribute WebKitCSSFilterValueConstructor WebKitCSSFilterValue;
#endif

#if defined(ENABLE_CSS_DEVICE_ADAPTATION) && ENABLE_CSS_DEVICE_ADAPTATION
    attribute WebKitCSSViewportRuleConstructor WebKitCSSViewportRule;
#endif

    attribute CSSRuleConstructor CSSRule;
    attribute CSSCharsetRuleConstructor CSSCharsetRule;
    attribute CSSFontFaceRuleConstructor CSSFontFaceRule;
#if defined(ENABLE_SHADOW_DOM) && ENABLE_SHADOW_DOM
    attribute CSSHostRuleConstructor CSSHostRule;
#endif
    attribute CSSImportRuleConstructor CSSImportRule;
    attribute CSSMediaRuleConstructor CSSMediaRule;
    attribute CSSPageRuleConstructor CSSPageRule;
    attribute CSSStyleRuleConstructor CSSStyleRule;
    
    attribute CSSStyleDeclarationConstructor CSSStyleDeclaration;
    attribute MediaListConstructor MediaList;
    attribute CounterConstructor Counter;
    attribute CSSRuleListConstructor CSSRuleList;
    attribute RectConstructor Rect;
    attribute RGBColorConstructor RGBColor;
    attribute StyleSheetListConstructor StyleSheetList;

    // FIXME: Implement the commented-out global constructors for interfaces listed in DOM Level 3 Core specification.
    attribute DOMCoreExceptionConstructor DOMException;
    attribute DOMStringListConstructor DOMStringList;
//        attribute NameListConstructor NameList;
//        attribute DOMImplementationListConstructor DOMImplementationList;
//        attribute DOMImplementationSourceConstructor DOMImplementationSource;
    attribute DOMImplementationConstructor DOMImplementation;
    attribute DOMSettableTokenListConstructor DOMSettableTokenList;
    attribute DOMTokenListConstructor DOMTokenList;
    attribute DocumentFragmentConstructor DocumentFragment;
    attribute DocumentConstructor Document;
    attribute NodeConstructor Node;
    attribute NodeListConstructor NodeList;
    [Conditional=MICRODATA] attribute PropertyNodeListConstructor PropertyNodeList;
    attribute NamedNodeMapConstructor NamedNodeMap;
    attribute CharacterDataConstructor CharacterData;
    attribute AttrConstructor Attr;
    attribute ElementConstructor Element;
    attribute TextConstructor Text;
    attribute CommentConstructor Comment;
//        attribute TypeInfoConstructor TypeInfo;
//        attribute UserDataHandlerConstructor UserDataHandler;
//        attribute DOMErrorConstructor DOMError;
//        attribute DOMErrorHandlerConstructor DOMErrorHandler
//        attribute DOMLocatorConstructor DOMLocator;
//        attribute DOMConfigurationConstructor DOMConfiguration;
    attribute CDATASectionConstructor CDATASection;
    attribute DocumentTypeConstructor DocumentType;
    attribute NotationConstructor Notation;
    attribute EntityConstructor Entity;
    attribute EntityReferenceConstructor EntityReference;
    [Conditional=CANVAS_PATH, V8EnabledAtRuntime=canvasPath] attribute DOMPathConstructor Path;
    attribute ProcessingInstructionConstructor ProcessingInstruction;
    [Conditional=SHADOW_DOM, V8EnabledAtRuntime=shadowDOM] attribute ShadowRootConstructor WebKitShadowRoot;
    [Conditional=SHADOW_DOM, V8EnabledAtRuntime=shadowDOM] attribute HTMLContentElementConstructor HTMLContentElement;
    [Conditional=SHADOW_DOM, V8EnabledAtRuntime=shadowDOM] attribute HTMLShadowElementConstructor HTMLShadowElement;

    attribute DOMSelectionConstructor Selection;
    attribute DOMWindowConstructor Window;

    attribute HTMLDocumentConstructor HTMLDocument;
    attribute HTMLElementConstructor HTMLElement;
    attribute HTMLAnchorElementConstructor HTMLAnchorElement;
    attribute HTMLAppletElementConstructor HTMLAppletElement;
    attribute HTMLAreaElementConstructor HTMLAreaElement;
    attribute HTMLBRElementConstructor HTMLBRElement;
    attribute HTMLBaseElementConstructor HTMLBaseElement;
    attribute HTMLBaseFontElementConstructor HTMLBaseFontElement;
    attribute HTMLBodyElementConstructor HTMLBodyElement;
    attribute HTMLButtonElementConstructor HTMLButtonElement;
    attribute HTMLCanvasElementConstructor HTMLCanvasElement;
    attribute HTMLDListElementConstructor HTMLDListElement;
    [Conditional=DATALIST_ELEMENT] attribute HTMLDataListElementConstructor HTMLDataListElement;
    [Conditional=DIALOG_ELEMENT, V8EnabledPerContext=dialogElement] attribute HTMLDialogElementConstructor HTMLDialogElement;
    attribute HTMLDirectoryElementConstructor HTMLDirectoryElement;
    attribute HTMLDivElementConstructor HTMLDivElement;
    attribute HTMLEmbedElementConstructor HTMLEmbedElement;
    attribute HTMLFieldSetElementConstructor HTMLFieldSetElement;
    attribute HTMLFontElementConstructor HTMLFontElement;
    attribute HTMLFormElementConstructor HTMLFormElement;
    attribute HTMLFrameElementConstructor HTMLFrameElement;
    attribute HTMLFrameSetElementConstructor HTMLFrameSetElement;
    attribute HTMLHRElementConstructor HTMLHRElement;
    attribute HTMLHeadElementConstructor HTMLHeadElement;
    attribute HTMLHeadingElementConstructor HTMLHeadingElement;
    attribute HTMLHtmlElementConstructor HTMLHtmlElement;
    attribute HTMLIFrameElementConstructor HTMLIFrameElement;
    attribute HTMLImageElementConstructor HTMLImageElement;
    attribute HTMLInputElementConstructor HTMLInputElement;
    attribute HTMLKeygenElementConstructor HTMLKeygenElement;
    attribute HTMLLIElementConstructor HTMLLIElement;
    attribute HTMLLabelElementConstructor HTMLLabelElement;
    attribute HTMLLegendElementConstructor HTMLLegendElement;
    attribute HTMLLinkElementConstructor HTMLLinkElement;
    attribute HTMLMapElementConstructor HTMLMapElement;
    attribute HTMLMarqueeElementConstructor HTMLMarqueeElement;
    attribute HTMLMenuElementConstructor HTMLMenuElement;
    attribute HTMLMetaElementConstructor HTMLMetaElement;
#if defined(ENABLE_METER_ELEMENT) && ENABLE_METER_ELEMENT
    attribute HTMLMeterElementConstructor HTMLMeterElement;
#endif
    attribute HTMLModElementConstructor HTMLModElement;
    attribute HTMLOListElementConstructor HTMLOListElement;
    attribute HTMLObjectElementConstructor HTMLObjectElement;
    attribute HTMLOptGroupElementConstructor HTMLOptGroupElement;
    attribute HTMLOptionElementConstructor HTMLOptionElement;
    attribute HTMLOutputElementConstructor HTMLOutputElement;
    attribute HTMLParagraphElementConstructor HTMLParagraphElement;
    attribute HTMLParamElementConstructor HTMLParamElement;
    attribute HTMLPreElementConstructor HTMLPreElement;
#if defined(ENABLE_PROGRESS_ELEMENT) && ENABLE_PROGRESS_ELEMENT
    attribute HTMLProgressElementConstructor HTMLProgressElement;
#endif
    attribute HTMLQuoteElementConstructor HTMLQuoteElement;
    attribute HTMLScriptElementConstructor HTMLScriptElement;
    attribute HTMLSelectElementConstructor HTMLSelectElement;
    attribute HTMLSpanElementConstructor HTMLSpanElement;
    attribute HTMLStyleElementConstructor HTMLStyleElement;
    attribute HTMLTableCaptionElementConstructor HTMLTableCaptionElement;
    attribute HTMLTableCellElementConstructor HTMLTableCellElement;
    attribute HTMLTableColElementConstructor HTMLTableColElement;
    attribute HTMLTableElementConstructor HTMLTableElement;
    attribute HTMLTableRowElementConstructor HTMLTableRowElement;
    attribute HTMLTableSectionElementConstructor HTMLTableSectionElement;
    attribute [Conditional=TEMPLATE_ELEMENT] HTMLTemplateElementConstructor HTMLTemplateElement;
    attribute HTMLTextAreaElementConstructor HTMLTextAreaElement;
    attribute HTMLTitleElementConstructor HTMLTitleElement;
    attribute HTMLUListElementConstructor HTMLUListElement;

    attribute HTMLCollectionConstructor HTMLCollection;
    attribute HTMLAllCollectionConstructor HTMLAllCollection;
    attribute HTMLFormControlsCollectionConstructor HTMLFormControlsCollection;
    attribute HTMLOptionsCollectionConstructor HTMLOptionsCollection;
    [Conditional=MICRODATA] attribute HTMLPropertiesCollectionConstructor HTMLPropertiesCollection;
    attribute HTMLUnknownElementConstructor HTMLUnknownElement;

    [JSCustomGetter, CustomConstructor] attribute HTMLImageElementConstructorConstructor Image; // Usable with new operator
    [JSCustomGetter] attribute HTMLOptionElementConstructorConstructor Option; // Usable with new operator

    [Conditional=ENCRYPTED_MEDIA, V8EnabledAtRuntime=encryptedMedia] attribute MediaKeyEventConstructor MediaKeyEvent;
    attribute [Conditional=ENCRYPTED_MEDIA_V2, V8EnabledAtRuntime=encryptedMedia] MediaKeysConstructor MediaKeys;
    attribute [Conditional=ENCRYPTED_MEDIA_V2|ENCRYPTED_MEDIA, V8EnabledAtRuntime=encryptedMedia] MediaKeyErrorConstructor MediaKeyError;
    attribute [Conditional=ENCRYPTED_MEDIA_V2, V8EnabledAtRuntime=encryptedMedia] MediaKeyMessageEventConstructor MediaKeyMessageEvent;
    attribute [Conditional=ENCRYPTED_MEDIA_V2, V8EnabledAtRuntime=encryptedMedia] MediaKeyNeededEventConstructor MediaKeyNeededEvent;

    [Conditional=VIDEO_TRACK, V8EnabledAtRuntime=webkitVideoTrack] attribute HTMLTrackElementConstructor HTMLTrackElement;
    [Conditional=VIDEO_TRACK, V8EnabledAtRuntime=webkitVideoTrack] attribute TextTrackConstructor TextTrack;
    [Conditional=VIDEO_TRACK, V8EnabledAtRuntime=webkitVideoTrack] attribute TextTrackCueConstructor TextTrackCue; // Usable with the new operator
    [Conditional=VIDEO_TRACK, V8EnabledAtRuntime=webkitVideoTrack] attribute TextTrackCueListConstructor TextTrackCueList;
    [Conditional=VIDEO_TRACK, V8EnabledAtRuntime=webkitVideoTrack] attribute TextTrackListConstructor TextTrackList;
    [Conditional=VIDEO_TRACK, V8EnabledAtRuntime=webkitVideoTrack] attribute TrackEventConstructor TrackEvent;

    [JSCustomGetter, Conditional=VIDEO, V8EnabledAtRuntime] attribute HTMLAudioElementConstructorConstructor Audio; // Usable with the new operator
    [Conditional=VIDEO, V8EnabledAtRuntime] attribute HTMLAudioElementConstructor HTMLAudioElement;
    [Conditional=VIDEO, V8EnabledAtRuntime] attribute HTMLMediaElementConstructor HTMLMediaElement;
    [Conditional=VIDEO, V8EnabledAtRuntime] attribute HTMLVideoElementConstructor HTMLVideoElement;
    [Conditional=VIDEO, V8EnabledAtRuntime] attribute MediaErrorConstructor MediaError;
    [Conditional=VIDEO, V8EnabledAtRuntime] attribute TimeRangesConstructor TimeRanges;
    [Conditional=VIDEO, V8EnabledAtRuntime] attribute HTMLSourceElementConstructor HTMLSourceElement;
    [Conditional=VIDEO, V8EnabledAtRuntime] attribute MediaControllerConstructor MediaController;

    attribute CanvasPatternConstructor CanvasPattern;
    attribute CanvasGradientConstructor CanvasGradient;
    attribute CanvasRenderingContext2DConstructor CanvasRenderingContext2D;

    attribute ImageDataConstructor ImageData;
    attribute TextMetricsConstructor TextMetrics;

    [Conditional=WEBGL] attribute WebGLActiveInfoConstructor WebGLActiveInfo;
    [Conditional=WEBGL] attribute WebGLBufferConstructor WebGLBuffer;
    [Conditional=WEBGL] attribute WebGLFramebufferConstructor WebGLFramebuffer;
    [Conditional=WEBGL] attribute WebGLProgramConstructor WebGLProgram;
    [Conditional=WEBGL] attribute WebGLRenderbufferConstructor WebGLRenderbuffer;
    [Conditional=WEBGL] attribute WebGLRenderingContextConstructor WebGLRenderingContext;
    [Conditional=WEBGL] attribute WebGLShaderConstructor WebGLShader;
    [Conditional=WEBGL] attribute WebGLShaderPrecisionFormatConstructor WebGLShaderPrecisionFormat;
    [Conditional=WEBGL] attribute WebGLTextureConstructor WebGLTexture;
    [Conditional=WEBGL] attribute WebGLUniformLocationConstructor WebGLUniformLocation;

    attribute DOMStringMapConstructor DOMStringMap;

    attribute ArrayBufferConstructor ArrayBuffer; // Usable with new operator
    attribute ArrayBufferViewConstructor ArrayBufferView;
    attribute Int8ArrayConstructor Int8Array; // Usable with new operator
    attribute Uint8ArrayConstructor Uint8Array; // Usable with new operator
    attribute Uint8ClampedArrayConstructor Uint8ClampedArray; // Usable with new operator
    attribute Int16ArrayConstructor Int16Array; // Usable with new operator
    attribute Uint16ArrayConstructor Uint16Array; // Usable with new operator
    attribute Int32ArrayConstructor Int32Array; // Usable with new operator
    attribute Uint32ArrayConstructor Uint32Array; // Usable with new operator
    attribute Float32ArrayConstructor Float32Array; // Usable with new operator
    attribute Float64ArrayConstructor Float64Array; // Usable with new operator
    attribute DataViewConstructor DataView; // Usable with new operator

    // Event Constructors
    attribute EventConstructor Event;
    attribute BeforeLoadEventConstructor BeforeLoadEvent;
    attribute CompositionEventConstructor CompositionEvent;
    attribute CustomEventConstructor CustomEvent;
    attribute ErrorEventConstructor ErrorEvent;
    attribute FocusEventConstructor FocusEvent;
    attribute HashChangeEventConstructor HashChangeEvent;
    attribute KeyboardEventConstructor KeyboardEvent;
    attribute MessageEventConstructor MessageEvent;
    attribute MouseEventConstructor MouseEvent;
    attribute MutationEventConstructor MutationEvent;
    attribute OverflowEventConstructor OverflowEvent;
    attribute PopStateEventConstructor PopStateEvent;
    attribute PageTransitionEventConstructor PageTransitionEvent;
    attribute ProgressEventConstructor ProgressEvent;
    attribute TextEventConstructor TextEvent;
    attribute TransitionEventConstructor TransitionEvent;
    attribute UIEventConstructor UIEvent;
    attribute WebKitAnimationEventConstructor WebKitAnimationEvent;
    attribute WebKitTransitionEventConstructor WebKitTransitionEvent;
    attribute WheelEventConstructor WheelEvent;
    attribute XMLHttpRequestProgressEventConstructor XMLHttpRequestProgressEvent;
    [Conditional=DEVICE_ORIENTATION, V8EnabledAtRuntime] attribute DeviceMotionEventConstructor DeviceMotionEvent;
    [Conditional=DEVICE_ORIENTATION, V8EnabledAtRuntime] attribute DeviceOrientationEventConstructor DeviceOrientationEvent;
    [Conditional=TOUCH_EVENTS, V8EnabledAtRuntime=touch] attribute TouchConstructor Touch;
    [Conditional=TOUCH_EVENTS, V8EnabledAtRuntime=touch] attribute TouchEventConstructor TouchEvent;
    [Conditional=TOUCH_EVENTS, V8EnabledAtRuntime=touch] attribute TouchListConstructor TouchList;
    attribute StorageEventConstructor StorageEvent;
    [Conditional=INPUT_SPEECH] attribute SpeechInputEventConstructor SpeechInputEvent;
    [Conditional=WEBGL] attribute WebGLContextEventConstructor WebGLContextEvent;
    [Conditional=PROXIMITY_EVENTS] attribute DeviceProximityEventConstructor DeviceProximityEvent;
    [Conditional=REQUEST_AUTOCOMPLETE] attribute AutocompleteErrorEventConstructor AutocompleteErrorEvent;

    attribute EventExceptionConstructor EventException;

    attribute WebKitCSSKeyframeRuleConstructor WebKitCSSKeyframeRule;
    attribute WebKitCSSKeyframesRuleConstructor WebKitCSSKeyframesRule;
    [Conditional=CSS_REGIONS, V8EnabledAtRuntime=cssRegions] attribute WebKitCSSRegionRuleConstructor WebKitCSSRegionRule;

    attribute WebKitCSSMatrixConstructor WebKitCSSMatrix; // Usable with the new operator

    attribute WebKitPointConstructor WebKitPoint; // Usable with new the operator

    attribute ClipboardConstructor Clipboard;

    [Conditional=WORKERS] attribute WorkerConstructor Worker; // Usable with the new operator
    [Conditional=SHARED_WORKERS, JSCustomGetter, V8EnabledAtRuntime] attribute SharedWorkerConstructor SharedWorker; // Usable with the new operator

    attribute FileConstructor File;
    attribute FileListConstructor FileList;
    attribute BlobConstructor Blob;

    attribute NodeFilterConstructor NodeFilter;
    attribute RangeConstructor Range;
    attribute RangeExceptionConstructor RangeException;

    attribute EventSourceConstructor EventSource; // Usable with new the operator

    // Mozilla has a separate XMLDocument object for XML documents. 
    // We just use Document for this.
    attribute DocumentConstructor XMLDocument;
    attribute DOMParserConstructor DOMParser;
    attribute XMLSerializerConstructor XMLSerializer;
    attribute XMLHttpRequestConstructor XMLHttpRequest; // Usable with the new operator
    attribute XMLHttpRequestUploadConstructor XMLHttpRequestUpload;
    attribute XMLHttpRequestExceptionConstructor XMLHttpRequestException;
    [Conditional=XSLT] attribute XSLTProcessorConstructor XSLTProcessor; // Usable with the new operator

#if defined(ENABLE_CHANNEL_MESSAGING) && ENABLE_CHANNEL_MESSAGING
    attribute MessagePortConstructor MessagePort;
    attribute MessageChannelConstructor MessageChannel; // Usable with the new operator
#endif

    attribute DOMPluginConstructor Plugin;
    attribute DOMPluginArrayConstructor PluginArray;

    attribute DOMMimeTypeConstructor MimeType;
    attribute DOMMimeTypeArrayConstructor MimeTypeArray;

    attribute ClientRectConstructor ClientRect;
    attribute ClientRectListConstructor ClientRectList;

    attribute StorageConstructor Storage;

    attribute XPathEvaluatorConstructor XPathEvaluator;
    attribute XPathResultConstructor XPathResult;
    attribute XPathExceptionConstructor XPathException;

    [Conditional=SVG] attribute SVGZoomEventConstructor SVGZoomEvent;

#if defined(ENABLE_SVG) && ENABLE_SVG
    // Expose all implemented SVG 1.1 interfaces, excluding the SVG MI interfaces:
    // SVGAnimatedPathData, SVGAnimatedPoints, SVGExternalResourcesRequired,
    // SVGFilterPrimitiveStandardAttributes, SVGFitToViewBox, SVGLangSpace, SVGLocatable
    // SVGTests, SVGTransformable, SVGURIReference, SVGZoomAndPan
    attribute SVGAElementConstructor SVGAElement;
    attribute SVGAngleConstructor SVGAngle;
    attribute SVGAnimatedAngleConstructor SVGAnimatedAngle;
    attribute SVGAnimatedBooleanConstructor SVGAnimatedBoolean;
    attribute SVGAnimatedEnumerationConstructor SVGAnimatedEnumeration;
    attribute SVGAnimatedIntegerConstructor SVGAnimatedInteger;
    attribute SVGAnimatedLengthConstructor SVGAnimatedLength;
    attribute SVGAnimatedLengthListConstructor SVGAnimatedLengthList;
    attribute SVGAnimatedNumberConstructor SVGAnimatedNumber;
    attribute SVGAnimatedNumberListConstructor SVGAnimatedNumberList;
    attribute SVGAnimatedPreserveAspectRatioConstructor SVGAnimatedPreserveAspectRatio;
    attribute SVGAnimatedRectConstructor SVGAnimatedRect;
    attribute SVGAnimatedStringConstructor SVGAnimatedString;
    attribute SVGAnimatedTransformListConstructor SVGAnimatedTransformList;
    attribute SVGCircleElementConstructor SVGCircleElement;
    attribute SVGClipPathElementConstructor SVGClipPathElement;
    attribute SVGColorConstructor SVGColor;
    attribute SVGCursorElementConstructor SVGCursorElement;
//      attribute SVGCSSRuleConstructor SVGCSSRule;
    attribute SVGDefsElementConstructor SVGDefsElement;
    attribute SVGDescElementConstructor SVGDescElement;
    attribute SVGDocumentConstructor SVGDocument;
    attribute SVGElementConstructor SVGElement;
    attribute SVGElementInstanceConstructor SVGElementInstance;
    attribute SVGElementInstanceListConstructor SVGElementInstanceList;
    attribute SVGEllipseElementConstructor SVGEllipseElement;
    attribute SVGForeignObjectElementConstructor SVGForeignObjectElement;
    attribute SVGExceptionConstructor SVGException;
    attribute SVGGElementConstructor SVGGElement;
    attribute SVGGradientElementConstructor SVGGradientElement;
    attribute SVGImageElementConstructor SVGImageElement;
    attribute SVGLengthConstructor SVGLength;
    attribute SVGLengthListConstructor SVGLengthList;
    attribute SVGLinearGradientElementConstructor SVGLinearGradientElement;
    attribute SVGLineElementConstructor SVGLineElement;
    attribute SVGMarkerElementConstructor SVGMarkerElement;
    attribute SVGMaskElementConstructor SVGMaskElement;
    attribute SVGMatrixConstructor SVGMatrix;
    attribute SVGMetadataElementConstructor SVGMetadataElement;
    attribute SVGNumberConstructor SVGNumber;
    attribute SVGNumberListConstructor SVGNumberList;
    attribute SVGPaintConstructor SVGPaint;
    attribute SVGPathElementConstructor SVGPathElement;
    attribute SVGPathSegConstructor SVGPathSeg;
    attribute SVGPathSegArcAbsConstructor SVGPathSegArcAbs;
    attribute SVGPathSegArcRelConstructor SVGPathSegArcRel;
    attribute SVGPathSegClosePathConstructor SVGPathSegClosePath;
    attribute SVGPathSegCurvetoCubicAbsConstructor SVGPathSegCurvetoCubicAbs;
    attribute SVGPathSegCurvetoCubicRelConstructor SVGPathSegCurvetoCubicRel;
    attribute SVGPathSegCurvetoCubicSmoothAbsConstructor SVGPathSegCurvetoCubicSmoothAbs;
    attribute SVGPathSegCurvetoCubicSmoothRelConstructor SVGPathSegCurvetoCubicSmoothRel;
    attribute SVGPathSegCurvetoQuadraticAbsConstructor SVGPathSegCurvetoQuadraticAbs;
    attribute SVGPathSegCurvetoQuadraticRelConstructor SVGPathSegCurvetoQuadraticRel;
    attribute SVGPathSegCurvetoQuadraticSmoothAbsConstructor SVGPathSegCurvetoQuadraticSmoothAbs;
    attribute SVGPathSegCurvetoQuadraticSmoothRelConstructor SVGPathSegCurvetoQuadraticSmoothRel;
    attribute SVGPathSegLinetoAbsConstructor SVGPathSegLinetoAbs;
    attribute SVGPathSegLinetoHorizontalAbsConstructor SVGPathSegLinetoHorizontalAbs;
    attribute SVGPathSegLinetoHorizontalRelConstructor SVGPathSegLinetoHorizontalRel;
    attribute SVGPathSegLinetoRelConstructor SVGPathSegLinetoRel;
    attribute SVGPathSegLinetoVerticalAbsConstructor SVGPathSegLinetoVerticalAbs;
    attribute SVGPathSegLinetoVerticalRelConstructor SVGPathSegLinetoVerticalRel;
    attribute SVGPathSegListConstructor SVGPathSegList;
    attribute SVGPathSegMovetoAbsConstructor SVGPathSegMovetoAbs;
    attribute SVGPathSegMovetoRelConstructor SVGPathSegMovetoRel;
    attribute SVGPatternElementConstructor SVGPatternElement;
    attribute SVGPointConstructor SVGPoint;
    attribute SVGPointListConstructor SVGPointList;
    attribute SVGPolygonElementConstructor SVGPolygonElement;
    attribute SVGPolylineElementConstructor SVGPolylineElement;
    attribute SVGPreserveAspectRatioConstructor SVGPreserveAspectRatio;
    attribute SVGRadialGradientElementConstructor SVGRadialGradientElement;
    attribute SVGRectConstructor SVGRect;
    attribute SVGRectElementConstructor SVGRectElement;
    attribute SVGRenderingIntentConstructor SVGRenderingIntent;
    attribute SVGScriptElementConstructor SVGScriptElement;
    attribute SVGStopElementConstructor SVGStopElement;
    attribute SVGStringListConstructor SVGStringList;
    attribute SVGStyleElementConstructor SVGStyleElement;
    attribute SVGSVGElementConstructor SVGSVGElement;
    attribute SVGSwitchElementConstructor SVGSwitchElement;
    attribute SVGSymbolElementConstructor SVGSymbolElement;
    attribute SVGTextContentElementConstructor SVGTextContentElement;
    attribute SVGTextElementConstructor SVGTextElement;
    attribute SVGTextPathElementConstructor SVGTextPathElement;
    attribute SVGTextPositioningElementConstructor SVGTextPositioningElement;
    attribute SVGTitleElementConstructor SVGTitleElement;
    attribute SVGTransformConstructor SVGTransform;
    attribute SVGTransformListConstructor SVGTransformList;
    attribute SVGTRefElementConstructor SVGTRefElement;
    attribute SVGTSpanElementConstructor SVGTSpanElement;
    attribute SVGUnitTypesConstructor SVGUnitTypes;
    attribute SVGUseElementConstructor SVGUseElement;
    attribute SVGViewElementConstructor SVGViewElement;
    attribute SVGViewSpecConstructor SVGViewSpec;
    attribute SVGZoomAndPanConstructor SVGZoomAndPan;

    attribute SVGAnimateColorElementConstructor SVGAnimateColorElement;
    attribute SVGAnimateElementConstructor SVGAnimateElement;
    attribute SVGAnimateMotionElementConstructor SVGAnimateMotionElement;
    attribute SVGAnimateTransformElementConstructor SVGAnimateTransformElement;
    attribute SVGMPathElementConstructor SVGMPathElement;
    attribute SVGSetElementConstructor SVGSetElement;

#if defined(ENABLE_SVG_FONTS) && ENABLE_SVG_FONTS
    attribute SVGAltGlyphDefElementConstructor SVGAltGlyphDefElement;
    attribute SVGAltGlyphElementConstructor SVGAltGlyphElement;
    attribute SVGAltGlyphItemElementConstructor SVGAltGlyphItemElement;
//      attribute SVGDefinitionSrcElementConstructor SVGDefinitionSrcElement;
    attribute SVGFontElementConstructor SVGFontElement;
    attribute SVGFontFaceElementConstructor SVGFontFaceElement;
    attribute SVGFontFaceFormatElementConstructor SVGFontFaceFormatElement;
    attribute SVGFontFaceNameElementConstructor SVGFontFaceNameElement;
    attribute SVGFontFaceSrcElementConstructor SVGFontFaceSrcElement;
    attribute SVGFontFaceUriElementConstructor SVGFontFaceUriElement;
    attribute SVGGlyphElementConstructor SVGGlyphElement;
    attribute SVGGlyphRefElementConstructor SVGGlyphRefElement;
    attribute SVGHKernElementConstructor SVGHKernElement;
    attribute SVGMissingGlyphElementConstructor SVGMissingGlyphElement;
    attribute SVGVKernElementConstructor SVGVKernElement;
#endif

#if defined(ENABLE_FILTERS) && ENABLE_FILTERS
    attribute SVGComponentTransferFunctionElementConstructor SVGComponentTransferFunctionElement;
    attribute SVGFEBlendElementConstructor SVGFEBlendElement;
    attribute SVGFEColorMatrixElementConstructor SVGFEColorMatrixElement;
    attribute SVGFEComponentTransferElementConstructor SVGFEComponentTransferElement;
    attribute SVGFECompositeElementConstructor SVGFECompositeElement;
    attribute SVGFEConvolveMatrixElementConstructor SVGFEConvolveMatrixElement;
    attribute SVGFEDiffuseLightingElementConstructor SVGFEDiffuseLightingElement;
    attribute SVGFEDisplacementMapElementConstructor SVGFEDisplacementMapElement;
    attribute SVGFEDistantLightElementConstructor SVGFEDistantLightElement;
    attribute SVGFEDropShadowElementConstructor SVGFEDropShadowElement;
    attribute SVGFEFloodElementConstructor SVGFEFloodElement;
    attribute SVGFEFuncAElementConstructor SVGFEFuncAElement;
    attribute SVGFEFuncBElementConstructor SVGFEFuncBElement;
    attribute SVGFEFuncGElementConstructor SVGFEFuncGElement;
    attribute SVGFEFuncRElementConstructor SVGFEFuncRElement;
    attribute SVGFEGaussianBlurElementConstructor SVGFEGaussianBlurElement;
    attribute SVGFEImageElementConstructor SVGFEImageElement;
    attribute SVGFEMergeElementConstructor SVGFEMergeElement;
    attribute SVGFEMergeNodeElementConstructor SVGFEMergeNodeElement;
    attribute SVGFEMorphologyElementConstructor SVGFEMorphologyElement;
    attribute SVGFEOffsetElementConstructor SVGFEOffsetElement;
    attribute SVGFEPointLightElementConstructor SVGFEPointLightElement;
    attribute SVGFESpecularLightingElementConstructor SVGFESpecularLightingElement;
    attribute SVGFESpotLightElementConstructor SVGFESpotLightElement;
    attribute SVGFETileElementConstructor SVGFETileElement;
    attribute SVGFETurbulenceElementConstructor SVGFETurbulenceElement;
    attribute SVGFilterElementConstructor SVGFilterElement;
#endif
#endif

    attribute DOMFormDataConstructor FormData;

    [Conditional=BLOB|FILE_SYSTEM] attribute FileErrorConstructor FileError;
    [Conditional=BLOB] attribute FileReaderConstructor FileReader;

    [Conditional=BLOB] attribute DOMURLConstructor URL;
    [Conditional=BLOB] attribute DOMURLConstructor webkitURL; // FIXME: deprecate this.

    attribute MutationObserverConstructor WebKitMutationObserver; // FIXME: Add metrics to determine when we can remove this.
    attribute MutationObserverConstructor MutationObserver;

    [Conditional=MEDIA_SOURCE, V8EnabledAtRuntime=mediaSource] attribute MediaSourceConstructor WebKitMediaSource;
    [Conditional=MEDIA_SOURCE, V8EnabledAtRuntime=mediaSource] attribute SourceBufferConstructor WebKitSourceBuffer;
    [Conditional=MEDIA_SOURCE, V8EnabledAtRuntime=mediaSource] attribute SourceBufferListConstructor WebKitSourceBufferList;

#endif // defined(LANGUAGE_JAVASCRIPT)

#if defined(V8_BINDING) && V8_BINDING
    // window.toString() requires special handling in V8
    [V8DoNotCheckSignature, DoNotCheckSecurity, Custom, NotEnumerable] DOMString toString();
#endif // defined(V8_BINDING)
};

