/*
 * Copyright (C) 2006, 2007, 2008, 2009 Apple 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 [
        CheckDomainSecurity,
        CustomDefineGetter,
        CustomDefineSetter,
        CustomDeleteProperty,
        CustomGetOwnPropertySlot,
        CustomGetPropertyNames,
        CustomLookupGetter,
        CustomLookupSetter,
        CustomMarkFunction,
        CustomNativeConverter,
        CustomPutFunction,
        EventTarget,
        ExtendsDOMGlobalObject,
        GenerateNativeConverter,
        ReplaceableConstructor,
        LegacyParent=JSDOMWindowBase
    ] DOMWindow {
        // DOM Level 0
        attribute [Replaceable] Screen screen;
        readonly attribute [DoNotCheckDomainSecurity, JSCCustomGetter] 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;
        attribute [DoNotCheckDomainSecurity, JSCCustom, V8CustomSetter, V8DisallowShadowing, CPPCustom] Location location;

        attribute [Replaceable, CustomGetter, V8CustomSetter] Event event;


        DOMSelection getSelection();

        readonly attribute [CheckNodeSecurity] Element frameElement;

        [DoNotCheckDomainSecurity] void focus();
        [DoNotCheckDomainSecurity] void blur();
        [DoNotCheckDomainSecurity, 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 DOMString message);
        boolean confirm(in DOMString message);
        [ConvertNullStringTo=Null] DOMString prompt(in DOMString message,
                                                    in [ConvertUndefinedOrNullToNullString] DOMString defaultValue);

        boolean find(in DOMString string,
                     in boolean caseSensitive,
                     in boolean backwards,
                     in boolean wrap,
                     in boolean wholeWord,
                     in boolean searchInFrames,
                     in 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;

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

        readonly attribute [DoNotCheckDomainSecurity] boolean closed;

        attribute [Replaceable, DoNotCheckDomainSecurityOnGet] 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, DoNotCheckDomainSecurityOnGet] DOMWindow self;
        readonly attribute [DoNotCheckDomainSecurity, V8DisallowShadowing] DOMWindow window;
        attribute [Replaceable, DoNotCheckDomainSecurityOnGet] DOMWindow frames;

        attribute [Replaceable, DoNotCheckDomainSecurityOnGet, V8CustomSetter] DOMWindow opener;
        attribute [Replaceable, DoNotCheckDomainSecurityOnGet] DOMWindow parent;
        attribute [Replaceable, DoNotCheckDomainSecurityOnGet, V8DisallowShadowing, 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 Element element,
                                             in [ConvertUndefinedOrNullToNullString] DOMString pseudoElement);

        // WebKit extensions
#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
        CSSRuleList getMatchedCSSRules(in Element element,
                                       in DOMString pseudoElement);
#endif

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

#if defined(ENABLE_OFFLINE_WEB_APPLICATIONS) && ENABLE_OFFLINE_WEB_APPLICATIONS
        readonly attribute [EnabledAtRuntime] DOMApplicationCache applicationCache;
#endif    
#if defined(ENABLE_DATABASE) && ENABLE_DATABASE
        [EnabledAtRuntime, RequiresAllArguments=Raise] Database openDatabase(in DOMString name, in DOMString version, in DOMString displayName, in unsigned long estimatedSize, in [Callback, Optional] DatabaseCallback creationCallback)
            raises(DOMException);
#endif
#if defined(ENABLE_DOM_STORAGE) && ENABLE_DOM_STORAGE
        readonly attribute [EnabledAtRuntime] Storage sessionStorage
            getter raises(DOMException);
        readonly attribute [EnabledAtRuntime] Storage localStorage
            getter raises(DOMException);
#endif
#if defined(ENABLE_NOTIFICATIONS) && ENABLE_NOTIFICATIONS
        readonly attribute [EnabledAtRuntime] NotificationCenter webkitNotifications;
#endif
#if defined(ENABLE_INDEXED_DATABASE) && ENABLE_INDEXED_DATABASE
        readonly attribute [EnabledAtRuntime] IDBFactory webkitIndexedDB;

        attribute [EnabledAtRuntime] IDBCursorConstructor webkitIDBCursor;
        attribute [EnabledAtRuntime] IDBDatabaseConstructor webkitIDBDatabase;
        attribute [EnabledAtRuntime] IDBDatabaseErrorConstructor webkitIDBDatabaseError;
        attribute [EnabledAtRuntime] IDBDatabaseExceptionConstructor webkitIDBDatabaseException;
        attribute [EnabledAtRuntime] IDBFactoryConstructor webkitIDBFactory;
        attribute [EnabledAtRuntime] IDBIndexConstructor webkitIDBIndex;
        attribute [EnabledAtRuntime] IDBKeyRangeConstructor webkitIDBKeyRange;
        attribute [EnabledAtRuntime] IDBObjectStoreConstructor webkitIDBObjectStore;
        attribute [EnabledAtRuntime] IDBRequestConstructor webkitIDBRequest;
        attribute [EnabledAtRuntime] IDBTransactionConstructor webkitIDBTransaction;
#endif
#if defined(ENABLE_FILE_SYSTEM) && ENABLE_FILE_SYSTEM
        const unsigned short TEMPORARY = 0;
        const unsigned short PERSISTENT = 1;
        [EnabledAtRuntime=FileSystem] void webkitRequestFileSystem(in unsigned short type, in long long size, in [Callback, Optional] FileSystemCallback successCallback, in [Callback, Optional] ErrorCallback errorCallback);
        [EnabledAtRuntime=FileSystem] void webkitResolveLocalFileSystemURL(in DOMString url, in [Callback, Optional] EntryCallback successCallback, in [Callback, Optional] ErrorCallback errorCallback);

        attribute [EnabledAtRuntime=FileSystem] WebKitFlagsConstructor WebKitFlags;
#endif

#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
        [DoNotCheckDomainSecurity, Custom] void postMessage(in SerializedScriptValue message, in [Optional] Array messagePorts, in DOMString targetOrigin)
            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.
        [DoNotCheckDomainSecurity, 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 TimeoutHandler handler, in long timeout);
        // [Custom] long setTimeout(in TimeoutHandler handler, in long timeout, arguments...);
        // [Custom] long setTimeout(in DOMString code, in long timeout);
        void clearTimeout(in 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 long handle);

#if defined(ENABLE_REQUEST_ANIMATION_FRAME)
        // WebKit animation extensions
        long webkitRequestAnimationFrame(in [Callback] RequestAnimationFrameCallback callback, in Element element);
        void webkitCancelRequestAnimationFrame(in long id);
#endif

        // Base64
        DOMString atob(in [ConvertNullToNullString] DOMString string)
            raises(DOMException);
        DOMString btoa(in [ConvertNullToNullString] 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,EnabledAtRuntime] EventListener ontouchstart;
        attribute [Conditional=TOUCH_EVENTS,EnabledAtRuntime] EventListener ontouchmove;
        attribute [Conditional=TOUCH_EVENTS,EnabledAtRuntime] EventListener ontouchend;
        attribute [Conditional=TOUCH_EVENTS,EnabledAtRuntime] EventListener ontouchcancel;

        attribute [Conditional=DEVICE_ORIENTATION,EnabledAtRuntime] DeviceMotionEventConstructor DeviceMotionEvent;
        attribute [Conditional=DEVICE_ORIENTATION,EnabledAtRuntime] EventListener ondevicemotion;
        attribute [Conditional=DEVICE_ORIENTATION,EnabledAtRuntime] DeviceOrientationEventConstructor DeviceOrientationEvent;
        attribute [Conditional=DEVICE_ORIENTATION,EnabledAtRuntime] EventListener ondeviceorientation;

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

        [V8Custom=DOMWindowNOP] void captureEvents(/*in long eventFlags*/);
        [V8Custom=DOMWindowNOP] 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;

        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 HTMLDocumentConstructor HTMLDocument;

        attribute HTMLElementConstructor HTMLElement;
        attribute HTMLAnchorElementConstructor HTMLAnchorElement;
        attribute HTMLAppletElementConstructor HTMLAppletElement;
        attribute HTMLAreaElementConstructor HTMLAreaElement;
        attribute HTMLBRElementConstructor HTMLBRElement;
        attribute HTMLBaseElementConstructor HTMLBaseElement;
        attribute HTMLBaseFontElementConstructor HTMLBaseFontElement;
        attribute HTMLBlockquoteElementConstructor HTMLBlockquoteElement;
        attribute HTMLBodyElementConstructor HTMLBodyElement;
        attribute HTMLButtonElementConstructor HTMLButtonElement;
        attribute HTMLCanvasElementConstructor HTMLCanvasElement;
        attribute [Conditional=DATAGRID] HTMLDataGridElementConstructor HTMLDataGridElement;
        attribute [Conditional=DATAGRID] HTMLDataGridCellElementConstructor HTMLDataGridCellElement;
        attribute [Conditional=DATAGRID] HTMLDataGridColElementConstructor HTMLDataGridColElement;
        attribute HTMLDListElementConstructor HTMLDListElement;
        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 HTMLIsIndexElementConstructor HTMLIsIndexElement;
        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 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 [CustomGetter] HTMLImageElementConstructor Image; // Usable with new operator
        attribute [CustomGetter] HTMLOptionElementConstructor Option; // Usable with new operator

        attribute CanvasPatternConstructor CanvasPattern;
        attribute CanvasGradientConstructor CanvasGradient;
        attribute CanvasRenderingContext2DConstructor CanvasRenderingContext2D;
        attribute ImageDataConstructor ImageData;
        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] WebGLTextureConstructor WebGLTexture;
        attribute [Conditional=WEBGL] WebGLUniformLocationConstructor WebGLUniformLocation;
        attribute TextMetricsConstructor TextMetrics;

        attribute DOMStringMapConstructor DOMStringMap;

        attribute [JSCCustomGetter] ArrayBufferConstructor ArrayBuffer; // Usable with new operator
        attribute [JSCCustomGetter] Int8ArrayConstructor Int8Array; // Usable with new operator
        attribute [JSCCustomGetter] Uint8ArrayConstructor Uint8Array; // Usable with new operator
        attribute [JSCCustomGetter] Int16ArrayConstructor Int16Array; // Usable with new operator
        attribute [JSCCustomGetter] Uint16ArrayConstructor Uint16Array; // Usable with new operator
        attribute [JSCCustomGetter] Int32ArrayConstructor Int32Array; // Usable with new operator
        attribute [JSCCustomGetter] Uint32ArrayConstructor Uint32Array; // Usable with new operator
        attribute [JSCCustomGetter] Float32ArrayConstructor Float32Array; // Usable with new operator
        attribute [JSCCustomGetter] Float64ArrayConstructor Float64Array; // Usable with new operator 
        attribute [JSCCustomGetter] DataViewConstructor DataView; // Usable with new operator

        attribute [JSCCustomGetter,Conditional=WEB_AUDIO,EnabledAtRuntime] AudioContextConstructor webkitAudioContext; // Usable with new operator
        attribute [Conditional=WEB_AUDIO] AudioPannerNodeConstructor webkitAudioPannerNode; // Needed for panning model constants

        attribute EventConstructor Event;
        attribute BeforeLoadEventConstructor BeforeLoadEvent;
        attribute HashChangeEventConstructor HashChangeEvent;
        attribute KeyboardEventConstructor KeyboardEvent;
        attribute MouseEventConstructor MouseEvent;
        attribute MutationEventConstructor MutationEvent;
        attribute OverflowEventConstructor OverflowEvent;
        attribute PageTransitionEventConstructor PageTransitionEvent;
        attribute ProgressEventConstructor ProgressEvent;
        attribute TextEventConstructor TextEvent;
        attribute UIEventConstructor UIEvent;
        attribute WebKitAnimationEventConstructor WebKitAnimationEvent;
        attribute WebKitTransitionEventConstructor WebKitTransitionEvent;
        attribute WheelEventConstructor WheelEvent;
        attribute MessageEventConstructor MessageEvent;
        attribute EventExceptionConstructor EventException;

        attribute WebKitCSSKeyframeRuleConstructor WebKitCSSKeyframeRule;
        attribute WebKitCSSKeyframesRuleConstructor WebKitCSSKeyframesRule;

        attribute [JSCCustomGetter] WebKitCSSMatrixConstructor WebKitCSSMatrix; // Usable with the new operator

        attribute [JSCCustomGetter] WebKitPointConstructor WebKitPoint; // Usable with new the operator

        attribute ClipboardConstructor Clipboard;

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

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

#if ENABLE_EVENTSOURCE
        attribute [JSCCustomGetter] EventSourceConstructor EventSource; // Usable with new the operator
#endif

        // 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 [JSCCustomGetter] XMLHttpRequestConstructor XMLHttpRequest; // Usable with the new operator
        attribute XMLHttpRequestUploadConstructor XMLHttpRequestUpload;
        attribute XMLHttpRequestExceptionConstructor XMLHttpRequestException;

        attribute [JSCCustomGetter,Conditional=XSLT] XSLTProcessorConstructor XSLTProcessor; // Usable with the new operator

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

#if defined(ENABLE_WORKERS) && ENABLE_WORKERS
        attribute [JSCCustomGetter] WorkerConstructor Worker; // Usable with the new operator
#endif

#if defined(ENABLE_SHARED_WORKERS) && ENABLE_SHARED_WORKERS
        attribute [JSCCustomGetter, EnabledAtRuntime] SharedWorkerConstructor SharedWorker; // Usable with the new operator
#endif

#if defined(ENABLE_WEB_SOCKETS) && ENABLE_WEB_SOCKETS
        attribute [JSCCustomGetter,EnabledAtRuntime] WebSocketConstructor WebSocket; // Usable with the new operator
#endif

        attribute DOMPluginConstructor Plugin;
        attribute DOMPluginArrayConstructor PluginArray;

        attribute DOMMimeTypeConstructor MimeType;
        attribute DOMMimeTypeArrayConstructor MimeTypeArray;

        attribute ClientRectConstructor ClientRect;
        attribute ClientRectListConstructor ClientRectList;

#if defined(ENABLE_DOM_STORAGE) && ENABLE_DOM_STORAGE
        attribute StorageConstructor Storage;
        attribute StorageEventConstructor StorageEvent;
#endif

        attribute [CustomGetter, Conditional=VIDEO, EnabledAtRuntime] HTMLAudioElementConstructor Audio; // Usable with the new operator
        attribute [Conditional=VIDEO, EnabledAtRuntime] HTMLAudioElementConstructor HTMLAudioElement;
        attribute [Conditional=VIDEO, EnabledAtRuntime] HTMLMediaElementConstructor HTMLMediaElement;
        attribute [Conditional=VIDEO, EnabledAtRuntime] HTMLVideoElementConstructor HTMLVideoElement;
        attribute [Conditional=VIDEO, EnabledAtRuntime] MediaErrorConstructor MediaError;
        attribute [Conditional=VIDEO, EnabledAtRuntime] TimeRangesConstructor TimeRanges;

        attribute WebKitAnimationConstructor WebKitAnimation;
        attribute WebKitAnimationListConstructor WebKitAnimationList;

#if defined(ENABLE_XPATH) && ENABLE_XPATH
        attribute XPathEvaluatorConstructor XPathEvaluator;
        attribute XPathResultConstructor XPathResult;
        attribute XPathExceptionConstructor XPathException;
#endif

#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 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 SVGZoomEventConstructor SVGZoomEvent;

#if defined(ENABLE_SVG_ANIMATION) && ENABLE_SVG_ANIMATION
        attribute SVGAnimateColorElementConstructor SVGAnimateColorElement;
        attribute SVGAnimateElementConstructor SVGAnimateElement;
//      attribute SVGAnimateMotionElementConstructor SVGAnimateMotionElement;
        attribute SVGAnimateTransformElementConstructor SVGAnimateTransformElement;
//      attribute SVGMPathElementConstructor SVGMPathElement;
        attribute SVGSetElementConstructor SVGSetElement;
#endif

#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_SVG_FOREIGN_OBJECT) && ENABLE_SVG_FOREIGN_OBJECT
        attribute SVGForeignObjectElementConstructor SVGForeignObjectElement;
#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 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 [Conditional=DATABASE] SQLExceptionConstructor SQLException;

        attribute [Conditional=TOUCH_EVENTS] TouchEventConstructor TouchEvent;

        attribute DOMFormDataConstructor FormData;

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

        attribute [Conditional=BLOB] WebKitBlobBuilderConstructor WebKitBlobBuilder;

        readonly attribute [Conditional=BLOB] DOMURL webkitURL;

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

#endif // defined(LANGUAGE_JAVASCRIPT)

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

}

