diff --git a/libraries/script-engine/src/ScriptManagerScriptingInterface.cpp b/libraries/script-engine/src/ScriptManagerScriptingInterface.cpp index 8c2d2799f3..36da99b751 100644 --- a/libraries/script-engine/src/ScriptManagerScriptingInterface.cpp +++ b/libraries/script-engine/src/ScriptManagerScriptingInterface.cpp @@ -125,3 +125,11 @@ void ScriptManagerScriptingInterface::removeServerEntityScriptMessagesRequest(co _manager->engine()->raiseException("Uuid must not be specified when removeServerEntityScriptMessagesRequest is invoked from entity script"); } } + +QString ScriptManagerScriptingInterface::btoa(const QByteArray &binary) { + return binary.toBase64(); +} + +QByteArray ScriptManagerScriptingInterface::atob(const QString &base64) { + return QByteArray::fromBase64(base64.toUtf8()); +} diff --git a/libraries/script-engine/src/ScriptManagerScriptingInterface.h b/libraries/script-engine/src/ScriptManagerScriptingInterface.h index c1d6bad360..d319cd30ae 100644 --- a/libraries/script-engine/src/ScriptManagerScriptingInterface.h +++ b/libraries/script-engine/src/ScriptManagerScriptingInterface.h @@ -581,6 +581,22 @@ public: Q_INVOKABLE void removeServerEntityScriptMessagesRequest(); Q_INVOKABLE void removeServerEntityScriptMessagesRequest(const QUuid& entityID); + /*@jsdoc + * This decodes Base64 string and returns contents as ArrayBuffer. + * @function Script.atob + * @param {String} base64 - String with Base64-encoded binary data. + * @returns {ArrayBuffer} Decoded binary data. + */ + Q_INVOKABLE QByteArray atob(const QString &base64); + + /*@jsdoc + * This encodes ArrayBuffer and returns Base64-encoded string. + * @function Script.btoa + * @param {ArrayBuffer} binary - Data to be encoded. + * @returns {String} String with Base64-encoded binary data. + */ + Q_INVOKABLE QString btoa(const QByteArray &binary); + signals: /*@jsdoc diff --git a/libraries/script-engine/src/v8/FastScriptValueUtils.cpp b/libraries/script-engine/src/v8/FastScriptValueUtils.cpp index f111fe39d8..d1545e60cb 100644 --- a/libraries/script-engine/src/v8/FastScriptValueUtils.cpp +++ b/libraries/script-engine/src/v8/FastScriptValueUtils.cpp @@ -55,7 +55,7 @@ bool qBytearrayFromScriptValue(const ScriptValue& object, QByteArray &qByteArray if(!v8Value->IsArrayBuffer()) { return false; } - v8::Local arrayBuffer; + v8::Local arrayBuffer = v8::Local::Cast(v8Value); qByteArray.resize(arrayBuffer->ByteLength()); memcpy(qByteArray.data(), arrayBuffer->Data(), arrayBuffer->ByteLength()); return true;