diff --git a/src/corelib/platform/wasm/qstdweb.cpp b/src/corelib/platform/wasm/qstdweb.cpp index e58447db1a..a085e53f63 100644 --- a/src/corelib/platform/wasm/qstdweb.cpp +++ b/src/corelib/platform/wasm/qstdweb.cpp @@ -68,6 +68,11 @@ uint32_t ArrayBuffer::byteLength() const return m_arrayBuffer["byteLength"].as(); } +emscripten::val ArrayBuffer::val() +{ + return m_arrayBuffer; +} + Blob::Blob(const emscripten::val &blob) :m_blob(blob) { @@ -85,7 +90,7 @@ Blob Blob::copyFrom(const char *buffer, uint32_t size) Uint8Array contentCopy = Uint8Array::copyFrom(buffer, size); emscripten::val contentArray = emscripten::val::array(); - contentArray.call("push", contentCopy.m_uint8Array); + contentArray.call("push", contentCopy.val()); emscripten::val type = emscripten::val::object(); type.set("type","application/octet-stream"); return Blob(emscripten::val::global("Blob").new_(contentArray, type)); @@ -172,6 +177,11 @@ std::string File::type() const return m_file["type"].as(); } +emscripten::val File::val() +{ + return m_file; +} + FileList::FileList(const emscripten::val &fileList) :m_fileList(fileList) { @@ -218,6 +228,11 @@ void FileReader::onAbort(const std::function &onAbort) m_onAbort.reset(new EventCallback(m_fileReader, "abort", onAbort)); } +emscripten::val FileReader::val() +{ + return m_fileReader; +} + Uint8Array Uint8Array::heap() { return Uint8Array(heap_()); @@ -293,6 +308,11 @@ Uint8Array Uint8Array::copyFrom(const char *buffer, uint32_t size) return contentCopy; } +emscripten::val Uint8Array::val() +{ + return m_uint8Array; +} + emscripten::val Uint8Array::heap_() { return emscripten::val::module_property("HEAPU8"); diff --git a/src/corelib/platform/wasm/qstdweb_p.h b/src/corelib/platform/wasm/qstdweb_p.h index 5b134621f4..3b6e4aa968 100644 --- a/src/corelib/platform/wasm/qstdweb_p.h +++ b/src/corelib/platform/wasm/qstdweb_p.h @@ -62,6 +62,8 @@ namespace qstdweb { // DOM API in C++, implemented using emscripten val.h and bind.h. // This is private API and can be extended and changed as needed. + // The API mirrors that of the native API, with some extensions + // to ease usage from C++ code. class ArrayBuffer; class Blob; @@ -76,6 +78,7 @@ namespace qstdweb { explicit ArrayBuffer(uint32_t size); explicit ArrayBuffer(const emscripten::val &arrayBuffer); uint32_t byteLength() const; + emscripten::val val(); private: friend class Uint8Array; @@ -106,6 +109,7 @@ namespace qstdweb { std::string type() const; void stream(uint32_t offset, uint32_t length, char *buffer, const std::function &completed) const; void stream(char *buffer, const std::function &completed) const; + emscripten::val val(); private: emscripten::val m_file = emscripten::val::undefined(); @@ -119,6 +123,7 @@ namespace qstdweb { int length() const; File item(int index) const; File operator[](int index) const; + emscripten::val val(); private: emscripten::val m_fileList = emscripten::val::undefined(); @@ -132,6 +137,7 @@ namespace qstdweb { void onLoad(const std::function &onLoad); void onError(const std::function &onError); void onAbort(const std::function &onAbort); + emscripten::val val(); private: emscripten::val m_fileReader = emscripten::val::global("FileReader").new_(); @@ -156,8 +162,9 @@ namespace qstdweb { void copyTo(char *destination) const; static void copy(char *destination, const Uint8Array &source); static Uint8Array copyFrom(const char *buffer, uint32_t size); + emscripten::val val(); + private: - friend class Blob; static emscripten::val heap_(); static emscripten::val constructor_(); emscripten::val m_uint8Array = emscripten::val::undefined(); @@ -173,6 +180,7 @@ namespace qstdweb { EventCallback(emscripten::val element, const std::string &name, const std::function &fn); static void activate(emscripten::val event); + private: static std::string contextPropertyName(const std::string &eventName); emscripten::val m_element = emscripten::val::undefined();