/*
 * 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.
 */

module window {

    interface [
        CheckSecurity,
        JSCustomDefineOwnProperty,
        CustomDeleteProperty,
        CustomGetOwnPropertySlot,
        CustomEnumerateProperty,
        JSCustomMarkFunction,
        JSCustomToNativeObject,
        CustomPutFunction,
        EventTarget,
        ExtendsDOMGlobalObject,
        JSGenerateToNativeObject,
        ReplaceableConstructor,
        JSLegacyParent=JSDOMWindowBase,
        V8CustomToJSObject,
        InterfaceName=Window
    ] DOMWindow {
        // DOM Level 0
        attribute [Replaceable] Screen screen;
        attribute [Replaceable, DoNotCheckSecurityOnGetter] History history;
        attribute [Replaceable] BarInfo locationbar;
        attribute [Replaceable] BarInfo menubar;
        attribute [Replaceable] BarInfo personalbar;
        attribute [Replaceable] BarInfo scrollbars;
        attribute [Replaceable] BarInfo statusbar;
        attribute [Replaceable] BarInfo toolbar;
        attribute [Replaceable] Navigator navigator;
        attribute [Replaceable] Navigator clientInformation;
        readonly attribute Crypto crypto;
#if !defined(LANGUAGE_CPP) || !LANGUAGE_CPP
        attribute [DoNotCheckSecurity, CustomSetter, V8Unforgeable] Location location;
#endif
        attribute [Replaceable, CustomGetter, V8CustomSetter] 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] DOMObject showModalDialog(in DOMString url,
                                           in [Optional] DOMObject 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);

        attribute [Replaceable] boolean offscreenBuffering;

        attribute [Replaceable] long outerHeight;
        attribute [Replaceable] long outerWidth;
        attribute [Replaceable] long innerHeight;
        attribute [Replaceable] long innerWidth;
        attribute [Replaceable] long screenX;
        attribute [Replaceable] long screenY;
        attribute [Replaceable] long screenLeft;
        attribute [Replaceable] long screenTop;
        attribute [Replaceable] long scrollX;
        attribute [Replaceable] 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;

        attribute [Replaceable, DoNotCheckSecurityOnGetter] 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
        attribute [Replaceable, DoNotCheckSecurityOnGetter] DOMWindow self;
        readonly attribute [DoNotCheckSecurity, V8Unforgeable] DOMWindow window;
        attribute [Replaceable, DoNotCheckSecurityOnGetter] DOMWindow frames;

        attribute [Replaceable, DoNotCheckSecurityOnGetter, V8CustomSetter] DOMWindow opener;
        attribute [Replaceable, DoNotCheckSecurityOnGetter] DOMWindow parent;
        attribute [Replaceable, DoNotCheckSecurityOnGetter, V8Unforgeable, V8ReadOnly] 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

        attribute [Replaceable] 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

                 attribute [Replaceable] Console console;

        // cross-document messaging
#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
        [DoNotCheckSecurity, Custom] void postMessage(in SerializedScriptValue message, in DOMString targetOrigin)
            raises(DOMException);
        [DoNotCheckSecurity, Custom] void postMessage(in SerializedScriptValue message, in DOMString targetOrigin, in Array messagePorts)
            raises(DOMException);

        [DoNotCheckSecurity, Custom] void webkitPostMessage(in SerializedScriptValue message, in DOMString targetOrigin)
            raises(DOMException);
        [DoNotCheckSecurity, Custom] void webkitPostMessage(in SerializedScriptValue message, in DOMString targetOrigin, in Array transferList)
            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
        attribute [Replaceable] Performance performance;
#endif

        // Timers
        [Custom] long setTimeout(in [Optional=DefaultIsUndefined] TimeoutHandler handler, 
                                 in [Optional=DefaultIsUndefined] long timeout);
        // [Custom] long setTimeout(in TimeoutHandler handler, in long timeout, arguments...);
        // [Custom] long setTimeout(in DOMString code, in long timeout);
        void clearTimeout(in [Optional=DefaultIsUndefined] long handle);
        [Custom] long setInterval(in TimeoutHandler handler, in long timeout);
        // [Custom] long setInterval(in TimeoutHandler handler, in long timeout, arguments...);
        // [Custom] long setInterval(in DOMString code, in long timeout);
        void clearInterval(in [Optional=DefaultIsUndefined] long handle);

#if defined(ENABLE_REQUEST_ANIMATION_FRAME)
        // WebKit animation extensions, being standardized in the WebPerf WG
        long webkitRequestAnimationFrame(in [Callback] RequestAnimationFrameCallback callback);
        void webkitCancelAnimationFrame(in long id);
        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);

        // 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;
#if defined(ENABLE_ORIENTATION_EVENTS) && ENABLE_ORIENTATION_EVENTS
        attribute EventListener onorientationchange;
#endif
        attribute [Conditional=TOUCH_EVENTS,V8EnabledAtRuntime] EventListener ontouchstart;
        attribute [Conditional=TOUCH_EVENTS,V8EnabledAtRuntime] EventListener ontouchmove;
        attribute [Conditional=TOUCH_EVENTS,V8EnabledAtRuntime] EventListener ontouchend;
        attribute [Conditional=TOUCH_EVENTS,V8EnabledAtRuntime] EventListener ontouchcancel;

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

        // 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_FILTERS) && ENABLE_CSS_FILTERS
        attribute WebKitCSSFilterValueConstructor WebKitCSSFilterValue;
#endif

        attribute CSSRuleConstructor CSSRule;
        attribute CSSCharsetRuleConstructor CSSCharsetRule;
        attribute CSSFontFaceRuleConstructor CSSFontFaceRule;
        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;
        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;
        attribute ProcessingInstructionConstructor ProcessingInstruction;
        attribute [Conditional=SHADOW_DOM, V8EnabledPerContext=shadowDOM] ShadowRootConstructor WebKitShadowRoot;
        attribute [Conditional=SHADOW_DOM, V8EnabledPerContext=shadowDOM] HTMLContentElementConstructor HTMLContentElement;
        attribute [Conditional=SHADOW_DOM, V8EnabledPerContext=shadowDOM] 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;
        attribute [Conditional=DATALIST] HTMLDataListElementConstructor HTMLDataListElement;
        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_TAG) && ENABLE_METER_TAG
        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_TAG) && ENABLE_PROGRESS_TAG
        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 HTMLTextAreaElementConstructor HTMLTextAreaElement;
        attribute HTMLTitleElementConstructor HTMLTitleElement;
        attribute HTMLUListElementConstructor HTMLUListElement;

        attribute HTMLCollectionConstructor HTMLCollection;
        attribute HTMLAllCollectionConstructor HTMLAllCollection;
        attribute [Conditional=MICRODATA] HTMLPropertiesCollectionConstructor HTMLPropertiesCollection;
        attribute HTMLUnknownElementConstructor HTMLUnknownElement;

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

        attribute [Conditional=ENCRYPTED_MEDIA, V8EnabledAtRuntime=encryptedMedia] MediaKeyErrorConstructor MediaKeyError;
        attribute [Conditional=ENCRYPTED_MEDIA, V8EnabledAtRuntime=encryptedMedia] MediaKeyEventConstructor MediaKeyEvent;

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

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

        attribute [Conditional=WEB_INTENTS_TAG] HTMLIntentElementConstructor HTMLIntentElement;

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

        attribute ImageDataConstructor ImageData;
        attribute TextMetricsConstructor TextMetrics;

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

        attribute DOMStringMapConstructor DOMStringMap;

        attribute ArrayBufferConstructor ArrayBuffer; // Usable with new operator
        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 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 UIEventConstructor UIEvent;
        attribute WebKitAnimationEventConstructor WebKitAnimationEvent;
        attribute WebKitTransitionEventConstructor WebKitTransitionEvent;
        attribute WheelEventConstructor WheelEvent;
        attribute XMLHttpRequestProgressEventConstructor XMLHttpRequestProgressEvent;
        attribute [Conditional=DEVICE_ORIENTATION, V8EnabledAtRuntime] DeviceMotionEventConstructor DeviceMotionEvent;
        attribute [Conditional=DEVICE_ORIENTATION, V8EnabledAtRuntime] DeviceOrientationEventConstructor DeviceOrientationEvent;
        attribute [Conditional=TOUCH_EVENTS] TouchEventConstructor TouchEvent;
        attribute StorageEventConstructor StorageEvent;
        attribute [Conditional=INPUT_SPEECH] SpeechInputEventConstructor SpeechInputEvent;
        attribute [Conditional=WEBGL] WebGLContextEventConstructor WebGLContextEvent;

        attribute EventExceptionConstructor EventException;

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

        attribute WebKitCSSMatrixConstructor WebKitCSSMatrix; // Usable with the new operator

        attribute WebKitPointConstructor WebKitPoint; // Usable with new the operator

        attribute ClipboardConstructor Clipboard;

        attribute [Conditional=WORKERS] WorkerConstructor Worker; // Usable with the new operator
        attribute [Conditional=SHARED_WORKERS, JSCustomGetter, V8EnabledAtRuntime] 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;
        attribute [Conditional=XSLT] 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;

#if defined(ENABLE_ANIMATION_API) && ENABLE_ANIMATION_API
        attribute WebKitAnimationConstructor WebKitAnimation;
        attribute WebKitAnimationListConstructor WebKitAnimationList;
#endif

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

        attribute [Conditional=SVG] 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
        // SVGStylable, 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;

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

        attribute [Conditional=BLOB&LEGACY_WEBKIT_BLOB_BUILDER] WebKitBlobBuilderConstructor WebKitBlobBuilder;

        attribute [Conditional=BLOB] DOMURLConstructor webkitURL;

#if defined(ENABLE_QUOTA) && ENABLE_QUOTA
        readonly attribute [V8EnabledAtRuntime=Quota] StorageInfo webkitStorageInfo;
#endif

        attribute [Conditional=MUTATION_OBSERVERS] WebKitMutationObserverConstructor WebKitMutationObserver;

#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)
    };

}

