Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qstdweb_p.h
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QSTDWEB_P_H
5#define QSTDWEB_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <private/qglobal_p.h>
19#include <QtCore/qglobal.h>
20#include "QtCore/qhash.h"
21
22#include <emscripten/val.h>
23
24#include <cstdint>
25#include <functional>
26#include <initializer_list>
27#include <memory>
28#include <string>
29#include <utility>
30
32
33class QMimeData;
34
35namespace qstdweb {
36 extern const char makeContextfulPromiseFunctionName[];
37
38 // DOM API in C++, implemented using emscripten val.h and bind.h.
39 // This is private API and can be extended and changed as needed.
40 // The API mirrors that of the native API, with some extensions
41 // to ease usage from C++ code.
42
43 class ArrayBuffer;
44 class Blob;
45 class File;
46 class FileList;
47 class FileReader;
48 class Uint8Array;
49 class EventCallback;
50
51 class Q_CORE_EXPORT ArrayBuffer {
52 public:
53 explicit ArrayBuffer(uint32_t size);
54 explicit ArrayBuffer(const emscripten::val &arrayBuffer);
55 uint32_t byteLength() const;
56 emscripten::val val();
57
58 private:
59 friend class Uint8Array;
60 emscripten::val m_arrayBuffer = emscripten::val::undefined();
61 };
62
63 class Q_CORE_EXPORT Blob {
64 public:
65 explicit Blob(const emscripten::val &blob);
66 uint32_t size() const;
67 static Blob copyFrom(const char *buffer, uint32_t size, std::string mimeType);
68 static Blob copyFrom(const char *buffer, uint32_t size);
69 emscripten::val val();
70 std::string type() const;
71
72 private:
73 friend class FileReader;
74 emscripten::val m_blob = emscripten::val::undefined();
75 };
76
77 class Q_CORE_EXPORT File {
78 public:
79 File() = default;
80 explicit File(const emscripten::val &file);
81
82 Blob slice(uint64_t begin, uint64_t end) const;
83 std::string name() const;
84 uint64_t size() const;
85 std::string type() const;
86 void stream(uint32_t offset, uint32_t length, char *buffer,
87 std::function<void()> completed) const;
88 void stream(char *buffer, std::function<void()> completed) const;
89 emscripten::val val();
90
91 private:
92 emscripten::val m_file = emscripten::val::undefined();
93 };
94
95 class Q_CORE_EXPORT FileList {
96 public:
97 FileList() = default;
98 explicit FileList(const emscripten::val &fileList);
99
100 int length() const;
101 File item(int index) const;
102 File operator[](int index) const;
103 emscripten::val val() const;
104
105 private:
106 emscripten::val m_fileList = emscripten::val::undefined();
107 };
108
109 class Q_CORE_EXPORT FileReader {
110 public:
111 ArrayBuffer result() const;
112 void readAsArrayBuffer(const Blob &blob) const;
113
114 void onLoad(const std::function<void(emscripten::val)> &onLoad);
115 void onError(const std::function<void(emscripten::val)> &onError);
116 void onAbort(const std::function<void(emscripten::val)> &onAbort);
117 emscripten::val val();
118
119 private:
120 emscripten::val m_fileReader = emscripten::val::global("FileReader").new_();
121 std::unique_ptr<EventCallback> m_onLoad;
122 std::unique_ptr<EventCallback> m_onError;
123 std::unique_ptr<EventCallback> m_onAbort;
124 };
125
126 class Q_CORE_EXPORT Uint8Array {
127 public:
128 static Uint8Array heap();
129 explicit Uint8Array(const emscripten::val &uint8Array);
130 explicit Uint8Array(const ArrayBuffer &buffer);
131 explicit Uint8Array(uint32_t size);
132 Uint8Array(const ArrayBuffer &buffer, uint32_t offset, uint32_t length);
133 Uint8Array(const char *buffer, uint32_t size);
134
135 ArrayBuffer buffer() const;
136 uint32_t length() const;
137 void set(const Uint8Array &source);
138
139 void copyTo(char *destination) const;
140 QByteArray copyToQByteArray() const;
141
142 static void copy(char *destination, const Uint8Array &source);
143 static Uint8Array copyFrom(const char *buffer, uint32_t size);
144 static Uint8Array copyFrom(const QByteArray &buffer);
145 emscripten::val val();
146
147 private:
148 static emscripten::val heap_();
149 static emscripten::val constructor_();
150 emscripten::val m_uint8Array = emscripten::val::undefined();
151 };
152
153 class Q_CORE_EXPORT EventCallback
154 {
155 public:
156 EventCallback() = default;
158 EventCallback(EventCallback const&) = delete;
160 EventCallback(emscripten::val element, const std::string &name,
161 const std::function<void(emscripten::val)> &fn);
162 static void activate(emscripten::val event);
163
164 private:
165 static std::string contextPropertyName(const std::string &eventName);
166 emscripten::val m_element = emscripten::val::undefined();
167 std::string m_eventName;
168 std::function<void(emscripten::val)> m_fn;
169 };
170
172 {
173 std::function<void(emscripten::val)> thenFunc;
174 std::function<void(emscripten::val)> catchFunc;
175 std::function<void()> finallyFunc;
176 };
177
178 namespace Promise {
179 void Q_CORE_EXPORT adoptPromise(emscripten::val promise, PromiseCallbacks callbacks);
180
181 template<typename... Args>
182 void make(emscripten::val target,
185 Args... args)
186 {
187 emscripten::val promiseObject = target.call<emscripten::val>(
188 methodName.toStdString().c_str(), std::forward<Args>(args)...);
189 if (promiseObject.isUndefined() || promiseObject["constructor"]["name"].as<std::string>() != "Promise") {
190 qFatal("This function did not return a promise");
191 }
192
193 adoptPromise(std::move(promiseObject), std::move(callbacks));
194 }
195
196 void Q_CORE_EXPORT all(std::vector<emscripten::val> promises, PromiseCallbacks callbacks);
197 };
198
199 template<class F>
200 decltype(auto) bindForever(F wrappedCallback)
201 {
202 return wrappedCallback;
203 }
204
205 inline emscripten::val window()
206 {
207 static emscripten::val savedWindow = emscripten::val::global("window");
208 return savedWindow;
209 }
210
211 bool haveAsyncify();
212 bool haveJspi();
213
215 {
216 };
217
218 Q_CORE_EXPORT std::shared_ptr<CancellationFlag>
219 readDataTransfer(emscripten::val webObject, std::function<QVariant(QByteArray)> imageReader,
220 std::function<void(std::unique_ptr<QMimeData>)> onDone);
221}
222
224
225#endif
\inmodule QtCore
Definition qbytearray.h:57
\inmodule QtCore
Definition qmimedata.h:16
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
std::string toStdString() const
Returns a std::string object with the data contained in this QString.
Definition qstring.h:1319
\inmodule QtCore
Definition qvariant.h:64
EventCallback(EventCallback const &)=delete
EventCallback & operator=(EventCallback const &)=delete
FileList()=default
File()=default
Combined button and popup list for selecting options.
void make(emscripten::val target, QString methodName, PromiseCallbacks callbacks, Args... args)
Definition qstdweb_p.h:182
void adoptPromise(emscripten::val promiseObject, PromiseCallbacks callbacks)
Definition qstdweb.cpp:802
void all(std::vector< emscripten::val > promises, PromiseCallbacks callbacks)
Definition qstdweb.cpp:809
emscripten::val window()
Definition qstdweb_p.h:205
std::shared_ptr< CancellationFlag > readDataTransfer(emscripten::val webDataTransfer, std::function< QVariant(QByteArray)> imageReader, std::function< void(std::unique_ptr< QMimeData >)> onDone)
Definition qstdweb.cpp:868
bool haveAsyncify()
Definition qstdweb.cpp:855
bool haveJspi()
Definition qstdweb.cpp:861
const char makeContextfulPromiseFunctionName[]
decltype(auto) bindForever(F wrappedCallback)
Definition qstdweb_p.h:200
static jboolean copy(JNIEnv *, jobject)
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char * destination
static QString methodName(const QDBusIntrospection::Method &method)
EGLStreamKHR stream
const char * mimeType
#define qFatal
Definition qlogging.h:164
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLuint index
[2]
GLuint GLuint end
GLenum GLuint GLenum GLsizei length
GLenum GLuint buffer
GLenum type
GLenum target
GLenum GLuint GLintptr offset
GLuint name
GLsizei GLsizei GLchar * source
struct _cl_event * event
GLuint GLfloat * val
GLuint64EXT * result
[6]
QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator begin(const QRegularExpressionMatchIterator &iterator)
PromiseCallbacks callbacks
Definition qstdweb.cpp:270
QFuture< QSet< QChar > > set
[10]
QFile file
[0]
QGraphicsItem * item
QJSValueList args
std::function< void(emscripten::val)> thenFunc
Definition qstdweb_p.h:173
std::function< void()> finallyFunc
Definition qstdweb_p.h:175
std::function< void(emscripten::val)> catchFunc
Definition qstdweb_p.h:174