Remove Qt-specific code in WebCore/{bindings,bridge,loader,icon,testing}.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 2 Oct 2013 22:37:45 +0000 (22:37 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 2 Oct 2013 22:37:45 +0000 (22:37 +0000)
<https://webkit.org/b/122242>

Reviewed by Anders Carlsson.

Purge PLATFORM(QT) blocks and Qt-specific files.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@156804 268f45cc-cd09-0410-ab3c-d52691b4dbfc

18 files changed:
Source/WebCore/ChangeLog
Source/WebCore/bindings/generic/RuntimeEnabledFeatures.cpp
Source/WebCore/bindings/js/GCController.cpp
Source/WebCore/bindings/js/GCController.h
Source/WebCore/bindings/js/JSInspectorFrontendHostCustom.cpp
Source/WebCore/bindings/js/ScriptController.cpp
Source/WebCore/bridge/jsc/BridgeJSC.cpp
Source/WebCore/bridge/qt/qt_class.cpp [deleted file]
Source/WebCore/bridge/qt/qt_class.h [deleted file]
Source/WebCore/bridge/qt/qt_instance.cpp [deleted file]
Source/WebCore/bridge/qt/qt_instance.h [deleted file]
Source/WebCore/bridge/qt/qt_pixmapruntime.cpp [deleted file]
Source/WebCore/bridge/qt/qt_pixmapruntime.h [deleted file]
Source/WebCore/bridge/qt/qt_runtime.cpp [deleted file]
Source/WebCore/bridge/qt/qt_runtime.h [deleted file]
Source/WebCore/loader/FTPDirectoryParser.cpp
Source/WebCore/loader/icon/IconDatabase.cpp
Source/WebCore/testing/Internals.cpp

index 1e1671f..92e4217 100644 (file)
@@ -1,5 +1,14 @@
 2013-10-02  Andreas Kling  <akling@apple.com>
 
+        Remove Qt-specific code in WebCore/{bindings,bridge,loader,icon,testing}.
+        <https://webkit.org/b/122242>
+
+        Reviewed by Anders Carlsson.
+
+        Purge PLATFORM(QT) blocks and Qt-specific files.
+
+2013-10-02  Andreas Kling  <akling@apple.com>
+
         Remove Qt-specific code in WebCore/{page,accessibility}.
         <https://webkit.org/b/122222>
 
index 8799479..5336c83 100644 (file)
@@ -87,7 +87,7 @@ RuntimeEnabledFeatures::RuntimeEnabledFeatures()
     , m_isEncryptedMediaEnabled(false)
 #endif
 #if ENABLE(VIDEO_TRACK)
-#if PLATFORM(MAC) || PLATFORM(GTK) || PLATFORM(EFL) || PLATFORM(BLACKBERRY) || PLATFORM(WIN) || PLATFORM(QT)
+#if PLATFORM(MAC) || PLATFORM(GTK) || PLATFORM(EFL) || PLATFORM(BLACKBERRY) || PLATFORM(WIN)
     , m_isVideoTrackEnabled(true)
 #else
     , m_isVideoTrackEnabled(false)
index 36239da..aabfb01 100644 (file)
@@ -49,7 +49,7 @@ GCController& gcController()
 }
 
 GCController::GCController()
-#if !USE(CF) && !PLATFORM(BLACKBERRY) && !PLATFORM(QT)
+#if !USE(CF) && !PLATFORM(BLACKBERRY)
     : m_GCTimer(this, &GCController::gcTimerFired)
 #endif
 {
@@ -62,7 +62,7 @@ void GCController::garbageCollectSoon()
     // systems with CoreFoundation. If and when the notion of a run loop is pushed 
     // down into WTF so that more platforms can take advantage of it, we will be 
     // able to use reportAbandonedObjectGraph on more platforms.
-#if USE(CF) || PLATFORM(BLACKBERRY) || PLATFORM(QT)
+#if USE(CF) || PLATFORM(BLACKBERRY)
     JSLockHolder lock(JSDOMWindow::commonVM());
     JSDOMWindow::commonVM()->heap.reportAbandonedObjectGraph();
 #else
@@ -71,7 +71,7 @@ void GCController::garbageCollectSoon()
 #endif
 }
 
-#if !USE(CF) && !PLATFORM(BLACKBERRY) && !PLATFORM(QT)
+#if !USE(CF) && !PLATFORM(BLACKBERRY)
 void GCController::gcTimerFired(Timer<GCController>*)
 {
     collect(0);
index ac48379..8a24cb0 100644 (file)
@@ -50,7 +50,7 @@ namespace WebCore {
     private:
         GCController(); // Use gcController() instead
 
-#if !USE(CF) && !PLATFORM(BLACKBERRY) && !PLATFORM(QT)
+#if !USE(CF) && !PLATFORM(BLACKBERRY)
         void gcTimerFired(Timer<GCController>*);
         Timer<GCController> m_GCTimer;
 #endif
index 861bd6c..0ecaf73 100644 (file)
@@ -73,9 +73,7 @@ JSValue JSInspectorFrontendHost::platform(ExecState* execState)
 
 JSValue JSInspectorFrontendHost::port(ExecState* execState)
 {
-#if PLATFORM(QT)
-    DEFINE_STATIC_LOCAL(const String, port, (ASCIILiteral("qt")));
-#elif PLATFORM(GTK)
+#if PLATFORM(GTK)
     DEFINE_STATIC_LOCAL(const String, port, (ASCIILiteral("gtk")));
 #elif PLATFORM(EFL)
     DEFINE_STATIC_LOCAL(const String, port, (ASCIILiteral("efl")));
index 1cb259f..8bb74ad 100644 (file)
@@ -383,7 +383,7 @@ NPObject* ScriptController::createScriptObjectForPluginElement(HTMLPlugInElement
 
 #endif
 
-#if !PLATFORM(MAC) && !PLATFORM(QT)
+#if !PLATFORM(MAC)
 PassRefPtr<JSC::Bindings::Instance> ScriptController::createScriptInstanceForWidget(Widget* widget)
 {
     if (!widget->isPluginView())
index f8bcfbc..6ed1485 100644 (file)
 #include "runtime/JSLock.h"
 #include "runtime/ObjectPrototype.h"
 
-
-#if PLATFORM(QT)
-#include "qt_instance.h"
-#endif
-
 namespace JSC {
 
 namespace Bindings {
diff --git a/Source/WebCore/bridge/qt/qt_class.cpp b/Source/WebCore/bridge/qt/qt_class.cpp
deleted file mode 100644 (file)
index e99d2d7..0000000
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
- *
- *  This library is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public
- *  License as published by the Free Software Foundation; either
- *  version 2 of the License, or (at your option) any later version.
- *
- *  This library is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this library; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#include "config.h"
-#include "qt_class.h"
-
-#include "APICast.h"
-#include "Identifier.h"
-#include "qt_instance.h"
-#include "qt_runtime.h"
-
-#include <qdebug.h>
-#include <qmetaobject.h>
-
-namespace JSC {
-namespace Bindings {
-
-QtClass::QtClass(const QMetaObject* mo)
-    : m_metaObject(mo)
-{
-}
-
-QtClass::~QtClass()
-{
-}
-
-typedef HashMap<const QMetaObject*, QtClass*> ClassesByMetaObject;
-static ClassesByMetaObject* classesByMetaObject = 0;
-
-QtClass* QtClass::classForObject(QObject* o)
-{
-    if (!classesByMetaObject)
-        classesByMetaObject = new ClassesByMetaObject;
-
-    const QMetaObject* mo = o->metaObject();
-    QtClass* aClass = classesByMetaObject->get(mo);
-    if (!aClass) {
-        aClass = new QtClass(mo);
-        classesByMetaObject->set(mo, aClass);
-    }
-
-    return aClass;
-}
-
-const char* QtClass::name() const
-{
-    return m_metaObject->className();
-}
-
-// We use this to get at signals (so we can return a proper function object,
-// and not get wrapped in RuntimeMethod). Also, use this for methods,
-// so we can cache the object and return the same object for the same
-// identifier.
-JSValue QtClass::fallbackObject(ExecState* exec, Instance* inst, PropertyName identifier)
-{
-    QtInstance* qtinst = static_cast<QtInstance*>(inst);
-    JSContextRef context = toRef(exec);
-    JSValueRef exception = 0;
-
-    String ustring(identifier.publicName());
-    const QByteArray name = QString(reinterpret_cast<const QChar*>(ustring.characters()), ustring.length()).toLatin1();
-
-    // First see if we have a cache hit
-    if (QtRuntimeMethod* method = qtinst->m_methods.value(name)) {
-        JSValue obj = toJS(method->jsObjectRef(context, &exception));
-        if (exception)
-            return exec->vm().throwException(exec, toJS(exec, exception));
-        return obj;
-    }
-
-    // Nope, create an entry
-    const QByteArray normal = QMetaObject::normalizedSignature(name.constData());
-
-    // See if there is an exact match
-    int index = -1;
-    QMetaMethod metaMethod;
-    if (normal.contains('(') && (index = m_metaObject->indexOfMethod(normal)) != -1) {
-        metaMethod = m_metaObject->method(index);
-        if (metaMethod.access() == QMetaMethod::Private)
-            index = -1;
-    }
-
-    // Nope.. try a basename match
-    if (index == -1) {
-        const int count = m_metaObject->methodCount();
-        for (index = count - 1; index >= 0; --index) {
-            metaMethod = m_metaObject->method(index);
-            if (metaMethod.access() == QMetaMethod::Private)
-                continue;
-
-            if (metaMethod.name() == normal)
-                break;
-        }
-    }
-
-    if (index == -1)
-        return jsUndefined();
-
-    int flags = metaMethod.methodType() == QMetaMethod::Signal ? QtRuntimeMethod::MethodIsSignal : 0;
-    QtRuntimeMethod* method = new QtRuntimeMethod(context, static_cast<QtInstance*>(inst)->getObject(), normal, index, flags, qtinst);
-    qtinst->m_methods.insert(name, method);
-    JSValue obj = toJS(method->jsObjectRef(context, &exception));
-    if (exception)
-        return exec->vm().throwException(exec, toJS(exec, exception));
-    return obj;
-}
-
-// This functionality is handled by the fallback case above...
-Method* QtClass::methodNamed(PropertyName, Instance*) const
-{
-    return 0;
-}
-
-// ### we may end up with a different search order than QtScript by not
-// folding this code into the fallbackMethod above, but Fields propagate out
-// of the binding code
-Field* QtClass::fieldNamed(PropertyName identifier, Instance* instance) const
-{
-    // Check static properties first
-    QtInstance* qtinst = static_cast<QtInstance*>(instance);
-
-    QObject* obj = qtinst->getObject();
-    String ustring(identifier.publicName());
-    const QString name(reinterpret_cast<const QChar*>(ustring.characters()), ustring.length());
-    const QByteArray ascii = name.toLatin1();
-
-    // First check for a cached field
-    QtField* f = qtinst->m_fields.value(name);
-
-    if (obj) {
-        if (f) {
-            // We only cache real metaproperties, but we do store the
-            // other types so we can delete them later
-            if (f->fieldType() == QtField::MetaProperty)
-                return f;
-#ifndef QT_NO_PROPERTIES
-            if (f->fieldType() == QtField::DynamicProperty) {
-                if (obj->dynamicPropertyNames().indexOf(ascii) >= 0)
-                    return f;
-                // Dynamic property that disappeared
-                qtinst->m_fields.remove(name);
-                delete f;
-            }
-#endif
-            else {
-                const QList<QObject*>& children = obj->children();
-                const int count = children.size();
-                for (int index = 0; index < count; ++index) {
-                    QObject* child = children.at(index);
-                    if (child->objectName() == name)
-                        return f;
-                }
-
-                // Didn't find it, delete it from the cache
-                qtinst->m_fields.remove(name);
-                delete f;
-            }
-        }
-
-        int index = m_metaObject->indexOfProperty(ascii);
-        if (index >= 0) {
-            const QMetaProperty prop = m_metaObject->property(index);
-
-            if (prop.isScriptable(obj)) {
-                f = new QtField(prop);
-                qtinst->m_fields.insert(name, f);
-                return f;
-            }
-        }
-
-#ifndef QT_NO_PROPERTIES
-        // Dynamic properties
-        index = obj->dynamicPropertyNames().indexOf(ascii);
-        if (index >= 0) {
-            f = new QtField(ascii);
-            qtinst->m_fields.insert(name, f);
-            return f;
-        }
-#endif
-
-        // Child objects
-
-        const QList<QObject*>& children = obj->children();
-        const int count = children.count();
-        for (index = 0; index < count; ++index) {
-            QObject* child = children.at(index);
-            if (child->objectName() == name) {
-                f = new QtField(child);
-                qtinst->m_fields.insert(name, f);
-                return f;
-            }
-        }
-
-        // Nothing named this
-        return 0;
-    }
-    // For compatibility with qtscript, cached methods don't cause
-    // errors until they are accessed, so don't blindly create an error
-    // here.
-    if (qtinst->m_methods.contains(ascii))
-        return 0;
-
-#ifndef QT_NO_PROPERTIES
-    // deleted qobject, but can't throw an error from here (no exec)
-    // create a fake QtField that will throw upon access
-    if (!f) {
-        f = new QtField(ascii);
-        qtinst->m_fields.insert(name, f);
-    }
-#endif
-    return f;
-}
-
-}
-}
-
diff --git a/Source/WebCore/bridge/qt/qt_class.h b/Source/WebCore/bridge/qt/qt_class.h
deleted file mode 100644 (file)
index 1256291..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
- *
- *  This library is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public
- *  License as published by the Free Software Foundation; either
- *  version 2 of the License, or (at your option) any later version.
- *
- *  This library is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this library; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#ifndef qt_class_h
-#define qt_class_h
-
-#include "BridgeJSC.h"
-#include "qglobal.h"
-
-QT_BEGIN_NAMESPACE
-class QObject;
-struct QMetaObject;
-QT_END_NAMESPACE
-
-namespace JSC {
-namespace Bindings {
-
-
-class QtClass : public Class {
-protected:
-    QtClass(const QMetaObject*);
-
-public:
-    static QtClass* classForObject(QObject*);
-    virtual ~QtClass();
-
-    virtual const char* name() const;
-    virtual Method* methodNamed(PropertyName, Instance*) const;
-    virtual Field* fieldNamed(PropertyName, Instance*) const;
-
-    virtual JSValue fallbackObject(ExecState*, Instance*, PropertyName);
-
-private:
-    QtClass(const QtClass&); // prohibit copying
-    QtClass& operator=(const QtClass&); // prohibit assignment
-
-    const QMetaObject* m_metaObject;
-};
-
-} // namespace Bindings
-} // namespace JSC
-
-#endif
diff --git a/Source/WebCore/bridge/qt/qt_instance.cpp b/Source/WebCore/bridge/qt/qt_instance.cpp
deleted file mode 100644 (file)
index 62e1691..0000000
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
- *
- *  This library is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public
- *  License as published by the Free Software Foundation; either
- *  version 2 of the License, or (at your option) any later version.
- *
- *  This library is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this library; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#include "config.h"
-#include "qt_instance.h"
-
-#include "APICast.h"
-#include "Error.h"
-#include "JSDOMBinding.h"
-#include "JSDOMWindowBase.h"
-#include "JSGlobalObject.h"
-#include "JSLock.h"
-#include "ObjectPrototype.h"
-#include "PropertyNameArray.h"
-#include "qt_class.h"
-#include "qt_runtime.h"
-#include "runtime/FunctionPrototype.h"
-#include "runtime_object.h"
-
-#include <qdebug.h>
-#include <qhash.h>
-#include <qmetaobject.h>
-#include <qmetatype.h>
-
-namespace JSC {
-namespace Bindings {
-
-// Cache QtInstances
-typedef QMultiHash<void*, QtInstance*> QObjectInstanceMap;
-static QObjectInstanceMap cachedInstances;
-
-// Derived RuntimeObject
-class QtRuntimeObject : public RuntimeObject {
-public:
-    typedef RuntimeObject Base;
-
-    static QtRuntimeObject* create(VM& vm, Structure* structure, PassRefPtr<Instance> instance)
-    {
-        QtRuntimeObject* object = new (allocateCell<QtRuntimeObject>(vm.heap)) QtRuntimeObject(vm, structure, instance);
-        object->finishCreation(vm);
-        return object;
-    }
-    
-    DECLARE_INFO;
-
-    static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype)
-    {
-        return Structure::create(vm, globalObject, prototype, TypeInfo(ObjectType,  StructureFlags), info());
-    }
-
-protected:
-    static const unsigned StructureFlags = RuntimeObject::StructureFlags | OverridesVisitChildren;
-
-private:
-    QtRuntimeObject(VM&, Structure*, PassRefPtr<Instance>);
-};
-
-const ClassInfo QtRuntimeObject::s_info = { "QtRuntimeObject", &RuntimeObject::s_info, 0, 0, CREATE_METHOD_TABLE(QtRuntimeObject) };
-
-QtRuntimeObject::QtRuntimeObject(VM& vm, Structure* structure, PassRefPtr<Instance> instance)
-    : RuntimeObject(vm, structure, instance)
-{
-}
-
-// QtInstance
-QtInstance::QtInstance(QObject* o, PassRefPtr<RootObject> rootObject, ValueOwnership ownership)
-    : Instance(rootObject)
-    , m_class(0)
-    , m_object(o)
-    , m_hashkey(o)
-    , m_ownership(ownership)
-{
-}
-
-QtInstance::~QtInstance()
-{
-    JSLockHolder lock(WebCore::JSDOMWindowBase::commonVM());
-
-    cachedInstances.remove(m_hashkey);
-
-    qDeleteAll(m_methods);
-    m_methods.clear();
-
-    qDeleteAll(m_fields);
-    m_fields.clear();
-
-    if (m_object) {
-        switch (m_ownership) {
-        case QtOwnership:
-            break;
-        case AutoOwnership:
-            if (m_object.data()->parent())
-                break;
-            // fall through!
-        case ScriptOwnership:
-            delete m_object.data();
-            break;
-        }
-    }
-}
-
-PassRefPtr<QtInstance> QtInstance::getQtInstance(QObject* o, PassRefPtr<RootObject> rootObject, ValueOwnership ownership)
-{
-    JSLockHolder lock(WebCore::JSDOMWindowBase::commonVM());
-
-    foreach (QtInstance* instance, cachedInstances.values(o))
-        if (instance->rootObject() == rootObject) {
-            // The garbage collector removes instances, but it may happen that the wrapped
-            // QObject dies before the gc kicks in. To handle that case we have to do an additional
-            // check if to see if the instance's wrapped object is still alive. If it isn't, then
-            // we have to create a new wrapper.
-            if (!instance->getObject())
-                cachedInstances.remove(instance->hashKey());
-            else
-                return instance;
-        }
-
-    RefPtr<QtInstance> ret = QtInstance::create(o, rootObject, ownership);
-    cachedInstances.insert(o, ret.get());
-
-    return ret.release();
-}
-
-bool QtInstance::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot& slot)
-{
-    return JSObject::getOwnPropertySlot(object, exec, propertyName, slot);
-}
-
-void QtInstance::put(JSObject* object, ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot& slot)
-{
-    JSObject::put(object, exec, propertyName, value, slot);
-}
-
-QtInstance* QtInstance::getInstance(JSObject* object)
-{
-    if (!object)
-        return 0;
-    if (!object->inherits(QtRuntimeObject::info()))
-        return 0;
-    return static_cast<QtInstance*>(static_cast<RuntimeObject*>(object)->getInternalInstance());
-}
-
-Class* QtInstance::getClass() const
-{
-    if (!m_class) {
-        if (!m_object)
-            return 0;
-        m_class = QtClass::classForObject(m_object.data());
-    }
-    return m_class;
-}
-
-RuntimeObject* QtInstance::newRuntimeObject(ExecState* exec)
-{
-    JSLockHolder lock(exec);
-    qDeleteAll(m_methods);
-    m_methods.clear();
-
-    // FIXME: deprecatedGetDOMStructure uses the prototype off of the wrong global object.
-    return QtRuntimeObject::create(exec->vm(), WebCore::deprecatedGetDOMStructure<QtRuntimeObject>(exec), this);
-}
-
-void QtInstance::begin()
-{
-    // Do nothing.
-}
-
-void QtInstance::end()
-{
-    // Do nothing.
-}
-
-void QtInstance::getPropertyNames(ExecState* exec, PropertyNameArray& array)
-{
-    // This is the enumerable properties, so put:
-    // properties
-    // dynamic properties
-    // slots
-    QObject* obj = getObject();
-    if (obj) {
-        const QMetaObject* meta = obj->metaObject();
-
-        int i;
-        for (i = 0; i < meta->propertyCount(); i++) {
-            QMetaProperty prop = meta->property(i);
-            if (prop.isScriptable())
-                array.add(Identifier(exec, prop.name()));
-        }
-
-#ifndef QT_NO_PROPERTIES
-        QList<QByteArray> dynProps = obj->dynamicPropertyNames();
-        foreach (const QByteArray& ba, dynProps)
-            array.add(Identifier(exec, ba.constData()));
-#endif
-
-        const int methodCount = meta->methodCount();
-        for (i = 0; i < methodCount; i++) {
-            QMetaMethod method = meta->method(i);
-            if (method.access() != QMetaMethod::Private) {
-                QByteArray sig = method.methodSignature();
-                array.add(Identifier(exec, String(sig.constData(), sig.length())));
-            }
-        }
-    }
-}
-
-JSValue QtInstance::getMethod(ExecState* exec, PropertyName propertyName)
-{
-    if (!getClass())
-        return jsNull();
-    Method* method = m_class->methodNamed(propertyName, this);
-    return RuntimeMethod::create(exec, exec->lexicalGlobalObject(), WebCore::deprecatedGetDOMStructure<RuntimeMethod>(exec), propertyName.publicName(), method);
-}
-
-JSValue QtInstance::invokeMethod(ExecState*, RuntimeMethod*)
-{
-    // Implemented via fallbackMethod & QtRuntimeMetaMethod::callAsFunction
-    return jsUndefined();
-}
-
-JSValue QtInstance::defaultValue(ExecState* exec, PreferredPrimitiveType hint) const
-{
-    if (hint == PreferString)
-        return stringValue(exec);
-    if (hint == PreferNumber)
-        return numberValue(exec);
-    return valueOf(exec);
-}
-
-JSValue QtInstance::stringValue(ExecState* exec) const
-{
-    QObject* obj = getObject();
-    if (!obj)
-        return jsNull();
-
-    // Hmm.. see if there is a toString defined
-    QByteArray buf;
-    bool useDefault = true;
-    getClass();
-    if (m_class) {
-        // Cheat and don't use the full name resolution
-        int index = obj->metaObject()->indexOfMethod("toString()");
-        if (index >= 0) {
-            QMetaMethod m = obj->metaObject()->method(index);
-            // Check to see how much we can call it
-            if (m.access() != QMetaMethod::Private
-                && m.methodType() != QMetaMethod::Signal
-                && m.parameterCount() == 0
-                && m.returnType() != QMetaType::Void) {
-                QVariant ret(m.returnType(), (void*)0);
-                void * qargs[1];
-                qargs[0] = ret.data();
-
-                if (QMetaObject::metacall(obj, QMetaObject::InvokeMetaMethod, index, qargs) < 0) {
-                    if (ret.isValid() && ret.canConvert(QVariant::String)) {
-                        buf = ret.toString().toLatin1().constData(); // ### Latin 1? Ascii?
-                        useDefault = false;
-                    }
-                }
-            }
-        }
-    }
-
-    if (useDefault) {
-        const QMetaObject* meta = obj ? obj->metaObject() : &QObject::staticMetaObject;
-        QString name = obj ? obj->objectName() : QString::fromUtf8("unnamed");
-        QString str = QString::fromUtf8("%0(name = \"%1\")")
-                      .arg(QLatin1String(meta->className())).arg(name);
-
-        buf = str.toLatin1();
-    }
-    return jsString(exec, buf.constData());
-}
-
-JSValue QtInstance::numberValue(ExecState*) const
-{
-    return jsNumber(0);
-}
-
-JSValue QtInstance::booleanValue() const
-{
-    // ECMA 9.2
-    return jsBoolean(getObject());
-}
-
-JSValue QtInstance::valueOf(ExecState* exec) const
-{
-    return stringValue(exec);
-}
-
-QByteArray QtField::name() const
-{
-    if (m_type == MetaProperty)
-        return m_property.name();
-    if (m_type == ChildObject && m_childObject)
-        return m_childObject.data()->objectName().toLatin1();
-#ifndef QT_NO_PROPERTIES
-    if (m_type == DynamicProperty)
-        return m_dynamicProperty;
-#endif
-    return QByteArray(); // deleted child object
-}
-
-JSValue QtField::valueFromInstance(ExecState* exec, const Instance* inst) const
-{
-    const QtInstance* instance = static_cast<const QtInstance*>(inst);
-    QObject* obj = instance->getObject();
-
-    if (obj) {
-        QVariant val;
-        if (m_type == MetaProperty) {
-            if (m_property.isReadable())
-                val = m_property.read(obj);
-            else
-                return jsUndefined();
-        } else if (m_type == ChildObject)
-            val = QVariant::fromValue((QObject*) m_childObject.data());
-#ifndef QT_NO_PROPERTIES
-        else if (m_type == DynamicProperty)
-            val = obj->property(m_dynamicProperty);
-#endif
-        JSValueRef exception = 0;
-        JSValueRef jsValue = convertQVariantToValue(toRef(exec), inst->rootObject(), val, &exception);
-        if (exception)
-            return exec->vm().throwException(exec, toJS(exec, exception));
-        return toJS(exec, jsValue);
-    }
-    QString msg = QString(QLatin1String("cannot access member `%1' of deleted QObject")).arg(QLatin1String(name()));
-    return exec->vm().throwException(exec, createError(exec, msg.toLatin1().constData()));
-}
-
-void QtField::setValueToInstance(ExecState* exec, const Instance* inst, JSValue aValue) const
-{
-    if (m_type == ChildObject) // QtScript doesn't allow setting to a named child
-        return;
-
-    const QtInstance* instance = static_cast<const QtInstance*>(inst);
-    QObject* obj = instance->getObject();
-    if (obj) {
-        QMetaType::Type argtype = QMetaType::Void;
-        if (m_type == MetaProperty)
-            argtype = (QMetaType::Type) m_property.userType();
-
-        // dynamic properties just get any QVariant
-        JSValueRef exception = 0;
-        QVariant val = convertValueToQVariant(toRef(exec), toRef(exec, aValue), argtype, 0, &exception);
-        if (exception) {
-            exec->vm().throwException(exec, toJS(exec, exception));
-            return;
-        }
-        if (m_type == MetaProperty) {
-            if (m_property.isWritable())
-                m_property.write(obj, val);
-        }
-#ifndef QT_NO_PROPERTIES
-        else if (m_type == DynamicProperty)
-            obj->setProperty(m_dynamicProperty.constData(), val);
-#endif
-    } else {
-        QString msg = QString(QLatin1String("cannot access member `%1' of deleted QObject")).arg(QLatin1String(name()));
-        exec->vm().throwException(exec, createError(exec, msg.toLatin1().constData()));
-    }
-}
-
-
-}
-}
diff --git a/Source/WebCore/bridge/qt/qt_instance.h b/Source/WebCore/bridge/qt/qt_instance.h
deleted file mode 100644 (file)
index b080bed..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
- *
- *  This library is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public
- *  License as published by the Free Software Foundation; either
- *  version 2 of the License, or (at your option) any later version.
- *
- *  This library is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this library; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#ifndef qt_instance_h
-#define qt_instance_h
-
-#include "BridgeJSC.h"
-#include "JSWeakObjectMapRefPrivate.h"
-#include "Weak.h"
-#include "WeakInlines.h"
-#include "runtime_root.h"
-#include <QPointer>
-#include <qhash.h>
-#include <qset.h>
-
-namespace JSC {
-
-namespace Bindings {
-
-class QtClass;
-class QtField;
-class QtRuntimeMethod;
-
-class WeakMapImpl : public RefCounted<WeakMapImpl> {
-public:
-    WeakMapImpl(JSContextGroupRef);
-    ~WeakMapImpl();
-
-    JSGlobalContextRef m_context;
-    JSWeakObjectMapRef m_map;
-};
-
-class WeakMap {
-public:
-    ~WeakMap();
-
-    void set(JSContextRef, void* key, JSObjectRef);
-    JSObjectRef get(void* key);
-    void remove(void* key);
-
-private:
-    RefPtr<WeakMapImpl> m_impl;
-};
-
-class QtInstance : public Instance {
-public:
-    enum ValueOwnership {
-        QtOwnership,
-        ScriptOwnership,
-        AutoOwnership
-    };
-
-    ~QtInstance();
-
-    virtual Class* getClass() const;
-    virtual RuntimeObject* newRuntimeObject(ExecState*);
-
-    virtual void begin();
-    virtual void end();
-
-    virtual JSValue valueOf(ExecState*) const;
-    virtual JSValue defaultValue(ExecState*, PreferredPrimitiveType) const;
-
-    virtual JSValue getMethod(ExecState*, PropertyName);
-    virtual JSValue invokeMethod(ExecState*, RuntimeMethod*);
-
-    virtual void getPropertyNames(ExecState*, PropertyNameArray&);
-
-    JSValue stringValue(ExecState* exec) const;
-    JSValue numberValue(ExecState* exec) const;
-    JSValue booleanValue() const;
-
-    QObject* getObject() const { return m_object.data(); }
-    QObject* hashKey() const { return m_hashkey; }
-
-    static PassRefPtr<QtInstance> getQtInstance(QObject*, PassRefPtr<RootObject>, ValueOwnership);
-
-    virtual bool getOwnPropertySlot(JSObject*, ExecState*, PropertyName, PropertySlot&);
-    virtual void put(JSObject*, ExecState*, PropertyName, JSValue, PutPropertySlot&);
-
-    static QtInstance* getInstance(JSObject*);
-
-private:
-    static PassRefPtr<QtInstance> create(QObject *instance, PassRefPtr<RootObject> rootObject, ValueOwnership ownership)
-    {
-        return adoptRef(new QtInstance(instance, rootObject, ownership));
-    }
-
-    friend class QtClass;
-    friend class QtField;
-    friend class QtRuntimeMethod;
-    QtInstance(QObject*, PassRefPtr<RootObject>, ValueOwnership); // Factory produced only..
-    mutable QtClass* m_class;
-    QPointer<QObject> m_object;
-    QObject* m_hashkey;
-    mutable QHash<QByteArray, QtRuntimeMethod*> m_methods;
-    mutable QHash<QString, QtField*> m_fields;
-    ValueOwnership m_ownership;
-};
-
-} // namespace Bindings
-
-} // namespace JSC
-
-#endif
diff --git a/Source/WebCore/bridge/qt/qt_pixmapruntime.cpp b/Source/WebCore/bridge/qt/qt_pixmapruntime.cpp
deleted file mode 100644 (file)
index 7a8a2f7..0000000
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
- *
- *  This library is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public
- *  License as published by the Free Software Foundation; either
- *  version 2 of the License, or (at your option) any later version.
- *
- *  This library is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this library; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-#include "config.h"
-#include "qt_pixmapruntime.h"
-
-#include "APICast.h"
-#include "CachedImage.h"
-#include "HTMLImageElement.h"
-#include "ImageData.h"
-#include "IntSize.h"
-#include "JSDOMBinding.h"
-#include "JSGlobalObject.h"
-#include "JSHTMLImageElement.h"
-#include "JSImageData.h"
-#include "JSRetainPtr.h"
-#include "JavaScript.h"
-#include "RenderElement.h"
-#include "StillImageQt.h"
-#include <QBuffer>
-#include <QByteArray>
-#include <QColor>
-#include <QImage>
-#include <QPixmap>
-#include <QVariant>
-#include <QtEndian>
-
-using namespace WebCore;
-namespace JSC {
-
-namespace Bindings {
-
-static void copyPixelsInto(const QImage& sourceImage, int width, int height, unsigned char* destPixels)
-{
-    QImage image(sourceImage);
-    switch (image.format()) {
-    case QImage::Format_RGB888:
-        for (int y = 0; y < height; y++) {
-            const uchar* scanLine = image.scanLine(y);
-            for (int x = 0; x < width; x++) {
-                *(destPixels++) = *(scanLine++);
-                *(destPixels++) = *(scanLine++);
-                *(destPixels++) = *(scanLine++);
-                *(destPixels++) = 0xFF;
-            }
-        }
-        break;
-    default:
-        image = image.convertToFormat(QImage::Format_ARGB32);
-        // Fall through
-    case QImage::Format_RGB32:
-    case QImage::Format_ARGB32:
-        for (int y = 0; y < height; y++) {
-            const quint32* scanLine = reinterpret_cast_ptr<const quint32*>(image.scanLine(y));
-            for (int x = 0; x < width; x++) {
-                QRgb pixel = scanLine[x];
-                qToBigEndian<quint32>((pixel << 8) | qAlpha(pixel), destPixels);
-                destPixels += 4;
-            }
-        }
-        break;
-    }
-}
-
-static QPixmap toPixmap(const QVariant& data)
-{
-    if (data.type() == static_cast<QVariant::Type>(qMetaTypeId<QPixmap>()))
-        return data.value<QPixmap>();
-
-    if (data.type() == static_cast<QVariant::Type>(qMetaTypeId<QImage>()))
-        return QPixmap::fromImage(data.value<QImage>());
-
-    return QPixmap();
-}
-
-static QImage toImage(const QVariant& data)
-{
-    if (data.type() == static_cast<QVariant::Type>(qMetaTypeId<QImage>()))
-        return data.value<QImage>();
-
-    if (data.type() == static_cast<QVariant::Type>(qMetaTypeId<QPixmap>()))
-        return data.value<QPixmap>().toImage();
-
-    return QImage();
-}
-
-static QSize imageSizeForVariant(const QVariant& data)
-{
-    if (data.type() == static_cast<QVariant::Type>(qMetaTypeId<QPixmap>()))
-        return data.value<QPixmap>().size();
-    if (data.type() == static_cast<QVariant::Type>(qMetaTypeId<QImage>()))
-        return data.value<QImage>().size();
-    return QSize(0, 0);
-}
-
-static JSValueRef getPixmapWidth(JSContextRef context, JSObjectRef object, JSStringRef, JSValueRef*)
-{
-    QVariant& data = *static_cast<QVariant*>(JSObjectGetPrivate(object));
-    return JSValueMakeNumber(context, imageSizeForVariant(data).width());
-}
-
-static JSValueRef getPixmapHeight(JSContextRef context, JSObjectRef object, JSStringRef, JSValueRef*)
-{
-    QVariant& data = *static_cast<QVariant*>(JSObjectGetPrivate(object));
-    return JSValueMakeNumber(context, imageSizeForVariant(data).height());
-}
-
-static JSValueRef assignToHTMLImageElement(JSContextRef context, JSObjectRef function, JSObjectRef object, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
-{
-    if (!argumentCount)
-        return JSValueMakeUndefined(context);
-
-    JSObjectRef objectArg = JSValueToObject(context, arguments[0], exception);
-    if (!objectArg)
-        return JSValueMakeUndefined(context);
-
-    JSObject* jsObject = ::toJS(objectArg);
-
-    if (!jsObject->inherits(JSHTMLImageElement::info()))
-        return JSValueMakeUndefined(context);
-
-    QVariant& data = *static_cast<QVariant*>(JSObjectGetPrivate(object));
-
-    // We now know that we have a valid <img> element as the argument, we can attach the pixmap to it.
-    RefPtr<StillImage> stillImage = WebCore::StillImage::create(toPixmap(data));
-    HTMLImageElement* imageElement = static_cast<JSHTMLImageElement*>(jsObject)->impl();
-    imageElement->setCachedImage(new CachedImage(stillImage.get()));
-    return JSValueMakeUndefined(context);
-}
-
-static JSValueRef pixmapToImageData(JSContextRef context, JSObjectRef function, JSObjectRef object, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
-{
-    QVariant& data = *static_cast<QVariant*>(JSObjectGetPrivate(object));
-    QImage image = toImage(data);
-    int width = image.width();
-    int height = image.height();
-
-    RefPtr<ImageData> imageData = ImageData::create(IntSize(width, height));
-    copyPixelsInto(image, width, height, imageData->data()->data());
-    JSDOMGlobalObject* globalObject = static_cast<JSDOMGlobalObject*>(::toJS(JSContextGetGlobalObject(context)));
-    JSC::ExecState* exec = ::toJS(context);
-    return ::toRef(exec, toJS(exec, globalObject, imageData.get()));
-}
-
-static JSValueRef pixmapToDataUrl(JSContextRef context, JSObjectRef function, JSObjectRef object, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
-{
-    QVariant& data = *static_cast<QVariant*>(JSObjectGetPrivate(object));
-    QByteArray byteArray;
-    QBuffer buffer(&byteArray);
-    toImage(data).save(&buffer, "PNG");
-    QByteArray encoded = QByteArray("data:image/png;base64,") + byteArray.toBase64();
-    JSRetainPtr<JSStringRef> str(Adopt, JSStringCreateWithUTF8CString(encoded.constData()));
-    JSValueRef value = JSValueMakeString(context, str.get());
-
-    return value;
-}
-
-static JSValueRef pixmapToString(JSContextRef context, JSObjectRef function, JSObjectRef object, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
-{
-    QVariant& data = *static_cast<QVariant*>(JSObjectGetPrivate(object));
-    QSize size = imageSizeForVariant(data);
-    QString stringValue = QString::fromLatin1("[Qt Native Pixmap %1,%2]").arg(size.width()).arg(size.height());
-    JSRetainPtr<JSStringRef> str(Adopt, JSStringCreateWithUTF8CString(stringValue.toUtf8().constData()));
-    JSValueRef value = JSValueMakeString(context, str.get());
-
-    return value;
-}
-
-static void finalizePixmap(JSObjectRef object)
-{
-    delete static_cast<QVariant*>(JSObjectGetPrivate(object));
-}
-
-JSObjectRef QtPixmapRuntime::toJS(JSContextRef context, const QVariant& value, JSValueRef* exception)
-{
-    return JSObjectMake(context, getClassRef(), new QVariant(value));
-}
-
-static QVariant emptyVariantForHint(QMetaType::Type hint)
-{
-    if (hint == qMetaTypeId<QPixmap>())
-        return QVariant::fromValue(QPixmap());
-    if (hint == qMetaTypeId<QImage>())
-        return QVariant::fromValue(QImage());
-    return QVariant();
-}
-
-QVariant QtPixmapRuntime::toQt(JSContextRef context, JSObjectRef obj, QMetaType::Type hint, JSValueRef* exception)
-{
-    if (!obj)
-        return emptyVariantForHint(hint);
-
-    if (JSValueIsObjectOfClass(context, obj, QtPixmapRuntime::getClassRef())) {
-        QVariant* originalVariant = static_cast<QVariant*>(JSObjectGetPrivate(obj));
-        if (hint == qMetaTypeId<QPixmap>())
-            return QVariant::fromValue<QPixmap>(toPixmap(*originalVariant));
-
-        if (hint == qMetaTypeId<QImage>())
-            return QVariant::fromValue<QImage>(toImage(*originalVariant));
-    }
-
-    JSObject* jsObject = ::toJS(obj);
-    if (!jsObject->inherits(JSHTMLImageElement::info()))
-        return emptyVariantForHint(hint);
-
-    JSHTMLImageElement* elementJSWrapper = static_cast<JSHTMLImageElement*>(jsObject);
-    HTMLImageElement* imageElement = elementJSWrapper->impl();
-
-    if (!imageElement)
-        return emptyVariantForHint(hint);
-
-    CachedImage* cachedImage = imageElement->cachedImage();
-    if (!cachedImage)
-        return emptyVariantForHint(hint);
-
-    Image* image = cachedImage->imageForRenderer(imageElement->renderer());
-    if (!image)
-        return emptyVariantForHint(hint);
-
-    QPixmap* pixmap = image->nativeImageForCurrentFrame();
-    if (!pixmap)
-        return emptyVariantForHint(hint);
-
-    return (hint == static_cast<QMetaType::Type>(qMetaTypeId<QPixmap>()))
-        ? QVariant::fromValue<QPixmap>(*pixmap)
-        : QVariant::fromValue<QImage>(pixmap->toImage());
-}
-
-bool QtPixmapRuntime::canHandle(QMetaType::Type hint)
-{
-    return hint == qMetaTypeId<QImage>() || hint == qMetaTypeId<QPixmap>();
-}
-
-JSClassRef QtPixmapRuntime::getClassRef()
-{
-    static const JSStaticValue staticValues[] = {
-        { "width", getPixmapWidth, 0, 0 },
-        { "height", getPixmapHeight, 0, 0 },
-        { 0, 0, 0, 0}
-    };
-
-    static const JSStaticFunction staticFunctions[] = {
-        { "assignToHTMLImageElement", assignToHTMLImageElement, 0 },
-        { "toDataUrl", pixmapToDataUrl, 0 },
-        { "toImageData", pixmapToImageData, 0 },
-        { "toString", pixmapToString, 0 },
-        { 0, 0, 0 }
-    };
-
-    static const JSClassDefinition classDefinition = {
-        0, 0, "QtPixmapRuntimeObject", 0, staticValues, staticFunctions,
-        0, finalizePixmap, 0, 0, 0, 0, 0, 0, 0, 0, 0
-    };
-
-    static JSClassRef classRef = JSClassCreate(&classDefinition);
-    return classRef;
-}
-
-
-}
-
-}
diff --git a/Source/WebCore/bridge/qt/qt_pixmapruntime.h b/Source/WebCore/bridge/qt/qt_pixmapruntime.h
deleted file mode 100644 (file)
index 1fda016..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
- *
- *  This library is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public
- *  License as published by the Free Software Foundation; either
- *  version 2 of the License, or (at your option) any later version.
- *
- *  This library is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this library; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#ifndef qt_pixmapruntime_h
-#define qt_pixmapruntime_h
-
-#include "BridgeJSC.h"
-#include "JavaScript.h"
-#include <QVariant>
-
-namespace JSC {
-
-namespace Bindings {
-
-class QtPixmapRuntime {
-public:
-    static JSObjectRef toJS(JSContextRef, const QVariant&, JSValueRef* exception);
-    static QVariant toQt(JSContextRef, JSObjectRef, QMetaType::Type hint, JSValueRef* exception);
-    static bool canHandle(QMetaType::Type hint);
-
-    static JSClassRef getClassRef();
-};
-
-}
-
-}
-#endif
diff --git a/Source/WebCore/bridge/qt/qt_runtime.cpp b/Source/WebCore/bridge/qt/qt_runtime.cpp
deleted file mode 100644 (file)
index 269ac6c..0000000
+++ /dev/null
@@ -1,1591 +0,0 @@
-/*
- * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
- *
- *  This library is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public
- *  License as published by the Free Software Foundation; either
- *  version 2 of the License, or (at your option) any later version.
- *
- *  This library is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this library; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#include "config.h"
-#include "qt_runtime.h"
-
-#include "APICast.h"
-#include "APIShims.h"
-#include "BooleanObject.h"
-#include "DateInstance.h"
-#include "DatePrototype.h"
-#include "FunctionPrototype.h"
-#include "Interpreter.h"
-#include "JSArray.h"
-#include "JSContextRefPrivate.h"
-#include "JSDOMBinding.h"
-#include "JSDOMWindow.h"
-#include "JSDocument.h"
-#include "JSGlobalObject.h"
-#include "JSHTMLElement.h"
-#include "JSLock.h"
-#include "JSObject.h"
-#include "JSRetainPtr.h"
-#include "JSUint8ClampedArray.h"
-#include "ObjectPrototype.h"
-#include "PropertyNameArray.h"
-#include "qdatetime.h"
-#include "qdebug.h"
-#include "qmetaobject.h"
-#include "qmetatype.h"
-#include "qobject.h"
-#include "qstringlist.h"
-#include "qt_instance.h"
-#include "qt_pixmapruntime.h"
-#include "qvarlengtharray.h"
-#include <JSFunction.h>
-
-#include <wtf/DateMath.h>
-
-#include <limits.h>
-#include <runtime/Error.h>
-#include <runtime_array.h>
-#include <runtime_object.h>
-
-// QtScript has these
-Q_DECLARE_METATYPE(QObjectList);
-Q_DECLARE_METATYPE(QList<int>);
-Q_DECLARE_METATYPE(QVariant);
-
-using namespace WebCore;
-
-namespace JSC {
-namespace Bindings {
-
-// Debugging
-//#define QTWK_RUNTIME_CONVERSION_DEBUG
-//#define QTWK_RUNTIME_MATCH_DEBUG
-
-class QWKNoDebug
-{
-public:
-    inline QWKNoDebug(){}
-    inline ~QWKNoDebug(){}
-
-    template<typename T>
-    inline QWKNoDebug &operator<<(const T &) { return *this; }
-};
-
-#ifdef QTWK_RUNTIME_CONVERSION_DEBUG
-#define qConvDebug() qDebug()
-#else
-#define qConvDebug() QWKNoDebug()
-#endif
-
-#ifdef QTWK_RUNTIME_MATCH_DEBUG
-#define qMatchDebug() qDebug()
-#else
-#define qMatchDebug() QWKNoDebug()
-#endif
-
-typedef enum {
-    Variant = 0,
-    Number,
-    Boolean,
-    RTString,
-    Date,
-    Array,
-    QObj,
-    Object,
-    Null,
-    RTUint8Array
-} JSRealType;
-
-#if defined(QTWK_RUNTIME_CONVERSION_DEBUG) || defined(QTWK_RUNTIME_MATCH_DEBUG)
-QDebug operator<<(QDebug dbg, const JSRealType &c)
-{
-     const char *map[] = { "Variant", "Number", "Boolean", "RTString", "Date",
-         "Array", "RTObject", "Object", "Null"};
-
-     dbg.nospace() << "JSType(" << ((int)c) << ", " <<  map[c] << ")";
-
-     return dbg.space();
-}
-#endif
-
-void setException(JSContextRef context, JSValueRef* exception, const QString& text)
-{
-    if (!exception)
-        return;
-
-    JSStringRef errorStr = JSStringCreateWithUTF8CString(text.toUtf8());
-    JSValueRef errorVal[] = { JSValueMakeString(context, errorStr) };
-    *exception = JSObjectMakeError(context, 1, errorVal, 0);
-    JSStringRelease(errorStr);
-}
-
-struct RuntimeConversion {
-    ConvertToJSValueFunction toJSValueFunc;
-    ConvertToVariantFunction toVariantFunc;
-};
-
-typedef QHash<int, RuntimeConversion> RuntimeConversionTable;
-Q_GLOBAL_STATIC(RuntimeConversionTable, customRuntimeConversions)
-
-void registerCustomType(int qtMetaTypeId, ConvertToVariantFunction toVariantFunc, ConvertToJSValueFunction toJSValueFunc)
-{
-    RuntimeConversion conversion;
-    conversion.toJSValueFunc = toJSValueFunc;
-    conversion.toVariantFunc = toVariantFunc;
-    customRuntimeConversions()->insert(qtMetaTypeId, conversion);
-}
-
-static bool isJSUint8Array(JSObjectRef object)
-{
-    return toJS(object)->inherits(JSUint8Array::info());
-}
-
-static bool isJSArray(JSObjectRef object)
-{
-    return toJS(object)->inherits(JSArray::info());
-}
-
-static bool isJSDate(JSObjectRef object)
-{
-    return toJS(object)->inherits(DateInstance::info());
-}
-
-static bool isQtObject(JSObjectRef object)
-{
-    return toJS(object)->inherits(RuntimeObject::info());
-}
-
-static JSRealType valueRealType(JSContextRef context, JSValueRef value, JSValueRef* exception)
-{
-    if (JSValueIsNumber(context, value))
-        return Number;
-    if (JSValueIsString(context, value))
-        return RTString;
-    if (JSValueIsBoolean(context, value))
-        return Boolean;
-    if (JSValueIsNull(context, value))
-        return Null;
-    if (!JSValueIsObject(context, value))
-        return RTString; // I don't know.
-
-    JSObjectRef object = JSValueToObject(context, value, exception);
-
-    if (isJSUint8Array(object))
-        return RTUint8Array;
-    if (isJSArray(object))
-            return Array;
-    if (isJSDate(object))
-            return Date;
-    if (isQtObject(object))
-            return QObj;
-
-    return Object;
-}
-
-static QString toString(JSStringRef stringRef)
-{
-    return QString(reinterpret_cast<const QChar*>(JSStringGetCharactersPtr(stringRef)), JSStringGetLength(stringRef));
-}
-
-static JSValueRef unwrapBoxedPrimitive(JSContextRef context, JSValueRef value, JSObjectRef obj)
-{
-    ExecState* exec = toJS(context);
-    APIEntryShim entryShim(exec);
-    JSObject* object = toJS(obj);
-    if (object->inherits(NumberObject::info()))
-        return toRef(exec, jsNumber(object->toNumber(exec)));
-    if (object->inherits(StringObject::info()))
-        return toRef(exec, object->toString(exec));
-    if (object->inherits(BooleanObject::info()))
-        return toRef(exec, object->toPrimitive(exec));
-    return value;
-}
-
-QVariant convertValueToQVariant(JSContextRef, JSValueRef, QMetaType::Type, int*, HashSet<JSObjectRef>*, int, JSValueRef *exception);
-
-static QVariantMap convertValueToQVariantMap(JSContextRef context, JSObjectRef object, HashSet<JSObjectRef>* visitedObjects, int recursionLimit, JSValueRef* exception)
-{
-    QVariantMap result;
-    JSPropertyNameArrayRef properties = JSObjectCopyPropertyNames(context, object);
-    size_t propertyCount = JSPropertyNameArrayGetCount(properties);
-
-    for (size_t i = 0; i < propertyCount; ++i) {
-        JSStringRef name = JSPropertyNameArrayGetNameAtIndex(properties, i);
-
-        int propertyConversionDistance = 0;
-        JSValueRef property = JSObjectGetProperty(context, object, name, exception);
-        QVariant v = convertValueToQVariant(context, property, QMetaType::Void, &propertyConversionDistance, visitedObjects, recursionLimit, exception);
-        if (exception && *exception)
-            *exception = 0;
-        else if (propertyConversionDistance >= 0) {
-            result.insert(toString(name), v);
-        }
-    }
-    JSPropertyNameArrayRelease(properties);
-    return result;
-}
-
-template <typename ItemType>
-QList<ItemType> convertToList(JSContextRef context, JSRealType type, JSObjectRef object,
-                              JSValueRef value, int* distance, HashSet<JSObjectRef>* visitedObjects, int recursionLimit, JSValueRef* exception,
-                              const QMetaType::Type typeId = static_cast<QMetaType::Type>(qMetaTypeId<ItemType>()))
-{
-    QList<ItemType> list;
-    if (type == Array) {
-        static JSStringRef lengthStr = JSStringCreateWithUTF8CString("length");
-        JSValueRef lengthVal = JSObjectGetProperty(context, object, lengthStr, exception);
-        size_t length = JSValueToNumber(context, lengthVal, exception);
-        list.reserve(length);
-        for (size_t i = 0; i < length; ++i) {
-            JSValueRef value = JSObjectGetPropertyAtIndex(context, object, i, exception);
-            int itemDistance = -1;
-            QVariant variant = convertValueToQVariant(context, value, typeId, &itemDistance, visitedObjects, recursionLimit, exception);
-            if (itemDistance >= 0)
-                list << variant.value<ItemType>();
-            else
-                break;
-        }
-        if (list.count() != length)
-            list.clear();
-        else if (distance)
-            *distance = 5;
-    } else {
-        int itemDistance = -1;
-        QVariant variant = convertValueToQVariant(context, value, typeId, &itemDistance, visitedObjects, recursionLimit, exception);
-        if (itemDistance >= 0) {
-            list << variant.value<ItemType>();
-            if (distance)
-                *distance = 10;
-        }
-    }
-    return list;
-}
-
-static QString toQString(JSContextRef context, JSValueRef value)
-{
-    JSRetainPtr<JSStringRef> string(Adopt, JSValueToStringCopy(context, value, 0));
-    if (!string)
-        return QString();
-    return QString(reinterpret_cast<const QChar*>(JSStringGetCharactersPtr(string.get())), JSStringGetLength(string.get()));
-}
-
-static void getGregorianDateTimeUTC(JSContextRef context, JSRealType type, JSValueRef value, JSObjectRef object, JSValueRef* exception, GregorianDateTime* gdt)
-{
-    ExecState* exec = toJS(context);
-    APIEntryShim entryShim(exec);
-    if (type == Date) {
-        JSObject* jsObject = toJS(object);
-        DateInstance* date = asDateInstance(jsObject);
-        gdt->copyFrom(*date->gregorianDateTimeUTC(exec));
-    } else {
-        double ms = JSValueToNumber(context, value, exception);
-        GregorianDateTime convertedGdt;
-        msToGregorianDateTime(exec->vm(), ms, /*utc*/ true, convertedGdt);
-        gdt->copyFrom(convertedGdt);
-    }
-}
-
-static QDateTime toQDateTimeUTC(JSContextRef context, JSRealType type, JSValueRef value, JSObjectRef object, JSValueRef* exception)
-{
-    GregorianDateTime gdt;
-    getGregorianDateTimeUTC(context, type, value, object, exception, &gdt);
-    QDate date(gdt.year(), gdt.month() + 1, gdt.monthDay());
-    QTime time(gdt.hour(), gdt.minute(), gdt.second());
-    return QDateTime(date, time, Qt::UTC);
-}
-
-QVariant convertValueToQVariant(JSContextRef context, JSValueRef value, QMetaType::Type hint, int *distance, HashSet<JSObjectRef>* visitedObjects, int recursionLimit, JSValueRef* exception)
-{
-    --recursionLimit;
-
-    if (!value || !recursionLimit)
-        return QVariant();
-
-    JSObjectRef object = 0;
-    if (JSValueIsObject(context, value)) {
-        object = JSValueToObject(context, value, 0);
-        if (visitedObjects->contains(object))
-            return QVariant();
-
-        visitedObjects->add(object);
-
-        value = unwrapBoxedPrimitive(context, value, object);
-    }
-
-    // check magic pointer values before dereferencing value
-    if (JSValueIsNumber(context, value)
-        && std::isnan(JSValueToNumber(context, value, exception))) {
-        if (distance)
-            *distance = -1;
-        return QVariant();
-    }
-
-    if (JSValueIsUndefined(context, value) && hint != QMetaType::QString && hint != (QMetaType::Type) qMetaTypeId<QVariant>()) {
-        if (distance)
-            *distance = -1;
-        return QVariant();
-    }
-
-    JSRealType type = valueRealType(context, value, exception);
-    if (hint == QMetaType::Void) {
-        switch(type) {
-            case Number:
-                hint = QMetaType::Double;
-                break;
-            case Boolean:
-                hint = QMetaType::Bool;
-                break;
-            case RTString:
-            default:
-                hint = QMetaType::QString;
-                break;
-            case Date:
-                hint = QMetaType::QDateTime;
-                break;
-            case Object:
-                hint = QMetaType::QVariantMap;
-                break;
-            case QObj:
-                hint = QMetaType::QObjectStar;
-                break;
-            case RTUint8Array:
-                hint = QMetaType::QByteArray;
-                break;
-            case Array:
-                hint = QMetaType::QVariantList;
-                break;
-        }
-    }
-
-    qConvDebug() << "convertValueToQVariant: jstype is " << type << ", hint is" << hint;
-
-    if (JSValueIsNull(context, value)
-        && hint != QMetaType::QObjectStar
-        && hint != QMetaType::VoidStar
-        && hint != QMetaType::QString
-        && hint != (QMetaType::Type) qMetaTypeId<QVariant>()) {
-        if (distance)
-            *distance = -1;
-        return QVariant();
-    }
-
-    QVariant ret;
-    int dist = -1;
-    switch (hint) {
-        case QMetaType::Bool:
-            ret = QVariant(JSValueToBoolean(context, value));
-            if (type == Boolean)
-                dist = 0;
-            else
-                dist = 10;
-            break;
-
-        case QMetaType::Int:
-        case QMetaType::UInt:
-        case QMetaType::Long:
-        case QMetaType::ULong:
-        case QMetaType::LongLong:
-        case QMetaType::ULongLong:
-        case QMetaType::Short:
-        case QMetaType::UShort:
-        case QMetaType::Float:
-        case QMetaType::Double:
-            ret = QVariant(JSValueToNumber(context, value, 0));
-            ret.convert((QVariant::Type)hint);
-            if (type == Number) {
-                switch (hint) {
-                case QMetaType::Double:
-                    dist = 0;
-                    break;
-                case QMetaType::Float:
-                    dist = 1;
-                    break;
-                case QMetaType::LongLong:
-                case QMetaType::ULongLong:
-                    dist = 2;
-                    break;
-                case QMetaType::Long:
-                case QMetaType::ULong:
-                    dist = 3;
-                    break;
-                case QMetaType::Int:
-                case QMetaType::UInt:
-                    dist = 4;
-                    break;
-                case QMetaType::Short:
-                case QMetaType::UShort:
-                    dist = 5;
-                    break;
-                    break;
-                default:
-                    dist = 10;
-                    break;
-                }
-            } else {
-                dist = 10;
-            }
-            break;
-
-        case QMetaType::QChar:
-            if (type == Number || type == Boolean) {
-                ret = QVariant(QChar((ushort)JSValueToNumber(context, value, 0)));
-                if (type == Boolean)
-                    dist = 3;
-                else
-                    dist = 6;
-            } else {
-                JSRetainPtr<JSStringRef> str(Adopt, JSValueToStringCopy(context, value, exception));
-                QChar ch;
-                if (str && JSStringGetLength(str.get()) > 0)
-                    ch = *reinterpret_cast<const QChar*>(JSStringGetCharactersPtr(str.get()));
-                ret = QVariant(ch);
-                if (type == RTString)
-                    dist = 3;
-                else
-                    dist = 10;
-            }
-            break;
-
-        case QMetaType::QString: {
-            if (JSValueIsNull(context, value) || JSValueIsUndefined(context, value)) {
-                if (distance)
-                    *distance = 1;
-                return QString();
-            }
-            JSRetainPtr<JSStringRef> str(Adopt, JSValueToStringCopy(context, value, exception));
-            if (str) {
-                QString string(reinterpret_cast<const QChar*>(JSStringGetCharactersPtr(str.get())), JSStringGetLength(str.get()));
-                ret = QVariant(string);
-                if (type == RTString)
-                    dist = 0;
-                else
-                    dist = 10;
-            }
-            break;
-        }
-
-        case QMetaType::QVariantMap:
-            if (type == Object || type == Array) {
-                ret = QVariant(convertValueToQVariantMap(context, object, visitedObjects, recursionLimit, exception));
-                // Those types can still have perfect matches, e.g. 'bool' if value is a Boolean Object.
-                dist = 1;
-            }
-            break;
-
-        case QMetaType::QVariantList:
-            ret = QVariant(convertToList<QVariant>(context, type, object, value, &dist, visitedObjects, recursionLimit, exception, QMetaType::Void));
-            break;
-
-        case QMetaType::QStringList: {
-            ret = QVariant(convertToList<QString>(context, type, object, value, &dist, visitedObjects, recursionLimit, exception));
-            break;
-        }
-
-        case QMetaType::QByteArray: {
-            if (type == RTUint8Array) {
-                RefPtr<JSC::Uint8Array> arr = toUint8Array(toJS(toJS(context), value));
-                ret = QVariant(QByteArray(reinterpret_cast<const char*>(arr->data()), arr->length()));
-                dist = 0;
-            } else {
-                ret = QVariant(toQString(context, value).toLatin1());
-                if (type == RTString)
-                    dist = 5;
-                else
-                    dist = 10;
-            }
-            break;
-        }
-
-        case QMetaType::QDateTime:
-        case QMetaType::QDate:
-        case QMetaType::QTime:
-            if (type == Date || type == Number) {
-                QDateTime dt = toQDateTimeUTC(context, type, value, object, exception);
-                const bool isNumber = (type == Number);
-                if (hint == QMetaType::QDateTime) {
-                    ret = dt;
-                    dist = isNumber ? 6 : 0;
-                } else if (hint == QMetaType::QDate) {
-                    ret = dt.date();
-                    dist = isNumber ? 8 : 1;
-                } else {
-                    ret = dt.time();
-                    dist = isNumber ? 10 : 2;
-                }
-            } else if (type == RTString) {
-                QString qstring = toQString(context, value);
-                if (hint == QMetaType::QDateTime) {
-                    QDateTime dt = QDateTime::fromString(qstring, Qt::ISODate);
-                    if (!dt.isValid())
-                        dt = QDateTime::fromString(qstring, Qt::TextDate);
-                    if (!dt.isValid())
-                        dt = QDateTime::fromString(qstring, Qt::SystemLocaleDate);
-                    if (!dt.isValid())
-                        dt = QDateTime::fromString(qstring, Qt::LocaleDate);
-                    if (dt.isValid()) {
-                        ret = dt;
-                        dist = 2;
-                    }
-                } else if (hint == QMetaType::QDate) {
-                    QDate dt = QDate::fromString(qstring, Qt::ISODate);
-                    if (!dt.isValid())
-                        dt = QDate::fromString(qstring, Qt::TextDate);
-                    if (!dt.isValid())
-                        dt = QDate::fromString(qstring, Qt::SystemLocaleDate);
-                    if (!dt.isValid())
-                        dt = QDate::fromString(qstring, Qt::LocaleDate);
-                    if (dt.isValid()) {
-                        ret = dt;
-                        dist = 3;
-                    }
-                } else {
-                    QTime dt = QTime::fromString(qstring, Qt::ISODate);
-                    if (!dt.isValid())
-                        dt = QTime::fromString(qstring, Qt::TextDate);
-                    if (!dt.isValid())
-                        dt = QTime::fromString(qstring, Qt::SystemLocaleDate);
-                    if (!dt.isValid())
-                        dt = QTime::fromString(qstring, Qt::LocaleDate);
-                    if (dt.isValid()) {
-                        ret = dt;
-                        dist = 3;
-                    }
-                }
-            }
-            break;
-
-        case QMetaType::QObjectStar:
-            if (type == QObj) {
-                QtInstance* qtinst = QtInstance::getInstance(toJS(object));
-                if (qtinst) {
-                    if (qtinst->getObject()) {
-                        qConvDebug() << "found instance, with object:" << (void*) qtinst->getObject();
-                        ret = QVariant::fromValue(qtinst->getObject());
-                        qConvDebug() << ret;
-                        dist = 0;
-                    } else {
-                        qConvDebug() << "can't convert deleted qobject";
-                    }
-                } else {
-                    qConvDebug() << "wasn't a qtinstance";
-                }
-            } else if (type == Null) {
-                QObject* nullobj = 0;
-                ret = QVariant::fromValue(nullobj);
-                dist = 0;
-            } else {
-                qConvDebug() << "previous type was not an object:" << type;
-            }
-            break;
-
-        case QMetaType::VoidStar:
-            if (type == QObj) {
-                QtInstance* qtinst = QtInstance::getInstance(toJS(object));
-                if (qtinst) {
-                    if (qtinst->getObject()) {
-                        qConvDebug() << "found instance, with object:" << (void*) qtinst->getObject();
-                        ret = QVariant::fromValue((void *)qtinst->getObject());
-                        qConvDebug() << ret;
-                        dist = 0;
-                    } else {
-                        qConvDebug() << "can't convert deleted qobject";
-                    }
-                } else {
-                    qConvDebug() << "wasn't a qtinstance";
-                }
-            } else if (type == Null) {
-                ret = QVariant::fromValue((void*)0);
-                dist = 0;
-            } else if (type == Number) {
-                // I don't think that converting a double to a pointer is a wise
-                // move.  Except maybe 0.
-                qConvDebug() << "got number for void * - not converting, seems unsafe:" << JSValueToNumber(context, value, 0);
-            } else {
-                qConvDebug() << "void* - unhandled type" << type;
-            }
-            break;
-
-        default:
-            // Non const type ids
-            if (hint == (QMetaType::Type) qMetaTypeId<QObjectList>()) {
-                ret = QVariant::fromValue(convertToList<QObject*>(context, type, object, value, &dist, visitedObjects, recursionLimit, exception));
-                break;
-            }
-            if (hint == (QMetaType::Type) qMetaTypeId<QList<int> >()) {
-                ret = QVariant::fromValue(convertToList<int>(context, type, object, value, &dist, visitedObjects, recursionLimit, exception));
-                break;
-            }
-            if (QtPixmapRuntime::canHandle(static_cast<QMetaType::Type>(hint))) {
-                ret = QtPixmapRuntime::toQt(context, object, static_cast<QMetaType::Type>(hint), exception);
-            } else if (customRuntimeConversions()->contains(hint)) {
-                ret = customRuntimeConversions()->value(hint).toVariantFunc(toJS(object), &dist, visitedObjects);
-                if (dist == 0)
-                    break;
-            } else if (hint == (QMetaType::Type) qMetaTypeId<QVariant>()) {
-                if (JSValueIsNull(context, value) || JSValueIsUndefined(context, value)) {
-                    if (distance)
-                        *distance = 1;
-                    return QVariant();
-                }
-                if (type == Object) {
-                    // Since we haven't really visited this object yet, we remove it
-                    visitedObjects->remove(object);
-                }
-
-                // And then recurse with the autodetect flag
-                ret = convertValueToQVariant(context, value, QMetaType::Void, distance, visitedObjects, recursionLimit, exception);
-                dist = 10;
-                break;
-            }
-
-            dist = 10;
-            break;
-    }
-
-    if (!ret.isValid())
-        dist = -1;
-    if (distance)
-        *distance = dist;
-
-    return ret;
-}
-
-QVariant convertValueToQVariant(JSContextRef context, JSValueRef value, QMetaType::Type hint, int *distance, JSValueRef *exception)
-{
-    const int recursionLimit = 200;
-    HashSet<JSObjectRef> visitedObjects;
-    return convertValueToQVariant(context, value, hint, distance, &visitedObjects, recursionLimit, exception);
-}
-
-JSValueRef convertQVariantToValue(JSContextRef context, PassRefPtr<RootObject> root, const QVariant& variant, JSValueRef *exception)
-{
-    // Variants with QObject * can be isNull but not a null pointer
-    // An empty QString variant is also null
-    QMetaType::Type type = (QMetaType::Type) variant.userType();
-
-    qConvDebug() << "convertQVariantToValue: metatype:" << type << ", isnull: " << variant.isNull();
-    if (variant.isNull() &&
-        !QMetaType::typeFlags(type).testFlag(QMetaType::PointerToQObject) &&
-        type != QMetaType::VoidStar &&
-        type != QMetaType::QString) {
-        return JSValueMakeNull(context);
-    }
-
-    if (type == QMetaType::Bool)
-        return JSValueMakeBoolean(context, variant.toBool());
-
-    if (type == QMetaType::Int ||
-        type == QMetaType::UInt ||
-        type == QMetaType::Long ||
-        type == QMetaType::ULong ||
-        type == QMetaType::LongLong ||
-        type == QMetaType::ULongLong ||
-        type == QMetaType::Short ||
-        type == QMetaType::UShort ||
-        type == QMetaType::Float ||
-        type == QMetaType::Double)
-        return JSValueMakeNumber(context, variant.toDouble());
-
-    if (type == QMetaType::QDateTime ||
-        type == QMetaType::QDate ||
-        type == QMetaType::QTime) {
-
-        QDate date = QDate::currentDate();
-        QTime time(0,0,0); // midnight
-
-        if (type == QMetaType::QDate)
-            date = variant.value<QDate>();
-        else if (type == QMetaType::QTime)
-            time = variant.value<QTime>();
-        else {
-            QDateTime dt = variant.value<QDateTime>().toLocalTime();
-            date = dt.date();
-            time = dt.time();
-        }
-
-        // Dates specified this way are in local time (we convert DateTimes above)
-        const JSValueRef arguments[] = {
-            JSValueMakeNumber(context, date.year()),
-            JSValueMakeNumber(context, date.month() - 1),
-            JSValueMakeNumber(context, date.day()),
-            JSValueMakeNumber(context, time.hour()),
-            JSValueMakeNumber(context, time.minute()),
-            JSValueMakeNumber(context, time.second()),
-            JSValueMakeNumber(context, time.msec())
-        };
-        return JSObjectMakeDate(context, 7, arguments, exception);
-    }
-
-    if (type == QMetaType::QByteArray) {
-        QByteArray qtByteArray = variant.value<QByteArray>();
-        WTF::RefPtr<JSC::Uint8ClampedArray> wtfByteArray = JSC::Uint8ClampedArray::createUninitialized(qtByteArray.length());
-        memcpy(wtfByteArray->data(), qtByteArray.constData(), qtByteArray.length());
-        ExecState* exec = toJS(context);
-        APIEntryShim entryShim(exec);
-        return toRef(exec, toJS(exec, static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), wtfByteArray.get()));
-    }
-
-    if (QMetaType::typeFlags(type).testFlag(QMetaType::PointerToQObject)) {
-        QObject* obj = variant.value<QObject*>();
-        if (!obj)
-            return JSValueMakeNull(context);
-        ExecState* exec = toJS(context);
-        APIEntryShim entryShim(exec);
-        return toRef(exec, QtInstance::getQtInstance(obj, root, QtInstance::QtOwnership)->createRuntimeObject(exec));
-    }
-
-    if (QtPixmapRuntime::canHandle(static_cast<QMetaType::Type>(variant.type())))
-        return QtPixmapRuntime::toJS(context, variant, exception);
-
-    if (customRuntimeConversions()->contains(type)) {
-        if (!root->globalObject()->inherits(JSDOMWindow::info()))
-            return JSValueMakeUndefined(context);
-
-        Document* document = (static_cast<JSDOMWindow*>(root->globalObject()))->impl()->document();
-        if (!document)
-            return JSValueMakeUndefined(context);
-        ExecState* exec = toJS(context);
-        APIEntryShim entryShim(exec);
-        return toRef(exec, customRuntimeConversions()->value(type).toJSValueFunc(exec, toJSDOMGlobalObject(document, exec), variant));
-    }
-
-    if (type == QMetaType::QVariantMap) {
-        // create a new object, and stuff properties into it
-        JSObjectRef ret = JSObjectMake(context, 0, 0);
-        QVariantMap map = variant.value<QVariantMap>();
-        QVariantMap::const_iterator i = map.constBegin();
-        while (i != map.constEnd()) {
-            QString s = i.key();
-            JSStringRef propertyName = JSStringCreateWithCharacters(reinterpret_cast<const JSChar*>(s.constData()), s.length());
-            JSValueRef propertyValue = convertQVariantToValue(context, root.get(), i.value(), /*ignored exception*/0);
-            if (propertyValue)
-                JSObjectSetProperty(context, ret, propertyName, propertyValue, kJSPropertyAttributeNone, /*ignored exception*/0);
-            JSStringRelease(propertyName);
-            ++i;
-        }
-
-        return ret;
-    }
-
-    // List types
-    if (type == QMetaType::QVariantList) {
-        // ### TODO: Could use special array class that lazily converts.
-        // See https://bugs.webkit.org/show_bug.cgi?id=94691
-        QVariantList vl = variant.toList();
-        JSObjectRef array = JSObjectMakeArray(context, 0, 0, exception);
-        if (exception && *exception)
-            return array;
-        for (int i = 0; i < vl.count(); ++i) {
-            JSValueRef property = convertQVariantToValue(context, root.get(), vl.at(i), /*ignored exception*/0);
-            if (property)
-                JSObjectSetPropertyAtIndex(context, array, i, property, /*ignored exception*/0);
-        }
-        return array;
-    } else if (type == QMetaType::QStringList) {
-        QStringList sl = variant.value<QStringList>();
-        JSObjectRef array = JSObjectMakeArray(context, 0, 0, exception);
-        for (int i = 0; i < sl.count(); ++i) {
-            const QString& s = sl.at(i);
-            JSStringRef jsString = JSStringCreateWithCharacters(reinterpret_cast<const JSChar*>(s.constData()), s.length());
-            JSObjectSetPropertyAtIndex(context, array, i, JSValueMakeString(context, jsString), /*ignored exception*/0);
-            JSStringRelease(jsString);
-        }
-        return array;
-    } else if (type == static_cast<QMetaType::Type>(qMetaTypeId<QObjectList>())) {
-        QObjectList ol = variant.value<QObjectList>();
-        JSObjectRef array = JSObjectMakeArray(context, 0, 0, exception);
-        ExecState* exec = toJS(context);
-        APIEntryShim entryShim(exec);
-        for (int i = 0; i < ol.count(); ++i) {
-            JSValueRef jsObject = toRef(exec, QtInstance::getQtInstance(ol.at(i), root, QtInstance::QtOwnership)->createRuntimeObject(exec));
-            JSObjectSetPropertyAtIndex(context, array, i, jsObject, /*ignored exception*/0);
-        }
-        return array;
-    } else if (type == static_cast<QMetaType::Type>(qMetaTypeId<QList<int> >())) {
-        QList<int> il = variant.value<QList<int> >();
-        JSObjectRef array = JSObjectMakeArray(context, 0, 0, exception);
-        for (int i = 0; i < il.count(); ++i)
-            JSObjectSetPropertyAtIndex(context, array, i, JSValueMakeNumber(context, il.at(i)), /*ignored exception*/0);
-        return array;
-    }
-
-    if (type == (QMetaType::Type)qMetaTypeId<QVariant>()) {
-        QVariant real = variant.value<QVariant>();
-        qConvDebug() << "real variant is:" << real;
-        return convertQVariantToValue(context, root.get(), real, exception);
-    }
-
-    qConvDebug() << "fallback path for" << variant << variant.userType();
-
-    QString string = variant.toString();
-    JSStringRef jsstring = JSStringCreateWithCharacters(reinterpret_cast<const JSChar*>(string.constData()), string.length());
-    JSValueRef value = JSValueMakeString(context, jsstring);
-    JSStringRelease(jsstring);
-    return value;
-}
-
-// Type conversion metadata (from QtScript originally)
-class QtMethodMatchType
-{
-public:
-    enum Kind {
-        Invalid,
-        Variant,
-        MetaType,
-        Unresolved,
-        MetaEnum
-    };
-
-
-    QtMethodMatchType()
-        : m_kind(Invalid) { }
-
-    Kind kind() const
-    { return m_kind; }
-
-    QMetaType::Type typeId() const;
-
-    bool isValid() const
-    { return (m_kind != Invalid); }
-
-    bool isVariant() const
-    { return (m_kind == Variant); }
-
-    bool isMetaType() const
-    { return (m_kind == MetaType); }
-
-    bool isUnresolved() const
-    { return (m_kind == Unresolved); }
-
-    bool isMetaEnum() const
-    { return (m_kind == MetaEnum); }
-
-    QByteArray name() const;
-
-    int enumeratorIndex() const
-    { Q_ASSERT(isMetaEnum()); return m_typeId; }
-
-    static QtMethodMatchType variant()
-    { return QtMethodMatchType(Variant); }
-
-    static QtMethodMatchType metaType(int typeId, const QByteArray &name)
-    { return QtMethodMatchType(MetaType, typeId, name); }
-
-    static QtMethodMatchType metaEnum(int enumIndex, const QByteArray &name)
-    { return QtMethodMatchType(MetaEnum, enumIndex, name); }
-
-    static QtMethodMatchType unresolved(const QByteArray &name)
-    { return QtMethodMatchType(Unresolved, /*typeId=*/0, name); }
-
-private:
-    QtMethodMatchType(Kind kind, int typeId = 0, const QByteArray &name = QByteArray())
-        : m_kind(kind), m_typeId(typeId), m_name(name) { }
-
-    Kind m_kind;
-    int m_typeId;
-    QByteArray m_name;
-};
-
-QMetaType::Type QtMethodMatchType::typeId() const
-{
-    if (isVariant())
-        return (QMetaType::Type) qMetaTypeId<QVariant>();
-    return (QMetaType::Type) (isMetaEnum() ? QMetaType::Int : m_typeId);
-}
-
-QByteArray QtMethodMatchType::name() const
-{
-    if (!m_name.isEmpty())
-        return m_name;
-    else if (m_kind == Variant)
-        return "QVariant";
-    return QByteArray();
-}
-
-struct QtMethodMatchData
-{
-    int matchDistance;
-    int index;
-    QVector<QtMethodMatchType> types;
-    QVarLengthArray<QVariant, 10> args;
-
-    QtMethodMatchData(int dist, int idx, QVector<QtMethodMatchType> typs,
-                                const QVarLengthArray<QVariant, 10> &as)
-        : matchDistance(dist), index(idx), types(typs), args(as) { }
-    QtMethodMatchData()
-        : index(-1) { }
-
-    bool isValid() const
-    { return (index != -1); }
-
-    int firstUnresolvedIndex() const
-    {
-        for (int i=0; i < types.count(); i++) {
-            if (types.at(i).isUnresolved())
-                return i;
-        }
-        return -1;
-    }
-};
-
-static int indexOfMetaEnum(const QMetaObject *meta, const QByteArray &str)
-{
-    QByteArray scope;
-    QByteArray name;
-    int scopeIdx = str.indexOf("::");
-    if (scopeIdx != -1) {
-        scope = str.left(scopeIdx);
-        name = str.mid(scopeIdx + 2);
-    } else {
-        name = str;
-    }
-    for (int i = meta->enumeratorCount() - 1; i >= 0; --i) {
-        QMetaEnum m = meta->enumerator(i);
-        if ((m.name() == name)/* && (scope.isEmpty() || (m.scope() == scope))*/)
-            return i;
-    }
-    return -1;
-}
-
-// Helper function for resolving methods
-// Largely based on code in QtScript for compatibility reasons
-static int findMethodIndex(JSContextRef context,
-                           const QMetaObject* meta,
-                           const QByteArray& signature,
-                           int argumentCount,
-                           const JSValueRef arguments[],
-                           bool allowPrivate,
-                           QVarLengthArray<QVariant, 10> &vars,
-                           void** vvars,
-                           JSValueRef* exception)
-{
-    QList<int> matchingIndices;
-
-    bool overloads = !signature.contains('(');
-
-    int count = meta->methodCount();
-    for (int i = count - 1; i >= 0; --i) {
-        const QMetaMethod m = meta->method(i);
-
-        // Don't choose private methods
-        if (m.access() == QMetaMethod::Private && !allowPrivate)
-            continue;
-
-        // try and find all matching named methods
-        if (!overloads && m.methodSignature() == signature)
-            matchingIndices.append(i);
-        else if (overloads && m.name() == signature)
-            matchingIndices.append(i);
-    }
-
-    int chosenIndex = -1;
-    QVector<QtMethodMatchType> chosenTypes;
-
-    QVarLengthArray<QVariant, 10> args;
-    QVector<QtMethodMatchData> candidates;
-    QVector<QtMethodMatchData> unresolved;
-    QVector<int> tooFewArgs;
-    QVector<int> conversionFailed;
-
-    foreach(int index, matchingIndices) {
-        QMetaMethod method = meta->method(index);
-
-        QVector<QtMethodMatchType> types;
-        bool unresolvedTypes = false;
-
-        // resolve return type
-        QByteArray returnTypeName = method.typeName();
-        int rtype = method.returnType();
-        if (rtype == QMetaType::UnknownType) {
-            if (returnTypeName.endsWith('*')) {
-                types.append(QtMethodMatchType::metaType(QMetaType::VoidStar, returnTypeName));
-            } else {
-                int enumIndex = indexOfMetaEnum(meta, returnTypeName);
-                if (enumIndex != -1)
-                    types.append(QtMethodMatchType::metaEnum(enumIndex, returnTypeName));
-                else {
-                    unresolvedTypes = true;
-                    types.append(QtMethodMatchType::unresolved(returnTypeName));
-                }
-            }
-        } else {
-            if (rtype == QMetaType::QVariant)
-                types.append(QtMethodMatchType::variant());
-            else
-                types.append(QtMethodMatchType::metaType(rtype, returnTypeName));
-        }
-
-        // resolve argument types
-        QList<QByteArray> parameterTypeNames = method.parameterTypes();
-        for (int i = 0; i < parameterTypeNames.count(); ++i) {
-            QByteArray argTypeName = parameterTypeNames.at(i);
-            int atype = method.parameterType(i);
-            if (atype == QMetaType::UnknownType) {
-                int enumIndex = indexOfMetaEnum(meta, argTypeName);
-                if (enumIndex != -1)
-                    types.append(QtMethodMatchType::metaEnum(enumIndex, argTypeName));
-                else {
-                    unresolvedTypes = true;
-                    types.append(QtMethodMatchType::unresolved(argTypeName));
-                }
-            } else {
-                if (atype == QMetaType::QVariant)
-                    types.append(QtMethodMatchType::variant());
-                else
-                    types.append(QtMethodMatchType::metaType(atype, argTypeName));
-            }
-        }
-
-        // If the native method requires more arguments than what was passed from JavaScript
-        if (argumentCount + 1 < static_cast<unsigned>(types.count())) {
-            qMatchDebug() << "Match:too few args for" << method.methodSignature();
-            tooFewArgs.append(index);
-            continue;
-        }
-
-        if (unresolvedTypes) {
-            qMatchDebug() << "Match:unresolved arg types for" << method.methodSignature();
-            // remember it so we can give an error message later, if necessary
-            unresolved.append(QtMethodMatchData(/*matchDistance=*/INT_MAX, index,
-                                                   types, QVarLengthArray<QVariant, 10>()));
-            continue;
-        }
-
-        // Now convert arguments
-        if (args.count() != types.count())
-            args.resize(types.count());
-
-        QtMethodMatchType retType = types[0];
-        if (retType.typeId() != QMetaType::Void)
-            args[0] = QVariant(retType.typeId(), (void *)0); // the return value
-
-        bool converted = true;
-        int matchDistance = 0;
-        for (unsigned i = 0; converted && i + 1 < static_cast<unsigned>(types.count()); ++i) {
-            JSValueRef arg = i < argumentCount ? arguments[i] : JSValueMakeUndefined(context);
-
-            int argdistance = -1;
-            QVariant v = convertValueToQVariant(context, arg, types.at(i+1).typeId(), &argdistance, exception);
-            if (argdistance >= 0) {
-                matchDistance += argdistance;
-                args[i+1] = v;
-            } else {
-                qMatchDebug() << "failed to convert argument " << i << "type" << types.at(i+1).typeId() << QMetaType::typeName(types.at(i+1).typeId());
-                converted = false;
-            }
-        }
-
-        qMatchDebug() << "Match: " << method.methodSignature() << (converted ? "converted":"failed to convert") << "distance " << matchDistance;
-
-        if (converted) {
-            if ((argumentCount + 1 == static_cast<unsigned>(types.count()))
-                && (matchDistance == 0)) {
-                // perfect match, use this one
-                chosenIndex = index;
-                chosenTypes = types;
-                break;
-            }
-            QtMethodMatchData currentMatch(matchDistance, index, types, args);
-            if (candidates.isEmpty())
-                candidates.append(currentMatch);
-            else {
-                QtMethodMatchData bestMatchSoFar = candidates.at(0);
-                if ((args.count() > bestMatchSoFar.args.count())
-                    || ((args.count() == bestMatchSoFar.args.count())
-                    && (matchDistance <= bestMatchSoFar.matchDistance)))
-                    candidates.prepend(currentMatch);
-                else
-                    candidates.append(currentMatch);
-            }
-        } else {
-            conversionFailed.append(index);
-        }
-
-        if (!overloads)
-            break;
-    }
-
-    if (chosenIndex == -1 && candidates.count() == 0) {
-        // No valid functions at all - format an error message
-        if (!conversionFailed.isEmpty()) {
-            QString message = QString::fromLatin1("incompatible type of argument(s) in call to %0(); candidates were\n")
-                              .arg(QString::fromLatin1(signature));
-            for (int i = 0; i < conversionFailed.size(); ++i) {
-                if (i > 0)
-                    message += QLatin1String("\n");
-                QMetaMethod mtd = meta->method(conversionFailed.at(i));
-                message += QString::fromLatin1("    %0").arg(QString::fromLatin1(mtd.methodSignature()));
-            }
-            setException(context, exception, message);
-        } else if (!unresolved.isEmpty()) {
-            QtMethodMatchData argsInstance = unresolved.first();
-            int unresolvedIndex = argsInstance.firstUnresolvedIndex();
-            Q_ASSERT(unresolvedIndex != -1);
-            QtMethodMatchType unresolvedType = argsInstance.types.at(unresolvedIndex);
-            QString message = QString::fromLatin1("cannot call %0(): unknown type `%1'")
-                .arg(QString::fromLatin1(signature))
-                .arg(QLatin1String(unresolvedType.name()));
-            setException(context, exception, message);
-        } else {
-            QString message = QString::fromLatin1("too few arguments in call to %0(); candidates are\n")
-                              .arg(QString::fromLatin1(signature));
-            for (int i = 0; i < tooFewArgs.size(); ++i) {
-                if (i > 0)
-                    message += QLatin1String("\n");
-                QMetaMethod mtd = meta->method(tooFewArgs.at(i));
-                message += QString::fromLatin1("    %0").arg(QString::fromLatin1(mtd.methodSignature()));
-            }
-            setException(context, exception, message);
-        }
-    }
-
-    if (chosenIndex == -1 && candidates.count() > 0) {
-        QtMethodMatchData bestMatch = candidates.at(0);
-        if ((candidates.size() > 1)
-            && (bestMatch.args.count() == candidates.at(1).args.count())
-            && (bestMatch.matchDistance == candidates.at(1).matchDistance)) {
-            // ambiguous call
-            QString message = QString::fromLatin1("ambiguous call of overloaded function %0(); candidates were\n")
-                                .arg(QLatin1String(signature));
-            for (int i = 0; i < candidates.size(); ++i) {
-                // Only candidate for overload if argument count and match distance is same as best match
-                if (candidates.at(i).args.count() == bestMatch.args.count()
-                    || candidates.at(i).matchDistance == bestMatch.matchDistance) {
-                    if (i > 0)
-                        message += QLatin1String("\n");
-                    QMetaMethod mtd = meta->method(candidates.at(i).index);
-                    message += QString::fromLatin1("    %0").arg(QString::fromLatin1(mtd.methodSignature()));
-                }
-            }
-            setException(context, exception, message);
-        } else {
-            chosenIndex = bestMatch.index;
-            chosenTypes = bestMatch.types;
-            args = bestMatch.args;
-        }
-    }
-
-    if (chosenIndex != -1) {
-        /* Copy the stuff over */
-        int i;
-        vars.resize(args.count());
-        for (i=0; i < args.count(); i++) {
-            vars[i] = args[i];
-            if (chosenTypes[i].isVariant())
-                vvars[i] = &vars[i];
-            else
-                vvars[i] = vars[i].data();
-        }
-    }
-
-    return chosenIndex;
-}
-
-// Signals are not fuzzy matched as much as methods
-static int findSignalIndex(const QMetaObject* meta, int initialIndex, QByteArray signature)
-{
-    int index = initialIndex;
-    QMetaMethod method = meta->method(index);
-    bool overloads = !signature.contains('(');
-    if (overloads && (method.attributes() & QMetaMethod::Cloned)) {
-        // find the most general method
-        do {
-            method = meta->method(--index);
-        } while (method.attributes() & QMetaMethod::Cloned);
-    }
-    return index;
-}
-
-static JSClassRef prototypeForSignalsAndSlots()
-{
-    static JSClassDefinition classDef = {
-        0, kJSClassAttributeNoAutomaticPrototype, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-    };
-    static JSClassRef cls = JSClassCreate(&classDef);
-    return cls;
-}
-
-QtRuntimeMethod::QtRuntimeMethod(JSContextRef ctx, QObject* object, const QByteArray& identifier, int index, int flags, QtInstance* instance)
-    : m_object(object)
-    , m_identifier(identifier)
-    , m_index(index)
-    , m_flags(flags)
-    , m_instance(instance)
-{
-}
-
-QtRuntimeMethod::~QtRuntimeMethod()
-{
-}
-
-JSValueRef QtRuntimeMethod::call(JSContextRef context, JSObjectRef function, JSObjectRef /*thisObject*/, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
-{
-    QtRuntimeMethod* d = toRuntimeMethod(context, function);
-    if (!d) {
-        setException(context, exception, QStringLiteral("cannot call function of deleted runtime method"));
-        return JSValueMakeUndefined(context);
-    }
-    QObject* obj = d->m_object;
-
-    if (!obj) {
-        setException(context, exception, QStringLiteral("cannot call function of deleted QObject"));
-        return JSValueMakeUndefined(context);
-    }
-
-    // Allow for maximum of 10 arguments and size stack arrays accordingly.
-    if (argumentCount > 10)
-        return JSValueMakeUndefined(context);
-
-    QVarLengthArray<QVariant, 10> vargs;
-    void* qargs[11];
-    const QMetaObject* metaObject = obj->metaObject();
-
-    int methodIndex = findMethodIndex(context, metaObject, d->m_identifier,  argumentCount, arguments,
-                                      (d->m_flags & AllowPrivate), vargs, (void **)qargs, exception);
-
-    if (QMetaObject::metacall(obj, QMetaObject::InvokeMetaMethod, methodIndex, qargs) >= 0)
-        return JSValueMakeUndefined(context);
-
-    if (vargs.size() > 0 && metaObject->method(methodIndex).returnType() != QMetaType::Void)
-        return convertQVariantToValue(context, d->m_instance->rootObject(), vargs[0], exception);
-
-    return JSValueMakeUndefined(context);
-}
-
-JSValueRef QtRuntimeMethod::connect(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
-{
-    return connectOrDisconnect(context, function, thisObject, argumentCount, arguments, exception, true);
-}
-
-JSValueRef QtRuntimeMethod::disconnect(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
-{
-    return connectOrDisconnect(context, function, thisObject, argumentCount, arguments, exception, false);
-}
-
-JSObjectRef QtRuntimeMethod::jsObjectRef(JSContextRef context, JSValueRef* exception)
-{
-    if (m_jsObject)
-        return toRef(m_jsObject.get());
-
-    static JSStringRef connectStr = JSStringCreateWithUTF8CString("connect");
-    static JSStringRef disconnectStr = JSStringCreateWithUTF8CString("disconnect");
-    JSRetainPtr<JSStringRef> actualNameStr(Adopt, JSStringCreateWithUTF8CString(m_identifier.constData()));
-
-    JSObjectRef object = JSObjectMakeFunctionWithCallback(context, actualNameStr.get(), call);
-
-    JSObjectRef generalFunctionProto = JSValueToObject(context, JSObjectGetPrototype(context, object), 0);
-    JSObjectRef runtimeMethodProto = JSObjectMake(context, prototypeForSignalsAndSlots(), this);
-    JSObjectSetPrototype(context, runtimeMethodProto, generalFunctionProto);
-
-    JSObjectSetPrototype(context, object, runtimeMethodProto);
-
-    JSObjectRef connectFunction = JSObjectMakeFunctionWithCallback(context, connectStr, connect);
-    JSObjectSetPrototype(context, connectFunction, runtimeMethodProto);
-
-    JSObjectRef disconnectFunction = JSObjectMakeFunctionWithCallback(context, disconnectStr, disconnect);
-    JSObjectSetPrototype(context, disconnectFunction, runtimeMethodProto);
-
-    const JSPropertyAttributes attributes = kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete;
-    JSObjectSetProperty(context, object, connectStr, connectFunction, attributes, exception);
-    JSObjectSetProperty(context, object, disconnectStr, disconnectFunction, attributes, exception);
-
-    m_jsObject = Weak<JSObject>(toJS(object));
-
-    return object;
-}
-
-QtRuntimeMethod* QtRuntimeMethod::toRuntimeMethod(JSContextRef context, JSObjectRef object)
-{
-    JSObjectRef proto = JSValueToObject(context, JSObjectGetPrototype(context, object), 0);
-    if (!proto)
-        return 0;
-    if (!JSValueIsObjectOfClass(context, proto, prototypeForSignalsAndSlots()))
-        return 0;
-    return static_cast<QtRuntimeMethod*>(JSObjectGetPrivate(proto));
-}
-
-JSValueRef QtRuntimeMethod::connectOrDisconnect(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception, bool connect)
-{
-    QtRuntimeMethod* d = toRuntimeMethod(context, thisObject);
-    if (!d)
-        d = toRuntimeMethod(context, function);
-    if (!d) {
-        QString errorStr = QStringLiteral("QtMetaMethod.%1: Cannot connect to/from deleted QObject").arg(connect ?  QStringLiteral("connect") : QStringLiteral("disconnect"));
-        setException(context, exception, errorStr);
-        return JSValueMakeUndefined(context);
-    }
-
-    QString functionName = connect ? QStringLiteral("connect") : QStringLiteral("disconnect");
-
-    if (!argumentCount) {
-        QString errorStr = QStringLiteral("QtMetaMethod.%1: no arguments given").arg(connect ?  QStringLiteral("connect") : QStringLiteral("disconnect"));
-        setException(context, exception, errorStr);
-        return JSValueMakeUndefined(context);
-    }
-
-    if ((!(d->m_flags & QtRuntimeMethod::MethodIsSignal))) {
-        setException(context, exception, QStringLiteral("QtMetaMethod.%3: %1::%2() is not a signal").arg(QString::fromUtf8(d->m_object.data()->metaObject()->className())).arg(QString::fromLatin1(d->m_identifier)).arg(functionName));
-        return JSValueMakeUndefined(context);
-    }
-
-    QObject* sender = d->m_object.data();
-
-    if (!sender) {
-        setException(context, exception, QStringLiteral("cannot call function of deleted QObject"));
-        return JSValueMakeUndefined(context);
-    }
-
-    int signalIndex = findSignalIndex(sender->metaObject(), d->m_index, d->m_identifier);
-
-    JSObjectRef targetObject = 0;
-    JSObjectRef targetFunction = 0;
-
-    if (argumentCount == 1) {
-        if (!JSValueIsObject(context, arguments[0])) {
-            setException(context, exception, QStringLiteral("QtMetaMethod.%1: target is not a function").arg(functionName));
-            return JSValueMakeUndefined(context);
-        }
-        targetFunction = JSValueToObject(context, arguments[0], exception);
-
-        // object.signal.connect(someFunction);
-        if (JSObjectIsFunction(context, targetFunction)) {
-            // object.signal.connect(otherObject.slot);
-            if (QtRuntimeMethod* targetMethod = toRuntimeMethod(context, targetFunction))
-                targetObject = toRef(QtInstance::getQtInstance(targetMethod->m_object.data(), d->m_instance->rootObject(), QtInstance::QtOwnership)->createRuntimeObject(toJS(context)));
-        } else
-            targetFunction = 0;
-    } else {
-        // object.signal.connect(object, someFunction);
-        targetObject = JSValueToObject(context, arguments[0], exception);
-        if (JSValueIsObject(context, arguments[1])) {
-            JSObjectRef obj = JSValueToObject(context, arguments[1], exception);
-            if (JSObjectIsFunction(context, obj))
-                targetFunction = obj;
-        }
-        if (!targetFunction) {
-            // Maybe the second argument is a string
-            JSValueRef conversionException = 0;
-            JSRetainPtr<JSStringRef> functionName(Adopt, JSValueToStringCopy(context, arguments[1], &conversionException));
-            if (functionName && !conversionException) {
-                JSValueRef functionProperty = JSObjectGetProperty(context, targetObject, functionName.get(), &conversionException);
-                if (!conversionException && functionProperty && JSValueIsObject(context, functionProperty)) {
-                    targetFunction = JSValueToObject(context, functionProperty, 0);
-                    if (!JSObjectIsFunction(context, targetFunction))
-                        targetFunction = 0;
-                }
-            }
-        }
-    }
-
-    // object.signal.connect(someObject);
-    if (!targetFunction) {
-        QString message = QStringLiteral("QtMetaMethod.%1: target is not a function");
-        if (connect)
-            message = message.arg(QStringLiteral("connect"));
-        else
-            message = message.arg(QStringLiteral("disconnect"));
-        setException(context, exception, message);
-        return JSValueMakeUndefined(context);
-    }
-
-    if (connect) {
-        // to connect, we need:
-        //  target object [from ctor]
-        //  target signal index etc. [from ctor]
-        //  receiver function [from arguments]
-        //  receiver this object [from arguments]
-
-        QtConnectionObject* conn = new QtConnectionObject(context, QtInstance::getQtInstance(sender, d->m_instance->rootObject(), QtInstance::QtOwnership), signalIndex, targetObject, targetFunction);
-        bool ok = QMetaObject::connect(sender, signalIndex, conn, conn->metaObject()->methodOffset());
-        if (!ok) {
-            delete conn;
-            QString msg = QString(QLatin1String("QtMetaMethod.connect: failed to connect to %1::%2()"))
-                    .arg(QLatin1String(sender->metaObject()->className()))
-                    .arg(QLatin1String(d->m_identifier));
-            setException(context, exception, msg);
-            return JSValueMakeUndefined(context);
-        }
-
-        // Store connection
-        QtConnectionObject::connections.insert(sender, conn);
-
-        return JSValueMakeUndefined(context);
-    }
-
-    // Now to find our previous connection object.
-    QList<QtConnectionObject*> conns = QtConnectionObject::connections.values(sender);
-
-    foreach (QtConnectionObject* conn, conns) {
-        // Is this the right connection?
-        if (!conn->match(context, sender, signalIndex, targetObject, targetFunction))
-            continue;
-
-        // Yep, disconnect it
-        QMetaObject::disconnect(sender, signalIndex, conn, conn->metaObject()->methodOffset());
-        delete conn; // this will also remove it from the map
-        return JSValueMakeUndefined(context);
-    }
-
-    QString msg = QStringLiteral("QtMetaMethod.disconnect: failed to disconnect from %1::%2()")
-            .arg(QLatin1String(sender->metaObject()->className()))
-            .arg(QLatin1String(d->m_identifier));
-
-    setException(context, exception, msg);
-    return JSValueMakeUndefined(context);
-}
-
-// ===============
-
-QMultiMap<QObject*, QtConnectionObject*> QtConnectionObject::connections;
-
-QtConnectionObject::QtConnectionObject(JSContextRef context, PassRefPtr<QtInstance> senderInstance, int signalIndex, JSObjectRef receiver, JSObjectRef receiverFunction)
-    : QObject(senderInstance->getObject())
-    , m_context(JSContextGetGlobalContext(context))
-    , m_rootObject(senderInstance->rootObject())
-    , m_signalIndex(signalIndex)
-    , m_receiver(receiver)
-    , m_receiverFunction(receiverFunction)
-{
-    if (m_receiver)
-        JSValueProtect(m_context, m_receiver);
-    JSValueProtect(m_context, m_receiverFunction);
-}
-
-QtConnectionObject::~QtConnectionObject()
-{
-    connections.remove(parent(), this);
-
-    if (m_receiver)
-        JSValueUnprotect(m_context, m_receiver);
-    JSValueUnprotect(m_context, m_receiverFunction);
-}
-
-// Begin moc-generated code -- modify with care! Check "HAND EDIT" parts
-struct qt_meta_stringdata_QtConnectionObject_t {
-    QByteArrayData data[3];
-    char stringdata[44];
-};
-#define QT_MOC_LITERAL(idx, ofs, len) { \
-    Q_REFCOUNT_INITIALIZE_STATIC, len, 0, 0, \
-    offsetof(qt_meta_stringdata_QtConnectionObject_t, stringdata) + ofs \
-        - idx * sizeof(QByteArrayData) \
-    }
-static const qt_meta_stringdata_QtConnectionObject_t qt_meta_stringdata_QtConnectionObject = {
-    {
-QT_MOC_LITERAL(0, 0, 33),
-QT_MOC_LITERAL(1, 34, 7),
-QT_MOC_LITERAL(2, 42, 0)
-    },
-    "JSC::Bindings::QtConnectionObject\0"
-    "execute\0\0"
-};
-#undef QT_MOC_LITERAL
-
-static const uint qt_meta_data_QtConnectionObject[] = {
-
- // content:
-       7,       // revision
-       0,       // classname
-       0,    0, // classinfo
-       1,   14, // methods
-       0,    0, // properties
-       0,    0, // enums/sets
-       0,    0, // constructors
-       0,       // flags
-       0,       // signalCount
-
- // slots: name, argc, parameters, tag, flags
-       1,    0,   19,    2, 0x0a,
-
- // slots: parameters
-    QMetaType::Void,
-
-       0        // eod
-};
-
-void QtConnectionObject::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
-{
-    if (_c == QMetaObject::InvokeMetaMethod) {
-        Q_ASSERT(staticMetaObject.cast(_o));
-        QtConnectionObject *_t = static_cast<QtConnectionObject *>(_o);
-        switch (_id) {
-        case 0: _t->execute(_a); break; // HAND EDIT: add _a parameter
-        default: ;
-        }
-    }
-}
-
-const QMetaObject QtConnectionObject::staticMetaObject = {
-    { &QObject::staticMetaObject, qt_meta_stringdata_QtConnectionObject.data,
-      qt_meta_data_QtConnectionObject, qt_static_metacall, 0, 0 }
-};
-
-const QMetaObject *QtConnectionObject::metaObject() const
-{
-    return &staticMetaObject;
-}
-
-void *QtConnectionObject::qt_metacast(const char *_clname)
-{
-    if (!_clname) return 0;
-    if (!strcmp(_clname, qt_meta_stringdata_QtConnectionObject.stringdata))
-        return static_cast<void*>(const_cast<QtConnectionObject*>(this));
-    return QObject::qt_metacast(_clname);
-}
-
-int QtConnectionObject::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
-{
-    _id = QObject::qt_metacall(_c, _id, _a);
-    if (_id < 0)
-        return _id;
-    if (_c == QMetaObject::InvokeMetaMethod) {
-        if (_id < 1)
-            qt_static_metacall(this, _c, _id, _a);
-        _id -= 1;
-    }
-    return _id;
-}
-// End of moc-generated code
-
-void QtConnectionObject::execute(void** argv)
-{
-    QObject* sender = parent();
-    const QMetaObject* meta = sender->metaObject();
-    const QMetaMethod method = meta->method(m_signalIndex);
-
-    JSValueRef* ignoredException = 0;
-    JSRetainPtr<JSStringRef> lengthProperty(Adopt, JSStringCreateWithUTF8CString("length"));
-    int receiverLength = int(JSValueToNumber(m_context, JSObjectGetProperty(m_context, m_receiverFunction, lengthProperty.get(), ignoredException), ignoredException));
-    int argc = qMax(method.parameterCount(), receiverLength);
-    WTF::Vector<JSValueRef> args(argc);
-
-    for (int i = 0; i < argc; i++) {
-        int argType = method.parameterType(i);
-        args[i] = convertQVariantToValue(m_context, m_rootObject, QVariant(argType, argv[i+1]), ignoredException);
-    }
-
-    JSObjectCallAsFunction(m_context, m_receiverFunction, m_receiver, argc, args.data(), 0);
-}
-
-bool QtConnectionObject::match(JSContextRef context, QObject* sender, int signalIndex, JSObjectRef receiver, JSObjectRef receiverFunction)
-{
-    if (sender != parent() || signalIndex != m_signalIndex)
-        return false;
-    JSValueRef* ignoredException = 0;
-    const bool receiverMatch = (!receiver && !m_receiver) || (receiver && m_receiver && JSValueIsEqual(context, receiver, m_receiver, ignoredException));
-    return receiverMatch && JSValueIsEqual(context, receiverFunction, m_receiverFunction, ignoredException);
-}
-
-} }
diff --git a/Source/WebCore/bridge/qt/qt_runtime.h b/Source/WebCore/bridge/qt/qt_runtime.h
deleted file mode 100644 (file)
index c1e42a3..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
- *
- *  This library is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public
- *  License as published by the Free Software Foundation; either
- *  version 2 of the License, or (at your option) any later version.
- *
- *  This library is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this library; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#ifndef BINDINGS_QT_RUNTIME_H_
-#define BINDINGS_QT_RUNTIME_H_
-
-#include "BridgeJSC.h"
-#include "JSDOMBinding.h"
-#include "JavaScript.h"
-#include "Weak.h"
-#include "WeakInlines.h"
-#include "qt_instance.h"
-#include "runtime_method.h"
-
-#include <QPointer>
-
-#include <qbytearray.h>
-#include <qmetaobject.h>
-#include <qvariant.h>
-
-namespace WebCore {
-class JSDOMGlobalObject;
-}
-
-namespace JSC {
-namespace Bindings {
-
-class QtField : public Field {
-public:
-
-    typedef enum {
-        MetaProperty,
-#ifndef QT_NO_PROPERTIES
-        DynamicProperty,
-#endif
-        ChildObject
-    } QtFieldType;
-
-    QtField(const QMetaProperty &p)
-        : m_type(MetaProperty), m_property(p)
-        {}
-
-#ifndef QT_NO_PROPERTIES
-    QtField(const QByteArray &b)
-        : m_type(DynamicProperty), m_dynamicProperty(b)
-        {}
-#endif
-
-    QtField(QObject *child)
-        : m_type(ChildObject), m_childObject(child)
-        {}
-
-    virtual JSValue valueFromInstance(ExecState*, const Instance*) const;
-    virtual void setValueToInstance(ExecState*, const Instance*, JSValue) const;
-    QByteArray name() const;
-    QtFieldType fieldType() const {return m_type;}
-private:
-    QtFieldType m_type;
-    QByteArray m_dynamicProperty;
-    QMetaProperty m_property;
-    QPointer<QObject> m_childObject;
-};
-
-class QtRuntimeMethod {
-public:
-    enum MethodFlags {
-        MethodIsSignal = 1,
-        AllowPrivate = 2
-    };
-
-    QtRuntimeMethod(JSContextRef, QObject*, const QByteArray& identifier, int signalIndex, int flags, QtInstance*);
-    ~QtRuntimeMethod();
-
-    static JSValueRef call(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception);
-    static JSValueRef connect(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception);
-    static JSValueRef disconnect(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception);
-
-    JSObjectRef jsObjectRef(JSContextRef, JSValueRef* exception);
-
-    const QByteArray& name() { return m_identifier; }
-
-private:
-    static QtRuntimeMethod* toRuntimeMethod(JSContextRef, JSObjectRef);
-
-    static JSValueRef connectOrDisconnect(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception, bool connect);
-    QPointer<QObject> m_object;
-    QByteArray m_identifier;
-    int m_index;
-    int m_flags;
-    Weak<JSObject> m_jsObject;
-    QtInstance* m_instance;
-};
-
-// A QtConnectionObject represents a connection created inside JS. It will connect its own execute() slot
-// with the appropriate signal of 'sender'. When execute() is called, it will call JS 'receiverFunction'.
-class QtConnectionObject : public QObject
-{
-    Q_OBJECT_FAKE
-public:
-    QtConnectionObject(JSContextRef, PassRefPtr<QtInstance> senderInstance, int signalIndex, JSObjectRef receiver, JSObjectRef receiverFunction);
-    ~QtConnectionObject();
-
-    void execute(void **argv);
-
-    bool match(JSContextRef, QObject* sender, int signalIndex, JSObjectRef thisObject, JSObjectRef funcObject);
-
-private:
-    JSGlobalContextRef m_context;
-    RefPtr<RootObject> m_rootObject;
-
-    int m_signalIndex;
-    JSObjectRef m_receiver;
-    JSObjectRef m_receiverFunction;
-
-    friend class QtRuntimeMethod;
-    static QMultiMap<QObject*, QtConnectionObject*> connections;
-};
-
-
-typedef QVariant (*ConvertToVariantFunction)(JSObject* object, int *distance, HashSet<JSObjectRef>* visitedObjects);
-typedef JSValue (*ConvertToJSValueFunction)(ExecState* exec, WebCore::JSDOMGlobalObject* globalObject, const QVariant& variant);
-
-void registerCustomType(int qtMetaTypeId, ConvertToVariantFunction, ConvertToJSValueFunction);
-
-QVariant convertValueToQVariant(JSContextRef, JSValueRef, QMetaType::Type hint, int *distance, JSValueRef* exception);
-JSValueRef convertQVariantToValue(JSContextRef, PassRefPtr<RootObject>, const QVariant&, JSValueRef* exception);
-
-void setException(JSContextRef, JSValueRef* exception, const QString& text);
-
-} // namespace Bindings
-} // namespace JSC
-
-#endif
index 6a05c4c..3259646 100644 (file)
 #if ENABLE(FTPDIR)
 #include "FTPDirectoryParser.h"
 
-#if PLATFORM(QT)
-#include <QDateTime>
 // On Windows, use the threadsafe *_r functions provided by pthread.
-#elif OS(WINDOWS) && (USE(PTHREADS) || HAVE(PTHREAD_H))
+#if OS(WINDOWS) && (USE(PTHREADS) || HAVE(PTHREAD_H))
 #include <pthread.h>
 #endif
 
 using namespace WTF;
 
 namespace WebCore {
-#if PLATFORM(QT) && defined(Q_WS_WIN32)
-
-// Replacement for gmtime_r() which is not available on MinGW.
-// We use this on Win32 Qt platform for portability.
-struct tm gmtimeQt(const QDateTime& input)
-{
-    tm result;
-
-    QDate date(input.date());
-    result.tm_year = date.year() - 1900;
-    result.tm_mon = date.month();
-    result.tm_mday = date.day();
-    result.tm_wday = date.dayOfWeek();
-    result.tm_yday = date.dayOfYear();
-
-    QTime time(input.time());
-    result.tm_sec = time.second();
-    result.tm_min = time.minute();
-    result.tm_hour = time.hour();
-
-    return result;
-}
-
-static struct tm *gmtimeQt(const time_t *const timep, struct tm *result)
-{
-    const QDateTime dt(QDateTime::fromTime_t(*timep));
-    *result = WebCore::gmtimeQt(dt);
-    return result;
-}
-
-#define gmtime_r(x, y) gmtimeQt(x, y)
-#elif OS(WINDOWS) && !defined(gmtime_r)
+#if OS(WINDOWS) && !defined(gmtime_r)
 #if defined(_MSC_VER) && (_MSC_VER >= 1400) 
 #define gmtime_r(x, y) gmtime_s((y), (x))
 #else /* !_MSC_VER */ 
index e05ebde..2a593dc 100644 (file)
@@ -52,7 +52,7 @@
 #define IS_ICON_SYNC_THREAD() (m_syncThread == currentThread())
 #define ASSERT_ICON_SYNC_THREAD() ASSERT(IS_ICON_SYNC_THREAD())
 
-#if PLATFORM(QT) || PLATFORM(GTK)
+#if PLATFORM(GTK)
 #define CAN_THEME_URL_ICON
 #endif
 
index 9fccb16..70933b0 100644 (file)
 #include "Vibration.h"
 #endif
 
-#if PLATFORM(QT)
-#include "NetworkingContext.h"
-#include <QNetworkAccessManager>
-#endif
-
 #if ENABLE(MEDIA_STREAM)
 #include "MockMediaStreamCenter.h"
 #endif
@@ -276,13 +271,6 @@ void Internals::resetToConsistentState(Page* page)
         page->mainFrame().editor().toggleContinuousSpellChecking();
     if (page->mainFrame().editor().isOverwriteModeEnabled())
         page->mainFrame().editor().toggleOverwriteModeEnabled();
-
-#if PLATFORM(QT)
-    if (NetworkingContext* context = page->mainFrame().loader().networkingContext()) {
-        if (QNetworkAccessManager* qnam = context->networkAccessManager())
-            qnam->clearAccessCache();
-    }
-#endif
 }
 
 Internals::Internals(Document* document)