diff options
author | Mikolaj Boc <mikolaj.boc@qt.io> | 2022-09-08 13:11:32 +0200 |
---|---|---|
committer | Mikolaj Boc <mikolaj.boc@qt.io> | 2022-09-09 10:12:19 +0200 |
commit | ad200d4bc3f87fb784d13afa720f22d42229fdd2 (patch) | |
tree | eb5443fc284f9770f1fcdb287441be4512583a72 /src/plugins/platforms | |
parent | 497cd38c1a9f84dada6b92dd8fe053b82ba42c8d (diff) |
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 <lorn.potter@gmail.com>
Diffstat (limited to 'src/plugins/platforms')
-rw-r--r-- | src/plugins/platforms/wasm/qwasmclipboard.cpp | 39 | ||||
-rw-r--r-- | src/plugins/platforms/wasm/qwasmclipboard.h | 2 |
2 files changed, 15 insertions, 26 deletions
diff --git a/src/plugins/platforms/wasm/qwasmclipboard.cpp b/src/plugins/platforms/wasm/qwasmclipboard.cpp index 99f3e61155..97a0547563 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(); - - // 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) + + const bool hasPermissionsApi = !val::global("navigator")["permissions"].isUndefined(); + hasClipboardApi = !clipboard.isUndefined() && !clipboard["readText"].isUndefined(); + + 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<val>("query", readPermissionsMap); - val writePermissionsMap = val::object(); - writePermissionsMap.set("name", val("clipboard-write")); - permissions.call<val>("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 ef11fd2e49..3aafb1eec8 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 |