Fast path for casting JSValue to JSDocument*.
[WebKit-https.git] / Source / WebCore / dom / Document.idl
1 /*
2  * Copyright (C) 2006, 2007, 2011 Apple Inc. All rights reserved.
3  * Copyright (C) 2006, 2007 Samuel Weinig <sam@webkit.org>
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public License
16  * along with this library; see the file COPYING.LIB.  If not, write to
17  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  */
20
21 [
22     Constructor,
23     ConstructorCallWith=ScriptExecutionContext,
24     CustomToJSObject,
25     JSCustomHeader,
26     JSGenerateToNativeObject,
27 ] interface Document : Node {
28
29     // DOM Level 1 Core
30     readonly attribute DocumentType doctype;
31     readonly attribute DOMImplementation implementation;
32     readonly attribute Element documentElement;
33
34     [ReturnNewObject, RaisesException] Element createElement([TreatNullAs=NullString,Default=Undefined] optional DOMString tagName);
35     DocumentFragment   createDocumentFragment();
36     [ReturnNewObject] Text createTextNode([Default=Undefined] optional DOMString data);
37     [ReturnNewObject] Comment createComment([Default=Undefined] optional DOMString data);
38     [ReturnNewObject, RaisesException] CDATASection createCDATASection([Default=Undefined] optional DOMString data);
39     [ObjCLegacyUnnamedParameters, ReturnNewObject, RaisesException] ProcessingInstruction createProcessingInstruction([Default=Undefined] optional DOMString target,
40                                                                                  [Default=Undefined] optional DOMString data);
41     [ReturnNewObject, RaisesException] Attr createAttribute([Default=Undefined] optional DOMString name);
42     [ReturnNewObject, RaisesException] EntityReference createEntityReference([Default=Undefined] optional DOMString name);
43     NodeList getElementsByTagName([Default=Undefined] optional DOMString tagname);
44
45     // Introduced in DOM Level 2:
46
47     [ObjCLegacyUnnamedParameters, ReturnNewObject, RaisesException] Node importNode([Default=Undefined] optional Node importedNode,
48                     optional boolean deep);
49     [ObjCLegacyUnnamedParameters, ReturnNewObject, RaisesException] Element createElementNS([TreatNullAs=NullString,Default=Undefined] optional DOMString namespaceURI,
50                             [TreatNullAs=NullString,Default=Undefined] optional DOMString qualifiedName);
51     [ObjCLegacyUnnamedParameters, ReturnNewObject, RaisesException] Attr createAttributeNS([TreatNullAs=NullString,Default=Undefined] optional DOMString namespaceURI,
52                                                                           [TreatNullAs=NullString,Default=Undefined] optional DOMString qualifiedName);
53     [ObjCLegacyUnnamedParameters] NodeList getElementsByTagNameNS([TreatNullAs=NullString,Default=Undefined] optional DOMString namespaceURI,
54                                                    [Default=Undefined] optional DOMString localName);
55     Element getElementById([Default=Undefined,ObjCExplicitAtomicString,RequiresExistingAtomicString] optional DOMString elementId);
56
57     // DOM Level 3 Core
58
59     [TreatReturnedNullStringAs=Null] readonly attribute DOMString inputEncoding;
60
61     [TreatReturnedNullStringAs=Null] readonly attribute DOMString xmlEncoding;
62     [TreatReturnedNullStringAs=Null, TreatNullAs=NullString, SetterRaisesException] attribute DOMString xmlVersion;
63     [SetterRaisesException] attribute boolean xmlStandalone;
64
65     [RaisesException] Node               adoptNode([Default=Undefined] optional Node source);
66
67 #if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C || defined(LANGUAGE_GOBJECT) && LANGUAGE_GOBJECT
68     // document.documentURI was writable in DOM3 Core, but is read-only in DOM4
69     // (see http://www.w3.org/TR/2011/WD-dom-20110915/#document). We need to keep
70     // the writable version around for Objective C clients, but are moving to
71     // read-only for other clients.
72              [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] attribute DOMString documentURI;
73 #else
74     [TreatReturnedNullStringAs=Null] readonly attribute DOMString documentURI;
75 #endif
76
77     // DOM Level 2 Events (DocumentEvents interface)
78
79     [RaisesException] Event              createEvent([Default=Undefined] optional DOMString eventType);
80
81     // DOM Level 2 Tranversal and Range (DocumentRange interface)
82
83     Range              createRange();
84
85     // DOM Level 2 Tranversal and Range (DocumentTraversal interface)
86
87     [ObjCLegacyUnnamedParameters, RaisesException] NodeIterator createNodeIterator([Default=Undefined] optional Node root,
88                                                    [Default=Undefined] optional unsigned long whatToShow,
89                                                    [Default=Undefined] optional NodeFilter filter,
90                                                    [Default=Undefined] optional boolean expandEntityReferences);
91     [ObjCLegacyUnnamedParameters, RaisesException] TreeWalker createTreeWalker([Default=Undefined] optional Node root,
92                                                [Default=Undefined] optional unsigned long whatToShow,
93                                                [Default=Undefined] optional NodeFilter filter,
94                                                [Default=Undefined] optional boolean expandEntityReferences);
95
96     // DOM Level 2 Abstract Views (DocumentView interface)
97
98     readonly attribute DOMWindow defaultView;
99
100     // DOM Level 2 Style (DocumentStyle interface)
101
102     readonly attribute StyleSheetList styleSheets;
103
104     // DOM Level 2 Style (DocumentCSS interface)
105
106     [ObjCLegacyUnnamedParameters] CSSStyleDeclaration getOverrideStyle([Default=Undefined] optional Element element,
107                                                         [Default=Undefined] optional DOMString pseudoElement);
108
109     readonly attribute DOMString contentType;
110
111     // DOM Level 3 XPath (XPathEvaluator interface)
112     [ObjCLegacyUnnamedParameters, RaisesException] XPathExpression createExpression([Default=Undefined] optional DOMString expression,
113                                                     [Default=Undefined] optional XPathNSResolver resolver);
114     XPathNSResolver    createNSResolver(Node nodeResolver);
115     [ObjCLegacyUnnamedParameters, RaisesException] XPathResult evaluate([Default=Undefined] optional DOMString expression,
116                                                   [Default=Undefined] optional Node contextNode,
117                                                   [Default=Undefined] optional XPathNSResolver resolver,
118                                                   [Default=Undefined] optional unsigned short type,
119                                                   [Default=Undefined] optional XPathResult inResult);
120
121     // Common extensions
122     boolean            execCommand([Default=Undefined] optional DOMString command,
123                                    [Default=Undefined] optional boolean userInterface,
124                                    [TreatNullAs=NullString, TreatUndefinedAs=NullString, Default=Undefined] optional DOMString value);
125
126 #if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
127     // FIXME: remove the these two versions once optional is implemented for Objective-C.
128     boolean            execCommand(DOMString command,
129                                    boolean userInterface);
130     boolean            execCommand(DOMString command);
131 #endif
132
133     boolean            queryCommandEnabled([Default=Undefined] optional DOMString command);
134     boolean            queryCommandIndeterm([Default=Undefined] optional DOMString command);
135     boolean            queryCommandState([Default=Undefined] optional DOMString command);
136     boolean            queryCommandSupported([Default=Undefined] optional DOMString command);
137     DOMString          queryCommandValue([Default=Undefined] optional DOMString command);
138
139     // Moved down from HTMLDocument
140
141              [TreatNullAs=NullString] attribute DOMString title;
142     readonly attribute DOMString referrer;
143 #if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
144     [TreatNullAs=NullString, SetterRaisesException] attribute DOMString domain;
145 #else
146     readonly attribute DOMString domain;
147 #endif
148     readonly attribute DOMString URL;
149
150     [TreatNullAs=NullString, GetterRaisesException, SetterRaisesException] attribute DOMString cookie;
151
152     [SetterRaisesException] attribute HTMLElement body;
153
154     readonly attribute HTMLHeadElement head;
155     readonly attribute HTMLCollection images;
156     readonly attribute HTMLCollection applets;
157     readonly attribute HTMLCollection links;
158     readonly attribute HTMLCollection forms;
159     readonly attribute HTMLCollection anchors;
160     readonly attribute DOMString lastModified;
161
162     NodeList getElementsByName([Default=Undefined,AtomicString] optional DOMString elementName);
163
164 #if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
165              [Custom] attribute Location location;
166 #endif
167
168     // IE extensions
169
170              [TreatReturnedNullStringAs=Undefined, TreatNullAs=NullString] attribute DOMString charset;
171     [TreatReturnedNullStringAs=Undefined] readonly attribute DOMString defaultCharset;
172     [TreatReturnedNullStringAs=Undefined] readonly attribute DOMString readyState;
173
174     Element            elementFromPoint([Default=Undefined] optional long x, 
175                                         [Default=Undefined] optional long y);
176     Range              caretRangeFromPoint([Default=Undefined] optional long x, 
177                                            [Default=Undefined] optional long y);
178
179     // Mozilla extensions
180 #if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
181     DOMSelection       getSelection();
182 #endif
183     [TreatReturnedNullStringAs=Null] readonly attribute DOMString characterSet;
184
185     // WebKit extensions
186
187     [TreatReturnedNullStringAs=Null] readonly attribute DOMString preferredStylesheetSet;
188              [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] attribute DOMString selectedStylesheetSet;
189
190 #if !defined(LANGUAGE_JAVASCRIPT) || !LANGUAGE_JAVASCRIPT
191     CSSStyleDeclaration createCSSStyleDeclaration();
192 #endif
193
194 #if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
195     // DOM Level 2 Style Interface
196     [ObjCLegacyUnnamedParameters, ObjCUseDefaultView] CSSStyleDeclaration getComputedStyle(Element element,
197                                                                   DOMString pseudoElement);
198
199     // WebKit extension
200     // FIXME: remove the first version once optional is implemented for Objective-C.
201     [ObjCUseDefaultView] CSSRuleList getMatchedCSSRules(Element element,
202                                               DOMString pseudoElement);
203     [ObjCUseDefaultView] CSSRuleList getMatchedCSSRules(Element element,
204                                               DOMString pseudoElement,
205                                               optional boolean authorOnly);
206                                               
207 #endif
208
209 #if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C
210     CanvasRenderingContext getCSSCanvasContext(DOMString contextId, DOMString name, long width, long height);
211 #endif
212
213     // HTML 5
214     NodeList getElementsByClassName([Default=Undefined] optional DOMString tagname);
215
216     readonly attribute Element activeElement;
217     boolean hasFocus();
218
219     readonly attribute DOMString compatMode;
220
221     // NodeSelector - Selector API
222     [RaisesException] Element querySelector(DOMString selectors);
223     [RaisesException] NodeList querySelectorAll(DOMString selectors);
224
225 #if defined(ENABLE_FULLSCREEN_API) && ENABLE_FULLSCREEN_API
226     // Mozilla version
227     readonly attribute boolean webkitIsFullScreen;
228     readonly attribute boolean webkitFullScreenKeyboardInputAllowed;
229     readonly attribute Element webkitCurrentFullScreenElement;
230     void webkitCancelFullScreen();
231
232     // W3C version
233     readonly attribute boolean webkitFullscreenEnabled;
234     readonly attribute Element webkitFullscreenElement;
235     void webkitExitFullscreen();
236 #endif
237
238     [Conditional=POINTER_LOCK] void exitPointerLock();
239     [Conditional=POINTER_LOCK] readonly attribute Element pointerLockElement;
240
241     [Conditional=CSS_REGIONS] DOMNamedFlowCollection webkitGetNamedFlows();
242
243 #if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
244     [Conditional=FONT_LOAD_EVENTS] readonly attribute FontLoader fonts;
245 #endif
246
247 #if (!defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C) && (!defined(LANGUAGE_GOBJECT) || !LANGUAGE_GOBJECT)
248     // Event handler DOM attributes
249     [NotEnumerable] attribute EventListener onabort;
250     [NotEnumerable] attribute EventListener onblur;
251     [NotEnumerable] attribute EventListener onchange;
252     [NotEnumerable] attribute EventListener onclick;
253     [NotEnumerable] attribute EventListener oncontextmenu;
254     [NotEnumerable] attribute EventListener ondblclick;
255     [NotEnumerable] attribute EventListener ondrag;
256     [NotEnumerable] attribute EventListener ondragend;
257     [NotEnumerable] attribute EventListener ondragenter;
258     [NotEnumerable] attribute EventListener ondragleave;
259     [NotEnumerable] attribute EventListener ondragover;
260     [NotEnumerable] attribute EventListener ondragstart;
261     [NotEnumerable] attribute EventListener ondrop;
262     [NotEnumerable] attribute EventListener onerror;
263     [NotEnumerable] attribute EventListener onfocus;
264     [NotEnumerable] attribute EventListener oninput;
265     [NotEnumerable] attribute EventListener oninvalid;
266     [NotEnumerable] attribute EventListener onkeydown;
267     [NotEnumerable] attribute EventListener onkeypress;
268     [NotEnumerable] attribute EventListener onkeyup;
269     [NotEnumerable] attribute EventListener onload;
270     [NotEnumerable] attribute EventListener onmousedown;
271     [NotEnumerable] attribute EventListener onmouseenter;
272     [NotEnumerable] attribute EventListener onmouseleave;
273     [NotEnumerable] attribute EventListener onmousemove;
274     [NotEnumerable] attribute EventListener onmouseout;
275     [NotEnumerable] attribute EventListener onmouseover;
276     [NotEnumerable] attribute EventListener onmouseup;
277     [NotEnumerable] attribute EventListener onmousewheel;
278     [NotEnumerable] attribute EventListener onreadystatechange;
279     [NotEnumerable] attribute EventListener onscroll;
280     [NotEnumerable] attribute EventListener onselect;
281     [NotEnumerable] attribute EventListener onsubmit;
282     [NotEnumerable] attribute EventListener onwheel;
283
284     // [NotEnumerable] attribute EventListener oncanplay;
285     // [NotEnumerable] attribute EventListener oncanplaythrough;
286     // [NotEnumerable] attribute EventListener ondurationchange;
287     // [NotEnumerable] attribute EventListener onemptied;
288     // [NotEnumerable] attribute EventListener onended;
289     // [NotEnumerable] attribute EventListener onloadeddata;
290     // [NotEnumerable] attribute EventListener onloadedmetadata;
291     // [NotEnumerable] attribute EventListener onloadstart;
292     // [NotEnumerable] attribute EventListener onpause;
293     // [NotEnumerable] attribute EventListener onplay;
294     // [NotEnumerable] attribute EventListener onplaying;
295     // [NotEnumerable] attribute EventListener onprogress;
296     // [NotEnumerable] attribute EventListener onratechange;
297     // [NotEnumerable] attribute EventListener onseeked;
298     // [NotEnumerable] attribute EventListener onseeking;
299     // [NotEnumerable] attribute EventListener onshow;
300     // [NotEnumerable] attribute EventListener onstalled;
301     // [NotEnumerable] attribute EventListener onsuspend;
302     // [NotEnumerable] attribute EventListener ontimeupdate;
303     // [NotEnumerable] attribute EventListener onvolumechange;
304     // [NotEnumerable] attribute EventListener onwaiting;
305
306     // WebKit extensions
307     [NotEnumerable] attribute EventListener onbeforecut;
308     [NotEnumerable] attribute EventListener oncut;
309     [NotEnumerable] attribute EventListener onbeforecopy;
310     [NotEnumerable] attribute EventListener oncopy;
311     [NotEnumerable] attribute EventListener onbeforepaste;
312     [NotEnumerable] attribute EventListener onpaste;
313     [NotEnumerable] attribute EventListener onreset;
314     [NotEnumerable] attribute EventListener onsearch;
315     [NotEnumerable] attribute EventListener onselectstart;
316     [NotEnumerable] attribute EventListener onselectionchange;
317     [NotEnumerable,Conditional=TOUCH_EVENTS] attribute EventListener ontouchstart;
318     [NotEnumerable,Conditional=TOUCH_EVENTS] attribute EventListener ontouchmove;
319     [NotEnumerable,Conditional=TOUCH_EVENTS] attribute EventListener ontouchend;
320     [NotEnumerable,Conditional=TOUCH_EVENTS] attribute EventListener ontouchcancel;
321     [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventListener onwebkitfullscreenchange;
322     [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventListener onwebkitfullscreenerror;
323     [NotEnumerable, Conditional=POINTER_LOCK] attribute EventListener onpointerlockchange;
324     [NotEnumerable, Conditional=POINTER_LOCK] attribute EventListener onpointerlockerror;
325     [NotEnumerable, Conditional=CSP_NEXT] attribute EventListener onsecuritypolicyviolation;
326     [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventListener onwebkitwillrevealbottom;
327     [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventListener onwebkitwillrevealleft;
328     [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventListener onwebkitwillrevealright;
329     [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventListener onwebkitwillrevealtop;
330 #endif
331
332 #if defined(ENABLE_IOS_TOUCH_EVENTS) && ENABLE_IOS_TOUCH_EVENTS
333 #include <WebKitAdditions/DocumentIOS.idl>
334 #elif defined(ENABLE_TOUCH_EVENTS) && ENABLE_TOUCH_EVENTS
335     [ReturnNewObject, RaisesException] Touch createTouch([Default=Undefined] optional DOMWindow window,
336                                                      [Default=Undefined] optional EventTarget target,
337                                                      [Default=Undefined] optional long identifier,
338                                                      [Default=Undefined] optional long pageX,
339                                                      [Default=Undefined] optional long pageY,
340                                                      [Default=Undefined] optional long screenX,
341                                                      [Default=Undefined] optional long screenY,
342                                                      [Default=Undefined] optional long webkitRadiusX,
343                                                      [Default=Undefined] optional long webkitRadiusY,
344                                                      [Default=Undefined] optional unrestricted float webkitRotationAngle,
345                                                      [Default=Undefined] optional unrestricted float webkitForce);
346     [ReturnNewObject, Custom, RaisesException] TouchList createTouchList();
347 #endif
348
349     // Page visibility API.
350     readonly attribute DOMString visibilityState;
351     readonly attribute boolean hidden;
352
353     // Security Policy API: http://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html#script-interfaces
354     [Conditional=CSP_NEXT] readonly attribute DOMSecurityPolicy securityPolicy;
355
356     // currentscript API: http://www.whatwg.org/specs/web-apps/current-work/multipage/dom.html#dom-document-currentscript
357     readonly attribute HTMLScriptElement currentScript;
358
359     // http://www.w3.org/TR/2014/WD-dom-20140204/#dom-document-origin
360     readonly attribute DOMString origin;
361 };
362