/*
 * 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,
    CustomDeleteProperty,
    CustomGetOwnPropertySlot,
    CustomEnumerateProperty,
    CustomPutFunction,
    EventTarget,
    ExtendsDOMGlobalObject,
    ReplaceableConstructor,
    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
    [V8PerWorldBindings] 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 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;

    [CustomConstructor] attribute HTMLImageElementConstructorConstructor Image; // Usable with new operator
    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 & WEBVTT_REGIONS, V8EnabledAtRuntime=webkitVideoTrack] attribute TextTrackRegionConstructor TextTrackRegion; // Usable with the new operator
    [Conditional=VIDEO_TRACK, V8EnabledAtRuntime=webkitVideoTrack] attribute TrackEventConstructor TrackEvent;

    [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;
    [V8EnabledAtRuntime=experimentalContentSecurityPolicyFeatures] attribute SecurityPolicyViolationEventConstructor SecurityPolicyViolationEvent;

    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, 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;

    [V8EnabledAtRuntime=mediaSource] attribute MediaSourceConstructor WebKitMediaSource;
    [V8EnabledAtRuntime=mediaSource] attribute SourceBufferConstructor WebKitSourceBuffer;
    [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)
};

