summaryrefslogtreecommitdiffstats
path: root/dom/webidl/Document.webidl
diff options
context:
space:
mode:
Diffstat (limited to 'dom/webidl/Document.webidl')
-rw-r--r--dom/webidl/Document.webidl452
1 files changed, 452 insertions, 0 deletions
diff --git a/dom/webidl/Document.webidl b/dom/webidl/Document.webidl
new file mode 100644
index 000000000..c895fad39
--- /dev/null
+++ b/dom/webidl/Document.webidl
@@ -0,0 +1,452 @@
+/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * http://dxr.mozilla.org/mozilla-central/source/dom/interfaces/core/nsIDOMDocument.idl
+ */
+
+interface WindowProxy;
+interface nsISupports;
+interface URI;
+interface nsIDocShell;
+interface nsILoadGroup;
+
+enum VisibilityState { "hidden", "visible", "prerender" };
+
+/* https://dom.spec.whatwg.org/#dictdef-elementcreationoptions */
+dictionary ElementCreationOptions {
+ DOMString is;
+};
+
+/* http://dom.spec.whatwg.org/#interface-document */
+[Constructor]
+interface Document : Node {
+ [Throws]
+ readonly attribute DOMImplementation implementation;
+ [Pure, Throws]
+ readonly attribute DOMString URL;
+ [Pure, Throws]
+ readonly attribute DOMString documentURI;
+ [Pure]
+ readonly attribute DOMString compatMode;
+ [Pure]
+ readonly attribute DOMString characterSet;
+ [Pure,BinaryName="characterSet"]
+ readonly attribute DOMString charset; // legacy alias of .characterSet
+ [Pure,BinaryName="characterSet"]
+ readonly attribute DOMString inputEncoding; // legacy alias of .characterSet
+ [Pure]
+ readonly attribute DOMString contentType;
+
+ [Pure]
+ readonly attribute DocumentType? doctype;
+ [Pure]
+ readonly attribute Element? documentElement;
+ [Pure]
+ HTMLCollection getElementsByTagName(DOMString localName);
+ [Pure, Throws]
+ HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName);
+ [Pure]
+ HTMLCollection getElementsByClassName(DOMString classNames);
+ [Pure]
+ Element? getElementById(DOMString elementId);
+
+ [NewObject, Throws]
+ Element createElement(DOMString localName, optional (ElementCreationOptions or DOMString) options);
+ [NewObject, Throws]
+ Element createElementNS(DOMString? namespace, DOMString qualifiedName, optional (ElementCreationOptions or DOMString) options);
+ [NewObject]
+ DocumentFragment createDocumentFragment();
+ [NewObject]
+ Text createTextNode(DOMString data);
+ [NewObject]
+ Comment createComment(DOMString data);
+ [NewObject, Throws]
+ ProcessingInstruction createProcessingInstruction(DOMString target, DOMString data);
+
+ [Throws]
+ Node importNode(Node node, optional boolean deep = false);
+ [Throws]
+ Node adoptNode(Node node);
+
+ [NewObject, Throws]
+ Event createEvent(DOMString interface);
+
+ [NewObject, Throws]
+ Range createRange();
+
+ // NodeFilter.SHOW_ALL = 0xFFFFFFFF
+ [NewObject, Throws]
+ NodeIterator createNodeIterator(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
+ [NewObject, Throws]
+ TreeWalker createTreeWalker(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
+
+ // NEW
+ // No support for prepend/append yet
+ // void prepend((Node or DOMString)... nodes);
+ // void append((Node or DOMString)... nodes);
+
+ // These are not in the spec, but leave them for now for backwards compat.
+ // So sort of like Gecko extensions
+ [NewObject, Throws]
+ CDATASection createCDATASection(DOMString data);
+ [NewObject, Throws]
+ Attr createAttribute(DOMString name);
+ [NewObject, Throws]
+ Attr createAttributeNS(DOMString? namespace, DOMString name);
+};
+
+// http://www.whatwg.org/specs/web-apps/current-work/#the-document-object
+partial interface Document {
+ [PutForwards=href, Unforgeable] readonly attribute Location? location;
+ //(HTML only) attribute DOMString domain;
+ readonly attribute DOMString referrer;
+ //(HTML only) attribute DOMString cookie;
+ readonly attribute DOMString lastModified;
+ readonly attribute DOMString readyState;
+
+ // DOM tree accessors
+ //(Not proxy yet)getter object (DOMString name);
+ [SetterThrows, Pure]
+ attribute DOMString title;
+ [Pure]
+ attribute DOMString dir;
+ //(HTML only) attribute HTMLElement? body;
+ //(HTML only)readonly attribute HTMLHeadElement? head;
+ //(HTML only)readonly attribute HTMLCollection images;
+ //(HTML only)readonly attribute HTMLCollection embeds;
+ //(HTML only)readonly attribute HTMLCollection plugins;
+ //(HTML only)readonly attribute HTMLCollection links;
+ //(HTML only)readonly attribute HTMLCollection forms;
+ //(HTML only)readonly attribute HTMLCollection scripts;
+ //(HTML only)NodeList getElementsByName(DOMString elementName);
+ //(Not implemented)readonly attribute DOMElementMap cssElementMap;
+
+ // dynamic markup insertion
+ //(HTML only)Document open(optional DOMString type, optional DOMString replace);
+ //(HTML only)WindowProxy open(DOMString url, DOMString name, DOMString features, optional boolean replace);
+ //(HTML only)void close();
+ //(HTML only)void write(DOMString... text);
+ //(HTML only)void writeln(DOMString... text);
+
+ // user interaction
+ [Pure]
+ readonly attribute WindowProxy? defaultView;
+ readonly attribute Element? activeElement;
+ [Throws]
+ boolean hasFocus();
+ //(HTML only) attribute DOMString designMode;
+ //(HTML only)boolean execCommand(DOMString commandId);
+ //(HTML only)boolean execCommand(DOMString commandId, boolean showUI);
+ //(HTML only)boolean execCommand(DOMString commandId, boolean showUI, DOMString value);
+ //(HTML only)boolean queryCommandEnabled(DOMString commandId);
+ //(HTML only)boolean queryCommandIndeterm(DOMString commandId);
+ //(HTML only)boolean queryCommandState(DOMString commandId);
+ //(HTML only)boolean queryCommandSupported(DOMString commandId);
+ //(HTML only)DOMString queryCommandValue(DOMString commandId);
+ //(Not implemented)readonly attribute HTMLCollection commands;
+
+ // special event handler IDL attributes that only apply to Document objects
+ [LenientThis] attribute EventHandler onreadystatechange;
+
+ // Gecko extensions?
+ attribute EventHandler onwheel;
+ attribute EventHandler oncopy;
+ attribute EventHandler oncut;
+ attribute EventHandler onpaste;
+ attribute EventHandler onbeforescriptexecute;
+ attribute EventHandler onafterscriptexecute;
+
+ [Pref="dom.select_events.enabled"]
+ attribute EventHandler onselectionchange;
+
+ /**
+ * True if this document is synthetic : stand alone image, video, audio file,
+ * etc.
+ */
+ [Func="IsChromeOrXBL"] readonly attribute boolean mozSyntheticDocument;
+ /**
+ * Returns the script element whose script is currently being processed.
+ *
+ * @see <https://developer.mozilla.org/en/DOM/document.currentScript>
+ */
+ [Pure]
+ readonly attribute Element? currentScript;
+ /**
+ * Release the current mouse capture if it is on an element within this
+ * document.
+ *
+ * @see <https://developer.mozilla.org/en/DOM/document.releaseCapture>
+ */
+ void releaseCapture();
+ /**
+ * Use the given DOM element as the source image of target |-moz-element()|.
+ *
+ * This function introduces a new special ID (called "image element ID"),
+ * which is only used by |-moz-element()|, and associates it with the given
+ * DOM element. Image elements ID's have the higher precedence than general
+ * HTML id's, so if |document.mozSetImageElement(<id>, <element>)| is called,
+ * |-moz-element(#<id>)| uses |<element>| as the source image even if there
+ * is another element with id attribute = |<id>|. To unregister an image
+ * element ID |<id>|, call |document.mozSetImageElement(<id>, null)|.
+ *
+ * Example:
+ * <script>
+ * canvas = document.createElement("canvas");
+ * canvas.setAttribute("width", 100);
+ * canvas.setAttribute("height", 100);
+ * // draw to canvas
+ * document.mozSetImageElement("canvasbg", canvas);
+ * </script>
+ * <div style="background-image: -moz-element(#canvasbg);"></div>
+ *
+ * @param aImageElementId an image element ID to associate with
+ * |aImageElement|
+ * @param aImageElement a DOM element to be used as the source image of
+ * |-moz-element(#aImageElementId)|. If this is null, the function will
+ * unregister the image element ID |aImageElementId|.
+ *
+ * @see <https://developer.mozilla.org/en/DOM/document.mozSetImageElement>
+ */
+ void mozSetImageElement(DOMString aImageElementId,
+ Element? aImageElement);
+
+ [ChromeOnly]
+ readonly attribute URI? documentURIObject;
+
+ /**
+ * Current referrer policy - one of the REFERRER_POLICY_* constants
+ * from nsIHttpChannel.
+ */
+ [ChromeOnly]
+ readonly attribute unsigned long referrerPolicy;
+
+};
+
+// https://fullscreen.spec.whatwg.org/#api
+partial interface Document {
+ // Note: Per spec the 'S' in these two is lowercase, but the "Moz"
+ // versions have it uppercase.
+ [LenientSetter, Func="nsDocument::IsUnprefixedFullscreenEnabled"]
+ readonly attribute boolean fullscreen;
+ [BinaryName="fullscreen"]
+ readonly attribute boolean mozFullScreen;
+ [LenientSetter, Func="nsDocument::IsUnprefixedFullscreenEnabled"]
+ readonly attribute boolean fullscreenEnabled;
+ [BinaryName="fullscreenEnabled"]
+ readonly attribute boolean mozFullScreenEnabled;
+ [LenientSetter, Func="nsDocument::IsUnprefixedFullscreenEnabled"]
+ readonly attribute Element? fullscreenElement;
+ [BinaryName="fullscreenElement"]
+ readonly attribute Element? mozFullScreenElement;
+
+ [Func="nsDocument::IsUnprefixedFullscreenEnabled"]
+ void exitFullscreen();
+ [BinaryName="exitFullscreen"]
+ void mozCancelFullScreen();
+
+ // Events handlers
+ [Func="nsDocument::IsUnprefixedFullscreenEnabled"]
+ attribute EventHandler onfullscreenchange;
+ [Func="nsDocument::IsUnprefixedFullscreenEnabled"]
+ attribute EventHandler onfullscreenerror;
+};
+
+// https://w3c.github.io/pointerlock/#extensions-to-the-document-interface
+// https://w3c.github.io/pointerlock/#extensions-to-the-documentorshadowroot-mixin
+partial interface Document {
+ readonly attribute Element? pointerLockElement;
+ [BinaryName="pointerLockElement", Pref="pointer-lock-api.prefixed.enabled"]
+ readonly attribute Element? mozPointerLockElement;
+ void exitPointerLock();
+ [BinaryName="exitPointerLock", Pref="pointer-lock-api.prefixed.enabled"]
+ void mozExitPointerLock();
+
+ // Event handlers
+ attribute EventHandler onpointerlockchange;
+ attribute EventHandler onpointerlockerror;
+};
+
+//http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/index.html#dfn-document-register
+partial interface Document {
+ // this is deprecated from CustomElements v0
+ [Throws, Func="CustomElementRegistry::IsCustomElementEnabled"]
+ object registerElement(DOMString name, optional ElementRegistrationOptions options);
+};
+
+// http://dvcs.w3.org/hg/webperf/raw-file/tip/specs/PageVisibility/Overview.html#sec-document-interface
+partial interface Document {
+ readonly attribute boolean hidden;
+ readonly attribute VisibilityState visibilityState;
+};
+
+// http://dev.w3.org/csswg/cssom/#extensions-to-the-document-interface
+partial interface Document {
+ [Constant]
+ readonly attribute StyleSheetList styleSheets;
+ attribute DOMString? selectedStyleSheetSet;
+ readonly attribute DOMString? lastStyleSheetSet;
+ readonly attribute DOMString? preferredStyleSheetSet;
+ [Constant]
+ readonly attribute DOMStringList styleSheetSets;
+ void enableStyleSheetsForSet (DOMString? name);
+};
+
+// http://dev.w3.org/csswg/cssom-view/#extensions-to-the-document-interface
+partial interface Document {
+ Element? elementFromPoint (float x, float y);
+ sequence<Element> elementsFromPoint (float x, float y);
+ CaretPosition? caretPositionFromPoint (float x, float y);
+
+ readonly attribute Element? scrollingElement;
+};
+
+// http://dev.w3.org/2006/webapi/selectors-api2/#interface-definitions
+partial interface Document {
+ [Throws, Pure]
+ Element? querySelector(DOMString selectors);
+ [Throws, Pure]
+ NodeList querySelectorAll(DOMString selectors);
+
+ //(Not implemented)Element? find(DOMString selectors, optional (Element or sequence<Node>)? refNodes);
+ //(Not implemented)NodeList findAll(DOMString selectors, optional (Element or sequence<Node>)? refNodes);
+};
+
+// http://w3c.github.io/web-animations/#extensions-to-the-document-interface
+partial interface Document {
+ [Func="nsDocument::IsWebAnimationsEnabled"]
+ readonly attribute DocumentTimeline timeline;
+ [Func="nsDocument::IsWebAnimationsEnabled"]
+ sequence<Animation> getAnimations();
+};
+
+// https://svgwg.org/svg2-draft/struct.html#InterfaceDocumentExtensions
+partial interface Document {
+ [BinaryName="SVGRootElement"]
+ readonly attribute SVGSVGElement? rootElement;
+};
+
+// Mozilla extensions of various sorts
+partial interface Document {
+ // nsIDOMDocumentXBL. Wish we could make these [ChromeOnly], but
+ // that would likely break bindings running with the page principal.
+ [Func="IsChromeOrXBL"]
+ NodeList? getAnonymousNodes(Element elt);
+ [Func="IsChromeOrXBL"]
+ Element? getAnonymousElementByAttribute(Element elt, DOMString attrName,
+ DOMString attrValue);
+ [Func="IsChromeOrXBL"]
+ Element? getBindingParent(Node node);
+ [Throws, Func="IsChromeOrXBL", NeedsSubjectPrincipal]
+ void loadBindingDocument(DOMString documentURL);
+
+ // nsIDOMDocumentTouch
+ // XXXbz I can't find the sane spec for this stuff, so just cribbing
+ // from our xpidl for now.
+ [NewObject, Func="nsGenericHTMLElement::TouchEventsEnabled"]
+ Touch createTouch(optional Window? view = null,
+ optional EventTarget? target = null,
+ optional long identifier = 0,
+ optional long pageX = 0,
+ optional long pageY = 0,
+ optional long screenX = 0,
+ optional long screenY = 0,
+ optional long clientX = 0,
+ optional long clientY = 0,
+ optional long radiusX = 0,
+ optional long radiusY = 0,
+ optional float rotationAngle = 0,
+ optional float force = 0);
+ // XXXbz a hack to get around the fact that we don't support variadics as
+ // distinguishing arguments yet. Once this hack is removed. we can also
+ // remove the corresponding overload on nsIDocument, since Touch... and
+ // sequence<Touch> look the same in the C++.
+ [NewObject, Func="nsGenericHTMLElement::TouchEventsEnabled"]
+ TouchList createTouchList(Touch touch, Touch... touches);
+ // XXXbz and another hack for the fact that we can't usefully have optional
+ // distinguishing arguments but need a working zero-arg form of
+ // createTouchList().
+ [NewObject, Func="nsGenericHTMLElement::TouchEventsEnabled"]
+ TouchList createTouchList();
+ [NewObject, Func="nsGenericHTMLElement::TouchEventsEnabled"]
+ TouchList createTouchList(sequence<Touch> touches);
+
+ [ChromeOnly]
+ attribute boolean styleSheetChangeEventsEnabled;
+
+ [ChromeOnly, Throws]
+ void obsoleteSheet(URI sheetURI);
+ [ChromeOnly, Throws]
+ void obsoleteSheet(DOMString sheetURI);
+
+ [ChromeOnly] readonly attribute nsIDocShell? docShell;
+
+ [ChromeOnly] readonly attribute DOMString contentLanguage;
+
+ [ChromeOnly] readonly attribute nsILoadGroup? documentLoadGroup;
+
+ // like documentURI, except that for error pages, it returns the URI we were
+ // trying to load when we hit an error, rather than the error page's own URI.
+ [ChromeOnly] readonly attribute URI? mozDocumentURIIfNotForErrorPages;
+};
+
+// Extension to give chrome JS the ability to determine when a document was
+// created to satisfy an iframe with srcdoc attribute.
+partial interface Document {
+ [ChromeOnly] readonly attribute boolean isSrcdocDocument;
+};
+
+
+// Extension to give chrome JS the ability to get the underlying
+// sandbox flag attribute
+partial interface Document {
+ [ChromeOnly] readonly attribute DOMString? sandboxFlagsAsString;
+};
+
+
+/**
+ * Chrome document anonymous content management.
+ * This is a Chrome-only API that allows inserting fixed positioned anonymous
+ * content on top of the current page displayed in the document.
+ * The supplied content is cloned and inserted into the document's CanvasFrame.
+ * Note that this only works for HTML documents.
+ */
+partial interface Document {
+ /**
+ * Deep-clones the provided element and inserts it into the CanvasFrame.
+ * Returns an AnonymousContent instance that can be used to manipulate the
+ * inserted element.
+ */
+ [ChromeOnly, NewObject, Throws]
+ AnonymousContent insertAnonymousContent(Element aElement);
+
+ /**
+ * Removes the element inserted into the CanvasFrame given an AnonymousContent
+ * instance.
+ */
+ [ChromeOnly, Throws]
+ void removeAnonymousContent(AnonymousContent aContent);
+};
+
+// Extension to give chrome JS the ability to determine whether
+// the user has interacted with the document or not.
+partial interface Document {
+ [ChromeOnly] readonly attribute boolean userHasInteracted;
+};
+
+// Extension to give chrome and XBL JS the ability to determine whether
+// the document is sandboxed without permission to run scripts
+// and whether inline scripts are blocked by the document's CSP.
+partial interface Document {
+ [Func="IsChromeOrXBL"] readonly attribute boolean hasScriptsBlockedBySandbox;
+ [Func="IsChromeOrXBL"] readonly attribute boolean inlineScriptAllowedByCSP;
+};
+
+Document implements XPathEvaluator;
+Document implements GlobalEventHandlers;
+Document implements TouchEventHandlers;
+Document implements ParentNode;
+Document implements OnErrorEventHandlerForNodes;
+Document implements GeometryUtils;
+Document implements FontFaceSource;