diff options
author | Konstantin Tokarev <annulen@yandex.ru> | 2016-08-25 19:20:41 +0300 |
---|---|---|
committer | Konstantin Tokarev <annulen@yandex.ru> | 2017-02-02 12:30:55 +0000 |
commit | 6882a04fb36642862b11efe514251d32070c3d65 (patch) | |
tree | b7959826000b061fd5ccc7512035c7478742f7b0 /Source/WebCore/bridge/qt/qt_runtime.cpp | |
parent | ab6df191029eeeb0b0f16f127d553265659f739e (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.cpp | 56 |
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; } |