Unzip initialization lists and constructors in JSCell hierarchy (5/7)
[WebKit-https.git] / Source / WebCore / bindings / js / JSDOMBinding.h
index fc633b8..c1c837e 100644 (file)
 #include "Element.h"
 #include "StyleBase.h"
 #include <heap/Weak.h>
-#include <runtime/Completion.h>
+#include <runtime/FunctionPrototype.h>
 #include <runtime/Lookup.h>
+#include <runtime/ObjectPrototype.h>
 #include <wtf/Forward.h>
 #include <wtf/Noncopyable.h>
 
-namespace JSC {
-    class JSGlobalData;
-    class DebuggerCallFrame;
-}
-
 namespace WebCore {
 
-    class CSSValue;
-    class Document;
     class Frame;
-    class JSNode;
     class KURL;
-    class Node;
-    class ScriptController;
-    class ScriptCachedFrameData;
 
     typedef int ExceptionCode;
 
-    // FIXME: This class should collapse into JSDOMWrapper once all JSDOMWrappers are
-    // updated to store a globalObject pointer.
-    class JSDOMWrapperWithGlobalPointer : public JSDOMWrapper {
-    public:
-        JSDOMGlobalObject* globalObject() const
-        {
-            return static_cast<JSDOMGlobalObject*>(JSDOMWrapper::globalObject());
-        }
-
-        ScriptExecutionContext* scriptExecutionContext() const
-        {
-            // FIXME: Should never be 0, but can be due to bug 27640.
-            return globalObject()->scriptExecutionContext();
-        }
-
-        static JSC::Structure* createStructure(JSC::JSGlobalData& globalData, JSC::JSValue prototype)
-        {
-            return JSC::Structure::create(globalData, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), AnonymousSlotCount, &s_info);
-        }
-
-    protected:
-        JSDOMWrapperWithGlobalPointer(JSC::Structure* structure, JSDOMGlobalObject* globalObject)
-            : JSDOMWrapper(globalObject, structure)
-        {
-            // FIXME: This ASSERT is valid, but fires in fast/dom/gc-6.html when trying to create
-            // new JavaScript objects on detached windows due to DOMWindow::document()
-            // needing to reach through the frame to get to the Document*.  See bug 27640.
-            // ASSERT(globalObject->scriptExecutionContext());
-        }
-    };
-
     // Base class for all constructor objects in the JSC bindings.
-    class DOMConstructorObject : public JSDOMWrapperWithGlobalPointer {
+    class DOMConstructorObject : public JSDOMWrapper {
     public:
-        static JSC::Structure* createStructure(JSC::JSGlobalData& globalData, JSC::JSValue prototype)
+        static JSC::Structure* createStructure(JSC::JSGlobalData& globalData, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
         {
-            return JSC::Structure::create(globalData, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), AnonymousSlotCount, &s_info);
+            return JSC::Structure::create(globalData, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), AnonymousSlotCount, &s_info);
         }
 
     protected:
-        static const unsigned StructureFlags = JSC::ImplementsHasInstance | JSC::OverridesVisitChildren | JSDOMWrapperWithGlobalPointer::StructureFlags;
+        static const unsigned StructureFlags = JSC::ImplementsHasInstance | JSC::OverridesVisitChildren | JSDOMWrapper::StructureFlags;
         DOMConstructorObject(JSC::Structure* structure, JSDOMGlobalObject* globalObject)
-            : JSDOMWrapperWithGlobalPointer(structure, globalObject)
+            : JSDOMWrapper(structure, globalObject)
         {
+            finishCreation(globalObject->globalData());
         }
     };
 
@@ -131,7 +91,7 @@ namespace WebCore {
     {
         if (JSC::Structure* structure = getCachedDOMStructure(globalObject, &WrapperClass::s_info))
             return structure;
-        return cacheDOMStructure(globalObject, WrapperClass::createStructure(exec->globalData(), WrapperClass::createPrototype(exec, globalObject)), &WrapperClass::s_info);
+        return cacheDOMStructure(globalObject, WrapperClass::createStructure(exec->globalData(), globalObject, WrapperClass::createPrototype(exec, globalObject)), &WrapperClass::s_info);
     }
 
     template<class WrapperClass> inline JSC::Structure* deprecatedGetDOMStructure(JSC::ExecState* exec)
@@ -182,7 +142,7 @@ namespace WebCore {
     {
         ASSERT(node);
         ASSERT(!getCachedWrapper(currentWorld(exec), node));
-        WrapperClass* wrapper = new (exec) WrapperClass(getDOMStructure<WrapperClass>(exec, globalObject), globalObject, node);
+        WrapperClass* wrapper = WrapperClass::create(getDOMStructure<WrapperClass>(exec, globalObject), globalObject, node);
         // FIXME: The entire function can be removed, once we fix caching.
         // This function is a one-off hack to make Nodes cache in the right global object.
         cacheWrapper(currentWorld(exec), node, wrapper);
@@ -203,8 +163,8 @@ namespace WebCore {
         if (node->inDocument())
             return node->document();
 
-        while (node->parentNode())
-            node = node->parentNode();
+        while (node->parentOrHostNode())
+            node = node->parentOrHostNode();
         return node;
     }
 
@@ -218,8 +178,6 @@ namespace WebCore {
         return styleBase;
     }
 
-    HashMap<CSSValue*, void*>& cssValueRoots();
-
     const JSC::HashTable* getHashTableForGlobalData(JSC::JSGlobalData&, const JSC::HashTable* staticTable);
 
     void reportException(JSC::ExecState*, JSC::JSValue exception);
@@ -296,8 +254,7 @@ namespace WebCore {
     JSC::JSValue objectToStringFunctionGetter(JSC::ExecState*, JSC::JSValue, const JSC::Identifier& propertyName);
 
     Frame* toDynamicFrame(JSC::ExecState*);
-    bool processingUserGesture();
-    
+
     inline JSC::JSValue jsString(JSC::ExecState* exec, const String& s)
     {
         StringImpl* stringImpl = s.impl();