summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/bridge/qt/qt_runtime.cpp
diff options
context:
space:
mode:
authorKonstantin Tokarev <annulen@yandex.ru>2016-08-25 19:20:41 +0300
committerKonstantin Tokarev <annulen@yandex.ru>2017-02-02 12:30:55 +0000
commit6882a04fb36642862b11efe514251d32070c3d65 (patch)
treeb7959826000b061fd5ccc7512035c7478742f7b0 /Source/WebCore/bridge/qt/qt_runtime.cpp
parentab6df191029eeeb0b0f16f127d553265659f739e (diff)
Imported QtWebKit TP3 (git b57bc6801f1876c3220d5a4bfea33d620d477443)
Change-Id: I3b1d8a2808782c9f34d50240000e20cb38d3680f Reviewed-by: Konstantin Tokarev <annulen@yandex.ru>
Diffstat (limited to 'Source/WebCore/bridge/qt/qt_runtime.cpp')
-rw-r--r--Source/WebCore/bridge/qt/qt_runtime.cpp56
1 files changed, 34 insertions, 22 deletions
diff --git a/Source/WebCore/bridge/qt/qt_runtime.cpp b/Source/WebCore/bridge/qt/qt_runtime.cpp
index 58259ff3e..ae0c7e907 100644
--- a/Source/WebCore/bridge/qt/qt_runtime.cpp
+++ b/Source/WebCore/bridge/qt/qt_runtime.cpp
@@ -21,7 +21,6 @@
#include "qt_runtime.h"
#include "APICast.h"
-#include "APIShims.h"
#include "BooleanObject.h"
#include "DateInstance.h"
#include "DatePrototype.h"
@@ -104,14 +103,15 @@ typedef enum {
QObj,
Object,
Null,
- RTUint8Array
+ RTUint8Array,
+ RTUint8ClampedArray
} JSRealType;
#if defined(QTWK_RUNTIME_CONVERSION_DEBUG) || defined(QTWK_RUNTIME_MATCH_DEBUG)
QDebug operator<<(QDebug dbg, const JSRealType &c)
{
const char *map[] = { "Variant", "Number", "Boolean", "RTString", "Date",
- "Array", "RTObject", "Object", "Null"};
+ "Array", "RTObject", "Object", "Null", "RTUint8Array", "RTUint8ClampedArray"};
dbg.nospace() << "JSType(" << ((int)c) << ", " << map[c] << ")";
@@ -148,22 +148,27 @@ void registerCustomType(int qtMetaTypeId, ConvertToVariantFunction toVariantFunc
static bool isJSUint8Array(JSObjectRef object)
{
- return toJS(object)->inherits(&JSUint8Array::s_info);
+ return toJS(object)->inherits(JSUint8Array::info());
+}
+
+static bool isJSUint8ClampedArray(JSObjectRef object)
+{
+ return toJS(object)->inherits(JSUint8ClampedArray::info());
}
static bool isJSArray(JSObjectRef object)
{
- return toJS(object)->inherits(&JSArray::s_info);
+ return toJS(object)->inherits(JSArray::info());
}
static bool isJSDate(JSObjectRef object)
{
- return toJS(object)->inherits(&DateInstance::s_info);
+ return toJS(object)->inherits(DateInstance::info());
}
static bool isQtObject(JSObjectRef object)
{
- return toJS(object)->inherits(&RuntimeObject::s_info);
+ return toJS(object)->inherits(RuntimeObject::info());
}
static JSRealType valueRealType(JSContextRef context, JSValueRef value, JSValueRef* exception)
@@ -183,6 +188,8 @@ static JSRealType valueRealType(JSContextRef context, JSValueRef value, JSValueR
if (isJSUint8Array(object))
return RTUint8Array;
+ if (isJSUint8ClampedArray(object))
+ return RTUint8ClampedArray;
if (isJSArray(object))
return Array;
if (isJSDate(object))
@@ -201,13 +208,13 @@ static QString toString(JSStringRef stringRef)
static JSValueRef unwrapBoxedPrimitive(JSContextRef context, JSValueRef value, JSObjectRef obj)
{
ExecState* exec = toJS(context);
- APIEntryShim entryShim(exec);
+ JSLockHolder locker(exec);
JSObject* object = toJS(obj);
- if (object->inherits(&NumberObject::s_info))
+ if (object->inherits(NumberObject::info()))
return toRef(exec, jsNumber(object->toNumber(exec)));
- if (object->inherits(&StringObject::s_info))
+ if (object->inherits(StringObject::info()))
return toRef(exec, object->toString(exec));
- if (object->inherits(&BooleanObject::s_info))
+ if (object->inherits(BooleanObject::info()))
return toRef(exec, object->toPrimitive(exec));
return value;
}
@@ -283,7 +290,7 @@ static QString toQString(JSContextRef context, JSValueRef value)
static void getGregorianDateTimeUTC(JSContextRef context, JSRealType type, JSValueRef value, JSObjectRef object, JSValueRef* exception, GregorianDateTime* gdt)
{
ExecState* exec = toJS(context);
- APIEntryShim entryShim(exec);
+ JSLockHolder locker(exec);
if (type == Date) {
JSObject* jsObject = toJS(object);
DateInstance* date = asDateInstance(jsObject);
@@ -291,7 +298,7 @@ static void getGregorianDateTimeUTC(JSContextRef context, JSRealType type, JSVal
} else {
double ms = JSValueToNumber(context, value, exception);
GregorianDateTime convertedGdt;
- msToGregorianDateTime(exec, ms, /*utc*/ true, convertedGdt);
+ msToGregorianDateTime(exec->vm(), ms, WTF::UTCTime, convertedGdt);
gdt->copyFrom(convertedGdt);
}
}
@@ -360,6 +367,7 @@ QVariant convertValueToQVariant(JSContextRef context, JSValueRef value, QMetaTyp
hint = QMetaType::QObjectStar;
break;
case RTUint8Array:
+ case RTUint8ClampedArray:
hint = QMetaType::QByteArray;
break;
case Array:
@@ -494,7 +502,11 @@ QVariant convertValueToQVariant(JSContextRef context, JSValueRef value, QMetaTyp
case QMetaType::QByteArray: {
if (type == RTUint8Array) {
- WTF::Uint8Array* arr = toUint8Array(toJS(toJS(context), value));
+ RefPtr<JSC::Uint8Array> arr = toUint8Array(toJS(toJS(context), value));
+ ret = QVariant(QByteArray(reinterpret_cast<const char*>(arr->data()), arr->length()));
+ dist = 0;
+ } else if (type == RTUint8ClampedArray) {
+ RefPtr<JSC::Uint8ClampedArray> arr = toUint8ClampedArray(toJS(toJS(context), value));
ret = QVariant(QByteArray(reinterpret_cast<const char*>(arr->data()), arr->length()));
dist = 0;
} else {
@@ -729,10 +741,10 @@ JSValueRef convertQVariantToValue(JSContextRef context, PassRefPtr<RootObject> r
if (type == QMetaType::QByteArray) {
QByteArray qtByteArray = variant.value<QByteArray>();
- WTF::RefPtr<WTF::Uint8ClampedArray> wtfByteArray = WTF::Uint8ClampedArray::createUninitialized(qtByteArray.length());
+ WTF::RefPtr<JSC::Uint8ClampedArray> wtfByteArray = JSC::Uint8ClampedArray::createUninitialized(qtByteArray.length());
memcpy(wtfByteArray->data(), qtByteArray.constData(), qtByteArray.length());
ExecState* exec = toJS(context);
- APIEntryShim entryShim(exec);
+ JSLockHolder locker(exec);
return toRef(exec, toJS(exec, static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), wtfByteArray.get()));
}
@@ -741,7 +753,7 @@ JSValueRef convertQVariantToValue(JSContextRef context, PassRefPtr<RootObject> r
if (!obj)
return JSValueMakeNull(context);
ExecState* exec = toJS(context);
- APIEntryShim entryShim(exec);
+ JSLockHolder locker(exec);
return toRef(exec, QtInstance::getQtInstance(obj, root, QtInstance::QtOwnership)->createRuntimeObject(exec));
}
@@ -749,14 +761,14 @@ JSValueRef convertQVariantToValue(JSContextRef context, PassRefPtr<RootObject> r
return QtPixmapRuntime::toJS(context, variant, exception);
if (customRuntimeConversions()->contains(type)) {
- if (!root->globalObject()->inherits(&JSDOMWindow::s_info))
+ if (!root->globalObject()->inherits(JSDOMWindow::info()))
return JSValueMakeUndefined(context);
- Document* document = (static_cast<JSDOMWindow*>(root->globalObject()))->impl()->document();
+ Document* document = JSDOMWindow::toWrapped(root->globalObject())->document();
if (!document)
return JSValueMakeUndefined(context);
ExecState* exec = toJS(context);
- APIEntryShim entryShim(exec);
+ JSLockHolder locker(exec);
return toRef(exec, customRuntimeConversions()->value(type).toJSValueFunc(exec, toJSDOMGlobalObject(document, exec), variant));
}
@@ -807,7 +819,7 @@ JSValueRef convertQVariantToValue(JSContextRef context, PassRefPtr<RootObject> r
JSObjectRef array = JSObjectMakeArray(context, 0, 0, exception);
RefPtr<RootObject> rootRef(root); // We need a real reference, since PassRefPtr may only be passed on to one call.
ExecState* exec = toJS(context);
- APIEntryShim entryShim(exec);
+ JSLockHolder locker(exec);
for (int i = 0; i < ol.count(); ++i) {
JSValueRef jsObject = toRef(exec, QtInstance::getQtInstance(ol.at(i), rootRef, QtInstance::QtOwnership)->createRuntimeObject(exec));
JSObjectSetPropertyAtIndex(context, array, i, jsObject, /*ignored exception*/0);
@@ -1302,7 +1314,7 @@ JSObjectRef QtRuntimeMethod::jsObjectRef(JSContextRef context, JSValueRef* excep
JSObjectSetProperty(context, object, connectStr, connectFunction, attributes, exception);
JSObjectSetProperty(context, object, disconnectStr, disconnectFunction, attributes, exception);
- m_jsObject = PassWeak<JSObject>(toJS(object));
+ m_jsObject = Weak<JSObject>(toJS(object));
return object;
}