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>
This commit is contained in:
Mikolaj Boc 2022-09-08 13:11:32 +02:00
parent 497cd38c1a
commit ad200d4bc3
2 changed files with 13 additions and 24 deletions

View File

@ -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<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)

View File

@ -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