b01a610f9451cafaa806f577dc20f9a31f0311f5
[WebKit-https.git] / WebCore / bindings / objc / DOMInternal.h
1 /*
2  * Copyright (C) 2004-2006 Apple Computer, Inc.  All rights reserved.
3  * Copyright (C) 2006 James G. Speth (speth@end.com)
4  * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
16  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
19  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
26  */
27
28 #import "DOM.h"
29
30 #import "Color.h"
31 #import "DOMAttr.h"
32 #import "DOMCDATASection.h"
33 #import "DOMCSSPrimitiveValue.h"
34 #import "DOMCSSRule.h"
35 #import "DOMCSSRuleList.h"
36 #import "DOMCSSStyleDeclaration.h"
37 #import "DOMCSSStyleSheet.h"
38 #import "DOMCSSValue.h"
39 #import "DOMComment.h"
40 #import "DOMCounter.h"
41 #import "DOMDOMImplementation.h"
42 #import "DOMDocument.h"
43 #import "DOMDocumentFragment.h"
44 #import "DOMDocumentType.h"
45 #import "DOMElement.h"
46 #import "DOMEntityReference.h"
47 #import "DOMEvents.h"
48 #import "DOMHTMLCollection.h"
49 #import "DOMHTMLDocument.h"
50 #import "DOMHTMLElement.h"
51 #import "DOMHTMLFormElement.h"
52 #import "DOMHTMLImageElement.h"
53 #import "DOMHTMLInputElement.h"
54 #import "DOMHTMLObjectElement.h"
55 #import "DOMHTMLOptionElement.h"
56 #import "DOMHTMLOptionsCollection.h"
57 #import "DOMHTMLTableCaptionElement.h"
58 #import "DOMHTMLTableCellElement.h"
59 #import "DOMHTMLTableElement.h"
60 #import "DOMHTMLTableSectionElement.h"
61 #import "DOMMediaList.h"
62 #import "DOMNamedNodeMap.h"
63 #import "DOMNode.h"
64 #import "DOMNodeList.h"
65 #import "DOMObject.h"
66 #import "DOMProcessingInstruction.h"
67 #import "DOMRGBColor.h"
68 #import "DOMRect.h"
69 #import "DOMStyleSheet.h"
70 #import "DOMStyleSheetList.h"
71 #import "DOMText.h"
72 #import "DOMViews.h"
73
74 #ifdef XPATH_SUPPORT
75 #import "DOMXPath.h"
76 #endif // XPATH_SUPPORT
77
78 namespace WebCore {
79     class Attr;
80     class CDATASection;
81     class CSSPrimitiveValue;
82     class CSSRule;
83     class CSSRuleList;
84     class CSSStyleDeclaration;
85     class CSSStyleSheet;
86     class CSSValue;
87     class Comment;
88     class Counter;
89     class DOMImplementationFront;
90     class DOMWindow;
91     class Document;
92     class DocumentFragment;
93     class DocumentType;
94     class Element;
95     class EntityReference;
96     class Event;
97     class HTMLCollection;
98     class HTMLDocument;
99     class HTMLElement;
100     class HTMLFormElement;
101     class HTMLImageElement;
102     class HTMLInputElement;
103     class HTMLObjectElement;
104     class HTMLOptionElement;
105     class HTMLOptionsCollection;
106     class HTMLTableCaptionElement;
107     class HTMLTableCellElement;
108     class HTMLTableElement;
109     class HTMLTableSectionElement;
110     class MediaList;
111     class NamedNodeMap;
112     class Node;
113     class NodeFilter;
114     class NodeIterator;
115     class NodeList;
116     class ProcessingInstruction;
117     class Range;
118     class RectImpl;
119     class StyleSheet;
120     class StyleSheetList;
121     class Text;
122     class TreeWalker;
123
124 #ifdef XPATH_SUPPORT
125     class XPathExpression;
126     class XPathNSResolver;
127     class XPathResult;
128 #endif // XPATH_SUPPORT
129
130     typedef int ExceptionCode;
131     typedef DOMWindow AbstractView;
132 }
133
134 // Core Internal Interfaces
135
136 @interface DOMObject (WebCoreInternal)
137 - (id)_init;
138 @end
139
140 @interface DOMNode (WebCoreInternal)
141 + (DOMNode *)_nodeWith:(WebCore::Node *)impl;
142 - (WebCore::Node *)_node;
143 @end
144
145 @interface DOMNamedNodeMap (WebCoreInternal)
146 + (DOMNamedNodeMap *)_namedNodeMapWith:(WebCore::NamedNodeMap *)impl;
147 - (WebCore::NamedNodeMap *)_namedNodeMap;
148 @end
149
150 @interface DOMNodeList (WebCoreInternal)
151 + (DOMNodeList *)_nodeListWith:(WebCore::NodeList *)impl;
152 - (WebCore::NodeList *)_nodeList;
153 @end
154
155 @interface DOMText (WebCoreInternal)
156 + (DOMText *)_textWith:(WebCore::Text *)impl;
157 - (WebCore::Text *)_text;
158 @end
159
160 @interface DOMComment (WebCoreInternal)
161 + (DOMComment *)_commentWith:(WebCore::Comment *)impl;
162 - (WebCore::Comment *)_comment;
163 @end
164
165 @interface DOMCDATASection (WebCoreInternal)
166 + (DOMCDATASection *)_CDATASectionWith:(WebCore::CDATASection *)impl;
167 - (WebCore::CDATASection *)_CDATASection;
168 @end
169
170 @interface DOMProcessingInstruction (WebCoreInternal)
171 + (DOMProcessingInstruction *)_processingInstructionWith:(WebCore::ProcessingInstruction *)impl;
172 - (WebCore::ProcessingInstruction *)_processingInstruction;
173 @end
174
175 @interface DOMEntityReference (WebCoreInternal)
176 + (DOMEntityReference *)_entityReferenceWith:(WebCore::EntityReference *)impl;
177 - (WebCore::EntityReference *)_entityReference;
178 @end
179
180 @interface DOMElement (WebCoreInternal)
181 + (DOMElement *)_elementWith:(WebCore::Element *)impl;
182 - (WebCore::Element *)_element;
183 @end
184
185 @interface DOMAttr (WebCoreInternal)
186 + (DOMAttr *)_attrWith:(WebCore::Attr *)impl;
187 - (WebCore::Attr *)_attr;
188 @end
189
190 @interface DOMDocumentType (WebCoreInternal)
191 + (DOMDocumentType *)_documentTypeWith:(WebCore::DocumentType *)impl;
192 - (WebCore::DocumentType *)_documentType;
193 @end
194
195 @interface DOMImplementation (WebCoreInternal)
196 + (DOMImplementation *)_DOMImplementationWith:(WebCore::DOMImplementationFront *)impl;
197 - (WebCore::DOMImplementationFront *)_DOMImplementation;
198 @end
199
200 @interface DOMDocument (WebCoreInternal)
201 + (DOMDocument *)_documentWith:(WebCore::Document *)impl;
202 - (WebCore::Document *)_document;
203 @end
204
205 @interface DOMDocumentFragment (WebCoreInternal)
206 + (DOMDocumentFragment *)_documentFragmentWith:(WebCore::DocumentFragment *)impl;
207 - (WebCore::DocumentFragment *)_documentFragment;
208 @end
209
210 // HTML Internal Interfaces
211
212 @interface DOMHTMLOptionElement (WebCoreInternal)
213 + (DOMHTMLOptionElement *)_HTMLOptionElementWith:(WebCore::HTMLOptionElement *)impl;
214 - (WebCore::HTMLOptionElement *)_HTMLOptionElement;
215 @end
216
217 @interface DOMHTMLOptionsCollection (WebCoreInternal)
218 + (DOMHTMLOptionsCollection *)_HTMLOptionsCollectionWith:(WebCore::HTMLOptionsCollection *)impl;
219 - (WebCore::HTMLOptionsCollection *)_HTMLOptionsCollection;
220 @end
221
222 @interface DOMHTMLCollection (WebCoreInternal)
223 + (DOMHTMLCollection *)_HTMLCollectionWith:(WebCore::HTMLCollection *)impl;
224 - (WebCore::HTMLCollection *)_HTMLCollection;
225 @end
226
227 @interface DOMHTMLDocument (WebCoreInternal)
228 + (DOMHTMLDocument *)_HTMLDocumentWith:(WebCore::HTMLDocument *)impl;
229 - (WebCore::HTMLDocument *)_HTMLDocument;
230 @end
231
232 @interface DOMHTMLElement (WebCoreInternal)
233 + (DOMHTMLElement *)_HTMLElementWith:(WebCore::HTMLElement *)impl;
234 - (WebCore::HTMLElement *)_HTMLElement;
235 @end
236
237 @interface DOMHTMLFormElement (WebCoreInternal)
238 + (DOMHTMLFormElement *)_HTMLFormElementWith:(WebCore::HTMLFormElement *)impl;
239 - (WebCore::HTMLFormElement *)_HTMLFormElement;
240 @end
241
242 @interface DOMHTMLTableCaptionElement (WebCoreInternal)
243 + (DOMHTMLTableCaptionElement *)_HTMLTableCaptionElementWith:(WebCore::HTMLTableCaptionElement *)impl;
244 - (WebCore::HTMLTableCaptionElement *)_HTMLTableCaptionElement;
245 @end
246
247 @interface DOMHTMLTableSectionElement (WebCoreInternal)
248 + (DOMHTMLTableSectionElement *)_HTMLTableSectionElementWith:(WebCore::HTMLTableSectionElement *)impl;
249 - (WebCore::HTMLTableSectionElement *)_HTMLTableSectionElement;
250 @end
251
252 @interface DOMHTMLTableElement (WebCoreInternal)
253 + (DOMHTMLTableElement *)_HTMLTableElementWith:(WebCore::HTMLTableElement *)impl;
254 - (WebCore::HTMLTableElement *)_HTMLTableElement;
255 @end
256
257 @interface DOMHTMLTableCellElement (WebCoreInternal)
258 + (DOMHTMLTableCellElement *)_HTMLTableCellElementWith:(WebCore::HTMLTableCellElement *)impl;
259 - (WebCore::HTMLTableCellElement *)_HTMLTableCellElement;
260 @end
261
262 @interface DOMHTMLImageElement (WebCoreInternal)
263 + (DOMHTMLImageElement *)_HTMLImageElementWith:(WebCore::HTMLImageElement *)impl;
264 - (WebCore::HTMLImageElement *)_HTMLImageElement;
265 @end
266
267 @interface DOMHTMLObjectElement (WebCoreInternal)
268 + (DOMHTMLObjectElement *)_HTMLObjectElementWith:(WebCore::HTMLObjectElement *)impl;
269 - (WebCore::HTMLObjectElement *)_HTMLObjectElement;
270 @end
271
272 @interface DOMHTMLInputElement (WebCoreInternal)
273 + (DOMHTMLInputElement *)_HTMLInputElementWith:(WebCore::HTMLInputElement *)impl;
274 - (WebCore::HTMLInputElement *)_HTMLInputElement;
275 @end
276
277 // CSS Internal Interfaces
278
279 @interface DOMCSSRuleList (WebCoreInternal)
280 + (DOMCSSRuleList *)_CSSRuleListWith:(WebCore::CSSRuleList *)impl;
281 - (WebCore::CSSRuleList *)_CSSRuleList;
282 @end
283
284 @interface DOMCSSRule (WebCoreInternal)
285 + (DOMCSSRule *)_CSSRuleWith:(WebCore::CSSRule *)impl;
286 @end
287
288 @interface DOMCSSValue (WebCoreInternal)
289 + (DOMCSSValue *)_CSSValueWith:(WebCore::CSSValue *)impl;
290 @end
291
292 @interface DOMCSSPrimitiveValue (WebCoreInternal)
293 - (WebCore::CSSPrimitiveValue *)_CSSPrimitiveValue;
294 + (DOMCSSPrimitiveValue *)_CSSPrimitiveValueWith:(WebCore::CSSValue *)impl;
295 @end
296
297 @interface DOMRGBColor (WebCoreInternal)
298 + (DOMRGBColor *)_RGBColorWithRGB:(WebCore::RGBA32)value;
299 @end
300
301 @interface DOMRect (WebCoreInternal)
302 + (DOMRect *)_rectWith:(WebCore::RectImpl *)impl;
303 - (WebCore::RectImpl *)_rect;
304 @end
305
306 @interface DOMCounter (WebCoreInternal)
307 + (DOMCounter *)_counterWith:(WebCore::Counter *)impl;
308 - (WebCore::Counter *)_counter;
309 @end
310
311 @interface DOMCSSStyleDeclaration (WebCoreInternal)
312 + (DOMCSSStyleDeclaration *)_CSSStyleDeclarationWith:(WebCore::CSSStyleDeclaration *)impl;
313 - (WebCore::CSSStyleDeclaration *)_CSSStyleDeclaration;
314 @end
315
316 @interface DOMCSSStyleSheet (WebCoreInternal)
317 + (DOMCSSStyleSheet *)_CSSStyleSheetWith:(WebCore::CSSStyleSheet *)impl;
318 @end
319
320 // StyleSheets Internal Interfaces
321
322 @interface DOMStyleSheet (WebCoreInternal)
323 + (DOMStyleSheet *)_styleSheetWith:(WebCore::StyleSheet *)impl;
324 @end
325
326 @interface DOMStyleSheetList (WebCoreInternal)
327 + (DOMStyleSheetList *)_styleSheetListWith:(WebCore::StyleSheetList *)impl;
328 - (WebCore::StyleSheetList *)_styleSheetList;
329 @end
330
331 @interface DOMMediaList (WebCoreInternal)
332 + (DOMMediaList *)_mediaListWith:(WebCore::MediaList *)impl;
333 - (WebCore::MediaList *)_mediaList;
334 @end
335
336 // Events Internal Interfaces
337
338 @interface DOMEvent (WebCoreInternal)
339 + (DOMEvent *)_eventWith:(WebCore::Event *)impl;
340 - (WebCore::Event *)_event;
341 @end
342
343 // Range Internal Interfaces
344
345 @interface DOMRange (WebCoreInternal)
346 + (DOMRange *)_rangeWith:(WebCore::Range *)impl;
347 - (WebCore::Range *)_range;
348 @end
349
350 // Traversal Internal Interfaces
351
352 @interface DOMNodeIterator (WebCoreInternal)
353 + (DOMNodeIterator *)_nodeIteratorWith:(WebCore::NodeIterator *)impl filter:(id <DOMNodeFilter>)filter;
354 @end
355
356 @interface DOMTreeWalker (WebCoreInternal)
357 + (DOMTreeWalker *)_treeWalkerWith:(WebCore::TreeWalker *)impl filter:(id <DOMNodeFilter>)filter;
358 @end
359
360 @interface DOMNodeFilter : DOMObject <DOMNodeFilter>
361 + (DOMNodeFilter *)_nodeFilterWith:(WebCore::NodeFilter *)impl;
362 @end
363
364 // Views Internal Interfaces
365
366 @interface DOMAbstractView (WebCoreInternal)
367 + (DOMAbstractView *)_abstractViewWith:(WebCore::AbstractView *)impl;
368 - (WebCore::AbstractView *)_abstractView;
369 @end
370
371 #ifdef XPATH_SUPPORT
372 // XPath Internal Interfaces
373
374 @interface DOMXPathResult (WebCoreInternal)
375 + (DOMXPathResult *)_xpathResultWith:(WebCore::XPathResult *)impl;
376 - (WebCore::XPathResult *)_xpathResult;
377 @end
378
379 @interface DOMXPathExpression (WebCoreInternal)
380 + (DOMXPathExpression *)_xpathExpressionWith:(WebCore::XPathExpression *)impl;
381 - (WebCore::XPathExpression *)_xpathExpression;
382 @end
383
384 @interface DOMNativeXPathNSResolver : DOMObject <DOMXPathNSResolver>
385 + (DOMNativeXPathNSResolver *)_xpathNSResolverWith:(WebCore::XPathNSResolver *)impl;
386 - (WebCore::XPathNSResolver *)_xpathNSResolver;
387 @end
388
389 #endif // XPATH_SUPPORT
390
391
392 // Helper functions for DOM wrappers and gluing to Objective-C
393
394 // Like reinterpret_cast, but a compiler error if you use it on the wrong type.
395 template <class Target, class Source> Target DOM_cast(Source) { Source::failToCompile(); }
396
397 // Type safe DOM wrapper access.
398
399 NSObject* getDOMWrapper(DOMObjectInternal*);
400 void addDOMWrapper(NSObject* wrapper, DOMObjectInternal*);
401
402 template <class Source> inline id getDOMWrapper(Source impl) { return getDOMWrapper(DOM_cast<DOMObjectInternal*>(impl)); }
403 template <class Source> inline void addDOMWrapper(NSObject* wrapper, Source impl) { addDOMWrapper(wrapper, DOM_cast<DOMObjectInternal*>(impl)); }
404 void removeDOMWrapper(DOMObjectInternal*);
405
406 void raiseDOMException(WebCore::ExceptionCode);
407
408 inline void raiseOnDOMError(WebCore::ExceptionCode ec) 
409 {
410     if (ec) 
411         raiseDOMException(ec);
412 }
413
414 // Implementation details for the above.
415
416 #define ALLOW_DOM_CAST(type) \
417     namespace WebCore { class type; } \
418     template <> inline DOMObjectInternal* DOM_cast<DOMObjectInternal*, class WebCore::type*>(class WebCore::type* p) \
419         { return reinterpret_cast<DOMObjectInternal *>(p); } \
420     template <> inline class WebCore::type* DOM_cast<class WebCore::type*, DOMObjectInternal*>(DOMObjectInternal* p) \
421         { return reinterpret_cast<class WebCore::type*>(p); }
422
423 // No class should appear in this list if its base class is already here.
424 ALLOW_DOM_CAST(CSSRule)
425 ALLOW_DOM_CAST(CSSRuleList)
426 ALLOW_DOM_CAST(CSSStyleDeclaration)
427 ALLOW_DOM_CAST(CSSStyleSheet)
428 ALLOW_DOM_CAST(CSSValue)
429 ALLOW_DOM_CAST(Counter)
430 ALLOW_DOM_CAST(DOMImplementationFront)
431 ALLOW_DOM_CAST(Event)
432 ALLOW_DOM_CAST(HTMLCollection)
433 ALLOW_DOM_CAST(HTMLOptionsCollection)
434 ALLOW_DOM_CAST(MediaList)
435 ALLOW_DOM_CAST(NamedNodeMap)
436 ALLOW_DOM_CAST(Node)
437 ALLOW_DOM_CAST(NodeFilter)
438 ALLOW_DOM_CAST(NodeIterator)
439 ALLOW_DOM_CAST(NodeList)
440 ALLOW_DOM_CAST(Range)
441 ALLOW_DOM_CAST(RectImpl)
442 ALLOW_DOM_CAST(StyleSheet)
443 ALLOW_DOM_CAST(StyleSheetList)
444 ALLOW_DOM_CAST(TreeWalker)
445 #ifdef XPATH_SUPPORT
446 ALLOW_DOM_CAST(XPathExpression)
447 ALLOW_DOM_CAST(XPathNSResolver)
448 ALLOW_DOM_CAST(XPathResult)
449 #endif // XPATH_SUPPORT