summaryrefslogtreecommitdiffstats
path: root/WebCore/bridge
diff options
context:
space:
mode:
authorSteve Block <steveblock@google.com>2011-05-06 11:45:16 +0100
committerSteve Block <steveblock@google.com>2011-05-12 13:44:10 +0100
commitcad810f21b803229eb11403f9209855525a25d57 (patch)
tree29a6fd0279be608e0fe9ffe9841f722f0f4e4269 /WebCore/bridge
parent121b0cf4517156d0ac5111caf9830c51b69bae8f (diff)
downloadexternal_webkit-cad810f21b803229eb11403f9209855525a25d57.zip
external_webkit-cad810f21b803229eb11403f9209855525a25d57.tar.gz
external_webkit-cad810f21b803229eb11403f9209855525a25d57.tar.bz2
Merge WebKit at r75315: Initial merge by git.
Change-Id: I570314b346ce101c935ed22a626b48c2af266b84
Diffstat (limited to 'WebCore/bridge')
-rw-r--r--WebCore/bridge/Bridge.h48
-rw-r--r--WebCore/bridge/IdentifierRep.cpp112
-rw-r--r--WebCore/bridge/IdentifierRep.h76
-rw-r--r--WebCore/bridge/NP_jsobject.cpp533
-rw-r--r--WebCore/bridge/NP_jsobject.h55
-rw-r--r--WebCore/bridge/c/CRuntimeObject.cpp56
-rw-r--r--WebCore/bridge/c/CRuntimeObject.h55
-rw-r--r--WebCore/bridge/c/c_class.cpp120
-rw-r--r--WebCore/bridge/c/c_class.h60
-rw-r--r--WebCore/bridge/c/c_instance.cpp318
-rw-r--r--WebCore/bridge/c/c_instance.h93
-rw-r--r--WebCore/bridge/c/c_runtime.cpp83
-rw-r--r--WebCore/bridge/c/c_runtime.h68
-rw-r--r--WebCore/bridge/c/c_utility.cpp158
-rw-r--r--WebCore/bridge/c/c_utility.h55
-rw-r--r--WebCore/bridge/jni/JNIBridge.cpp178
-rw-r--r--WebCore/bridge/jni/JNIBridge.h123
-rw-r--r--WebCore/bridge/jni/JNIUtility.cpp343
-rw-r--r--WebCore/bridge/jni/JNIUtility.h275
-rw-r--r--WebCore/bridge/jni/jni_jsobject.h133
-rw-r--r--WebCore/bridge/jni/jni_jsobject.mm705
-rw-r--r--WebCore/bridge/jni/jni_objc.mm84
-rw-r--r--WebCore/bridge/jni/jsc/JNIBridgeJSC.cpp445
-rw-r--r--WebCore/bridge/jni/jsc/JNIBridgeJSC.h89
-rw-r--r--WebCore/bridge/jni/jsc/JNIUtilityPrivate.cpp318
-rw-r--r--WebCore/bridge/jni/jsc/JNIUtilityPrivate.h53
-rw-r--r--WebCore/bridge/jni/jsc/JavaClassJSC.cpp150
-rw-r--r--WebCore/bridge/jni/jsc/JavaClassJSC.h62
-rw-r--r--WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp384
-rw-r--r--WebCore/bridge/jni/jsc/JavaInstanceJSC.h112
-rw-r--r--WebCore/bridge/jni/jsc/JavaRuntimeObject.cpp53
-rw-r--r--WebCore/bridge/jni/jsc/JavaRuntimeObject.h52
-rw-r--r--WebCore/bridge/jni/jsc/JavaStringJSC.h84
-rw-r--r--WebCore/bridge/jni/v8/JNIBridgeV8.cpp44
-rw-r--r--WebCore/bridge/jni/v8/JNIBridgeV8.h56
-rw-r--r--WebCore/bridge/jni/v8/JNIUtilityPrivate.cpp481
-rw-r--r--WebCore/bridge/jni/v8/JNIUtilityPrivate.h49
-rw-r--r--WebCore/bridge/jni/v8/JavaClassV8.cpp103
-rw-r--r--WebCore/bridge/jni/v8/JavaClassV8.h60
-rw-r--r--WebCore/bridge/jni/v8/JavaInstanceV8.cpp173
-rw-r--r--WebCore/bridge/jni/v8/JavaInstanceV8.h100
-rw-r--r--WebCore/bridge/jni/v8/JavaNPObjectV8.cpp176
-rw-r--r--WebCore/bridge/jni/v8/JavaNPObjectV8.h56
-rw-r--r--WebCore/bridge/jni/v8/JavaStringV8.h61
-rw-r--r--WebCore/bridge/jsc/BridgeJSC.cpp127
-rw-r--r--WebCore/bridge/jsc/BridgeJSC.h153
-rwxr-xr-xWebCore/bridge/make_testbindings2
-rw-r--r--WebCore/bridge/npapi.h897
-rw-r--r--WebCore/bridge/npruntime.cpp164
-rw-r--r--WebCore/bridge/npruntime.h393
-rw-r--r--WebCore/bridge/npruntime_impl.h66
-rw-r--r--WebCore/bridge/npruntime_internal.h53
-rw-r--r--WebCore/bridge/npruntime_priv.h41
-rw-r--r--WebCore/bridge/nptypes.h214
-rw-r--r--WebCore/bridge/objc/ObjCRuntimeObject.h52
-rw-r--r--WebCore/bridge/objc/ObjCRuntimeObject.mm52
-rw-r--r--WebCore/bridge/objc/WebScriptObject.h44
-rw-r--r--WebCore/bridge/objc/objc_class.h59
-rw-r--r--WebCore/bridge/objc/objc_class.mm253
-rw-r--r--WebCore/bridge/objc/objc_header.h53
-rw-r--r--WebCore/bridge/objc/objc_instance.h86
-rw-r--r--WebCore/bridge/objc/objc_instance.mm465
-rw-r--r--WebCore/bridge/objc/objc_runtime.h131
-rw-r--r--WebCore/bridge/objc/objc_runtime.mm280
-rw-r--r--WebCore/bridge/objc/objc_utility.h88
-rw-r--r--WebCore/bridge/objc/objc_utility.mm373
-rw-r--r--WebCore/bridge/qt/qt_class.cpp225
-rw-r--r--WebCore/bridge/qt/qt_class.h59
-rw-r--r--WebCore/bridge/qt/qt_instance.cpp397
-rw-r--r--WebCore/bridge/qt/qt_instance.h96
-rw-r--r--WebCore/bridge/qt/qt_pixmapruntime.cpp369
-rw-r--r--WebCore/bridge/qt/qt_pixmapruntime.h54
-rw-r--r--WebCore/bridge/qt/qt_runtime.cpp1883
-rw-r--r--WebCore/bridge/qt/qt_runtime.h242
-rw-r--r--WebCore/bridge/runtime_array.cpp166
-rw-r--r--WebCore/bridge/runtime_array.h70
-rw-r--r--WebCore/bridge/runtime_method.cpp128
-rw-r--r--WebCore/bridge/runtime_method.h67
-rw-r--r--WebCore/bridge/runtime_object.cpp326
-rw-r--r--WebCore/bridge/runtime_object.h86
-rw-r--r--WebCore/bridge/runtime_root.cpp192
-rw-r--r--WebCore/bridge/runtime_root.h101
-rw-r--r--WebCore/bridge/test.js19
-rw-r--r--WebCore/bridge/testC.js21
-rw-r--r--WebCore/bridge/testM.js29
-rw-r--r--WebCore/bridge/testbindings.cpp419
-rw-r--r--WebCore/bridge/testbindings.mm287
-rw-r--r--WebCore/bridge/testbindings.pro7
-rw-r--r--WebCore/bridge/testqtbindings.cpp139
89 files changed, 0 insertions, 16320 deletions
diff --git a/WebCore/bridge/Bridge.h b/WebCore/bridge/Bridge.h
deleted file mode 100644
index 50efc64..0000000
--- a/WebCore/bridge/Bridge.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2003, 2008, 2009 Apple Inc. All rights reserved.
- * Copyright 2010, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef Bridge_h
-#define Bridge_h
-
-#include "BridgeJSC.h"
-#include <wtf/Noncopyable.h>
-
-namespace JSC {
-
-namespace Bindings {
-
-class Method : public Noncopyable {
-public:
- virtual int numParameters() const = 0;
-
- virtual ~Method() { }
-};
-
-} // namespace Bindings
-
-} // namespace JSC
-
-#endif
diff --git a/WebCore/bridge/IdentifierRep.cpp b/WebCore/bridge/IdentifierRep.cpp
deleted file mode 100644
index fed47ca..0000000
--- a/WebCore/bridge/IdentifierRep.cpp
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "IdentifierRep.h"
-#include "JSDOMBinding.h"
-
-#include "PlatformString.h"
-#include <runtime/UString.h>
-#include <wtf/HashMap.h>
-#include <wtf/StdLibExtras.h>
-
-using namespace JSC;
-
-namespace WebCore {
-
-typedef HashSet<IdentifierRep*> IdentifierSet;
-
-static IdentifierSet& identifierSet()
-{
- DEFINE_STATIC_LOCAL(IdentifierSet, identifierSet, ());
- return identifierSet;
-}
-
-typedef HashMap<int, IdentifierRep*> IntIdentifierMap;
-
-static IntIdentifierMap& intIdentifierMap()
-{
- DEFINE_STATIC_LOCAL(IntIdentifierMap, intIdentifierMap, ());
- return intIdentifierMap;
-}
-
-IdentifierRep* IdentifierRep::get(int intID)
-{
- if (intID == 0 || intID == -1) {
- static IdentifierRep* negativeOneAndZeroIdentifiers[2];
-
- IdentifierRep* identifier = negativeOneAndZeroIdentifiers[intID + 1];
- if (!identifier) {
- identifier = new IdentifierRep(intID);
-
- negativeOneAndZeroIdentifiers[intID + 1] = identifier;
- }
-
- return identifier;
- }
-
- pair<IntIdentifierMap::iterator, bool> result = intIdentifierMap().add(intID, 0);
- if (result.second) {
- ASSERT(!result.first->second);
- result.first->second = new IdentifierRep(intID);
-
- identifierSet().add(result.first->second);
- }
-
- return result.first->second;
-}
-
-typedef HashMap<RefPtr<StringImpl>, IdentifierRep*> StringIdentifierMap;
-
-static StringIdentifierMap& stringIdentifierMap()
-{
- DEFINE_STATIC_LOCAL(StringIdentifierMap, stringIdentifierMap, ());
- return stringIdentifierMap;
-}
-
-IdentifierRep* IdentifierRep::get(const char* name)
-{
- ASSERT(name);
- if (!name)
- return 0;
-
- UString string = stringToUString(String::fromUTF8WithLatin1Fallback(name, strlen(name)));
- pair<StringIdentifierMap::iterator, bool> result = stringIdentifierMap().add(string.impl(), 0);
- if (result.second) {
- ASSERT(!result.first->second);
- result.first->second = new IdentifierRep(name);
-
- identifierSet().add(result.first->second);
- }
-
- return result.first->second;
-}
-
-bool IdentifierRep::isValid(IdentifierRep* identifier)
-{
- return identifierSet().contains(identifier);
-}
-
-} // namespace WebCore
diff --git a/WebCore/bridge/IdentifierRep.h b/WebCore/bridge/IdentifierRep.h
deleted file mode 100644
index 99bae0b..0000000
--- a/WebCore/bridge/IdentifierRep.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef IdentifierRep_h
-#define IdentifierRep_h
-
-#include <wtf/Assertions.h>
-#include <wtf/FastAllocBase.h>
-#include <wtf/StringExtras.h>
-#include <string.h>
-
-namespace WebCore {
-
-class IdentifierRep : public FastAllocBase {
-public:
- static IdentifierRep* get(int);
- static IdentifierRep* get(const char*);
-
- static bool isValid(IdentifierRep*);
-
- bool isString() const { return m_isString; }
-
- int number() const { return m_isString ? 0 : m_value.m_number; }
- const char* string() const { return m_isString ? m_value.m_string : 0; }
-
-private:
- IdentifierRep(int number)
- : m_isString(false)
- {
- m_value.m_number = number;
- }
-
- IdentifierRep(const char* name)
- : m_isString(true)
- {
- m_value.m_string = fastStrDup(name);
- }
-
- ~IdentifierRep()
- {
- // IdentifierReps should never be deleted.
- ASSERT_NOT_REACHED();
- }
-
- union {
- const char* m_string;
- int m_number;
- } m_value;
- bool m_isString;
-};
-
-} // namespace WebCore
-
-#endif // IdentifierRep_h
diff --git a/WebCore/bridge/NP_jsobject.cpp b/WebCore/bridge/NP_jsobject.cpp
deleted file mode 100644
index 0780ad7..0000000
--- a/WebCore/bridge/NP_jsobject.cpp
+++ /dev/null
@@ -1,533 +0,0 @@
-/*
- * Copyright (C) 2004, 2006 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-
-#if ENABLE(NETSCAPE_PLUGIN_API)
-
-#include "NP_jsobject.h"
-
-#include "PlatformString.h"
-#include "PluginView.h"
-#include "StringSourceProvider.h"
-#include "c_utility.h"
-#include "c_instance.h"
-#include "IdentifierRep.h"
-#include "JSDOMBinding.h"
-#include "npruntime_impl.h"
-#include "npruntime_priv.h"
-#include "runtime_root.h"
-#include <runtime/Error.h>
-#include <runtime/JSGlobalObject.h>
-#include <runtime/JSLock.h>
-#include <runtime/PropertyNameArray.h>
-#include <parser/SourceCode.h>
-#include <runtime/Completion.h>
-#include <runtime/Completion.h>
-
-using namespace JSC;
-using namespace JSC::Bindings;
-using namespace WebCore;
-
-class ObjectMap {
-public:
- NPObject* get(RootObject* rootObject, JSObject* jsObject)
- {
- return m_map.get(rootObject).get(jsObject);
- }
-
- void add(RootObject* rootObject, JSObject* jsObject, NPObject* npObject)
- {
- HashMap<RootObject*, JSToNPObjectMap>::iterator iter = m_map.find(rootObject);
- if (iter == m_map.end()) {
- rootObject->addInvalidationCallback(&m_invalidationCallback);
- iter = m_map.add(rootObject, JSToNPObjectMap()).first;
- }
-
- ASSERT(iter->second.find(jsObject) == iter->second.end());
- iter->second.add(jsObject, npObject);
- }
-
- void remove(RootObject* rootObject)
- {
- HashMap<RootObject*, JSToNPObjectMap>::iterator iter = m_map.find(rootObject);
- ASSERT(iter != m_map.end());
- m_map.remove(iter);
- }
-
- void remove(RootObject* rootObject, JSObject* jsObject)
- {
- HashMap<RootObject*, JSToNPObjectMap>::iterator iter = m_map.find(rootObject);
- ASSERT(iter != m_map.end());
- ASSERT(iter->second.find(jsObject) != iter->second.end());
-
- iter->second.remove(jsObject);
- }
-
-private:
- struct RootObjectInvalidationCallback : public RootObject::InvalidationCallback {
- virtual void operator()(RootObject*);
- };
- RootObjectInvalidationCallback m_invalidationCallback;
-
- // JSObjects are protected by RootObject.
- typedef HashMap<JSObject*, NPObject*> JSToNPObjectMap;
- HashMap<RootObject*, JSToNPObjectMap> m_map;
-};
-
-
-static ObjectMap& objectMap()
-{
- DEFINE_STATIC_LOCAL(ObjectMap, map, ());
- return map;
-}
-
-void ObjectMap::RootObjectInvalidationCallback::operator()(RootObject* rootObject)
-{
- objectMap().remove(rootObject);
-}
-
-static void getListFromVariantArgs(ExecState* exec, const NPVariant* args, unsigned argCount, RootObject* rootObject, MarkedArgumentBuffer& aList)
-{
- for (unsigned i = 0; i < argCount; ++i)
- aList.append(convertNPVariantToValue(exec, &args[i], rootObject));
-}
-
-static NPObject* jsAllocate(NPP, NPClass*)
-{
- return static_cast<NPObject*>(malloc(sizeof(JavaScriptObject)));
-}
-
-static void jsDeallocate(NPObject* npObj)
-{
- JavaScriptObject* obj = reinterpret_cast<JavaScriptObject*>(npObj);
-
- if (obj->rootObject && obj->rootObject->isValid()) {
- objectMap().remove(obj->rootObject, obj->imp);
- obj->rootObject->gcUnprotect(obj->imp);
- }
-
- if (obj->rootObject)
- obj->rootObject->deref();
-
- free(obj);
-}
-
-static NPClass javascriptClass = { 1, jsAllocate, jsDeallocate, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-static NPClass noScriptClass = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-
-NPClass* NPScriptObjectClass = &javascriptClass;
-static NPClass* NPNoScriptObjectClass = &noScriptClass;
-
-NPObject* _NPN_CreateScriptObject(NPP npp, JSObject* imp, PassRefPtr<RootObject> rootObject)
-{
- if (NPObject* object = objectMap().get(rootObject.get(), imp))
- return _NPN_RetainObject(object);
-
- JavaScriptObject* obj = reinterpret_cast<JavaScriptObject*>(_NPN_CreateObject(npp, NPScriptObjectClass));
-
- obj->rootObject = rootObject.releaseRef();
-
- if (obj->rootObject) {
- obj->rootObject->gcProtect(imp);
- objectMap().add(obj->rootObject, imp, reinterpret_cast<NPObject*>(obj));
- }
-
- obj->imp = imp;
-
- return reinterpret_cast<NPObject*>(obj);
-}
-
-NPObject* _NPN_CreateNoScriptObject(void)
-{
- return _NPN_CreateObject(0, NPNoScriptObjectClass);
-}
-
-bool _NPN_InvokeDefault(NPP, NPObject* o, const NPVariant* args, uint32_t argCount, NPVariant* result)
-{
- if (o->_class == NPScriptObjectClass) {
- JavaScriptObject* obj = reinterpret_cast<JavaScriptObject*>(o);
-
- VOID_TO_NPVARIANT(*result);
-
- // Lookup the function object.
- RootObject* rootObject = obj->rootObject;
- if (!rootObject || !rootObject->isValid())
- return false;
-
- ExecState* exec = rootObject->globalObject()->globalExec();
- JSLock lock(SilenceAssertionsOnly);
-
- // Call the function object.
- JSValue function = obj->imp;
- CallData callData;
- CallType callType = getCallData(function, callData);
- if (callType == CallTypeNone)
- return false;
-
- MarkedArgumentBuffer argList;
- getListFromVariantArgs(exec, args, argCount, rootObject, argList);
- ProtectedPtr<JSGlobalObject> globalObject = rootObject->globalObject();
- globalObject->globalData().timeoutChecker.start();
- JSValue resultV = JSC::call(exec, function, callType, callData, function, argList);
- globalObject->globalData().timeoutChecker.stop();
-
- // Convert and return the result of the function call.
- convertValueToNPVariant(exec, resultV, result);
- exec->clearException();
- return true;
- }
-
- if (o->_class->invokeDefault)
- return o->_class->invokeDefault(o, args, argCount, result);
- VOID_TO_NPVARIANT(*result);
- return true;
-}
-
-bool _NPN_Invoke(NPP npp, NPObject* o, NPIdentifier methodName, const NPVariant* args, uint32_t argCount, NPVariant* result)
-{
- if (o->_class == NPScriptObjectClass) {
- JavaScriptObject* obj = reinterpret_cast<JavaScriptObject*>(o);
-
- IdentifierRep* i = static_cast<IdentifierRep*>(methodName);
- if (!i->isString())
- return false;
-
- // Special case the "eval" method.
- if (methodName == _NPN_GetStringIdentifier("eval")) {
- if (argCount != 1)
- return false;
- if (args[0].type != NPVariantType_String)
- return false;
- return _NPN_Evaluate(npp, o, const_cast<NPString*>(&args[0].value.stringValue), result);
- }
-
- // Look up the function object.
- RootObject* rootObject = obj->rootObject;
- if (!rootObject || !rootObject->isValid())
- return false;
- ExecState* exec = rootObject->globalObject()->globalExec();
- JSLock lock(SilenceAssertionsOnly);
- JSValue function = obj->imp->get(exec, identifierFromNPIdentifier(exec, i->string()));
- CallData callData;
- CallType callType = getCallData(function, callData);
- if (callType == CallTypeNone)
- return false;
-
- // Call the function object.
- MarkedArgumentBuffer argList;
- getListFromVariantArgs(exec, args, argCount, rootObject, argList);
- ProtectedPtr<JSGlobalObject> globalObject = rootObject->globalObject();
- globalObject->globalData().timeoutChecker.start();
- JSValue resultV = JSC::call(exec, function, callType, callData, obj->imp, argList);
- globalObject->globalData().timeoutChecker.stop();
-
- // Convert and return the result of the function call.
- convertValueToNPVariant(exec, resultV, result);
- exec->clearException();
- return true;
- }
-
- if (o->_class->invoke)
- return o->_class->invoke(o, methodName, args, argCount, result);
-
- VOID_TO_NPVARIANT(*result);
- return true;
-}
-
-bool _NPN_Evaluate(NPP instance, NPObject* o, NPString* s, NPVariant* variant)
-{
- if (o->_class == NPScriptObjectClass) {
- JavaScriptObject* obj = reinterpret_cast<JavaScriptObject*>(o);
-
- RootObject* rootObject = obj->rootObject;
- if (!rootObject || !rootObject->isValid())
- return false;
-
- // There is a crash in Flash when evaluating a script that destroys the
- // PluginView, so we destroy it asynchronously.
- PluginView::keepAlive(instance);
-
- ExecState* exec = rootObject->globalObject()->globalExec();
- JSLock lock(SilenceAssertionsOnly);
- String scriptString = convertNPStringToUTF16(s);
- ProtectedPtr<JSGlobalObject> globalObject = rootObject->globalObject();
- globalObject->globalData().timeoutChecker.start();
- Completion completion = JSC::evaluate(globalObject->globalExec(), globalObject->globalScopeChain(), makeSource(scriptString), JSC::JSValue());
- globalObject->globalData().timeoutChecker.stop();
- ComplType type = completion.complType();
-
- JSValue result;
- if (type == Normal) {
- result = completion.value();
- if (!result)
- result = jsUndefined();
- } else
- result = jsUndefined();
-
- convertValueToNPVariant(exec, result, variant);
- exec->clearException();
- return true;
- }
-
- VOID_TO_NPVARIANT(*variant);
- return false;
-}
-
-bool _NPN_GetProperty(NPP, NPObject* o, NPIdentifier propertyName, NPVariant* variant)
-{
- if (o->_class == NPScriptObjectClass) {
- JavaScriptObject* obj = reinterpret_cast<JavaScriptObject*>(o);
-
- RootObject* rootObject = obj->rootObject;
- if (!rootObject || !rootObject->isValid())
- return false;
-
- ExecState* exec = rootObject->globalObject()->globalExec();
- IdentifierRep* i = static_cast<IdentifierRep*>(propertyName);
-
- JSLock lock(SilenceAssertionsOnly);
- JSValue result;
- if (i->isString())
- result = obj->imp->get(exec, identifierFromNPIdentifier(exec, i->string()));
- else
- result = obj->imp->get(exec, i->number());
-
- convertValueToNPVariant(exec, result, variant);
- exec->clearException();
- return true;
- }
-
- if (o->_class->hasProperty && o->_class->getProperty) {
- if (o->_class->hasProperty(o, propertyName))
- return o->_class->getProperty(o, propertyName, variant);
- return false;
- }
-
- VOID_TO_NPVARIANT(*variant);
- return false;
-}
-
-bool _NPN_SetProperty(NPP, NPObject* o, NPIdentifier propertyName, const NPVariant* variant)
-{
- if (o->_class == NPScriptObjectClass) {
- JavaScriptObject* obj = reinterpret_cast<JavaScriptObject*>(o);
-
- RootObject* rootObject = obj->rootObject;
- if (!rootObject || !rootObject->isValid())
- return false;
-
- ExecState* exec = rootObject->globalObject()->globalExec();
- JSLock lock(SilenceAssertionsOnly);
- IdentifierRep* i = static_cast<IdentifierRep*>(propertyName);
-
- if (i->isString()) {
- PutPropertySlot slot;
- obj->imp->put(exec, identifierFromNPIdentifier(exec, i->string()), convertNPVariantToValue(exec, variant, rootObject), slot);
- } else
- obj->imp->put(exec, i->number(), convertNPVariantToValue(exec, variant, rootObject));
- exec->clearException();
- return true;
- }
-
- if (o->_class->setProperty)
- return o->_class->setProperty(o, propertyName, variant);
-
- return false;
-}
-
-bool _NPN_RemoveProperty(NPP, NPObject* o, NPIdentifier propertyName)
-{
- if (o->_class == NPScriptObjectClass) {
- JavaScriptObject* obj = reinterpret_cast<JavaScriptObject*>(o);
-
- RootObject* rootObject = obj->rootObject;
- if (!rootObject || !rootObject->isValid())
- return false;
-
- ExecState* exec = rootObject->globalObject()->globalExec();
- IdentifierRep* i = static_cast<IdentifierRep*>(propertyName);
- if (i->isString()) {
- if (!obj->imp->hasProperty(exec, identifierFromNPIdentifier(exec, i->string()))) {
- exec->clearException();
- return false;
- }
- } else {
- if (!obj->imp->hasProperty(exec, i->number())) {
- exec->clearException();
- return false;
- }
- }
-
- JSLock lock(SilenceAssertionsOnly);
- if (i->isString())
- obj->imp->deleteProperty(exec, identifierFromNPIdentifier(exec, i->string()));
- else
- obj->imp->deleteProperty(exec, i->number());
-
- exec->clearException();
- return true;
- }
- return false;
-}
-
-bool _NPN_HasProperty(NPP, NPObject* o, NPIdentifier propertyName)
-{
- if (o->_class == NPScriptObjectClass) {
- JavaScriptObject* obj = reinterpret_cast<JavaScriptObject*>(o);
-
- RootObject* rootObject = obj->rootObject;
- if (!rootObject || !rootObject->isValid())
- return false;
-
- ExecState* exec = rootObject->globalObject()->globalExec();
- IdentifierRep* i = static_cast<IdentifierRep*>(propertyName);
- JSLock lock(SilenceAssertionsOnly);
- if (i->isString()) {
- bool result = obj->imp->hasProperty(exec, identifierFromNPIdentifier(exec, i->string()));
- exec->clearException();
- return result;
- }
-
- bool result = obj->imp->hasProperty(exec, i->number());
- exec->clearException();
- return result;
- }
-
- if (o->_class->hasProperty)
- return o->_class->hasProperty(o, propertyName);
-
- return false;
-}
-
-bool _NPN_HasMethod(NPP, NPObject* o, NPIdentifier methodName)
-{
- if (o->_class == NPScriptObjectClass) {
- JavaScriptObject* obj = reinterpret_cast<JavaScriptObject*>(o);
-
- IdentifierRep* i = static_cast<IdentifierRep*>(methodName);
- if (!i->isString())
- return false;
-
- RootObject* rootObject = obj->rootObject;
- if (!rootObject || !rootObject->isValid())
- return false;
-
- ExecState* exec = rootObject->globalObject()->globalExec();
- JSLock lock(SilenceAssertionsOnly);
- JSValue func = obj->imp->get(exec, identifierFromNPIdentifier(exec, i->string()));
- exec->clearException();
- return !func.isUndefined();
- }
-
- if (o->_class->hasMethod)
- return o->_class->hasMethod(o, methodName);
-
- return false;
-}
-
-void _NPN_SetException(NPObject*, const NPUTF8* message)
-{
- // Ignoring the NPObject param is consistent with the Mozilla implementation.
- UString exception(message);
- CInstance::setGlobalException(exception);
-}
-
-bool _NPN_Enumerate(NPP, NPObject* o, NPIdentifier** identifier, uint32_t* count)
-{
- if (o->_class == NPScriptObjectClass) {
- JavaScriptObject* obj = reinterpret_cast<JavaScriptObject*>(o);
-
- RootObject* rootObject = obj->rootObject;
- if (!rootObject || !rootObject->isValid())
- return false;
-
- ExecState* exec = rootObject->globalObject()->globalExec();
- JSLock lock(SilenceAssertionsOnly);
- PropertyNameArray propertyNames(exec);
-
- obj->imp->getPropertyNames(exec, propertyNames);
- unsigned size = static_cast<unsigned>(propertyNames.size());
- // FIXME: This should really call NPN_MemAlloc but that's in WebKit
- NPIdentifier* identifiers = static_cast<NPIdentifier*>(malloc(sizeof(NPIdentifier) * size));
-
- for (unsigned i = 0; i < size; ++i)
- identifiers[i] = _NPN_GetStringIdentifier(propertyNames[i].ustring().utf8().data());
-
- *identifier = identifiers;
- *count = size;
-
- exec->clearException();
- return true;
- }
-
- if (NP_CLASS_STRUCT_VERSION_HAS_ENUM(o->_class) && o->_class->enumerate)
- return o->_class->enumerate(o, identifier, count);
-
- return false;
-}
-
-bool _NPN_Construct(NPP, NPObject* o, const NPVariant* args, uint32_t argCount, NPVariant* result)
-{
- if (o->_class == NPScriptObjectClass) {
- JavaScriptObject* obj = reinterpret_cast<JavaScriptObject*>(o);
-
- VOID_TO_NPVARIANT(*result);
-
- // Lookup the constructor object.
- RootObject* rootObject = obj->rootObject;
- if (!rootObject || !rootObject->isValid())
- return false;
-
- ExecState* exec = rootObject->globalObject()->globalExec();
- JSLock lock(SilenceAssertionsOnly);
-
- // Call the constructor object.
- JSValue constructor = obj->imp;
- ConstructData constructData;
- ConstructType constructType = getConstructData(constructor, constructData);
- if (constructType == ConstructTypeNone)
- return false;
-
- MarkedArgumentBuffer argList;
- getListFromVariantArgs(exec, args, argCount, rootObject, argList);
- ProtectedPtr<JSGlobalObject> globalObject = rootObject->globalObject();
- globalObject->globalData().timeoutChecker.start();
- JSValue resultV = JSC::construct(exec, constructor, constructType, constructData, argList);
- globalObject->globalData().timeoutChecker.stop();
-
- // Convert and return the result.
- convertValueToNPVariant(exec, resultV, result);
- exec->clearException();
- return true;
- }
-
- if (NP_CLASS_STRUCT_VERSION_HAS_CTOR(o->_class) && o->_class->construct)
- return o->_class->construct(o, args, argCount, result);
-
- return false;
-}
-
-#endif // ENABLE(NETSCAPE_PLUGIN_API)
diff --git a/WebCore/bridge/NP_jsobject.h b/WebCore/bridge/NP_jsobject.h
deleted file mode 100644
index 6c49d1b..0000000
--- a/WebCore/bridge/NP_jsobject.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2004, 2006 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef NP_JSOBJECT_H
-#define NP_JSOBJECT_H
-
-#if ENABLE(NETSCAPE_PLUGIN_API)
-
-#include "npruntime_internal.h"
-#include <wtf/Forward.h>
-
-namespace JSC {
- class JSObject;
- namespace Bindings {
- class RootObject;
- }
-}
-
-extern NPClass* NPScriptObjectClass;
-
-struct JavaScriptObject
-{
- NPObject object;
- JSC::JSObject* imp;
- JSC::Bindings::RootObject* rootObject;
-};
-
-NPObject* _NPN_CreateScriptObject(NPP npp, JSC::JSObject*, PassRefPtr<JSC::Bindings::RootObject> rootObject);
-NPObject* _NPN_CreateNoScriptObject(void);
-
-#endif // ENABLE(NETSCAPE_PLUGIN_API)
-
-#endif
diff --git a/WebCore/bridge/c/CRuntimeObject.cpp b/WebCore/bridge/c/CRuntimeObject.cpp
deleted file mode 100644
index 4be4982..0000000
--- a/WebCore/bridge/c/CRuntimeObject.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-
-#if ENABLE(NETSCAPE_PLUGIN_API)
-
-#include "CRuntimeObject.h"
-#include "c_instance.h"
-
-namespace JSC {
-namespace Bindings {
-
-const ClassInfo CRuntimeObject::s_info = { "CRuntimeObject", &RuntimeObject::s_info, 0, 0 };
-
-CRuntimeObject::CRuntimeObject(ExecState* exec, JSGlobalObject* globalObject, PassRefPtr<CInstance> instance)
- : RuntimeObject(exec, globalObject, instance)
-{
-}
-
-CRuntimeObject::~CRuntimeObject()
-{
-}
-
-CInstance* CRuntimeObject::getInternalCInstance() const
-{
- return static_cast<CInstance*>(getInternalInstance());
-}
-
-
-}
-}
-
-#endif
diff --git a/WebCore/bridge/c/CRuntimeObject.h b/WebCore/bridge/c/CRuntimeObject.h
deleted file mode 100644
index bcd39d3..0000000
--- a/WebCore/bridge/c/CRuntimeObject.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef CRuntimeObject_h
-#define CRuntimeObject_h
-
-#if ENABLE(NETSCAPE_PLUGIN_API)
-
-#include "runtime_object.h"
-
-namespace JSC {
-namespace Bindings {
-
-class CInstance;
-
-class CRuntimeObject : public RuntimeObject {
-public:
- CRuntimeObject(ExecState*, JSGlobalObject*, PassRefPtr<CInstance>);
- virtual ~CRuntimeObject();
-
- CInstance* getInternalCInstance() const;
-
- static const ClassInfo s_info;
-
-private:
- virtual const ClassInfo* classInfo() const { return &s_info; }
-};
-
-}
-}
-
-#endif
-#endif
diff --git a/WebCore/bridge/c/c_class.cpp b/WebCore/bridge/c/c_class.cpp
deleted file mode 100644
index f4ae5ca..0000000
--- a/WebCore/bridge/c/c_class.cpp
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2003, 2006 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-
-#if ENABLE(NETSCAPE_PLUGIN_API)
-
-#include "c_class.h"
-
-#include "c_instance.h"
-#include "c_runtime.h"
-#include "npruntime_impl.h"
-#include <runtime/Identifier.h>
-#include <runtime/JSLock.h>
-#include <wtf/text/StringHash.h>
-
-namespace JSC { namespace Bindings {
-
-CClass::CClass(NPClass* aClass)
-{
- _isa = aClass;
-}
-
-CClass::~CClass()
-{
- JSLock lock(SilenceAssertionsOnly);
-
- deleteAllValues(_methods);
- _methods.clear();
-
- deleteAllValues(_fields);
- _fields.clear();
-}
-
-typedef HashMap<NPClass*, CClass*> ClassesByIsAMap;
-static ClassesByIsAMap* classesByIsA = 0;
-
-CClass* CClass::classForIsA(NPClass* isa)
-{
- if (!classesByIsA)
- classesByIsA = new ClassesByIsAMap;
-
- CClass* aClass = classesByIsA->get(isa);
- if (!aClass) {
- aClass = new CClass(isa);
- classesByIsA->set(isa, aClass);
- }
-
- return aClass;
-}
-
-MethodList CClass::methodsNamed(const Identifier& identifier, Instance* instance) const
-{
- MethodList methodList;
-
- Method* method = _methods.get(identifier.ustring().impl());
- if (method) {
- methodList.append(method);
- return methodList;
- }
-
- NPIdentifier ident = _NPN_GetStringIdentifier(identifier.ascii().data());
- const CInstance* inst = static_cast<const CInstance*>(instance);
- NPObject* obj = inst->getObject();
- if (_isa->hasMethod && _isa->hasMethod(obj, ident)){
- Method* aMethod = new CMethod(ident); // deleted in the CClass destructor
- {
- JSLock lock(SilenceAssertionsOnly);
- _methods.set(identifier.ustring().impl(), aMethod);
- }
- methodList.append(aMethod);
- }
-
- return methodList;
-}
-
-Field* CClass::fieldNamed(const Identifier& identifier, Instance* instance) const
-{
- Field* aField = _fields.get(identifier.ustring().impl());
- if (aField)
- return aField;
-
- NPIdentifier ident = _NPN_GetStringIdentifier(identifier.ascii().data());
- const CInstance* inst = static_cast<const CInstance*>(instance);
- NPObject* obj = inst->getObject();
- if (_isa->hasProperty && _isa->hasProperty(obj, ident)){
- aField = new CField(ident); // deleted in the CClass destructor
- {
- JSLock lock(SilenceAssertionsOnly);
- _fields.set(identifier.ustring().impl(), aField);
- }
- }
- return aField;
-}
-
-} } // namespace JSC::Bindings
-
-#endif // ENABLE(NETSCAPE_PLUGIN_API)
diff --git a/WebCore/bridge/c/c_class.h b/WebCore/bridge/c/c_class.h
deleted file mode 100644
index 52db2b9..0000000
--- a/WebCore/bridge/c/c_class.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2003 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef BINDINGS_C_CLASS_H_
-#define BINDINGS_C_CLASS_H_
-
-#if ENABLE(NETSCAPE_PLUGIN_API)
-
-#include "Bridge.h"
-#include "npruntime_internal.h"
-#include <wtf/HashMap.h>
-
-namespace JSC {
-namespace Bindings {
-
-class CClass : public Class {
-protected:
- CClass(NPClass*); // Use classForIsA to create a CClass.
-
-public:
- static CClass* classForIsA(NPClass*);
- virtual ~CClass();
-
- virtual MethodList methodsNamed(const Identifier&, Instance*) const;
- virtual Field* fieldNamed(const Identifier&, Instance*) const;
-
-private:
- NPClass* _isa;
- mutable MethodMap _methods;
- mutable FieldMap _fields;
-};
-
-} // namespace Bindings
-} // namespace JSC
-
-#endif // ENABLE(NETSCAPE_PLUGIN_API)
-
-#endif
diff --git a/WebCore/bridge/c/c_instance.cpp b/WebCore/bridge/c/c_instance.cpp
deleted file mode 100644
index f1dd4e5..0000000
--- a/WebCore/bridge/c/c_instance.cpp
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
- * Copyright (C) 2003, 2006 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-
-#if ENABLE(NETSCAPE_PLUGIN_API)
-
-#include "c_instance.h"
-
-#include "CRuntimeObject.h"
-#include "IdentifierRep.h"
-#include "c_class.h"
-#include "c_runtime.h"
-#include "c_utility.h"
-#include "npruntime_impl.h"
-#include "runtime_method.h"
-#include "runtime_root.h"
-#include <interpreter/CallFrame.h>
-#include <runtime/ArgList.h>
-#include <runtime/Error.h>
-#include <runtime/JSLock.h>
-#include <runtime/JSNumberCell.h>
-#include <runtime/PropertyNameArray.h>
-#include <wtf/Assertions.h>
-#include <wtf/StdLibExtras.h>
-#include <wtf/StringExtras.h>
-#include <wtf/Vector.h>
-
-using namespace WebCore;
-
-namespace JSC {
-namespace Bindings {
-
-using JSC::UString;
-
-static JSC::UString& globalExceptionString()
-{
- DEFINE_STATIC_LOCAL(JSC::UString, exceptionStr, ());
- return exceptionStr;
-}
-
-void CInstance::setGlobalException(UString exception)
-{
- globalExceptionString() = exception;
-}
-
-void CInstance::moveGlobalExceptionToExecState(ExecState* exec)
-{
- if (globalExceptionString().isNull())
- return;
-
- {
- JSLock lock(SilenceAssertionsOnly);
- throwError(exec, createError(exec, globalExceptionString()));
- }
-
- globalExceptionString() = UString();
-}
-
-CInstance::CInstance(NPObject* o, PassRefPtr<RootObject> rootObject)
- : Instance(rootObject)
-{
- _object = _NPN_RetainObject(o);
- _class = 0;
-}
-
-CInstance::~CInstance()
-{
- _NPN_ReleaseObject(_object);
-}
-
-RuntimeObject* CInstance::newRuntimeObject(ExecState* exec)
-{
- return new (exec) CRuntimeObject(exec, exec->lexicalGlobalObject(), this);
-}
-
-Class *CInstance::getClass() const
-{
- if (!_class)
- _class = CClass::classForIsA(_object->_class);
- return _class;
-}
-
-bool CInstance::supportsInvokeDefaultMethod() const
-{
- return _object->_class->invokeDefault;
-}
-
-class CRuntimeMethod : public RuntimeMethod {
-public:
- CRuntimeMethod(ExecState* exec, JSGlobalObject* globalObject, const Identifier& name, Bindings::MethodList& list)
- : RuntimeMethod(exec, globalObject, name, list)
- {
- }
-
- virtual const ClassInfo* classInfo() const { return &s_info; }
-
- static const ClassInfo s_info;
-};
-
-const ClassInfo CRuntimeMethod::s_info = { "CRuntimeMethod", &RuntimeMethod::s_info, 0, 0 };
-
-JSValue CInstance::getMethod(ExecState* exec, const Identifier& propertyName)
-{
- MethodList methodList = getClass()->methodsNamed(propertyName, this);
- return new (exec) CRuntimeMethod(exec, exec->lexicalGlobalObject(), propertyName, methodList);
-}
-
-JSValue CInstance::invokeMethod(ExecState* exec, RuntimeMethod* runtimeMethod)
-{
- if (!asObject(runtimeMethod)->inherits(&CRuntimeMethod::s_info))
- return throwError(exec, createTypeError(exec, "Attempt to invoke non-plug-in method on plug-in object."));
-
- const MethodList& methodList = *runtimeMethod->methods();
-
- // Overloading methods are not allowed by NPObjects. Should only be one
- // name match for a particular method.
- ASSERT(methodList.size() == 1);
-
- CMethod* method = static_cast<CMethod*>(methodList[0]);
-
- NPIdentifier ident = method->identifier();
- if (!_object->_class->hasMethod(_object, ident))
- return jsUndefined();
-
- unsigned count = exec->argumentCount();
- Vector<NPVariant, 8> cArgs(count);
-
- unsigned i;
- for (i = 0; i < count; i++)
- convertValueToNPVariant(exec, exec->argument(i), &cArgs[i]);
-
- // Invoke the 'C' method.
- bool retval = true;
- NPVariant resultVariant;
- VOID_TO_NPVARIANT(resultVariant);
-
- {
- JSLock::DropAllLocks dropAllLocks(SilenceAssertionsOnly);
- ASSERT(globalExceptionString().isNull());
- retval = _object->_class->invoke(_object, ident, cArgs.data(), count, &resultVariant);
- moveGlobalExceptionToExecState(exec);
- }
-
- if (!retval)
- throwError(exec, createError(exec, "Error calling method on NPObject."));
-
- for (i = 0; i < count; i++)
- _NPN_ReleaseVariantValue(&cArgs[i]);
-
- JSValue resultValue = convertNPVariantToValue(exec, &resultVariant, m_rootObject.get());
- _NPN_ReleaseVariantValue(&resultVariant);
- return resultValue;
-}
-
-
-JSValue CInstance::invokeDefaultMethod(ExecState* exec)
-{
- if (!_object->_class->invokeDefault)
- return jsUndefined();
-
- unsigned count = exec->argumentCount();
- Vector<NPVariant, 8> cArgs(count);
-
- unsigned i;
- for (i = 0; i < count; i++)
- convertValueToNPVariant(exec, exec->argument(i), &cArgs[i]);
-
- // Invoke the 'C' method.
- bool retval = true;
- NPVariant resultVariant;
- VOID_TO_NPVARIANT(resultVariant);
- {
- JSLock::DropAllLocks dropAllLocks(SilenceAssertionsOnly);
- ASSERT(globalExceptionString().isNull());
- retval = _object->_class->invokeDefault(_object, cArgs.data(), count, &resultVariant);
- moveGlobalExceptionToExecState(exec);
- }
-
- if (!retval)
- throwError(exec, createError(exec, "Error calling method on NPObject."));
-
- for (i = 0; i < count; i++)
- _NPN_ReleaseVariantValue(&cArgs[i]);
-
- JSValue resultValue = convertNPVariantToValue(exec, &resultVariant, m_rootObject.get());
- _NPN_ReleaseVariantValue(&resultVariant);
- return resultValue;
-}
-
-bool CInstance::supportsConstruct() const
-{
- return _object->_class->construct;
-}
-
-JSValue CInstance::invokeConstruct(ExecState* exec, const ArgList& args)
-{
- if (!_object->_class->construct)
- return jsUndefined();
-
- unsigned count = args.size();
- Vector<NPVariant, 8> cArgs(count);
-
- unsigned i;
- for (i = 0; i < count; i++)
- convertValueToNPVariant(exec, args.at(i), &cArgs[i]);
-
- // Invoke the 'C' method.
- bool retval = true;
- NPVariant resultVariant;
- VOID_TO_NPVARIANT(resultVariant);
- {
- JSLock::DropAllLocks dropAllLocks(SilenceAssertionsOnly);
- ASSERT(globalExceptionString().isNull());
- retval = _object->_class->construct(_object, cArgs.data(), count, &resultVariant);
- moveGlobalExceptionToExecState(exec);
- }
-
- if (!retval)
- throwError(exec, createError(exec, "Error calling method on NPObject."));
-
- for (i = 0; i < count; i++)
- _NPN_ReleaseVariantValue(&cArgs[i]);
-
- JSValue resultValue = convertNPVariantToValue(exec, &resultVariant, m_rootObject.get());
- _NPN_ReleaseVariantValue(&resultVariant);
- return resultValue;
-}
-
-JSValue CInstance::defaultValue(ExecState* exec, PreferredPrimitiveType hint) const
-{
- if (hint == PreferString)
- return stringValue(exec);
- if (hint == PreferNumber)
- return numberValue(exec);
- return valueOf(exec);
-}
-
-JSValue CInstance::stringValue(ExecState* exec) const
-{
- char buf[1024];
- snprintf(buf, sizeof(buf), "NPObject %p, NPClass %p", _object, _object->_class);
- return jsString(exec, buf);
-}
-
-JSValue CInstance::numberValue(ExecState*) const
-{
- // FIXME: Implement something sensible.
- return jsNumber(0);
-}
-
-JSValue CInstance::booleanValue() const
-{
- // FIXME: Implement something sensible.
- return jsBoolean(false);
-}
-
-JSValue CInstance::valueOf(ExecState* exec) const
-{
- return stringValue(exec);
-}
-
-void CInstance::getPropertyNames(ExecState* exec, PropertyNameArray& nameArray)
-{
- if (!NP_CLASS_STRUCT_VERSION_HAS_ENUM(_object->_class) || !_object->_class->enumerate)
- return;
-
- uint32_t count;
- NPIdentifier* identifiers;
-
- {
- JSLock::DropAllLocks dropAllLocks(SilenceAssertionsOnly);
- ASSERT(globalExceptionString().isNull());
- bool ok = _object->_class->enumerate(_object, &identifiers, &count);
- moveGlobalExceptionToExecState(exec);
- if (!ok)
- return;
- }
-
- for (uint32_t i = 0; i < count; i++) {
- IdentifierRep* identifier = static_cast<IdentifierRep*>(identifiers[i]);
-
- if (identifier->isString())
- nameArray.add(identifierFromNPIdentifier(exec, identifier->string()));
- else
- nameArray.add(Identifier::from(exec, identifier->number()));
- }
-
- // FIXME: This should really call NPN_MemFree but that's in WebKit
- free(identifiers);
-}
-
-}
-}
-
-#endif // ENABLE(NETSCAPE_PLUGIN_API)
diff --git a/WebCore/bridge/c/c_instance.h b/WebCore/bridge/c/c_instance.h
deleted file mode 100644
index cc1a806..0000000
--- a/WebCore/bridge/c/c_instance.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 2003 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef BINDINGS_C_INSTANCE_H_
-#define BINDINGS_C_INSTANCE_H_
-
-#if ENABLE(NETSCAPE_PLUGIN_API)
-
-#include "Bridge.h"
-#include "runtime_root.h"
-#include <wtf/PassRefPtr.h>
-
-typedef struct NPObject NPObject;
-
-namespace JSC {
-
-class UString;
-
-namespace Bindings {
-
-class CClass;
-
-class CInstance : public Instance {
-public:
- static PassRefPtr<CInstance> create(NPObject* object, PassRefPtr<RootObject> rootObject)
- {
- return adoptRef(new CInstance(object, rootObject));
- }
-
- static void setGlobalException(JSC::UString exception);
- static void moveGlobalExceptionToExecState(ExecState*);
-
- ~CInstance ();
-
- virtual Class *getClass() const;
-
- virtual JSValue valueOf(ExecState*) const;
- virtual JSValue defaultValue(ExecState*, PreferredPrimitiveType) const;
-
- virtual JSValue getMethod(ExecState* exec, const Identifier& propertyName);
- virtual JSValue invokeMethod(ExecState*, RuntimeMethod* method);
- virtual bool supportsInvokeDefaultMethod() const;
- virtual JSValue invokeDefaultMethod(ExecState*);
-
- virtual bool supportsConstruct() const;
- virtual JSValue invokeConstruct(ExecState*, const ArgList&);
-
- virtual void getPropertyNames(ExecState*, PropertyNameArray&);
-
- JSValue stringValue(ExecState*) const;
- JSValue numberValue(ExecState*) const;
- JSValue booleanValue() const;
-
- NPObject *getObject() const { return _object; }
-
-private:
- CInstance(NPObject*, PassRefPtr<RootObject>);
-
- virtual RuntimeObject* newRuntimeObject(ExecState*);
-
- mutable CClass *_class;
- NPObject *_object;
-};
-
-} // namespace Bindings
-
-} // namespace JSC
-
-#endif // ENABLE(NETSCAPE_PLUGIN_API)
-
-#endif
diff --git a/WebCore/bridge/c/c_runtime.cpp b/WebCore/bridge/c/c_runtime.cpp
deleted file mode 100644
index e038cd4..0000000
--- a/WebCore/bridge/c/c_runtime.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2004 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-
-#if ENABLE(NETSCAPE_PLUGIN_API)
-
-#include "c_runtime.h"
-
-#include "c_instance.h"
-#include "c_utility.h"
-#include "npruntime_impl.h"
-#include <runtime/JSLock.h>
-
-namespace JSC {
-namespace Bindings {
-
-JSValue CField::valueFromInstance(ExecState* exec, const Instance* inst) const
-{
- const CInstance* instance = static_cast<const CInstance*>(inst);
- NPObject* obj = instance->getObject();
- if (obj->_class->getProperty) {
- NPVariant property;
- VOID_TO_NPVARIANT(property);
-
- bool result;
- {
- JSLock::DropAllLocks dropAllLocks(SilenceAssertionsOnly);
- result = obj->_class->getProperty(obj, _fieldIdentifier, &property);
- CInstance::moveGlobalExceptionToExecState(exec);
- }
- if (result) {
- JSValue result = convertNPVariantToValue(exec, &property, instance->rootObject());
- _NPN_ReleaseVariantValue(&property);
- return result;
- }
- }
- return jsUndefined();
-}
-
-void CField::setValueToInstance(ExecState *exec, const Instance *inst, JSValue aValue) const
-{
- const CInstance* instance = static_cast<const CInstance*>(inst);
- NPObject* obj = instance->getObject();
- if (obj->_class->setProperty) {
- NPVariant variant;
- convertValueToNPVariant(exec, aValue, &variant);
-
- {
- JSLock::DropAllLocks dropAllLocks(SilenceAssertionsOnly);
- obj->_class->setProperty(obj, _fieldIdentifier, &variant);
- CInstance::moveGlobalExceptionToExecState(exec);
- }
-
- _NPN_ReleaseVariantValue(&variant);
- }
-}
-
-} }
-
-#endif // ENABLE(NETSCAPE_PLUGIN_API)
diff --git a/WebCore/bridge/c/c_runtime.h b/WebCore/bridge/c/c_runtime.h
deleted file mode 100644
index 5355934..0000000
--- a/WebCore/bridge/c/c_runtime.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2004, 2006 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef BINDINGS_C_RUNTIME_H_
-#define BINDINGS_C_RUNTIME_H_
-
-#if ENABLE(NETSCAPE_PLUGIN_API)
-
-#include "Bridge.h"
-#include "npruntime_internal.h"
-
-namespace JSC {
-namespace Bindings {
-
-class CField : public Field {
-public:
- CField(NPIdentifier ident) : _fieldIdentifier(ident) { }
-
- virtual JSValue valueFromInstance(ExecState*, const Instance*) const;
- virtual void setValueToInstance(ExecState*, const Instance*, JSValue) const;
-
- NPIdentifier identifier() const { return _fieldIdentifier; }
-
-private:
- NPIdentifier _fieldIdentifier;
-};
-
-
-class CMethod : public Method
-{
-public:
- CMethod(NPIdentifier ident) : _methodIdentifier(ident) { }
-
- NPIdentifier identifier() const { return _methodIdentifier; }
- virtual int numParameters() const { return 0; }
-
-private:
- NPIdentifier _methodIdentifier;
-};
-
-} // namespace Bindings
-} // namespace JSC
-
-#endif // ENABLE(NETSCAPE_PLUGIN_API)
-
-#endif
diff --git a/WebCore/bridge/c/c_utility.cpp b/WebCore/bridge/c/c_utility.cpp
deleted file mode 100644
index ea970eb..0000000
--- a/WebCore/bridge/c/c_utility.cpp
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright (C) 2004, 2006 Apple Computer, Inc. All rights reserved.
- * Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com)
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-
-#if ENABLE(NETSCAPE_PLUGIN_API)
-
-#include "c_utility.h"
-
-#include "CRuntimeObject.h"
-#include "JSDOMBinding.h"
-#include "JSDOMWindow.h"
-#include "NP_jsobject.h"
-#include "c_instance.h"
-#include <runtime/JSGlobalObject.h>
-#include <runtime/JSLock.h>
-#include "PlatformString.h"
-#include "npruntime_impl.h"
-#include "npruntime_priv.h"
-#include "runtime_object.h"
-#include "runtime_root.h"
-#include <wtf/Assertions.h>
-
-namespace JSC { namespace Bindings {
-
-static String convertUTF8ToUTF16WithLatin1Fallback(const NPUTF8* UTF8Chars, int UTF8Length)
-{
- ASSERT(UTF8Chars || UTF8Length == 0);
-
- if (UTF8Length == -1)
- UTF8Length = static_cast<int>(strlen(UTF8Chars));
-
- String result = String::fromUTF8(UTF8Chars, UTF8Length);
-
- // If we got back a null string indicating an unsuccessful conversion, fall back to latin 1.
- // Some plugins return invalid UTF-8 in NPVariantType_String, see <http://bugs.webkit.org/show_bug.cgi?id=5163>
- // There is no "bad data" for latin1. It is unlikely that the plugin was really sending text in this encoding,
- // but it should have used UTF-8, and now we are simply avoiding a crash.
- if (result.isNull())
- result = String(UTF8Chars, UTF8Length);
-
- return result;
-}
-
-// Variant value must be released with NPReleaseVariantValue()
-void convertValueToNPVariant(ExecState* exec, JSValue value, NPVariant* result)
-{
- JSLock lock(SilenceAssertionsOnly);
-
- VOID_TO_NPVARIANT(*result);
-
- if (value.isString()) {
- UString ustring = value.toString(exec);
- CString cstring = ustring.utf8();
- NPString string = { (const NPUTF8*)cstring.data(), static_cast<uint32_t>(cstring.length()) };
- NPN_InitializeVariantWithStringCopy(result, &string);
- } else if (value.isNumber()) {
- DOUBLE_TO_NPVARIANT(value.toNumber(exec), *result);
- } else if (value.isBoolean()) {
- BOOLEAN_TO_NPVARIANT(value.toBoolean(exec), *result);
- } else if (value.isNull()) {
- NULL_TO_NPVARIANT(*result);
- } else if (value.isObject()) {
- JSObject* object = asObject(value);
- if (object->classInfo() == &CRuntimeObject::s_info) {
- CRuntimeObject* runtimeObject = static_cast<CRuntimeObject*>(object);
- CInstance* instance = runtimeObject->getInternalCInstance();
- if (instance) {
- NPObject* obj = instance->getObject();
- _NPN_RetainObject(obj);
- OBJECT_TO_NPVARIANT(obj, *result);
- }
- } else {
-#ifdef ANDROID
- RootObject* rootObject = findRootObject(exec->dynamicGlobalObject());
- if (!rootObject)
- rootObject = findRootObject(exec->lexicalGlobalObject());
-#else
- JSGlobalObject* globalObject = exec->dynamicGlobalObject();
-
- RootObject* rootObject = findRootObject(globalObject);
-#endif
- if (rootObject) {
- NPObject* npObject = _NPN_CreateScriptObject(0, object, rootObject);
- OBJECT_TO_NPVARIANT(npObject, *result);
- }
- }
- }
-}
-
-JSValue convertNPVariantToValue(ExecState* exec, const NPVariant* variant, RootObject* rootObject)
-{
- JSLock lock(SilenceAssertionsOnly);
-
- NPVariantType type = variant->type;
-
- if (type == NPVariantType_Bool)
- return jsBoolean(NPVARIANT_TO_BOOLEAN(*variant));
- if (type == NPVariantType_Null)
- return jsNull();
- if (type == NPVariantType_Void)
- return jsUndefined();
- if (type == NPVariantType_Int32)
- return jsNumber(NPVARIANT_TO_INT32(*variant));
- if (type == NPVariantType_Double)
- return jsNumber(NPVARIANT_TO_DOUBLE(*variant));
- if (type == NPVariantType_String)
- return WebCore::jsString(exec, convertNPStringToUTF16(&variant->value.stringValue));
- if (type == NPVariantType_Object) {
- NPObject* obj = variant->value.objectValue;
-
- if (obj->_class == NPScriptObjectClass)
- // Get JSObject from NP_JavaScriptObject.
- return ((JavaScriptObject*)obj)->imp;
-
- // Wrap NPObject in a CInstance.
- return CInstance::create(obj, rootObject)->createRuntimeObject(exec);
- }
-
- return jsUndefined();
-}
-
-String convertNPStringToUTF16(const NPString* string)
-{
- return String::fromUTF8WithLatin1Fallback(string->UTF8Characters, string->UTF8Length);
-}
-
-Identifier identifierFromNPIdentifier(ExecState* exec, const NPUTF8* name)
-{
- return Identifier(exec, WebCore::stringToUString(convertUTF8ToUTF16WithLatin1Fallback(name, -1)));
-}
-
-} }
-
-#endif // ENABLE(NETSCAPE_PLUGIN_API)
diff --git a/WebCore/bridge/c/c_utility.h b/WebCore/bridge/c/c_utility.h
deleted file mode 100644
index 43cb16c..0000000
--- a/WebCore/bridge/c/c_utility.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2004 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef C_UTILITY_H_
-#define C_UTILITY_H_
-
-#if ENABLE(NETSCAPE_PLUGIN_API)
-
-#include "npruntime_internal.h"
-#include <runtime/JSValue.h>
-#include <wtf/Forward.h>
-
-namespace JSC {
-
-class ExecState;
-class Identifier;
-
-namespace Bindings {
-
-class RootObject;
-
-typedef uint16_t NPUTF16;
-
-WTF::String convertNPStringToUTF16(const NPString *string);
-void convertValueToNPVariant(ExecState*, JSValue, NPVariant* result);
-JSValue convertNPVariantToValue(ExecState*, const NPVariant*, RootObject*);
-Identifier identifierFromNPIdentifier(ExecState*, const NPUTF8* name);
-
-} }
-
-#endif // ENABLE(NETSCAPE_PLUGIN_API)
-
-#endif
diff --git a/WebCore/bridge/jni/JNIBridge.cpp b/WebCore/bridge/jni/JNIBridge.cpp
deleted file mode 100644
index c512ee7..0000000
--- a/WebCore/bridge/jni/JNIBridge.cpp
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Copyright (C) 2003, 2004, 2005, 2007, 2009 Apple Inc. All rights reserved.
- * Copyright 2010, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "JNIBridge.h"
-
-#if ENABLE(JAVA_BRIDGE)
-
-#include <wtf/text/CString.h>
-#include <wtf/text/StringBuilder.h>
-
-using namespace JSC;
-using namespace JSC::Bindings;
-
-JavaParameter::JavaParameter(JNIEnv* env, jstring type)
-{
- m_type = JavaString(env, type);
- m_JNIType = JNITypeFromClassName(m_type.utf8());
-}
-
-JavaMethod::JavaMethod(JNIEnv* env, jobject aMethod)
-{
- // Get return type name
- jstring returnTypeName = 0;
- if (jobject returnType = callJNIMethod<jobject>(aMethod, "getReturnType", "()Ljava/lang/Class;")) {
- returnTypeName = static_cast<jstring>(callJNIMethod<jobject>(returnType, "getName", "()Ljava/lang/String;"));
- if (!returnTypeName)
- returnTypeName = env->NewStringUTF("<Unknown>");
- env->DeleteLocalRef(returnType);
- }
- m_returnType = JavaString(env, returnTypeName);
- m_JNIReturnType = JNITypeFromClassName(m_returnType.utf8());
- env->DeleteLocalRef(returnTypeName);
-
- // Get method name
- jstring methodName = static_cast<jstring>(callJNIMethod<jobject>(aMethod, "getName", "()Ljava/lang/String;"));
- if (!returnTypeName)
- returnTypeName = env->NewStringUTF("<Unknown>");
- m_name = JavaString(env, methodName);
- env->DeleteLocalRef(methodName);
-
- // Get parameters
- if (jarray jparameters = static_cast<jarray>(callJNIMethod<jobject>(aMethod, "getParameterTypes", "()[Ljava/lang/Class;"))) {
- m_numParameters = env->GetArrayLength(jparameters);
- m_parameters = new JavaParameter[m_numParameters];
-
- for (int i = 0; i < m_numParameters; i++) {
- jobject aParameter = env->GetObjectArrayElement(static_cast<jobjectArray>(jparameters), i);
- jstring parameterName = static_cast<jstring>(callJNIMethod<jobject>(aParameter, "getName", "()Ljava/lang/String;"));
- if (!parameterName)
- parameterName = env->NewStringUTF("<Unknown>");
- m_parameters[i] = JavaParameter(env, parameterName);
- env->DeleteLocalRef(aParameter);
- env->DeleteLocalRef(parameterName);
- }
- env->DeleteLocalRef(jparameters);
- } else {
- m_numParameters = 0;
- m_parameters = 0;
- }
-
- // Created lazily.
- m_signature = 0;
- m_methodID = 0;
-
- jclass modifierClass = env->FindClass("java/lang/reflect/Modifier");
- int modifiers = callJNIMethod<jint>(aMethod, "getModifiers", "()I");
- m_isStatic = static_cast<bool>(callJNIStaticMethod<jboolean>(modifierClass, "isStatic", "(I)Z", modifiers));
- env->DeleteLocalRef(modifierClass);
-}
-
-JavaMethod::~JavaMethod()
-{
- if (m_signature)
- fastFree(m_signature);
- delete[] m_parameters;
-};
-
-// JNI method signatures use '/' between components of a class name, but
-// we get '.' between components from the reflection API.
-static void appendClassName(StringBuilder& builder, const char* className)
-{
-#if USE(JSC)
- ASSERT(JSLock::lockCount() > 0);
-#endif
-
- char* c = fastStrDup(className);
-
- char* result = c;
- while (*c) {
- if (*c == '.')
- *c = '/';
- c++;
- }
-
- builder.append(result);
-
- fastFree(result);
-}
-
-const char* JavaMethod::signature() const
-{
- if (!m_signature) {
-#if USE(JSC)
- JSLock lock(SilenceAssertionsOnly);
-#endif
-
- StringBuilder signatureBuilder;
- signatureBuilder.append('(');
- for (int i = 0; i < m_numParameters; i++) {
- JavaParameter* aParameter = parameterAt(i);
- JNIType type = aParameter->getJNIType();
- if (type == array_type)
- appendClassName(signatureBuilder, aParameter->type());
- else {
- signatureBuilder.append(signatureFromPrimitiveType(type));
- if (type == object_type) {
- appendClassName(signatureBuilder, aParameter->type());
- signatureBuilder.append(';');
- }
- }
- }
- signatureBuilder.append(')');
-
- const char* returnType = m_returnType.utf8();
- if (m_JNIReturnType == array_type)
- appendClassName(signatureBuilder, returnType);
- else {
- signatureBuilder.append(signatureFromPrimitiveType(m_JNIReturnType));
- if (m_JNIReturnType == object_type) {
- appendClassName(signatureBuilder, returnType);
- signatureBuilder.append(';');
- }
- }
-
- String signatureString = signatureBuilder.toString();
- m_signature = fastStrDup(signatureString.utf8().data());
- }
-
- return m_signature;
-}
-
-JNIType JavaMethod::JNIReturnType() const
-{
- return m_JNIReturnType;
-}
-
-jmethodID JavaMethod::methodID(jobject obj) const
-{
- if (!m_methodID)
- m_methodID = getMethodID(obj, m_name.utf8(), signature());
- return m_methodID;
-}
-
-#endif // ENABLE(JAVA_BRIDGE)
diff --git a/WebCore/bridge/jni/JNIBridge.h b/WebCore/bridge/jni/JNIBridge.h
deleted file mode 100644
index 4f5e6b7..0000000
--- a/WebCore/bridge/jni/JNIBridge.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (C) 2003, 2004, 2005, 2007, 2009, 2010 Apple Inc. All rights reserved.
- * Copyright 2010, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef JNIBridge_h
-#define JNIBridge_h
-
-#if ENABLE(JAVA_BRIDGE)
-
-#include "Bridge.h"
-#include "JNIUtility.h"
-
-#if USE(JSC)
-#include "JavaStringJSC.h"
-#elif USE(V8)
-#include "JavaStringV8.h"
-#endif
-
-namespace JSC {
-
-namespace Bindings {
-
-typedef const char* RuntimeType;
-
-class JavaString {
-public:
- JavaString()
- {
- m_impl.init();
- }
-
- JavaString(JNIEnv* e, jstring s)
- {
- m_impl.init(e, s);
- }
-
- JavaString(jstring s)
- {
- m_impl.init(getJNIEnv(), s);
- }
-
- const char* utf8() const { return m_impl.utf8(); }
- const jchar* uchars() const { return m_impl.uchars(); }
- int length() const { return m_impl.length(); }
-#if USE(JSC)
- operator UString() const { return m_impl.uString(); }
-#endif
-
-private:
- JavaStringImpl m_impl;
-};
-
-class JavaParameter {
-public:
- JavaParameter() : m_JNIType(invalid_type) { }
- JavaParameter(JNIEnv*, jstring type);
- virtual ~JavaParameter() { }
-
- RuntimeType type() const { return m_type.utf8(); }
- JNIType getJNIType() const { return m_JNIType; }
-
-private:
- JavaString m_type;
- JNIType m_JNIType;
-};
-
-class JavaMethod : public Method {
-public:
- JavaMethod(JNIEnv*, jobject aMethod);
- ~JavaMethod();
-
- const JavaString& name() const { return m_name; }
- RuntimeType returnType() const { return m_returnType.utf8(); }
- JavaParameter* parameterAt(int i) const { return &m_parameters[i]; }
- int numParameters() const { return m_numParameters; }
-
- const char* signature() const;
- JNIType JNIReturnType() const;
-
- jmethodID methodID(jobject obj) const;
-
- bool isStatic() const { return m_isStatic; }
-
-private:
- JavaParameter* m_parameters;
- int m_numParameters;
- JavaString m_name;
- mutable char* m_signature;
- JavaString m_returnType;
- JNIType m_JNIReturnType;
- mutable jmethodID m_methodID;
- bool m_isStatic;
-};
-
-} // namespace Bindings
-
-} // namespace JSC
-
-#endif // ENABLE(JAVA_BRIDGE)
-
-#endif // JNIBridge_h
diff --git a/WebCore/bridge/jni/JNIUtility.cpp b/WebCore/bridge/jni/JNIUtility.cpp
deleted file mode 100644
index 4b4f393..0000000
--- a/WebCore/bridge/jni/JNIUtility.cpp
+++ /dev/null
@@ -1,343 +0,0 @@
-/*
- * Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "JNIUtility.h"
-
-#if ENABLE(JAVA_BRIDGE)
-
-#include <dlfcn.h>
-
-namespace JSC {
-
-namespace Bindings {
-
-static jint KJSGetCreatedJavaVMs(JavaVM** vmBuf, jsize bufLen, jsize* nVMs)
-{
- static void* javaVMFramework = 0;
- if (!javaVMFramework)
- javaVMFramework = dlopen("/System/Library/Frameworks/JavaVM.framework/JavaVM", RTLD_LAZY);
- if (!javaVMFramework)
- return JNI_ERR;
-
- typedef jint(*FunctionPointerType)(JavaVM**, jsize, jsize*);
- static FunctionPointerType functionPointer = 0;
- if (!functionPointer)
- functionPointer = reinterpret_cast<FunctionPointerType>(dlsym(javaVMFramework, "JNI_GetCreatedJavaVMs"));
- if (!functionPointer)
- return JNI_ERR;
- return functionPointer(vmBuf, bufLen, nVMs);
-}
-
-static JavaVM* jvm = 0;
-
-// Provide the ability for an outside component to specify the JavaVM to use
-// If the jvm value is set, the getJavaVM function below will just return.
-// In getJNIEnv(), if AttachCurrentThread is called to a VM that is already
-// attached, the result is a no-op.
-void setJavaVM(JavaVM* javaVM)
-{
- jvm = javaVM;
-}
-
-JavaVM* getJavaVM()
-{
- if (jvm)
- return jvm;
-
- JavaVM* jvmArray[1];
- jsize bufLen = 1;
- jsize nJVMs = 0;
- jint jniError = 0;
-
- // Assumes JVM is already running ..., one per process
- jniError = KJSGetCreatedJavaVMs(jvmArray, bufLen, &nJVMs);
- if (jniError == JNI_OK && nJVMs > 0)
- jvm = jvmArray[0];
- else
- LOG_ERROR("JNI_GetCreatedJavaVMs failed, returned %ld", static_cast<long>(jniError));
-
- return jvm;
-}
-
-JNIEnv* getJNIEnv()
-{
- union {
- JNIEnv* env;
- void* dummy;
- } u;
- jint jniError = 0;
-
- jniError = getJavaVM()->AttachCurrentThread(&u.dummy, 0);
- if (jniError == JNI_OK)
- return u.env;
- LOG_ERROR("AttachCurrentThread failed, returned %ld", static_cast<long>(jniError));
- return 0;
-}
-
-jmethodID getMethodID(jobject obj, const char* name, const char* sig)
-{
- JNIEnv* env = getJNIEnv();
- jmethodID mid = 0;
-
- if (env) {
- jclass cls = env->GetObjectClass(obj);
- if (cls) {
- mid = env->GetMethodID(cls, name, sig);
- if (!mid) {
- env->ExceptionClear();
- mid = env->GetStaticMethodID(cls, name, sig);
- if (!mid)
- env->ExceptionClear();
- }
- }
- env->DeleteLocalRef(cls);
- }
- return mid;
-}
-
-const char* getCharactersFromJString(jstring aJString)
-{
- return getCharactersFromJStringInEnv(getJNIEnv(), aJString);
-}
-
-void releaseCharactersForJString(jstring aJString, const char* s)
-{
- releaseCharactersForJStringInEnv(getJNIEnv(), aJString, s);
-}
-
-const char* getCharactersFromJStringInEnv(JNIEnv* env, jstring aJString)
-{
- jboolean isCopy;
- const char* s = env->GetStringUTFChars(aJString, &isCopy);
- if (!s) {
- env->ExceptionDescribe();
- env->ExceptionClear();
- fprintf(stderr, "\n");
- }
- return s;
-}
-
-void releaseCharactersForJStringInEnv(JNIEnv* env, jstring aJString, const char* s)
-{
- env->ReleaseStringUTFChars(aJString, s);
-}
-
-const jchar* getUCharactersFromJStringInEnv(JNIEnv* env, jstring aJString)
-{
- jboolean isCopy;
- const jchar* s = env->GetStringChars(aJString, &isCopy);
- if (!s) {
- env->ExceptionDescribe();
- env->ExceptionClear();
- fprintf(stderr, "\n");
- }
- return s;
-}
-
-void releaseUCharactersForJStringInEnv(JNIEnv* env, jstring aJString, const jchar* s)
-{
- env->ReleaseStringChars(aJString, s);
-}
-
-JNIType JNITypeFromClassName(const char* name)
-{
- JNIType type;
-
- if (!strcmp("byte", name))
- type = byte_type;
- else if (!strcmp("short", name))
- type = short_type;
- else if (!strcmp("int", name))
- type = int_type;
- else if (!strcmp("long", name))
- type = long_type;
- else if (!strcmp("float", name))
- type = float_type;
- else if (!strcmp("double", name))
- type = double_type;
- else if (!strcmp("char", name))
- type = char_type;
- else if (!strcmp("boolean", name))
- type = boolean_type;
- else if (!strcmp("void", name))
- type = void_type;
- else if ('[' == name[0])
- type = array_type;
- else
- type = object_type;
-
- return type;
-}
-
-const char* signatureFromPrimitiveType(JNIType type)
-{
- switch (type) {
- case void_type:
- return "V";
-
- case array_type:
- return "[";
-
- case object_type:
- return "L";
-
- case boolean_type:
- return "Z";
-
- case byte_type:
- return "B";
-
- case char_type:
- return "C";
-
- case short_type:
- return "S";
-
- case int_type:
- return "I";
-
- case long_type:
- return "J";
-
- case float_type:
- return "F";
-
- case double_type:
- return "D";
-
- case invalid_type:
- default:
- break;
- }
- return "";
-}
-
-JNIType JNITypeFromPrimitiveType(char type)
-{
- switch (type) {
- case 'V':
- return void_type;
-
- case 'L':
- return object_type;
-
- case '[':
- return array_type;
-
- case 'Z':
- return boolean_type;
-
- case 'B':
- return byte_type;
-
- case 'C':
- return char_type;
-
- case 'S':
- return short_type;
-
- case 'I':
- return int_type;
-
- case 'J':
- return long_type;
-
- case 'F':
- return float_type;
-
- case 'D':
- return double_type;
-
- default:
- break;
- }
- return invalid_type;
-}
-
-jvalue getJNIField(jobject obj, JNIType type, const char* name, const char* signature)
-{
- JavaVM* jvm = getJavaVM();
- JNIEnv* env = getJNIEnv();
- jvalue result;
-
- memset(&result, 0, sizeof(jvalue));
- if (obj && jvm && env) {
- jclass cls = env->GetObjectClass(obj);
- if (cls) {
- jfieldID field = env->GetFieldID(cls, name, signature);
- if (field) {
- switch (type) {
- case array_type:
- case object_type:
- result.l = env->functions->GetObjectField(env, obj, field);
- break;
- case boolean_type:
- result.z = env->functions->GetBooleanField(env, obj, field);
- break;
- case byte_type:
- result.b = env->functions->GetByteField(env, obj, field);
- break;
- case char_type:
- result.c = env->functions->GetCharField(env, obj, field);
- break;
- case short_type:
- result.s = env->functions->GetShortField(env, obj, field);
- break;
- case int_type:
- result.i = env->functions->GetIntField(env, obj, field);
- break;
- case long_type:
- result.j = env->functions->GetLongField(env, obj, field);
- break;
- case float_type:
- result.f = env->functions->GetFloatField(env, obj, field);
- break;
- case double_type:
- result.d = env->functions->GetDoubleField(env, obj, field);
- break;
- default:
- LOG_ERROR("Invalid field type (%d)", static_cast<int>(type));
- }
- } else {
- LOG_ERROR("Could not find field: %s", name);
- env->ExceptionDescribe();
- env->ExceptionClear();
- fprintf(stderr, "\n");
- }
-
- env->DeleteLocalRef(cls);
- } else
- LOG_ERROR("Could not find class for object");
- }
-
- return result;
-}
-
-} // namespace Bindings
-
-} // namespace JSC
-
-#endif // ENABLE(JAVA_BRIDGE)
diff --git a/WebCore/bridge/jni/JNIUtility.h b/WebCore/bridge/jni/JNIUtility.h
deleted file mode 100644
index 5fb2138..0000000
--- a/WebCore/bridge/jni/JNIUtility.h
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * Copyright (C) 2003, 2004, 2005, 2008, 2009, 2010 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef JNIUtility_h
-#define JNIUtility_h
-
-#if ENABLE(JAVA_BRIDGE)
-
-#include <JavaVM/jni.h>
-
-// The order of these items can not be modified as they are tightly
-// bound with the JVM on Mac OSX. If new types need to be added, they
-// should be added to the end. It is used in jni_obc.mm when calling
-// through to the JVM. Newly added items need to be made compatible
-// in that file.
-typedef enum {
- invalid_type = 0,
- void_type,
- object_type,
- boolean_type,
- byte_type,
- char_type,
- short_type,
- int_type,
- long_type,
- float_type,
- double_type,
- array_type
-} JNIType;
-
-namespace JSC {
-
-namespace Bindings {
-
-class JavaParameter;
-
-const char* getCharactersFromJString(jstring);
-void releaseCharactersForJString(jstring, const char*);
-
-const char* getCharactersFromJStringInEnv(JNIEnv*, jstring);
-void releaseCharactersForJStringInEnv(JNIEnv*, jstring, const char*);
-const jchar* getUCharactersFromJStringInEnv(JNIEnv*, jstring);
-void releaseUCharactersForJStringInEnv(JNIEnv*, jstring, const jchar*);
-
-JNIType JNITypeFromClassName(const char* name);
-JNIType JNITypeFromPrimitiveType(char type);
-const char* signatureFromPrimitiveType(JNIType);
-
-jvalue getJNIField(jobject, JNIType, const char* name, const char* signature);
-
-jmethodID getMethodID(jobject, const char* name, const char* sig);
-JNIEnv* getJNIEnv();
-JavaVM* getJavaVM();
-void setJavaVM(JavaVM*);
-
-
-template <typename T> struct JNICaller;
-
-template<> struct JNICaller<void> {
- static void callA(jobject obj, jmethodID mid, jvalue* args)
- {
- getJNIEnv()->CallVoidMethodA(obj, mid, args);
- }
- static void callV(jobject obj, jmethodID mid, va_list args)
- {
- getJNIEnv()->CallVoidMethodV(obj, mid, args);
- }
-};
-
-template<> struct JNICaller<jobject> {
- static jobject callA(jobject obj, jmethodID mid, jvalue* args)
- {
- return getJNIEnv()->CallObjectMethodA(obj, mid, args);
- }
- static jobject callV(jobject obj, jmethodID mid, va_list args)
- {
- return getJNIEnv()->CallObjectMethodV(obj, mid, args);
- }
-};
-
-template<> struct JNICaller<jboolean> {
- static jboolean callA(jobject obj, jmethodID mid, jvalue* args)
- {
- return getJNIEnv()->CallBooleanMethodA(obj, mid, args);
- }
- static jboolean callV(jobject obj, jmethodID mid, va_list args)
- {
- return getJNIEnv()->CallBooleanMethodV(obj, mid, args);
- }
- static jboolean callStaticV(jclass cls, jmethodID mid, va_list args)
- {
- return getJNIEnv()->CallStaticBooleanMethod(cls, mid, args);
- }
-};
-
-template<> struct JNICaller<jbyte> {
- static jbyte callA(jobject obj, jmethodID mid, jvalue* args)
- {
- return getJNIEnv()->CallByteMethodA(obj, mid, args);
- }
- static jbyte callV(jobject obj, jmethodID mid, va_list args)
- {
- return getJNIEnv()->CallByteMethodV(obj, mid, args);
- }
-};
-
-template<> struct JNICaller<jchar> {
- static jchar callA(jobject obj, jmethodID mid, jvalue* args)
- {
- return getJNIEnv()->CallCharMethodA(obj, mid, args);
- }
- static jchar callV(jobject obj, jmethodID mid, va_list args)
- {
- return getJNIEnv()->CallCharMethodV(obj, mid, args);
- }
-};
-
-template<> struct JNICaller<jshort> {
- static jshort callA(jobject obj, jmethodID mid, jvalue* args)
- {
- return getJNIEnv()->CallShortMethodA(obj, mid, args);
- }
- static jshort callV(jobject obj, jmethodID mid, va_list args)
- {
- return getJNIEnv()->CallShortMethodV(obj, mid, args);
- }
-};
-
-template<> struct JNICaller<jint> {
- static jint callA(jobject obj, jmethodID mid, jvalue* args)
- {
- return getJNIEnv()->CallIntMethodA(obj, mid, args);
- }
- static jint callV(jobject obj, jmethodID mid, va_list args)
- {
- return getJNIEnv()->CallIntMethodV(obj, mid, args);
- }
-};
-
-template<> struct JNICaller<jlong> {
- static jlong callA(jobject obj, jmethodID mid, jvalue* args)
- {
- return getJNIEnv()->CallLongMethodA(obj, mid, args);
- }
- static jlong callV(jobject obj, jmethodID mid, va_list args)
- {
- return getJNIEnv()->CallLongMethodV(obj, mid, args);
- }
-};
-
-template<> struct JNICaller<jfloat> {
- static jfloat callA(jobject obj, jmethodID mid, jvalue* args)
- {
- return getJNIEnv()->CallFloatMethodA(obj, mid, args);
- }
- static jfloat callV(jobject obj, jmethodID mid, va_list args)
- {
- return getJNIEnv()->CallFloatMethodV(obj, mid, args);
- }
-};
-
-template<> struct JNICaller<jdouble> {
- static jdouble callA(jobject obj, jmethodID mid, jvalue* args)
- {
- return getJNIEnv()->CallDoubleMethodA(obj, mid, args);
- }
- static jdouble callV(jobject obj, jmethodID mid, va_list args)
- {
- return getJNIEnv()->CallDoubleMethodV(obj, mid, args);
- }
-};
-
-template<typename T> T callJNIMethodIDA(jobject obj, jmethodID mid, jvalue *args)
-{
- return JNICaller<T>::callA(obj, mid, args);
-}
-
-template<typename T>
-static T callJNIMethodV(jobject obj, const char* name, const char* sig, va_list args)
-{
- JavaVM* jvm = getJavaVM();
- JNIEnv* env = getJNIEnv();
-
- if (obj && jvm && env) {
- jclass cls = env->GetObjectClass(obj);
- if (cls) {
- jmethodID mid = env->GetMethodID(cls, name, sig);
- if (mid) {
- // Avoids references to cls without popping the local frame.
- env->DeleteLocalRef(cls);
- return JNICaller<T>::callV(obj, mid, args);
- }
- LOG_ERROR("Could not find method: %s for %p", name, obj);
- env->ExceptionDescribe();
- env->ExceptionClear();
- fprintf(stderr, "\n");
-
- env->DeleteLocalRef(cls);
- } else
- LOG_ERROR("Could not find class for %p", obj);
- }
-
- return 0;
-}
-
-template<typename T>
-T callJNIMethod(jobject obj, const char* methodName, const char* methodSignature, ...)
-{
- va_list args;
- va_start(args, methodSignature);
-
- T result = callJNIMethodV<T>(obj, methodName, methodSignature, args);
-
- va_end(args);
-
- return result;
-}
-
-template<typename T>
-T callJNIStaticMethod(jclass cls, const char* methodName, const char* methodSignature, ...)
-{
- JavaVM* jvm = getJavaVM();
- JNIEnv* env = getJNIEnv();
- va_list args;
-
- va_start(args, methodSignature);
-
- T result = 0;
-
- if (cls && jvm && env) {
- jmethodID mid = env->GetStaticMethodID(cls, methodName, methodSignature);
- if (mid)
- result = JNICaller<T>::callStaticV(cls, mid, args);
- else {
- LOG_ERROR("Could not find method: %s for %p", methodName, cls);
- env->ExceptionDescribe();
- env->ExceptionClear();
- fprintf(stderr, "\n");
- }
- }
-
- va_end(args);
-
- return result;
-}
-
-} // namespace Bindings
-
-} // namespace JSC
-
-#endif // ENABLE(JAVA_BRIDGE)
-
-#endif // JNIUtility_h
diff --git a/WebCore/bridge/jni/jni_jsobject.h b/WebCore/bridge/jni/jni_jsobject.h
deleted file mode 100644
index 34a78ba..0000000
--- a/WebCore/bridge/jni/jni_jsobject.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (C) 2003 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef JAVASCRIPTCORE_BINDINGS_JNI_JSOBJECT_H
-#define JAVASCRIPTCORE_BINDINGS_JNI_JSOBJECT_H
-
-#if ENABLE(JAVA_BRIDGE)
-
-#include <JavaVM/jni.h>
-#include <runtime/JSValue.h>
-#include <wtf/RefPtr.h>
-
-#define jlong_to_ptr(a) ((void*)(uintptr_t)(a))
-#define jlong_to_impptr(a) (static_cast<JSC::JSObject*>(((void*)(uintptr_t)(a))))
-#define ptr_to_jlong(a) ((jlong)(uintptr_t)(a))
-
-#if PLATFORM(MAC)
-
-namespace JSC {
-
-class ArgList;
-class ExecState;
-class JSObject;
-class MarkedArgumentBuffer;
-
-namespace Bindings {
-
-class RootObject;
-
-enum JSObjectCallType {
- CreateNative,
- Call,
- Eval,
- GetMember,
- SetMember,
- RemoveMember,
- GetSlot,
- SetSlot,
- ToString,
- Finalize
-};
-
-struct JSObjectCallContext
-{
- JSObjectCallType type;
- jlong nativeHandle;
- jstring string;
- jobjectArray args;
- jint index;
- jobject value;
- CFRunLoopRef originatingLoop;
- jvalue result;
-};
-
-class JavaJSObject
-{
-public:
- JavaJSObject(jlong nativeHandle);
-
- static jlong createNative(jlong nativeHandle);
- jobject call(jstring methodName, jobjectArray args) const;
- jobject eval(jstring script) const;
- jobject getMember(jstring memberName) const;
- void setMember(jstring memberName, jobject value) const;
- void removeMember(jstring memberName) const;
- jobject getSlot(jint index) const;
- void setSlot(jint index, jobject value) const;
- jstring toString() const;
- void finalize() const;
-
- static jvalue invoke(JSObjectCallContext*);
-
- jobject convertValueToJObject(JSValue) const;
- JSValue convertJObjectToValue(ExecState*, jobject) const;
- void getListFromJArray(ExecState*, jobjectArray, MarkedArgumentBuffer&) const;
-
- RootObject* rootObject() const;
-
- // Must be called from the thread that will be used to access JavaScript.
- static void initializeJNIThreading();
-private:
- RefPtr<RootObject> _rootObject;
- JSObject* _imp;
-};
-
-
-} // namespace Bindings
-
-} // namespace JSC
-
-extern "C" {
-
-// The Java VM calls these functions to handle calls to methods in Java's JSObject class.
-jlong KJS_JSCreateNativeJSObject(JNIEnv*, jclass, jstring jurl, jlong nativeHandle, jboolean ctx);
-void KJS_JSObject_JSFinalize(JNIEnv*, jclass, jlong nativeJSObject);
-jobject KJS_JSObject_JSObjectCall(JNIEnv*, jclass, jlong nativeJSObject, jstring jurl, jstring methodName, jobjectArray args, jboolean ctx);
-jobject KJS_JSObject_JSObjectEval(JNIEnv*, jclass, jlong nativeJSObject, jstring jurl, jstring jscript, jboolean ctx);
-jobject KJS_JSObject_JSObjectGetMember(JNIEnv*, jclass, jlong nativeJSObject, jstring jurl, jstring jname, jboolean ctx);
-void KJS_JSObject_JSObjectSetMember(JNIEnv*, jclass, jlong nativeJSObject, jstring jurl, jstring jname, jobject value, jboolean ctx);
-void KJS_JSObject_JSObjectRemoveMember(JNIEnv*, jclass, jlong nativeJSObject, jstring jurl, jstring jname, jboolean ctx);
-jobject KJS_JSObject_JSObjectGetSlot(JNIEnv*, jclass, jlong nativeJSObject, jstring jurl, jint jindex, jboolean ctx);
-void KJS_JSObject_JSObjectSetSlot(JNIEnv*, jclass, jlong nativeJSObject, jstring jurl, jint jindex, jobject value, jboolean ctx);
-jstring KJS_JSObject_JSObjectToString(JNIEnv*, jclass, jlong nativeJSObject);
-
-}
-
-#endif // PLATFORM(MAC)
-
-#endif // ENABLE(JAVA_BRIDGE)
-
-#endif // JAVASCRIPTCORE_BINDINGS_JNI_JSOBJECT_H
diff --git a/WebCore/bridge/jni/jni_jsobject.mm b/WebCore/bridge/jni/jni_jsobject.mm
deleted file mode 100644
index f8ec1c4..0000000
--- a/WebCore/bridge/jni/jni_jsobject.mm
+++ /dev/null
@@ -1,705 +0,0 @@
-/*
- * Copyright (C) 2003, 2008 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "jni_jsobject.h"
-
-#if ENABLE(JAVA_BRIDGE)
-
-#include "Frame.h"
-#include "JavaRuntimeObject.h"
-#include "JNIBridge.h"
-#include "JNIUtility.h"
-#include "JNIUtilityPrivate.h"
-#include "JSDOMBinding.h"
-#include "Logging.h"
-#include "ScriptController.h"
-#include "StringSourceProvider.h"
-#include "WebCoreFrameView.h"
-#include "runtime_object.h"
-#include "runtime_root.h"
-#include <interpreter/CallFrame.h>
-#include <runtime/Completion.h>
-#include <runtime/JSGlobalObject.h>
-#include <runtime/JSLock.h>
-
-using WebCore::Frame;
-
-using namespace JSC::Bindings;
-using namespace JSC;
-using namespace WebCore;
-
-#define UndefinedHandle 1
-
-static CFRunLoopSourceRef _performJavaScriptSource;
-static CFRunLoopRef _performJavaScriptRunLoop;
-
-// May only be set by dispatchToJavaScriptThread().
-static CFRunLoopSourceRef completionSource;
-
-static void completedJavaScriptAccess (void *i)
-{
- ASSERT(CFRunLoopGetCurrent() != _performJavaScriptRunLoop);
-
- JSObjectCallContext *callContext = (JSObjectCallContext *)i;
- CFRunLoopRef runLoop = (CFRunLoopRef)callContext->originatingLoop;
-
- ASSERT(CFRunLoopGetCurrent() == runLoop);
-
- CFRunLoopStop(runLoop);
-}
-
-static pthread_once_t javaScriptAccessLockOnce = PTHREAD_ONCE_INIT;
-static pthread_mutex_t javaScriptAccessLock;
-static int javaScriptAccessLockCount = 0;
-
-static void initializeJavaScriptAccessLock()
-{
- pthread_mutexattr_t attr;
-
- pthread_mutexattr_init(&attr);
- pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_RECURSIVE);
-
- pthread_mutex_init(&javaScriptAccessLock, &attr);
-}
-
-static inline void lockJavaScriptAccess()
-{
- // Perhaps add deadlock detection?
- pthread_once(&javaScriptAccessLockOnce, initializeJavaScriptAccessLock);
- pthread_mutex_lock(&javaScriptAccessLock);
- javaScriptAccessLockCount++;
-}
-
-static inline void unlockJavaScriptAccess()
-{
- javaScriptAccessLockCount--;
- pthread_mutex_unlock(&javaScriptAccessLock);
-}
-
-static void dispatchToJavaScriptThread(JSObjectCallContext *context)
-{
- // This lock guarantees that only one thread can invoke
- // at a time, and also guarantees that completionSource;
- // won't get clobbered.
- lockJavaScriptAccess();
-
- CFRunLoopRef currentRunLoop = CFRunLoopGetCurrent();
-
- ASSERT(currentRunLoop != _performJavaScriptRunLoop);
-
- // Setup a source to signal once the invocation of the JavaScript
- // call completes.
- //
- // FIXME: This could be a potential performance issue. Creating and
- // adding run loop sources is expensive. We could create one source
- // per thread, as needed, instead.
- context->originatingLoop = currentRunLoop;
- CFRunLoopSourceContext sourceContext = {0, context, NULL, NULL, NULL, NULL, NULL, NULL, NULL, completedJavaScriptAccess};
- completionSource = CFRunLoopSourceCreate(NULL, 0, &sourceContext);
- CFRunLoopAddSource(currentRunLoop, completionSource, kCFRunLoopDefaultMode);
-
- // Wakeup JavaScript access thread and make it do its work.
- CFRunLoopSourceSignal(_performJavaScriptSource);
- if (CFRunLoopIsWaiting(_performJavaScriptRunLoop))
- CFRunLoopWakeUp(_performJavaScriptRunLoop);
-
- // Wait until the JavaScript access thread is done.
- CFRunLoopRun ();
-
- CFRunLoopRemoveSource(currentRunLoop, completionSource, kCFRunLoopDefaultMode);
- CFRelease (completionSource);
-
- unlockJavaScriptAccess();
-}
-
-static void performJavaScriptAccess(void*)
-{
- ASSERT(CFRunLoopGetCurrent() == _performJavaScriptRunLoop);
-
- // Dispatch JavaScript calls here.
- CFRunLoopSourceContext sourceContext;
- CFRunLoopSourceGetContext (completionSource, &sourceContext);
- JSObjectCallContext *callContext = (JSObjectCallContext *)sourceContext.info;
- CFRunLoopRef originatingLoop = callContext->originatingLoop;
-
- JavaJSObject::invoke (callContext);
-
- // Signal the originating thread that we're done.
- CFRunLoopSourceSignal (completionSource);
- if (CFRunLoopIsWaiting(originatingLoop))
- CFRunLoopWakeUp(originatingLoop);
-}
-
-// Must be called from the thread that will be used to access JavaScript.
-void JavaJSObject::initializeJNIThreading() {
- // Should only be called once.
- ASSERT(!_performJavaScriptRunLoop);
-
- // Assume that we can retain this run loop forever. It'll most
- // likely (always?) be the main loop.
- _performJavaScriptRunLoop = (CFRunLoopRef)CFRetain(CFRunLoopGetCurrent());
-
- // Setup a source the other threads can use to signal the _runLoop
- // thread that a JavaScript call needs to be invoked.
- CFRunLoopSourceContext sourceContext = {0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, performJavaScriptAccess};
- _performJavaScriptSource = CFRunLoopSourceCreate(NULL, 0, &sourceContext);
- CFRunLoopAddSource(_performJavaScriptRunLoop, _performJavaScriptSource, kCFRunLoopDefaultMode);
-}
-
-static bool isJavaScriptThread()
-{
- return (_performJavaScriptRunLoop == CFRunLoopGetCurrent());
-}
-
-jvalue JavaJSObject::invoke(JSObjectCallContext *context)
-{
- jvalue result;
-
- bzero ((void *)&result, sizeof(jvalue));
-
- if (!isJavaScriptThread()) {
- // Send the call context to the thread that is allowed to
- // call JavaScript.
- dispatchToJavaScriptThread(context);
- result = context->result;
- }
- else {
- jlong nativeHandle = context->nativeHandle;
- if (nativeHandle == UndefinedHandle || nativeHandle == 0) {
- return result;
- }
-
- if (context->type == CreateNative) {
- result.j = JavaJSObject::createNative(nativeHandle);
- }
- else {
- JSObject *imp = jlong_to_impptr(nativeHandle);
- if (!findProtectingRootObject(imp)) {
- LOG_ERROR("Attempt to access JavaScript from destroyed applet, type %d.", context->type);
- return result;
- }
-
- switch (context->type){
- case Call: {
- result.l = JavaJSObject(nativeHandle).call(context->string, context->args);
- break;
- }
-
- case Eval: {
- result.l = JavaJSObject(nativeHandle).eval(context->string);
- break;
- }
-
- case GetMember: {
- result.l = JavaJSObject(nativeHandle).getMember(context->string);
- break;
- }
-
- case SetMember: {
- JavaJSObject(nativeHandle).setMember(context->string, context->value);
- break;
- }
-
- case RemoveMember: {
- JavaJSObject(nativeHandle).removeMember(context->string);
- break;
- }
-
- case GetSlot: {
- result.l = JavaJSObject(nativeHandle).getSlot(context->index);
- break;
- }
-
- case SetSlot: {
- JavaJSObject(nativeHandle).setSlot(context->index, context->value);
- break;
- }
-
- case ToString: {
- result.l = (jobject) JavaJSObject(nativeHandle).toString();
- break;
- }
-
- case Finalize: {
- JavaJSObject(nativeHandle).finalize();
- break;
- }
-
- default: {
- LOG_ERROR("invalid JavaScript call");
- }
- }
- }
- context->result = result;
- }
-
- return result;
-}
-
-
-JavaJSObject::JavaJSObject(jlong nativeJSObject)
-{
- _imp = jlong_to_impptr(nativeJSObject);
-
- ASSERT(_imp);
- _rootObject = findProtectingRootObject(_imp);
- ASSERT(_rootObject);
-}
-
-RootObject* JavaJSObject::rootObject() const
-{
- return _rootObject && _rootObject->isValid() ? _rootObject.get() : 0;
-}
-
-jobject JavaJSObject::call(jstring methodName, jobjectArray args) const
-{
- LOG(LiveConnect, "JavaJSObject::call methodName = %s", JavaString(methodName).utf8());
-
- RootObject* rootObject = this->rootObject();
- if (!rootObject)
- return 0;
-
- // Lookup the function object.
- ExecState* exec = rootObject->globalObject()->globalExec();
- JSLock lock(SilenceAssertionsOnly);
-
- Identifier identifier(exec, JavaString(methodName));
- JSValue function = _imp->get(exec, identifier);
- CallData callData;
- CallType callType = getCallData(function, callData);
- if (callType == CallTypeNone)
- return 0;
-
- // Call the function object.
- MarkedArgumentBuffer argList;
- getListFromJArray(exec, args, argList);
- rootObject->globalObject()->globalData().timeoutChecker.start();
- JSValue result = JSC::call(exec, function, callType, callData, _imp, argList);
- rootObject->globalObject()->globalData().timeoutChecker.stop();
-
- return convertValueToJObject(result);
-}
-
-jobject JavaJSObject::eval(jstring script) const
-{
- LOG(LiveConnect, "JavaJSObject::eval script = %s", JavaString(script).utf8());
-
- JSValue result;
-
- JSLock lock(SilenceAssertionsOnly);
-
- RootObject* rootObject = this->rootObject();
- if (!rootObject)
- return 0;
-
- rootObject->globalObject()->globalData().timeoutChecker.start();
- Completion completion = JSC::evaluate(rootObject->globalObject()->globalExec(), rootObject->globalObject()->globalScopeChain(), makeSource(JavaString(script)), JSC::JSValue());
- rootObject->globalObject()->globalData().timeoutChecker.stop();
- ComplType type = completion.complType();
-
- if (type == Normal) {
- result = completion.value();
- if (!result)
- result = jsUndefined();
- } else
- result = jsUndefined();
-
- return convertValueToJObject (result);
-}
-
-jobject JavaJSObject::getMember(jstring memberName) const
-{
- LOG(LiveConnect, "JavaJSObject::getMember (%p) memberName = %s", _imp, JavaString(memberName).utf8());
-
- RootObject* rootObject = this->rootObject();
- if (!rootObject)
- return 0;
-
- ExecState* exec = rootObject->globalObject()->globalExec();
-
- JSLock lock(SilenceAssertionsOnly);
- JSValue result = _imp->get(exec, Identifier(exec, JavaString(memberName)));
-
- return convertValueToJObject(result);
-}
-
-void JavaJSObject::setMember(jstring memberName, jobject value) const
-{
- LOG(LiveConnect, "JavaJSObject::setMember memberName = %s, value = %p", JavaString(memberName).utf8(), value);
-
- RootObject* rootObject = this->rootObject();
- if (!rootObject)
- return;
-
- ExecState* exec = rootObject->globalObject()->globalExec();
-
- JSLock lock(SilenceAssertionsOnly);
- PutPropertySlot slot;
- _imp->put(exec, Identifier(exec, JavaString(memberName)), convertJObjectToValue(exec, value), slot);
-}
-
-
-void JavaJSObject::removeMember(jstring memberName) const
-{
- LOG(LiveConnect, "JavaJSObject::removeMember memberName = %s", JavaString(memberName).utf8());
-
- RootObject* rootObject = this->rootObject();
- if (!rootObject)
- return;
-
- ExecState* exec = rootObject->globalObject()->globalExec();
- JSLock lock(SilenceAssertionsOnly);
- _imp->deleteProperty(exec, Identifier(exec, JavaString(memberName)));
-}
-
-
-jobject JavaJSObject::getSlot(jint index) const
-{
- LOG(LiveConnect, "JavaJSObject::getSlot index = %ld", static_cast<long>(index));
-
- RootObject* rootObject = this->rootObject();
- if (!rootObject)
- return 0;
-
- ExecState* exec = rootObject->globalObject()->globalExec();
-
- JSLock lock(SilenceAssertionsOnly);
- JSValue result = _imp->get(exec, index);
-
- return convertValueToJObject(result);
-}
-
-
-void JavaJSObject::setSlot(jint index, jobject value) const
-{
- LOG(LiveConnect, "JavaJSObject::setSlot index = %ld, value = %p", static_cast<long>(index), value);
-
- RootObject* rootObject = this->rootObject();
- if (!rootObject)
- return;
-
- ExecState* exec = rootObject->globalObject()->globalExec();
- JSLock lock(SilenceAssertionsOnly);
- _imp->put(exec, (unsigned)index, convertJObjectToValue(exec, value));
-}
-
-
-jstring JavaJSObject::toString() const
-{
- LOG(LiveConnect, "JavaJSObject::toString");
-
- RootObject* rootObject = this->rootObject();
- if (!rootObject)
- return 0;
-
- JSLock lock(SilenceAssertionsOnly);
- JSObject *thisObj = const_cast<JSObject*>(_imp);
- ExecState* exec = rootObject->globalObject()->globalExec();
-
- return static_cast<jstring>(convertValueToJValue(exec, rootObject, thisObj, object_type, "java.lang.String").l);
-}
-
-void JavaJSObject::finalize() const
-{
- if (RootObject* rootObject = this->rootObject())
- rootObject->gcUnprotect(_imp);
-}
-
-static PassRefPtr<RootObject> createRootObject(void* nativeHandle)
-{
- Frame* frame = 0;
- for (NSView *view = (NSView *)nativeHandle; view; view = [view superview]) {
- if ([view conformsToProtocol:@protocol(WebCoreFrameView)]) {
- NSView<WebCoreFrameView> *webCoreFrameView = static_cast<NSView<WebCoreFrameView>*>(view);
- frame = [webCoreFrameView _web_frame];
- break;
- }
- }
- if (!frame)
- return 0;
- return frame->script()->createRootObject(nativeHandle);
-}
-
-// We're either creating a 'Root' object (via a call to JavaJSObject.getWindow()), or
-// another JavaJSObject.
-jlong JavaJSObject::createNative(jlong nativeHandle)
-{
- LOG(LiveConnect, "JavaJSObject::createNative nativeHandle = %d", static_cast<int>(nativeHandle));
-
- if (nativeHandle == UndefinedHandle)
- return nativeHandle;
-
- if (findProtectingRootObject(jlong_to_impptr(nativeHandle)))
- return nativeHandle;
-
- RefPtr<RootObject> rootObject = createRootObject(jlong_to_ptr(nativeHandle));
-
- // If rootObject is !NULL We must have been called via netscape.javascript.JavaJSObject.getWindow(),
- // otherwise we are being called after creating a JavaJSObject in
- // JavaJSObject::convertValueToJObject().
- if (rootObject) {
- JSObject* globalObject = rootObject->globalObject();
- // We call gcProtect here to get the object into the root object's "protect set" which
- // is used to test if a native handle is valid as well as getting the root object given the handle.
- rootObject->gcProtect(globalObject);
- return ptr_to_jlong(globalObject);
- }
-
- return nativeHandle;
-}
-
-jobject JavaJSObject::convertValueToJObject(JSValue value) const
-{
- JSLock lock(SilenceAssertionsOnly);
-
- RootObject* rootObject = this->rootObject();
- if (!rootObject)
- return 0;
-
- ExecState* exec = rootObject->globalObject()->globalExec();
- JNIEnv *env = getJNIEnv();
- jobject result = 0;
-
- // See section 22.7 of 'JavaScript: The Definitive Guide, 4th Edition',
- // figure 22-5.
- // number -> java.lang.Double
- // string -> java.lang.String
- // boolean -> java.lang.Boolean
- // Java instance -> Java instance
- // Everything else -> JavaJSObject
-
- if (value.isNumber()) {
- jclass JSObjectClass = env->FindClass ("java/lang/Double");
- jmethodID constructorID = env->GetMethodID (JSObjectClass, "<init>", "(D)V");
- if (constructorID != NULL) {
- result = env->NewObject (JSObjectClass, constructorID, (jdouble)value.toNumber(exec));
- }
- } else if (value.isString()) {
- UString stringValue = value.toString(exec);
- JNIEnv *env = getJNIEnv();
- result = env->NewString ((const jchar *)stringValue.characters(), stringValue.length());
- } else if (value.isBoolean()) {
- jclass JSObjectClass = env->FindClass ("java/lang/Boolean");
- jmethodID constructorID = env->GetMethodID (JSObjectClass, "<init>", "(Z)V");
- if (constructorID != NULL) {
- result = env->NewObject (JSObjectClass, constructorID, (jboolean)value.toBoolean(exec));
- }
- }
- else {
- // Create a JavaJSObject.
- jlong nativeHandle;
-
- if (value.isObject()) {
- JSObject* object = asObject(value);
-
- // We either have a wrapper around a Java instance or a JavaScript
- // object. If we have a wrapper around a Java instance, return that
- // instance, otherwise create a new Java JavaJSObject with the JSObject*
- // as its nativeHandle.
- if (object->inherits(&JavaRuntimeObject::s_info)) {
- JavaRuntimeObject* runtimeObject = static_cast<JavaRuntimeObject*>(object);
- JavaInstance* runtimeInstance = runtimeObject->getInternalJavaInstance();
- if (!runtimeInstance)
- return 0;
-
- return runtimeInstance->javaInstance();
- } else {
- nativeHandle = ptr_to_jlong(object);
- rootObject->gcProtect(object);
- }
- } else {
- // All other types will result in an undefined object.
- nativeHandle = UndefinedHandle;
- }
-
- // Now create the Java JavaJSObject. Look for the JavaJSObject in its new (Tiger)
- // location and in the original Java 1.4.2 location.
- jclass JSObjectClass;
-
- JSObjectClass = env->FindClass ("sun/plugin/javascript/webkit/JSObject");
- if (!JSObjectClass) {
- env->ExceptionDescribe();
- env->ExceptionClear();
- JSObjectClass = env->FindClass ("apple/applet/JSObject");
- }
-
- jmethodID constructorID = env->GetMethodID (JSObjectClass, "<init>", "(J)V");
- if (constructorID != NULL) {
- result = env->NewObject (JSObjectClass, constructorID, nativeHandle);
- }
- }
-
- return result;
-}
-
-JSValue JavaJSObject::convertJObjectToValue(ExecState* exec, jobject theObject) const
-{
- // Instances of netscape.javascript.JSObject get converted back to
- // JavaScript objects. All other objects are wrapped. It's not
- // possible to pass primitive types from the Java to JavaScript.
- // See section 22.7 of 'JavaScript: The Definitive Guide, 4th Edition',
- // figure 22-4.
- jobject classOfInstance = callJNIMethod<jobject>(theObject, "getClass", "()Ljava/lang/Class;");
- if (!classOfInstance) {
- JSLock lock(SilenceAssertionsOnly);
- return JavaInstance::create(theObject, _rootObject)->createRuntimeObject(exec);
- }
-
- // Only the sun.plugin.javascript.webkit.JSObject has a member called nativeJSObject. This class is
- // created above to wrap internal browser objects. The constructor of this class takes the native
- // pointer and stores it in this object, so that it can be retrieved below.
- jstring className = (jstring)callJNIMethod<jobject>(classOfInstance, "getName", "()Ljava/lang/String;");
- if (!className || (strcmp(JavaString(className).utf8(), "sun.plugin.javascript.webkit.JSObject") != 0)) {
- JSLock lock(SilenceAssertionsOnly);
- return JavaInstance::create(theObject, _rootObject)->createRuntimeObject(exec);
- }
-
- // Pull the nativeJSObject value from the Java instance. This is a
- // pointer to the JSObject.
- JNIEnv *env = getJNIEnv();
- jfieldID fieldID = env->GetFieldID((jclass)classOfInstance, "nativeJSObject", "J");
- if (fieldID == NULL)
- return jsUndefined();
- jlong nativeHandle = env->GetLongField(theObject, fieldID);
- if (nativeHandle == UndefinedHandle)
- return jsUndefined();
- JSObject *imp = static_cast<JSObject*>(jlong_to_impptr(nativeHandle));
- return imp;
-}
-
-void JavaJSObject::getListFromJArray(ExecState* exec, jobjectArray jArray, MarkedArgumentBuffer& list) const
-{
- JNIEnv *env = getJNIEnv();
- int numObjects = jArray ? env->GetArrayLength(jArray) : 0;
-
- for (int i = 0; i < numObjects; i++) {
- jobject anObject = env->GetObjectArrayElement ((jobjectArray)jArray, i);
- if (anObject) {
- list.append(convertJObjectToValue(exec, anObject));
- env->DeleteLocalRef (anObject);
- }
- else {
- env->ExceptionDescribe();
- env->ExceptionClear();
- }
- }
-}
-
-extern "C" {
-
-jlong KJS_JSCreateNativeJSObject (JNIEnv*, jclass, jstring, jlong nativeHandle, jboolean)
-{
- JSObjectCallContext context;
- context.type = CreateNative;
- context.nativeHandle = nativeHandle;
- return JavaJSObject::invoke (&context).j;
-}
-
-void KJS_JSObject_JSFinalize (JNIEnv*, jclass, jlong nativeHandle)
-{
- JSObjectCallContext context;
- context.type = Finalize;
- context.nativeHandle = nativeHandle;
- JavaJSObject::invoke (&context);
-}
-
-jobject KJS_JSObject_JSObjectCall (JNIEnv*, jclass, jlong nativeHandle, jstring, jstring methodName, jobjectArray args, jboolean)
-{
- JSObjectCallContext context;
- context.type = Call;
- context.nativeHandle = nativeHandle;
- context.string = methodName;
- context.args = args;
- return JavaJSObject::invoke (&context).l;
-}
-
-jobject KJS_JSObject_JSObjectEval (JNIEnv*, jclass, jlong nativeHandle, jstring, jstring jscript, jboolean)
-{
- JSObjectCallContext context;
- context.type = Eval;
- context.nativeHandle = nativeHandle;
- context.string = jscript;
- return JavaJSObject::invoke (&context).l;
-}
-
-jobject KJS_JSObject_JSObjectGetMember (JNIEnv*, jclass, jlong nativeHandle, jstring, jstring jname, jboolean)
-{
- JSObjectCallContext context;
- context.type = GetMember;
- context.nativeHandle = nativeHandle;
- context.string = jname;
- return JavaJSObject::invoke (&context).l;
-}
-
-void KJS_JSObject_JSObjectSetMember (JNIEnv*, jclass, jlong nativeHandle, jstring, jstring jname, jobject value, jboolean)
-{
- JSObjectCallContext context;
- context.type = SetMember;
- context.nativeHandle = nativeHandle;
- context.string = jname;
- context.value = value;
- JavaJSObject::invoke (&context);
-}
-
-void KJS_JSObject_JSObjectRemoveMember (JNIEnv*, jclass, jlong nativeHandle, jstring, jstring jname, jboolean)
-{
- JSObjectCallContext context;
- context.type = RemoveMember;
- context.nativeHandle = nativeHandle;
- context.string = jname;
- JavaJSObject::invoke (&context);
-}
-
-jobject KJS_JSObject_JSObjectGetSlot (JNIEnv*, jclass, jlong nativeHandle, jstring, jint jindex, jboolean)
-{
- JSObjectCallContext context;
- context.type = GetSlot;
- context.nativeHandle = nativeHandle;
- context.index = jindex;
- return JavaJSObject::invoke (&context).l;
-}
-
-void KJS_JSObject_JSObjectSetSlot (JNIEnv*, jclass, jlong nativeHandle, jstring, jint jindex, jobject value, jboolean)
-{
- JSObjectCallContext context;
- context.type = SetSlot;
- context.nativeHandle = nativeHandle;
- context.index = jindex;
- context.value = value;
- JavaJSObject::invoke (&context);
-}
-
-jstring KJS_JSObject_JSObjectToString (JNIEnv*, jclass, jlong nativeHandle)
-{
- JSObjectCallContext context;
- context.type = ToString;
- context.nativeHandle = nativeHandle;
- return (jstring)JavaJSObject::invoke (&context).l;
-}
-
-}
-
-#endif // ENABLE(JAVA_BRIDGE)
diff --git a/WebCore/bridge/jni/jni_objc.mm b/WebCore/bridge/jni/jni_objc.mm
deleted file mode 100644
index 8fa2c3f..0000000
--- a/WebCore/bridge/jni/jni_objc.mm
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (C) 2004 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-
-#if ENABLE(JAVA_BRIDGE)
-
-#import <Foundation/Foundation.h>
-#import "JNIUtility.h"
-#import "JNIUtilityPrivate.h"
-#import "objc_utility.h"
-#include <runtime/JSLock.h>
-
-using namespace JSC::Bindings;
-
-@interface NSObject (WebScriptingPrivate)
-- (jvalue)webPlugInCallJava:(jobject)object method:(jmethodID)method returnType:(JNIType)returnType arguments:(jvalue*)args;
-- (jvalue)webPlugInCallJava:(jobject)object
- isStatic:(BOOL)isStatic
- returnType:(JNIType)returnType
- method:(jmethodID)method
- arguments:(jvalue*)args
- callingURL:(NSURL *)url
- exceptionDescription:(NSString **)exceptionString;
-@end
-
-bool JSC::Bindings::dispatchJNICall(ExecState* exec, const void* targetAppletView, jobject obj, bool isStatic, JNIType returnType, jmethodID methodID, jvalue* args, jvalue &result, const char*, JSValue& exceptionDescription)
-{
- id view = (id)targetAppletView;
-
- // As array_type is not known by the Mac JVM, change it to a compatible type.
- if (returnType == array_type)
- returnType = object_type;
-
- if ([view respondsToSelector:@selector(webPlugInCallJava:isStatic:returnType:method:arguments:callingURL:exceptionDescription:)]) {
- NSString *_exceptionDescription = 0;
-
- // Passing nil as the calling URL will cause the Java plugin to use the URL
- // of the page that contains the applet. The execution restrictions
- // implemented in WebCore will guarantee that only appropriate JavaScript
- // can reference the applet.
- {
- JSLock::DropAllLocks dropAllLocks(SilenceAssertionsOnly);
- result = [view webPlugInCallJava:obj isStatic:isStatic returnType:returnType method:methodID arguments:args callingURL:nil exceptionDescription:&_exceptionDescription];
- }
-
- if (_exceptionDescription != 0) {
- exceptionDescription = convertNSStringToString(exec, _exceptionDescription);
- }
- return true;
- }
- else if ([view respondsToSelector:@selector(webPlugInCallJava:method:returnType:arguments:)]) {
- JSLock::DropAllLocks dropAllLocks(SilenceAssertionsOnly);
- result = [view webPlugInCallJava:obj method:methodID returnType:returnType arguments:args];
- return true;
- }
-
- bzero (&result, sizeof(jvalue));
- return false;
-}
-
-#endif // ENABLE(JAVA_BRIDGE)
diff --git a/WebCore/bridge/jni/jsc/JNIBridgeJSC.cpp b/WebCore/bridge/jni/jsc/JNIBridgeJSC.cpp
deleted file mode 100644
index 3c16d05..0000000
--- a/WebCore/bridge/jni/jsc/JNIBridgeJSC.cpp
+++ /dev/null
@@ -1,445 +0,0 @@
-/*
- * Copyright (C) 2003, 2004, 2005, 2007, 2009 Apple Inc. All rights reserved.
- * Copyright 2010, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "JNIBridgeJSC.h"
-
-#if ENABLE(JAVA_BRIDGE)
-
-#include "JNIUtilityPrivate.h"
-#include "Logging.h"
-#include "runtime_array.h"
-#include "runtime_object.h"
-#include <runtime/Error.h>
-
-using namespace JSC;
-using namespace JSC::Bindings;
-using namespace WebCore;
-
-JavaField::JavaField(JNIEnv* env, jobject aField)
-{
- // Get field type name
- jstring fieldTypeName = 0;
- if (jobject fieldType = callJNIMethod<jobject>(aField, "getType", "()Ljava/lang/Class;"))
- fieldTypeName = static_cast<jstring>(callJNIMethod<jobject>(fieldType, "getName", "()Ljava/lang/String;"));
- if (!fieldTypeName)
- fieldTypeName = env->NewStringUTF("<Unknown>");
- m_type = JavaString(env, fieldTypeName);
-
- m_JNIType = JNITypeFromClassName(m_type.utf8());
-
- // Get field name
- jstring fieldName = static_cast<jstring>(callJNIMethod<jobject>(aField, "getName", "()Ljava/lang/String;"));
- if (!fieldName)
- fieldName = env->NewStringUTF("<Unknown>");
- m_name = JavaString(env, fieldName);
-
- m_field = new JObjectWrapper(aField);
-}
-
-JSValue JavaArray::convertJObjectToArray(ExecState* exec, jobject anObject, const char* type, PassRefPtr<RootObject> rootObject)
-{
- if (type[0] != '[')
- return jsUndefined();
-
- return new (exec) RuntimeArray(exec, new JavaArray(anObject, type, rootObject));
-}
-
-jvalue JavaField::dispatchValueFromInstance(ExecState* exec, const JavaInstance* instance, const char* name, const char* sig, JNIType returnType) const
-{
- jobject jinstance = instance->javaInstance();
- jobject fieldJInstance = m_field->m_instance;
- JNIEnv* env = getJNIEnv();
- jvalue result;
-
- memset(&result, 0, sizeof(jvalue));
- jclass cls = env->GetObjectClass(fieldJInstance);
- if (cls) {
- jmethodID mid = env->GetMethodID(cls, name, sig);
- if (mid) {
- RootObject* rootObject = instance->rootObject();
- if (rootObject && rootObject->nativeHandle()) {
- JSValue exceptionDescription;
- jvalue args[1];
-
- args[0].l = jinstance;
- dispatchJNICall(exec, rootObject->nativeHandle(), fieldJInstance, false, returnType, mid, args, result, 0, exceptionDescription);
- if (exceptionDescription)
- throwError(exec, createError(exec, exceptionDescription.toString(exec)));
- }
- }
- }
- return result;
-}
-
-JSValue JavaField::valueFromInstance(ExecState* exec, const Instance* i) const
-{
- const JavaInstance* instance = static_cast<const JavaInstance*>(i);
-
- JSValue jsresult = jsUndefined();
-
- switch (m_JNIType) {
- case array_type:
- case object_type:
- {
- jvalue result = dispatchValueFromInstance(exec, instance, "get", "(Ljava/lang/Object;)Ljava/lang/Object;", object_type);
- jobject anObject = result.l;
-
- if (!anObject)
- return jsNull();
-
- const char* arrayType = type();
- if (arrayType[0] == '[')
- jsresult = JavaArray::convertJObjectToArray(exec, anObject, arrayType, instance->rootObject());
- else if (anObject)
- jsresult = JavaInstance::create(anObject, instance->rootObject())->createRuntimeObject(exec);
- }
- break;
-
- case boolean_type:
- jsresult = jsBoolean(dispatchValueFromInstance(exec, instance, "getBoolean", "(Ljava/lang/Object;)Z", boolean_type).z);
- break;
-
- case byte_type:
- case char_type:
- case short_type:
-
- case int_type:
- {
- jint value;
- jvalue result = dispatchValueFromInstance(exec, instance, "getInt", "(Ljava/lang/Object;)I", int_type);
- value = result.i;
- jsresult = jsNumber(static_cast<int>(value));
- }
- break;
-
- case long_type:
- case float_type:
- case double_type:
- {
- jdouble value;
- jvalue result = dispatchValueFromInstance(exec, instance, "getDouble", "(Ljava/lang/Object;)D", double_type);
- value = result.i;
- jsresult = jsNumber(static_cast<double>(value));
- }
- break;
- default:
- break;
- }
-
- LOG(LiveConnect, "JavaField::valueFromInstance getting %s = %s", UString(name()).utf8().data(), jsresult.toString(exec).ascii().data());
-
- return jsresult;
-}
-
-void JavaField::dispatchSetValueToInstance(ExecState* exec, const JavaInstance* instance, jvalue javaValue, const char* name, const char* sig) const
-{
- jobject jinstance = instance->javaInstance();
- jobject fieldJInstance = m_field->m_instance;
- JNIEnv* env = getJNIEnv();
-
- jclass cls = env->GetObjectClass(fieldJInstance);
- if (cls) {
- jmethodID mid = env->GetMethodID(cls, name, sig);
- if (mid) {
- RootObject* rootObject = instance->rootObject();
- if (rootObject && rootObject->nativeHandle()) {
- JSValue exceptionDescription;
- jvalue args[2];
- jvalue result;
-
- args[0].l = jinstance;
- args[1] = javaValue;
- dispatchJNICall(exec, rootObject->nativeHandle(), fieldJInstance, false, void_type, mid, args, result, 0, exceptionDescription);
- if (exceptionDescription)
- throwError(exec, createError(exec, exceptionDescription.toString(exec)));
- }
- }
- }
-}
-
-void JavaField::setValueToInstance(ExecState* exec, const Instance* i, JSValue aValue) const
-{
- const JavaInstance* instance = static_cast<const JavaInstance*>(i);
- jvalue javaValue = convertValueToJValue(exec, i->rootObject(), aValue, m_JNIType, type());
-
- LOG(LiveConnect, "JavaField::setValueToInstance setting value %s to %s", UString(name()).utf8().data(), aValue.toString(exec).ascii().data());
-
- switch (m_JNIType) {
- case array_type:
- case object_type:
- {
- dispatchSetValueToInstance(exec, instance, javaValue, "set", "(Ljava/lang/Object;Ljava/lang/Object;)V");
- }
- break;
-
- case boolean_type:
- {
- dispatchSetValueToInstance(exec, instance, javaValue, "setBoolean", "(Ljava/lang/Object;Z)V");
- }
- break;
-
- case byte_type:
- {
- dispatchSetValueToInstance(exec, instance, javaValue, "setByte", "(Ljava/lang/Object;B)V");
- }
- break;
-
- case char_type:
- {
- dispatchSetValueToInstance(exec, instance, javaValue, "setChar", "(Ljava/lang/Object;C)V");
- }
- break;
-
- case short_type:
- {
- dispatchSetValueToInstance(exec, instance, javaValue, "setShort", "(Ljava/lang/Object;S)V");
- }
- break;
-
- case int_type:
- {
- dispatchSetValueToInstance(exec, instance, javaValue, "setInt", "(Ljava/lang/Object;I)V");
- }
- break;
-
- case long_type:
- {
- dispatchSetValueToInstance(exec, instance, javaValue, "setLong", "(Ljava/lang/Object;J)V");
- }
- break;
-
- case float_type:
- {
- dispatchSetValueToInstance(exec, instance, javaValue, "setFloat", "(Ljava/lang/Object;F)V");
- }
- break;
-
- case double_type:
- {
- dispatchSetValueToInstance(exec, instance, javaValue, "setDouble", "(Ljava/lang/Object;D)V");
- }
- break;
- default:
- break;
- }
-}
-
-JavaArray::JavaArray(jobject array, const char* type, PassRefPtr<RootObject> rootObject)
- : Array(rootObject)
-{
- m_array = new JObjectWrapper(array);
- // Java array are fixed length, so we can cache length.
- JNIEnv* env = getJNIEnv();
- m_length = env->GetArrayLength(static_cast<jarray>(m_array->m_instance));
- m_type = strdup(type);
-}
-
-JavaArray::~JavaArray()
-{
- free(const_cast<char*>(m_type));
-}
-
-RootObject* JavaArray::rootObject() const
-{
- return m_rootObject && m_rootObject->isValid() ? m_rootObject.get() : 0;
-}
-
-void JavaArray::setValueAt(ExecState* exec, unsigned index, JSValue aValue) const
-{
- JNIEnv* env = getJNIEnv();
- char* javaClassName = 0;
-
- JNIType arrayType = JNITypeFromPrimitiveType(m_type[1]);
- if (m_type[1] == 'L') {
- // The type of the array will be something like:
- // "[Ljava.lang.string;". This is guaranteed, so no need
- // for extra sanity checks.
- javaClassName = strdup(&m_type[2]);
- javaClassName[strchr(javaClassName, ';')-javaClassName] = 0;
- }
- jvalue aJValue = convertValueToJValue(exec, m_rootObject.get(), aValue, arrayType, javaClassName);
-
- switch (arrayType) {
- case object_type:
- {
- env->SetObjectArrayElement(static_cast<jobjectArray>(javaArray()), index, aJValue.l);
- break;
- }
-
- case boolean_type:
- {
- env->SetBooleanArrayRegion(static_cast<jbooleanArray>(javaArray()), index, 1, &aJValue.z);
- break;
- }
-
- case byte_type:
- {
- env->SetByteArrayRegion(static_cast<jbyteArray>(javaArray()), index, 1, &aJValue.b);
- break;
- }
-
- case char_type:
- {
- env->SetCharArrayRegion(static_cast<jcharArray>(javaArray()), index, 1, &aJValue.c);
- break;
- }
-
- case short_type:
- {
- env->SetShortArrayRegion(static_cast<jshortArray>(javaArray()), index, 1, &aJValue.s);
- break;
- }
-
- case int_type:
- {
- env->SetIntArrayRegion(static_cast<jintArray>(javaArray()), index, 1, &aJValue.i);
- break;
- }
-
- case long_type:
- {
- env->SetLongArrayRegion(static_cast<jlongArray>(javaArray()), index, 1, &aJValue.j);
- }
-
- case float_type:
- {
- env->SetFloatArrayRegion(static_cast<jfloatArray>(javaArray()), index, 1, &aJValue.f);
- break;
- }
-
- case double_type:
- {
- env->SetDoubleArrayRegion(static_cast<jdoubleArray>(javaArray()), index, 1, &aJValue.d);
- break;
- }
- default:
- break;
- }
-
- if (javaClassName)
- free(const_cast<char*>(javaClassName));
-}
-
-
-JSValue JavaArray::valueAt(ExecState* exec, unsigned index) const
-{
- JNIEnv* env = getJNIEnv();
- JNIType arrayType = JNITypeFromPrimitiveType(m_type[1]);
- switch (arrayType) {
- case object_type:
- {
- jobjectArray objectArray = static_cast<jobjectArray>(javaArray());
- jobject anObject;
- anObject = env->GetObjectArrayElement(objectArray, index);
-
- // No object?
- if (!anObject)
- return jsNull();
-
- // Nested array?
- if (m_type[1] == '[')
- return JavaArray::convertJObjectToArray(exec, anObject, m_type + 1, rootObject());
- // or array of other object type?
- return JavaInstance::create(anObject, rootObject())->createRuntimeObject(exec);
- }
-
- case boolean_type:
- {
- jbooleanArray booleanArray = static_cast<jbooleanArray>(javaArray());
- jboolean aBoolean;
- env->GetBooleanArrayRegion(booleanArray, index, 1, &aBoolean);
- return jsBoolean(aBoolean);
- }
-
- case byte_type:
- {
- jbyteArray byteArray = static_cast<jbyteArray>(javaArray());
- jbyte aByte;
- env->GetByteArrayRegion(byteArray, index, 1, &aByte);
- return jsNumber(aByte);
- }
-
- case char_type:
- {
- jcharArray charArray = static_cast<jcharArray>(javaArray());
- jchar aChar;
- env->GetCharArrayRegion(charArray, index, 1, &aChar);
- return jsNumber(aChar);
- break;
- }
-
- case short_type:
- {
- jshortArray shortArray = static_cast<jshortArray>(javaArray());
- jshort aShort;
- env->GetShortArrayRegion(shortArray, index, 1, &aShort);
- return jsNumber(aShort);
- }
-
- case int_type:
- {
- jintArray intArray = static_cast<jintArray>(javaArray());
- jint anInt;
- env->GetIntArrayRegion(intArray, index, 1, &anInt);
- return jsNumber(anInt);
- }
-
- case long_type:
- {
- jlongArray longArray = static_cast<jlongArray>(javaArray());
- jlong aLong;
- env->GetLongArrayRegion(longArray, index, 1, &aLong);
- return jsNumber(aLong);
- }
-
- case float_type:
- {
- jfloatArray floatArray = static_cast<jfloatArray>(javaArray());
- jfloat aFloat;
- env->GetFloatArrayRegion(floatArray, index, 1, &aFloat);
- return jsNumber(aFloat);
- }
-
- case double_type:
- {
- jdoubleArray doubleArray = static_cast<jdoubleArray>(javaArray());
- jdouble aDouble;
- env->GetDoubleArrayRegion(doubleArray, index, 1, &aDouble);
- return jsNumber(aDouble);
- }
- default:
- break;
- }
- return jsUndefined();
-}
-
-unsigned int JavaArray::getLength() const
-{
- return m_length;
-}
-
-#endif // ENABLE(JAVA_BRIDGE)
diff --git a/WebCore/bridge/jni/jsc/JNIBridgeJSC.h b/WebCore/bridge/jni/jsc/JNIBridgeJSC.h
deleted file mode 100644
index afb1bce..0000000
--- a/WebCore/bridge/jni/jsc/JNIBridgeJSC.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2003, 2004, 2005, 2007, 2009, 2010 Apple Inc. All rights reserved.
- * Copyright 2010, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef JNIBridgeJSC_h
-#define JNIBridgeJSC_h
-
-#if ENABLE(JAVA_BRIDGE)
-
-#include "Bridge.h"
-#include "JNIBridge.h"
-#include <JavaVM/jni.h>
-
-namespace JSC {
-
-namespace Bindings {
-
-class JavaField : public Field {
-public:
- JavaField(JNIEnv*, jobject aField);
-
- virtual JSValue valueFromInstance(ExecState*, const Instance*) const;
- virtual void setValueToInstance(ExecState*, const Instance*, JSValue) const;
-
- const JavaString& name() const { return m_name; }
- virtual RuntimeType type() const { return m_type.utf8(); }
-
- JNIType getJNIType() const { return m_JNIType; }
-
-private:
- void dispatchSetValueToInstance(ExecState*, const JavaInstance*, jvalue, const char* name, const char* sig) const;
- jvalue dispatchValueFromInstance(ExecState*, const JavaInstance*, const char* name, const char* sig, JNIType returnType) const;
-
- JavaString m_name;
- JavaString m_type;
- JNIType m_JNIType;
- RefPtr<JObjectWrapper> m_field;
-};
-
-class JavaArray : public Array {
-public:
- JavaArray(jobject array, const char* type, PassRefPtr<RootObject>);
- virtual ~JavaArray();
-
- RootObject* rootObject() const;
-
- virtual void setValueAt(ExecState*, unsigned int index, JSValue) const;
- virtual JSValue valueAt(ExecState*, unsigned int index) const;
- virtual unsigned int getLength() const;
-
- jobject javaArray() const { return m_array->m_instance; }
-
- static JSValue convertJObjectToArray(ExecState*, jobject, const char* type, PassRefPtr<RootObject>);
-
-private:
- RefPtr<JObjectWrapper> m_array;
- unsigned int m_length;
- const char* m_type;
-};
-
-} // namespace Bindings
-
-} // namespace JSC
-
-#endif // ENABLE(JAVA_BRIDGE)
-
-#endif // JNIBridge_h
diff --git a/WebCore/bridge/jni/jsc/JNIUtilityPrivate.cpp b/WebCore/bridge/jni/jsc/JNIUtilityPrivate.cpp
deleted file mode 100644
index bf19642..0000000
--- a/WebCore/bridge/jni/jsc/JNIUtilityPrivate.cpp
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
- * Copyright (C) 2003, 2010 Apple, Inc. All rights reserved.
- * Copyright 2009, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "JNIUtilityPrivate.h"
-
-#if ENABLE(JAVA_BRIDGE)
-
-#include "JavaRuntimeObject.h"
-#include "JNIBridgeJSC.h"
-#include "jni_jsobject.h"
-#include "runtime_array.h"
-#include "runtime_object.h"
-#include <runtime/JSArray.h>
-#include <runtime/JSLock.h>
-
-namespace JSC {
-
-namespace Bindings {
-
-static jobject convertArrayInstanceToJavaArray(ExecState* exec, JSArray* jsArray, const char* javaClassName)
-{
- JNIEnv* env = getJNIEnv();
- // As JS Arrays can contain a mixture of objects, assume we can convert to
- // the requested Java Array type requested, unless the array type is some object array
- // other than a string.
- unsigned length = jsArray->length();
- jobjectArray jarray = 0;
-
- // Build the correct array type
- switch (JNITypeFromPrimitiveType(javaClassName[1])) {
- case object_type:
- {
- // Only support string object types
- if (!strcmp("[Ljava.lang.String;", javaClassName)) {
- jarray = (jobjectArray)env->NewObjectArray(length,
- env->FindClass("java/lang/String"),
- env->NewStringUTF(""));
- for (unsigned i = 0; i < length; i++) {
- JSValue item = jsArray->get(exec, i);
- UString stringValue = item.toString(exec);
- env->SetObjectArrayElement(jarray, i,
- env->functions->NewString(env, (const jchar *)stringValue.characters(), stringValue.length()));
- }
- }
- break;
- }
-
- case boolean_type:
- {
- jarray = (jobjectArray)env->NewBooleanArray(length);
- for (unsigned i = 0; i < length; i++) {
- JSValue item = jsArray->get(exec, i);
- jboolean value = (jboolean)item.toNumber(exec);
- env->SetBooleanArrayRegion((jbooleanArray)jarray, (jsize)i, (jsize)1, &value);
- }
- break;
- }
-
- case byte_type:
- {
- jarray = (jobjectArray)env->NewByteArray(length);
- for (unsigned i = 0; i < length; i++) {
- JSValue item = jsArray->get(exec, i);
- jbyte value = (jbyte)item.toNumber(exec);
- env->SetByteArrayRegion((jbyteArray)jarray, (jsize)i, (jsize)1, &value);
- }
- break;
- }
-
- case char_type:
- {
- jarray = (jobjectArray)env->NewCharArray(length);
- for (unsigned i = 0; i < length; i++) {
- JSValue item = jsArray->get(exec, i);
- UString stringValue = item.toString(exec);
- jchar value = 0;
- if (stringValue.length() > 0)
- value = ((const jchar*)stringValue.characters())[0];
- env->SetCharArrayRegion((jcharArray)jarray, (jsize)i, (jsize)1, &value);
- }
- break;
- }
-
- case short_type:
- {
- jarray = (jobjectArray)env->NewShortArray(length);
- for (unsigned i = 0; i < length; i++) {
- JSValue item = jsArray->get(exec, i);
- jshort value = (jshort)item.toNumber(exec);
- env->SetShortArrayRegion((jshortArray)jarray, (jsize)i, (jsize)1, &value);
- }
- break;
- }
-
- case int_type:
- {
- jarray = (jobjectArray)env->NewIntArray(length);
- for (unsigned i = 0; i < length; i++) {
- JSValue item = jsArray->get(exec, i);
- jint value = (jint)item.toNumber(exec);
- env->SetIntArrayRegion((jintArray)jarray, (jsize)i, (jsize)1, &value);
- }
- break;
- }
-
- case long_type:
- {
- jarray = (jobjectArray)env->NewLongArray(length);
- for (unsigned i = 0; i < length; i++) {
- JSValue item = jsArray->get(exec, i);
- jlong value = (jlong)item.toNumber(exec);
- env->SetLongArrayRegion((jlongArray)jarray, (jsize)i, (jsize)1, &value);
- }
- break;
- }
-
- case float_type:
- {
- jarray = (jobjectArray)env->NewFloatArray(length);
- for (unsigned i = 0; i < length; i++) {
- JSValue item = jsArray->get(exec, i);
- jfloat value = (jfloat)item.toNumber(exec);
- env->SetFloatArrayRegion((jfloatArray)jarray, (jsize)i, (jsize)1, &value);
- }
- break;
- }
-
- case double_type:
- {
- jarray = (jobjectArray)env->NewDoubleArray(length);
- for (unsigned i = 0; i < length; i++) {
- JSValue item = jsArray->get(exec, i);
- jdouble value = (jdouble)item.toNumber(exec);
- env->SetDoubleArrayRegion((jdoubleArray)jarray, (jsize)i, (jsize)1, &value);
- }
- break;
- }
-
- case array_type: // don't handle embedded arrays
- case void_type: // Don't expect arrays of void objects
- case invalid_type: // Array of unknown objects
- break;
- }
-
- // if it was not one of the cases handled, then null is returned
- return jarray;
-}
-
-jvalue convertValueToJValue(ExecState* exec, RootObject* rootObject, JSValue value, JNIType jniType, const char* javaClassName)
-{
- JSLock lock(SilenceAssertionsOnly);
-
- jvalue result;
- memset(&result, 0, sizeof(jvalue));
-
- switch (jniType) {
- case array_type:
- case object_type:
- {
- // FIXME: JavaJSObject::convertValueToJObject functionality is almost exactly the same,
- // these functions should use common code.
-
- if (value.isObject()) {
- JSObject* object = asObject(value);
- if (object->inherits(&JavaRuntimeObject::s_info)) {
- // Unwrap a Java instance.
- JavaRuntimeObject* runtimeObject = static_cast<JavaRuntimeObject*>(object);
- JavaInstance* instance = runtimeObject->getInternalJavaInstance();
- if (instance)
- result.l = instance->javaInstance();
- } else if (object->classInfo() == &RuntimeArray::s_info) {
- // Input is a JavaScript Array that was originally created from a Java Array
- RuntimeArray* imp = static_cast<RuntimeArray*>(object);
- JavaArray* array = static_cast<JavaArray*>(imp->getConcreteArray());
- result.l = array->javaArray();
- } else if (object->classInfo() == &JSArray::info) {
- // Input is a Javascript Array. We need to create it to a Java Array.
- result.l = convertArrayInstanceToJavaArray(exec, asArray(value), javaClassName);
- } else if ((!result.l && (!strcmp(javaClassName, "java.lang.Object")))
- || (!strcmp(javaClassName, "netscape.javascript.JSObject"))) {
- // Wrap objects in JSObject instances.
- JNIEnv* env = getJNIEnv();
- jclass jsObjectClass = env->FindClass("sun/plugin/javascript/webkit/JSObject");
- jmethodID constructorID = env->GetMethodID(jsObjectClass, "<init>", "(J)V");
- if (constructorID) {
- jlong nativeHandle = ptr_to_jlong(object);
- rootObject->gcProtect(object);
- result.l = env->NewObject(jsObjectClass, constructorID, nativeHandle);
- }
- }
- }
-
- // Create an appropriate Java object if target type is java.lang.Object.
- if (!result.l && !strcmp(javaClassName, "java.lang.Object")) {
- if (value.isString()) {
- UString stringValue = asString(value)->value(exec);
- JNIEnv* env = getJNIEnv();
- jobject javaString = env->functions->NewString(env, (const jchar*)stringValue.characters(), stringValue.length());
- result.l = javaString;
- } else if (value.isNumber()) {
- double doubleValue = value.uncheckedGetNumber();
- JNIEnv* env = getJNIEnv();
- jclass clazz = env->FindClass("java/lang/Double");
- jmethodID constructor = env->GetMethodID(clazz, "<init>", "(D)V");
- jobject javaDouble = env->functions->NewObject(env, clazz, constructor, doubleValue);
- result.l = javaDouble;
- } else if (value.isBoolean()) {
- bool boolValue = value.getBoolean();
- JNIEnv* env = getJNIEnv();
- jclass clazz = env->FindClass("java/lang/Boolean");
- jmethodID constructor = env->GetMethodID(clazz, "<init>", "(Z)V");
- jobject javaBoolean = env->functions->NewObject(env, clazz, constructor, boolValue);
- result.l = javaBoolean;
- } else if (value.isUndefined()) {
- UString stringValue = "undefined";
- JNIEnv* env = getJNIEnv();
- jobject javaString = env->functions->NewString(env, (const jchar*)stringValue.characters(), stringValue.length());
- result.l = javaString;
- }
- }
-
- // Convert value to a string if the target type is a java.lang.String, and we're not
- // converting from a null.
- if (!result.l && !strcmp(javaClassName, "java.lang.String")) {
- if (!value.isNull()) {
- UString stringValue = value.toString(exec);
- JNIEnv* env = getJNIEnv();
- jobject javaString = env->functions->NewString(env, (const jchar*)stringValue.characters(), stringValue.length());
- result.l = javaString;
- }
- }
- }
- break;
-
- case boolean_type:
- {
- result.z = (jboolean)value.toNumber(exec);
- }
- break;
-
- case byte_type:
- {
- result.b = (jbyte)value.toNumber(exec);
- }
- break;
-
- case char_type:
- {
- result.c = (jchar)value.toNumber(exec);
- }
- break;
-
- case short_type:
- {
- result.s = (jshort)value.toNumber(exec);
- }
- break;
-
- case int_type:
- {
- result.i = (jint)value.toNumber(exec);
- }
- break;
-
- case long_type:
- {
- result.j = (jlong)value.toNumber(exec);
- }
- break;
-
- case float_type:
- {
- result.f = (jfloat)value.toNumber(exec);
- }
- break;
-
- case double_type:
- {
- result.d = (jdouble)value.toNumber(exec);
- }
- break;
-
- case invalid_type:
- case void_type:
- break;
- }
- return result;
-}
-
-} // end of namespace Bindings
-
-} // end of namespace JSC
-
-#endif // ENABLE(JAVA_BRIDGE)
diff --git a/WebCore/bridge/jni/jsc/JNIUtilityPrivate.h b/WebCore/bridge/jni/jsc/JNIUtilityPrivate.h
deleted file mode 100644
index 1266acd..0000000
--- a/WebCore/bridge/jni/jsc/JNIUtilityPrivate.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2003 Apple Computer, Inc. All rights reserved.
- * Copyright 2009, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef JNIUtilityPrivate_h
-#define JNIUtilityPrivate_h
-
-#if ENABLE(JAVA_BRIDGE)
-
-#include "JNIUtility.h"
-#include <runtime/JSValue.h>
-
-namespace JSC {
-
-class ExecState;
-class JSObject;
-
-namespace Bindings {
-
-class RootObject;
-
-jvalue convertValueToJValue(ExecState*, RootObject*, JSValue, JNIType, const char* javaClassName);
-bool dispatchJNICall(ExecState*, const void* targetAppletView, jobject obj, bool isStatic, JNIType returnType, jmethodID methodID, jvalue* args, jvalue& result, const char* callingURL, JSValue& exceptionDescription);
-
-} // namespace Bindings
-
-} // namespace JSC
-
-#endif // ENABLE(JAVA_BRIDGE)
-
-#endif // JNIUtilityPrivate_h
diff --git a/WebCore/bridge/jni/jsc/JavaClassJSC.cpp b/WebCore/bridge/jni/jsc/JavaClassJSC.cpp
deleted file mode 100644
index 43cdc96..0000000
--- a/WebCore/bridge/jni/jsc/JavaClassJSC.cpp
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "JavaClassJSC.h"
-
-#if ENABLE(JAVA_BRIDGE)
-
-#include "JNIUtility.h"
-#include "JSDOMWindow.h"
-#include <runtime/Identifier.h>
-#include <runtime/JSLock.h>
-
-using namespace JSC::Bindings;
-
-JavaClass::JavaClass(jobject anInstance)
-{
- jobject aClass = callJNIMethod<jobject>(anInstance, "getClass", "()Ljava/lang/Class;");
-
- if (!aClass) {
- LOG_ERROR("Unable to call getClass on instance %p", anInstance);
- m_name = fastStrDup("<Unknown>");
- return;
- }
-
- if (jstring className = (jstring)callJNIMethod<jobject>(aClass, "getName", "()Ljava/lang/String;")) {
- const char* classNameC = getCharactersFromJString(className);
- m_name = fastStrDup(classNameC);
- releaseCharactersForJString(className, classNameC);
- } else
- m_name = fastStrDup("<Unknown>");
-
- int i;
- JNIEnv* env = getJNIEnv();
-
- // Get the fields
- if (jarray fields = (jarray)callJNIMethod<jobject>(aClass, "getFields", "()[Ljava/lang/reflect/Field;")) {
- int numFields = env->GetArrayLength(fields);
- for (i = 0; i < numFields; i++) {
- jobject aJField = env->GetObjectArrayElement((jobjectArray)fields, i);
- JavaField* aField = new JavaField(env, aJField); // deleted in the JavaClass destructor
- {
- JSLock lock(SilenceAssertionsOnly);
- m_fields.set(((UString)aField->name()).impl(), aField);
- }
- env->DeleteLocalRef(aJField);
- }
- env->DeleteLocalRef(fields);
- }
-
- // Get the methods
- if (jarray methods = (jarray)callJNIMethod<jobject>(aClass, "getMethods", "()[Ljava/lang/reflect/Method;")) {
- int numMethods = env->GetArrayLength(methods);
- for (i = 0; i < numMethods; i++) {
- jobject aJMethod = env->GetObjectArrayElement((jobjectArray)methods, i);
- JavaMethod* aMethod = new JavaMethod(env, aJMethod); // deleted in the JavaClass destructor
- MethodList* methodList;
- {
- JSLock lock(SilenceAssertionsOnly);
-
- methodList = m_methods.get(((UString)aMethod->name()).impl());
- if (!methodList) {
- methodList = new MethodList();
- m_methods.set(((UString)aMethod->name()).impl(), methodList);
- }
- }
- methodList->append(aMethod);
- env->DeleteLocalRef(aJMethod);
- }
- env->DeleteLocalRef(methods);
- }
-
- env->DeleteLocalRef(aClass);
-}
-
-JavaClass::~JavaClass()
-{
- fastFree(const_cast<char*>(m_name));
-
- JSLock lock(SilenceAssertionsOnly);
-
- deleteAllValues(m_fields);
- m_fields.clear();
-
- MethodListMap::const_iterator end = m_methods.end();
- for (MethodListMap::const_iterator it = m_methods.begin(); it != end; ++it) {
- const MethodList* methodList = it->second;
- deleteAllValues(*methodList);
- delete methodList;
- }
- m_methods.clear();
-}
-
-MethodList JavaClass::methodsNamed(const Identifier& identifier, Instance*) const
-{
- MethodList* methodList = m_methods.get(identifier.ustring().impl());
-
- if (methodList)
- return *methodList;
- return MethodList();
-}
-
-Field* JavaClass::fieldNamed(const Identifier& identifier, Instance*) const
-{
- return m_fields.get(identifier.ustring().impl());
-}
-
-bool JavaClass::isNumberClass() const
-{
- return (!strcmp(m_name, "java.lang.Byte")
- || !strcmp(m_name, "java.lang.Short")
- || !strcmp(m_name, "java.lang.Integer")
- || !strcmp(m_name, "java.lang.Long")
- || !strcmp(m_name, "java.lang.Float")
- || !strcmp(m_name, "java.lang.Double"));
-}
-
-bool JavaClass::isBooleanClass() const
-{
- return !strcmp(m_name, "java.lang.Boolean");
-}
-
-bool JavaClass::isStringClass() const
-{
- return !strcmp(m_name, "java.lang.String");
-}
-
-#endif // ENABLE(JAVA_BRIDGE)
diff --git a/WebCore/bridge/jni/jsc/JavaClassJSC.h b/WebCore/bridge/jni/jsc/JavaClassJSC.h
deleted file mode 100644
index 0527162..0000000
--- a/WebCore/bridge/jni/jsc/JavaClassJSC.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2003, 2004, 2005, 2007, 2009, 2010 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef JavaClassJSC_h
-#define JavaClassJSC_h
-
-#if ENABLE(JAVA_BRIDGE)
-
-#include "JNIBridgeJSC.h"
-#include <wtf/HashMap.h>
-
-namespace JSC {
-
-namespace Bindings {
-
-class JavaClass : public Class {
-public:
- JavaClass(jobject);
- ~JavaClass();
-
- virtual MethodList methodsNamed(const Identifier&, Instance*) const;
- virtual Field* fieldNamed(const Identifier&, Instance*) const;
-
- bool isNumberClass() const;
- bool isBooleanClass() const;
- bool isStringClass() const;
-
-private:
- const char* m_name;
- FieldMap m_fields;
- MethodListMap m_methods;
-};
-
-} // namespace Bindings
-
-} // namespace JSC
-
-#endif // ENABLE(JAVA_BRIDGE)
-
-#endif // JavaClassJSC_h
diff --git a/WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp b/WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp
deleted file mode 100644
index 6332545..0000000
--- a/WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp
+++ /dev/null
@@ -1,384 +0,0 @@
-/*
- * Copyright (C) 2003, 2008, 2010 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "JavaInstanceJSC.h"
-
-#if ENABLE(JAVA_BRIDGE)
-
-#include "JavaRuntimeObject.h"
-#include "JNIBridgeJSC.h"
-#include "JNIUtility.h"
-#include "JNIUtilityPrivate.h"
-#include "JavaClassJSC.h"
-#include "Logging.h"
-#include "jni_jsobject.h"
-#include "runtime_method.h"
-#include "runtime_object.h"
-#include "runtime_root.h"
-#include <runtime/ArgList.h>
-#include <runtime/Error.h>
-#include <runtime/JSLock.h>
-
-using namespace JSC::Bindings;
-using namespace JSC;
-using namespace WebCore;
-
-JavaInstance::JavaInstance(jobject instance, PassRefPtr<RootObject> rootObject)
- : Instance(rootObject)
-{
- m_instance = new JObjectWrapper(instance);
- m_class = 0;
-}
-
-JavaInstance::~JavaInstance()
-{
- delete m_class;
-}
-
-RuntimeObject* JavaInstance::newRuntimeObject(ExecState* exec)
-{
- return new (exec) JavaRuntimeObject(exec, exec->lexicalGlobalObject(), this);
-}
-
-#define NUM_LOCAL_REFS 64
-
-void JavaInstance::virtualBegin()
-{
- getJNIEnv()->PushLocalFrame(NUM_LOCAL_REFS);
-}
-
-void JavaInstance::virtualEnd()
-{
- getJNIEnv()->PopLocalFrame(0);
-}
-
-Class* JavaInstance::getClass() const
-{
- if (!m_class)
- m_class = new JavaClass (m_instance->m_instance);
- return m_class;
-}
-
-JSValue JavaInstance::stringValue(ExecState* exec) const
-{
- JSLock lock(SilenceAssertionsOnly);
-
- jstring stringValue = (jstring)callJNIMethod<jobject>(m_instance->m_instance, "toString", "()Ljava/lang/String;");
-
- // Should throw a JS exception, rather than returning ""? - but better than a null dereference.
- if (!stringValue)
- return jsString(exec, UString());
-
- JNIEnv* env = getJNIEnv();
- const jchar* c = getUCharactersFromJStringInEnv(env, stringValue);
- UString u((const UChar*)c, (int)env->GetStringLength(stringValue));
- releaseUCharactersForJStringInEnv(env, stringValue, c);
- return jsString(exec, u);
-}
-
-JSValue JavaInstance::numberValue(ExecState*) const
-{
- jdouble doubleValue = callJNIMethod<jdouble>(m_instance->m_instance, "doubleValue", "()D");
- return jsNumber(doubleValue);
-}
-
-JSValue JavaInstance::booleanValue() const
-{
- jboolean booleanValue = callJNIMethod<jboolean>(m_instance->m_instance, "booleanValue", "()Z");
- return jsBoolean(booleanValue);
-}
-
-class JavaRuntimeMethod : public RuntimeMethod {
-public:
- JavaRuntimeMethod(ExecState* exec, JSGlobalObject* globalObject, const Identifier& name, Bindings::MethodList& list)
- : RuntimeMethod(exec, globalObject, name, list)
- {
- }
-
- virtual const ClassInfo* classInfo() const { return &s_info; }
-
- static const ClassInfo s_info;
-};
-
-const ClassInfo JavaRuntimeMethod::s_info = { "JavaRuntimeMethod", &RuntimeMethod::s_info, 0, 0 };
-
-JSValue JavaInstance::getMethod(ExecState* exec, const Identifier& propertyName)
-{
- MethodList methodList = getClass()->methodsNamed(propertyName, this);
- return new (exec) JavaRuntimeMethod(exec, exec->lexicalGlobalObject(), propertyName, methodList);
-}
-
-JSValue JavaInstance::invokeMethod(ExecState* exec, RuntimeMethod* runtimeMethod)
-{
- if (!asObject(runtimeMethod)->inherits(&JavaRuntimeMethod::s_info))
- return throwError(exec, createTypeError(exec, "Attempt to invoke non-Java method on Java object."));
-
- const MethodList& methodList = *runtimeMethod->methods();
-
- int i;
- int count = exec->argumentCount();
- JSValue resultValue;
- Method* method = 0;
- size_t numMethods = methodList.size();
-
- // Try to find a good match for the overloaded method. The
- // fundamental problem is that JavaScript doesn't have the
- // notion of method overloading and Java does. We could
- // get a bit more sophisticated and attempt to does some
- // type checking as we as checking the number of parameters.
- for (size_t methodIndex = 0; methodIndex < numMethods; methodIndex++) {
- Method* aMethod = methodList[methodIndex];
- if (aMethod->numParameters() == count) {
- method = aMethod;
- break;
- }
- }
- if (!method) {
- LOG(LiveConnect, "JavaInstance::invokeMethod unable to find an appropiate method");
- return jsUndefined();
- }
-
- const JavaMethod* jMethod = static_cast<const JavaMethod*>(method);
- LOG(LiveConnect, "JavaInstance::invokeMethod call %s %s on %p", UString(jMethod->name()).utf8().data(), jMethod->signature(), m_instance->m_instance);
-
- Vector<jvalue> jArgs(count);
-
- for (i = 0; i < count; i++) {
- JavaParameter* aParameter = jMethod->parameterAt(i);
- jArgs[i] = convertValueToJValue(exec, m_rootObject.get(), exec->argument(i), aParameter->getJNIType(), aParameter->type());
- LOG(LiveConnect, "JavaInstance::invokeMethod arg[%d] = %s", i, exec->argument(i).toString(exec).ascii().data());
- }
-
- jvalue result;
-
- // Try to use the JNI abstraction first, otherwise fall back to
- // normal JNI. The JNI dispatch abstraction allows the Java plugin
- // to dispatch the call on the appropriate internal VM thread.
- RootObject* rootObject = this->rootObject();
- if (!rootObject)
- return jsUndefined();
-
- bool handled = false;
- if (rootObject->nativeHandle()) {
- jobject obj = m_instance->m_instance;
- JSValue exceptionDescription;
- const char *callingURL = 0; // FIXME, need to propagate calling URL to Java
- handled = dispatchJNICall(exec, rootObject->nativeHandle(), obj, jMethod->isStatic(), jMethod->JNIReturnType(), jMethod->methodID(obj), jArgs.data(), result, callingURL, exceptionDescription);
- if (exceptionDescription) {
- throwError(exec, createError(exec, exceptionDescription.toString(exec)));
- return jsUndefined();
- }
- }
-
-// This is a deprecated code path which should not be required on Android.
-// Remove this guard once Bug 39476 is fixed.
-#if PLATFORM(ANDROID) || defined(BUILDING_ON_TIGER)
- if (!handled) {
- jobject obj = m_instance->m_instance;
- switch (jMethod->JNIReturnType()) {
- case void_type:
- callJNIMethodIDA<void>(obj, jMethod->methodID(obj), jArgs.data());
- break;
- case object_type:
- result.l = callJNIMethodIDA<jobject>(obj, jMethod->methodID(obj), jArgs.data());
- break;
- case boolean_type:
- result.z = callJNIMethodIDA<jboolean>(obj, jMethod->methodID(obj), jArgs.data());
- break;
- case byte_type:
- result.b = callJNIMethodIDA<jbyte>(obj, jMethod->methodID(obj), jArgs.data());
- break;
- case char_type:
- result.c = callJNIMethodIDA<jchar>(obj, jMethod->methodID(obj), jArgs.data());
- break;
- case short_type:
- result.s = callJNIMethodIDA<jshort>(obj, jMethod->methodID(obj), jArgs.data());
- break;
- case int_type:
- result.i = callJNIMethodIDA<jint>(obj, jMethod->methodID(obj), jArgs.data());
- break;
- case long_type:
- result.j = callJNIMethodIDA<jlong>(obj, jMethod->methodID(obj), jArgs.data());
- break;
- case float_type:
- result.f = callJNIMethodIDA<jfloat>(obj, jMethod->methodID(obj), jArgs.data());
- break;
- case double_type:
- result.d = callJNIMethodIDA<jdouble>(obj, jMethod->methodID(obj), jArgs.data());
- break;
- case array_type:
- case invalid_type:
- break;
- }
- }
-#endif
-
- switch (jMethod->JNIReturnType()) {
- case void_type:
- {
- resultValue = jsUndefined();
- }
- break;
-
- case object_type:
- {
- if (result.l) {
- // FIXME: array_type return type is handled below, can we actually get an array here?
- const char* arrayType = jMethod->returnType();
- if (arrayType[0] == '[')
- resultValue = JavaArray::convertJObjectToArray(exec, result.l, arrayType, rootObject);
- else {
- jobject classOfInstance = callJNIMethod<jobject>(result.l, "getClass", "()Ljava/lang/Class;");
- jstring className = static_cast<jstring>(callJNIMethod<jobject>(classOfInstance, "getName", "()Ljava/lang/String;"));
- if (!strcmp(JavaString(className).utf8(), "sun.plugin.javascript.webkit.JSObject")) {
- // Pull the nativeJSObject value from the Java instance. This is a pointer to the JSObject.
- JNIEnv* env = getJNIEnv();
- jfieldID fieldID = env->GetFieldID(static_cast<jclass>(classOfInstance), "nativeJSObject", "J");
- jlong nativeHandle = env->GetLongField(result.l, fieldID);
- // FIXME: Handling of undefined values differs between functions in JNIUtilityPrivate.cpp and those in those in jni_jsobject.mm,
- // and so it does between different versions of LiveConnect spec. There should not be multiple code paths to do the same work.
- if (nativeHandle == 1 /* UndefinedHandle */)
- return jsUndefined();
- return static_cast<JSObject*>(jlong_to_ptr(nativeHandle));
- } else
- return JavaInstance::create(result.l, rootObject)->createRuntimeObject(exec);
- }
- } else
- return jsUndefined();
- }
- break;
-
- case boolean_type:
- {
- resultValue = jsBoolean(result.z);
- }
- break;
-
- case byte_type:
- {
- resultValue = jsNumber(result.b);
- }
- break;
-
- case char_type:
- {
- resultValue = jsNumber(result.c);
- }
- break;
-
- case short_type:
- {
- resultValue = jsNumber(result.s);
- }
- break;
-
- case int_type:
- {
- resultValue = jsNumber(result.i);
- }
- break;
-
- case long_type:
- {
- resultValue = jsNumber(result.j);
- }
- break;
-
- case float_type:
- {
- resultValue = jsNumber(result.f);
- }
- break;
-
- case double_type:
- {
- resultValue = jsNumber(result.d);
- }
- break;
-
- case array_type:
- {
- const char* arrayType = jMethod->returnType();
- ASSERT(arrayType[0] == '[');
- resultValue = JavaArray::convertJObjectToArray(exec, result.l, arrayType, rootObject);
- }
- break;
-
- case invalid_type:
- {
- resultValue = jsUndefined();
- }
- break;
- }
-
- return resultValue;
-}
-
-JSValue JavaInstance::defaultValue(ExecState* exec, PreferredPrimitiveType hint) const
-{
- if (hint == PreferString)
- return stringValue(exec);
- if (hint == PreferNumber)
- return numberValue(exec);
- JavaClass* aClass = static_cast<JavaClass*>(getClass());
- if (aClass->isStringClass())
- return stringValue(exec);
- if (aClass->isNumberClass())
- return numberValue(exec);
- if (aClass->isBooleanClass())
- return booleanValue();
- return valueOf(exec);
-}
-
-JSValue JavaInstance::valueOf(ExecState* exec) const
-{
- return stringValue(exec);
-}
-
-JObjectWrapper::JObjectWrapper(jobject instance)
- : m_refCount(0)
-{
- ASSERT(instance);
-
- // Cache the JNIEnv used to get the global ref for this java instance.
- // It'll be used to delete the reference.
- m_env = getJNIEnv();
-
- m_instance = m_env->NewGlobalRef(instance);
-
- LOG(LiveConnect, "JObjectWrapper ctor new global ref %p for %p", m_instance, instance);
-
- if (!m_instance)
- LOG_ERROR("Could not get GlobalRef for %p", instance);
-}
-
-JObjectWrapper::~JObjectWrapper()
-{
- LOG(LiveConnect, "JObjectWrapper dtor deleting global ref %p", m_instance);
- m_env->DeleteGlobalRef(m_instance);
-}
-
-#endif // ENABLE(JAVA_BRIDGE)
diff --git a/WebCore/bridge/jni/jsc/JavaInstanceJSC.h b/WebCore/bridge/jni/jsc/JavaInstanceJSC.h
deleted file mode 100644
index dbfcf75..0000000
--- a/WebCore/bridge/jni/jsc/JavaInstanceJSC.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (C) 2003 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef JavaInstanceJSC_h
-#define JavaInstanceJSC_h
-
-#if ENABLE(JAVA_BRIDGE)
-
-#include "Bridge.h"
-#include "runtime_root.h"
-
-#include <JavaVM/jni.h>
-
-namespace JSC {
-
-namespace Bindings {
-
-class JavaClass;
-
-class JObjectWrapper {
-friend class RefPtr<JObjectWrapper>;
-friend class JavaArray;
-friend class JavaField;
-friend class JavaInstance;
-friend class JavaMethod;
-
-public:
- jobject instance() const { return m_instance; }
- void setInstance(jobject instance) { m_instance = instance; }
-
- void ref() { m_refCount++; }
- void deref()
- {
- if (!(--m_refCount))
- delete this;
- }
-
-protected:
- JObjectWrapper(jobject instance);
- ~JObjectWrapper();
-
- jobject m_instance;
-
-private:
- JNIEnv* m_env;
- unsigned int m_refCount;
-};
-
-class JavaInstance : public Instance {
-public:
- static PassRefPtr<JavaInstance> create(jobject instance, PassRefPtr<RootObject> rootObject)
- {
- return adoptRef(new JavaInstance(instance, rootObject));
- }
-
- ~JavaInstance();
-
- virtual Class* getClass() const;
-
- virtual JSValue valueOf(ExecState*) const;
- virtual JSValue defaultValue(ExecState*, PreferredPrimitiveType) const;
-
- virtual JSValue getMethod(ExecState* exec, const Identifier& propertyName);
- virtual JSValue invokeMethod(ExecState* exec, RuntimeMethod* method);
-
- jobject javaInstance() const { return m_instance->m_instance; }
-
- JSValue stringValue(ExecState*) const;
- JSValue numberValue(ExecState*) const;
- JSValue booleanValue() const;
-
-protected:
- JavaInstance(jobject instance, PassRefPtr<RootObject>);
-
- virtual RuntimeObject* newRuntimeObject(ExecState*);
-
- virtual void virtualBegin();
- virtual void virtualEnd();
-
- RefPtr<JObjectWrapper> m_instance;
- mutable JavaClass* m_class;
-};
-
-} // namespace Bindings
-
-} // namespace JSC
-
-#endif // ENABLE(JAVA_BRIDGE)
-
-#endif // JavaInstanceJSC_h
diff --git a/WebCore/bridge/jni/jsc/JavaRuntimeObject.cpp b/WebCore/bridge/jni/jsc/JavaRuntimeObject.cpp
deleted file mode 100644
index 6270f9f..0000000
--- a/WebCore/bridge/jni/jsc/JavaRuntimeObject.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-
-#include "JavaInstanceJSC.h"
-#include "JavaRuntimeObject.h"
-
-namespace JSC {
-namespace Bindings {
-
-const ClassInfo JavaRuntimeObject::s_info = { "JavaRuntimeObject", &RuntimeObject::s_info, 0, 0 };
-
-JavaRuntimeObject::JavaRuntimeObject(ExecState* exec, JSGlobalObject* globalObject, PassRefPtr<JavaInstance> instance)
- : RuntimeObject(exec, globalObject, instance)
-{
-}
-
-JavaRuntimeObject::~JavaRuntimeObject()
-{
-}
-
-JavaInstance* JavaRuntimeObject::getInternalJavaInstance() const
-{
- return static_cast<JavaInstance*>(getInternalInstance());
-}
-
-
-
-}
-}
diff --git a/WebCore/bridge/jni/jsc/JavaRuntimeObject.h b/WebCore/bridge/jni/jsc/JavaRuntimeObject.h
deleted file mode 100644
index 0e400f4..0000000
--- a/WebCore/bridge/jni/jsc/JavaRuntimeObject.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef JavaRuntimeObject_h
-#define JavaRuntimeObject_h
-
-#include "runtime_object.h"
-
-namespace JSC {
-namespace Bindings {
-
-class JavaInstance;
-
-class JavaRuntimeObject : public RuntimeObject {
-public:
- JavaRuntimeObject(ExecState*, JSGlobalObject*, PassRefPtr<JavaInstance>);
- virtual ~JavaRuntimeObject();
-
- JavaInstance* getInternalJavaInstance() const;
-
- static const ClassInfo s_info;
-
-private:
- virtual const ClassInfo* classInfo() const { return &s_info; }
-};
-
-}
-}
-
-#endif
diff --git a/WebCore/bridge/jni/jsc/JavaStringJSC.h b/WebCore/bridge/jni/jsc/JavaStringJSC.h
deleted file mode 100644
index cf575b2..0000000
--- a/WebCore/bridge/jni/jsc/JavaStringJSC.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (C) 2010 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef JavaStringJSC_h
-#define JavaStringJSC_h
-
-#include "JNIUtility.h"
-#include "JavaInstanceJSC.h"
-#include <runtime/JSLock.h>
-
-
-namespace JSC {
-
-namespace Bindings {
-
-class JavaStringImpl {
-public:
- ~JavaStringImpl()
- {
- JSLock lock(SilenceAssertionsOnly);
- m_impl = 0;
- }
-
- void init()
- {
- JSLock lock(SilenceAssertionsOnly);
- m_impl = UString().impl();
- }
-
- void init(JNIEnv* e, jstring s)
- {
- int size = e->GetStringLength(s);
- const jchar* uc = getUCharactersFromJStringInEnv(e, s);
- {
- JSLock lock(SilenceAssertionsOnly);
- m_impl = UString(reinterpret_cast<const UChar*>(uc), size).impl();
- }
- releaseUCharactersForJStringInEnv(e, s, uc);
- }
-
- const char* utf8() const
- {
- if (!m_utf8String.data()) {
- JSLock lock(SilenceAssertionsOnly);
- m_utf8String = UString(m_impl).utf8();
- }
- return m_utf8String.data();
- }
- const jchar* uchars() const { return (const jchar*)m_impl->characters(); }
- int length() const { return m_impl->length(); }
- UString uString() const { return UString(m_impl); }
-
-private:
- RefPtr<StringImpl> m_impl;
- mutable CString m_utf8String;
-};
-
-} // namespace Bindings
-
-} // namespace JSC
-
-#endif // JavaStringJSC_h
diff --git a/WebCore/bridge/jni/v8/JNIBridgeV8.cpp b/WebCore/bridge/jni/v8/JNIBridgeV8.cpp
deleted file mode 100644
index 35775dc..0000000
--- a/WebCore/bridge/jni/v8/JNIBridgeV8.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2010, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "JNIBridgeV8.h"
-
-using namespace JSC::Bindings;
-
-JavaField::JavaField(JNIEnv* env, jobject aField)
-{
- // Get field type
- jobject fieldType = callJNIMethod<jobject>(aField, "getType", "()Ljava/lang/Class;");
- jstring fieldTypeName = static_cast<jstring>(callJNIMethod<jobject>(fieldType, "getName", "()Ljava/lang/String;"));
- m_type = JavaString(env, fieldTypeName);
- m_JNIType = JNITypeFromClassName(m_type.utf8());
-
- // Get field name
- jstring fieldName = static_cast<jstring>(callJNIMethod<jobject>(aField, "getName", "()Ljava/lang/String;"));
- m_name = JavaString(env, fieldName);
-
- m_field = new JObjectWrapper(aField);
-}
diff --git a/WebCore/bridge/jni/v8/JNIBridgeV8.h b/WebCore/bridge/jni/v8/JNIBridgeV8.h
deleted file mode 100644
index 46cbd56..0000000
--- a/WebCore/bridge/jni/v8/JNIBridgeV8.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2010, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef JNIBridgeV8_h
-#define JNIBridgeV8_h
-
-#include "JNIBridge.h" // For JavaString
-#include "JavaInstanceV8.h" // For JObjectWrapper
-
-namespace JSC {
-
-namespace Bindings {
-
-class JavaField {
-public:
- JavaField(JNIEnv*, jobject aField);
-
- const JavaString& name() const { return m_name; }
- const char* type() const { return m_type.utf8(); }
-
- JNIType getJNIType() const { return m_JNIType; }
-
-private:
- JavaString m_name;
- JavaString m_type;
- JNIType m_JNIType;
- RefPtr<JObjectWrapper> m_field;
-};
-
-} // namespace Bindings
-
-} // namespace JSC
-
-#endif // JNIBridgeV8_h
diff --git a/WebCore/bridge/jni/v8/JNIUtilityPrivate.cpp b/WebCore/bridge/jni/v8/JNIUtilityPrivate.cpp
deleted file mode 100644
index f104e65..0000000
--- a/WebCore/bridge/jni/v8/JNIUtilityPrivate.cpp
+++ /dev/null
@@ -1,481 +0,0 @@
-/*
- * Copyright 2010, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "JNIUtilityPrivate.h"
-
-#include "JavaInstanceV8.h"
-#include "JavaNPObjectV8.h"
-#include "npruntime_impl.h"
-
-namespace JSC {
-
-namespace Bindings {
-
-jvalue convertNPVariantToJValue(NPVariant value, JNIType jniType, const char* javaClassName)
-{
- jvalue result;
- NPVariantType type = value.type;
-
- switch (jniType) {
- case array_type:
- {
- JNIEnv* env = getJNIEnv();
- jobject javaArray;
- NPObject* object = NPVARIANT_IS_OBJECT(value) ? NPVARIANT_TO_OBJECT(value) : 0;
- NPVariant npvLength;
- bool success = _NPN_GetProperty(0, object, _NPN_GetStringIdentifier("length"), &npvLength);
- if (!success) {
- // No length property so we don't know how many elements to put into the array.
- // Treat this as an error.
-#ifdef EMULATE_JSC_BINDINGS
- // JSC sends null for an array that is not an array of strings or basic types,
- // do this also in the unknown length case.
- memset(&result, 0, sizeof(jvalue));
-#else
- // Sending NULL as JSC does seems dangerous. (Imagine the java method that asks
- // for the length of the array it was passed). Here we send a 0 length array.
- jclass objectClass = env->FindClass("java/lang/Object");
- javaArray = env->NewObjectArray(0, objectClass, 0);
- env->DeleteLocalRef(objectClass);
-#endif
- break;
- }
-
- jsize length = 0;
- if (NPVARIANT_IS_INT32(npvLength))
- length = static_cast<jsize>(NPVARIANT_TO_INT32(npvLength));
- else if (NPVARIANT_IS_DOUBLE(npvLength))
- length = static_cast<jsize>(NPVARIANT_TO_DOUBLE(npvLength));
-
- if (!strcmp(javaClassName, "[Ljava.lang.String;")) {
- // Match JSC behavior by only allowing Object arrays if they are Strings.
- jclass stringClass = env->FindClass("java/lang/String");
- javaArray = env->NewObjectArray(length, stringClass, 0);
- for (jsize i = 0; i < length; i++) {
- NPVariant npvValue;
- _NPN_GetProperty(0, object, _NPN_GetIntIdentifier(i), &npvValue);
- if(NPVARIANT_IS_STRING(npvValue)) {
- NPString str = NPVARIANT_TO_STRING(npvValue);
- env->SetObjectArrayElement(static_cast<jobjectArray>(javaArray), i, env->NewStringUTF(str.UTF8Characters));
- }
- }
-
- env->DeleteLocalRef(stringClass);
- } else if (!strcmp(javaClassName, "[B")) {
- // array of bytes
- javaArray = env->NewByteArray(length);
- // Now iterate over each element and add to the array.
- for (jsize i = 0; i < length; i++) {
- NPVariant npvValue;
- _NPN_GetProperty(0, object, _NPN_GetIntIdentifier(i), &npvValue);
- jbyte bVal = 0;
- if (NPVARIANT_IS_INT32(npvValue)) {
- bVal = static_cast<jbyte>(NPVARIANT_TO_INT32(npvValue));
- } else if (NPVARIANT_IS_DOUBLE(npvValue)) {
- bVal = static_cast<jbyte>(NPVARIANT_TO_DOUBLE(npvValue));
- }
- env->SetByteArrayRegion(static_cast<jbyteArray>(javaArray), i, 1, &bVal);
- }
- } else if (!strcmp(javaClassName, "[C")) {
- // array of chars
- javaArray = env->NewCharArray(length);
- // Now iterate over each element and add to the array.
- for (jsize i = 0; i < length; i++) {
- NPVariant npvValue;
- _NPN_GetProperty(0, object, _NPN_GetIntIdentifier(i), &npvValue);
- jchar cVal = 0;
- if (NPVARIANT_IS_INT32(npvValue)) {
- cVal = static_cast<jchar>(NPVARIANT_TO_INT32(npvValue));
- } else if (NPVARIANT_IS_STRING(npvValue)) {
- NPString str = NPVARIANT_TO_STRING(npvValue);
- cVal = str.UTF8Characters[0];
- }
- env->SetCharArrayRegion(static_cast<jcharArray>(javaArray), i, 1, &cVal);
- }
- } else if (!strcmp(javaClassName, "[D")) {
- // array of doubles
- javaArray = env->NewDoubleArray(length);
- // Now iterate over each element and add to the array.
- for (jsize i = 0; i < length; i++) {
- NPVariant npvValue;
- _NPN_GetProperty(0, object, _NPN_GetIntIdentifier(i), &npvValue);
- if (NPVARIANT_IS_DOUBLE(npvValue)) {
- jdouble dVal = NPVARIANT_TO_DOUBLE(npvValue);
- env->SetDoubleArrayRegion(static_cast<jdoubleArray>(javaArray), i, 1, &dVal);
- }
- }
- } else if (!strcmp(javaClassName, "[F")) {
- // array of floats
- javaArray = env->NewFloatArray(length);
- // Now iterate over each element and add to the array.
- for (jsize i = 0; i < length; i++) {
- NPVariant npvValue;
- _NPN_GetProperty(0, object, _NPN_GetIntIdentifier(i), &npvValue);
- if (NPVARIANT_IS_DOUBLE(npvValue)) {
- jfloat fVal = static_cast<jfloat>(NPVARIANT_TO_DOUBLE(npvValue));
- env->SetFloatArrayRegion(static_cast<jfloatArray>(javaArray), i, 1, &fVal);
- }
- }
- } else if (!strcmp(javaClassName, "[I")) {
- // array of ints
- javaArray = env->NewIntArray(length);
- // Now iterate over each element and add to the array.
- for (jsize i = 0; i < length; i++) {
- NPVariant npvValue;
- _NPN_GetProperty(0, object, _NPN_GetIntIdentifier(i), &npvValue);
- jint iVal = 0;
- if (NPVARIANT_IS_INT32(npvValue)) {
- iVal = NPVARIANT_TO_INT32(npvValue);
- } else if (NPVARIANT_IS_DOUBLE(npvValue)) {
- iVal = static_cast<jint>(NPVARIANT_TO_DOUBLE(npvValue));
- }
- env->SetIntArrayRegion(static_cast<jintArray>(javaArray), i, 1, &iVal);
- }
- } else if (!strcmp(javaClassName, "[J")) {
- // array of longs
- javaArray = env->NewLongArray(length);
- // Now iterate over each element and add to the array.
- for (jsize i = 0; i < length; i++) {
- NPVariant npvValue;
- _NPN_GetProperty(0, object, _NPN_GetIntIdentifier(i), &npvValue);
- jlong jVal = 0;
- if (NPVARIANT_IS_INT32(npvValue)) {
- jVal = static_cast<jlong>(NPVARIANT_TO_INT32(npvValue));
- } else if (NPVARIANT_IS_DOUBLE(npvValue)) {
- jVal = static_cast<jlong>(NPVARIANT_TO_DOUBLE(npvValue));
- }
- env->SetLongArrayRegion(static_cast<jlongArray>(javaArray), i, 1, &jVal);
- }
- } else if (!strcmp(javaClassName, "[S")) {
- // array of shorts
- javaArray = env->NewShortArray(length);
- // Now iterate over each element and add to the array.
- for (jsize i = 0; i < length; i++) {
- NPVariant npvValue;
- _NPN_GetProperty(0, object, _NPN_GetIntIdentifier(i), &npvValue);
- jshort sVal = 0;
- if (NPVARIANT_IS_INT32(npvValue)) {
- sVal = static_cast<jshort>(NPVARIANT_TO_INT32(npvValue));
- } else if (NPVARIANT_IS_DOUBLE(npvValue)) {
- sVal = static_cast<jshort>(NPVARIANT_TO_DOUBLE(npvValue));
- }
- env->SetShortArrayRegion(static_cast<jshortArray>(javaArray), i, 1, &sVal);
- }
- } else if (!strcmp(javaClassName, "[Z")) {
- // array of booleans
- javaArray = env->NewBooleanArray(length);
- // Now iterate over each element and add to the array.
- for (jsize i = 0; i < length; i++) {
- NPVariant npvValue;
- _NPN_GetProperty(0, object, _NPN_GetIntIdentifier(i), &npvValue);
- if (NPVARIANT_IS_BOOLEAN(npvValue)) {
- jboolean zVal = NPVARIANT_TO_BOOLEAN(npvValue);
- env->SetBooleanArrayRegion(static_cast<jbooleanArray>(javaArray), i, 1, &zVal);
- }
- }
- } else {
-#ifdef EMULATE_JSC_BINDINGS
- // JSC sends null for an array that is not an array of strings or basic types.
- memset(&result, 0, sizeof(jvalue));
- break;
-#else
- // Sending NULL as JSC does seems dangerous. (Imagine the java method that asks
- // for the length of the array it was passed). Here we send a 0 length array.
- jclass objectClass = env->FindClass("java/lang/Object");
- javaArray = env->NewObjectArray(0, objectClass, 0);
- env->DeleteLocalRef(objectClass);
-#endif
- }
-
- result.l = javaArray;
- }
- break;
-
- case object_type:
- {
- JNIEnv* env = getJNIEnv();
- result.l = static_cast<jobject>(0);
- jobject javaString;
-
- // First see if we have a Java instance.
- if (type == NPVariantType_Object) {
- NPObject* objectImp = NPVARIANT_TO_OBJECT(value);
- if (JavaInstance* instance = ExtractJavaInstance(objectImp))
- result.l = instance->javaInstance();
- }
-
- // Now convert value to a string if the target type is a java.lang.string, and we're not
- // converting from a Null.
- if (!result.l && !strcmp(javaClassName, "java.lang.String")) {
-#ifdef CONVERT_NULL_TO_EMPTY_STRING
- if (type == NPVariantType_Null) {
- jchar buf[2];
- jobject javaString = env->functions->NewString(env, buf, 0);
- result.l = javaString;
- } else
-#else
- if (type == NPVariantType_String)
-#endif
- {
- NPString src = NPVARIANT_TO_STRING(value);
- javaString = env->NewStringUTF(src.UTF8Characters);
- result.l = javaString;
- } else if (type == NPVariantType_Int32) {
- jint src = NPVARIANT_TO_INT32(value);
- jclass integerClass = env->FindClass("java/lang/Integer");
- jmethodID toString = env->GetStaticMethodID(integerClass, "toString", "(I)Ljava/lang/String;");
- javaString = env->CallStaticObjectMethod(integerClass, toString, src);
- result.l = javaString;
- env->DeleteLocalRef(integerClass);
- } else if (type == NPVariantType_Bool) {
- jboolean src = NPVARIANT_TO_BOOLEAN(value);
- jclass booleanClass = env->FindClass("java/lang/Boolean");
- jmethodID toString = env->GetStaticMethodID(booleanClass, "toString", "(Z)Ljava/lang/String;");
- javaString = env->CallStaticObjectMethod(booleanClass, toString, src);
- result.l = javaString;
- env->DeleteLocalRef(booleanClass);
- } else if (type == NPVariantType_Double) {
- jdouble src = NPVARIANT_TO_DOUBLE(value);
- jclass doubleClass = env->FindClass("java/lang/Double");
- jmethodID toString = env->GetStaticMethodID(doubleClass, "toString", "(D)Ljava/lang/String;");
- javaString = env->CallStaticObjectMethod(doubleClass, toString, src);
- result.l = javaString;
- env->DeleteLocalRef(doubleClass);
- }
-#ifdef EMULATE_JSC_BINDINGS
- // For the undefined value, JSC sends the String "undefined". Feels to me like we
- // should send null in this case.
- else if (!NPVARIANT_IS_NULL(value)) {
- javaString = env->NewStringUTF("undefined");
- result.l = javaString;
- }
-#endif
- } else if (!result.l)
- memset(&result, 0, sizeof(jvalue)); // Handle it the same as a void case
- }
- break;
-
- case boolean_type:
- {
- if (type == NPVariantType_Bool)
- result.z = NPVARIANT_TO_BOOLEAN(value);
- else
- memset(&result, 0, sizeof(jvalue)); // as void case
- }
- break;
-
- case byte_type:
- {
- if (type == NPVariantType_Int32)
- result.b = static_cast<jbyte>(NPVARIANT_TO_INT32(value));
- else if (type == NPVariantType_Double)
- result.b = static_cast<jbyte>(NPVARIANT_TO_DOUBLE(value));
- else
- memset(&result, 0, sizeof(jvalue));
- }
- break;
-
- case char_type:
- {
- if (type == NPVariantType_Int32)
- result.c = static_cast<char>(NPVARIANT_TO_INT32(value));
-#ifndef EMULATE_JSC_BINDINGS
- // There is no char type in JavaScript - just strings 1 character
- // long. So just converting it to an int above doesn't work. Again,
- // we emulate the behavior for now for maximum compatability.
- else if (type == NPVariantType_String) {
- NPString str = NPVARIANT_TO_STRING(value);
- result.c = str.UTF8Characters[0];
- }
-#endif
- else
- memset(&result, 0, sizeof(jvalue));
- }
- break;
-
- case short_type:
- {
- if (type == NPVariantType_Int32)
- result.s = static_cast<jshort>(NPVARIANT_TO_INT32(value));
- else if (type == NPVariantType_Double)
- result.s = static_cast<jshort>(NPVARIANT_TO_DOUBLE(value));
- else
- memset(&result, 0, sizeof(jvalue));
- }
- break;
-
- case int_type:
- {
- if (type == NPVariantType_Int32)
- result.i = static_cast<jint>(NPVARIANT_TO_INT32(value));
- else if (type == NPVariantType_Double)
- result.i = static_cast<jint>(NPVARIANT_TO_DOUBLE(value));
- else
- memset(&result, 0, sizeof(jvalue));
- }
- break;
-
- case long_type:
- {
- if (type == NPVariantType_Int32)
- result.j = static_cast<jlong>(NPVARIANT_TO_INT32(value));
- else if (type == NPVariantType_Double)
- result.j = static_cast<jlong>(NPVARIANT_TO_DOUBLE(value));
- else
- memset(&result, 0, sizeof(jvalue));
- }
- break;
-
- case float_type:
- {
- if (type == NPVariantType_Int32)
- result.f = static_cast<jfloat>(NPVARIANT_TO_INT32(value));
- else if (type == NPVariantType_Double)
- result.f = static_cast<jfloat>(NPVARIANT_TO_DOUBLE(value));
- else
- memset(&result, 0, sizeof(jvalue));
- }
- break;
-
- case double_type:
- {
- if (type == NPVariantType_Int32)
- result.d = static_cast<jdouble>(NPVARIANT_TO_INT32(value));
- else if (type == NPVariantType_Double)
- result.d = static_cast<jdouble>(NPVARIANT_TO_DOUBLE(value));
- else
- memset(&result, 0, sizeof(jvalue));
- }
- break;
-
- case invalid_type:
- default:
- case void_type:
- {
- memset(&result, 0, sizeof(jvalue));
- }
- break;
- }
- return result;
-}
-
-
-void convertJValueToNPVariant(jvalue value, JNIType jniType, const char* javaTypeName, NPVariant* result)
-{
- switch (jniType) {
- case void_type:
- {
- VOID_TO_NPVARIANT(*result);
- }
- break;
-
- case object_type:
- {
- if (value.l) {
- if (!strcmp(javaTypeName, "java.lang.String")) {
- const char* v = getCharactersFromJString(static_cast<jstring>(value.l));
- // s is freed in NPN_ReleaseVariantValue (see npruntime.cpp)
- const char* s = strdup(v);
- releaseCharactersForJString(static_cast<jstring>(value.l), v);
- STRINGZ_TO_NPVARIANT(s, *result);
- } else
- OBJECT_TO_NPVARIANT(JavaInstanceToNPObject(new JavaInstance(value.l)), *result);
- } else
- VOID_TO_NPVARIANT(*result);
- }
- break;
-
- case boolean_type:
- {
- BOOLEAN_TO_NPVARIANT(value.z, *result);
- }
- break;
-
- case byte_type:
- {
- INT32_TO_NPVARIANT(value.b, *result);
- }
- break;
-
- case char_type:
- {
-#ifndef EMULATE_JSC_BINDINGS
- // There is no char type in JavaScript - just strings 1 character
- // long. So just converting it to an int above doesn't work. Again,
- // we emulate the behavior for now for maximum compatability.
- if (!strcmp(javaTypeName, "char")) {
- const char c = value.c;
- const char* v = strndup(&c, 1);
- STRINGZ_TO_NPVARIANT(v, *result);
- } else
-#endif
- INT32_TO_NPVARIANT(value.c, *result);
- }
- break;
-
- case short_type:
- {
- INT32_TO_NPVARIANT(value.s, *result);
- }
- break;
-
- case int_type:
- {
- INT32_TO_NPVARIANT(value.i, *result);
- }
- break;
-
- // TODO: Check if cast to double is needed.
- case long_type:
- {
- DOUBLE_TO_NPVARIANT(value.j, *result);
- }
- break;
-
- case float_type:
- {
- DOUBLE_TO_NPVARIANT(value.f, *result);
- }
- break;
-
- case double_type:
- {
- DOUBLE_TO_NPVARIANT(value.d, *result);
- }
- break;
-
- case invalid_type:
- default:
- {
- VOID_TO_NPVARIANT(*result);
- }
- break;
- }
-}
-
-} // end of namespace Bindings
-
-} // end of namespace JSC
diff --git a/WebCore/bridge/jni/v8/JNIUtilityPrivate.h b/WebCore/bridge/jni/v8/JNIUtilityPrivate.h
deleted file mode 100644
index da7a24c..0000000
--- a/WebCore/bridge/jni/v8/JNIUtilityPrivate.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2010, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef JNIUtilityPrivate_h
-#define JNIUtilityPrivate_h
-
-#include "JNIUtility.h"
-#include "npruntime.h"
-
-// FIXME: While fully implementing the bindings I noticed some differences between what
-// I wrote and seemed intuitive and what JSC does. Need to verify if my intuition is wrong
-// or there are bugs in the JSC bindings. For now, this macro makes the V8 bindings do the
-// same as the JSC bindings.
-#define EMULATE_JSC_BINDINGS 1
-
-namespace JSC {
-
-namespace Bindings {
-
-jvalue convertNPVariantToJValue(NPVariant, JNIType, const char* javaClassName);
-void convertJValueToNPVariant(jvalue, JNIType, const char* javaClassName, NPVariant*);
-
-} // namespace Bindings
-
-} // namespace JSC
-
-#endif // JNIUtilityPrivate_h
diff --git a/WebCore/bridge/jni/v8/JavaClassV8.cpp b/WebCore/bridge/jni/v8/JavaClassV8.cpp
deleted file mode 100644
index 1d381af..0000000
--- a/WebCore/bridge/jni/v8/JavaClassV8.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright 2010, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "JavaClassV8.h"
-
-using namespace JSC::Bindings;
-
-JavaClass::JavaClass(jobject anInstance)
-{
- jobject aClass = callJNIMethod<jobject>(anInstance, "getClass", "()Ljava/lang/Class;");
-
- if (!aClass) {
- fprintf(stderr, "%s: unable to call getClass on instance %p\n", __PRETTY_FUNCTION__, anInstance);
- return;
- }
-
- int i;
- JNIEnv* env = getJNIEnv();
-
- // Get the fields
- jarray fields = static_cast<jarray>(callJNIMethod<jobject>(aClass, "getFields", "()[Ljava/lang/reflect/Field;"));
- int numFields = env->GetArrayLength(fields);
- for (i = 0; i < numFields; i++) {
- jobject aJField = env->GetObjectArrayElement(static_cast<jobjectArray>(fields), i);
- JavaField* aField = new JavaField(env, aJField); // deleted in the JavaClass destructor
- {
- m_fields.set(aField->name().utf8(), aField);
- }
- env->DeleteLocalRef(aJField);
- }
-
- // Get the methods
- jarray methods = static_cast<jarray>(callJNIMethod<jobject>(aClass, "getMethods", "()[Ljava/lang/reflect/Method;"));
- int numMethods = env->GetArrayLength(methods);
- for (i = 0; i < numMethods; i++) {
- jobject aJMethod = env->GetObjectArrayElement(static_cast<jobjectArray>(methods), i);
- JavaMethod* aMethod = new JavaMethod(env, aJMethod); // deleted in the JavaClass destructor
- MethodList* methodList;
- {
- methodList = m_methods.get(aMethod->name().utf8());
- if (!methodList) {
- methodList = new MethodList();
- m_methods.set(aMethod->name().utf8(), methodList);
- }
- }
- methodList->append(aMethod);
- env->DeleteLocalRef(aJMethod);
- }
- env->DeleteLocalRef(fields);
- env->DeleteLocalRef(methods);
- env->DeleteLocalRef(aClass);
-}
-
-JavaClass::~JavaClass()
-{
- deleteAllValues(m_fields);
- m_fields.clear();
-
- MethodListMap::const_iterator end = m_methods.end();
- for (MethodListMap::const_iterator it = m_methods.begin(); it != end; ++it) {
- const MethodList* methodList = it->second;
- deleteAllValues(*methodList);
- delete methodList;
- }
- m_methods.clear();
-}
-
-MethodList JavaClass::methodsNamed(const char* name) const
-{
- MethodList* methodList = m_methods.get(name);
-
- if (methodList)
- return *methodList;
- return MethodList();
-}
-
-JavaField* JavaClass::fieldNamed(const char* name) const
-{
- return m_fields.get(name);
-}
diff --git a/WebCore/bridge/jni/v8/JavaClassV8.h b/WebCore/bridge/jni/v8/JavaClassV8.h
deleted file mode 100644
index 99137f1..0000000
--- a/WebCore/bridge/jni/v8/JavaClassV8.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2010, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef JavaClassV8_h
-#define JavaClassV8_h
-
-#include "JNIBridgeV8.h"
-#include "PlatformString.h"
-#include <wtf/HashMap.h>
-#include <wtf/Vector.h>
-#include <wtf/text/StringHash.h>
-
-namespace JSC {
-
-namespace Bindings {
-
-typedef Vector<JavaMethod*> MethodList;
-typedef HashMap<WTF::String, MethodList*> MethodListMap;
-typedef HashMap<WTF::String, JavaField*> FieldMap;
-
-class JavaClass {
-public:
- JavaClass(jobject anInstance);
- ~JavaClass();
-
- MethodList methodsNamed(const char* name) const;
- JavaField* fieldNamed(const char* name) const;
-
-private:
- MethodListMap m_methods;
- FieldMap m_fields;
-};
-
-} // namespace Bindings
-
-} // namespace JSC
-
-#endif // JavaClassV8_h
diff --git a/WebCore/bridge/jni/v8/JavaInstanceV8.cpp b/WebCore/bridge/jni/v8/JavaInstanceV8.cpp
deleted file mode 100644
index 27adca3..0000000
--- a/WebCore/bridge/jni/v8/JavaInstanceV8.cpp
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright (C) 2003, 2008, 2010 Apple Inc. All rights reserved.
- * Copyright 2010, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "JavaInstanceV8.h"
-
-#include "JNIBridge.h"
-#include "JNIUtilityPrivate.h"
-#include "JavaClassV8.h"
-
-#include <assert.h>
-
-using namespace JSC::Bindings;
-
-JavaInstance::JavaInstance(jobject instance)
-{
- m_instance = new JObjectWrapper(instance);
- m_class = 0;
-}
-
-JavaInstance::~JavaInstance()
-{
- m_instance = 0;
- delete m_class;
-}
-
-#define NUM_LOCAL_REFS 64
-
-void JavaInstance::virtualBegin()
-{
- getJNIEnv()->PushLocalFrame(NUM_LOCAL_REFS);
-}
-
-void JavaInstance::virtualEnd()
-{
- getJNIEnv()->PopLocalFrame(0);
-}
-
-JavaClass* JavaInstance::getClass() const
-{
- if (!m_class)
- m_class = new JavaClass(javaInstance());
- return m_class;
-}
-
-bool JavaInstance::invokeMethod(const char* methodName, const NPVariant* args, int count, NPVariant* resultValue)
-{
- VOID_TO_NPVARIANT(*resultValue);
-
- MethodList methodList = getClass()->methodsNamed(methodName);
-
- size_t numMethods = methodList.size();
-
- // Try to find a good match for the overloaded method. The
- // fundamental problem is that JavaScript doesn't have the
- // notion of method overloading and Java does. We could
- // get a bit more sophisticated and attempt to does some
- // type checking as we as checking the number of parameters.
- JavaMethod* aMethod;
- JavaMethod* method = 0;
- for (size_t methodIndex = 0; methodIndex < numMethods; methodIndex++) {
- aMethod = methodList[methodIndex];
- if (aMethod->numParameters() == count) {
- method = aMethod;
- break;
- }
- }
- if (!method)
- return false;
-
- const JavaMethod* jMethod = static_cast<const JavaMethod*>(method);
-
- jvalue* jArgs = 0;
- if (count > 0)
- jArgs = static_cast<jvalue*>(malloc(count * sizeof(jvalue)));
-
- for (int i = 0; i < count; i++) {
- JavaParameter* aParameter = jMethod->parameterAt(i);
- jArgs[i] = convertNPVariantToJValue(args[i], aParameter->getJNIType(), aParameter->type());
- }
-
- jvalue result;
-
- // The following code can be conditionally removed once we have a Tiger update that
- // contains the new Java plugin. It is needed for builds prior to Tiger.
- {
- jobject obj = javaInstance();
- switch (jMethod->JNIReturnType()) {
- case void_type:
- callJNIMethodIDA<void>(obj, jMethod->methodID(obj), jArgs);
- break;
- case object_type:
- result.l = callJNIMethodIDA<jobject>(obj, jMethod->methodID(obj), jArgs);
- break;
- case boolean_type:
- result.z = callJNIMethodIDA<jboolean>(obj, jMethod->methodID(obj), jArgs);
- break;
- case byte_type:
- result.b = callJNIMethodIDA<jbyte>(obj, jMethod->methodID(obj), jArgs);
- break;
- case char_type:
- result.c = callJNIMethodIDA<jchar>(obj, jMethod->methodID(obj), jArgs);
- break;
- case short_type:
- result.s = callJNIMethodIDA<jshort>(obj, jMethod->methodID(obj), jArgs);
- break;
- case int_type:
- result.i = callJNIMethodIDA<jint>(obj, jMethod->methodID(obj), jArgs);
- break;
-
- case long_type:
- result.j = callJNIMethodIDA<jlong>(obj, jMethod->methodID(obj), jArgs);
- break;
- case float_type:
- result.f = callJNIMethodIDA<jfloat>(obj, jMethod->methodID(obj), jArgs);
- break;
- case double_type:
- result.d = callJNIMethodIDA<jdouble>(obj, jMethod->methodID(obj), jArgs);
- break;
- case invalid_type:
- default:
- break;
- }
- }
-
- convertJValueToNPVariant(result, jMethod->JNIReturnType(), jMethod->returnType(), resultValue);
- free(jArgs);
-
- return true;
-}
-
-JObjectWrapper::JObjectWrapper(jobject instance)
- : m_refCount(0)
-{
- assert(instance);
-
- // Cache the JNIEnv used to get the global ref for this java instanace.
- // It'll be used to delete the reference.
- m_env = getJNIEnv();
-
- m_instance = m_env->NewGlobalRef(instance);
-
- if (!m_instance)
- fprintf(stderr, "%s: could not get GlobalRef for %p\n", __PRETTY_FUNCTION__, instance);
-}
-
-JObjectWrapper::~JObjectWrapper()
-{
- m_env->DeleteGlobalRef(m_instance);
-}
diff --git a/WebCore/bridge/jni/v8/JavaInstanceV8.h b/WebCore/bridge/jni/v8/JavaInstanceV8.h
deleted file mode 100644
index 4f009a5..0000000
--- a/WebCore/bridge/jni/v8/JavaInstanceV8.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2003, 2008, 2010 Apple Inc. All rights reserved.
- * Copyright 2010, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef JavaInstanceV8_h
-#define JavaInstanceV8_h
-
-#include "npruntime.h"
-
-#include <JavaVM/jni.h>
-#include <wtf/RefCounted.h>
-#include <wtf/RefPtr.h>
-
-using namespace WTF;
-
-namespace JSC {
-
-namespace Bindings {
-
-class JavaClass;
-
-class JObjectWrapper {
-friend class RefPtr<JObjectWrapper>;
-friend class JavaField;
-friend class JavaInstance;
-
-public:
- jobject instance() const { return m_instance; }
- void setInstance(jobject instance) { m_instance = instance; }
-
- void ref() { m_refCount++; }
- void deref()
- {
- if (!(--m_refCount))
- delete this;
- }
-
-protected:
- JObjectWrapper(jobject);
- ~JObjectWrapper();
-
- jobject m_instance;
-
-private:
- JNIEnv* m_env;
- unsigned int m_refCount;
-};
-
-class JavaInstance : public RefCounted<JavaInstance> {
-public:
- JavaInstance(jobject instance);
- virtual ~JavaInstance();
-
- JavaClass* getClass() const;
-
- bool invokeMethod(const char* name, const NPVariant* args, int argsCount, NPVariant* result);
-
- jobject javaInstance() const { return m_instance->m_instance; }
-
- // These functions are called before and after the main entry points into
- // the native implementations. They can be used to establish and cleanup
- // any needed state.
- void begin() { virtualBegin(); }
- void end() { virtualEnd(); }
-
-protected:
- RefPtr<JObjectWrapper> m_instance;
- mutable JavaClass* m_class;
-
- virtual void virtualBegin();
- virtual void virtualEnd();
-};
-
-} // namespace Bindings
-
-} // namespace JSC
-
-#endif // JavaInstanceV8_h
diff --git a/WebCore/bridge/jni/v8/JavaNPObjectV8.cpp b/WebCore/bridge/jni/v8/JavaNPObjectV8.cpp
deleted file mode 100644
index 3bb8e27..0000000
--- a/WebCore/bridge/jni/v8/JavaNPObjectV8.cpp
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright 2010, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-
-#include "config.h"
-#include "JavaNPObjectV8.h"
-
-#include "JNIUtilityPrivate.h"
-#include "JavaClassV8.h"
-#include "JavaInstanceV8.h"
-#include "npruntime_impl.h"
-
-namespace JSC {
-
-namespace Bindings {
-
-static NPObject* AllocJavaNPObject(NPP, NPClass*)
-{
- JavaNPObject* obj = static_cast<JavaNPObject*>(malloc(sizeof(JavaNPObject)));
- if (!obj)
- return 0;
- memset(obj, 0, sizeof(JavaNPObject));
- return reinterpret_cast<NPObject*>(obj);
-}
-
-static void FreeJavaNPObject(NPObject* npobj)
-{
- JavaNPObject* obj = reinterpret_cast<JavaNPObject*>(npobj);
- obj->m_instance = 0; // free does not call the destructor
- free(obj);
-}
-
-static NPClass JavaNPObjectClass = {
- NP_CLASS_STRUCT_VERSION,
- AllocJavaNPObject, // allocate,
- FreeJavaNPObject, // free,
- 0, // invalidate
- JavaNPObjectHasMethod,
- JavaNPObjectInvoke,
- 0, // invokeDefault,
- JavaNPObjectHasProperty,
- JavaNPObjectGetProperty,
- 0, // setProperty
- 0, // removeProperty
- 0, // enumerate
- 0 // construct
-};
-
-NPObject* JavaInstanceToNPObject(JavaInstance* instance)
-{
- JavaNPObject* object = reinterpret_cast<JavaNPObject*>(_NPN_CreateObject(0, &JavaNPObjectClass));
- object->m_instance = instance;
- return reinterpret_cast<NPObject*>(object);
-}
-
-// Returns null if obj is not a wrapper of JavaInstance
-JavaInstance* ExtractJavaInstance(NPObject* obj)
-{
- if (obj->_class == &JavaNPObjectClass)
- return reinterpret_cast<JavaNPObject*>(obj)->m_instance.get();
- return 0;
-}
-
-bool JavaNPObjectHasMethod(NPObject* obj, NPIdentifier identifier)
-{
- JavaInstance* instance = ExtractJavaInstance(obj);
- if (!instance)
- return false;
- NPUTF8* name = _NPN_UTF8FromIdentifier(identifier);
- if (!name)
- return false;
-
- instance->begin();
- bool result = (instance->getClass()->methodsNamed(name).size() > 0);
- instance->end();
-
- // TODO: use NPN_MemFree
- free(name);
-
- return result;
-}
-
-bool JavaNPObjectInvoke(NPObject* obj, NPIdentifier identifier, const NPVariant* args, uint32_t argCount, NPVariant* result)
-{
- JavaInstance* instance = ExtractJavaInstance(obj);
- if (!instance)
- return false;
- NPUTF8* name = _NPN_UTF8FromIdentifier(identifier);
- if (!name)
- return false;
-
- instance->begin();
- bool r = instance->invokeMethod(name, args, argCount, result);
- instance->end();
-
- // TODO: use NPN_MemFree
- free(name);
- return r;
-}
-
-bool JavaNPObjectHasProperty(NPObject* obj, NPIdentifier identifier)
-{
- JavaInstance* instance = ExtractJavaInstance(obj);
- if (!instance)
- return false;
- NPUTF8* name = _NPN_UTF8FromIdentifier(identifier);
- if (!name)
- return false;
- instance->begin();
- bool result = instance->getClass()->fieldNamed(name);
- instance->end();
- free(name);
- return result;
-}
-
-bool JavaNPObjectGetProperty(NPObject* obj, NPIdentifier identifier, NPVariant* result)
-{
- VOID_TO_NPVARIANT(*result);
- JavaInstance* instance = ExtractJavaInstance(obj);
- if (!instance)
- return false;
- NPUTF8* name = _NPN_UTF8FromIdentifier(identifier);
- if (!name)
- return false;
-
- instance->begin();
- JavaField* field = instance->getClass()->fieldNamed(name);
- instance->end();
- free(name); // TODO: use NPN_MemFree
-
- if (!field)
- return false;
-
-#ifdef EMULATE_JSC_BINDINGS
- // JSC does not seem to support returning object properties so we emulate that
- // behaviour here.
- jvalue value;
-#else
- // FIXME: Note here that field->type() refers to the Java class name and NOT the
- // JNI signature i.e. "int" as opposed to "I". This means that the field lookup
- // will fail.
- jvalue value = getJNIField(instance->javaInstance(),
- field->getJNIType(),
- field->name().utf8(),
- field->type());
-#endif
- convertJValueToNPVariant(value, field->getJNIType(), field->type(), result);
-
- return true;
-}
-
-} // namespace Bindings
-
-} // namespace JSC
diff --git a/WebCore/bridge/jni/v8/JavaNPObjectV8.h b/WebCore/bridge/jni/v8/JavaNPObjectV8.h
deleted file mode 100644
index 31b0ac7..0000000
--- a/WebCore/bridge/jni/v8/JavaNPObjectV8.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2010, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef JavaNPObjectV8_h
-#define JavaNPObjectV8_h
-
-#include "npruntime.h"
-#include <wtf/RefPtr.h>
-
-
-namespace JSC {
-
-namespace Bindings {
-
-class JavaInstance;
-
-struct JavaNPObject {
- NPObject m_object;
- RefPtr<JavaInstance> m_instance;
-};
-
-NPObject* JavaInstanceToNPObject(JavaInstance*);
-JavaInstance* ExtractJavaInstance(NPObject*);
-
-bool JavaNPObjectHasMethod(NPObject*, NPIdentifier name);
-bool JavaNPObjectInvoke(NPObject*, NPIdentifier methodName, const NPVariant* args, uint32_t argCount, NPVariant* result);
-bool JavaNPObjectHasProperty(NPObject*, NPIdentifier name);
-bool JavaNPObjectGetProperty(NPObject*, NPIdentifier name, NPVariant* result);
-
-} // namespace Bindings
-
-} // namespace JSC
-
-#endif // JavaNPObjectV8_h
diff --git a/WebCore/bridge/jni/v8/JavaStringV8.h b/WebCore/bridge/jni/v8/JavaStringV8.h
deleted file mode 100644
index 827d9f5..0000000
--- a/WebCore/bridge/jni/v8/JavaStringV8.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2010, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef JavaStringV8_h
-#define JavaStringV8_h
-
-#include "JNIUtility.h"
-#include <wtf/text/CString.h>
-
-
-namespace JSC {
-
-namespace Bindings {
-
-class JavaStringImpl {
-public:
- void init() {}
-
- void init(JNIEnv* e, jstring s)
- {
- int size = e->GetStringLength(s);
- const char* cs = getCharactersFromJStringInEnv(e, s);
- m_utf8String = WTF::CString(cs, size);
- releaseCharactersForJStringInEnv(e, s, cs);
- }
-
- const char* utf8() const { return m_utf8String.data(); }
- const jchar* uchars() const { return 0; } // Not implemented
- int length() const { return m_utf8String.length(); }
-
-private:
- WTF::CString m_utf8String;
-};
-
-} // namespace Bindings
-
-} // namespace JSC
-
-#endif // JavaStringV8_h
diff --git a/WebCore/bridge/jsc/BridgeJSC.cpp b/WebCore/bridge/jsc/BridgeJSC.cpp
deleted file mode 100644
index 49ffb2a..0000000
--- a/WebCore/bridge/jsc/BridgeJSC.cpp
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright (C) 2003, 2006, 2008 Apple Inc. All rights reserved.
- * Copyright 2010, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "BridgeJSC.h"
-
-#include "runtime_object.h"
-#include "runtime_root.h"
-#include <runtime/JSLock.h>
-
-#if PLATFORM(QT)
-#include "qt_instance.h"
-#endif
-
-namespace JSC {
-
-namespace Bindings {
-
-Array::Array(PassRefPtr<RootObject> rootObject)
- : m_rootObject(rootObject)
-{
- ASSERT(m_rootObject);
-}
-
-Array::~Array()
-{
-}
-
-Instance::Instance(PassRefPtr<RootObject> rootObject)
- : m_rootObject(rootObject)
-{
- ASSERT(m_rootObject);
-}
-
-Instance::~Instance()
-{
- ASSERT(!m_runtimeObject);
- ASSERT(!m_runtimeObject.hasDeadObject());
-}
-
-static KJSDidExecuteFunctionPtr s_didExecuteFunction;
-
-void Instance::setDidExecuteFunction(KJSDidExecuteFunctionPtr func)
-{
- s_didExecuteFunction = func;
-}
-
-KJSDidExecuteFunctionPtr Instance::didExecuteFunction()
-{
- return s_didExecuteFunction;
-}
-
-void Instance::begin()
-{
- virtualBegin();
-}
-
-void Instance::end()
-{
- virtualEnd();
-}
-
-JSObject* Instance::createRuntimeObject(ExecState* exec)
-{
- ASSERT(m_rootObject);
- ASSERT(m_rootObject->isValid());
- if (RuntimeObject* existingObject = m_runtimeObject.get())
- return existingObject;
-
- JSLock lock(SilenceAssertionsOnly);
- RuntimeObject* newObject = newRuntimeObject(exec);
- m_runtimeObject = newObject;
- m_rootObject->addRuntimeObject(newObject);
- return newObject;
-}
-
-RuntimeObject* Instance::newRuntimeObject(ExecState* exec)
-{
- JSLock lock(SilenceAssertionsOnly);
- return new (exec)RuntimeObject(exec, exec->lexicalGlobalObject(), this);
-}
-
-void Instance::willDestroyRuntimeObject(RuntimeObject* object)
-{
- ASSERT(m_rootObject);
- ASSERT(m_rootObject->isValid());
- m_rootObject->removeRuntimeObject(object);
- m_runtimeObject.clear(object);
-}
-
-void Instance::willInvalidateRuntimeObject(RuntimeObject* object)
-{
- ASSERT(object);
- m_runtimeObject.clear(object);
-}
-
-RootObject* Instance::rootObject() const
-{
- return m_rootObject && m_rootObject->isValid() ? m_rootObject.get() : 0;
-}
-
-} // namespace Bindings
-
-} // namespace JSC
diff --git a/WebCore/bridge/jsc/BridgeJSC.h b/WebCore/bridge/jsc/BridgeJSC.h
deleted file mode 100644
index 96974d9..0000000
--- a/WebCore/bridge/jsc/BridgeJSC.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (C) 2003, 2008, 2009 Apple Inc. All rights reserved.
- * Copyright 2010, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef BridgeJSC_h
-#define BridgeJSC_h
-
-#if USE(JSC)
-
-#include <runtime/JSString.h>
-#include <wtf/HashMap.h>
-#include <wtf/RefCounted.h>
-#include <wtf/Vector.h>
-
-namespace JSC {
-
-class ArgList;
-class Identifier;
-class JSGlobalObject;
-class PropertyNameArray;
-class RuntimeMethod;
-
-namespace Bindings {
-
-class Instance;
-class Method;
-class RootObject;
-class RuntimeObject;
-
-typedef Vector<Method*> MethodList;
-
-class Field {
-public:
- virtual JSValue valueFromInstance(ExecState*, const Instance*) const = 0;
- virtual void setValueToInstance(ExecState*, const Instance*, JSValue) const = 0;
-
- virtual ~Field() { }
-};
-
-class Class : public Noncopyable {
-public:
- virtual MethodList methodsNamed(const Identifier&, Instance*) const = 0;
- virtual Field* fieldNamed(const Identifier&, Instance*) const = 0;
- virtual JSValue fallbackObject(ExecState*, Instance*, const Identifier&) { return jsUndefined(); }
-
- virtual ~Class() { }
-};
-
-typedef void (*KJSDidExecuteFunctionPtr)(ExecState*, JSObject* rootObject);
-
-class Instance : public RefCounted<Instance> {
-public:
- Instance(PassRefPtr<RootObject>);
-
- static void setDidExecuteFunction(KJSDidExecuteFunctionPtr func);
- static KJSDidExecuteFunctionPtr didExecuteFunction();
-
- // These functions are called before and after the main entry points into
- // the native implementations. They can be used to establish and cleanup
- // any needed state.
- void begin();
- void end();
-
- virtual Class* getClass() const = 0;
- JSObject* createRuntimeObject(ExecState*);
- void willInvalidateRuntimeObject(RuntimeObject*);
- void willDestroyRuntimeObject(RuntimeObject*);
-
- // Returns false if the value was not set successfully.
- virtual bool setValueOfUndefinedField(ExecState*, const Identifier&, JSValue) { return false; }
-
- virtual JSValue getMethod(ExecState* exec, const Identifier& propertyName) = 0;
- virtual JSValue invokeMethod(ExecState*, RuntimeMethod* method) = 0;
-
- virtual bool supportsInvokeDefaultMethod() const { return false; }
- virtual JSValue invokeDefaultMethod(ExecState*) { return jsUndefined(); }
-
- virtual bool supportsConstruct() const { return false; }
- virtual JSValue invokeConstruct(ExecState*, const ArgList&) { return JSValue(); }
-
- virtual void getPropertyNames(ExecState*, PropertyNameArray&) { }
-
- virtual JSValue defaultValue(ExecState*, PreferredPrimitiveType) const = 0;
-
- virtual JSValue valueOf(ExecState* exec) const = 0;
-
- RootObject* rootObject() const;
-
- virtual ~Instance();
-
- virtual bool getOwnPropertySlot(JSObject*, ExecState*, const Identifier&, PropertySlot&) { return false; }
- virtual bool getOwnPropertyDescriptor(JSObject*, ExecState*, const Identifier&, PropertyDescriptor&) { return false; }
- virtual void put(JSObject*, ExecState*, const Identifier&, JSValue, PutPropertySlot&) { }
-
-protected:
- virtual void virtualBegin() { }
- virtual void virtualEnd() { }
- virtual RuntimeObject* newRuntimeObject(ExecState*);
-
- RefPtr<RootObject> m_rootObject;
-
-private:
- WeakGCPtr<RuntimeObject> m_runtimeObject;
-};
-
-class Array : public Noncopyable {
-public:
- Array(PassRefPtr<RootObject>);
- virtual ~Array();
-
- virtual void setValueAt(ExecState*, unsigned index, JSValue) const = 0;
- virtual JSValue valueAt(ExecState*, unsigned index) const = 0;
- virtual unsigned int getLength() const = 0;
-
-protected:
- RefPtr<RootObject> m_rootObject;
-};
-
-const char* signatureForParameters(const ArgList&);
-
-typedef HashMap<RefPtr<StringImpl>, MethodList*> MethodListMap;
-typedef HashMap<RefPtr<StringImpl>, Method*> MethodMap;
-typedef HashMap<RefPtr<StringImpl>, Field*> FieldMap;
-
-} // namespace Bindings
-
-} // namespace JSC
-
-#endif // USE(JSC)
-
-#endif
diff --git a/WebCore/bridge/make_testbindings b/WebCore/bridge/make_testbindings
deleted file mode 100755
index 1f528fe..0000000
--- a/WebCore/bridge/make_testbindings
+++ /dev/null
@@ -1,2 +0,0 @@
-cc -g -o testbindingsM testbindings.mm -I../kjs -F$SYMROOTS -framework JavaScriptCore -framework Foundation -lstdc++
-cc -g -o testbindingsC testbindings.cpp -I../kjs -F$SYMROOTS -framework JavaScriptCore -framework Foundation -lstdc++
diff --git a/WebCore/bridge/npapi.h b/WebCore/bridge/npapi.h
deleted file mode 100644
index 48e78c0..0000000
--- a/WebCore/bridge/npapi.h
+++ /dev/null
@@ -1,897 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is mozilla.org code.
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 1998
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#ifndef npapi_h_
-#define npapi_h_
-
-#if defined(__OS2__)
-#pragma pack(1)
-#endif
-
-#include "nptypes.h"
-
-#if defined(__OS2__) || defined(OS2)
-#ifndef XP_OS2
-#define XP_OS2 1
-#endif
-#endif
-
-#ifdef INCLUDE_JAVA
-#include "jri.h" /* Java Runtime Interface */
-#else
-#define jref void *
-#define JRIEnv void
-#endif
-
-#if defined(_WIN32) && !defined(__SYMBIAN32__)
-#include <windows.h>
-#ifndef XP_WIN
-#define XP_WIN 1
-#endif
-#endif
-
-#if defined(__SYMBIAN32__)
-#ifndef XP_SYMBIAN
-#define XP_SYMBIAN 1
-#endif
-#endif
-
-#if defined(__APPLE_CC__) && !defined(XP_UNIX)
-#ifndef XP_MACOSX
-#define XP_MACOSX 1
-#endif
-#endif
-
-#if defined(XP_MACOSX) && defined(__LP64__)
-#define NP_NO_QUICKDRAW
-#define NP_NO_CARBON
-#endif
-
-#if defined(XP_MACOSX)
-#include <ApplicationServices/ApplicationServices.h>
-#include <OpenGL/OpenGL.h>
-#ifndef NP_NO_CARBON
-#include <Carbon/Carbon.h>
-#endif
-#endif
-
-#if defined(XP_UNIX)
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <stdio.h>
-#endif
-
-#if defined(XP_SYMBIAN)
-#include <QEvent>
-#include <QRegion>
-#endif
-
-/*----------------------------------------------------------------------*/
-/* Plugin Version Constants */
-/*----------------------------------------------------------------------*/
-
-#define NP_VERSION_MAJOR 0
-#define NP_VERSION_MINOR 24
-
-
-/* The OS/2 version of Netscape uses RC_DATA to define the
- mime types, file extensions, etc that are required.
- Use a vertical bar to separate types, end types with \0.
- FileVersion and ProductVersion are 32bit ints, all other
- entries are strings that MUST be terminated with a \0.
-
-AN EXAMPLE:
-
-RCDATA NP_INFO_ProductVersion { 1,0,0,1,}
-
-RCDATA NP_INFO_MIMEType { "video/x-video|",
- "video/x-flick\0" }
-RCDATA NP_INFO_FileExtents { "avi|",
- "flc\0" }
-RCDATA NP_INFO_FileOpenName{ "MMOS2 video player(*.avi)|",
- "MMOS2 Flc/Fli player(*.flc)\0" }
-
-RCDATA NP_INFO_FileVersion { 1,0,0,1 }
-RCDATA NP_INFO_CompanyName { "Netscape Communications\0" }
-RCDATA NP_INFO_FileDescription { "NPAVI32 Extension DLL\0"
-RCDATA NP_INFO_InternalName { "NPAVI32\0" )
-RCDATA NP_INFO_LegalCopyright { "Copyright Netscape Communications \251 1996\0"
-RCDATA NP_INFO_OriginalFilename { "NVAPI32.DLL" }
-RCDATA NP_INFO_ProductName { "NPAVI32 Dynamic Link Library\0" }
-*/
-/* RC_DATA types for version info - required */
-#define NP_INFO_ProductVersion 1
-#define NP_INFO_MIMEType 2
-#define NP_INFO_FileOpenName 3
-#define NP_INFO_FileExtents 4
-/* RC_DATA types for version info - used if found */
-#define NP_INFO_FileDescription 5
-#define NP_INFO_ProductName 6
-/* RC_DATA types for version info - optional */
-#define NP_INFO_CompanyName 7
-#define NP_INFO_FileVersion 8
-#define NP_INFO_InternalName 9
-#define NP_INFO_LegalCopyright 10
-#define NP_INFO_OriginalFilename 11
-
-#ifndef RC_INVOKED
-
-/*----------------------------------------------------------------------*/
-/* Definition of Basic Types */
-/*----------------------------------------------------------------------*/
-
-#ifndef FALSE
-#define FALSE (0)
-#endif
-#ifndef TRUE
-#define TRUE (1)
-#endif
-#ifndef NULL
-#define NULL (0L)
-#endif
-
-typedef unsigned char NPBool;
-typedef int16_t NPError;
-typedef int16_t NPReason;
-typedef char* NPMIMEType;
-
-/*----------------------------------------------------------------------*/
-/* Structures and definitions */
-/*----------------------------------------------------------------------*/
-
-#if !defined(__LP64__)
-#if defined(XP_MACOSX)
-#pragma options align=mac68k
-#endif
-#endif /* __LP64__ */
-
-/*
- * NPP is a plug-in's opaque instance handle
- */
-typedef struct _NPP
-{
- void* pdata; /* plug-in private data */
- void* ndata; /* netscape private data */
-} NPP_t;
-
-typedef NPP_t* NPP;
-
-typedef struct _NPStream
-{
- void* pdata; /* plug-in private data */
- void* ndata; /* netscape private data */
- const char* url;
- uint32_t end;
- uint32_t lastmodified;
- void* notifyData;
- const char* headers; /* Response headers from host.
- * Exists only for >= NPVERS_HAS_RESPONSE_HEADERS.
- * Used for HTTP only; NULL for non-HTTP.
- * Available from NPP_NewStream onwards.
- * Plugin should copy this data before storing it.
- * Includes HTTP status line and all headers,
- * preferably verbatim as received from server,
- * headers formatted as in HTTP ("Header: Value"),
- * and newlines (\n, NOT \r\n) separating lines.
- * Terminated by \n\0 (NOT \n\n\0). */
-} NPStream;
-
-typedef struct _NPByteRange
-{
- int32_t offset; /* negative offset means from the end */
- uint32_t length;
- struct _NPByteRange* next;
-} NPByteRange;
-
-typedef struct _NPSavedData
-{
- int32_t len;
- void* buf;
-} NPSavedData;
-
-typedef struct _NPRect
-{
- uint16_t top;
- uint16_t left;
- uint16_t bottom;
- uint16_t right;
-} NPRect;
-
-typedef struct _NPSize
-{
- int32_t width;
- int32_t height;
-} NPSize;
-
-/* Return values for NPP_HandleEvent */
-#define kNPEventNotHandled 0
-#define kNPEventHandled 1
-/* Exact meaning must be spec'd in event model. */
-#define kNPEventStartIME 2
-
-#if defined(XP_UNIX)
-/*
- * Unix specific structures and definitions
- */
-
-/*
- * Callback Structures.
- *
- * These are used to pass additional platform specific information.
- */
-enum {
- NP_SETWINDOW = 1,
- NP_PRINT
-};
-
-typedef struct
-{
- int32_t type;
-} NPAnyCallbackStruct;
-
-typedef struct
-{
- int32_t type;
- Display* display;
- Visual* visual;
- Colormap colormap;
- unsigned int depth;
-} NPSetWindowCallbackStruct;
-
-typedef struct
-{
- int32_t type;
- FILE* fp;
-} NPPrintCallbackStruct;
-
-#endif /* XP_UNIX */
-
-#if defined(XP_MACOSX)
-typedef enum {
-#ifndef NP_NO_QUICKDRAW
- NPDrawingModelQuickDraw = 0,
-#endif
- NPDrawingModelCoreGraphics = 1,
- NPDrawingModelOpenGL = 2,
- NPDrawingModelCoreAnimation = 3
-} NPDrawingModel;
-
-typedef enum {
-#ifndef NP_NO_CARBON
- NPEventModelCarbon = 0,
-#endif
- NPEventModelCocoa = 1
-} NPEventModel;
-#endif
-
-/*
- * The following masks are applied on certain platforms to NPNV and
- * NPPV selectors that pass around pointers to COM interfaces. Newer
- * compilers on some platforms may generate vtables that are not
- * compatible with older compilers. To prevent older plugins from
- * not understanding a new browser's ABI, these masks change the
- * values of those selectors on those platforms. To remain backwards
- * compatible with different versions of the browser, plugins can
- * use these masks to dynamically determine and use the correct C++
- * ABI that the browser is expecting. This does not apply to Windows
- * as Microsoft's COM ABI will likely not change.
- */
-
-#define NP_ABI_GCC3_MASK 0x10000000
-/*
- * gcc 3.x generated vtables on UNIX and OSX are incompatible with
- * previous compilers.
- */
-#if (defined(XP_UNIX) && defined(__GNUC__) && (__GNUC__ >= 3))
-#define _NP_ABI_MIXIN_FOR_GCC3 NP_ABI_GCC3_MASK
-#else
-#define _NP_ABI_MIXIN_FOR_GCC3 0
-#endif
-
-#if defined(XP_MACOSX)
-#define NP_ABI_MACHO_MASK 0x01000000
-#define _NP_ABI_MIXIN_FOR_MACHO NP_ABI_MACHO_MASK
-#else
-#define _NP_ABI_MIXIN_FOR_MACHO 0
-#endif
-
-#define NP_ABI_MASK (_NP_ABI_MIXIN_FOR_GCC3 | _NP_ABI_MIXIN_FOR_MACHO)
-
-/*
- * List of variable names for which NPP_GetValue shall be implemented
- */
-typedef enum {
- NPPVpluginNameString = 1,
- NPPVpluginDescriptionString,
- NPPVpluginWindowBool,
- NPPVpluginTransparentBool,
- NPPVjavaClass, /* Not implemented in WebKit */
- NPPVpluginWindowSize, /* Not implemented in WebKit */
- NPPVpluginTimerInterval, /* Not implemented in WebKit */
- NPPVpluginScriptableInstance = (10 | NP_ABI_MASK), /* Not implemented in WebKit */
- NPPVpluginScriptableIID = 11, /* Not implemented in WebKit */
- NPPVjavascriptPushCallerBool = 12, /* Not implemented in WebKit */
- NPPVpluginKeepLibraryInMemory = 13, /* Not implemented in WebKit */
- NPPVpluginNeedsXEmbed = 14, /* Not implemented in WebKit */
-
- /* Get the NPObject for scripting the plugin. Introduced in NPAPI minor version 14.
- */
- NPPVpluginScriptableNPObject = 15,
-
- /* Get the plugin value (as \0-terminated UTF-8 string data) for
- * form submission if the plugin is part of a form. Use
- * NPN_MemAlloc() to allocate memory for the string data. Introduced
- * in NPAPI minor version 15.
- */
- NPPVformValue = 16, /* Not implemented in WebKit */
-
- NPPVpluginUrlRequestsDisplayedBool = 17, /* Not implemented in WebKit */
-
- /* Checks if the plugin is interested in receiving the http body of
- * all http requests (including failed ones, http status != 200).
- */
- NPPVpluginWantsAllNetworkStreams = 18,
-
- /* Browsers can retrieve a native ATK accessibility plug ID via this variable. */
- NPPVpluginNativeAccessibleAtkPlugId = 19,
-
- /* Checks to see if the plug-in would like the browser to load the "src" attribute. */
- NPPVpluginCancelSrcStream = 20
-
-#if defined(XP_MACOSX)
- /* Used for negotiating drawing models */
- , NPPVpluginDrawingModel = 1000
- /* Used for negotiating event models */
- , NPPVpluginEventModel = 1001
- /* In the NPDrawingModelCoreAnimation drawing model, the browser asks the plug-in for a Core Animation layer. */
- , NPPVpluginCoreAnimationLayer = 1003
-#endif
-
-#ifdef ANDROID
- /* Used when the plugin returns 0 from NPN_WriteReady and wishes the browser
- * to wait a certain amount of millis before calling NPN_WriteReady again.
- */
- , NPPDataDeliveryDelayMs = 100
-
- // TODO(reed): upstream
- , NPPFakeValueToForce32Bits = 0x7FFFFFFF
-#endif
-
-#if defined(MOZ_PLATFORM_MAEMO) && (MOZ_PLATFORM_MAEMO >= 5)
- , NPPVpluginWindowlessLocalBool = 2002
-#endif
-} NPPVariable;
-
-/*
- * List of variable names for which NPN_GetValue should be implemented.
- */
-typedef enum {
- NPNVxDisplay = 1,
- NPNVxtAppContext,
- NPNVnetscapeWindow,
- NPNVjavascriptEnabledBool,
- NPNVasdEnabledBool,
- NPNVisOfflineBool,
-
- NPNVserviceManager = (10 | NP_ABI_MASK), /* Not implemented in WebKit */
- NPNVDOMElement = (11 | NP_ABI_MASK), /* Not implemented in WebKit */
- NPNVDOMWindow = (12 | NP_ABI_MASK), /* Not implemented in WebKit */
- NPNVToolkit = (13 | NP_ABI_MASK), /* Not implemented in WebKit */
- NPNVSupportsXEmbedBool = 14, /* Not implemented in WebKit */
-
- /* Get the NPObject wrapper for the browser window. */
- NPNVWindowNPObject = 15,
-
- /* Get the NPObject wrapper for the plugins DOM element. */
- NPNVPluginElementNPObject = 16,
-
- NPNVSupportsWindowless = 17,
-
- NPNVprivateModeBool = 18
-
-#if defined(XP_MACOSX)
- /* Used for negotiating drawing models */
- , NPNVpluginDrawingModel = 1000
-#ifndef NP_NO_QUICKDRAW
- , NPNVsupportsQuickDrawBool = 2000
-#endif
- , NPNVsupportsCoreGraphicsBool = 2001
- , NPNVsupportsOpenGLBool = 2002
- , NPNVsupportsCoreAnimationBool = 2003
-#ifndef NP_NO_CARBON
- , NPNVsupportsCarbonBool = 3000 /* TRUE if the browser supports the Carbon event model */
-#endif
- , NPNVsupportsCocoaBool = 3001 /* TRUE if the browser supports the Cocoa event model */
-#endif /* XP_MACOSX */
-
-#ifdef ANDROID
- , NPNFakeValueToForce32Bits = 0x7FFFFFFF
-#endif
-
-#if defined(MOZ_PLATFORM_MAEMO) && (MOZ_PLATFORM_MAEMO >= 5)
- , NPNVSupportsWindowlessLocal = 2002
-#endif
-} NPNVariable;
-
-typedef enum {
- NPNURLVCookie = 501,
- NPNURLVProxy
-} NPNURLVariable;
-
-/*
- * The type of Toolkit the widgets use
- */
-typedef enum {
- NPNVGtk12 = 1,
- NPNVGtk2
-} NPNToolkitType;
-
-/*
- * The type of a NPWindow - it specifies the type of the data structure
- * returned in the window field.
- */
-typedef enum {
- NPWindowTypeWindow = 1,
- NPWindowTypeDrawable
-} NPWindowType;
-
-typedef struct _NPWindow
-{
- void* window; /* Platform specific window handle */
- /* OS/2: x - Position of bottom left corner */
- /* OS/2: y - relative to visible netscape window */
- int32_t x; /* Position of top left corner relative */
- int32_t y; /* to a netscape page. */
- uint32_t width; /* Maximum window size */
- uint32_t height;
- NPRect clipRect; /* Clipping rectangle in port coordinates */
-#if defined(XP_UNIX) || defined(XP_SYMBIAN)
- void * ws_info; /* Platform-dependent additonal data */
-#endif /* XP_UNIX || XP_SYMBIAN */
- NPWindowType type; /* Is this a window or a drawable? */
-} NPWindow;
-
-typedef struct _NPImageExpose
-{
- char* data; /* image pointer */
- int32_t stride; /* Stride of data image pointer */
- int32_t depth; /* Depth of image pointer */
- int32_t x; /* Expose x */
- int32_t y; /* Expose y */
- uint32_t width; /* Expose width */
- uint32_t height; /* Expose height */
- NPSize dataSize; /* Data buffer size */
- float translateX; /* translate X matrix value */
- float translateY; /* translate Y matrix value */
- float scaleX; /* scale X matrix value */
- float scaleY; /* scale Y matrix value */
-} NPImageExpose;
-
-typedef struct _NPFullPrint
-{
- NPBool pluginPrinted;/* Set TRUE if plugin handled fullscreen printing */
- NPBool printOne; /* TRUE if plugin should print one copy to default
- printer */
- void* platformPrint; /* Platform-specific printing info */
-} NPFullPrint;
-
-typedef struct _NPEmbedPrint
-{
- NPWindow window;
- void* platformPrint; /* Platform-specific printing info */
-} NPEmbedPrint;
-
-typedef struct _NPPrint
-{
- uint16_t mode; /* NP_FULL or NP_EMBED */
- union
- {
- NPFullPrint fullPrint; /* if mode is NP_FULL */
- NPEmbedPrint embedPrint; /* if mode is NP_EMBED */
- } print;
-} NPPrint;
-
-#if defined(XP_MACOSX)
-#ifndef NP_NO_CARBON
-typedef EventRecord NPEvent;
-#else
-typedef void* NPEvent;
-#endif
-#elif defined(XP_SYMBIAN)
-typedef QEvent NPEvent;
-#elif defined(XP_WIN)
-typedef struct _NPEvent
-{
- uint16_t event;
- uintptr_t wParam;
- uintptr_t lParam;
-} NPEvent;
-#elif defined(XP_OS2)
-typedef struct _NPEvent
-{
- uint32_t event;
- uint32_t wParam;
- uint32_t lParam;
-} NPEvent;
-#elif defined(XP_UNIX)
-typedef XEvent NPEvent;
-#else
-typedef void* NPEvent;
-#endif
-
-#if defined(XP_MACOSX)
-typedef void* NPRegion;
-#ifndef NP_NO_QUICKDRAW
-typedef RgnHandle NPQDRegion;
-#endif
-typedef CGPathRef NPCGRegion;
-#elif defined(XP_WIN)
-typedef HRGN NPRegion;
-#elif defined(XP_UNIX)
-typedef Region NPRegion;
-#elif defined(XP_SYMBIAN)
-typedef QRegion* NPRegion;
-#else
-typedef void *NPRegion;
-#endif
-
-typedef struct _NPNSString NPNSString;
-typedef struct _NPNSWindow NPNSWindow;
-typedef struct _NPNSMenu NPNSMenu;
-
-#if defined(XP_MACOSX)
-typedef NPNSMenu NPMenu;
-#else
-typedef void *NPMenu;
-#endif
-
-typedef enum {
- NPCoordinateSpacePlugin = 1,
- NPCoordinateSpaceWindow,
- NPCoordinateSpaceFlippedWindow,
- NPCoordinateSpaceScreen,
- NPCoordinateSpaceFlippedScreen
-} NPCoordinateSpace;
-
-#if defined(XP_MACOSX)
-
-#ifndef NP_NO_QUICKDRAW
-typedef struct NP_Port
-{
- CGrafPtr port;
- int32_t portx; /* position inside the topmost window */
- int32_t porty;
-} NP_Port;
-#endif /* NP_NO_QUICKDRAW */
-
-/*
- * NP_CGContext is the type of the NPWindow's 'window' when the plugin specifies NPDrawingModelCoreGraphics
- * as its drawing model.
- */
-
-typedef struct NP_CGContext
-{
- CGContextRef context;
-#ifdef NP_NO_CARBON
- NPNSWindow *window;
-#else
- void *window; /* A WindowRef or NULL for the Cocoa event model. */
-#endif
-} NP_CGContext;
-
-/*
- * NP_GLContext is the type of the NPWindow's 'window' when the plugin specifies NPDrawingModelOpenGL as its
- * drawing model.
- */
-
-typedef struct NP_GLContext
-{
- CGLContextObj context;
-#ifdef NP_NO_CARBON
- NPNSWindow *window;
-#else
- void *window; /* Can be either an NSWindow or a WindowRef depending on the event model */
-#endif
-} NP_GLContext;
-
-typedef enum {
- NPCocoaEventDrawRect = 1,
- NPCocoaEventMouseDown,
- NPCocoaEventMouseUp,
- NPCocoaEventMouseMoved,
- NPCocoaEventMouseEntered,
- NPCocoaEventMouseExited,
- NPCocoaEventMouseDragged,
- NPCocoaEventKeyDown,
- NPCocoaEventKeyUp,
- NPCocoaEventFlagsChanged,
- NPCocoaEventFocusChanged,
- NPCocoaEventWindowFocusChanged,
- NPCocoaEventScrollWheel,
- NPCocoaEventTextInput
-} NPCocoaEventType;
-
-typedef struct _NPCocoaEvent {
- NPCocoaEventType type;
- uint32_t version;
- union {
- struct {
- uint32_t modifierFlags;
- double pluginX;
- double pluginY;
- int32_t buttonNumber;
- int32_t clickCount;
- double deltaX;
- double deltaY;
- double deltaZ;
- } mouse;
- struct {
- uint32_t modifierFlags;
- NPNSString *characters;
- NPNSString *charactersIgnoringModifiers;
- NPBool isARepeat;
- uint16_t keyCode;
- } key;
- struct {
- CGContextRef context;
- double x;
- double y;
- double width;
- double height;
- } draw;
- struct {
- NPBool hasFocus;
- } focus;
- struct {
- NPNSString *text;
- } text;
- } data;
-} NPCocoaEvent;
-
-#ifndef NP_NO_CARBON
-/* Non-standard event types that can be passed to HandleEvent */
-enum NPEventType {
- NPEventType_GetFocusEvent = (osEvt + 16),
- NPEventType_LoseFocusEvent,
- NPEventType_AdjustCursorEvent,
- NPEventType_MenuCommandEvent,
- NPEventType_ClippingChangedEvent,
- NPEventType_ScrollingBeginsEvent = 1000,
- NPEventType_ScrollingEndsEvent
-};
-#endif /* NP_NO_CARBON */
-
-#endif /* XP_MACOSX */
-
-/*
- * Values for mode passed to NPP_New:
- */
-#define NP_EMBED 1
-#define NP_FULL 2
-
-/*
- * Values for stream type passed to NPP_NewStream:
- */
-#define NP_NORMAL 1
-#define NP_SEEK 2
-#define NP_ASFILE 3
-#define NP_ASFILEONLY 4
-
-#define NP_MAXREADY (((unsigned)(~0)<<1)>>1)
-
-#if !defined(__LP64__)
-#if defined(XP_MACOSX)
-#pragma options align=reset
-#endif
-#endif /* __LP64__ */
-
-/*----------------------------------------------------------------------*/
-/* Error and Reason Code definitions */
-/*----------------------------------------------------------------------*/
-
-/*
- * Values of type NPError:
- */
-#define NPERR_BASE 0
-#define NPERR_NO_ERROR (NPERR_BASE + 0)
-#define NPERR_GENERIC_ERROR (NPERR_BASE + 1)
-#define NPERR_INVALID_INSTANCE_ERROR (NPERR_BASE + 2)
-#define NPERR_INVALID_FUNCTABLE_ERROR (NPERR_BASE + 3)
-#define NPERR_MODULE_LOAD_FAILED_ERROR (NPERR_BASE + 4)
-#define NPERR_OUT_OF_MEMORY_ERROR (NPERR_BASE + 5)
-#define NPERR_INVALID_PLUGIN_ERROR (NPERR_BASE + 6)
-#define NPERR_INVALID_PLUGIN_DIR_ERROR (NPERR_BASE + 7)
-#define NPERR_INCOMPATIBLE_VERSION_ERROR (NPERR_BASE + 8)
-#define NPERR_INVALID_PARAM (NPERR_BASE + 9)
-#define NPERR_INVALID_URL (NPERR_BASE + 10)
-#define NPERR_FILE_NOT_FOUND (NPERR_BASE + 11)
-#define NPERR_NO_DATA (NPERR_BASE + 12)
-#define NPERR_STREAM_NOT_SEEKABLE (NPERR_BASE + 13)
-
-/*
- * Values of type NPReason:
- */
-#define NPRES_BASE 0
-#define NPRES_DONE (NPRES_BASE + 0)
-#define NPRES_NETWORK_ERR (NPRES_BASE + 1)
-#define NPRES_USER_BREAK (NPRES_BASE + 2)
-
-/*
- * Don't use these obsolete error codes any more.
- */
-#define NP_NOERR NP_NOERR_is_obsolete_use_NPERR_NO_ERROR
-#define NP_EINVAL NP_EINVAL_is_obsolete_use_NPERR_GENERIC_ERROR
-#define NP_EABORT NP_EABORT_is_obsolete_use_NPRES_USER_BREAK
-
-/*
- * Version feature information
- */
-#define NPVERS_HAS_STREAMOUTPUT 8
-#define NPVERS_HAS_NOTIFICATION 9
-#define NPVERS_HAS_LIVECONNECT 9
-#define NPVERS_WIN16_HAS_LIVECONNECT 9
-#define NPVERS_68K_HAS_LIVECONNECT 11
-#define NPVERS_HAS_WINDOWLESS 11
-#define NPVERS_HAS_XPCONNECT_SCRIPTING 13 /* Not implemented in WebKit */
-#define NPVERS_HAS_NPRUNTIME_SCRIPTING 14
-#define NPVERS_HAS_FORM_VALUES 15 /* Not implemented in WebKit; see bug 13061 */
-#define NPVERS_HAS_POPUPS_ENABLED_STATE 16 /* Not implemented in WebKit */
-#define NPVERS_HAS_RESPONSE_HEADERS 17
-#define NPVERS_HAS_NPOBJECT_ENUM 18
-#define NPVERS_HAS_PLUGIN_THREAD_ASYNC_CALL 19
-#define NPVERS_HAS_ALL_NETWORK_STREAMS 20
-#define NPVERS_HAS_URL_AND_AUTH_INFO 21
-#define NPVERS_HAS_PRIVATE_MODE 22
-#define NPVERS_MACOSX_HAS_EVENT_MODELS 23
-#define NPVERS_HAS_CANCEL_SRC_STREAM 24
-
-/*----------------------------------------------------------------------*/
-/* Function Prototypes */
-/*----------------------------------------------------------------------*/
-
-#if defined(__OS2__)
-#define NP_LOADDS _System
-#else
-#define NP_LOADDS
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* NPP_* functions are provided by the plugin and called by the navigator. */
-
-#if defined(XP_UNIX)
-char* NPP_GetMIMEDescription(void);
-#endif
-
-NPError NP_LOADDS NPP_Initialize(void);
-void NP_LOADDS NPP_Shutdown(void);
-NPError NP_LOADDS NPP_New(NPMIMEType pluginType, NPP instance,
- uint16_t mode, int16_t argc, char* argn[],
- char* argv[], NPSavedData* saved);
-NPError NP_LOADDS NPP_Destroy(NPP instance, NPSavedData** save);
-NPError NP_LOADDS NPP_SetWindow(NPP instance, NPWindow* window);
-NPError NP_LOADDS NPP_NewStream(NPP instance, NPMIMEType type,
- NPStream* stream, NPBool seekable,
- uint16_t* stype);
-NPError NP_LOADDS NPP_DestroyStream(NPP instance, NPStream* stream,
- NPReason reason);
-int32_t NP_LOADDS NPP_WriteReady(NPP instance, NPStream* stream);
-int32_t NP_LOADDS NPP_Write(NPP instance, NPStream* stream, int32_t offset,
- int32_t len, void* buffer);
-void NP_LOADDS NPP_StreamAsFile(NPP instance, NPStream* stream,
- const char* fname);
-void NP_LOADDS NPP_Print(NPP instance, NPPrint* platformPrint);
-int16_t NP_LOADDS NPP_HandleEvent(NPP instance, void* event);
-void NP_LOADDS NPP_URLNotify(NPP instance, const char* url,
- NPReason reason, void* notifyData);
-jref NP_LOADDS NPP_GetJavaClass(void);
-NPError NP_LOADDS NPP_GetValue(NPP instance, NPPVariable variable, void *value);
-NPError NP_LOADDS NPP_SetValue(NPP instance, NPNVariable variable, void *value);
-
-/* NPN_* functions are provided by the navigator and called by the plugin. */
-void NP_LOADDS NPN_Version(int* plugin_major, int* plugin_minor,
- int* netscape_major, int* netscape_minor);
-NPError NP_LOADDS NPN_GetURLNotify(NPP instance, const char* url,
- const char* target, void* notifyData);
-NPError NP_LOADDS NPN_GetURL(NPP instance, const char* url,
- const char* target);
-NPError NP_LOADDS NPN_PostURLNotify(NPP instance, const char* url,
- const char* target, uint32_t len,
- const char* buf, NPBool file,
- void* notifyData);
-NPError NP_LOADDS NPN_PostURL(NPP instance, const char* url,
- const char* target, uint32_t len,
- const char* buf, NPBool file);
-NPError NP_LOADDS NPN_RequestRead(NPStream* stream, NPByteRange* rangeList);
-NPError NP_LOADDS NPN_NewStream(NPP instance, NPMIMEType type,
- const char* target, NPStream** stream);
-int32_t NP_LOADDS NPN_Write(NPP instance, NPStream* stream, int32_t len,
- void* buffer);
-NPError NP_LOADDS NPN_DestroyStream(NPP instance, NPStream* stream,
- NPReason reason);
-void NP_LOADDS NPN_Status(NPP instance, const char* message);
-const char* NP_LOADDS NPN_UserAgent(NPP instance);
-void* NP_LOADDS NPN_MemAlloc(uint32_t size);
-void NP_LOADDS NPN_MemFree(void* ptr);
-uint32_t NP_LOADDS NPN_MemFlush(uint32_t size);
-void NP_LOADDS NPN_ReloadPlugins(NPBool reloadPages);
-JRIEnv* NP_LOADDS NPN_GetJavaEnv(void);
-jref NP_LOADDS NPN_GetJavaPeer(NPP instance);
-NPError NP_LOADDS NPN_GetValue(NPP instance, NPNVariable variable,
- void *value);
-NPError NP_LOADDS NPN_SetValue(NPP instance, NPPVariable variable,
- void *value);
-void NP_LOADDS NPN_InvalidateRect(NPP instance, NPRect *invalidRect);
-void NP_LOADDS NPN_InvalidateRegion(NPP instance,
- NPRegion invalidRegion);
-void NP_LOADDS NPN_ForceRedraw(NPP instance);
-void NP_LOADDS NPN_PushPopupsEnabledState(NPP instance, NPBool enabled);
-void NP_LOADDS NPN_PopPopupsEnabledState(NPP instance);
-void NP_LOADDS NPN_PluginThreadAsyncCall(NPP instance,
- void (*func) (void *),
- void *userData);
-NPError NP_LOADDS NPN_GetValueForURL(NPP instance, NPNURLVariable variable,
- const char *url, char **value,
- uint32_t *len);
-NPError NP_LOADDS NPN_SetValueForURL(NPP instance, NPNURLVariable variable,
- const char *url, const char *value,
- uint32_t len);
-NPError NP_LOADDS NPN_GetAuthenticationInfo(NPP instance,
- const char *protocol,
- const char *host, int32_t port,
- const char *scheme,
- const char *realm,
- char **username, uint32_t *ulen,
- char **password,
- uint32_t *plen);
-uint32_t NP_LOADDS NPN_ScheduleTimer(NPP instance, uint32_t interval, NPBool repeat, void (*timerFunc)(NPP npp, uint32_t timerID));
-void NP_LOADDS NPN_UnscheduleTimer(NPP instance, uint32_t timerID);
-NPError NP_LOADDS NPN_PopUpContextMenu(NPP instance, NPMenu* menu);
-NPBool NP_LOADDS NPN_ConvertPoint(NPP instance, double sourceX, double sourceY, NPCoordinateSpace sourceSpace, double *destX, double *destY, NPCoordinateSpace destSpace);
-
-#ifdef __cplusplus
-} /* end extern "C" */
-#endif
-
-#endif /* RC_INVOKED */
-#if defined(__OS2__)
-#pragma pack()
-#endif
-
-#endif /* npapi_h_ */
diff --git a/WebCore/bridge/npruntime.cpp b/WebCore/bridge/npruntime.cpp
deleted file mode 100644
index ab67076..0000000
--- a/WebCore/bridge/npruntime.cpp
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (C) 2004, 2006 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-
-#if ENABLE(NETSCAPE_PLUGIN_API)
-
-#include "IdentifierRep.h"
-#include "npruntime_internal.h"
-#include "npruntime_impl.h"
-#include "npruntime_priv.h"
-
-#include "c_utility.h"
-#include <runtime/Identifier.h>
-#include <runtime/JSLock.h>
-#include <wtf/Assertions.h>
-#include <wtf/HashMap.h>
-
-using namespace JSC::Bindings;
-using namespace WebCore;
-
-NPIdentifier _NPN_GetStringIdentifier(const NPUTF8* name)
-{
- return static_cast<NPIdentifier>(IdentifierRep::get(name));
-}
-
-void _NPN_GetStringIdentifiers(const NPUTF8** names, int32_t nameCount, NPIdentifier* identifiers)
-{
- ASSERT(names);
- ASSERT(identifiers);
-
- if (names && identifiers) {
- for (int i = 0; i < nameCount; i++)
- identifiers[i] = _NPN_GetStringIdentifier(names[i]);
- }
-}
-
-NPIdentifier _NPN_GetIntIdentifier(int32_t intid)
-{
- return static_cast<NPIdentifier>(IdentifierRep::get(intid));
-}
-
-bool _NPN_IdentifierIsString(NPIdentifier identifier)
-{
- return static_cast<IdentifierRep*>(identifier)->isString();
-}
-
-NPUTF8 *_NPN_UTF8FromIdentifier(NPIdentifier identifier)
-{
- const char* string = static_cast<IdentifierRep*>(identifier)->string();
- if (!string)
- return 0;
-
- return strdup(string);
-}
-
-int32_t _NPN_IntFromIdentifier(NPIdentifier identifier)
-{
- return static_cast<IdentifierRep*>(identifier)->number();
-}
-
-void NPN_InitializeVariantWithStringCopy(NPVariant* variant, const NPString* value)
-{
- variant->type = NPVariantType_String;
- variant->value.stringValue.UTF8Length = value->UTF8Length;
- variant->value.stringValue.UTF8Characters = (NPUTF8 *)malloc(sizeof(NPUTF8) * value->UTF8Length);
- if (!variant->value.stringValue.UTF8Characters)
- CRASH();
- memcpy((void*)variant->value.stringValue.UTF8Characters, value->UTF8Characters, sizeof(NPUTF8) * value->UTF8Length);
-}
-
-void _NPN_ReleaseVariantValue(NPVariant* variant)
-{
- ASSERT(variant);
-
- if (variant->type == NPVariantType_Object) {
- _NPN_ReleaseObject(variant->value.objectValue);
- variant->value.objectValue = 0;
- } else if (variant->type == NPVariantType_String) {
- free((void*)variant->value.stringValue.UTF8Characters);
- variant->value.stringValue.UTF8Characters = 0;
- variant->value.stringValue.UTF8Length = 0;
- }
-
- variant->type = NPVariantType_Void;
-}
-
-NPObject *_NPN_CreateObject(NPP npp, NPClass* aClass)
-{
- ASSERT(aClass);
-
- if (aClass) {
- NPObject* obj;
- if (aClass->allocate != NULL)
- obj = aClass->allocate(npp, aClass);
- else
- obj = (NPObject*)malloc(sizeof(NPObject));
- if (!obj)
- CRASH();
- obj->_class = aClass;
- obj->referenceCount = 1;
-
- return obj;
- }
-
- return 0;
-}
-
-NPObject* _NPN_RetainObject(NPObject* obj)
-{
- ASSERT(obj);
-
- if (obj)
- obj->referenceCount++;
-
- return obj;
-}
-
-void _NPN_ReleaseObject(NPObject* obj)
-{
- ASSERT(obj);
- ASSERT(obj->referenceCount >= 1);
-
- if (obj && obj->referenceCount >= 1) {
- if (--obj->referenceCount == 0)
- _NPN_DeallocateObject(obj);
- }
-}
-
-void _NPN_DeallocateObject(NPObject *obj)
-{
- ASSERT(obj);
-
- if (obj) {
- if (obj->_class->deallocate)
- obj->_class->deallocate(obj);
- else
- free(obj);
- }
-}
-
-#endif // ENABLE(NETSCAPE_PLUGIN_API)
diff --git a/WebCore/bridge/npruntime.h b/WebCore/bridge/npruntime.h
deleted file mode 100644
index 468cf92..0000000
--- a/WebCore/bridge/npruntime.h
+++ /dev/null
@@ -1,393 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * Copyright (c) 2004, Apple Computer, Inc. and The Mozilla Foundation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the names of Apple Computer, Inc. ("Apple") or The Mozilla
- * Foundation ("Mozilla") nor the names of their contributors may be used
- * to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE, MOZILLA AND THEIR CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE, MOZILLA OR
- * THEIR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-#ifndef _NP_RUNTIME_H_
-#define _NP_RUNTIME_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "npapi.h"
-
-/*
- This API is used to facilitate binding code written in C to script
- objects. The API in this header does not assume the presence of a
- user agent. That is, it can be used to bind C code to scripting
- environments outside of the context of a user agent.
-
- However, the normal use of the this API is in the context of a
- scripting environment running in a browser or other user agent.
- In particular it is used to support the extended Netscape
- script-ability API for plugins (NP-SAP). NP-SAP is an extension
- of the Netscape plugin API. As such we have adopted the use of
- the "NP" prefix for this API.
-
- The following NP{N|P}Variables were added to the Netscape plugin
- API (in npapi.h):
-
- NPNVWindowNPObject
- NPNVPluginElementNPObject
- NPPVpluginScriptableNPObject
-
- These variables are exposed through NPN_GetValue() and
- NPP_GetValue() (respectively) and are used to establish the
- initial binding between the user agent and native code. The DOM
- objects in the user agent can be examined and manipulated using
- the NPN_ functions that operate on NPObjects described in this
- header.
-
- To the extent possible the assumptions about the scripting
- language used by the scripting environment have been minimized.
-*/
-
-#define NP_BEGIN_MACRO do {
-#define NP_END_MACRO } while (0)
-
-/*
- Objects (non-primitive data) passed between 'C' and script is
- always wrapped in an NPObject. The 'interface' of an NPObject is
- described by an NPClass.
-*/
-typedef struct NPObject NPObject;
-typedef struct NPClass NPClass;
-
-typedef char NPUTF8;
-typedef struct _NPString {
- const NPUTF8 *UTF8Characters;
- uint32_t UTF8Length;
-} NPString;
-
-typedef enum {
- NPVariantType_Void,
- NPVariantType_Null,
- NPVariantType_Bool,
- NPVariantType_Int32,
- NPVariantType_Double,
- NPVariantType_String,
- NPVariantType_Object
-} NPVariantType;
-
-typedef struct _NPVariant {
- NPVariantType type;
- union {
- bool boolValue;
- int32_t intValue;
- double doubleValue;
- NPString stringValue;
- NPObject *objectValue;
- } value;
-} NPVariant;
-
-/*
- NPN_ReleaseVariantValue is called on all 'out' parameters
- references. Specifically it is to be called on variants that own
- their value, as is the case with all non-const NPVariant*
- arguments after a successful call to any methods (except this one)
- in this API.
-
- After calling NPN_ReleaseVariantValue, the type of the variant
- will be NPVariantType_Void.
-*/
-void NPN_ReleaseVariantValue(NPVariant *variant);
-
-#define NPVARIANT_IS_VOID(_v) ((_v).type == NPVariantType_Void)
-#define NPVARIANT_IS_NULL(_v) ((_v).type == NPVariantType_Null)
-#define NPVARIANT_IS_BOOLEAN(_v) ((_v).type == NPVariantType_Bool)
-#define NPVARIANT_IS_INT32(_v) ((_v).type == NPVariantType_Int32)
-#define NPVARIANT_IS_DOUBLE(_v) ((_v).type == NPVariantType_Double)
-#define NPVARIANT_IS_STRING(_v) ((_v).type == NPVariantType_String)
-#define NPVARIANT_IS_OBJECT(_v) ((_v).type == NPVariantType_Object)
-
-#define NPVARIANT_TO_BOOLEAN(_v) ((_v).value.boolValue)
-#define NPVARIANT_TO_INT32(_v) ((_v).value.intValue)
-#define NPVARIANT_TO_DOUBLE(_v) ((_v).value.doubleValue)
-#define NPVARIANT_TO_STRING(_v) ((_v).value.stringValue)
-#define NPVARIANT_TO_OBJECT(_v) ((_v).value.objectValue)
-
-#define VOID_TO_NPVARIANT(_v) \
-NP_BEGIN_MACRO \
- (_v).type = NPVariantType_Void; \
- (_v).value.objectValue = NULL; \
-NP_END_MACRO
-
-#define NULL_TO_NPVARIANT(_v) \
-NP_BEGIN_MACRO \
- (_v).type = NPVariantType_Null; \
- (_v).value.objectValue = NULL; \
-NP_END_MACRO
-
-#define BOOLEAN_TO_NPVARIANT(_val, _v) \
-NP_BEGIN_MACRO \
- (_v).type = NPVariantType_Bool; \
- (_v).value.boolValue = !!(_val); \
-NP_END_MACRO
-
-#define INT32_TO_NPVARIANT(_val, _v) \
-NP_BEGIN_MACRO \
- (_v).type = NPVariantType_Int32; \
- (_v).value.intValue = _val; \
-NP_END_MACRO
-
-#define DOUBLE_TO_NPVARIANT(_val, _v) \
-NP_BEGIN_MACRO \
- (_v).type = NPVariantType_Double; \
- (_v).value.doubleValue = _val; \
-NP_END_MACRO
-
-#define STRINGZ_TO_NPVARIANT(_val, _v) \
-NP_BEGIN_MACRO \
- (_v).type = NPVariantType_String; \
- NPString str = { _val, uint32_t(strlen(_val)) }; \
- (_v).value.stringValue = str; \
-NP_END_MACRO
-
-#define STRINGN_TO_NPVARIANT(_val, _len, _v) \
-NP_BEGIN_MACRO \
- (_v).type = NPVariantType_String; \
- NPString str = { _val, uint32_t(_len) }; \
- (_v).value.stringValue = str; \
-NP_END_MACRO
-
-#define OBJECT_TO_NPVARIANT(_val, _v) \
-NP_BEGIN_MACRO \
- (_v).type = NPVariantType_Object; \
- (_v).value.objectValue = _val; \
-NP_END_MACRO
-
-
-/*
- Type mappings (JavaScript types have been used for illustration
- purposes):
-
- JavaScript to C (NPVariant with type:)
- undefined NPVariantType_Void
- null NPVariantType_Null
- Boolean NPVariantType_Bool
- Number NPVariantType_Double or NPVariantType_Int32
- String NPVariantType_String
- Object NPVariantType_Object
-
- C (NPVariant with type:) to JavaScript
- NPVariantType_Void undefined
- NPVariantType_Null null
- NPVariantType_Bool Boolean
- NPVariantType_Int32 Number
- NPVariantType_Double Number
- NPVariantType_String String
- NPVariantType_Object Object
-*/
-
-typedef void *NPIdentifier;
-
-/*
- NPObjects have methods and properties. Methods and properties are
- identified with NPIdentifiers. These identifiers may be reflected
- in script. NPIdentifiers can be either strings or integers, IOW,
- methods and properties can be identified by either strings or
- integers (i.e. foo["bar"] vs foo[1]). NPIdentifiers can be
- compared using ==. In case of any errors, the requested
- NPIdentifier(s) will be NULL. NPIdentifier lifetime is controlled
- by the browser. Plugins do not need to worry about memory management
- with regards to NPIdentifiers.
-*/
-NPIdentifier NPN_GetStringIdentifier(const NPUTF8 *name);
-void NPN_GetStringIdentifiers(const NPUTF8 **names, int32_t nameCount,
- NPIdentifier *identifiers);
-NPIdentifier NPN_GetIntIdentifier(int32_t intid);
-bool NPN_IdentifierIsString(NPIdentifier identifier);
-
-/*
- The NPUTF8 returned from NPN_UTF8FromIdentifier SHOULD be freed.
-*/
-NPUTF8 *NPN_UTF8FromIdentifier(NPIdentifier identifier);
-
-/*
- Get the integer represented by identifier. If identifier is not an
- integer identifier, the behaviour is undefined.
-*/
-int32_t NPN_IntFromIdentifier(NPIdentifier identifier);
-
-/*
- NPObject behavior is implemented using the following set of
- callback functions.
-
- The NPVariant *result argument of these functions (where
- applicable) should be released using NPN_ReleaseVariantValue().
-*/
-typedef NPObject *(*NPAllocateFunctionPtr)(NPP npp, NPClass *aClass);
-typedef void (*NPDeallocateFunctionPtr)(NPObject *npobj);
-typedef void (*NPInvalidateFunctionPtr)(NPObject *npobj);
-typedef bool (*NPHasMethodFunctionPtr)(NPObject *npobj, NPIdentifier name);
-typedef bool (*NPInvokeFunctionPtr)(NPObject *npobj, NPIdentifier name,
- const NPVariant *args, uint32_t argCount,
- NPVariant *result);
-typedef bool (*NPInvokeDefaultFunctionPtr)(NPObject *npobj,
- const NPVariant *args,
- uint32_t argCount,
- NPVariant *result);
-typedef bool (*NPHasPropertyFunctionPtr)(NPObject *npobj, NPIdentifier name);
-typedef bool (*NPGetPropertyFunctionPtr)(NPObject *npobj, NPIdentifier name,
- NPVariant *result);
-typedef bool (*NPSetPropertyFunctionPtr)(NPObject *npobj, NPIdentifier name,
- const NPVariant *value);
-typedef bool (*NPRemovePropertyFunctionPtr)(NPObject *npobj,
- NPIdentifier name);
-typedef bool (*NPEnumerationFunctionPtr)(NPObject *npobj, NPIdentifier **value,
- uint32_t *count);
-typedef bool (*NPConstructFunctionPtr)(NPObject *npobj,
- const NPVariant *args,
- uint32_t argCount,
- NPVariant *result);
-
-/*
- NPObjects returned by create, retain, invoke, and getProperty pass
- a reference count to the caller. That is, the callee adds a
- reference count which passes to the caller. It is the caller's
- responsibility to release the returned object.
-
- NPInvokeFunctionPtr function may return 0 to indicate a void
- result.
-
- NPInvalidateFunctionPtr is called by the scripting environment
- when the native code is shutdown. Any attempt to message a
- NPObject instance after the invalidate callback has been
- called will result in undefined behavior, even if the native code
- is still retaining those NPObject instances. (The runtime
- will typically return immediately, with 0 or NULL, from an attempt
- to dispatch to a NPObject, but this behavior should not be
- depended upon.)
-
- The NPEnumerationFunctionPtr function may pass an array of
- NPIdentifiers back to the caller. The callee allocs the memory of
- the array using NPN_MemAlloc(), and it's the caller's responsibility
- to release it using NPN_MemFree().
-*/
-struct NPClass
-{
- uint32_t structVersion;
- NPAllocateFunctionPtr allocate;
- NPDeallocateFunctionPtr deallocate;
- NPInvalidateFunctionPtr invalidate;
- NPHasMethodFunctionPtr hasMethod;
- NPInvokeFunctionPtr invoke;
- NPInvokeDefaultFunctionPtr invokeDefault;
- NPHasPropertyFunctionPtr hasProperty;
- NPGetPropertyFunctionPtr getProperty;
- NPSetPropertyFunctionPtr setProperty;
- NPRemovePropertyFunctionPtr removeProperty;
- NPEnumerationFunctionPtr enumerate;
- NPConstructFunctionPtr construct;
-};
-
-#define NP_CLASS_STRUCT_VERSION 3
-
-#define NP_CLASS_STRUCT_VERSION_ENUM 2
-#define NP_CLASS_STRUCT_VERSION_CTOR 3
-
-#define NP_CLASS_STRUCT_VERSION_HAS_ENUM(npclass) \
- ((npclass)->structVersion >= NP_CLASS_STRUCT_VERSION_ENUM)
-
-#define NP_CLASS_STRUCT_VERSION_HAS_CTOR(npclass) \
- ((npclass)->structVersion >= NP_CLASS_STRUCT_VERSION_CTOR)
-
-struct NPObject {
- NPClass *_class;
- uint32_t referenceCount;
- /*
- * Additional space may be allocated here by types of NPObjects
- */
-};
-
-/*
- If the class has an allocate function, NPN_CreateObject invokes
- that function, otherwise a NPObject is allocated and
- returned. This method will initialize the referenceCount member of
- the NPObject to 1.
-*/
-NPObject *NPN_CreateObject(NPP npp, NPClass *aClass);
-
-/*
- Increment the NPObject's reference count.
-*/
-NPObject *NPN_RetainObject(NPObject *npobj);
-
-/*
- Decremented the NPObject's reference count. If the reference
- count goes to zero, the class's destroy function is invoke if
- specified, otherwise the object is freed directly.
-*/
-void NPN_ReleaseObject(NPObject *npobj);
-
-/*
- Functions to access script objects represented by NPObject.
-
- Calls to script objects are synchronous. If a function returns a
- value, it will be supplied via the result NPVariant
- argument. Successful calls will return true, false will be
- returned in case of an error.
-
- Calls made from plugin code to script must be made from the thread
- on which the plugin was initialized.
-*/
-
-bool NPN_Invoke(NPP npp, NPObject *npobj, NPIdentifier methodName,
- const NPVariant *args, uint32_t argCount, NPVariant *result);
-bool NPN_InvokeDefault(NPP npp, NPObject *npobj, const NPVariant *args,
- uint32_t argCount, NPVariant *result);
-bool NPN_Evaluate(NPP npp, NPObject *npobj, NPString *script,
- NPVariant *result);
-bool NPN_GetProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName,
- NPVariant *result);
-bool NPN_SetProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName,
- const NPVariant *value);
-bool NPN_RemoveProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName);
-bool NPN_HasProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName);
-bool NPN_HasMethod(NPP npp, NPObject *npobj, NPIdentifier methodName);
-bool NPN_Enumerate(NPP npp, NPObject *npobj, NPIdentifier **identifier,
- uint32_t *count);
-bool NPN_Construct(NPP npp, NPObject *npobj, const NPVariant *args,
- uint32_t argCount, NPVariant *result);
-
-/*
- NPN_SetException may be called to trigger a script exception upon
- return from entry points into NPObjects. Typical usage:
-
- NPN_SetException (npobj, message);
-*/
-void NPN_SetException(NPObject *npobj, const NPUTF8 *message);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/WebCore/bridge/npruntime_impl.h b/WebCore/bridge/npruntime_impl.h
deleted file mode 100644
index 559f340..0000000
--- a/WebCore/bridge/npruntime_impl.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2004 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _NP_RUNTIME_IMPL_H_
-#define _NP_RUNTIME_IMPL_H_
-
-#if ENABLE(NETSCAPE_PLUGIN_API)
-
-#include "npruntime_internal.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern void _NPN_ReleaseVariantValue(NPVariant*);
-extern NPIdentifier _NPN_GetStringIdentifier(const NPUTF8*);
-extern void _NPN_GetStringIdentifiers(const NPUTF8** names, int32_t nameCount, NPIdentifier* identifiers);
-extern NPIdentifier _NPN_GetIntIdentifier(int32_t);
-extern bool _NPN_IdentifierIsString(NPIdentifier);
-extern NPUTF8* _NPN_UTF8FromIdentifier(NPIdentifier);
-extern int32_t _NPN_IntFromIdentifier(NPIdentifier);
-extern NPObject* _NPN_CreateObject(NPP, NPClass*);
-extern NPObject* _NPN_RetainObject(NPObject*);
-extern void _NPN_ReleaseObject(NPObject*);
-extern void _NPN_DeallocateObject(NPObject*);
-extern bool _NPN_Invoke(NPP, NPObject*, NPIdentifier methodName, const NPVariant* args, uint32_t argCount, NPVariant* result);
-extern bool _NPN_InvokeDefault(NPP, NPObject*, const NPVariant* args, uint32_t argCount, NPVariant* result);
-extern bool _NPN_Evaluate(NPP, NPObject*, NPString*, NPVariant* result);
-extern bool _NPN_GetProperty(NPP, NPObject*, NPIdentifier, NPVariant* result);
-extern bool _NPN_SetProperty(NPP, NPObject*, NPIdentifier, const NPVariant*);
-extern bool _NPN_RemoveProperty(NPP, NPObject*, NPIdentifier);
-extern bool _NPN_HasProperty(NPP, NPObject*, NPIdentifier);
-extern bool _NPN_HasMethod(NPP, NPObject*, NPIdentifier);
-extern void _NPN_SetException(NPObject*, const NPUTF8*);
-extern bool _NPN_Enumerate(NPP, NPObject*, NPIdentifier**, uint32_t* count);
-extern bool _NPN_Construct(NPP, NPObject*, const NPVariant* args, uint32_t argCount, NPVariant *result);
-
-#ifdef __cplusplus
-} /* end extern "C" */
-#endif
-
-#endif // ENABLE(NETSCAPE_PLUGIN_API)
-
-#endif
diff --git a/WebCore/bridge/npruntime_internal.h b/WebCore/bridge/npruntime_internal.h
deleted file mode 100644
index 550c34c..0000000
--- a/WebCore/bridge/npruntime_internal.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2007-2008 Collabora Ltd. All rights reserved.
- *
- * 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.1 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *
- * This is a internal include header for npapi.h
- *
- * Some of the #defines which are in X11 headers conflict with type and enum
- * names in JavaScriptCore and WebCore
- * This header #undefs those defines to fix the conflicts
- * If you need to include npapi.h or npruntime.h when building on X11,
- * include this file instead of the actual npapi.h or npruntime.h
- */
-
-#include "npapi.h"
-#include "npfunctions.h"
-#include "npruntime.h"
-
-#ifdef XP_UNIX
- #include <X11/Xresource.h>
-
- #undef None
- #undef Above
- #undef Below
- #undef Auto
- #undef Complex
- #undef Status
- #undef CursorShape
- #undef FocusIn
- #undef FocusOut
- #undef KeyPress
- #undef KeyRelease
- #undef Unsorted
- #undef Bool
- #undef FontChange
- #undef GrayScale
- #undef NormalState
- #undef True
- #undef False
-#endif
diff --git a/WebCore/bridge/npruntime_priv.h b/WebCore/bridge/npruntime_priv.h
deleted file mode 100644
index 301c163..0000000
--- a/WebCore/bridge/npruntime_priv.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2003, 2006 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef NP_RUNTIME_PRIV_H_
-#define NP_RUNTIME_PRIV_H_
-
-#if ENABLE(NETSCAPE_PLUGIN_API)
-
-#include "npruntime_internal.h"
-
-/*
- NPN_InitializeVariantWithStringCopy() will copy string data. The string data
- will be deallocated by calls to NPReleaseVariantValue().
-*/
-void NPN_InitializeVariantWithStringCopy(NPVariant*, const NPString*);
-
-#endif // ENABLE(NETSCAPE_PLUGIN_API)
-#endif
-
diff --git a/WebCore/bridge/nptypes.h b/WebCore/bridge/nptypes.h
deleted file mode 100644
index 11e9683..0000000
--- a/WebCore/bridge/nptypes.h
+++ /dev/null
@@ -1,214 +0,0 @@
-/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is mozilla.org code.
- *
- * The Initial Developer of the Original Code is
- * mozilla.org.
- * Portions created by the Initial Developer are Copyright (C) 2004
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Johnny Stenback <jst@mozilla.org> (Original author)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-/*
- * Header file for ensuring that C99 types ([u]int32_t and bool) are
- * available.
- */
-
-#if defined(WIN32) || defined(OS2)
- /*
- * Win32 and OS/2 don't know C99, so define [u]int_16/32 here. The bool
- * is predefined tho, both in C and C++.
- */
- typedef short int16_t;
- typedef unsigned short uint16_t;
- typedef int int32_t;
- typedef unsigned int uint32_t;
-#elif defined(_AIX) || defined(__sun) || defined(__osf__) || defined(IRIX) || defined(HPUX)
- /*
- * AIX and SunOS ship a inttypes.h header that defines [u]int32_t,
- * but not bool for C.
- */
- #include <inttypes.h>
-
- #ifndef __cplusplus
- typedef int bool;
- #endif
-#elif defined(bsdi) || defined(FREEBSD) || defined(OPENBSD)
- /*
- * BSD/OS, FreeBSD, and OpenBSD ship sys/types.h that define int32_t and
- * u_int32_t.
- */
- #include <sys/types.h>
-
- /*
- * BSD/OS ships no header that defines uint32_t, nor bool (for C)
- */
- #if defined(bsdi)
- typedef u_int32_t uint32_t;
-
- #if !defined(__cplusplus)
- typedef int bool;
- #endif
- #else
- /*
- * FreeBSD and OpenBSD define uint32_t and bool.
- */
- #include <inttypes.h>
- #include <stdbool.h>
- #endif
-#elif defined(BEOS)
- #include <inttypes.h>
-#else
- /*
- * For those that ship a standard C99 stdint.h header file, include
- * it. Can't do the same for stdbool.h tho, since some systems ship
- * with a stdbool.h file that doesn't compile!
- */
- #include <stdint.h>
-
- #ifndef __cplusplus
- #if !defined(__GNUC__) || (__GNUC__ > 2 || __GNUC_MINOR__ > 95)
- #include <stdbool.h>
- #else
- /*
- * GCC 2.91 can't deal with a typedef for bool, but a #define
- * works.
- */
- #define bool int
- #endif
- #endif
-#endif
-/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is mozilla.org code.
- *
- * The Initial Developer of the Original Code is
- * mozilla.org.
- * Portions created by the Initial Developer are Copyright (C) 2004
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Johnny Stenback <jst@mozilla.org> (Original author)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-/*
- * Header file for ensuring that C99 types ([u]int32_t and bool) are
- * available.
- */
-
-#if defined(WIN32) || defined(OS2)
- /*
- * Win32 and OS/2 don't know C99, so define [u]int_16/32 here. The bool
- * is predefined tho, both in C and C++.
- */
- typedef short int16_t;
- typedef unsigned short uint16_t;
- typedef int int32_t;
- typedef unsigned int uint32_t;
-#elif defined(_AIX) || defined(__sun) || defined(__osf__) || defined(IRIX) || defined(HPUX)
- /*
- * AIX and SunOS ship a inttypes.h header that defines [u]int32_t,
- * but not bool for C.
- */
- #include <inttypes.h>
-
- #ifndef __cplusplus
- typedef int bool;
- #endif
-#elif defined(bsdi) || defined(FREEBSD) || defined(OPENBSD)
- /*
- * BSD/OS, FreeBSD, and OpenBSD ship sys/types.h that define int32_t and
- * u_int32_t.
- */
- #include <sys/types.h>
-
- /*
- * BSD/OS ships no header that defines uint32_t, nor bool (for C)
- */
- #if defined(bsdi)
- typedef u_int32_t uint32_t;
-
- #if !defined(__cplusplus)
- typedef int bool;
- #endif
- #else
- /*
- * FreeBSD and OpenBSD define uint32_t and bool.
- */
- #include <inttypes.h>
- #include <stdbool.h>
- #endif
-#elif defined(BEOS)
- #include <inttypes.h>
-#else
- /*
- * For those that ship a standard C99 stdint.h header file, include
- * it. Can't do the same for stdbool.h tho, since some systems ship
- * with a stdbool.h file that doesn't compile!
- */
- #include <stdint.h>
-
- #ifndef __cplusplus
- #if !defined(__GNUC__) || (__GNUC__ > 2 || __GNUC_MINOR__ > 95)
- #include <stdbool.h>
- #else
- /*
- * GCC 2.91 can't deal with a typedef for bool, but a #define
- * works.
- */
- #define bool int
- #endif
- #endif
-#endif
diff --git a/WebCore/bridge/objc/ObjCRuntimeObject.h b/WebCore/bridge/objc/ObjCRuntimeObject.h
deleted file mode 100644
index 78550b9..0000000
--- a/WebCore/bridge/objc/ObjCRuntimeObject.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef ObjCRuntimeObject_h
-#define ObjCRuntimeObject_h
-
-#include "runtime_object.h"
-
-namespace JSC {
-namespace Bindings {
-
-class ObjcInstance;
-
-class ObjCRuntimeObject : public RuntimeObject {
-public:
- ObjCRuntimeObject(ExecState*, JSGlobalObject*, PassRefPtr<ObjcInstance>);
- virtual ~ObjCRuntimeObject();
-
- ObjcInstance* getInternalObjCInstance() const;
-
- static const ClassInfo s_info;
-
-private:
- virtual const ClassInfo* classInfo() const { return &s_info; }
-};
-
-}
-}
-
-#endif
diff --git a/WebCore/bridge/objc/ObjCRuntimeObject.mm b/WebCore/bridge/objc/ObjCRuntimeObject.mm
deleted file mode 100644
index d9afdf2..0000000
--- a/WebCore/bridge/objc/ObjCRuntimeObject.mm
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import "config.h"
-
-#import "ObjCRuntimeObject.h"
-#import "objc_instance.h"
-
-namespace JSC {
-namespace Bindings {
-
-const ClassInfo ObjCRuntimeObject::s_info = { "ObjCRuntimeObject", &RuntimeObject::s_info, 0, 0 };
-
-ObjCRuntimeObject::ObjCRuntimeObject(ExecState* exec, JSGlobalObject* globalObject, PassRefPtr<ObjcInstance> instance)
- : RuntimeObject(exec, globalObject, instance)
-{
-}
-
-ObjCRuntimeObject::~ObjCRuntimeObject()
-{
-}
-
-ObjcInstance* ObjCRuntimeObject::getInternalObjCInstance() const
-{
- return static_cast<ObjcInstance*>(getInternalInstance());
-}
-
-
-}
-}
diff --git a/WebCore/bridge/objc/WebScriptObject.h b/WebCore/bridge/objc/WebScriptObject.h
deleted file mode 100644
index 6d9ff2c..0000000
--- a/WebCore/bridge/objc/WebScriptObject.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import <Foundation/Foundation.h>
-#import "runtime_root.h"
-
-@class WebUndefined;
-
-@protocol WebScriptObject
-+ (NSString *)webScriptNameForSelector:(SEL)aSelector;
-+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector;
-+ (NSString *)webScriptNameForKey:(const char *)name;
-+ (BOOL)isKeyExcludedFromWebScript:(const char *)name;
-
-+ (id)_convertValueToObjcValue:(JSC::JSValue)value originRootObject:(JSC::Bindings::RootObject*)originRootObject rootObject:(JSC::Bindings::RootObject*)rootObject;
-- _initWithJSObject:(JSC::JSObject*)imp originRootObject:(PassRefPtr<JSC::Bindings::RootObject>)originRootObject rootObject:(PassRefPtr<JSC::Bindings::RootObject>)rootObject;
-- (JSC::JSObject *)_imp;
-@end
-
-@protocol WebUndefined
-+ (WebUndefined *)undefined;
-@end
diff --git a/WebCore/bridge/objc/objc_class.h b/WebCore/bridge/objc/objc_class.h
deleted file mode 100644
index eebfd2a..0000000
--- a/WebCore/bridge/objc/objc_class.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2003 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef KJS_BINDINGS_OBJC_CLASS_H
-#define KJS_BINDINGS_OBJC_CLASS_H
-
-#include "objc_runtime.h"
-
-namespace JSC {
-namespace Bindings {
-
-class ObjcClass : public Class
-{
-protected:
- ObjcClass (ClassStructPtr aClass); // Use classForIsA to create an ObjcClass.
-
-public:
- // Return the cached ObjC of the specified name.
- static ObjcClass *classForIsA(ClassStructPtr);
-
- virtual MethodList methodsNamed(const Identifier&, Instance *instance) const;
- virtual Field *fieldNamed(const Identifier&, Instance *instance) const;
-
- virtual JSValue fallbackObject(ExecState *exec, Instance *instance, const Identifier &propertyName);
-
- ClassStructPtr isa() { return _isa; }
-
-private:
- ClassStructPtr _isa;
- RetainPtr<CFMutableDictionaryRef> _methods;
- RetainPtr<CFMutableDictionaryRef> _fields;
-};
-
-} // namespace Bindings
-} // namespace JSC
-
-#endif
diff --git a/WebCore/bridge/objc/objc_class.mm b/WebCore/bridge/objc/objc_class.mm
deleted file mode 100644
index 2d29499..0000000
--- a/WebCore/bridge/objc/objc_class.mm
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * Copyright (C) 2004 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "objc_class.h"
-
-#include "objc_instance.h"
-#include "WebScriptObject.h"
-
-namespace JSC {
-namespace Bindings {
-
-static void deleteMethod(CFAllocatorRef, const void* value)
-{
- delete static_cast<const Method*>(value);
-}
-
-static void deleteField(CFAllocatorRef, const void* value)
-{
- delete static_cast<const Field*>(value);
-}
-
-const CFDictionaryValueCallBacks MethodDictionaryValueCallBacks = { 0, 0, &deleteMethod, 0 , 0 };
-const CFDictionaryValueCallBacks FieldDictionaryValueCallBacks = { 0, 0, &deleteField, 0 , 0 };
-
-ObjcClass::ObjcClass(ClassStructPtr aClass)
- : _isa(aClass)
- , _methods(AdoptCF, CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &MethodDictionaryValueCallBacks))
- , _fields(AdoptCF, CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &FieldDictionaryValueCallBacks))
-{
-}
-
-static CFMutableDictionaryRef classesByIsA = 0;
-
-static void _createClassesByIsAIfNecessary()
-{
- if (!classesByIsA)
- classesByIsA = CFDictionaryCreateMutable(NULL, 0, NULL, NULL);
-}
-
-ObjcClass* ObjcClass::classForIsA(ClassStructPtr isa)
-{
- _createClassesByIsAIfNecessary();
-
- ObjcClass* aClass = (ObjcClass*)CFDictionaryGetValue(classesByIsA, isa);
- if (!aClass) {
- aClass = new ObjcClass(isa);
- CFDictionaryAddValue(classesByIsA, isa, aClass);
- }
-
- return aClass;
-}
-
-MethodList ObjcClass::methodsNamed(const Identifier& identifier, Instance*) const
-{
- MethodList methodList;
- char fixedSizeBuffer[1024];
- char* buffer = fixedSizeBuffer;
- CString jsName = identifier.ascii();
- if (!convertJSMethodNameToObjc(jsName.data(), buffer, sizeof(fixedSizeBuffer))) {
- int length = jsName.length() + 1;
- buffer = new char[length];
- if (!buffer || !convertJSMethodNameToObjc(jsName.data(), buffer, length))
- return methodList;
- }
-
-
- RetainPtr<CFStringRef> methodName(AdoptCF, CFStringCreateWithCString(NULL, buffer, kCFStringEncodingASCII));
- Method* method = (Method*)CFDictionaryGetValue(_methods.get(), methodName.get());
- if (method) {
- methodList.append(method);
- return methodList;
- }
-
- ClassStructPtr thisClass = _isa;
- while (thisClass && methodList.isEmpty()) {
-#if defined(OBJC_API_VERSION) && OBJC_API_VERSION >= 2
- unsigned numMethodsInClass = 0;
- MethodStructPtr* objcMethodList = class_copyMethodList(thisClass, &numMethodsInClass);
-#else
- void* iterator = 0;
- struct objc_method_list* objcMethodList;
- while ((objcMethodList = class_nextMethodList(thisClass, &iterator))) {
- unsigned numMethodsInClass = objcMethodList->method_count;
-#endif
- for (unsigned i = 0; i < numMethodsInClass; i++) {
-#if defined(OBJC_API_VERSION) && OBJC_API_VERSION >= 2
- MethodStructPtr objcMethod = objcMethodList[i];
- SEL objcMethodSelector = method_getName(objcMethod);
-#else
- struct objc_method* objcMethod = &objcMethodList->method_list[i];
- SEL objcMethodSelector = objcMethod->method_name;
-#endif
- const char* objcMethodSelectorName = sel_getName(objcMethodSelector);
- NSString* mappedName = nil;
-
- // See if the class wants to exclude the selector from visibility in JavaScript.
- if ([thisClass respondsToSelector:@selector(isSelectorExcludedFromWebScript:)])
- if ([thisClass isSelectorExcludedFromWebScript:objcMethodSelector])
- continue;
-
- // See if the class want to provide a different name for the selector in JavaScript.
- // Note that we do not do any checks to guarantee uniqueness. That's the responsiblity
- // of the class.
- if ([thisClass respondsToSelector:@selector(webScriptNameForSelector:)])
- mappedName = [thisClass webScriptNameForSelector:objcMethodSelector];
-
- if ((mappedName && [mappedName isEqual:(NSString*)methodName.get()]) || strcmp(objcMethodSelectorName, buffer) == 0) {
- Method* aMethod = new ObjcMethod(thisClass, objcMethodSelector); // deleted when the dictionary is destroyed
- CFDictionaryAddValue(_methods.get(), methodName.get(), aMethod);
- methodList.append(aMethod);
- break;
- }
- }
-#if defined(OBJC_API_VERSION) && OBJC_API_VERSION >= 2
- thisClass = class_getSuperclass(thisClass);
- free(objcMethodList);
-#else
- }
- thisClass = thisClass->super_class;
-#endif
- }
-
- if (buffer != fixedSizeBuffer)
- delete [] buffer;
-
- return methodList;
-}
-
-Field* ObjcClass::fieldNamed(const Identifier& identifier, Instance* instance) const
-{
- ClassStructPtr thisClass = _isa;
-
- CString jsName = identifier.ascii();
- RetainPtr<CFStringRef> fieldName(AdoptCF, CFStringCreateWithCString(NULL, jsName.data(), kCFStringEncodingASCII));
- Field* aField = (Field*)CFDictionaryGetValue(_fields.get(), fieldName.get());
- if (aField)
- return aField;
-
- id targetObject = (static_cast<ObjcInstance*>(instance))->getObject();
- id attributes = [targetObject attributeKeys];
- if (attributes) {
- // Class overrides attributeKeys, use that array of key names.
- unsigned count = [attributes count];
- for (unsigned i = 0; i < count; i++) {
- NSString* keyName = [attributes objectAtIndex:i];
- const char* UTF8KeyName = [keyName UTF8String]; // ObjC actually only supports ASCII names.
-
- // See if the class wants to exclude the selector from visibility in JavaScript.
- if ([thisClass respondsToSelector:@selector(isKeyExcludedFromWebScript:)])
- if ([thisClass isKeyExcludedFromWebScript:UTF8KeyName])
- continue;
-
- // See if the class want to provide a different name for the selector in JavaScript.
- // Note that we do not do any checks to guarantee uniqueness. That's the responsiblity
- // of the class.
- NSString* mappedName = nil;
- if ([thisClass respondsToSelector:@selector(webScriptNameForKey:)])
- mappedName = [thisClass webScriptNameForKey:UTF8KeyName];
-
- if ((mappedName && [mappedName isEqual:(NSString*)fieldName.get()]) || [keyName isEqual:(NSString*)fieldName.get()]) {
- aField = new ObjcField((CFStringRef)keyName); // deleted when the dictionary is destroyed
- CFDictionaryAddValue(_fields.get(), fieldName.get(), aField);
- break;
- }
- }
- } else {
- // Class doesn't override attributeKeys, so fall back on class runtime
- // introspection.
-
- while (thisClass) {
-#if defined(OBJC_API_VERSION) && OBJC_API_VERSION >= 2
- unsigned numFieldsInClass = 0;
- IvarStructPtr* ivarsInClass = class_copyIvarList(thisClass, &numFieldsInClass);
-#else
- struct objc_ivar_list* fieldsInClass = thisClass->ivars;
- if (fieldsInClass) {
- unsigned numFieldsInClass = fieldsInClass->ivar_count;
-#endif
- for (unsigned i = 0; i < numFieldsInClass; i++) {
-#if defined(OBJC_API_VERSION) && OBJC_API_VERSION >= 2
- IvarStructPtr objcIVar = ivarsInClass[i];
- const char* objcIvarName = ivar_getName(objcIVar);
-#else
- IvarStructPtr objcIVar = &fieldsInClass->ivar_list[i];
- const char* objcIvarName = objcIVar->ivar_name;
-#endif
- NSString* mappedName = 0;
-
- // See if the class wants to exclude the selector from visibility in JavaScript.
- if ([thisClass respondsToSelector:@selector(isKeyExcludedFromWebScript:)])
- if ([thisClass isKeyExcludedFromWebScript:objcIvarName])
- continue;
-
- // See if the class want to provide a different name for the selector in JavaScript.
- // Note that we do not do any checks to guarantee uniqueness. That's the responsiblity
- // of the class.
- if ([thisClass respondsToSelector:@selector(webScriptNameForKey:)])
- mappedName = [thisClass webScriptNameForKey:objcIvarName];
-
- if ((mappedName && [mappedName isEqual:(NSString*)fieldName.get()]) || strcmp(objcIvarName, jsName.data()) == 0) {
- aField = new ObjcField(objcIVar); // deleted when the dictionary is destroyed
- CFDictionaryAddValue(_fields.get(), fieldName.get(), aField);
- break;
- }
- }
-#if defined(OBJC_API_VERSION) && OBJC_API_VERSION >= 2
- thisClass = class_getSuperclass(thisClass);
- free(ivarsInClass);
-#else
- }
- thisClass = thisClass->super_class;
-#endif
- }
- }
-
- return aField;
-}
-
-JSValue ObjcClass::fallbackObject(ExecState* exec, Instance* instance, const Identifier &propertyName)
-{
- ObjcInstance* objcInstance = static_cast<ObjcInstance*>(instance);
- id targetObject = objcInstance->getObject();
-
- if (![targetObject respondsToSelector:@selector(invokeUndefinedMethodFromWebScript:withArguments:)])
- return jsUndefined();
- return new (exec) ObjcFallbackObjectImp(exec, exec->lexicalGlobalObject(), objcInstance, propertyName);
-}
-
-}
-}
diff --git a/WebCore/bridge/objc/objc_header.h b/WebCore/bridge/objc/objc_header.h
deleted file mode 100644
index 07954a1..0000000
--- a/WebCore/bridge/objc/objc_header.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2004 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef KJS_BINDINGS_OBJC_HEADER_H
-#define KJS_BINDINGS_OBJC_HEADER_H
-
-#ifdef __OBJC__
-
-#include <objc/objc.h>
-#include <objc/objc-class.h>
-#include <objc/objc-runtime.h>
-
-typedef Class ClassStructPtr;
-typedef id ObjectStructPtr;
-typedef Method MethodStructPtr;
-typedef Ivar IvarStructPtr;
-
-@class NSMethodSignature;
-
-#else
-
-typedef struct objc_class* ClassStructPtr;
-typedef struct objc_object* ObjectStructPtr;
-typedef struct objc_method* MethodStructPtr;
-typedef struct objc_ivar* IvarStructPtr;
-
-class NSMethodSignature;
-
-#endif
-
-#endif
diff --git a/WebCore/bridge/objc/objc_instance.h b/WebCore/bridge/objc/objc_instance.h
deleted file mode 100644
index ae6972a..0000000
--- a/WebCore/bridge/objc/objc_instance.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (C) 2003, 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef BINDINGS_OBJC_INSTANCE_H_
-#define BINDINGS_OBJC_INSTANCE_H_
-
-#include "objc_class.h"
-#include "objc_utility.h"
-
-namespace JSC {
-
-namespace Bindings {
-
-class ObjcClass;
-
-class ObjcInstance : public Instance {
-public:
- static PassRefPtr<ObjcInstance> create(ObjectStructPtr, PassRefPtr<RootObject>);
- virtual ~ObjcInstance();
-
- static void setGlobalException(NSString*, JSGlobalObject* exceptionEnvironment = 0); // A null exceptionEnvironment means the exception should propogate to any execution environment.
-
- virtual Class* getClass() const;
-
- virtual JSValue valueOf(ExecState*) const;
- virtual JSValue defaultValue(ExecState*, PreferredPrimitiveType) const;
-
- virtual JSValue getMethod(ExecState* exec, const Identifier& propertyName);
- JSValue invokeObjcMethod(ExecState*, ObjcMethod* method);
- virtual JSValue invokeMethod(ExecState*, RuntimeMethod* method);
- virtual bool supportsInvokeDefaultMethod() const;
- virtual JSValue invokeDefaultMethod(ExecState*);
-
- JSValue getValueOfUndefinedField(ExecState*, const Identifier&) const;
- virtual bool setValueOfUndefinedField(ExecState*, const Identifier&, JSValue);
-
- ObjectStructPtr getObject() const { return _instance.get(); }
-
- JSValue stringValue(ExecState*) const;
- JSValue numberValue(ExecState*) const;
- JSValue booleanValue() const;
-
-protected:
- virtual void virtualBegin();
- virtual void virtualEnd();
-
-private:
- static void moveGlobalExceptionToExecState(ExecState*);
-
- ObjcInstance(ObjectStructPtr, PassRefPtr<RootObject>);
-
- virtual RuntimeObject* newRuntimeObject(ExecState*);
-
- RetainPtr<ObjectStructPtr> _instance;
- mutable ObjcClass *_class;
- ObjectStructPtr _pool;
- int _beginCount;
-};
-
-} // namespace Bindings
-
-} // namespace JSC
-
-#endif // BINDINGS_OBJC_INSTANCE_H_
diff --git a/WebCore/bridge/objc/objc_instance.mm b/WebCore/bridge/objc/objc_instance.mm
deleted file mode 100644
index ae9d95d..0000000
--- a/WebCore/bridge/objc/objc_instance.mm
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- * Copyright (C) 2004, 2008, 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import "config.h"
-#import "objc_instance.h"
-
-#import "runtime_method.h"
-#import "ObjCRuntimeObject.h"
-#import "WebScriptObject.h"
-#import <objc/objc-auto.h>
-#import <runtime/Error.h>
-#import <runtime/JSLock.h>
-#import <wtf/Assertions.h>
-
-#ifdef NDEBUG
-#define OBJC_LOG(formatAndArgs...) ((void)0)
-#else
-#define OBJC_LOG(formatAndArgs...) { \
- fprintf (stderr, "%s:%d -- %s: ", __FILE__, __LINE__, __FUNCTION__); \
- fprintf(stderr, formatAndArgs); \
-}
-#endif
-
-using namespace JSC::Bindings;
-using namespace JSC;
-
-static NSString *s_exception;
-static JSGlobalObject* s_exceptionEnvironment; // No need to protect this value, since we just use it for a pointer comparison.
-static NSMapTable *s_instanceWrapperCache;
-
-static NSMapTable *createInstanceWrapperCache()
-{
-#ifdef BUILDING_ON_TIGER
- return NSCreateMapTable(NSNonOwnedPointerMapKeyCallBacks, NSNonOwnedPointerMapValueCallBacks, 0);
-#else
- // NSMapTable with zeroing weak pointers is the recommended way to build caches like this under garbage collection.
- NSPointerFunctionsOptions keyOptions = NSPointerFunctionsZeroingWeakMemory | NSPointerFunctionsOpaquePersonality;
- NSPointerFunctionsOptions valueOptions = NSPointerFunctionsOpaqueMemory | NSPointerFunctionsOpaquePersonality;
- return [[NSMapTable alloc] initWithKeyOptions:keyOptions valueOptions:valueOptions capacity:0];
-#endif
-}
-
-RuntimeObject* ObjcInstance::newRuntimeObject(ExecState* exec)
-{
- return new (exec) ObjCRuntimeObject(exec, exec->lexicalGlobalObject(), this);
-}
-
-void ObjcInstance::setGlobalException(NSString* exception, JSGlobalObject* exceptionEnvironment)
-{
- NSString *oldException = s_exception;
- s_exception = [exception copy];
- [oldException release];
-
- s_exceptionEnvironment = exceptionEnvironment;
-}
-
-void ObjcInstance::moveGlobalExceptionToExecState(ExecState* exec)
-{
- if (!s_exception) {
- ASSERT(!s_exceptionEnvironment);
- return;
- }
-
- if (!s_exceptionEnvironment || s_exceptionEnvironment == exec->dynamicGlobalObject()) {
- JSLock lock(SilenceAssertionsOnly);
- throwError(exec, s_exception);
- }
-
- [s_exception release];
- s_exception = nil;
- s_exceptionEnvironment = 0;
-}
-
-ObjcInstance::ObjcInstance(id instance, PassRefPtr<RootObject> rootObject)
- : Instance(rootObject)
- , _instance(instance)
- , _class(0)
- , _pool(0)
- , _beginCount(0)
-{
-}
-
-PassRefPtr<ObjcInstance> ObjcInstance::create(id instance, PassRefPtr<RootObject> rootObject)
-{
- if (!s_instanceWrapperCache)
- s_instanceWrapperCache = createInstanceWrapperCache();
- if (void* existingWrapper = NSMapGet(s_instanceWrapperCache, instance))
- return static_cast<ObjcInstance*>(existingWrapper);
- RefPtr<ObjcInstance> wrapper = adoptRef(new ObjcInstance(instance, rootObject));
- NSMapInsert(s_instanceWrapperCache, instance, wrapper.get());
- return wrapper.release();
-}
-
-ObjcInstance::~ObjcInstance()
-{
- // Both -finalizeForWebScript and -dealloc/-finalize of _instance may require autorelease pools.
- NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
-
- ASSERT(s_instanceWrapperCache);
- ASSERT(_instance);
- NSMapRemove(s_instanceWrapperCache, _instance.get());
-
- if ([_instance.get() respondsToSelector:@selector(finalizeForWebScript)])
- [_instance.get() performSelector:@selector(finalizeForWebScript)];
- _instance = 0;
-
- [pool drain];
-}
-
-static NSAutoreleasePool* allocateAutoReleasePool()
-{
-#if defined(OBJC_API_VERSION) && OBJC_API_VERSION >= 2
- // If GC is enabled an autorelease pool is unnecessary, and the
- // pool cannot be protected from GC so may be collected leading
- // to a crash when we try to drain the release pool.
- if (objc_collectingEnabled())
- return nil;
-#endif
- return [[NSAutoreleasePool alloc] init];
-}
-
-void ObjcInstance::virtualBegin()
-{
- if (!_pool)
- _pool = allocateAutoReleasePool();
- _beginCount++;
-}
-
-void ObjcInstance::virtualEnd()
-{
- _beginCount--;
- ASSERT(_beginCount >= 0);
- if (!_beginCount) {
- [_pool drain];
- _pool = 0;
- }
-}
-
-Bindings::Class* ObjcInstance::getClass() const
-{
- if (!_instance)
- return 0;
- if (!_class)
- _class = ObjcClass::classForIsA(_instance->isa);
- return static_cast<Bindings::Class*>(_class);
-}
-
-bool ObjcInstance::supportsInvokeDefaultMethod() const
-{
- return [_instance.get() respondsToSelector:@selector(invokeDefaultMethodWithArguments:)];
-}
-
-class ObjCRuntimeMethod : public RuntimeMethod {
-public:
- ObjCRuntimeMethod(ExecState* exec, JSGlobalObject* globalObject, const Identifier& name, Bindings::MethodList& list)
- : RuntimeMethod(exec, globalObject, name, list)
- {
- }
-
- virtual const ClassInfo* classInfo() const { return &s_info; }
-
- static const ClassInfo s_info;
-};
-
-const ClassInfo ObjCRuntimeMethod::s_info = { "ObjCRuntimeMethod", &RuntimeMethod::s_info, 0, 0 };
-
-JSValue ObjcInstance::getMethod(ExecState* exec, const Identifier& propertyName)
-{
- MethodList methodList = getClass()->methodsNamed(propertyName, this);
- return new (exec) ObjCRuntimeMethod(exec, exec->lexicalGlobalObject(), propertyName, methodList);
-}
-
-JSValue ObjcInstance::invokeMethod(ExecState* exec, RuntimeMethod* runtimeMethod)
-{
- if (!asObject(runtimeMethod)->inherits(&ObjCRuntimeMethod::s_info))
- return throwError(exec, createTypeError(exec, "Attempt to invoke non-plug-in method on plug-in object."));
-
- const MethodList& methodList = *runtimeMethod->methods();
-
- // Overloading methods is not allowed in ObjectiveC. Should only be one
- // name match for a particular method.
- ASSERT(methodList.size() == 1);
-
- return invokeObjcMethod(exec, static_cast<ObjcMethod*>(methodList[0]));
-}
-
-JSValue ObjcInstance::invokeObjcMethod(ExecState* exec, ObjcMethod* method)
-{
- JSValue result = jsUndefined();
-
- JSLock::DropAllLocks dropAllLocks(SilenceAssertionsOnly); // Can't put this inside the @try scope because it unwinds incorrectly.
-
- setGlobalException(nil);
-
-@try {
- NSMethodSignature* signature = method->getMethodSignature();
- NSInvocation* invocation = [NSInvocation invocationWithMethodSignature:signature];
- [invocation setSelector:method->selector()];
- [invocation setTarget:_instance.get()];
-
- if (method->isFallbackMethod()) {
- if (objcValueTypeForType([signature methodReturnType]) != ObjcObjectType) {
- NSLog(@"Incorrect signature for invokeUndefinedMethodFromWebScript:withArguments: -- return type must be object.");
- return result;
- }
-
- // Invoke invokeUndefinedMethodFromWebScript:withArguments:, pass JavaScript function
- // name as first (actually at 2) argument and array of args as second.
- NSString* jsName = (NSString* )method->javaScriptName();
- [invocation setArgument:&jsName atIndex:2];
-
- NSMutableArray* objcArgs = [NSMutableArray array];
- int count = exec->argumentCount();
- for (int i = 0; i < count; i++) {
- ObjcValue value = convertValueToObjcValue(exec, exec->argument(i), ObjcObjectType);
- [objcArgs addObject:value.objectValue];
- }
- [invocation setArgument:&objcArgs atIndex:3];
- } else {
- unsigned count = [signature numberOfArguments];
- for (unsigned i = 2; i < count ; i++) {
- const char* type = [signature getArgumentTypeAtIndex:i];
- ObjcValueType objcValueType = objcValueTypeForType(type);
-
- // Must have a valid argument type. This method signature should have
- // been filtered already to ensure that it has acceptable argument
- // types.
- ASSERT(objcValueType != ObjcInvalidType && objcValueType != ObjcVoidType);
-
- ObjcValue value = convertValueToObjcValue(exec, exec->argument(i-2), objcValueType);
-
- switch (objcValueType) {
- case ObjcObjectType:
- [invocation setArgument:&value.objectValue atIndex:i];
- break;
- case ObjcCharType:
- case ObjcUnsignedCharType:
- [invocation setArgument:&value.charValue atIndex:i];
- break;
- case ObjcShortType:
- case ObjcUnsignedShortType:
- [invocation setArgument:&value.shortValue atIndex:i];
- break;
- case ObjcIntType:
- case ObjcUnsignedIntType:
- [invocation setArgument:&value.intValue atIndex:i];
- break;
- case ObjcLongType:
- case ObjcUnsignedLongType:
- [invocation setArgument:&value.longValue atIndex:i];
- break;
- case ObjcLongLongType:
- case ObjcUnsignedLongLongType:
- [invocation setArgument:&value.longLongValue atIndex:i];
- break;
- case ObjcFloatType:
- [invocation setArgument:&value.floatValue atIndex:i];
- break;
- case ObjcDoubleType:
- [invocation setArgument:&value.doubleValue atIndex:i];
- break;
- default:
- // Should never get here. Argument types are filtered (and
- // the assert above should have fired in the impossible case
- // of an invalid type anyway).
- fprintf(stderr, "%s: invalid type (%d)\n", __PRETTY_FUNCTION__, (int)objcValueType);
- ASSERT(false);
- }
- }
- }
-
- [invocation invoke];
-
- // Get the return value type.
- const char* type = [signature methodReturnType];
- ObjcValueType objcValueType = objcValueTypeForType(type);
-
- // Must have a valid return type. This method signature should have
- // been filtered already to ensure that it have an acceptable return
- // type.
- ASSERT(objcValueType != ObjcInvalidType);
-
- // Get the return value and convert it to a JavaScript value. Length
- // of return value will never exceed the size of largest scalar
- // or a pointer.
- char buffer[1024];
- ASSERT([signature methodReturnLength] < 1024);
-
- if (*type != 'v') {
- [invocation getReturnValue:buffer];
- result = convertObjcValueToValue(exec, buffer, objcValueType, m_rootObject.get());
- }
-} @catch(NSException* localException) {
-}
- moveGlobalExceptionToExecState(exec);
-
- // Work around problem in some versions of GCC where result gets marked volatile and
- // it can't handle copying from a volatile to non-volatile.
- return const_cast<JSValue&>(result);
-}
-
-JSValue ObjcInstance::invokeDefaultMethod(ExecState* exec)
-{
- JSValue result = jsUndefined();
-
- JSLock::DropAllLocks dropAllLocks(SilenceAssertionsOnly); // Can't put this inside the @try scope because it unwinds incorrectly.
- setGlobalException(nil);
-
-@try {
- if (![_instance.get() respondsToSelector:@selector(invokeDefaultMethodWithArguments:)])
- return result;
-
- NSMethodSignature* signature = [_instance.get() methodSignatureForSelector:@selector(invokeDefaultMethodWithArguments:)];
- NSInvocation* invocation = [NSInvocation invocationWithMethodSignature:signature];
- [invocation setSelector:@selector(invokeDefaultMethodWithArguments:)];
- [invocation setTarget:_instance.get()];
-
- if (objcValueTypeForType([signature methodReturnType]) != ObjcObjectType) {
- NSLog(@"Incorrect signature for invokeDefaultMethodWithArguments: -- return type must be object.");
- return result;
- }
-
- NSMutableArray* objcArgs = [NSMutableArray array];
- unsigned count = exec->argumentCount();
- for (unsigned i = 0; i < count; i++) {
- ObjcValue value = convertValueToObjcValue(exec, exec->argument(i), ObjcObjectType);
- [objcArgs addObject:value.objectValue];
- }
- [invocation setArgument:&objcArgs atIndex:2];
-
- [invocation invoke];
-
- // Get the return value type, should always be "@" because of
- // check above.
- const char* type = [signature methodReturnType];
- ObjcValueType objcValueType = objcValueTypeForType(type);
-
- // Get the return value and convert it to a JavaScript value. Length
- // of return value will never exceed the size of a pointer, so we're
- // OK with 32 here.
- char buffer[32];
- [invocation getReturnValue:buffer];
- result = convertObjcValueToValue(exec, buffer, objcValueType, m_rootObject.get());
-} @catch(NSException* localException) {
-}
- moveGlobalExceptionToExecState(exec);
-
- // Work around problem in some versions of GCC where result gets marked volatile and
- // it can't handle copying from a volatile to non-volatile.
- return const_cast<JSValue&>(result);
-}
-
-bool ObjcInstance::setValueOfUndefinedField(ExecState* exec, const Identifier& property, JSValue aValue)
-{
- id targetObject = getObject();
- if (![targetObject respondsToSelector:@selector(setValue:forUndefinedKey:)])
- return false;
-
- JSLock::DropAllLocks dropAllLocks(SilenceAssertionsOnly); // Can't put this inside the @try scope because it unwinds incorrectly.
-
- // This check is not really necessary because NSObject implements
- // setValue:forUndefinedKey:, and unfortunately the default implementation
- // throws an exception.
- if ([targetObject respondsToSelector:@selector(setValue:forUndefinedKey:)]){
- setGlobalException(nil);
-
- ObjcValue objcValue = convertValueToObjcValue(exec, aValue, ObjcObjectType);
-
- @try {
- [targetObject setValue:objcValue.objectValue forUndefinedKey:[NSString stringWithCString:property.ascii().data() encoding:NSASCIIStringEncoding]];
- } @catch(NSException* localException) {
- // Do nothing. Class did not override valueForUndefinedKey:.
- }
-
- moveGlobalExceptionToExecState(exec);
- }
-
- return true;
-}
-
-JSValue ObjcInstance::getValueOfUndefinedField(ExecState* exec, const Identifier& property) const
-{
- JSValue result = jsUndefined();
-
- id targetObject = getObject();
-
- JSLock::DropAllLocks dropAllLocks(SilenceAssertionsOnly); // Can't put this inside the @try scope because it unwinds incorrectly.
-
- // This check is not really necessary because NSObject implements
- // valueForUndefinedKey:, and unfortunately the default implementation
- // throws an exception.
- if ([targetObject respondsToSelector:@selector(valueForUndefinedKey:)]){
- setGlobalException(nil);
-
- @try {
- id objcValue = [targetObject valueForUndefinedKey:[NSString stringWithCString:property.ascii().data() encoding:NSASCIIStringEncoding]];
- result = convertObjcValueToValue(exec, &objcValue, ObjcObjectType, m_rootObject.get());
- } @catch(NSException* localException) {
- // Do nothing. Class did not override valueForUndefinedKey:.
- }
-
- moveGlobalExceptionToExecState(exec);
- }
-
- // Work around problem in some versions of GCC where result gets marked volatile and
- // it can't handle copying from a volatile to non-volatile.
- return const_cast<JSValue&>(result);
-}
-
-JSValue ObjcInstance::defaultValue(ExecState* exec, PreferredPrimitiveType hint) const
-{
- if (hint == PreferString)
- return stringValue(exec);
- if (hint == PreferNumber)
- return numberValue(exec);
- if ([_instance.get() isKindOfClass:[NSString class]])
- return stringValue(exec);
- if ([_instance.get() isKindOfClass:[NSNumber class]])
- return numberValue(exec);
- return valueOf(exec);
-}
-
-JSValue ObjcInstance::stringValue(ExecState* exec) const
-{
- return convertNSStringToString(exec, [getObject() description]);
-}
-
-JSValue ObjcInstance::numberValue(ExecState*) const
-{
- // FIXME: Implement something sensible
- return jsNumber(0);
-}
-
-JSValue ObjcInstance::booleanValue() const
-{
- // FIXME: Implement something sensible
- return jsBoolean(false);
-}
-
-JSValue ObjcInstance::valueOf(ExecState* exec) const
-{
- return stringValue(exec);
-}
diff --git a/WebCore/bridge/objc/objc_runtime.h b/WebCore/bridge/objc/objc_runtime.h
deleted file mode 100644
index 60fbdac..0000000
--- a/WebCore/bridge/objc/objc_runtime.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (C) 2004, 2008 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef KJS_BINDINGS_OBJC_RUNTIME_H
-#define KJS_BINDINGS_OBJC_RUNTIME_H
-
-#include "Bridge.h"
-#include "objc_header.h"
-#include <runtime/JSGlobalObject.h>
-#include <runtime/JSObjectWithGlobalObject.h>
-#include <wtf/RetainPtr.h>
-
-namespace JSC {
-namespace Bindings {
-
-ClassStructPtr webScriptObjectClass();
-ClassStructPtr webUndefinedClass();
-
-class ObjcInstance;
-
-class ObjcField : public Field {
-public:
- ObjcField(IvarStructPtr);
- ObjcField(CFStringRef name);
-
- virtual JSValue valueFromInstance(ExecState*, const Instance*) const;
- virtual void setValueToInstance(ExecState*, const Instance*, JSValue) const;
-
-private:
- IvarStructPtr _ivar;
- RetainPtr<CFStringRef> _name;
-};
-
-class ObjcMethod : public Method {
-public:
- ObjcMethod() : _objcClass(0), _selector(0), _javaScriptName(0) {}
- ObjcMethod(ClassStructPtr aClass, SEL _selector);
-
- virtual int numParameters() const;
-
- NSMethodSignature *getMethodSignature() const;
-
- bool isFallbackMethod() const { return _selector == @selector(invokeUndefinedMethodFromWebScript:withArguments:); }
- void setJavaScriptName(CFStringRef n) { _javaScriptName = n; }
- CFStringRef javaScriptName() const { return _javaScriptName.get(); }
-
- SEL selector() const { return _selector; }
-
-private:
- ClassStructPtr _objcClass;
- SEL _selector;
- RetainPtr<CFStringRef> _javaScriptName;
-};
-
-class ObjcArray : public Array {
-public:
- ObjcArray(ObjectStructPtr, PassRefPtr<RootObject>);
-
- virtual void setValueAt(ExecState *exec, unsigned int index, JSValue aValue) const;
- virtual JSValue valueAt(ExecState *exec, unsigned int index) const;
- virtual unsigned int getLength() const;
-
- ObjectStructPtr getObjcArray() const { return _array.get(); }
-
- static JSValue convertObjcArrayToArray(ExecState *exec, ObjectStructPtr anObject);
-
-private:
- RetainPtr<ObjectStructPtr> _array;
-};
-
-class ObjcFallbackObjectImp : public JSObjectWithGlobalObject {
-public:
- ObjcFallbackObjectImp(ExecState*, JSGlobalObject*, ObjcInstance*, const Identifier& propertyName);
-
- static const ClassInfo s_info;
-
- const Identifier& propertyName() const { return _item; }
-
- static ObjectPrototype* createPrototype(ExecState*, JSGlobalObject* globalObject)
- {
- return globalObject->objectPrototype();
- }
-
- static PassRefPtr<Structure> createStructure(JSValue prototype)
- {
- return Structure::create(prototype, TypeInfo(ObjectType, StructureFlags), AnonymousSlotCount);
- }
-
-private:
- static const unsigned StructureFlags = OverridesGetOwnPropertySlot | JSObject::StructureFlags;
- virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&);
- virtual bool getOwnPropertyDescriptor(ExecState*, const Identifier&, PropertyDescriptor&);
- virtual void put(ExecState*, const Identifier& propertyName, JSValue, PutPropertySlot&);
- virtual CallType getCallData(CallData&);
- virtual bool deleteProperty(ExecState*, const Identifier& propertyName);
- virtual JSValue defaultValue(ExecState*, PreferredPrimitiveType) const;
-
- virtual bool toBoolean(ExecState*) const;
-
- virtual const ClassInfo* classInfo() const { return &s_info; }
-
- RefPtr<ObjcInstance> _instance;
- Identifier _item;
-};
-
-} // namespace Bindings
-} // namespace JSC
-
-#endif
diff --git a/WebCore/bridge/objc/objc_runtime.mm b/WebCore/bridge/objc/objc_runtime.mm
deleted file mode 100644
index 3c4ba23..0000000
--- a/WebCore/bridge/objc/objc_runtime.mm
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * Copyright (C) 2004, 2008 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "objc_runtime.h"
-
-#include "JSDOMBinding.h"
-#include "ObjCRuntimeObject.h"
-#include "WebScriptObject.h"
-#include "objc_instance.h"
-#include "runtime_array.h"
-#include "runtime_object.h"
-#include <runtime/Error.h>
-#include <runtime/JSGlobalObject.h>
-#include <runtime/JSLock.h>
-#include <runtime/ObjectPrototype.h>
-#include <wtf/RetainPtr.h>
-
-using namespace WebCore;
-
-namespace JSC {
-namespace Bindings {
-
-ClassStructPtr webScriptObjectClass()
-{
- static ClassStructPtr<WebScriptObject> webScriptObjectClass = NSClassFromString(@"WebScriptObject");
- return webScriptObjectClass;
-}
-
-ClassStructPtr webUndefinedClass()
-{
- static ClassStructPtr<WebUndefined> webUndefinedClass = NSClassFromString(@"WebUndefined");
- return webUndefinedClass;
-}
-
-// ---------------------- ObjcMethod ----------------------
-
-ObjcMethod::ObjcMethod(ClassStructPtr aClass, SEL selector)
- : _objcClass(aClass)
- , _selector(selector)
-{
-}
-
-int ObjcMethod::numParameters() const
-{
- return [getMethodSignature() numberOfArguments] - 2;
-}
-
-NSMethodSignature* ObjcMethod::getMethodSignature() const
-{
- return [_objcClass instanceMethodSignatureForSelector:_selector];
-}
-
-// ---------------------- ObjcField ----------------------
-
-ObjcField::ObjcField(Ivar ivar)
- : _ivar(ivar)
-#if defined(OBJC_API_VERSION) && OBJC_API_VERSION >= 2
- , _name(AdoptCF, CFStringCreateWithCString(0, ivar_getName(_ivar), kCFStringEncodingASCII))
-#else
- , _name(AdoptCF, CFStringCreateWithCString(0, _ivar->ivar_name, kCFStringEncodingASCII))
-#endif
-{
-}
-
-ObjcField::ObjcField(CFStringRef name)
- : _ivar(0)
- , _name(name)
-{
-}
-
-JSValue ObjcField::valueFromInstance(ExecState* exec, const Instance* instance) const
-{
- JSValue result = jsUndefined();
-
- id targetObject = (static_cast<const ObjcInstance*>(instance))->getObject();
-
- JSLock::DropAllLocks dropAllLocks(SilenceAssertionsOnly); // Can't put this inside the @try scope because it unwinds incorrectly.
-
- @try {
- if (id objcValue = [targetObject valueForKey:(NSString *)_name.get()])
- result = convertObjcValueToValue(exec, &objcValue, ObjcObjectType, instance->rootObject());
- } @catch(NSException* localException) {
- JSLock::lock(SilenceAssertionsOnly);
- throwError(exec, [localException reason]);
- JSLock::unlock(SilenceAssertionsOnly);
- }
-
- // Work around problem in some versions of GCC where result gets marked volatile and
- // it can't handle copying from a volatile to non-volatile.
- return const_cast<JSValue&>(result);
-}
-
-static id convertValueToObjcObject(ExecState* exec, JSValue value)
-{
- RefPtr<RootObject> rootObject = findRootObject(exec->dynamicGlobalObject());
- if (!rootObject)
- return nil;
- return [webScriptObjectClass() _convertValueToObjcValue:value originRootObject:rootObject.get() rootObject:rootObject.get()];
-}
-
-void ObjcField::setValueToInstance(ExecState* exec, const Instance* instance, JSValue aValue) const
-{
- id targetObject = (static_cast<const ObjcInstance*>(instance))->getObject();
- id value = convertValueToObjcObject(exec, aValue);
-
- JSLock::DropAllLocks dropAllLocks(SilenceAssertionsOnly); // Can't put this inside the @try scope because it unwinds incorrectly.
-
- @try {
- [targetObject setValue:value forKey:(NSString *)_name.get()];
- } @catch(NSException* localException) {
- JSLock::lock(SilenceAssertionsOnly);
- throwError(exec, [localException reason]);
- JSLock::unlock(SilenceAssertionsOnly);
- }
-}
-
-// ---------------------- ObjcArray ----------------------
-
-ObjcArray::ObjcArray(ObjectStructPtr a, PassRefPtr<RootObject> rootObject)
- : Array(rootObject)
- , _array(a)
-{
-}
-
-void ObjcArray::setValueAt(ExecState* exec, unsigned int index, JSValue aValue) const
-{
- if (![_array.get() respondsToSelector:@selector(insertObject:atIndex:)]) {
- throwError(exec, createTypeError(exec, "Array is not mutable."));
- return;
- }
-
- if (index > [_array.get() count]) {
- throwError(exec, createRangeError(exec, "Index exceeds array size."));
- return;
- }
-
- // Always try to convert the value to an ObjC object, so it can be placed in the
- // array.
- ObjcValue oValue = convertValueToObjcValue (exec, aValue, ObjcObjectType);
-
- @try {
- [_array.get() insertObject:oValue.objectValue atIndex:index];
- } @catch(NSException* localException) {
- throwError(exec, createError(exec, "Objective-C exception."));
- }
-}
-
-JSValue ObjcArray::valueAt(ExecState* exec, unsigned int index) const
-{
- if (index > [_array.get() count])
- return throwError(exec, createRangeError(exec, "Index exceeds array size."));
- @try {
- id obj = [_array.get() objectAtIndex:index];
- if (obj)
- return convertObjcValueToValue (exec, &obj, ObjcObjectType, m_rootObject.get());
- } @catch(NSException* localException) {
- return throwError(exec, createError(exec, "Objective-C exception."));
- }
- return jsUndefined();
-}
-
-unsigned int ObjcArray::getLength() const
-{
- return [_array.get() count];
-}
-
-const ClassInfo ObjcFallbackObjectImp::s_info = { "ObjcFallbackObject", 0, 0, 0 };
-
-ObjcFallbackObjectImp::ObjcFallbackObjectImp(ExecState* exec, JSGlobalObject* globalObject, ObjcInstance* i, const Identifier& propertyName)
- // FIXME: deprecatedGetDOMStructure uses the prototype off of the wrong global object
- : JSObjectWithGlobalObject(globalObject, deprecatedGetDOMStructure<ObjcFallbackObjectImp>(exec))
- , _instance(i)
- , _item(propertyName)
-{
-}
-
-bool ObjcFallbackObjectImp::getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot& slot)
-{
- // keep the prototype from getting called instead of just returning false
- slot.setUndefined();
- return true;
-}
-
-bool ObjcFallbackObjectImp::getOwnPropertyDescriptor(ExecState*, const Identifier&, PropertyDescriptor& descriptor)
-{
- // keep the prototype from getting called instead of just returning false
- descriptor.setUndefined();
- return true;
-}
-
-void ObjcFallbackObjectImp::put(ExecState*, const Identifier&, JSValue, PutPropertySlot&)
-{
-}
-
-static EncodedJSValue JSC_HOST_CALL callObjCFallbackObject(ExecState* exec)
-{
- JSValue thisValue = exec->hostThisValue();
- if (!thisValue.inherits(&ObjCRuntimeObject::s_info))
- return throwVMTypeError(exec);
-
- JSValue result = jsUndefined();
-
- ObjCRuntimeObject* runtimeObject = static_cast<ObjCRuntimeObject*>(asObject(thisValue));
- ObjcInstance* objcInstance = runtimeObject->getInternalObjCInstance();
-
- if (!objcInstance)
- return JSValue::encode(RuntimeObject::throwInvalidAccessError(exec));
-
- objcInstance->begin();
-
- id targetObject = objcInstance->getObject();
-
- if ([targetObject respondsToSelector:@selector(invokeUndefinedMethodFromWebScript:withArguments:)]){
- ObjcClass* objcClass = static_cast<ObjcClass*>(objcInstance->getClass());
- OwnPtr<ObjcMethod> fallbackMethod(new ObjcMethod(objcClass->isa(), @selector(invokeUndefinedMethodFromWebScript:withArguments:)));
- const Identifier& nameIdentifier = static_cast<ObjcFallbackObjectImp*>(exec->callee())->propertyName();
- RetainPtr<CFStringRef> name(AdoptCF, CFStringCreateWithCharacters(0, nameIdentifier.characters(), nameIdentifier.length()));
- fallbackMethod->setJavaScriptName(name.get());
- result = objcInstance->invokeObjcMethod(exec, fallbackMethod.get());
- }
-
- objcInstance->end();
-
- return JSValue::encode(result);
-}
-
-CallType ObjcFallbackObjectImp::getCallData(CallData& callData)
-{
- id targetObject = _instance->getObject();
- if (![targetObject respondsToSelector:@selector(invokeUndefinedMethodFromWebScript:withArguments:)])
- return CallTypeNone;
- callData.native.function = callObjCFallbackObject;
- return CallTypeHost;
-}
-
-bool ObjcFallbackObjectImp::deleteProperty(ExecState*, const Identifier&)
-{
- return false;
-}
-
-JSValue ObjcFallbackObjectImp::defaultValue(ExecState* exec, PreferredPrimitiveType) const
-{
- return _instance->getValueOfUndefinedField(exec, _item);
-}
-
-bool ObjcFallbackObjectImp::toBoolean(ExecState *) const
-{
- id targetObject = _instance->getObject();
-
- if ([targetObject respondsToSelector:@selector(invokeUndefinedMethodFromWebScript:withArguments:)])
- return true;
-
- return false;
-}
-
-}
-}
diff --git a/WebCore/bridge/objc/objc_utility.h b/WebCore/bridge/objc/objc_utility.h
deleted file mode 100644
index 4810752..0000000
--- a/WebCore/bridge/objc/objc_utility.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2004 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef KJS_BINDINGS_OBJC_UTILITY_H
-#define KJS_BINDINGS_OBJC_UTILITY_H
-
-#include <CoreFoundation/CoreFoundation.h>
-
-#include "objc_header.h"
-#include <runtime/Error.h>
-#include <runtime/JSObject.h>
-
-#ifdef __OBJC__
-@class NSString;
-#else
-class NSString;
-#endif
-
-namespace JSC {
-namespace Bindings {
-
-typedef union {
- ObjectStructPtr objectValue;
- bool booleanValue;
- char charValue;
- short shortValue;
- int intValue;
- long longValue;
- long long longLongValue;
- float floatValue;
- double doubleValue;
-} ObjcValue;
-
-typedef enum {
- ObjcVoidType,
- ObjcObjectType,
- ObjcCharType,
- ObjcUnsignedCharType,
- ObjcShortType,
- ObjcUnsignedShortType,
- ObjcIntType,
- ObjcUnsignedIntType,
- ObjcLongType,
- ObjcUnsignedLongType,
- ObjcLongLongType,
- ObjcUnsignedLongLongType,
- ObjcFloatType,
- ObjcDoubleType,
- ObjcInvalidType
-} ObjcValueType;
-
-class RootObject;
-
-ObjcValue convertValueToObjcValue(ExecState*, JSValue, ObjcValueType);
-JSValue convertNSStringToString(ExecState* exec, NSString *nsstring);
-JSValue convertObjcValueToValue(ExecState*, void* buffer, ObjcValueType, RootObject*);
-ObjcValueType objcValueTypeForType(const char *type);
-
-bool convertJSMethodNameToObjc(const char *JSName, char *buffer, size_t bufferSize);
-
-JSObject *throwError(ExecState *, NSString *message);
-
-} // namespace Bindings
-} // namespace JSC
-
-#endif
diff --git a/WebCore/bridge/objc/objc_utility.mm b/WebCore/bridge/objc/objc_utility.mm
deleted file mode 100644
index dfba852..0000000
--- a/WebCore/bridge/objc/objc_utility.mm
+++ /dev/null
@@ -1,373 +0,0 @@
-/*
- * Copyright (C) 2004 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "objc_utility.h"
-
-#include "objc_instance.h"
-#include "runtime_array.h"
-#include "runtime_object.h"
-#include "WebScriptObject.h"
-#include <runtime/JSGlobalObject.h>
-#include <runtime/JSLock.h>
-#include <wtf/Assertions.h>
-
-#if !defined(_C_LNG_LNG)
-#define _C_LNG_LNG 'q'
-#endif
-
-#if !defined(_C_ULNG_LNG)
-#define _C_ULNG_LNG 'Q'
-#endif
-
-#if !defined(_C_CONST)
-#define _C_CONST 'r'
-#endif
-
-#if !defined(_C_BYCOPY)
-#define _C_BYCOPY 'O'
-#endif
-
-#if !defined(_C_BYREF)
-#define _C_BYREF 'R'
-#endif
-
-#if !defined(_C_ONEWAY)
-#define _C_ONEWAY 'V'
-#endif
-
-#if !defined(_C_GCINVISIBLE)
-#define _C_GCINVISIBLE '!'
-#endif
-
-namespace JSC {
-namespace Bindings {
-
-/*
- By default, a JavaScript method name is produced by concatenating the
- components of an ObjectiveC method name, replacing ':' with '_', and
- escaping '_' and '$' with a leading '$', such that '_' becomes "$_" and
- '$' becomes "$$". For example:
-
- ObjectiveC name Default JavaScript name
- moveTo:: moveTo__
- moveTo_ moveTo$_
- moveTo$_ moveTo$$$_
-
- This function performs the inverse of that operation.
-
- @result Fills 'buffer' with the ObjectiveC method name that corresponds to 'JSName'.
- Returns true for success, false for failure. (Failure occurs when 'buffer'
- is not big enough to hold the result.)
-*/
-bool convertJSMethodNameToObjc(const char *JSName, char *buffer, size_t bufferSize)
-{
- ASSERT(JSName && buffer);
-
- const char *sp = JSName; // source pointer
- char *dp = buffer; // destination pointer
-
- char *end = buffer + bufferSize;
- while (dp < end) {
- if (*sp == '$') {
- ++sp;
- *dp = *sp;
- } else if (*sp == '_')
- *dp = ':';
- else
- *dp = *sp;
-
- // If a future coder puts funny ++ operators above, we might write off the end
- // of the buffer in the middle of this loop. Let's make sure to check for that.
- ASSERT(dp < end);
-
- if (*sp == 0) { // We finished converting JSName
- ASSERT(strlen(JSName) < bufferSize);
- return true;
- }
-
- ++sp;
- ++dp;
- }
-
- return false; // We ran out of buffer before converting JSName
-}
-
-/*
-
- JavaScript to ObjC
- Number coerced to char, short, int, long, float, double, or NSNumber, as appropriate
- String NSString
- wrapper id
- Object WebScriptObject
- null NSNull
- [], other exception
-
-*/
-ObjcValue convertValueToObjcValue(ExecState* exec, JSValue value, ObjcValueType type)
-{
- ObjcValue result;
- double d = 0;
-
- if (value.isNumber() || value.isString() || value.isBoolean())
- d = value.toNumber(exec);
-
- switch (type) {
- case ObjcObjectType: {
- JSLock lock(SilenceAssertionsOnly);
-
- JSGlobalObject *originGlobalObject = exec->dynamicGlobalObject();
- RootObject* originRootObject = findRootObject(originGlobalObject);
-
- JSGlobalObject* globalObject = 0;
- if (value.isObject() && asObject(value)->isGlobalObject())
- globalObject = static_cast<JSGlobalObject*>(asObject(value));
-
- if (!globalObject)
- globalObject = originGlobalObject;
-
- RootObject* rootObject = findRootObject(globalObject);
- result.objectValue = rootObject
- ? [webScriptObjectClass() _convertValueToObjcValue:value originRootObject:originRootObject rootObject:rootObject]
- : nil;
- }
- break;
-
- case ObjcCharType:
- case ObjcUnsignedCharType:
- result.charValue = (char)d;
- break;
- case ObjcShortType:
- case ObjcUnsignedShortType:
- result.shortValue = (short)d;
- break;
- case ObjcIntType:
- case ObjcUnsignedIntType:
- result.intValue = (int)d;
- break;
- case ObjcLongType:
- case ObjcUnsignedLongType:
- result.longValue = (long)d;
- break;
- case ObjcLongLongType:
- case ObjcUnsignedLongLongType:
- result.longLongValue = (long long)d;
- break;
- case ObjcFloatType:
- result.floatValue = (float)d;
- break;
- case ObjcDoubleType:
- result.doubleValue = (double)d;
- break;
- case ObjcVoidType:
- bzero(&result, sizeof(ObjcValue));
- break;
-
- case ObjcInvalidType:
- default:
- // FIXME: throw an exception?
- break;
- }
-
- return result;
-}
-
-JSValue convertNSStringToString(ExecState* exec, NSString *nsstring)
-{
- JSLock lock(SilenceAssertionsOnly);
-
- unichar *chars;
- unsigned int length = [nsstring length];
- chars = (unichar *)malloc(sizeof(unichar)*length);
- [nsstring getCharacters:chars];
- UString u((const UChar*)chars, length);
- JSValue aValue = jsString(exec, u);
- free((void *)chars);
- return aValue;
-}
-
-/*
- ObjC to JavaScript
- ---- ----------
- char number
- short number
- int number
- long number
- float number
- double number
- NSNumber boolean or number
- NSString string
- NSArray array
- NSNull null
- WebScriptObject underlying JavaScript object
- WebUndefined undefined
- id object wrapper
- other should not happen
-*/
-JSValue convertObjcValueToValue(ExecState* exec, void* buffer, ObjcValueType type, RootObject* rootObject)
-{
- JSLock lock(SilenceAssertionsOnly);
-
- switch (type) {
- case ObjcObjectType: {
- id obj = *(id*)buffer;
- if ([obj isKindOfClass:[NSString class]])
- return convertNSStringToString(exec, (NSString *)obj);
- if ([obj isKindOfClass:webUndefinedClass()])
- return jsUndefined();
- if ((CFBooleanRef)obj == kCFBooleanTrue)
- return jsBoolean(true);
- if ((CFBooleanRef)obj == kCFBooleanFalse)
- return jsBoolean(false);
- if ([obj isKindOfClass:[NSNumber class]])
- return jsNumber([obj doubleValue]);
- if ([obj isKindOfClass:[NSArray class]])
- return new (exec) RuntimeArray(exec, new ObjcArray(obj, rootObject));
- if ([obj isKindOfClass:webScriptObjectClass()]) {
- JSObject* imp = [obj _imp];
- return imp ? imp : jsUndefined();
- }
- if ([obj isKindOfClass:[NSNull class]])
- return jsNull();
- if (obj == 0)
- return jsUndefined();
- return ObjcInstance::create(obj, rootObject)->createRuntimeObject(exec);
- }
- case ObjcCharType:
- return jsNumber(*(char*)buffer);
- case ObjcUnsignedCharType:
- return jsNumber(*(unsigned char*)buffer);
- case ObjcShortType:
- return jsNumber(*(short*)buffer);
- case ObjcUnsignedShortType:
- return jsNumber(*(unsigned short*)buffer);
- case ObjcIntType:
- return jsNumber(*(int*)buffer);
- case ObjcUnsignedIntType:
- return jsNumber(*(unsigned int*)buffer);
- case ObjcLongType:
- return jsNumber(*(long*)buffer);
- case ObjcUnsignedLongType:
- return jsNumber(*(unsigned long*)buffer);
- case ObjcLongLongType:
- return jsNumber(*(long long*)buffer);
- case ObjcUnsignedLongLongType:
- return jsNumber(*(unsigned long long*)buffer);
- case ObjcFloatType:
- return jsNumber(*(float*)buffer);
- case ObjcDoubleType:
- return jsNumber(*(double*)buffer);
- default:
- // Should never get here. Argument types are filtered.
- fprintf(stderr, "%s: invalid type (%d)\n", __PRETTY_FUNCTION__, (int)type);
- ASSERT(false);
- }
-
- return jsUndefined();
-}
-
-ObjcValueType objcValueTypeForType(const char *type)
-{
- int typeLength = strlen(type);
- ObjcValueType objcValueType = ObjcInvalidType;
-
- for (int i = 0; i < typeLength; ++i) {
- char typeChar = type[i];
- switch (typeChar) {
- case _C_CONST:
- case _C_BYCOPY:
- case _C_BYREF:
- case _C_ONEWAY:
- case _C_GCINVISIBLE:
- // skip these type modifiers
- break;
- case _C_ID:
- objcValueType = ObjcObjectType;
- break;
- case _C_CHR:
- objcValueType = ObjcCharType;
- break;
- case _C_UCHR:
- objcValueType = ObjcUnsignedCharType;
- break;
- case _C_SHT:
- objcValueType = ObjcShortType;
- break;
- case _C_USHT:
- objcValueType = ObjcUnsignedShortType;
- break;
- case _C_INT:
- objcValueType = ObjcIntType;
- break;
- case _C_UINT:
- objcValueType = ObjcUnsignedIntType;
- break;
- case _C_LNG:
- objcValueType = ObjcLongType;
- break;
- case _C_ULNG:
- objcValueType = ObjcUnsignedLongType;
- break;
- case _C_LNG_LNG:
- objcValueType = ObjcLongLongType;
- break;
- case _C_ULNG_LNG:
- objcValueType = ObjcUnsignedLongLongType;
- break;
- case _C_FLT:
- objcValueType = ObjcFloatType;
- break;
- case _C_DBL:
- objcValueType = ObjcDoubleType;
- break;
- case _C_VOID:
- objcValueType = ObjcVoidType;
- break;
- default:
- // Unhandled type. We don't handle C structs, unions, etc.
- // FIXME: throw an exception?
- ASSERT(false);
- }
-
- if (objcValueType != ObjcInvalidType)
- break;
- }
-
- return objcValueType;
-}
-
-JSObject *throwError(ExecState *exec, NSString *message)
-{
- ASSERT(message);
- size_t length = [message length];
- unichar *buffer = new unichar[length];
- [message getCharacters:buffer];
- JSObject *error = JSC::throwError(exec, JSC::createError(exec, UString(buffer, length)));
- delete [] buffer;
- return error;
-}
-
-}
-}
diff --git a/WebCore/bridge/qt/qt_class.cpp b/WebCore/bridge/qt/qt_class.cpp
deleted file mode 100644
index 4c29c69..0000000
--- a/WebCore/bridge/qt/qt_class.cpp
+++ /dev/null
@@ -1,225 +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 "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, const Identifier& identifier)
-{
- QtInstance* qtinst = static_cast<QtInstance*>(inst);
-
- const UString& ustring = identifier.ustring();
- const QByteArray name = QString(reinterpret_cast<const QChar*>(ustring.characters()), ustring.length()).toAscii();
-
- // First see if we have a cache hit
- JSObject* val = qtinst->m_methods.value(name);
- if (val)
- return val;
-
- // Nope, create an entry
- const QByteArray normal = QMetaObject::normalizedSignature(name.constData());
-
- // See if there is an exact match
- int index = -1;
- if (normal.contains('(') && (index = m_metaObject->indexOfMethod(normal)) != -1) {
- QMetaMethod m = m_metaObject->method(index);
- if (m.access() != QMetaMethod::Private) {
- QtRuntimeMetaMethod* val = new (exec) QtRuntimeMetaMethod(exec, identifier, static_cast<QtInstance*>(inst), index, normal, false);
- qtinst->m_methods.insert(name, val);
- return val;
- }
- }
-
- // Nope.. try a basename match
- const int count = m_metaObject->methodCount();
- for (index = count - 1; index >= 0; --index) {
- const QMetaMethod m = m_metaObject->method(index);
- if (m.access() == QMetaMethod::Private)
- continue;
-
- int iter = 0;
- const char* signature = m.signature();
- while (signature[iter] && signature[iter] != '(')
- ++iter;
-
- if (normal == QByteArray::fromRawData(signature, iter)) {
- QtRuntimeMetaMethod* val = new (exec) QtRuntimeMetaMethod(exec, identifier, static_cast<QtInstance*>(inst), index, normal, false);
- qtinst->m_methods.insert(name, val);
- return val;
- }
- }
-
- return jsUndefined();
-}
-
-// This functionality is handled by the fallback case above...
-MethodList QtClass::methodsNamed(const Identifier&, Instance*) const
-{
- return MethodList();
-}
-
-// ### 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(const Identifier& identifier, Instance* instance) const
-{
- // Check static properties first
- QtInstance* qtinst = static_cast<QtInstance*>(instance);
-
- QObject* obj = qtinst->getObject();
- const UString& ustring = identifier.ustring();
- const QString name(reinterpret_cast<const QChar*>(ustring.characters()), ustring.length());
- const QByteArray ascii = name.toAscii();
-
- // 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/WebCore/bridge/qt/qt_class.h b/WebCore/bridge/qt/qt_class.h
deleted file mode 100644
index 9d55cc5..0000000
--- a/WebCore/bridge/qt/qt_class.h
+++ /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 "Bridge.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 MethodList methodsNamed(const Identifier&, Instance*) const;
- virtual Field* fieldNamed(const Identifier&, Instance*) const;
-
- virtual JSValue fallbackObject(ExecState*, Instance*, const Identifier&);
-
-private:
- QtClass(const QtClass&); // prohibit copying
- QtClass& operator=(const QtClass&); // prohibit assignment
-
- const QMetaObject* m_metaObject;
-};
-
-} // namespace Bindings
-} // namespace JSC
-
-#endif
diff --git a/WebCore/bridge/qt/qt_instance.cpp b/WebCore/bridge/qt/qt_instance.cpp
deleted file mode 100644
index 78263e9..0000000
--- a/WebCore/bridge/qt/qt_instance.cpp
+++ /dev/null
@@ -1,397 +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 "Error.h"
-#include "JSDOMBinding.h"
-#include "JSGlobalObject.h"
-#include "JSLock.h"
-#include "ObjectPrototype.h"
-#include "PropertyNameArray.h"
-#include "qt_class.h"
-#include "qt_runtime.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:
- QtRuntimeObject(ExecState*, JSGlobalObject*, PassRefPtr<Instance>);
-
- static const ClassInfo s_info;
-
- virtual void markChildren(MarkStack& markStack)
- {
- RuntimeObject::markChildren(markStack);
- QtInstance* instance = static_cast<QtInstance*>(getInternalInstance());
- if (instance)
- instance->markAggregate(markStack);
- }
-
- static PassRefPtr<Structure> createStructure(JSValue prototype)
- {
- return Structure::create(prototype, TypeInfo(ObjectType, StructureFlags), AnonymousSlotCount);
- }
-
-protected:
- static const unsigned StructureFlags = RuntimeObject::StructureFlags | OverridesMarkChildren;
-
-private:
- virtual const ClassInfo* classInfo() const { return &s_info; }
-};
-
-const ClassInfo QtRuntimeObject::s_info = { "QtRuntimeObject", &RuntimeObject::s_info, 0, 0 };
-
-QtRuntimeObject::QtRuntimeObject(ExecState* exec, JSGlobalObject* globalObject, PassRefPtr<Instance> instance)
- : RuntimeObject(exec, globalObject, WebCore::deprecatedGetDOMStructure<QtRuntimeObject>(exec), instance)
-{
-}
-
-// QtInstance
-QtInstance::QtInstance(QObject* o, PassRefPtr<RootObject> rootObject, QScriptEngine::ValueOwnership ownership)
- : Instance(rootObject)
- , m_class(0)
- , m_object(o)
- , m_hashkey(o)
- , m_defaultMethod(0)
- , m_ownership(ownership)
-{
-}
-
-QtInstance::~QtInstance()
-{
- JSLock lock(SilenceAssertionsOnly);
-
- cachedInstances.remove(m_hashkey);
-
- // clean up (unprotect from gc) the JSValues we've created
- m_methods.clear();
-
- qDeleteAll(m_fields);
- m_fields.clear();
-
- if (m_object) {
- switch (m_ownership) {
- case QScriptEngine::QtOwnership:
- break;
- case QScriptEngine::AutoOwnership:
- if (m_object->parent())
- break;
- // fall through!
- case QScriptEngine::ScriptOwnership:
- delete m_object;
- break;
- }
- }
-}
-
-PassRefPtr<QtInstance> QtInstance::getQtInstance(QObject* o, PassRefPtr<RootObject> rootObject, QScriptEngine::ValueOwnership ownership)
-{
- JSLock lock(SilenceAssertionsOnly);
-
- 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, const Identifier& propertyName, PropertySlot& slot)
-{
- return object->JSObject::getOwnPropertySlot(exec, propertyName, slot);
-}
-
-void QtInstance::put(JSObject* object, ExecState* exec, const Identifier& propertyName, JSValue value, PutPropertySlot& slot)
-{
- object->JSObject::put(exec, propertyName, value, slot);
-}
-
-void QtInstance::removeCachedMethod(JSObject* method)
-{
- if (m_defaultMethod == method)
- m_defaultMethod = 0;
-
- for (QHash<QByteArray, JSObject*>::Iterator it = m_methods.begin(),
- end = m_methods.end(); it != end; ++it)
- if (it.value() == method) {
- m_methods.erase(it);
- return;
- }
-}
-
-QtInstance* QtInstance::getInstance(JSObject* object)
-{
- if (!object)
- return 0;
- if (!object->inherits(&QtRuntimeObject::s_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);
- }
- return m_class;
-}
-
-RuntimeObject* QtInstance::newRuntimeObject(ExecState* exec)
-{
- JSLock lock(SilenceAssertionsOnly);
- m_methods.clear();
- return new (exec) QtRuntimeObject(exec, exec->lexicalGlobalObject(), this);
-}
-
-void QtInstance::markAggregate(MarkStack& markStack)
-{
- if (m_defaultMethod)
- markStack.append(m_defaultMethod);
- foreach (JSObject* val, m_methods.values()) {
- if (val)
- markStack.append(val);
- }
-}
-
-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)
- array.add(Identifier(exec, method.signature()));
- }
- }
-}
-
-JSValue QtInstance::getMethod(ExecState* exec, const Identifier& propertyName)
-{
- if (!getClass())
- return jsNull();
- MethodList methodList = m_class->methodsNamed(propertyName, this);
- return new (exec) RuntimeMethod(exec, exec->lexicalGlobalObject(), propertyName, methodList);
-}
-
-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.parameterTypes().isEmpty()) {
- const char* retsig = m.typeName();
- if (retsig && *retsig) {
- QVariant ret(QMetaType::type(retsig), (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);
-}
-
-// In qt_runtime.cpp
-JSValue convertQVariantToValue(ExecState*, PassRefPtr<RootObject> root, const QVariant& variant);
-QVariant convertValueToQVariant(ExecState*, JSValue, QMetaType::Type hint, int *distance);
-
-QByteArray QtField::name() const
-{
- if (m_type == MetaProperty)
- return m_property.name();
- if (m_type == ChildObject && m_childObject)
- return m_childObject->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);
-#ifndef QT_NO_PROPERTIES
- else if (m_type == DynamicProperty)
- val = obj->property(m_dynamicProperty);
-#endif
- return convertQVariantToValue(exec, inst->rootObject(), val);
- }
- QString msg = QString(QLatin1String("cannot access member `%1' of deleted QObject")).arg(QLatin1String(name()));
- return throwError(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) QMetaType::type(m_property.typeName());
-
- // dynamic properties just get any QVariant
- QVariant val = convertValueToQVariant(exec, aValue, argtype, 0);
- 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()));
- throwError(exec, createError(exec, msg.toLatin1().constData()));
- }
-}
-
-
-}
-}
diff --git a/WebCore/bridge/qt/qt_instance.h b/WebCore/bridge/qt/qt_instance.h
deleted file mode 100644
index dd24a92..0000000
--- a/WebCore/bridge/qt/qt_instance.h
+++ /dev/null
@@ -1,96 +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 "Bridge.h"
-#include "runtime_root.h"
-#include <QtScript/qscriptengine.h>
-#include <qhash.h>
-#include <qpointer.h>
-#include <qset.h>
-
-namespace JSC {
-
-namespace Bindings {
-
-class QtClass;
-class QtField;
-class QtRuntimeMetaMethod;
-
-class QtInstance : public Instance {
-public:
- ~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;
-
- void markAggregate(MarkStack&);
-
- virtual JSValue getMethod(ExecState* exec, const Identifier& 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; }
- QObject* hashKey() const { return m_hashkey; }
-
- static PassRefPtr<QtInstance> getQtInstance(QObject*, PassRefPtr<RootObject>, QScriptEngine::ValueOwnership ownership);
-
- virtual bool getOwnPropertySlot(JSObject*, ExecState*, const Identifier&, PropertySlot&);
- virtual void put(JSObject*, ExecState*, const Identifier&, JSValue, PutPropertySlot&);
-
- void removeCachedMethod(JSObject*);
-
- static QtInstance* getInstance(JSObject*);
-
-private:
- static PassRefPtr<QtInstance> create(QObject *instance, PassRefPtr<RootObject> rootObject, QScriptEngine::ValueOwnership ownership)
- {
- return adoptRef(new QtInstance(instance, rootObject, ownership));
- }
-
- friend class QtClass;
- friend class QtField;
- QtInstance(QObject*, PassRefPtr<RootObject>, QScriptEngine::ValueOwnership ownership); // Factory produced only..
- mutable QtClass* m_class;
- QPointer<QObject> m_object;
- QObject* m_hashkey;
- mutable QHash<QByteArray, JSObject*> m_methods;
- mutable QHash<QString, QtField*> m_fields;
- mutable QtRuntimeMetaMethod* m_defaultMethod;
- QScriptEngine::ValueOwnership m_ownership;
-};
-
-} // namespace Bindings
-
-} // namespace JSC
-
-#endif
diff --git a/WebCore/bridge/qt/qt_pixmapruntime.cpp b/WebCore/bridge/qt/qt_pixmapruntime.cpp
deleted file mode 100644
index 1ef20c3..0000000
--- a/WebCore/bridge/qt/qt_pixmapruntime.cpp
+++ /dev/null
@@ -1,369 +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 "CachedImage.h"
-#include "HTMLImageElement.h"
-#include "JSGlobalObject.h"
-#include "JSHTMLImageElement.h"
-#include "JSLock.h"
-#include "ObjectPrototype.h"
-#include "StillImageQt.h"
-#include <QBuffer>
-#include <QByteArray>
-#include <QImage>
-#include <QPixmap>
-#include <QVariant>
-#include <runtime_method.h>
-#include <runtime_object.h>
-#include <runtime_root.h>
-
-using namespace WebCore;
-namespace JSC {
-
-namespace Bindings {
-
-class QtPixmapClass : public Class {
-public:
- QtPixmapClass();
- virtual MethodList methodsNamed(const Identifier&, Instance*) const;
- virtual Field* fieldNamed(const Identifier&, Instance*) const;
-};
-
-
-class QtPixmapWidthField : public Field {
-public:
- static const char* name() { return "width"; }
- virtual JSValue valueFromInstance(ExecState*, const Instance* instance) const
- {
- return jsNumber(static_cast<const QtPixmapInstance*>(instance)->width());
- }
- virtual void setValueToInstance(ExecState*, const Instance*, JSValue) const {}
-};
-
-class QtPixmapHeightField : public Field {
-public:
- static const char* name() { return "height"; }
- virtual JSValue valueFromInstance(ExecState*, const Instance* instance) const
- {
- return jsNumber(static_cast<const QtPixmapInstance*>(instance)->height());
- }
- virtual void setValueToInstance(ExecState*, const Instance*, JSValue) const {}
-};
-
-class QtPixmapRuntimeMethod : public Method {
-public:
- virtual int numParameters() const
- {
- return 0;
- }
- virtual JSValue invoke(ExecState* exec, QtPixmapInstance*) = 0;
-
-};
-
-// this function receives an HTML image element as a parameter, makes it display the pixmap/image from Qt
-class QtPixmapAssignToElementMethod : public QtPixmapRuntimeMethod {
-public:
- static const char* name() { return "assignToHTMLImageElement"; }
- JSValue invoke(ExecState* exec, QtPixmapInstance* instance)
- {
- if (!exec->argumentCount())
- return jsUndefined();
-
- JSObject* objectArg = exec->argument(0).toObject(exec);
- if (!objectArg)
- return jsUndefined();
-
- if (!objectArg->inherits(&JSHTMLImageElement::s_info))
- return jsUndefined();
-
- // we now know that we have a valid <img> element as the argument, we can attach the pixmap to it.
- PassRefPtr<StillImage> stillImage = WebCore::StillImage::create(instance->toPixmap());
- HTMLImageElement* imageElement = static_cast<HTMLImageElement*>(static_cast<JSHTMLImageElement*>(objectArg)->impl());
- imageElement->setCachedImage(new CachedImage(stillImage.get()));
- JSDOMGlobalObject* global = static_cast<JSDOMGlobalObject*>(instance->rootObject()->globalObject());
- toJS(exec, global, imageElement->document());
- return jsUndefined();
- }
-
- virtual int numParameters() const
- {
- return 1;
- }
-};
-
-// this function encodes the image to a dataUrl, to be used in background etc. Note: very slow.
-class QtPixmapToDataUrlMethod : public QtPixmapRuntimeMethod {
-public:
- static const char* name() { return "toDataUrl"; }
- JSValue invoke(ExecState* exec, QtPixmapInstance* instance)
- {
- QByteArray byteArray;
- QBuffer buffer(&byteArray);
- instance->toImage().save(&buffer, "PNG");
- const QString encodedString = QString("data:image/png;base64,") + byteArray.toBase64();
- const UString ustring((UChar*)encodedString.utf16(), encodedString.length());
- return jsString(exec, ustring);
- }
-};
-
-class QtPixmapToStringMethod : public QtPixmapRuntimeMethod {
- public:
- static const char* name() { return "toString"; }
- JSValue invoke(ExecState* exec, QtPixmapInstance* instance)
- {
- return instance->valueOf(exec);
- }
-};
-
-struct QtPixmapMetaData {
- QtPixmapToDataUrlMethod toDataUrlMethod;
- QtPixmapAssignToElementMethod assignToElementMethod;
- QtPixmapToStringMethod toStringMethod;
- QtPixmapHeightField heightField;
- QtPixmapWidthField widthField;
- QtPixmapClass cls;
-} qt_pixmap_metaData;
-
-// Derived RuntimeObject
-class QtPixmapRuntimeObject : public RuntimeObject {
-public:
- QtPixmapRuntimeObject(ExecState*, JSGlobalObject*, PassRefPtr<Instance>);
-
- static const ClassInfo s_info;
-
- static PassRefPtr<Structure> createStructure(JSValue prototype)
- {
- return Structure::create(prototype, TypeInfo(ObjectType, StructureFlags), AnonymousSlotCount);
- }
-
-protected:
- static const unsigned StructureFlags = RuntimeObject::StructureFlags | OverridesMarkChildren;
-
-private:
- virtual const ClassInfo* classInfo() const { return &s_info; }
-};
-
-QtPixmapRuntimeObject::QtPixmapRuntimeObject(ExecState* exec, JSGlobalObject* globalObject, PassRefPtr<Instance> instance)
- : RuntimeObject(exec, globalObject, WebCore::deprecatedGetDOMStructure<QtPixmapRuntimeObject>(exec), instance)
-{
-}
-
-const ClassInfo QtPixmapRuntimeObject::s_info = { "QtPixmapRuntimeObject", &RuntimeObject::s_info, 0, 0 };
-
-QtPixmapClass::QtPixmapClass()
-{
-}
-
-
-Class* QtPixmapInstance::getClass() const
-{
- return &qt_pixmap_metaData.cls;
-}
-
-JSValue QtPixmapInstance::getMethod(ExecState* exec, const Identifier& propertyName)
-{
- MethodList methodList = getClass()->methodsNamed(propertyName, this);
- return new (exec) RuntimeMethod(exec, exec->lexicalGlobalObject(), propertyName, methodList);
-}
-
-JSValue QtPixmapInstance::invokeMethod(ExecState* exec, RuntimeMethod* runtimeMethod)
-{
- const MethodList& methods = *runtimeMethod->methods();
-
- if (methods.size() == 1) {
- QtPixmapRuntimeMethod* method = static_cast<QtPixmapRuntimeMethod*>(methods[0]);
- return method->invoke(exec, this);
- }
- return jsUndefined();
-}
-
-MethodList QtPixmapClass::methodsNamed(const Identifier& identifier, Instance*) const
-{
- MethodList methods;
- if (identifier == QtPixmapToDataUrlMethod::name())
- methods.append(&qt_pixmap_metaData.toDataUrlMethod);
- else if (identifier == QtPixmapAssignToElementMethod::name())
- methods.append(&qt_pixmap_metaData.assignToElementMethod);
- else if (identifier == QtPixmapToStringMethod::name())
- methods.append(&qt_pixmap_metaData.toStringMethod);
- return methods;
-}
-
-Field* QtPixmapClass::fieldNamed(const Identifier& identifier, Instance*) const
-{
- if (identifier == QtPixmapWidthField::name())
- return &qt_pixmap_metaData.widthField;
- if (identifier == QtPixmapHeightField::name())
- return &qt_pixmap_metaData.heightField;
- return 0;
-}
-
-void QtPixmapInstance::getPropertyNames(ExecState*exec, PropertyNameArray& arr)
-{
- arr.add(Identifier(exec, UString(QtPixmapToDataUrlMethod::name())));
- arr.add(Identifier(exec, UString(QtPixmapAssignToElementMethod::name())));
- arr.add(Identifier(exec, UString(QtPixmapToStringMethod::name())));
- arr.add(Identifier(exec, UString(QtPixmapWidthField::name())));
- arr.add(Identifier(exec, UString(QtPixmapHeightField::name())));
-}
-
-JSValue QtPixmapInstance::defaultValue(ExecState* exec, PreferredPrimitiveType ptype) const
-{
- if (ptype == PreferNumber) {
- return jsBoolean(
- (data.type() == static_cast<QVariant::Type>(qMetaTypeId<QImage>()) && !(data.value<QImage>()).isNull())
- || (data.type() == static_cast<QVariant::Type>(qMetaTypeId<QPixmap>()) && !data.value<QPixmap>().isNull()));
- }
-
- if (ptype == PreferString)
- return valueOf(exec);
-
- return jsUndefined();
-}
-
-JSValue QtPixmapInstance::valueOf(ExecState* exec) const
-{
- const QString stringValue = QString("[Qt Native Pixmap %1,%2]").arg(width()).arg(height());
- UString ustring((UChar*)stringValue.utf16(), stringValue.length());
- return jsString(exec, ustring);
-}
-
-QtPixmapInstance::QtPixmapInstance(PassRefPtr<RootObject> rootObj, const QVariant& d)
- :Instance(rootObj), data(d)
-{
-}
-
-int QtPixmapInstance::width() const
-{
- if (data.type() == static_cast<QVariant::Type>(qMetaTypeId<QPixmap>()))
- return data.value<QPixmap>().width();
- if (data.type() == static_cast<QVariant::Type>(qMetaTypeId<QImage>()))
- return data.value<QImage>().width();
- return 0;
-}
-
-int QtPixmapInstance::height() const
-{
- if (data.type() == static_cast<QVariant::Type>(qMetaTypeId<QPixmap>()))
- return data.value<QPixmap>().height();
- if (data.type() == static_cast<QVariant::Type>(qMetaTypeId<QImage>()))
- return data.value<QImage>().height();
- return 0;
-}
-
-QPixmap QtPixmapInstance::toPixmap()
-{
- if (data.type() == static_cast<QVariant::Type>(qMetaTypeId<QPixmap>()))
- return data.value<QPixmap>();
-
- if (data.type() == static_cast<QVariant::Type>(qMetaTypeId<QImage>())) {
- const QPixmap pixmap = QPixmap::fromImage(data.value<QImage>());
- data = QVariant::fromValue<QPixmap>(pixmap);
- return pixmap;
- }
-
- return QPixmap();
-}
-
-QImage QtPixmapInstance::toImage()
-{
- if (data.type() == static_cast<QVariant::Type>(qMetaTypeId<QImage>()))
- return data.value<QImage>();
-
- if (data.type() == static_cast<QVariant::Type>(qMetaTypeId<QPixmap>())) {
- const QImage image = data.value<QPixmap>().toImage();
- data = QVariant::fromValue<QImage>(image);
- return image;
- }
-
- return QImage();
-}
-
-QVariant QtPixmapInstance::variantFromObject(JSObject* object, QMetaType::Type hint)
-{
- if (!object)
- goto returnEmptyVariant;
-
- if (object->inherits(&JSHTMLImageElement::s_info)) {
- JSHTMLImageElement* elementJSWrapper = static_cast<JSHTMLImageElement*>(object);
- HTMLImageElement* imageElement = static_cast<HTMLImageElement*>(elementJSWrapper->impl());
-
- if (!imageElement)
- goto returnEmptyVariant;
-
- CachedImage* cachedImage = imageElement->cachedImage();
- if (!cachedImage)
- goto returnEmptyVariant;
-
- Image* image = cachedImage->image();
- if (!image)
- goto returnEmptyVariant;
-
- QPixmap* pixmap = image->nativeImageForCurrentFrame();
- if (!pixmap)
- goto returnEmptyVariant;
-
- return (hint == static_cast<QMetaType::Type>(qMetaTypeId<QPixmap>()))
- ? QVariant::fromValue<QPixmap>(*pixmap)
- : QVariant::fromValue<QImage>(pixmap->toImage());
- }
-
- if (object->inherits(&QtPixmapRuntimeObject::s_info)) {
- QtPixmapRuntimeObject* runtimeObject = static_cast<QtPixmapRuntimeObject*>(object);
- QtPixmapInstance* instance = static_cast<QtPixmapInstance*>(runtimeObject->getInternalInstance());
- if (!instance)
- goto returnEmptyVariant;
-
- if (hint == qMetaTypeId<QPixmap>())
- return QVariant::fromValue<QPixmap>(instance->toPixmap());
-
- if (hint == qMetaTypeId<QImage>())
- return QVariant::fromValue<QImage>(instance->toImage());
- }
-
-returnEmptyVariant:
- if (hint == qMetaTypeId<QPixmap>())
- return QVariant::fromValue<QPixmap>(QPixmap());
- if (hint == qMetaTypeId<QImage>())
- return QVariant::fromValue<QImage>(QImage());
- return QVariant();
-}
-
-RuntimeObject* QtPixmapInstance::newRuntimeObject(ExecState* exec)
-{
- return new(exec) QtPixmapRuntimeObject(exec, exec->lexicalGlobalObject(), this);
-}
-
-JSObject* QtPixmapInstance::createPixmapRuntimeObject(ExecState* exec, PassRefPtr<RootObject> root, const QVariant& data)
-{
- JSLock lock(SilenceAssertionsOnly);
- RefPtr<QtPixmapInstance> instance = adoptRef(new QtPixmapInstance(root, data));
- return instance->createRuntimeObject(exec);
-}
-
-bool QtPixmapInstance::canHandle(QMetaType::Type hint)
-{
- return hint == qMetaTypeId<QImage>() || hint == qMetaTypeId<QPixmap>();
-}
-
-}
-
-}
diff --git a/WebCore/bridge/qt/qt_pixmapruntime.h b/WebCore/bridge/qt/qt_pixmapruntime.h
deleted file mode 100644
index e2ae5e9..0000000
--- a/WebCore/bridge/qt/qt_pixmapruntime.h
+++ /dev/null
@@ -1,54 +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 "Bridge.h"
-#include <QVariant>
-
-namespace JSC {
-
-namespace Bindings {
-
-class QtPixmapInstance : public Instance {
- QVariant data;
-public:
- QtPixmapInstance(PassRefPtr<RootObject> rootObj, const QVariant& newData);
- virtual Class* getClass() const;
- virtual JSValue getMethod(ExecState* exec, const Identifier& propertyName);
- virtual JSValue invokeMethod(ExecState*, RuntimeMethod*);
- virtual void getPropertyNames(ExecState*, PropertyNameArray&);
-
- virtual JSValue defaultValue(ExecState*, PreferredPrimitiveType) const;
- virtual JSValue valueOf(ExecState* exec) const;
- int width() const;
- int height() const;
- QPixmap toPixmap();
- QImage toImage();
- RuntimeObject* newRuntimeObject(ExecState* exec);
- static JSObject* createPixmapRuntimeObject(ExecState*, PassRefPtr<RootObject>, const QVariant&);
- static QVariant variantFromObject(JSObject*, QMetaType::Type hint);
- static bool canHandle(QMetaType::Type hint);
-};
-
-}
-
-}
-#endif
diff --git a/WebCore/bridge/qt/qt_runtime.cpp b/WebCore/bridge/qt/qt_runtime.cpp
deleted file mode 100644
index 6595b84..0000000
--- a/WebCore/bridge/qt/qt_runtime.cpp
+++ /dev/null
@@ -1,1883 +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 "BooleanObject.h"
-#include "DateInstance.h"
-#include "DateMath.h"
-#include "DatePrototype.h"
-#include "FunctionPrototype.h"
-#include "Interpreter.h"
-#include "JSArray.h"
-#include "JSByteArray.h"
-#include "JSDocument.h"
-#include "JSDOMBinding.h"
-#include "JSDOMWindow.h"
-#include <JSFunction.h>
-#include "JSGlobalObject.h"
-#include "JSHTMLElement.h"
-#include "JSLock.h"
-#include "JSObject.h"
-#include "ObjectPrototype.h"
-#include "PropertyNameArray.h"
-#include "RegExpConstructor.h"
-#include "RegExpObject.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 "qwebelement.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,
- String,
- Date,
- RegExp,
- Array,
- QObj,
- Object,
- Null,
- RTArray,
- JSByteArray
-} 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", "String", "Date",
- "RegExp", "Array", "RTObject", "Object", "Null", "RTArray"};
-
- dbg.nospace() << "JSType(" << ((int)c) << ", " << map[c] << ")";
-
- return dbg.space();
-}
-#endif
-
-// this is here as a proxy, so we'd have a class to friend in QWebElement,
-// as getting/setting a WebCore in QWebElement is private
-class QtWebElementRuntime {
-public:
- static QWebElement create(Element* element)
- {
- return QWebElement(element);
- }
-
- static Element* get(const QWebElement& element)
- {
- return element.m_element;
- }
-};
-
-static JSRealType valueRealType(ExecState* exec, JSValue val)
-{
- if (val.isNumber())
- return Number;
- else if (val.isString())
- return String;
- else if (val.isBoolean())
- return Boolean;
- else if (val.isNull())
- return Null;
- else if (isJSByteArray(&exec->globalData(), val))
- return JSByteArray;
- else if (val.isObject()) {
- JSObject *object = val.toObject(exec);
- if (object->inherits(&RuntimeArray::s_info)) // RuntimeArray 'inherits' from Array, but not in C++
- return RTArray;
- else if (object->inherits(&JSArray::info))
- return Array;
- else if (object->inherits(&DateInstance::info))
- return Date;
- else if (object->inherits(&RegExpObject::info))
- return RegExp;
- else if (object->inherits(&RuntimeObject::s_info))
- return QObj;
- return Object;
- }
-
- return String; // I don't know.
-}
-
-QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type hint, int *distance, HashSet<JSObject*>* visitedObjects, int recursionLimit)
-{
- --recursionLimit;
-
- if (!value || !recursionLimit)
- return QVariant();
-
- JSObject* object = 0;
- if (value.isObject()) {
- object = value.toObject(exec);
- if (visitedObjects->contains(object))
- return QVariant();
-
- visitedObjects->add(object);
- }
-
- // check magic pointer values before dereferencing value
- if (value == jsNaN()
- || (value == jsUndefined()
- && hint != QMetaType::QString
- && hint != (QMetaType::Type) qMetaTypeId<QVariant>())) {
- if (distance)
- *distance = -1;
- return QVariant();
- }
-
- JSLock lock(SilenceAssertionsOnly);
- JSRealType type = valueRealType(exec, value);
- if (hint == QMetaType::Void) {
- switch(type) {
- case Number:
- hint = QMetaType::Double;
- break;
- case Boolean:
- hint = QMetaType::Bool;
- break;
- case String:
- default:
- hint = QMetaType::QString;
- break;
- case Date:
- hint = QMetaType::QDateTime;
- break;
- case RegExp:
- hint = QMetaType::QRegExp;
- break;
- case Object:
- if (object->inherits(&NumberObject::info))
- hint = QMetaType::Double;
- else if (object->inherits(&BooleanObject::info))
- hint = QMetaType::Bool;
- else
- hint = QMetaType::QVariantMap;
- break;
- case QObj:
- hint = QMetaType::QObjectStar;
- break;
- case JSByteArray:
- hint = QMetaType::QByteArray;
- break;
- case Array:
- case RTArray:
- hint = QMetaType::QVariantList;
- break;
- }
- }
-
- qConvDebug() << "convertValueToQVariant: jstype is " << type << ", hint is" << hint;
-
- if (value == jsNull()
- && 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:
- if (type == Object && object->inherits(&BooleanObject::info))
- ret = QVariant(asBooleanObject(value)->internalValue().toBoolean(exec));
- else
- ret = QVariant(value.toBoolean(exec));
- 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(value.toNumber(exec));
- 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)value.toNumber(exec)));
- if (type == Boolean)
- dist = 3;
- else
- dist = 6;
- } else {
- UString str = value.toString(exec);
- ret = QVariant(QChar(str.length() ? *(const ushort*)str.impl()->characters() : 0));
- if (type == String)
- dist = 3;
- else
- dist = 10;
- }
- break;
-
- case QMetaType::QString: {
- if (value.isUndefinedOrNull()) {
- if (distance)
- *distance = 1;
- return QString();
- } else {
- UString ustring = value.toString(exec);
- ret = QVariant(QString((const QChar*)ustring.impl()->characters(), ustring.length()));
- if (type == String)
- dist = 0;
- else
- dist = 10;
- }
- break;
- }
-
- case QMetaType::QVariantMap:
- if (type == Object || type == Array || type == RTArray) {
- // Enumerate the contents of the object
- PropertyNameArray properties(exec);
- object->getPropertyNames(exec, properties);
- PropertyNameArray::const_iterator it = properties.begin();
-
- QVariantMap result;
- int objdist = 0;
- while(it != properties.end()) {
- if (object->propertyIsEnumerable(exec, *it)) {
- JSValue val = object->get(exec, *it);
- QVariant v = convertValueToQVariant(exec, val, QMetaType::Void, &objdist, visitedObjects, recursionLimit);
- if (objdist >= 0) {
- UString ustring = (*it).ustring();
- QString id = QString((const QChar*)ustring.impl()->characters(), ustring.length());
- result.insert(id, v);
- }
- }
- ++it;
- }
- dist = 1;
- ret = QVariant(result);
- }
- break;
-
- case QMetaType::QVariantList:
- if (type == RTArray) {
- RuntimeArray* rtarray = static_cast<RuntimeArray*>(object);
-
- QVariantList result;
- int len = rtarray->getLength();
- int objdist = 0;
- qConvDebug() << "converting a " << len << " length Array";
- for (int i = 0; i < len; ++i) {
- JSValue val = rtarray->getConcreteArray()->valueAt(exec, i);
- result.append(convertValueToQVariant(exec, val, QMetaType::Void, &objdist, visitedObjects, recursionLimit));
- if (objdist == -1) {
- qConvDebug() << "Failed converting element at index " << i;
- break; // Failed converting a list entry, so fail the array
- }
- }
- if (objdist != -1) {
- dist = 5;
- ret = QVariant(result);
- }
- } else if (type == Array) {
- JSArray* array = static_cast<JSArray*>(object);
-
- QVariantList result;
- int len = array->length();
- int objdist = 0;
- qConvDebug() << "converting a " << len << " length Array";
- for (int i = 0; i < len; ++i) {
- JSValue val = array->get(exec, i);
- result.append(convertValueToQVariant(exec, val, QMetaType::Void, &objdist, visitedObjects, recursionLimit));
- if (objdist == -1) {
- qConvDebug() << "Failed converting element at index " << i;
- break; // Failed converting a list entry, so fail the array
- }
- }
- if (objdist != -1) {
- dist = 5;
- ret = QVariant(result);
- }
- } else {
- // Make a single length array
- int objdist;
- qConvDebug() << "making a single length variantlist";
- QVariant var = convertValueToQVariant(exec, value, QMetaType::Void, &objdist, visitedObjects, recursionLimit);
- if (objdist != -1) {
- QVariantList result;
- result << var;
- ret = QVariant(result);
- dist = 10;
- } else {
- qConvDebug() << "failed making single length varlist";
- }
- }
- break;
-
- case QMetaType::QStringList: {
- if (type == RTArray) {
- RuntimeArray* rtarray = static_cast<RuntimeArray*>(object);
-
- QStringList result;
- int len = rtarray->getLength();
- for (int i = 0; i < len; ++i) {
- JSValue val = rtarray->getConcreteArray()->valueAt(exec, i);
- UString ustring = val.toString(exec);
- QString qstring = QString((const QChar*)ustring.impl()->characters(), ustring.length());
-
- result.append(qstring);
- }
- dist = 5;
- ret = QVariant(result);
- } else if (type == Array) {
- JSArray* array = static_cast<JSArray*>(object);
-
- QStringList result;
- int len = array->length();
- for (int i = 0; i < len; ++i) {
- JSValue val = array->get(exec, i);
- UString ustring = val.toString(exec);
- QString qstring = QString((const QChar*)ustring.impl()->characters(), ustring.length());
-
- result.append(qstring);
- }
- dist = 5;
- ret = QVariant(result);
- } else {
- // Make a single length array
- UString ustring = value.toString(exec);
- QString qstring = QString((const QChar*)ustring.impl()->characters(), ustring.length());
- QStringList result;
- result.append(qstring);
- ret = QVariant(result);
- dist = 10;
- }
- break;
- }
-
- case QMetaType::QByteArray: {
- if (type == JSByteArray) {
- WTF::ByteArray* arr = asByteArray(value)->storage();
- ret = QVariant(QByteArray(reinterpret_cast<const char*>(arr->data()), arr->length()));
- dist = 0;
- } else {
- UString ustring = value.toString(exec);
- ret = QVariant(QString((const QChar*)ustring.impl()->characters(), ustring.length()).toLatin1());
- if (type == String)
- dist = 5;
- else
- dist = 10;
- }
- break;
- }
-
- case QMetaType::QDateTime:
- case QMetaType::QDate:
- case QMetaType::QTime:
- if (type == Date) {
- DateInstance* date = static_cast<DateInstance*>(object);
- GregorianDateTime gdt;
- msToGregorianDateTime(exec, date->internalNumber(), true, gdt);
- if (hint == QMetaType::QDateTime) {
- ret = QDateTime(QDate(gdt.year + 1900, gdt.month + 1, gdt.monthDay), QTime(gdt.hour, gdt.minute, gdt.second), Qt::UTC);
- dist = 0;
- } else if (hint == QMetaType::QDate) {
- ret = QDate(gdt.year + 1900, gdt.month + 1, gdt.monthDay);
- dist = 1;
- } else {
- ret = QTime(gdt.hour + 1900, gdt.minute, gdt.second);
- dist = 2;
- }
- } else if (type == Number) {
- double b = value.toNumber(exec);
- GregorianDateTime gdt;
- msToGregorianDateTime(exec, b, true, gdt);
- if (hint == QMetaType::QDateTime) {
- ret = QDateTime(QDate(gdt.year + 1900, gdt.month + 1, gdt.monthDay), QTime(gdt.hour, gdt.minute, gdt.second), Qt::UTC);
- dist = 6;
- } else if (hint == QMetaType::QDate) {
- ret = QDate(gdt.year + 1900, gdt.month + 1, gdt.monthDay);
- dist = 8;
- } else {
- ret = QTime(gdt.hour, gdt.minute, gdt.second);
- dist = 10;
- }
-#ifndef QT_NO_DATESTRING
- } else if (type == String) {
- UString ustring = value.toString(exec);
- QString qstring = QString((const QChar*)ustring.impl()->characters(), ustring.length());
-
- 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;
- }
- }
-#endif // QT_NO_DATESTRING
- }
- break;
-
- case QMetaType::QRegExp:
- if (type == RegExp) {
-/*
- RegExpObject *re = static_cast<RegExpObject*>(object);
-*/
- // Attempt to convert.. a bit risky
- UString ustring = value.toString(exec);
- QString qstring = QString((const QChar*)ustring.impl()->characters(), ustring.length());
-
- // this is of the form '/xxxxxx/i'
- int firstSlash = qstring.indexOf(QLatin1Char('/'));
- int lastSlash = qstring.lastIndexOf(QLatin1Char('/'));
- if (firstSlash >=0 && lastSlash > firstSlash) {
- QRegExp realRe;
-
- realRe.setPattern(qstring.mid(firstSlash + 1, lastSlash - firstSlash - 1));
-
- if (qstring.mid(lastSlash + 1).contains(QLatin1Char('i')))
- realRe.setCaseSensitivity(Qt::CaseInsensitive);
-
- ret = qVariantFromValue(realRe);
- dist = 0;
- } else {
- qConvDebug() << "couldn't parse a JS regexp";
- }
- } else if (type == String) {
- UString ustring = value.toString(exec);
- QString qstring = QString((const QChar*)ustring.impl()->characters(), ustring.length());
-
- QRegExp re(qstring);
- if (re.isValid()) {
- ret = qVariantFromValue(re);
- dist = 10;
- }
- }
- break;
-
- case QMetaType::QObjectStar:
- if (type == QObj) {
- QtInstance* qtinst = QtInstance::getInstance(object);
- if (qtinst) {
- if (qtinst->getObject()) {
- qConvDebug() << "found instance, with object:" << (void*) qtinst->getObject();
- ret = qVariantFromValue(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 = qVariantFromValue(nullobj);
- dist = 0;
- } else {
- qConvDebug() << "previous type was not an object:" << type;
- }
- break;
-
- case QMetaType::VoidStar:
- if (type == QObj) {
- QtInstance* qtinst = QtInstance::getInstance(object);
- if (qtinst) {
- if (qtinst->getObject()) {
- qConvDebug() << "found instance, with object:" << (void*) qtinst->getObject();
- ret = qVariantFromValue((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 = qVariantFromValue((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:" << value.toNumber(exec);
- } else {
- qConvDebug() << "void* - unhandled type" << type;
- }
- break;
-
- default:
- // Non const type ids
- if (hint == (QMetaType::Type) qMetaTypeId<QObjectList>())
- {
- if (type == RTArray) {
- RuntimeArray* rtarray = static_cast<RuntimeArray*>(object);
-
- QObjectList result;
- int len = rtarray->getLength();
- for (int i = 0; i < len; ++i) {
- JSValue val = rtarray->getConcreteArray()->valueAt(exec, i);
- int itemdist = -1;
- QVariant item = convertValueToQVariant(exec, val, QMetaType::QObjectStar, &itemdist, visitedObjects, recursionLimit);
- if (itemdist >= 0)
- result.append(item.value<QObject*>());
- else
- break;
- }
- // If we didn't fail conversion
- if (result.count() == len) {
- dist = 5;
- ret = QVariant::fromValue(result);
- }
- } else if (type == Array) {
- JSObject* object = value.toObject(exec);
- JSArray* array = static_cast<JSArray *>(object);
- QObjectList result;
- int len = array->length();
- for (int i = 0; i < len; ++i) {
- JSValue val = array->get(exec, i);
- int itemdist = -1;
- QVariant item = convertValueToQVariant(exec, val, QMetaType::QObjectStar, &itemdist, visitedObjects, recursionLimit);
- if (itemdist >= 0)
- result.append(item.value<QObject*>());
- else
- break;
- }
- // If we didn't fail conversion
- if (result.count() == len) {
- dist = 5;
- ret = QVariant::fromValue(result);
- }
- } else {
- // Make a single length array
- QObjectList result;
- int itemdist = -1;
- QVariant item = convertValueToQVariant(exec, value, QMetaType::QObjectStar, &itemdist, visitedObjects, recursionLimit);
- if (itemdist >= 0) {
- result.append(item.value<QObject*>());
- dist = 10;
- ret = QVariant::fromValue(result);
- }
- }
- break;
- } else if (hint == (QMetaType::Type) qMetaTypeId<QList<int> >()) {
- if (type == RTArray) {
- RuntimeArray* rtarray = static_cast<RuntimeArray*>(object);
-
- QList<int> result;
- int len = rtarray->getLength();
- for (int i = 0; i < len; ++i) {
- JSValue val = rtarray->getConcreteArray()->valueAt(exec, i);
- int itemdist = -1;
- QVariant item = convertValueToQVariant(exec, val, QMetaType::Int, &itemdist, visitedObjects, recursionLimit);
- if (itemdist >= 0)
- result.append(item.value<int>());
- else
- break;
- }
- // If we didn't fail conversion
- if (result.count() == len) {
- dist = 5;
- ret = QVariant::fromValue(result);
- }
- } else if (type == Array) {
- JSArray* array = static_cast<JSArray *>(object);
-
- QList<int> result;
- int len = array->length();
- for (int i = 0; i < len; ++i) {
- JSValue val = array->get(exec, i);
- int itemdist = -1;
- QVariant item = convertValueToQVariant(exec, val, QMetaType::Int, &itemdist, visitedObjects, recursionLimit);
- if (itemdist >= 0)
- result.append(item.value<int>());
- else
- break;
- }
- // If we didn't fail conversion
- if (result.count() == len) {
- dist = 5;
- ret = QVariant::fromValue(result);
- }
- } else {
- // Make a single length array
- QList<int> result;
- int itemdist = -1;
- QVariant item = convertValueToQVariant(exec, value, QMetaType::Int, &itemdist, visitedObjects, recursionLimit);
- if (itemdist >= 0) {
- result.append(item.value<int>());
- dist = 10;
- ret = QVariant::fromValue(result);
- }
- }
- break;
- } else if (QtPixmapInstance::canHandle(static_cast<QMetaType::Type>(hint))) {
- ret = QtPixmapInstance::variantFromObject(object, static_cast<QMetaType::Type>(hint));
- } else if (hint == (QMetaType::Type) qMetaTypeId<QWebElement>()) {
- if (object && object->inherits(&JSHTMLElement::s_info))
- ret = QVariant::fromValue<QWebElement>(QtWebElementRuntime::create((static_cast<JSHTMLElement*>(object))->impl()));
- else if (object && object->inherits(&JSDocument::s_info))
- ret = QVariant::fromValue<QWebElement>(QtWebElementRuntime::create((static_cast<JSDocument*>(object))->impl()->documentElement()));
- else
- ret = QVariant::fromValue<QWebElement>(QWebElement());
- } else if (hint == (QMetaType::Type) qMetaTypeId<QVariant>()) {
- if (value.isUndefinedOrNull()) {
- if (distance)
- *distance = 1;
- return QVariant();
- } else {
- 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(exec, value, QMetaType::Void, distance, visitedObjects, recursionLimit);
- dist = 10;
- }
- break;
- }
-
- dist = 10;
- break;
- }
-
- if (!ret.isValid())
- dist = -1;
- if (distance)
- *distance = dist;
-
- return ret;
-}
-
-QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type hint, int *distance)
-{
- const int recursionLimit = 200;
- HashSet<JSObject*> visitedObjects;
- return convertValueToQVariant(exec, value, hint, distance, &visitedObjects, recursionLimit);
-}
-
-JSValue convertQVariantToValue(ExecState* exec, PassRefPtr<RootObject> root, const QVariant& variant)
-{
- // 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() &&
- type != QMetaType::QObjectStar &&
- type != QMetaType::VoidStar &&
- type != QMetaType::QWidgetStar &&
- type != QMetaType::QString) {
- return jsNull();
- }
-
- JSLock lock(SilenceAssertionsOnly);
-
- if (type == QMetaType::Bool)
- return jsBoolean(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 jsNumber(variant.toDouble());
-
- if (type == QMetaType::QRegExp) {
- QRegExp re = variant.value<QRegExp>();
-
- if (re.isValid()) {
- UString uflags;
- if (re.caseSensitivity() == Qt::CaseInsensitive)
- uflags = "i"; // ### Can't do g or m
-
- UString pattern((UChar*)re.pattern().utf16(), re.pattern().length());
-
- RefPtr<JSC::RegExp> regExp = JSC::RegExp::create(&exec->globalData(), pattern, uflags);
- if (regExp->isValid())
- return new (exec) RegExpObject(exec->lexicalGlobalObject(), exec->lexicalGlobalObject()->regExpStructure(), regExp.release());
- else
- return jsNull();
- }
- }
-
- 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)
- GregorianDateTime dt;
- dt.year = date.year() - 1900;
- dt.month = date.month() - 1;
- dt.monthDay = date.day();
- dt.hour = time.hour();
- dt.minute = time.minute();
- dt.second = time.second();
- dt.isDST = -1;
- double ms = gregorianDateTimeToMS(exec, dt, time.msec(), /*inputIsUTC*/ false);
-
- return new (exec) DateInstance(exec, trunc(ms));
- }
-
- if (type == QMetaType::QByteArray) {
- QByteArray qtByteArray = variant.value<QByteArray>();
- WTF::RefPtr<WTF::ByteArray> wtfByteArray = WTF::ByteArray::create(qtByteArray.length());
- memcpy(wtfByteArray->data(), qtByteArray.constData(), qtByteArray.length());
- return new (exec) JSC::JSByteArray(exec, JSC::JSByteArray::createStructure(jsNull()), wtfByteArray.get());
- }
-
- if (type == QMetaType::QObjectStar || type == QMetaType::QWidgetStar) {
- QObject* obj = variant.value<QObject*>();
- if (!obj)
- return jsNull();
- return QtInstance::getQtInstance(obj, root, QScriptEngine::QtOwnership)->createRuntimeObject(exec);
- }
-
- if (QtPixmapInstance::canHandle(static_cast<QMetaType::Type>(variant.type())))
- return QtPixmapInstance::createPixmapRuntimeObject(exec, root, variant);
-
- if (type == qMetaTypeId<QWebElement>()) {
- if (!root->globalObject()->inherits(&JSDOMWindow::s_info))
- return jsUndefined();
-
- Document* document = (static_cast<JSDOMWindow*>(root->globalObject()))->impl()->document();
- if (!document)
- return jsUndefined();
-
- return toJS(exec, toJSDOMGlobalObject(document, exec), QtWebElementRuntime::get(variant.value<QWebElement>()));
- }
-
- if (type == QMetaType::QVariantMap) {
- // create a new object, and stuff properties into it
- JSObject* ret = constructEmptyObject(exec);
- QVariantMap map = variant.value<QVariantMap>();
- QVariantMap::const_iterator i = map.constBegin();
- while (i != map.constEnd()) {
- QString s = i.key();
- JSValue val = convertQVariantToValue(exec, root.get(), i.value());
- if (val) {
- PutPropertySlot slot;
- ret->put(exec, Identifier(exec, reinterpret_cast_ptr<const UChar *>(s.constData()), s.length()), val, slot);
- // ### error case?
- }
- ++i;
- }
-
- return ret;
- }
-
- // List types
- if (type == QMetaType::QVariantList) {
- QVariantList vl = variant.toList();
- qConvDebug() << "got a " << vl.count() << " length list:" << vl;
- return new (exec) RuntimeArray(exec, new QtArray<QVariant>(vl, QMetaType::Void, root));
- } else if (type == QMetaType::QStringList) {
- QStringList sl = variant.value<QStringList>();
- return new (exec) RuntimeArray(exec, new QtArray<QString>(sl, QMetaType::QString, root));
- } else if (type == (QMetaType::Type) qMetaTypeId<QObjectList>()) {
- QObjectList ol= variant.value<QObjectList>();
- return new (exec) RuntimeArray(exec, new QtArray<QObject*>(ol, QMetaType::QObjectStar, root));
- } else if (type == (QMetaType::Type)qMetaTypeId<QList<int> >()) {
- QList<int> il= variant.value<QList<int> >();
- return new (exec) RuntimeArray(exec, new QtArray<int>(il, QMetaType::Int, root));
- }
-
- if (type == (QMetaType::Type)qMetaTypeId<QVariant>()) {
- QVariant real = variant.value<QVariant>();
- qConvDebug() << "real variant is:" << real;
- return convertQVariantToValue(exec, root, real);
- }
-
- qConvDebug() << "fallback path for" << variant << variant.userType();
-
- QString string = variant.toString();
- UString ustring((UChar*)string.utf16(), string.length());
- return jsString(exec, ustring);
-}
-
-// ===============
-
-// Qt-like macros
-#define QW_D(Class) Class##Data* d = d_func()
-#define QW_DS(Class,Instance) Class##Data* d = Instance->d_func()
-
-const ClassInfo QtRuntimeMethod::s_info = { "QtRuntimeMethod", 0, 0, 0 };
-
-QtRuntimeMethod::QtRuntimeMethod(QtRuntimeMethodData* dd, ExecState* exec, const Identifier& ident, PassRefPtr<QtInstance> inst)
- : InternalFunction(&exec->globalData(), exec->lexicalGlobalObject(), deprecatedGetDOMStructure<QtRuntimeMethod>(exec), ident)
- , d_ptr(dd)
-{
- QW_D(QtRuntimeMethod);
- d->m_instance = inst;
-}
-
-QtRuntimeMethod::~QtRuntimeMethod()
-{
- QW_D(QtRuntimeMethod);
- d->m_instance->removeCachedMethod(this);
- delete d_ptr;
-}
-
-// ===============
-
-QtRuntimeMethodData::~QtRuntimeMethodData()
-{
-}
-
-QtRuntimeMetaMethodData::~QtRuntimeMetaMethodData()
-{
-
-}
-
-QtRuntimeConnectionMethodData::~QtRuntimeConnectionMethodData()
-{
-
-}
-
-// ===============
-
-// 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) QMetaType::type("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(ExecState* exec,
- const QMetaObject* meta,
- const QByteArray& signature,
- bool allowPrivate,
- QVarLengthArray<QVariant, 10> &vars,
- void** vvars,
- JSObject **pError)
-{
- 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 (m.signature() == signature)
- matchingIndices.append(i);
- else if (overloads) {
- QByteArray rawsignature = m.signature();
- rawsignature.truncate(rawsignature.indexOf('('));
- if (rawsignature == signature)
- matchingIndices.append(i);
- }
- }
-
- int chosenIndex = -1;
- *pError = 0;
- 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 = QMetaType::type(returnTypeName);
- if ((rtype == 0) && !returnTypeName.isEmpty()) {
- if (returnTypeName == "QVariant") {
- types.append(QtMethodMatchType::variant());
- } else 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 (returnTypeName == "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 = QMetaType::type(argTypeName);
- if (atype == 0) {
- if (argTypeName == "QVariant") {
- types.append(QtMethodMatchType::variant());
- } else {
- int enumIndex = indexOfMetaEnum(meta, argTypeName);
- if (enumIndex != -1)
- types.append(QtMethodMatchType::metaEnum(enumIndex, argTypeName));
- else {
- unresolvedTypes = true;
- types.append(QtMethodMatchType::unresolved(argTypeName));
- }
- }
- } else {
- if (argTypeName == "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 (exec->argumentCount() + 1 < static_cast<unsigned>(types.count())) {
- qMatchDebug() << "Match:too few args for" << method.signature();
- tooFewArgs.append(index);
- continue;
- }
-
- if (unresolvedTypes) {
- qMatchDebug() << "Match:unresolved arg types for" << method.signature();
- // 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];
- 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) {
- JSValue arg = i < exec->argumentCount() ? exec->argument(i) : jsUndefined();
-
- int argdistance = -1;
- QVariant v = convertValueToQVariant(exec, arg, types.at(i+1).typeId(), &argdistance);
- 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.signature() << (converted ? "converted":"failed to convert") << "distance " << matchDistance;
-
- if (converted) {
- if ((exec->argumentCount() + 1 == static_cast<unsigned>(types.count()))
- && (matchDistance == 0)) {
- // perfect match, use this one
- chosenIndex = index;
- break;
- } else {
- 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(QLatin1String(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.signature()));
- }
- *pError = throwError(exec, createTypeError(exec, message.toLatin1().constData()));
- } 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()));
- *pError = throwError(exec, createTypeError(exec, message.toLatin1().constData()));
- } else {
- QString message = QString::fromLatin1("too few arguments in call to %0(); candidates are\n")
- .arg(QLatin1String(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.signature()));
- }
- *pError = throwError(exec, createSyntaxError(exec, message.toLatin1().constData()));
- }
- }
-
- 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.signature()));
- }
- }
- *pError = throwError(exec, createTypeError(exec, message.toLatin1().constData()));
- } else {
- chosenIndex = bestMatch.index;
- 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];
- 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;
-}
-
-QtRuntimeMetaMethod::QtRuntimeMetaMethod(ExecState* exec, const Identifier& ident, PassRefPtr<QtInstance> inst, int index, const QByteArray& signature, bool allowPrivate)
- : QtRuntimeMethod (new QtRuntimeMetaMethodData(), exec, ident, inst)
-{
- QW_D(QtRuntimeMetaMethod);
- d->m_signature = signature;
- d->m_index = index;
- d->m_connect = 0;
- d->m_disconnect = 0;
- d->m_allowPrivate = allowPrivate;
-}
-
-void QtRuntimeMetaMethod::markChildren(MarkStack& markStack)
-{
- QtRuntimeMethod::markChildren(markStack);
- QW_D(QtRuntimeMetaMethod);
- if (d->m_connect)
- markStack.append(d->m_connect);
- if (d->m_disconnect)
- markStack.append(d->m_disconnect);
-}
-
-EncodedJSValue QtRuntimeMetaMethod::call(ExecState* exec)
-{
- QtRuntimeMetaMethodData* d = static_cast<QtRuntimeMetaMethod *>(exec->callee())->d_func();
-
- // We're limited to 10 args
- if (exec->argumentCount() > 10)
- return JSValue::encode(jsUndefined());
-
- // We have to pick a method that matches..
- JSLock lock(SilenceAssertionsOnly);
-
- QObject *obj = d->m_instance->getObject();
- if (obj) {
- QVarLengthArray<QVariant, 10> vargs;
- void *qargs[11];
-
- int methodIndex;
- JSObject* errorObj = 0;
- if ((methodIndex = findMethodIndex(exec, obj->metaObject(), d->m_signature, d->m_allowPrivate, vargs, (void **)qargs, &errorObj)) != -1) {
- if (QMetaObject::metacall(obj, QMetaObject::InvokeMetaMethod, methodIndex, qargs) >= 0)
- return JSValue::encode(jsUndefined());
-
- if (vargs[0].isValid())
- return JSValue::encode(convertQVariantToValue(exec, d->m_instance->rootObject(), vargs[0]));
- }
-
- if (errorObj)
- return JSValue::encode(errorObj);
- } else {
- return throwVMError(exec, createError(exec, "cannot call function of deleted QObject"));
- }
-
- // void functions return undefined
- return JSValue::encode(jsUndefined());
-}
-
-CallType QtRuntimeMetaMethod::getCallData(CallData& callData)
-{
- callData.native.function = call;
- return CallTypeHost;
-}
-
-bool QtRuntimeMetaMethod::getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot& slot)
-{
- if (propertyName == "connect") {
- slot.setCustom(this, connectGetter);
- return true;
- } else if (propertyName == "disconnect") {
- slot.setCustom(this, disconnectGetter);
- return true;
- } else if (propertyName == exec->propertyNames().length) {
- slot.setCustom(this, lengthGetter);
- return true;
- }
-
- return QtRuntimeMethod::getOwnPropertySlot(exec, propertyName, slot);
-}
-
-bool QtRuntimeMetaMethod::getOwnPropertyDescriptor(ExecState* exec, const Identifier& propertyName, PropertyDescriptor& descriptor)
-{
- if (propertyName == "connect") {
- PropertySlot slot;
- slot.setCustom(this, connectGetter);
- descriptor.setDescriptor(slot.getValue(exec, propertyName), DontDelete | ReadOnly | DontEnum);
- return true;
- }
-
- if (propertyName == "disconnect") {
- PropertySlot slot;
- slot.setCustom(this, disconnectGetter);
- descriptor.setDescriptor(slot.getValue(exec, propertyName), DontDelete | ReadOnly | DontEnum);
- return true;
- }
-
- if (propertyName == exec->propertyNames().length) {
- PropertySlot slot;
- slot.setCustom(this, lengthGetter);
- descriptor.setDescriptor(slot.getValue(exec, propertyName), DontDelete | ReadOnly | DontEnum);
- return true;
- }
-
- return QtRuntimeMethod::getOwnPropertyDescriptor(exec, propertyName, descriptor);
-}
-
-void QtRuntimeMetaMethod::getOwnPropertyNames(ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode)
-{
- if (mode == IncludeDontEnumProperties) {
- propertyNames.add(Identifier(exec, "connect"));
- propertyNames.add(Identifier(exec, "disconnect"));
- propertyNames.add(exec->propertyNames().length);
- }
-
- QtRuntimeMethod::getOwnPropertyNames(exec, propertyNames, mode);
-}
-
-JSValue QtRuntimeMetaMethod::lengthGetter(ExecState*, JSValue, const Identifier&)
-{
- // QtScript always returns 0
- return jsNumber(0);
-}
-
-JSValue QtRuntimeMetaMethod::connectGetter(ExecState* exec, JSValue slotBase, const Identifier& ident)
-{
- QtRuntimeMetaMethod* thisObj = static_cast<QtRuntimeMetaMethod*>(asObject(slotBase));
- QW_DS(QtRuntimeMetaMethod, thisObj);
-
- if (!d->m_connect)
- d->m_connect = new (exec) QtRuntimeConnectionMethod(exec, ident, true, d->m_instance, d->m_index, d->m_signature);
- return d->m_connect;
-}
-
-JSValue QtRuntimeMetaMethod::disconnectGetter(ExecState* exec, JSValue slotBase, const Identifier& ident)
-{
- QtRuntimeMetaMethod* thisObj = static_cast<QtRuntimeMetaMethod*>(asObject(slotBase));
- QW_DS(QtRuntimeMetaMethod, thisObj);
-
- if (!d->m_disconnect)
- d->m_disconnect = new (exec) QtRuntimeConnectionMethod(exec, ident, false, d->m_instance, d->m_index, d->m_signature);
- return d->m_disconnect;
-}
-
-// ===============
-
-QMultiMap<QObject*, QtConnectionObject*> QtRuntimeConnectionMethod::connections;
-
-QtRuntimeConnectionMethod::QtRuntimeConnectionMethod(ExecState* exec, const Identifier& ident, bool isConnect, PassRefPtr<QtInstance> inst, int index, const QByteArray& signature)
- : QtRuntimeMethod (new QtRuntimeConnectionMethodData(), exec, ident, inst)
-{
- QW_D(QtRuntimeConnectionMethod);
-
- d->m_signature = signature;
- d->m_index = index;
- d->m_isConnect = isConnect;
-}
-
-EncodedJSValue QtRuntimeConnectionMethod::call(ExecState* exec)
-{
- QtRuntimeConnectionMethodData* d = static_cast<QtRuntimeConnectionMethod *>(exec->callee())->d_func();
-
- JSLock lock(SilenceAssertionsOnly);
-
- QObject* sender = d->m_instance->getObject();
-
- if (sender) {
-
- JSObject* thisObject = exec->lexicalGlobalObject();
- JSObject* funcObject = 0;
-
- // QtScript checks signalness first, arguments second
- int signalIndex = -1;
-
- // Make sure the initial index is a signal
- QMetaMethod m = sender->metaObject()->method(d->m_index);
- if (m.methodType() == QMetaMethod::Signal)
- signalIndex = findSignalIndex(sender->metaObject(), d->m_index, d->m_signature);
-
- if (signalIndex != -1) {
- if (exec->argumentCount() == 1) {
- funcObject = exec->argument(0).toObject(exec);
- CallData callData;
- if (funcObject->getCallData(callData) == CallTypeNone) {
- if (d->m_isConnect)
- return throwVMError(exec, createTypeError(exec, "QtMetaMethod.connect: target is not a function"));
- else
- return throwVMError(exec, createTypeError(exec, "QtMetaMethod.disconnect: target is not a function"));
- }
- } else if (exec->argumentCount() >= 2) {
- if (exec->argument(0).isObject()) {
- thisObject = exec->argument(0).toObject(exec);
-
- // Get the actual function to call
- JSObject *asObj = exec->argument(1).toObject(exec);
- CallData callData;
- if (asObj->getCallData(callData) != CallTypeNone) {
- // Function version
- funcObject = asObj;
- } else {
- // Convert it to a string
- UString funcName = exec->argument(1).toString(exec);
- Identifier funcIdent(exec, funcName);
-
- // ### DropAllLocks
- // This is resolved at this point in QtScript
- JSValue val = thisObject->get(exec, funcIdent);
- JSObject* asFuncObj = val.toObject(exec);
-
- if (asFuncObj->getCallData(callData) != CallTypeNone) {
- funcObject = asFuncObj;
- } else {
- if (d->m_isConnect)
- return throwVMError(exec, createTypeError(exec, "QtMetaMethod.connect: target is not a function"));
- else
- return throwVMError(exec, createTypeError(exec, "QtMetaMethod.disconnect: target is not a function"));
- }
- }
- } else {
- if (d->m_isConnect)
- return throwVMError(exec, createTypeError(exec, "QtMetaMethod.connect: thisObject is not an object"));
- else
- return throwVMError(exec, createTypeError(exec, "QtMetaMethod.disconnect: thisObject is not an object"));
- }
- } else {
- if (d->m_isConnect)
- return throwVMError(exec, createError(exec, "QtMetaMethod.connect: no arguments given"));
- else
- return throwVMError(exec, createError(exec, "QtMetaMethod.disconnect: no arguments given"));
- }
-
- if (d->m_isConnect) {
- // 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(d->m_instance, signalIndex, thisObject, funcObject);
- 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_signature));
- return throwVMError(exec, createError(exec, msg.toLatin1().constData()));
- }
- else {
- // Store connection
- connections.insert(sender, conn);
- }
- } else {
- // Now to find our previous connection object. Hmm.
- QList<QtConnectionObject*> conns = connections.values(sender);
- bool ret = false;
-
- foreach(QtConnectionObject* conn, conns) {
- // Is this the right connection?
- if (conn->match(sender, signalIndex, thisObject, funcObject)) {
- // Yep, disconnect it
- QMetaObject::disconnect(sender, signalIndex, conn, conn->metaObject()->methodOffset());
- delete conn; // this will also remove it from the map
- ret = true;
- break;
- }
- }
-
- if (!ret) {
- QString msg = QString(QLatin1String("QtMetaMethod.disconnect: failed to disconnect from %1::%2()"))
- .arg(QLatin1String(sender->metaObject()->className()))
- .arg(QLatin1String(d->m_signature));
- return throwVMError(exec, createError(exec, msg.toLatin1().constData()));
- }
- }
- } else {
- QString msg = QString(QLatin1String("QtMetaMethod.%1: %2::%3() is not a signal"))
- .arg(QLatin1String(d->m_isConnect ? "connect": "disconnect"))
- .arg(QLatin1String(sender->metaObject()->className()))
- .arg(QLatin1String(d->m_signature));
- return throwVMError(exec, createTypeError(exec, msg.toLatin1().constData()));
- }
- } else {
- return throwVMError(exec, createError(exec, "cannot call function of deleted QObject"));
- }
-
- return JSValue::encode(jsUndefined());
-}
-
-CallType QtRuntimeConnectionMethod::getCallData(CallData& callData)
-{
- callData.native.function = call;
- return CallTypeHost;
-}
-
-bool QtRuntimeConnectionMethod::getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot& slot)
-{
- if (propertyName == exec->propertyNames().length) {
- slot.setCustom(this, lengthGetter);
- return true;
- }
-
- return QtRuntimeMethod::getOwnPropertySlot(exec, propertyName, slot);
-}
-
-bool QtRuntimeConnectionMethod::getOwnPropertyDescriptor(ExecState* exec, const Identifier& propertyName, PropertyDescriptor& descriptor)
-{
- if (propertyName == exec->propertyNames().length) {
- PropertySlot slot;
- slot.setCustom(this, lengthGetter);
- descriptor.setDescriptor(slot.getValue(exec, propertyName), DontDelete | ReadOnly | DontEnum);
- return true;
- }
-
- return QtRuntimeMethod::getOwnPropertyDescriptor(exec, propertyName, descriptor);
-}
-
-void QtRuntimeConnectionMethod::getOwnPropertyNames(ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode)
-{
- if (mode == IncludeDontEnumProperties)
- propertyNames.add(exec->propertyNames().length);
-
- QtRuntimeMethod::getOwnPropertyNames(exec, propertyNames, mode);
-}
-
-JSValue QtRuntimeConnectionMethod::lengthGetter(ExecState*, JSValue, const Identifier&)
-{
- // we have one formal argument, and one optional
- return jsNumber(1);
-}
-
-// ===============
-
-QtConnectionObject::QtConnectionObject(PassRefPtr<QtInstance> instance, int signalIndex, JSObject* thisObject, JSObject* funcObject)
- : m_instance(instance)
- , m_signalIndex(signalIndex)
- , m_originalObject(m_instance->getObject())
- , m_thisObject(thisObject)
- , m_funcObject(funcObject)
-{
- setParent(m_originalObject);
- ASSERT(JSLock::currentThreadIsHoldingLock()); // so our ProtectedPtrs are safe
-}
-
-QtConnectionObject::~QtConnectionObject()
-{
- // Remove us from the map of active connections
- QtRuntimeConnectionMethod::connections.remove(m_originalObject, this);
-}
-
-static const uint qt_meta_data_QtConnectionObject[] = {
-
- // content:
- 1, // revision
- 0, // classname
- 0, 0, // classinfo
- 1, 10, // methods
- 0, 0, // properties
- 0, 0, // enums/sets
-
- // slots: signature, parameters, type, tag, flags
- 28, 27, 27, 27, 0x0a,
-
- 0 // eod
-};
-
-static const char qt_meta_stringdata_QtConnectionObject[] = {
- "JSC::Bindings::QtConnectionObject\0\0execute()\0"
-};
-
-const QMetaObject QtConnectionObject::staticMetaObject = {
- { &QObject::staticMetaObject, qt_meta_stringdata_QtConnectionObject,
- qt_meta_data_QtConnectionObject, 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))
- 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) {
- switch (_id) {
- case 0: execute(_a); break;
- }
- _id -= 1;
- }
- return _id;
-}
-
-void QtConnectionObject::execute(void **argv)
-{
- QObject* obj = m_instance->getObject();
- if (obj) {
- const QMetaObject* meta = obj->metaObject();
- const QMetaMethod method = meta->method(m_signalIndex);
-
- QList<QByteArray> parameterTypes = method.parameterTypes();
-
- int argc = parameterTypes.count();
-
- JSLock lock(SilenceAssertionsOnly);
-
- // ### Should the Interpreter/ExecState come from somewhere else?
- RefPtr<RootObject> ro = m_instance->rootObject();
- if (ro) {
- JSGlobalObject* globalobj = ro->globalObject();
- if (globalobj) {
- ExecState* exec = globalobj->globalExec();
- if (exec) {
- // Build the argument list (up to the formal argument length of the slot)
- MarkedArgumentBuffer l;
- // ### DropAllLocks?
- int funcArgC = m_funcObject->get(exec, exec->propertyNames().length).toInt32(exec);
- int argTotal = qMax(funcArgC, argc);
- for(int i=0; i < argTotal; i++) {
- if (i < argc) {
- int argType = QMetaType::type(parameterTypes.at(i));
- l.append(convertQVariantToValue(exec, ro, QVariant(argType, argv[i+1])));
- } else {
- l.append(jsUndefined());
- }
- }
- // Stuff in the __qt_sender property, if we can
- ScopeChain oldsc = ScopeChain(NoScopeChain());
- JSFunction* fimp = 0;
- if (m_funcObject->inherits(&JSFunction::info)) {
- fimp = static_cast<JSFunction*>(m_funcObject.get());
-
- JSObject* qt_sender = QtInstance::getQtInstance(sender(), ro, QScriptEngine::QtOwnership)->createRuntimeObject(exec);
- JSObject* wrapper = new (exec) JSObject(JSObject::createStructure(jsNull()));
- PutPropertySlot slot;
- wrapper->put(exec, Identifier(exec, "__qt_sender__"), qt_sender, slot);
- oldsc = fimp->scope();
- ScopeChain sc = oldsc;
- sc.push(wrapper);
- fimp->setScope(sc);
- }
-
- CallData callData;
- CallType callType = m_funcObject->getCallData(callData);
- call(exec, m_funcObject, callType, callData, m_thisObject, l);
-
- if (fimp)
- fimp->setScope(oldsc);
- }
- }
- }
- } else {
- // A strange place to be - a deleted object emitted a signal here.
- qWarning() << "sender deleted, cannot deliver signal";
- }
-}
-
-bool QtConnectionObject::match(QObject* sender, int signalIndex, JSObject* thisObject, JSObject *funcObject)
-{
- if (m_originalObject == sender && m_signalIndex == signalIndex
- && thisObject == (JSObject*)m_thisObject && funcObject == (JSObject*)m_funcObject)
- return true;
- return false;
-}
-
-// ===============
-
-template <typename T> QtArray<T>::QtArray(QList<T> list, QMetaType::Type type, PassRefPtr<RootObject> rootObject)
- : Array(rootObject)
- , m_list(list)
- , m_type(type)
-{
- m_length = m_list.count();
-}
-
-template <typename T> QtArray<T>::~QtArray ()
-{
-}
-
-template <typename T> RootObject* QtArray<T>::rootObject() const
-{
- return m_rootObject && m_rootObject->isValid() ? m_rootObject.get() : 0;
-}
-
-template <typename T> void QtArray<T>::setValueAt(ExecState* exec, unsigned index, JSValue aValue) const
-{
- // QtScript sets the value, but doesn't forward it to the original source
- // (e.g. if you do 'object.intList[5] = 6', the object is not updated, but the
- // copy of the list is).
- int dist = -1;
- QVariant val = convertValueToQVariant(exec, aValue, m_type, &dist);
-
- if (dist >= 0) {
- m_list[index] = val.value<T>();
- }
-}
-
-
-template <typename T> JSValue QtArray<T>::valueAt(ExecState *exec, unsigned int index) const
-{
- if (index < m_length) {
- T val = m_list.at(index);
- return convertQVariantToValue(exec, rootObject(), QVariant::fromValue(val));
- }
-
- return jsUndefined();
-}
-
-// ===============
-
-} }
diff --git a/WebCore/bridge/qt/qt_runtime.h b/WebCore/bridge/qt/qt_runtime.h
deleted file mode 100644
index 68bf865..0000000
--- a/WebCore/bridge/qt/qt_runtime.h
+++ /dev/null
@@ -1,242 +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 "Bridge.h"
-#include "Completion.h"
-#include "Protect.h"
-#include "runtime_method.h"
-
-#include <qbytearray.h>
-#include <qmetaobject.h>
-#include <qpointer.h>
-#include <qvariant.h>
-
-namespace JSC {
-namespace Bindings {
-
-class QtInstance;
-
-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 QtMethod : public Method
-{
-public:
- QtMethod(const QMetaObject *mo, int i, const QByteArray &ident, int numParameters)
- : m_metaObject(mo),
- m_index(i),
- m_identifier(ident),
- m_nParams(numParameters)
- { }
-
- virtual const char* name() const { return m_identifier.constData(); }
- virtual int numParameters() const { return m_nParams; }
-
-private:
- friend class QtInstance;
- const QMetaObject *m_metaObject;
- int m_index;
- QByteArray m_identifier;
- int m_nParams;
-};
-
-
-template <typename T> class QtArray : public Array
-{
-public:
- QtArray(QList<T> list, QMetaType::Type type, PassRefPtr<RootObject>);
- virtual ~QtArray();
-
- RootObject* rootObject() const;
-
- virtual void setValueAt(ExecState*, unsigned index, JSValue) const;
- virtual JSValue valueAt(ExecState*, unsigned index) const;
- virtual unsigned int getLength() const {return m_length;}
-
-private:
- mutable QList<T> m_list; // setValueAt is const!
- unsigned int m_length;
- QMetaType::Type m_type;
-};
-
-// Based on RuntimeMethod
-
-// Extra data classes (to avoid the CELL_SIZE limit on JS objects)
-
-class QtRuntimeMethodData {
- public:
- virtual ~QtRuntimeMethodData();
- RefPtr<QtInstance> m_instance;
-};
-
-class QtRuntimeConnectionMethod;
-class QtRuntimeMetaMethodData : public QtRuntimeMethodData {
- public:
- ~QtRuntimeMetaMethodData();
- QByteArray m_signature;
- bool m_allowPrivate;
- int m_index;
- QtRuntimeConnectionMethod *m_connect;
- QtRuntimeConnectionMethod *m_disconnect;
-};
-
-class QtRuntimeConnectionMethodData : public QtRuntimeMethodData {
- public:
- ~QtRuntimeConnectionMethodData();
- QByteArray m_signature;
- int m_index;
- bool m_isConnect;
-};
-
-// Common base class (doesn't really do anything interesting)
-class QtRuntimeMethod : public InternalFunction {
-public:
- virtual ~QtRuntimeMethod();
-
- static const ClassInfo s_info;
-
- static FunctionPrototype* createPrototype(ExecState*, JSGlobalObject* globalObject)
- {
- return globalObject->functionPrototype();
- }
-
- static PassRefPtr<Structure> createStructure(JSValue prototype)
- {
- return Structure::create(prototype, TypeInfo(ObjectType, StructureFlags), AnonymousSlotCount);
- }
-
-protected:
- static const unsigned StructureFlags = OverridesGetOwnPropertySlot | OverridesGetPropertyNames | InternalFunction::StructureFlags | OverridesMarkChildren;
-
- QtRuntimeMethodData *d_func() const {return d_ptr;}
- QtRuntimeMethod(QtRuntimeMethodData *dd, ExecState *exec, const Identifier &n, PassRefPtr<QtInstance> inst);
- QtRuntimeMethodData *d_ptr;
-};
-
-class QtRuntimeMetaMethod : public QtRuntimeMethod
-{
-public:
- QtRuntimeMetaMethod(ExecState *exec, const Identifier &n, PassRefPtr<QtInstance> inst, int index, const QByteArray& signature, bool allowPrivate);
-
- virtual bool getOwnPropertySlot(ExecState *, const Identifier&, PropertySlot&);
- virtual bool getOwnPropertyDescriptor(ExecState*, const Identifier&, PropertyDescriptor&);
- virtual void getOwnPropertyNames(ExecState*, PropertyNameArray&, EnumerationMode mode = ExcludeDontEnumProperties);
-
- virtual void markChildren(MarkStack& markStack);
-
-protected:
- QtRuntimeMetaMethodData* d_func() const {return reinterpret_cast<QtRuntimeMetaMethodData*>(d_ptr);}
-
-private:
- virtual CallType getCallData(CallData&);
- static EncodedJSValue JSC_HOST_CALL call(ExecState* exec);
- static JSValue lengthGetter(ExecState*, JSValue, const Identifier&);
- static JSValue connectGetter(ExecState*, JSValue, const Identifier&);
- static JSValue disconnectGetter(ExecState*, JSValue, const Identifier&);
-};
-
-class QtConnectionObject;
-class QtRuntimeConnectionMethod : public QtRuntimeMethod
-{
-public:
- QtRuntimeConnectionMethod(ExecState *exec, const Identifier &n, bool isConnect, PassRefPtr<QtInstance> inst, int index, const QByteArray& signature );
-
- virtual bool getOwnPropertySlot(ExecState *, const Identifier&, PropertySlot&);
- virtual bool getOwnPropertyDescriptor(ExecState*, const Identifier&, PropertyDescriptor&);
- virtual void getOwnPropertyNames(ExecState*, PropertyNameArray&, EnumerationMode mode = ExcludeDontEnumProperties);
-
-protected:
- QtRuntimeConnectionMethodData* d_func() const {return reinterpret_cast<QtRuntimeConnectionMethodData*>(d_ptr);}
-
-private:
- virtual CallType getCallData(CallData&);
- static EncodedJSValue JSC_HOST_CALL call(ExecState* exec);
- static JSValue lengthGetter(ExecState*, JSValue, const Identifier&);
- static QMultiMap<QObject *, QtConnectionObject *> connections;
- friend class QtConnectionObject;
-};
-
-class QtConnectionObject: public QObject
-{
-public:
- QtConnectionObject(PassRefPtr<QtInstance> instance, int signalIndex, JSObject* thisObject, JSObject* funcObject);
- ~QtConnectionObject();
-
- static const QMetaObject staticMetaObject;
- virtual const QMetaObject *metaObject() const;
- virtual void *qt_metacast(const char *);
- virtual int qt_metacall(QMetaObject::Call, int, void **argv);
-
- bool match(QObject *sender, int signalIndex, JSObject* thisObject, JSObject *funcObject);
-
- // actual slot:
- void execute(void **argv);
-
-private:
- RefPtr<QtInstance> m_instance;
- int m_signalIndex;
- QObject* m_originalObject; // only used as a key, not dereferenced
- ProtectedPtr<JSObject> m_thisObject;
- ProtectedPtr<JSObject> m_funcObject;
-};
-
-QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type hint, int *distance);
-JSValue convertQVariantToValue(ExecState* exec, PassRefPtr<RootObject> root, const QVariant& variant);
-
-} // namespace Bindings
-} // namespace JSC
-
-#endif
diff --git a/WebCore/bridge/runtime_array.cpp b/WebCore/bridge/runtime_array.cpp
deleted file mode 100644
index 2d0b7e3..0000000
--- a/WebCore/bridge/runtime_array.cpp
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright (C) 2003, 2008 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "runtime_array.h"
-
-#include <runtime/ArrayPrototype.h>
-#include <runtime/Error.h>
-#include <runtime/PropertyNameArray.h>
-#include "JSDOMBinding.h"
-
-using namespace WebCore;
-
-namespace JSC {
-
-const ClassInfo RuntimeArray::s_info = { "RuntimeArray", &JSArray::info, 0, 0 };
-
-RuntimeArray::RuntimeArray(ExecState* exec, Bindings::Array* array)
- // FIXME: deprecatedGetDOMStructure uses the prototype off of the wrong global object
- // We need to pass in the right global object for "array".
- : JSArray(deprecatedGetDOMStructure<RuntimeArray>(exec))
-{
- setSubclassData(array);
-}
-
-RuntimeArray::~RuntimeArray()
-{
- delete getConcreteArray();
-}
-
-JSValue RuntimeArray::lengthGetter(ExecState*, JSValue slotBase, const Identifier&)
-{
- RuntimeArray* thisObj = static_cast<RuntimeArray*>(asObject(slotBase));
- return jsNumber(thisObj->getLength());
-}
-
-JSValue RuntimeArray::indexGetter(ExecState* exec, JSValue slotBase, unsigned index)
-{
- RuntimeArray* thisObj = static_cast<RuntimeArray*>(asObject(slotBase));
- return thisObj->getConcreteArray()->valueAt(exec, index);
-}
-
-void RuntimeArray::getOwnPropertyNames(ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode)
-{
- unsigned length = getLength();
- for (unsigned i = 0; i < length; ++i)
- propertyNames.add(Identifier::from(exec, i));
-
- if (mode == IncludeDontEnumProperties)
- propertyNames.add(exec->propertyNames().length);
-
- JSObject::getOwnPropertyNames(exec, propertyNames, mode);
-}
-
-bool RuntimeArray::getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot& slot)
-{
- if (propertyName == exec->propertyNames().length) {
- slot.setCacheableCustom(this, lengthGetter);
- return true;
- }
-
- bool ok;
- unsigned index = propertyName.toArrayIndex(ok);
- if (ok) {
- if (index < getLength()) {
- slot.setCustomIndex(this, index, indexGetter);
- return true;
- }
- }
-
- return JSObject::getOwnPropertySlot(exec, propertyName, slot);
-}
-
-bool RuntimeArray::getOwnPropertyDescriptor(ExecState* exec, const Identifier& propertyName, PropertyDescriptor& descriptor)
-{
- if (propertyName == exec->propertyNames().length) {
- PropertySlot slot;
- slot.setCustom(this, lengthGetter);
- descriptor.setDescriptor(slot.getValue(exec, propertyName), ReadOnly | DontDelete | DontEnum);
- return true;
- }
-
- bool ok;
- unsigned index = propertyName.toArrayIndex(ok);
- if (ok) {
- if (index < getLength()) {
- PropertySlot slot;
- slot.setCustomIndex(this, index, indexGetter);
- descriptor.setDescriptor(slot.getValue(exec, propertyName), DontDelete | DontEnum);
- return true;
- }
- }
-
- return JSObject::getOwnPropertyDescriptor(exec, propertyName, descriptor);
-}
-
-bool RuntimeArray::getOwnPropertySlot(ExecState *exec, unsigned index, PropertySlot& slot)
-{
- if (index < getLength()) {
- slot.setCustomIndex(this, index, indexGetter);
- return true;
- }
-
- return JSObject::getOwnPropertySlot(exec, index, slot);
-}
-
-void RuntimeArray::put(ExecState* exec, const Identifier& propertyName, JSValue value, PutPropertySlot& slot)
-{
- if (propertyName == exec->propertyNames().length) {
- throwError(exec, createRangeError(exec, "Range error"));
- return;
- }
-
- bool ok;
- unsigned index = propertyName.toArrayIndex(ok);
- if (ok) {
- getConcreteArray()->setValueAt(exec, index, value);
- return;
- }
-
- JSObject::put(exec, propertyName, value, slot);
-}
-
-void RuntimeArray::put(ExecState* exec, unsigned index, JSValue value)
-{
- if (index >= getLength()) {
- throwError(exec, createRangeError(exec, "Range error"));
- return;
- }
-
- getConcreteArray()->setValueAt(exec, index, value);
-}
-
-bool RuntimeArray::deleteProperty(ExecState*, const Identifier&)
-{
- return false;
-}
-
-bool RuntimeArray::deleteProperty(ExecState*, unsigned)
-{
- return false;
-}
-
-}
diff --git a/WebCore/bridge/runtime_array.h b/WebCore/bridge/runtime_array.h
deleted file mode 100644
index e301268..0000000
--- a/WebCore/bridge/runtime_array.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2003, 2008 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef RUNTIME_ARRAY_H_
-#define RUNTIME_ARRAY_H_
-
-#include "Bridge.h"
-#include <runtime/ArrayPrototype.h>
-
-namespace JSC {
-
-class RuntimeArray : public JSArray {
-public:
- RuntimeArray(ExecState*, Bindings::Array*);
- virtual ~RuntimeArray();
-
- virtual void getOwnPropertyNames(ExecState*, PropertyNameArray&, EnumerationMode mode = ExcludeDontEnumProperties);
- virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&);
- virtual bool getOwnPropertySlot(ExecState*, unsigned, PropertySlot&);
- virtual bool getOwnPropertyDescriptor(ExecState*, const Identifier&, PropertyDescriptor&);
- virtual void put(ExecState*, const Identifier& propertyName, JSValue, PutPropertySlot&);
- virtual void put(ExecState*, unsigned propertyName, JSValue);
-
- virtual bool deleteProperty(ExecState* exec, const Identifier &propertyName);
- virtual bool deleteProperty(ExecState* exec, unsigned propertyName);
-
- virtual const ClassInfo* classInfo() const { return &s_info; }
-
- unsigned getLength() const { return getConcreteArray()->getLength(); }
-
- Bindings::Array* getConcreteArray() const { return static_cast<Bindings::Array*>(subclassData()); }
-
- static const ClassInfo s_info;
-
- static ArrayPrototype* createPrototype(ExecState*, JSGlobalObject* globalObject)
- {
- return globalObject->arrayPrototype();
- }
-
-private:
- static const unsigned StructureFlags = OverridesGetOwnPropertySlot | OverridesGetPropertyNames | JSObject::StructureFlags;
- static JSValue lengthGetter(ExecState*, JSValue, const Identifier&);
- static JSValue indexGetter(ExecState*, JSValue, unsigned);
-};
-
-} // namespace JSC
-
-#endif // RUNTIME_ARRAY_H_
diff --git a/WebCore/bridge/runtime_method.cpp b/WebCore/bridge/runtime_method.cpp
deleted file mode 100644
index 8a61f2e..0000000
--- a/WebCore/bridge/runtime_method.cpp
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (C) 2003, 2008 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "runtime_method.h"
-
-#include "JSDOMBinding.h"
-#include "JSHTMLElement.h"
-#include "JSPluginElementFunctions.h"
-#include "runtime_object.h"
-#include <runtime/Error.h>
-#include <runtime/FunctionPrototype.h>
-
-using namespace WebCore;
-
-namespace JSC {
-
-using namespace Bindings;
-
-ASSERT_CLASS_FITS_IN_CELL(RuntimeMethod);
-
-const ClassInfo RuntimeMethod::s_info = { "RuntimeMethod", &InternalFunction::info, 0, 0 };
-
-RuntimeMethod::RuntimeMethod(ExecState* exec, JSGlobalObject* globalObject, const Identifier& ident, Bindings::MethodList& m)
- // FIXME: deprecatedGetDOMStructure uses the prototype off of the wrong global object
- // exec-globalData() is also likely wrong.
- // Callers will need to pass in the right global object corresponding to this native object "m".
- : InternalFunction(&exec->globalData(), globalObject, deprecatedGetDOMStructure<RuntimeMethod>(exec), ident)
- , _methodList(new MethodList(m))
-{
-}
-
-JSValue RuntimeMethod::lengthGetter(ExecState*, JSValue slotBase, const Identifier&)
-{
- RuntimeMethod* thisObj = static_cast<RuntimeMethod*>(asObject(slotBase));
-
- // Ick! There may be more than one method with this name. Arbitrarily
- // just pick the first method. The fundamental problem here is that
- // JavaScript doesn't have the notion of method overloading and
- // Java does.
- // FIXME: a better solution might be to give the maximum number of parameters
- // of any method
- return jsNumber(thisObj->_methodList->at(0)->numParameters());
-}
-
-bool RuntimeMethod::getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot &slot)
-{
- if (propertyName == exec->propertyNames().length) {
- slot.setCacheableCustom(this, lengthGetter);
- return true;
- }
-
- return InternalFunction::getOwnPropertySlot(exec, propertyName, slot);
-}
-
-bool RuntimeMethod::getOwnPropertyDescriptor(ExecState* exec, const Identifier& propertyName, PropertyDescriptor &descriptor)
-{
- if (propertyName == exec->propertyNames().length) {
- PropertySlot slot;
- slot.setCustom(this, lengthGetter);
- descriptor.setDescriptor(slot.getValue(exec, propertyName), ReadOnly | DontDelete | DontEnum);
- return true;
- }
-
- return InternalFunction::getOwnPropertyDescriptor(exec, propertyName, descriptor);
-}
-
-static EncodedJSValue JSC_HOST_CALL callRuntimeMethod(ExecState* exec)
-{
- RuntimeMethod* method = static_cast<RuntimeMethod*>(exec->callee());
-
- if (method->methods()->isEmpty())
- return JSValue::encode(jsUndefined());
-
- RefPtr<Instance> instance;
-
- JSValue thisValue = exec->hostThisValue();
- if (thisValue.inherits(&RuntimeObject::s_info)) {
- RuntimeObject* runtimeObject = static_cast<RuntimeObject*>(asObject(thisValue));
- instance = runtimeObject->getInternalInstance();
- if (!instance)
- return JSValue::encode(RuntimeObject::throwInvalidAccessError(exec));
- } else {
- // Calling a runtime object of a plugin element?
- if (thisValue.inherits(&JSHTMLElement::s_info)) {
- HTMLElement* element = static_cast<JSHTMLElement*>(asObject(thisValue))->impl();
- instance = pluginInstance(element);
- }
- if (!instance)
- return throwVMTypeError(exec);
- }
- ASSERT(instance);
-
- instance->begin();
- JSValue result = instance->invokeMethod(exec, method);
- instance->end();
- return JSValue::encode(result);
-}
-
-CallType RuntimeMethod::getCallData(CallData& callData)
-{
- callData.native.function = callRuntimeMethod;
- return CallTypeHost;
-}
-
-}
diff --git a/WebCore/bridge/runtime_method.h b/WebCore/bridge/runtime_method.h
deleted file mode 100644
index 96d12aa..0000000
--- a/WebCore/bridge/runtime_method.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2003, 2008 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef RUNTIME_FUNCTION_H_
-#define RUNTIME_FUNCTION_H_
-
-#include "Bridge.h"
-#include <runtime/InternalFunction.h>
-#include <runtime/JSGlobalObject.h>
-#include <wtf/OwnPtr.h>
-
-namespace JSC {
-
-class RuntimeMethod : public InternalFunction {
-public:
- RuntimeMethod(ExecState*, JSGlobalObject*, const Identifier& name, Bindings::MethodList&);
- Bindings::MethodList* methods() const { return _methodList.get(); }
-
- static const ClassInfo s_info;
-
- static FunctionPrototype* createPrototype(ExecState*, JSGlobalObject* globalObject)
- {
- return globalObject->functionPrototype();
- }
-
- static PassRefPtr<Structure> createStructure(JSValue prototype)
- {
- return Structure::create(prototype, TypeInfo(ObjectType, StructureFlags), AnonymousSlotCount);
- }
-
- virtual const ClassInfo* classInfo() const { return &s_info; }
-
-private:
- static const unsigned StructureFlags = OverridesGetOwnPropertySlot | ImplementsHasInstance | OverridesMarkChildren | InternalFunction::StructureFlags;
- static JSValue lengthGetter(ExecState*, JSValue, const Identifier&);
- virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&);
- virtual bool getOwnPropertyDescriptor(ExecState*, const Identifier&, PropertyDescriptor&);
- virtual CallType getCallData(CallData&);
-
- OwnPtr<Bindings::MethodList> _methodList;
-};
-
-} // namespace JSC
-
-#endif
diff --git a/WebCore/bridge/runtime_object.cpp b/WebCore/bridge/runtime_object.cpp
deleted file mode 100644
index 368f7b0..0000000
--- a/WebCore/bridge/runtime_object.cpp
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * Copyright (C) 2003, 2008, 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "runtime_object.h"
-
-#include "JSDOMBinding.h"
-#include "runtime_method.h"
-#include <runtime/Error.h>
-#include <runtime/ObjectPrototype.h>
-
-using namespace WebCore;
-
-namespace JSC {
-namespace Bindings {
-
-const ClassInfo RuntimeObject::s_info = { "RuntimeObject", 0, 0, 0 };
-
-RuntimeObject::RuntimeObject(ExecState* exec, JSGlobalObject* globalObject, PassRefPtr<Instance> instance)
- // FIXME: deprecatedGetDOMStructure uses the prototype off of the wrong global object
- // We need to pass in the right global object for "i".
- : JSObjectWithGlobalObject(globalObject, deprecatedGetDOMStructure<RuntimeObject>(exec))
- , m_instance(instance)
-{
-}
-
-RuntimeObject::RuntimeObject(ExecState*, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure, PassRefPtr<Instance> instance)
- : JSObjectWithGlobalObject(globalObject, structure)
- , m_instance(instance)
-{
-}
-
-RuntimeObject::~RuntimeObject()
-{
- if (m_instance)
- m_instance->willDestroyRuntimeObject(this);
-}
-
-void RuntimeObject::invalidate()
-{
- ASSERT(m_instance);
- if (m_instance)
- m_instance->willInvalidateRuntimeObject(this);
- m_instance = 0;
-}
-
-JSValue RuntimeObject::fallbackObjectGetter(ExecState* exec, JSValue slotBase, const Identifier& propertyName)
-{
- RuntimeObject* thisObj = static_cast<RuntimeObject*>(asObject(slotBase));
- RefPtr<Instance> instance = thisObj->m_instance;
-
- if (!instance)
- return throwInvalidAccessError(exec);
-
- instance->begin();
-
- Class *aClass = instance->getClass();
- JSValue result = aClass->fallbackObject(exec, instance.get(), propertyName);
-
- instance->end();
-
- return result;
-}
-
-JSValue RuntimeObject::fieldGetter(ExecState* exec, JSValue slotBase, const Identifier& propertyName)
-{
- RuntimeObject* thisObj = static_cast<RuntimeObject*>(asObject(slotBase));
- RefPtr<Instance> instance = thisObj->m_instance;
-
- if (!instance)
- return throwInvalidAccessError(exec);
-
- instance->begin();
-
- Class *aClass = instance->getClass();
- Field* aField = aClass->fieldNamed(propertyName, instance.get());
- JSValue result = aField->valueFromInstance(exec, instance.get());
-
- instance->end();
-
- return result;
-}
-
-JSValue RuntimeObject::methodGetter(ExecState* exec, JSValue slotBase, const Identifier& propertyName)
-{
- RuntimeObject* thisObj = static_cast<RuntimeObject*>(asObject(slotBase));
- RefPtr<Instance> instance = thisObj->m_instance;
-
- if (!instance)
- return throwInvalidAccessError(exec);
-
- instance->begin();
-
- JSValue method = instance->getMethod(exec, propertyName);
-
- instance->end();
-
- return method;
-}
-
-bool RuntimeObject::getOwnPropertySlot(ExecState *exec, const Identifier& propertyName, PropertySlot& slot)
-{
- if (!m_instance) {
- throwInvalidAccessError(exec);
- return false;
- }
-
- RefPtr<Instance> instance = m_instance;
-
- instance->begin();
-
- Class *aClass = instance->getClass();
-
- if (aClass) {
- // See if the instance has a field with the specified name.
- Field *aField = aClass->fieldNamed(propertyName, instance.get());
- if (aField) {
- slot.setCustom(this, fieldGetter);
- instance->end();
- return true;
- } else {
- // Now check if a method with specified name exists, if so return a function object for
- // that method.
- MethodList methodList = aClass->methodsNamed(propertyName, instance.get());
- if (methodList.size() > 0) {
- slot.setCustom(this, methodGetter);
-
- instance->end();
- return true;
- }
- }
-
- // Try a fallback object.
- if (!aClass->fallbackObject(exec, instance.get(), propertyName).isUndefined()) {
- slot.setCustom(this, fallbackObjectGetter);
- instance->end();
- return true;
- }
- }
-
- instance->end();
-
- return instance->getOwnPropertySlot(this, exec, propertyName, slot);
-}
-
-bool RuntimeObject::getOwnPropertyDescriptor(ExecState *exec, const Identifier& propertyName, PropertyDescriptor& descriptor)
-{
- if (!m_instance) {
- throwInvalidAccessError(exec);
- return false;
- }
-
- RefPtr<Instance> instance = m_instance;
- instance->begin();
-
- Class *aClass = instance->getClass();
-
- if (aClass) {
- // See if the instance has a field with the specified name.
- Field *aField = aClass->fieldNamed(propertyName, instance.get());
- if (aField) {
- PropertySlot slot;
- slot.setCustom(this, fieldGetter);
- instance->end();
- descriptor.setDescriptor(slot.getValue(exec, propertyName), DontDelete);
- return true;
- } else {
- // Now check if a method with specified name exists, if so return a function object for
- // that method.
- MethodList methodList = aClass->methodsNamed(propertyName, instance.get());
- if (methodList.size() > 0) {
- PropertySlot slot;
- slot.setCustom(this, methodGetter);
- instance->end();
- descriptor.setDescriptor(slot.getValue(exec, propertyName), DontDelete | ReadOnly);
- return true;
- }
- }
-
- // Try a fallback object.
- if (!aClass->fallbackObject(exec, instance.get(), propertyName).isUndefined()) {
- PropertySlot slot;
- slot.setCustom(this, fallbackObjectGetter);
- instance->end();
- descriptor.setDescriptor(slot.getValue(exec, propertyName), DontDelete | ReadOnly | DontEnum);
- return true;
- }
- }
-
- instance->end();
-
- return instance->getOwnPropertyDescriptor(this, exec, propertyName, descriptor);
-}
-
-void RuntimeObject::put(ExecState* exec, const Identifier& propertyName, JSValue value, PutPropertySlot& slot)
-{
- if (!m_instance) {
- throwInvalidAccessError(exec);
- return;
- }
-
- RefPtr<Instance> instance = m_instance;
- instance->begin();
-
- // Set the value of the property.
- Field *aField = instance->getClass()->fieldNamed(propertyName, instance.get());
- if (aField)
- aField->setValueToInstance(exec, instance.get(), value);
- else if (!instance->setValueOfUndefinedField(exec, propertyName, value))
- instance->put(this, exec, propertyName, value, slot);
-
- instance->end();
-}
-
-bool RuntimeObject::deleteProperty(ExecState*, const Identifier&)
-{
- // Can never remove a property of a RuntimeObject.
- return false;
-}
-
-JSValue RuntimeObject::defaultValue(ExecState* exec, PreferredPrimitiveType hint) const
-{
- if (!m_instance)
- return throwInvalidAccessError(exec);
-
- RefPtr<Instance> instance = m_instance;
-
- instance->begin();
- JSValue result = instance->defaultValue(exec, hint);
- instance->end();
- return result;
-}
-
-static EncodedJSValue JSC_HOST_CALL callRuntimeObject(ExecState* exec)
-{
- ASSERT(exec->callee()->inherits(&RuntimeObject::s_info));
- RefPtr<Instance> instance(static_cast<RuntimeObject*>(exec->callee())->getInternalInstance());
- instance->begin();
- JSValue result = instance->invokeDefaultMethod(exec);
- instance->end();
- return JSValue::encode(result);
-}
-
-CallType RuntimeObject::getCallData(CallData& callData)
-{
- if (!m_instance)
- return CallTypeNone;
-
- RefPtr<Instance> instance = m_instance;
- if (!instance->supportsInvokeDefaultMethod())
- return CallTypeNone;
-
- callData.native.function = callRuntimeObject;
- return CallTypeHost;
-}
-
-static EncodedJSValue JSC_HOST_CALL callRuntimeConstructor(ExecState* exec)
-{
- JSObject* constructor = exec->callee();
- ASSERT(constructor->inherits(&RuntimeObject::s_info));
- RefPtr<Instance> instance(static_cast<RuntimeObject*>(exec->callee())->getInternalInstance());
- instance->begin();
- ArgList args(exec);
- JSValue result = instance->invokeConstruct(exec, args);
- instance->end();
-
- ASSERT(result);
- return JSValue::encode(result.isObject() ? static_cast<JSObject*>(result.asCell()) : constructor);
-}
-
-ConstructType RuntimeObject::getConstructData(ConstructData& constructData)
-{
- if (!m_instance)
- return ConstructTypeNone;
-
- RefPtr<Instance> instance = m_instance;
- if (!instance->supportsConstruct())
- return ConstructTypeNone;
-
- constructData.native.function = callRuntimeConstructor;
- return ConstructTypeHost;
-}
-
-void RuntimeObject::getOwnPropertyNames(ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode)
-{
- if (!m_instance) {
- throwInvalidAccessError(exec);
- return;
- }
-
- RefPtr<Instance> instance = m_instance;
-
- instance->begin();
- instance->getPropertyNames(exec, propertyNames);
- instance->end();
-}
-
-JSObject* RuntimeObject::throwInvalidAccessError(ExecState* exec)
-{
- return throwError(exec, createReferenceError(exec, "Trying to access object from destroyed plug-in."));
-}
-
-}
-}
diff --git a/WebCore/bridge/runtime_object.h b/WebCore/bridge/runtime_object.h
deleted file mode 100644
index 64c8049..0000000
--- a/WebCore/bridge/runtime_object.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (C) 2003, 2008, 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef KJS_RUNTIME_OBJECT_H
-#define KJS_RUNTIME_OBJECT_H
-
-#include "Bridge.h"
-#include <runtime/JSGlobalObject.h>
-#include <runtime/JSObjectWithGlobalObject.h>
-
-namespace JSC {
-namespace Bindings {
-
-class RuntimeObject : public JSObjectWithGlobalObject {
-public:
- RuntimeObject(ExecState*, JSGlobalObject*, PassRefPtr<Instance>);
- virtual ~RuntimeObject();
-
- virtual bool getOwnPropertySlot(ExecState*, const Identifier& propertyName, PropertySlot&);
- virtual bool getOwnPropertyDescriptor(ExecState*, const Identifier& propertyName, PropertyDescriptor&);
- virtual void put(ExecState*, const Identifier& propertyName, JSValue, PutPropertySlot&);
- virtual bool deleteProperty(ExecState*, const Identifier& propertyName);
- virtual JSValue defaultValue(ExecState*, PreferredPrimitiveType) const;
- virtual CallType getCallData(CallData&);
- virtual ConstructType getConstructData(ConstructData&);
-
- virtual void getOwnPropertyNames(ExecState*, PropertyNameArray&, EnumerationMode mode = ExcludeDontEnumProperties);
-
- void invalidate();
-
- Instance* getInternalInstance() const { return m_instance.get(); }
-
- static JSObject* throwInvalidAccessError(ExecState*);
-
- static const ClassInfo s_info;
-
- static ObjectPrototype* createPrototype(ExecState*, JSGlobalObject* globalObject)
- {
- return globalObject->objectPrototype();
- }
-
- static PassRefPtr<Structure> createStructure(JSValue prototype)
- {
- return Structure::create(prototype, TypeInfo(ObjectType, StructureFlags), AnonymousSlotCount);
- }
-
-protected:
- static const unsigned StructureFlags = OverridesGetOwnPropertySlot | OverridesGetPropertyNames | JSObject::StructureFlags;
- RuntimeObject(ExecState*, JSGlobalObject*, NonNullPassRefPtr<Structure>, PassRefPtr<Instance>);
-
-private:
- virtual const ClassInfo* classInfo() const { return &s_info; }
-
- static JSValue fallbackObjectGetter(ExecState*, JSValue, const Identifier&);
- static JSValue fieldGetter(ExecState*, JSValue, const Identifier&);
- static JSValue methodGetter(ExecState*, JSValue, const Identifier&);
-
- RefPtr<Instance> m_instance;
-};
-
-}
-}
-
-#endif
diff --git a/WebCore/bridge/runtime_root.cpp b/WebCore/bridge/runtime_root.cpp
deleted file mode 100644
index 796354f..0000000
--- a/WebCore/bridge/runtime_root.cpp
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright (C) 2004 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "runtime_root.h"
-
-#include "Bridge.h"
-#include "runtime_object.h"
-#include <runtime/JSGlobalObject.h>
-#include <wtf/HashCountedSet.h>
-#include <wtf/HashSet.h>
-#include <wtf/StdLibExtras.h>
-
-namespace JSC { namespace Bindings {
-
-// This code attempts to solve two problems: (1) plug-ins leaking references to
-// JS and the DOM; (2) plug-ins holding stale references to JS and the DOM. Previous
-// comments in this file claimed that problem #1 was an issue in Java, in particular,
-// because Java, allegedly, didn't always call finalize when collecting an object.
-
-typedef HashSet<RootObject*> RootObjectSet;
-
-static RootObjectSet* rootObjectSet()
-{
- DEFINE_STATIC_LOCAL(RootObjectSet, staticRootObjectSet, ());
- return &staticRootObjectSet;
-}
-
-// FIXME: These two functions are a potential performance problem. We could
-// fix them by adding a JSObject to RootObject dictionary.
-
-RootObject* findProtectingRootObject(JSObject* jsObject)
-{
- RootObjectSet::const_iterator end = rootObjectSet()->end();
- for (RootObjectSet::const_iterator it = rootObjectSet()->begin(); it != end; ++it) {
- if ((*it)->gcIsProtected(jsObject))
- return *it;
- }
- return 0;
-}
-
-RootObject* findRootObject(JSGlobalObject* globalObject)
-{
- RootObjectSet::const_iterator end = rootObjectSet()->end();
- for (RootObjectSet::const_iterator it = rootObjectSet()->begin(); it != end; ++it) {
- if ((*it)->globalObject() == globalObject)
- return *it;
- }
- return 0;
-}
-
-RootObject::InvalidationCallback::~InvalidationCallback()
-{
-}
-
-PassRefPtr<RootObject> RootObject::create(const void* nativeHandle, JSGlobalObject* globalObject)
-{
- return adoptRef(new RootObject(nativeHandle, globalObject));
-}
-
-RootObject::RootObject(const void* nativeHandle, JSGlobalObject* globalObject)
- : m_isValid(true)
- , m_nativeHandle(nativeHandle)
- , m_globalObject(globalObject)
-{
- ASSERT(globalObject);
- rootObjectSet()->add(this);
-}
-
-RootObject::~RootObject()
-{
- if (m_isValid)
- invalidate();
-}
-
-void RootObject::invalidate()
-{
- if (!m_isValid)
- return;
-
- {
- HashSet<RuntimeObject*>::iterator end = m_runtimeObjects.end();
- for (HashSet<RuntimeObject*>::iterator it = m_runtimeObjects.begin(); it != end; ++it)
- (*it)->invalidate();
-
- m_runtimeObjects.clear();
- }
-
- m_isValid = false;
-
- m_nativeHandle = 0;
- m_globalObject = 0;
-
- {
- HashSet<InvalidationCallback*>::iterator end = m_invalidationCallbacks.end();
- for (HashSet<InvalidationCallback*>::iterator iter = m_invalidationCallbacks.begin(); iter != end; ++iter)
- (**iter)(this);
-
- m_invalidationCallbacks.clear();
- }
-
- ProtectCountSet::iterator end = m_protectCountSet.end();
- for (ProtectCountSet::iterator it = m_protectCountSet.begin(); it != end; ++it)
- JSC::gcUnprotect(it->first);
- m_protectCountSet.clear();
-
- rootObjectSet()->remove(this);
-}
-
-void RootObject::gcProtect(JSObject* jsObject)
-{
- ASSERT(m_isValid);
-
- if (!m_protectCountSet.contains(jsObject))
- JSC::gcProtect(jsObject);
- m_protectCountSet.add(jsObject);
-}
-
-void RootObject::gcUnprotect(JSObject* jsObject)
-{
- ASSERT(m_isValid);
-
- if (!jsObject)
- return;
-
- if (m_protectCountSet.count(jsObject) == 1)
- JSC::gcUnprotect(jsObject);
- m_protectCountSet.remove(jsObject);
-}
-
-bool RootObject::gcIsProtected(JSObject* jsObject)
-{
- ASSERT(m_isValid);
- return m_protectCountSet.contains(jsObject);
-}
-
-const void* RootObject::nativeHandle() const
-{
- ASSERT(m_isValid);
- return m_nativeHandle;
-}
-
-JSGlobalObject* RootObject::globalObject() const
-{
- ASSERT(m_isValid);
- return m_globalObject;
-}
-
-void RootObject::updateGlobalObject(JSGlobalObject* globalObject)
-{
- m_globalObject = globalObject;
-}
-
-void RootObject::addRuntimeObject(RuntimeObject* object)
-{
- ASSERT(m_isValid);
- ASSERT(!m_runtimeObjects.contains(object));
-
- m_runtimeObjects.add(object);
-}
-
-void RootObject::removeRuntimeObject(RuntimeObject* object)
-{
- ASSERT(m_isValid);
- ASSERT(m_runtimeObjects.contains(object));
-
- m_runtimeObjects.remove(object);
-}
-
-} } // namespace JSC::Bindings
diff --git a/WebCore/bridge/runtime_root.h b/WebCore/bridge/runtime_root.h
deleted file mode 100644
index babd7ad..0000000
--- a/WebCore/bridge/runtime_root.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (C) 2004 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef RUNTIME_ROOT_H_
-#define RUNTIME_ROOT_H_
-
-#if PLATFORM(MAC)
-#include "jni_jsobject.h"
-#endif
-#include <runtime/Protect.h>
-
-#include <wtf/Forward.h>
-#include <wtf/HashSet.h>
-#include <wtf/Noncopyable.h>
-#include <wtf/PassRefPtr.h>
-#include <wtf/RefCounted.h>
-
-namespace JSC {
-
-class Interpreter;
-class JSGlobalObject;
-
-namespace Bindings {
-
-class RootObject;
-class RuntimeObject;
-
-typedef HashCountedSet<JSObject*> ProtectCountSet;
-
-extern RootObject* findProtectingRootObject(JSObject*);
-extern RootObject* findRootObject(JSGlobalObject*);
-
-class RootObject : public RefCounted<RootObject> {
- friend class JavaJSObject;
-
-public:
- ~RootObject();
-
- static PassRefPtr<RootObject> create(const void* nativeHandle, JSGlobalObject*);
-
- bool isValid() { return m_isValid; }
- void invalidate();
-
- void gcProtect(JSObject*);
- void gcUnprotect(JSObject*);
- bool gcIsProtected(JSObject*);
-
- const void* nativeHandle() const;
- JSGlobalObject* globalObject() const;
- void updateGlobalObject(JSGlobalObject*);
-
- void addRuntimeObject(RuntimeObject*);
- void removeRuntimeObject(RuntimeObject*);
-
- struct InvalidationCallback {
- virtual void operator()(RootObject*) = 0;
- virtual ~InvalidationCallback();
- };
- void addInvalidationCallback(InvalidationCallback* callback) { m_invalidationCallbacks.add(callback); }
-
-private:
- RootObject(const void* nativeHandle, JSGlobalObject*);
-
- bool m_isValid;
-
- const void* m_nativeHandle;
- ProtectedPtr<JSGlobalObject> m_globalObject;
-
- ProtectCountSet m_protectCountSet;
- HashSet<RuntimeObject*> m_runtimeObjects;
-
- HashSet<InvalidationCallback*> m_invalidationCallbacks;
-};
-
-} // namespace Bindings
-
-} // namespace JSC
-
-#endif // RUNTIME_ROOT_H_
diff --git a/WebCore/bridge/test.js b/WebCore/bridge/test.js
deleted file mode 100644
index 5d4f79f..0000000
--- a/WebCore/bridge/test.js
+++ /dev/null
@@ -1,19 +0,0 @@
-myInterface.logMessage ("Starting test");
-
-myInterface.logMessage ("Testing properties:");
-myInterface.logMessage ("myInterface.doubleValue = " + myInterface.doubleValue);
-myInterface.logMessage ("myInterface.intValue = " + myInterface.intValue);
-myInterface.logMessage ("myInterface.stringValue = " + myInterface.stringValue);
-myInterface.logMessage ("myInterface.booleanValue = " + myInterface.booleanValue);
-myInterface.logMessage ("myInterface.nullValue = " + myInterface.nullValue);
-myInterface.logMessage ("myInterface.undefinedValue = " + myInterface.undefinedValue);
-
-myInterface.logMessage ("myInterface.setInt_(666) = " + myInterface.setInt_(666));
-myInterface.logMessage ("myInterface.getInt() = " + myInterface.getInt());
-myInterface.logMessage ("myInterface.getString() = " + myInterface.getString());
-myInterface.logMessage ("myInterface.myInt = " + myInterface.myInt);
-myInterface.logMessage ("setting myInterface.myInt = 777");
-myInterface.myInt = 777;
-myInterface.logMessage ("myInterface.myInt = " + myInterface.myInt);
-myInterface.logMessage ("myInterface.getMySecondInterface().doubleValue = " + myInterface.getMySecondInterface().doubleValue);
-myInterface.logMessage ("myInterface.getMySecondInterface() = " + myInterface.getMySecondInterface());
diff --git a/WebCore/bridge/testC.js b/WebCore/bridge/testC.js
deleted file mode 100644
index 44677c7..0000000
--- a/WebCore/bridge/testC.js
+++ /dev/null
@@ -1,21 +0,0 @@
-myInterface.logMessage ("Starting test");
-
-myInterface.logMessage ("Testing properties:");
-myInterface.logMessage (" myInterface.doubleValue = " + myInterface.doubleValue);
-myInterface.logMessage (" myInterface.intValue = " + myInterface.intValue);
-myInterface.logMessage (" myInterface.stringValue = " + myInterface.stringValue);
-myInterface.logMessage (" myInterface.booleanValue = " + myInterface.booleanValue);
-myInterface.logMessage (" myInterface.nullValue = " + myInterface.nullValue);
-myInterface.logMessage (" myInterface.undefinedValue = " + myInterface.undefinedValue);
-
-myInterface.logMessage ("Testing methods:");
-myInterface.logMessage (" myInterface.setDoubleValue(1234.1234) = " + myInterface.setDoubleValue(1234.1234));
-myInterface.logMessage (" myInterface.setIntValue(5678) = " + myInterface.setIntValue(5678));
-myInterface.logMessage (" myInterface.setStringValue(Goodbye) = " + myInterface.setStringValue('Goodbye'));
-myInterface.logMessage (" myInterface.setBooleanValue(false) = " + myInterface.setBooleanValue(false));
-
-myInterface.logMessage ("Value of properties after calling setters:");
-myInterface.logMessage (" myInterface.getDoubleValue() = " + myInterface.getDoubleValue());
-myInterface.logMessage (" myInterface.getIntValue() = " + myInterface.getIntValue());
-myInterface.logMessage (" myInterface.getStringValue() = " + myInterface.getStringValue());
-myInterface.logMessage (" myInterface.getBooleanValue() = " + myInterface.getBooleanValue());
diff --git a/WebCore/bridge/testM.js b/WebCore/bridge/testM.js
deleted file mode 100644
index 7985d21..0000000
--- a/WebCore/bridge/testM.js
+++ /dev/null
@@ -1,29 +0,0 @@
-myInterface.logMessage ("Starting test");
-
-myInterface.logMessage ("Testing properties:");
-
-myInterface.jsobject = new Function ("arg1","arg2","return arg1 + arg2;");
-myInterface.logMessage ("myInterface.jsobject =" + myInterface.jsobject);
-
-var functionBody = 'return arg1*arg2;'
-
-myInterface.setJSObject_(new Function ("arg1","arg2",functionBody));
-myInterface.logMessage ("myInterface.jsobject =" + myInterface.jsobject);
-myInterface.callJSObject__(5,6);
-myInterface.callJSObject__(8,9);
-
-myInterface.logMessage ("myInterface.setInt_(666) = " + myInterface.setInt_(666));
-myInterface.logMessage ("myInterface.getInt() = " + myInterface.getInt());
-myInterface.logMessage ("myInterface.getString().foo() = " + myInterface.getString().foo());
-myInterface.logMessage ("myInterface.myInt = " + myInterface.myInt);
-myInterface.logMessage ("setting myInterface.myInt = 777");
-myInterface.myInt = 777;
-myInterface.logMessage ("myInterface.myInt = " + myInterface.myInt);
-myInterface.logMessage ("myInterface.getMySecondInterface().doubleValue = " + myInterface.getMySecondInterface().doubleValue);
-myInterface.logMessage ("myInterface.getMySecondInterface() = " + myInterface.getMySecondInterface());
-
-myInterface.logMessageWithPrefix ("msg", "prefix");
-
-var strings = [ "one", "two", "three" ];
-
-myInterface.logMessages (strings); \ No newline at end of file
diff --git a/WebCore/bridge/testbindings.cpp b/WebCore/bridge/testbindings.cpp
deleted file mode 100644
index bcba115..0000000
--- a/WebCore/bridge/testbindings.cpp
+++ /dev/null
@@ -1,419 +0,0 @@
-/*
- * Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
- * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- *
- */
-#include "config.h"
-
-#include "Bridge.h"
-#include "JSObject.h"
-#include "JSValue.h"
-#include "interpreter.h"
-#include "npruntime_internal.h"
-#include "runtime_object.h"
-#include "types.h"
-#include <assert.h>
-#include <stdio.h>
-#include <string.h>
-
-
-#define LOG(formatAndArgs...) { \
- fprintf (stderr, "%s: ", __PRETTY_FUNCTION__); \
- fprintf(stderr, formatAndArgs); \
-}
-
-
-// ------------------ NP Interface definition --------------------
-typedef struct
-{
- NPObject object;
- double doubleValue;
- int intValue;
- NPVariant stringValue;
- bool boolValue;
-} MyObject;
-
-
-static bool identifiersInitialized = false;
-
-#define ID_DOUBLE_VALUE 0
-#define ID_INT_VALUE 1
-#define ID_STRING_VALUE 2
-#define ID_BOOLEAN_VALUE 3
-#define ID_NULL_VALUE 4
-#define ID_UNDEFINED_VALUE 5
-#define NUM_PROPERTY_IDENTIFIERS 6
-
-static NPIdentifier myPropertyIdentifiers[NUM_PROPERTY_IDENTIFIERS];
-static const NPUTF8 *myPropertyIdentifierNames[NUM_PROPERTY_IDENTIFIERS] = {
- "doubleValue",
- "intValue",
- "stringValue",
- "booleanValue",
- "nullValue",
- "undefinedValue"
-};
-
-#define ID_LOG_MESSAGE 0
-#define ID_SET_DOUBLE_VALUE 1
-#define ID_SET_INT_VALUE 2
-#define ID_SET_STRING_VALUE 3
-#define ID_SET_BOOLEAN_VALUE 4
-#define ID_GET_DOUBLE_VALUE 5
-#define ID_GET_INT_VALUE 6
-#define ID_GET_STRING_VALUE 7
-#define ID_GET_BOOLEAN_VALUE 8
-#define NUM_METHOD_IDENTIFIERS 9
-
-static NPIdentifier myMethodIdentifiers[NUM_METHOD_IDENTIFIERS];
-static const NPUTF8 *myMethodIdentifierNames[NUM_METHOD_IDENTIFIERS] = {
- "logMessage",
- "setDoubleValue",
- "setIntValue",
- "setStringValue",
- "setBooleanValue",
- "getDoubleValue",
- "getIntValue",
- "getStringValue",
- "getBooleanValue"
-};
-
-static void initializeIdentifiers()
-{
- NPN_GetStringIdentifiers (myPropertyIdentifierNames, NUM_PROPERTY_IDENTIFIERS, myPropertyIdentifiers);
- NPN_GetStringIdentifiers (myMethodIdentifierNames, NUM_METHOD_IDENTIFIERS, myMethodIdentifiers);
-};
-
-bool myHasProperty (NPClass *theClass, NPIdentifier name)
-{
- int i;
- for (i = 0; i < NUM_PROPERTY_IDENTIFIERS; i++) {
- if (name == myPropertyIdentifiers[i]){
- return true;
- }
- }
- return false;
-}
-
-bool myHasMethod (NPClass *theClass, NPIdentifier name)
-{
- int i;
- for (i = 0; i < NUM_METHOD_IDENTIFIERS; i++) {
- if (name == myMethodIdentifiers[i]){
- return true;
- }
- }
- return false;
-}
-
-
-void logMessage (const NPVariant *message)
-{
- if (message->type == NPVariantStringType) {
- char msgBuf[1024];
- strncpy (msgBuf, message->value.stringValue.UTF8Characters, message->value.stringValue.UTF8Length);
- msgBuf[message->value.stringValue.UTF8Length] = 0;
- printf ("%s\n", msgBuf);
- }
- else if (message->type == NPVariantDoubleType)
- printf ("%f\n", (float)message->value.doubleValue);
- else if (message->type == NPVariantInt32Type)
- printf ("%d\n", message->value.intValue);
- else if (message->type == NPVariantObjectType)
- printf ("%p\n", message->value.objectValue);
-}
-
-void setDoubleValue (MyObject *obj, const NPVariant *variant)
-{
- if (!NPN_VariantToDouble (variant, &obj->doubleValue)) {
- NPUTF8 *msg = "Attempt to set double value with invalid type.";
- NPString aString;
- aString.UTF8Characters = msg;
- aString.UTF8Length = strlen (msg);
- NPN_SetException ((NPObject *)obj, &aString);
- }
-}
-
-void setIntValue (MyObject *obj, const NPVariant *variant)
-{
- if (!NPN_VariantToInt32 (variant, &obj->intValue)) {
- NPUTF8 *msg = "Attempt to set int value with invalid type.";
- NPString aString;
- aString.UTF8Characters = msg;
- aString.UTF8Length = strlen (msg);
- NPN_SetException ((NPObject *)obj, &aString);
- }
-}
-
-void setStringValue (MyObject *obj, const NPVariant *variant)
-{
- NPN_ReleaseVariantValue (&obj->stringValue);
- NPN_InitializeVariantWithVariant (&obj->stringValue, variant);
-}
-
-void setBooleanValue (MyObject *obj, const NPVariant *variant)
-{
- if (!NPN_VariantToBool (variant, (NPBool *)&obj->boolValue)) {
- NPUTF8 *msg = "Attempt to set bool value with invalid type.";
- NPString aString;
- aString.UTF8Characters = msg;
- aString.UTF8Length = strlen (msg);
- NPN_SetException ((NPObject *)obj, &aString);
- }
-}
-
-void getDoubleValue (MyObject *obj, NPVariant *variant)
-{
- NPN_InitializeVariantWithDouble (variant, obj->doubleValue);
-}
-
-void getIntValue (MyObject *obj, NPVariant *variant)
-{
- NPN_InitializeVariantWithInt32 (variant, obj->intValue);
-}
-
-void getStringValue (MyObject *obj, NPVariant *variant)
-{
- NPN_InitializeVariantWithVariant (variant, &obj->stringValue);
-}
-
-void getBooleanValue (MyObject *obj, NPVariant *variant)
-{
- NPN_InitializeVariantWithBool (variant, obj->boolValue);
-}
-
-void myGetProperty (MyObject *obj, NPIdentifier name, NPVariant *variant)
-{
- if (name == myPropertyIdentifiers[ID_DOUBLE_VALUE]){
- getDoubleValue (obj, variant);
- }
- else if (name == myPropertyIdentifiers[ID_INT_VALUE]){
- getIntValue (obj, variant);
- }
- else if (name == myPropertyIdentifiers[ID_STRING_VALUE]){
- getStringValue (obj, variant);
- }
- else if (name == myPropertyIdentifiers[ID_BOOLEAN_VALUE]){
- getBooleanValue (obj, variant);
- }
- else if (name == myPropertyIdentifiers[ID_NULL_VALUE]){
- return NPN_InitializeVariantAsNull (variant);
- }
- else if (name == myPropertyIdentifiers[ID_UNDEFINED_VALUE]){
- return NPN_InitializeVariantAsUndefined (variant);
- }
- else
- NPN_InitializeVariantAsUndefined(variant);
-}
-
-void mySetProperty (MyObject *obj, NPIdentifier name, const NPVariant *variant)
-{
- if (name == myPropertyIdentifiers[ID_DOUBLE_VALUE]) {
- setDoubleValue (obj, variant);
- }
- else if (name == myPropertyIdentifiers[ID_INT_VALUE]) {
- setIntValue (obj, variant);
- }
- else if (name == myPropertyIdentifiers[ID_STRING_VALUE]) {
- setStringValue (obj, variant);
- }
- else if (name == myPropertyIdentifiers[ID_BOOLEAN_VALUE]) {
- setBooleanValue (obj, variant);
- }
- else if (name == myPropertyIdentifiers[ID_NULL_VALUE]) {
- // Do nothing!
- }
- else if (name == myPropertyIdentifiers[ID_UNDEFINED_VALUE]) {
- // Do nothing!
- }
-}
-
-void myInvoke (MyObject *obj, NPIdentifier name, NPVariant *args, unsigned argCount, NPVariant *result)
-{
- if (name == myMethodIdentifiers[ID_LOG_MESSAGE]) {
- if (argCount == 1 && NPN_VariantIsString(&args[0]))
- logMessage (&args[0]);
- NPN_InitializeVariantAsVoid (result);
- }
- else if (name == myMethodIdentifiers[ID_SET_DOUBLE_VALUE]) {
- if (argCount == 1 && NPN_VariantIsDouble (&args[0]))
- setDoubleValue (obj, &args[0]);
- NPN_InitializeVariantAsVoid (result);
- }
- else if (name == myMethodIdentifiers[ID_SET_INT_VALUE]) {
- if (argCount == 1 && (NPN_VariantIsDouble (&args[0]) || NPN_VariantIsInt32 (&args[0])))
- setIntValue (obj, &args[0]);
- NPN_InitializeVariantAsVoid (result);
- }
- else if (name == myMethodIdentifiers[ID_SET_STRING_VALUE]) {
- if (argCount == 1 && NPN_VariantIsString (&args[0]))
- setStringValue (obj, &args[0]);
- NPN_InitializeVariantAsVoid (result);
- }
- else if (name == myMethodIdentifiers[ID_SET_BOOLEAN_VALUE]) {
- if (argCount == 1 && NPN_VariantIsBool (&args[0]))
- setBooleanValue (obj, &args[0]);
- NPN_InitializeVariantAsVoid (result);
- }
- else if (name == myMethodIdentifiers[ID_GET_DOUBLE_VALUE]) {
- getDoubleValue (obj, result);
- }
- else if (name == myMethodIdentifiers[ID_GET_INT_VALUE]) {
- getIntValue (obj, result);
- }
- else if (name == myMethodIdentifiers[ID_GET_STRING_VALUE]) {
- getStringValue (obj, result);
- }
- else if (name == myMethodIdentifiers[ID_GET_BOOLEAN_VALUE]) {
- getBooleanValue (obj, result);
- }
- else
- NPN_InitializeVariantAsUndefined (result);
-}
-
-NPObject *myAllocate ()
-{
- MyObject *newInstance = (MyObject *)malloc (sizeof(MyObject));
-
- if (!identifiersInitialized) {
- identifiersInitialized = true;
- initializeIdentifiers();
- }
-
-
- newInstance->doubleValue = 666.666;
- newInstance->intValue = 1234;
- newInstance->boolValue = true;
- newInstance->stringValue.type = NPVariantType_String;
- newInstance->stringValue.value.stringValue.UTF8Length = strlen ("Hello world");
- newInstance->stringValue.value.stringValue.UTF8Characters = strdup ("Hello world");
-
- return (NPObject *)newInstance;
-}
-
-void myInvalidate ()
-{
- // Make sure we've released any remaining references to JavaScript objects.
-}
-
-void myDeallocate (MyObject *obj)
-{
- free ((void *)obj);
-}
-
-static NPClass _myFunctionPtrs = {
- kNPClassStructVersionCurrent,
- (NPAllocateFunctionPtr) myAllocate,
- (NPDeallocateFunctionPtr) myDeallocate,
- (NPInvalidateFunctionPtr) myInvalidate,
- (NPHasMethodFunctionPtr) myHasMethod,
- (NPInvokeFunctionPtr) myInvoke,
- (NPHasPropertyFunctionPtr) myHasProperty,
- (NPGetPropertyFunctionPtr) myGetProperty,
- (NPSetPropertyFunctionPtr) mySetProperty,
-};
-static NPClass *myFunctionPtrs = &_myFunctionPtrs;
-
-// --------------------------------------------------------
-
-using namespace JSC;
-using namespace JSC::Bindings;
-
-class GlobalImp : public ObjectImp {
-public:
- virtual UString className() const { return "global"; }
-};
-
-#define BufferSize 200000
-static char code[BufferSize];
-
-const char *readJavaScriptFromFile (const char *file)
-{
- FILE *f = fopen(file, "r");
- if (!f) {
- fprintf(stderr, "Error opening %s.\n", file);
- return 0;
- }
-
- int num = fread(code, 1, BufferSize, f);
- code[num] = '\0';
- if(num >= BufferSize)
- fprintf(stderr, "Warning: File may have been too long.\n");
-
- fclose(f);
-
- return code;
-}
-
-int main(int argc, char **argv)
-{
- // expecting a filename
- if (argc < 2) {
- fprintf(stderr, "You have to specify at least one filename\n");
- return -1;
- }
-
- bool ret = true;
- {
- JSLock lock;
-
- // create interpreter w/ global object
- Object global(new GlobalImp());
- Interpreter interp;
- interp.setGlobalObject(global);
- ExecState *exec = interp.globalExec();
-
- MyObject *myObject = (MyObject *)NPN_CreateObject (myFunctionPtrs);
-
- global.put(exec, Identifier("myInterface"), Instance::createRuntimeObject(Instance::CLanguage, (void *)myObject));
-
- for (int i = 1; i < argc; i++) {
- const char *code = readJavaScriptFromFile(argv[i]);
-
- if (code) {
- // run
- Completion comp(interp.evaluate(code));
-
- if (comp.complType() == Throw) {
- Value exVal = comp.value();
- char *msg = exVal.toString(exec).ascii();
- int lineno = -1;
- if (exVal.type() == ObjectType) {
- Value lineVal = Object::dynamicCast(exVal).get(exec,Identifier("line"));
- if (lineVal.type() == NumberType)
- lineno = int(lineVal.toNumber(exec));
- }
- if (lineno != -1)
- fprintf(stderr,"Exception, line %d: %s\n",lineno,msg);
- else
- fprintf(stderr,"Exception: %s\n",msg);
- ret = false;
- }
- else if (comp.complType() == ReturnValue) {
- char *msg = comp.value().toString(interp.globalExec()).ascii();
- fprintf(stderr,"Return value: %s\n",msg);
- }
- }
- }
-
- NPN_ReleaseObject ((NPObject *)myObject);
-
- } // end block, so that Interpreter and global get deleted
-
- return ret ? 0 : 3;
-}
diff --git a/WebCore/bridge/testbindings.mm b/WebCore/bridge/testbindings.mm
deleted file mode 100644
index 31564a8..0000000
--- a/WebCore/bridge/testbindings.mm
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * Copyright (C) 2004 Apple Computer, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-
-#include "Bridge.h"
-#include <Foundation/Foundation.h>
-#include "JSObject.h"
-#include "JSValue.h"
-#import <WebKit/WebScriptObject.h>
-#include "interpreter.h"
-#include "runtime_object.h"
-#include <stdio.h>
-#include <string.h>
-#include "types.h"
-
-
-#define LOG(formatAndArgs...) { \
- fprintf (stderr, "%s: ", __PRETTY_FUNCTION__); \
- fprintf(stderr, formatAndArgs); \
-}
-
-@interface MySecondInterface : NSObject
-{
- double doubleValue;
-}
-
-- init;
-
-@end
-
-@implementation MySecondInterface
-
-- init
-{
- LOG ("\n");
- doubleValue = 666.666;
- return self;
-}
-
-@end
-
-@interface MyFirstInterface : NSObject
-{
- int myInt;
- MySecondInterface *mySecondInterface;
- id jsobject;
- NSString *string;
-}
-
-- (int)getInt;
-- (void)setInt: (int)anInt;
-- (MySecondInterface *)getMySecondInterface;
-- (void)logMessage:(NSString *)message;
-- (void)setJSObject:(id)jsobject;
-@end
-
-@implementation MyFirstInterface
-
-+ (NSString *)webScriptNameForSelector:(SEL)aSelector
-{
- if (aSelector == @selector(logMessage:))
- return @"logMessage";
- if (aSelector == @selector(logMessages:))
- return @"logMessages";
- if (aSelector == @selector(logMessage:prefix:))
- return @"logMessageWithPrefix";
- return nil;
-}
-
-+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector
-{
- return NO;
-}
-
-+ (BOOL)isKeyExcludedFromWebScript:(const char *)name
-{
- return NO;
-}
-
-/*
-- (id)invokeUndefinedMethodFromWebScript:(NSString *)name withArguments:(NSArray *)args
-{
- NSLog (@"Call to undefined method %@", name);
- NSLog (@"%d args\n", [args count]);
- int i;
- for (i = 0; i < [args count]; i++) {
- NSLog (@"%d: %@\n", i, [args objectAtIndex:i]);
- }
- return @"success";
-}
-*/
-
-/*
-- (id)valueForUndefinedKey:(NSString *)key
-{
- NSLog (@"%s: key = %@", __PRETTY_FUNCTION__, key);
- return @"aValue";
-}
-*/
-
-- (void)setValue:(id)value forUndefinedKey:(NSString *)key
-{
- NSLog (@"%s: key = %@", __PRETTY_FUNCTION__, key);
-}
-
-- init
-{
- LOG ("\n");
- mySecondInterface = [[MySecondInterface alloc] init];
- return self;
-}
-
-- (void)dealloc
-{
- LOG ("\n");
- [mySecondInterface release];
- [super dealloc];
-}
-
-- (int)getInt
-{
- LOG ("myInt = %d\n", myInt);
- return myInt;
-}
-
-- (void)setInt: (int)anInt
-{
- LOG ("anInt = %d\n", anInt);
- myInt = anInt;
-}
-
-- (NSString *)getString
-{
- return string;
-}
-
-- (MySecondInterface *)getMySecondInterface
-{
- LOG ("\n");
- return mySecondInterface;
-}
-
-- (void)logMessage:(NSString *)message
-{
- printf ("%s\n", [message lossyCString]);
-}
-
-- (void)logMessages:(id)messages
-{
- int i, count = [[messages valueForKey:@"length"] intValue];
- for (i = 0; i < count; i++)
- printf ("%s\n", [[messages webScriptValueAtIndex:i] lossyCString]);
-}
-
-- (void)logMessage:(NSString *)message prefix:(NSString *)prefix
-{
- printf ("%s:%s\n", [prefix lossyCString], [message lossyCString]);
-}
-
-- (void)setJSObject:(id)jso
-{
- [jsobject autorelease];
- jsobject = [jso retain];
-}
-
-- (void)callJSObject:(int)arg1 :(int)arg2
-{
- id foo1 = [jsobject callWebScriptMethod:@"call" withArguments:[NSArray arrayWithObjects:jsobject, [NSNumber numberWithInt:arg1], [NSNumber numberWithInt:arg2], nil]];
- printf ("foo (via call) = %s\n", [[foo1 description] lossyCString] );
- id foo2 = [jsobject callWebScriptMethod:@"apply" withArguments:[NSArray arrayWithObjects:jsobject, [NSArray arrayWithObjects:[NSNumber numberWithInt:arg1], [NSNumber numberWithInt:arg2], nil], nil]];
- printf ("foo (via apply) = %s\n", [[foo2 description] lossyCString] );
-}
-
-@end
-
-
-using namespace JSC;
-using namespace JSC::Bindings;
-
-class GlobalImp : public ObjectImp {
-public:
- virtual UString className() const { return "global"; }
-};
-
-#define BufferSize 200000
-static char code[BufferSize];
-
-const char *readJavaScriptFromFile (const char *file)
-{
- FILE *f = fopen(file, "r");
- if (!f) {
- fprintf(stderr, "Error opening %s.\n", file);
- return 0;
- }
-
- int num = fread(code, 1, BufferSize, f);
- code[num] = '\0';
- if(num >= BufferSize)
- fprintf(stderr, "Warning: File may have been too long.\n");
-
- fclose(f);
-
- return code;
-}
-
-int main(int argc, char **argv)
-{
- // expecting a filename
- if (argc < 2) {
- fprintf(stderr, "You have to specify at least one filename\n");
- return -1;
- }
-
- bool ret = true;
- {
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-
- JSLock lock;
-
- // create interpreter w/ global object
- Object global(new GlobalImp());
- Interpreter interp;
- interp.setGlobalObject(global);
- ExecState *exec = interp.globalExec();
-
- MyFirstInterface *myInterface = [[MyFirstInterface alloc] init];
-
- global.put(exec, Identifier("myInterface"), Instance::createRuntimeObject(Instance::ObjectiveCLanguage, (void *)myInterface));
-
- for (int i = 1; i < argc; i++) {
- const char *code = readJavaScriptFromFile(argv[i]);
-
- if (code) {
- // run
- Completion comp(interp.evaluate(code));
-
- if (comp.complType() == Throw) {
- Value exVal = comp.value();
- char *msg = exVal.toString(exec).ascii();
- int lineno = -1;
- if (exVal.type() == ObjectType) {
- Value lineVal = Object::dynamicCast(exVal).get(exec,Identifier("line"));
- if (lineVal.type() == NumberType)
- lineno = int(lineVal.toNumber(exec));
- }
- if (lineno != -1)
- fprintf(stderr,"Exception, line %d: %s\n",lineno,msg);
- else
- fprintf(stderr,"Exception: %s\n",msg);
- ret = false;
- }
- else if (comp.complType() == ReturnValue) {
- char *msg = comp.value().toString(interp.globalExec()).ascii();
- fprintf(stderr,"Return value: %s\n",msg);
- }
- }
- }
-
- [myInterface release];
- [pool drain];
- } // end block, so that Interpreter and global get deleted
-
- return ret ? 0 : 3;
-}
diff --git a/WebCore/bridge/testbindings.pro b/WebCore/bridge/testbindings.pro
deleted file mode 100644
index a854d4f..0000000
--- a/WebCore/bridge/testbindings.pro
+++ /dev/null
@@ -1,7 +0,0 @@
-QT -= gui
-
-include(../../WebKit.pri)
-INCLUDEPATH += .. ../ . bindings/qt
-
-SOURCES += testqtbindings.cpp
-
diff --git a/WebCore/bridge/testqtbindings.cpp b/WebCore/bridge/testqtbindings.cpp
deleted file mode 100644
index 73df155..0000000
--- a/WebCore/bridge/testqtbindings.cpp
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#include "config.h"
-
-#include "Bridge.h"
-#include "JSObject.h"
-#include "JSValue.h"
-#include "interpreter.h"
-#include "qdebug.h"
-#include "qobject.h"
-#include "runtime_object.h"
-#include "types.h"
-#include <assert.h>
-#include <stdio.h>
-#include <string.h>
-
-
-class MyObject : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QString testString READ testString WRITE setTestString)
- Q_PROPERTY(int testInt READ testInt WRITE setTestInt)
-
-public:
- MyObject() : QObject(0), integer(0){}
-
- void setTestString(const QString &str) {
- qDebug() << "called setTestString" << str;
- string = str;
- }
- void setTestInt(int i) {
- qDebug() << "called setTestInt" << i;
- integer = i;
- }
- QString testString() const {
- qDebug() << "called testString" << string;
- return string;
- }
- int testInt() const {
- qDebug() << "called testInt" << integer;
- return integer;
- }
- QString string;
- int integer;
-
-public slots:
- void foo() { qDebug() << "foo invoked"; }
-};
-
-// --------------------------------------------------------
-
-using namespace JSC;
-using namespace JSC::Bindings;
-
-class Global : public JSObject {
-public:
- virtual UString className() const { return "global"; }
-};
-
-static char code[] =
- "myInterface.foo();\n"
- "myInterface.testString = \"Hello\";\n"
- "str = myInterface.testString;\n"
- "myInterface.testInt = 10;\n"
- "i = myInterface.testInt;\n";
-
-int main(int argc, char** argv)
-{
- // expecting a filename
- bool ret = true;
- {
- JSLock lock;
-
- // create interpreter w/ global object
- Global* global = new Global();
-
- // create interpreter
- RefPtr<Interpreter> interp = new Interpreter(global);
- ExecState* exec = interp->globalExec();
-
- MyObject* myObject = new MyObject;
-
- global->put(exec, Identifier("myInterface"), Instance::createRuntimeObject(Instance::QtLanguage, (void*)myObject));
-
-
- if (code) {
- // run
- Completion comp(interp->evaluate("", 0, code));
-
- if (comp.complType() == Throw) {
- qDebug() << "exception thrown";
- JSValue* exVal = comp.value();
- char* msg = exVal->toString(exec).ascii();
- int lineno = -1;
- if (exVal->type() == ObjectType) {
- JSValue* lineVal = exVal->getObject()->get(exec, Identifier("line"));
- if (lineVal->type() == NumberType)
- lineno = int(lineVal->toNumber(exec));
- }
- if (lineno != -1)
- fprintf(stderr,"Exception, line %d: %s\n",lineno,msg);
- else
- fprintf(stderr,"Exception: %s\n",msg);
- ret = false;
- }
- else if (comp.complType() == ReturnValue) {
- char* msg = comp.value()->toString(interp->globalExec()).ascii();
- fprintf(stderr,"Return value: %s\n",msg);
- }
- }
-
- } // end block, so that Interpreter and global get deleted
-
- return ret ? 0 : 1;
-}
-
-#include "testqtbindings.moc"