From 44ebb170ffebe66cdb041c70fc7226df34892147 Mon Sep 17 00:00:00 2001 From: Ming Rui Zhang <mingrui.zhang@savoirfairelinux.com> Date: Mon, 4 Jan 2021 15:39:10 -0500 Subject: [PATCH] messagewebview: add support for pasting and drafting js special characters Note: it will also prevent potential js template literal Gitlab: #250 Gitlab: #246 Change-Id: Ic925a18ae768d168b8e340f9e05ef6ddd0260c84 --- src/mainview/components/MessageWebView.qml | 10 ++++++++++ src/messagesadapter.cpp | 8 ++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/mainview/components/MessageWebView.qml b/src/mainview/components/MessageWebView.qml index c749eb522..f68392daf 100644 --- a/src/mainview/components/MessageWebView.qml +++ b/src/mainview/components/MessageWebView.qml @@ -43,6 +43,10 @@ Rectangle { signal messagesCleared signal messagesLoaded + function setSendMessageContent(content) { + jsBridgeObject.setSendMessageContentRequest(content) + } + function focusMessageWebView() { messageWebView.forceActiveFocus() } @@ -140,6 +144,10 @@ Rectangle { // ID, under which this object will be known at chatview.js side. WebChannel.id: "jsbridge" + // signals to trigger functions in chatview.js + // mainly used to avoid input arg string escape + signal setSendMessageContentRequest(string content) + // Functions that are exposed, return code can be derived from js side // by setting callback function. function deleteInteraction(arg) { @@ -240,6 +248,8 @@ Rectangle { settings.javascriptEnabled: true settings.javascriptCanOpenWindows: true + settings.javascriptCanAccessClipboard: true + settings.javascriptCanPaste: true settings.fullScreenSupportEnabled: true settings.allowRunningInsecureContent: true settings.localContentCanAccessRemoteUrls: true diff --git a/src/messagesadapter.cpp b/src/messagesadapter.cpp index 819285bd3..d085f57b6 100644 --- a/src/messagesadapter.cpp +++ b/src/messagesadapter.cpp @@ -421,10 +421,11 @@ MessagesAdapter::pasteKeyDetected() } } } else { + // Treat as text content, make chatview.js handle in order to + // avoid string escape problems QMetaObject::invokeMethod(qmlObj_, "webViewRunJavaScript", - Q_ARG(QVariant, - QStringLiteral("replaceText(`%1`)").arg(mimeData->text()))); + Q_ARG(QVariant, QStringLiteral("replaceText()"))); } } @@ -640,8 +641,7 @@ MessagesAdapter::removeInteraction(uint64_t interactionId) void MessagesAdapter::setSendMessageContent(const QString& content) { - QString s = QString::fromLatin1("setSendMessageContent(`%1`);").arg(content); - QMetaObject::invokeMethod(qmlObj_, "webViewRunJavaScript", Q_ARG(QVariant, s)); + QMetaObject::invokeMethod(qmlObj_, "setSendMessageContent", Q_ARG(QVariant, content)); } void -- GitLab