Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1572)

Unified Diff: third_party/WebKit/WebCore/bridge/qt/qt_runtime.cpp

Issue 20076: WebKit merge 40500:40539 [WebKit side] (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/WebCore/bridge/qt/qt_runtime.cpp
===================================================================
--- third_party/WebKit/WebCore/bridge/qt/qt_runtime.cpp (revision 9118)
+++ third_party/WebKit/WebCore/bridge/qt/qt_runtime.cpp (working copy)
@@ -24,7 +24,9 @@
#include "DateMath.h"
#include "DatePrototype.h"
#include "FunctionPrototype.h"
+#include "Interpreter.h"
#include "JSArray.h"
+#include "JSByteArray.h"
#include "JSDOMBinding.h"
#include "JSGlobalObject.h"
#include "JSLock.h"
@@ -95,7 +97,8 @@
QObj,
Object,
Null,
- RTArray
+ RTArray,
+ JSByteArray
} JSRealType;
#if defined(QTWK_RUNTIME_CONVERSION_DEBUG) || defined(QTWK_RUNTIME_MATCH_DEBUG)
@@ -120,6 +123,8 @@
return Boolean;
else if (val.isNull())
return Null;
+ else if (exec->interpreter()->isJSByteArray(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++
@@ -190,6 +195,9 @@
case QObj:
hint = QMetaType::QObjectStar;
break;
+ case JSByteArray:
+ hint = QMetaType::QByteArray;
+ break;
case Array:
case RTArray:
hint = QMetaType::QVariantList;
@@ -425,12 +433,18 @@
}
case QMetaType::QByteArray: {
- UString ustring = value.toString(exec);
- ret = QVariant(QString::fromUtf16((const ushort*)ustring.rep()->data(),ustring.size()).toLatin1());
- if (type == String)
- dist = 5;
- else
- dist = 10;
+ 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::fromUtf16((const ushort*)ustring.rep()->data(),ustring.size()).toLatin1());
+ if (type == String)
+ dist = 5;
+ else
+ dist = 10;
+ }
break;
}
@@ -822,9 +836,10 @@
}
if (type == QMetaType::QByteArray) {
- QByteArray ba = variant.value<QByteArray>();
- UString ustring(ba.constData());
- return jsString(exec, ustring);
+ QByteArray qtByteArray = variant.value<QByteArray>();
+ WTF::RefPtr<WTF::ByteArray> wtfByteArray = WTF::ByteArray::create(qtByteArray.length());
+ qMemCopy(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) {

Powered by Google App Engine
This is Rietveld 408576698