/*
 * 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,
    EventTarget,
    CustomToJSObject,
    NoWrapperCache,
    CustomIndexedGetter,
    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, PerWorldBindings, ActivityLog=GetterForIsolatedWorlds] readonly attribute Navigator navigator;
    [Replaceable] readonly attribute Navigator clientInformation;
    readonly attribute Crypto crypto;
    [DoNotCheckSecurity, CustomSetter, Unforgeable] attribute Location location;
    [Replaceable, CustomGetter, CustomSetter] readonly attribute Event event;

    DOMSelection getSelection();

    [CheckSecurityForNode] readonly attribute Element frameElement;

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

    void print();
    void stop();

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

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

    void alert([Default=Undefined] optional DOMString message);
    boolean confirm([Default=Undefined] optional DOMString message);
    [TreatReturnedNullStringAs=Null] DOMString prompt([Default=Undefined] optional DOMString message,
                                                [TreatNullAs=NullString, TreatUndefinedAs=NullString,Default=Undefined] optional DOMString defaultValue);

    boolean find([Default=Undefined] optional DOMString string,
                 [Default=Undefined] optional boolean caseSensitive,
                 [Default=Undefined] optional boolean backwards,
                 [Default=Undefined] optional boolean wrap,
                 [Default=Undefined] optional boolean wholeWord,
                 [Default=Undefined] optional boolean searchInFrames,
                 [Default=Undefined] optional 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([Default=Undefined] optional long x, [Default=Undefined] optional long y);
    void scrollTo([Default=Undefined] optional long x, [Default=Undefined] optional long y);
    void scroll([Default=Undefined] optional long x, [Default=Undefined] optional long y);
    void moveBy([Default=Undefined] optional float x, [Default=Undefined] optional float y); // FIXME: this should take longs not floats.
    void moveTo([Default=Undefined] optional float x, [Default=Undefined] optional float y); // FIXME: this should take longs not floats.
    void resizeBy([Default=Undefined] optional float x, [Default=Undefined] optional float y); // FIXME: this should take longs not floats.
    void resizeTo([Default=Undefined] optional float width, [Default=Undefined] optional float height); // FIXME: this should take longs not floats.

    [DoNotCheckSecurity] readonly attribute boolean closed;

    [Replaceable, DoNotCheckSecurityOnGetter] readonly attribute unsigned long length;

    attribute DOMString name;

    attribute DOMString status;
    attribute DOMString defaultStatus;
    // This attribute is an alias of defaultStatus and is necessary for legacy uses.
    attribute DOMString defaultstatus;

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

    [Replaceable, DoNotCheckSecurityOnGetter, CustomSetter] readonly attribute DOMWindow opener;
    [Replaceable, DoNotCheckSecurityOnGetter] readonly attribute DOMWindow parent;
    [DoNotCheckSecurityOnGetter, Unforgeable] readonly attribute DOMWindow top;

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

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

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

    // DOM Level 2 Style Interface
    [PerWorldBindings] CSSStyleDeclaration getComputedStyle([Default=Undefined] optional Element element,
                                                              [TreatNullAs=NullString, TreatUndefinedAs=NullString,Default=Undefined] optional DOMString pseudoElement);

    // WebKit extensions
    CSSRuleList getMatchedCSSRules([Default=Undefined] optional Element element,
                                   [TreatNullAs=NullString, TreatUndefinedAs=NullString,Default=Undefined] optional DOMString pseudoElement);

    [Replaceable] readonly attribute double devicePixelRatio;
    
    DOMPoint webkitConvertPointFromPageToNode([Default=Undefined] optional Node node,
                                              [Default=Undefined] optional DOMPoint p);
    DOMPoint webkitConvertPointFromNodeToPage([Default=Undefined] optional Node node,
                                              [Default=Undefined] optional DOMPoint p);

    [EnabledAtRuntime, PerWorldBindings, ActivityLog=GetterForIsolatedWorlds] readonly attribute DOMApplicationCache applicationCache;

    [EnabledAtRuntime, PerWorldBindings, ActivityLog=GetterForIsolatedWorlds, GetterRaisesException] readonly attribute Storage sessionStorage;
    [EnabledAtRuntime, PerWorldBindings, ActivityLog=GetterForIsolatedWorlds, GetterRaisesException] readonly attribute Storage localStorage;

#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
    [DoNotCheckSecurity, Custom, RaisesException] void postMessage(SerializedScriptValue message, DOMString targetOrigin, optional Array messagePorts);

    [Replaceable] readonly attribute Performance performance;

    // Timers
    [Custom] long setTimeout(any handler, [Default=Undefined] optional long timeout);
    void clearTimeout([Default=Undefined] optional long handle);
    [Custom] long setInterval(any handler, [Default=Undefined] optional long timeout);
    void clearInterval([Default=Undefined] optional long handle);

    [MeasureAs=UnprefixedRequestAnimationFrame] long requestAnimationFrame([Callback] RequestAnimationFrameCallback callback);
    void cancelAnimationFrame(long id);
    [MeasureAs=PrefixedRequestAnimationFrame] long webkitRequestAnimationFrame([Callback] RequestAnimationFrameCallback callback);
    [ImplementedAs=cancelAnimationFrame] void webkitCancelAnimationFrame(long id);
    [ImplementedAs=cancelAnimationFrame] void webkitCancelRequestAnimationFrame(long id); // This is a deprecated alias for webkitCancelAnimationFrame(). Remove this when removing vendor prefix.

    // Base64
    [RaisesException] DOMString atob([TreatNullAs=NullString,Default=Undefined] optional DOMString string);
    [RaisesException] DOMString btoa([TreatNullAs=NullString,Default=Undefined] optional DOMString string);

    [Replaceable,Conditional=CSS3_CONDITIONAL_RULES] attribute 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
    [EnabledAtRuntime=touch] attribute EventListener ontouchstart;
    [EnabledAtRuntime=touch] attribute EventListener ontouchmove;
    [EnabledAtRuntime=touch] attribute EventListener ontouchend;
    [EnabledAtRuntime=touch] attribute EventListener ontouchcancel;

    [EnabledAtRuntime] attribute EventListener ondevicemotion;
    [EnabledAtRuntime] attribute EventListener ondeviceorientation;

    // EventTarget interface
    [Custom] void addEventListener(DOMString type,
                                  EventListener listener,
                                  optional boolean useCapture);
    [Custom] void removeEventListener(DOMString type,
                                      EventListener listener,
                                      optional boolean useCapture);
    [RaisesException] boolean dispatchEvent(Event evt);

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

    // Global constructors
    attribute StyleSheetConstructor StyleSheet;
    attribute CSSStyleSheetConstructor CSSStyleSheet;

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

    attribute WebKitCSSFilterRuleConstructor WebKitCSSFilterRule;
    attribute WebKitCSSMixFunctionValueConstructor WebKitCSSMixFunctionValue;

    attribute WebKitCSSFilterValueConstructor WebKitCSSFilterValue;

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

    attribute CSSRuleConstructor CSSRule;
    attribute CSSCharsetRuleConstructor CSSCharsetRule;
    attribute CSSFontFaceRuleConstructor CSSFontFaceRule;
    attribute CSSHostRuleConstructor CSSHostRule;
    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;
    [EnabledAtRuntime=canvasPath] attribute DOMPathConstructor Path;
    attribute ProcessingInstructionConstructor ProcessingInstruction;
    [EnabledAtRuntime=shadowDOM] attribute ShadowRootConstructor WebKitShadowRoot;
    [EnabledAtRuntime=shadowDOM] attribute HTMLContentElementConstructor HTMLContentElement;
    [EnabledAtRuntime=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 HTMLBodyElementConstructor HTMLBodyElement;
    attribute HTMLButtonElementConstructor HTMLButtonElement;
    attribute HTMLCanvasElementConstructor HTMLCanvasElement;
    attribute HTMLDListElementConstructor HTMLDListElement;
    [Conditional=DATALIST_ELEMENT] attribute HTMLDataListElementConstructor HTMLDataListElement;
    [Conditional=DIALOG_ELEMENT, EnabledPerContext=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;
    attribute HTMLMeterElementConstructor HTMLMeterElement;
    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;
    attribute HTMLProgressElementConstructor HTMLProgressElement;
    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;
    attribute HTMLUnknownElementConstructor HTMLUnknownElement;

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

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

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

    [Conditional=VIDEO, EnabledAtRuntime] attribute HTMLAudioElementConstructorConstructor Audio; // Usable with the new operator
    [Conditional=VIDEO, EnabledAtRuntime] attribute HTMLAudioElementConstructor HTMLAudioElement;
    [Conditional=VIDEO, EnabledAtRuntime] attribute HTMLMediaElementConstructor HTMLMediaElement;
    [Conditional=VIDEO, EnabledAtRuntime] attribute HTMLVideoElementConstructor HTMLVideoElement;
    [Conditional=VIDEO, EnabledAtRuntime] attribute MediaErrorConstructor MediaError;
    [Conditional=VIDEO, EnabledAtRuntime] attribute TimeRangesConstructor TimeRanges;
    [Conditional=VIDEO, EnabledAtRuntime] attribute HTMLSourceElementConstructor HTMLSourceElement;
    [Conditional=VIDEO, EnabledAtRuntime] 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 AnimationEventConstructor WebKitAnimationEvent;
    attribute TransitionEventConstructor WebKitTransitionEvent;
    attribute WheelEventConstructor WheelEvent;
    attribute XMLHttpRequestProgressEventConstructor XMLHttpRequestProgressEvent;
    [EnabledAtRuntime] attribute DeviceMotionEventConstructor DeviceMotionEvent;
    [EnabledAtRuntime] attribute DeviceOrientationEventConstructor DeviceOrientationEvent;
    [EnabledAtRuntime=touch] attribute TouchConstructor Touch;
    [EnabledAtRuntime=touch] attribute TouchEventConstructor TouchEvent;
    [EnabledAtRuntime=touch] attribute TouchListConstructor TouchList;
    attribute StorageEventConstructor StorageEvent;
    [Conditional=INPUT_SPEECH] attribute SpeechInputEventConstructor SpeechInputEvent;
    [Conditional=WEBGL] attribute WebGLContextEventConstructor WebGLContextEvent;
    [EnabledAtRuntime=requestAutocomplete] attribute AutocompleteErrorEventConstructor AutocompleteErrorEvent;
    [EnabledAtRuntime=experimentalContentSecurityPolicyFeatures] attribute SecurityPolicyViolationEventConstructor SecurityPolicyViolationEvent;

    attribute EventExceptionConstructor EventException;

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

    attribute WebKitCSSMatrixConstructor WebKitCSSMatrix; // Usable with the new operator

    attribute DOMPointConstructor WebKitPoint; // Usable with new the operator

    attribute ClipboardConstructor Clipboard;

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

    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

    attribute DOMFormDataConstructor FormData;

    attribute FileErrorConstructor FileError;
    attribute FileReaderConstructor FileReader;

    attribute DOMURLConstructor URL;
    attribute DOMURLConstructor webkitURL; // FIXME: deprecate this.

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

    [EnabledAtRuntime=mediaSource] attribute MediaSourceConstructor WebKitMediaSource;
    [EnabledAtRuntime=mediaSource] attribute SourceBufferConstructor WebKitSourceBuffer;
    [EnabledAtRuntime=mediaSource] attribute SourceBufferListConstructor WebKitSourceBufferList;

    // window.toString() requires special handling in V8
    [DoNotCheckSignature, DoNotCheckSecurity, Custom, NotEnumerable] DOMString toString();
};

