From ad200d4bc3f87fb784d13afa720f22d42229fdd2 Mon Sep 17 00:00:00 2001 From: Mikolaj Boc Date: Thu, 8 Sep 2022 13:11:32 +0200 Subject: [PATCH] Don't browser-sniff to detect the permissions API Instead, unconditionally attempt to query for the required permissions and catch the exception if those are missing. Also, removed some unused variables taking part in the browser-sniff calculation. Fixes: QTBUG-105129 Change-Id: I7b96d0ba78109ad59dffb23ec9e618836bf826fc Reviewed-by: Lorn Potter --- src/plugins/platforms/wasm/qwasmclipboard.cpp | 35 +++++++------------ src/plugins/platforms/wasm/qwasmclipboard.h | 2 -- 2 files changed, 13 insertions(+), 24 deletions(-) diff --git a/src/plugins/platforms/wasm/qwasmclipboard.cpp b/src/plugins/platforms/wasm/qwasmclipboard.cpp index 99f3e611556..97a0547563c 100644 --- a/src/plugins/platforms/wasm/qwasmclipboard.cpp +++ b/src/plugins/platforms/wasm/qwasmclipboard.cpp @@ -149,21 +149,11 @@ QWasmClipboard::QWasmClipboard() : m_isListener(false) { val clipboard = val::global("navigator")["clipboard"]; - val permissions = val::global("navigator")["permissions"]; - val hasInstallTrigger = val::global("window")["InstallTrigger"]; - hasPermissionsApi = !permissions.isUndefined(); - hasClipboardApi = (!clipboard.isUndefined() && !clipboard["readText"].isUndefined()); - bool isFirefox = !hasInstallTrigger.isUndefined(); - isSafari = !emscripten::val::global("window")["safari"].isUndefined(); + const bool hasPermissionsApi = !val::global("navigator")["permissions"].isUndefined(); + hasClipboardApi = !clipboard.isUndefined() && !clipboard["readText"].isUndefined(); - // firefox has clipboard API if user sets these config tweaks: - // dom.events.asyncClipboard.clipboardItem true - // dom.events.asyncClipboard.read true - // dom.events.testing.asyncClipboard - // and permissions API, but does not currently support - // the clipboardRead and clipboardWrite permissions - if (hasClipboardApi && hasPermissionsApi && !isFirefox) + if (hasClipboardApi && hasPermissionsApi) initClipboardPermissions(); } @@ -214,17 +204,18 @@ void QWasmClipboard::qWasmClipboardPaste(QMimeData *mData) void QWasmClipboard::initClipboardPermissions() { - if (!hasClipboardApi) - return; - val permissions = val::global("navigator")["permissions"]; - val readPermissionsMap = val::object(); - readPermissionsMap.set("name", val("clipboard-read")); - permissions.call("query", readPermissionsMap); - val writePermissionsMap = val::object(); - writePermissionsMap.set("name", val("clipboard-write")); - permissions.call("query", writePermissionsMap); + qstdweb::Promise::make(permissions, "query", { .catchFunc = [](emscripten::val) {} }, ([]() { + val readPermissionsMap = val::object(); + readPermissionsMap.set("name", val("clipboard-read")); + return readPermissionsMap; + })()); + qstdweb::Promise::make(permissions, "query", { .catchFunc = [](emscripten::val) {} }, ([]() { + val readPermissionsMap = val::object(); + readPermissionsMap.set("name", val("clipboard-write")); + return readPermissionsMap; + })()); } void QWasmClipboard::installEventHandlers(const emscripten::val &canvas) diff --git a/src/plugins/platforms/wasm/qwasmclipboard.h b/src/plugins/platforms/wasm/qwasmclipboard.h index ef11fd2e49f..3aafb1eec85 100644 --- a/src/plugins/platforms/wasm/qwasmclipboard.h +++ b/src/plugins/platforms/wasm/qwasmclipboard.h @@ -30,12 +30,10 @@ public: void initClipboardPermissions(); void installEventHandlers(const emscripten::val &canvas); bool hasClipboardApi; - bool hasPermissionsApi; void writeToClipboardApi(); void writeToClipboard(const QMimeData *data); bool isPaste; bool m_isListener; - bool isSafari; }; QT_END_NAMESPACE