Home | History | Annotate | Download | only in objc
      1 /*
      2  * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
      3  * Copyright (C) 2006 James G. Speth (speth (at) end.com)
      4  * Copyright (C) 2006 Samuel Weinig (sam.weinig (at) 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 // This is lets our internals access DOMObject's _internal field while having
     29 // it be private for clients outside WebKit.
     30 #define private public
     31 #import "DOMObject.h"
     32 #undef private
     33 
     34 #import "DOMNodeFilter.h"
     35 #import "DOMXPathNSResolver.h"
     36 #import <wtf/Forward.h>
     37 
     38 namespace JSC {
     39     class JSObject;
     40     namespace Bindings {
     41         class RootObject;
     42     }
     43 }
     44 
     45 namespace WebCore {
     46     class NodeFilter;
     47 #if ENABLE(XPATH)
     48     class XPathNSResolver;
     49 #endif
     50 }
     51 
     52 @interface DOMNodeFilter : DOMObject <DOMNodeFilter>
     53 @end
     54 
     55 #if ENABLE(XPATH)
     56 @interface DOMNativeXPathNSResolver : DOMObject <DOMXPathNSResolver>
     57 @end
     58 #endif // ENABLE(XPATH)
     59 
     60 // Helper functions for DOM wrappers and gluing to Objective-C
     61 
     62 // Create an NSMapTable mapping from pointers to ObjC objects held with zeroing weak references.
     63 NSMapTable* createWrapperCache();
     64 
     65 id createDOMWrapper(JSC::JSObject*, PassRefPtr<JSC::Bindings::RootObject> origin, PassRefPtr<JSC::Bindings::RootObject> current);
     66 
     67 NSObject* getDOMWrapper(DOMObjectInternal*);
     68 void addDOMWrapper(NSObject* wrapper, DOMObjectInternal*);
     69 void removeDOMWrapper(DOMObjectInternal*);
     70 
     71 template <class Source>
     72 inline id getDOMWrapper(Source impl)
     73 {
     74     return getDOMWrapper(reinterpret_cast<DOMObjectInternal*>(impl));
     75 }
     76 
     77 template <class Source>
     78 inline void addDOMWrapper(NSObject* wrapper, Source impl)
     79 {
     80     addDOMWrapper(wrapper, reinterpret_cast<DOMObjectInternal*>(impl));
     81 }
     82 
     83 DOMNodeFilter *kit(WebCore::NodeFilter*);
     84 WebCore::NodeFilter* core(DOMNodeFilter *);
     85 
     86 #if ENABLE(XPATH)
     87 DOMNativeXPathNSResolver *kit(WebCore::XPathNSResolver*);
     88 WebCore::XPathNSResolver* core(DOMNativeXPathNSResolver *);
     89 #endif // ENABLE(XPATH)
     90 
     91 inline NSTimeInterval kit(double msSinceEpoch)
     92 {
     93     return msSinceEpoch / 1000.0 - NSTimeIntervalSince1970;
     94 }
     95 
     96 inline double core(NSTimeInterval sec)
     97 {
     98     return sec * 1000.0 + NSTimeIntervalSince1970;
     99 }
    100